Source code for qlauncher.routines.qiskit.mitigation_suppression.base

 1from abc import ABC, abstractmethod
 2from types import UnionType
 3from typing import TYPE_CHECKING
 4
 5from qiskit import QuantumCircuit
 6from qiskit.quantum_info import SparsePauliOp
 7
 8from qlauncher.base import Backend
 9from qlauncher.routines.circuits import CIRCUIT_FORMATS
10
11if TYPE_CHECKING:
12    from qlauncher.routines.qiskit import QiskitBackend
13
14
[docs] 15class CircuitModificationMethod(ABC): 16 """Method that relies only on modifying the input circuit""" 17
[docs] 18 @abstractmethod 19 def modify_circuit(self, circuit: QuantumCircuit) -> QuantumCircuit: 20 pass
21 22
[docs] 23class CircuitExecutionMethod(ABC): 24 """Method that relies on executing multiple modified versions of the circuit""" 25 26 compatible_circuit: type | UnionType 27
[docs] 28 @abstractmethod 29 def sample(self, circuit: CIRCUIT_FORMATS, backend: Backend, shots: int = 1024) -> dict[str, int]: 30 """ 31 Sample circuit on the backend. 32 33 Args: 34 circuit (QuantumCircuit): Circuit to run. 35 backend (QiskitBackend): Backend to run on. 36 shots (int, optional): Number of samples to collect. Defaults to 1024. 37 38 Returns: 39 dict[str,int]: Bitstring counts. 40 """ 41 pass
42
[docs] 43 @abstractmethod 44 def estimate(self, circuit: QuantumCircuit, observable: SparsePauliOp, backend: 'QiskitBackend') -> float: 45 """ 46 Estimate energy of observable after running a given circuit on the backend. 47 48 Args: 49 circuit (QuantumCircuit): Circuit to run. 50 observable (SparsePauliOp): Observable to estimate. 51 backend (QiskitBackend): Backend to use. 52 53 Returns: 54 float: Estimated energy of the observable. 55 """ 56 pass