qiskit_noise_learning.gate_sets.QiskitGateSet
class qiskit_noise_learning.gate_sets.QiskitGateSet(num_qubits: int | None = None, *, target: Target | None = None, qubit_subset: Iterable[int] | None = None, add_default_spam: bool = True, name: str | None = None, latex_str: str | None = None)
Bases : GateSet[QiskitGate]
Un ensemble de portes dont le bruit doit être appris et qui est défini à l'aide d'objets Qiskit.
Ici, nous utilisons le terme « porte » dans le contexte de l'apprentissage du bruit, où les opérations qui nous intéressent ne sont généralement pas les plus petites opérations exécutées de manière discrète sur un dispositif (telles que les portes cz ), mais plutôt des ensembles de ces opérations dont le bruit sera appris globalement, comme une seule entité. Pour aller droit au but, en général, dans ce cours, les portes sont des couches. Ce n'est toutefois pas obligatoire; les couches de largeur partielle et les couches comportant des opérations qui se chevauchent sont valides. Nous avons besoin que cet objet représente un ensemble de ces éléments, car dans certains cas, leur bruit doit être appris conjointement afin de définir une mesure cohérente entre leurs modèles de bruit, ou pour permettre la corrélation des paramétrisations de leurs modèles de bruit.
Cet objet respecte le protocole de mappage « Python », ce qui permet, par exemple, d'extraire des portes à l'aide de la syntaxe du dictionnaire. Les noms des portes sont toujours des chaînes de caractères.
>>> from qiskit_noise_learning.gate_sets import QiskitGateSet
>>> from qiskit.circuit import QuantumCircuit
>>> # instantiate a new gate set on 10 qubits
>>> gate_set = QiskitGateSet(10)
>>> # the gate set comes populated with preparation and measurement gates on all 10 qubits
>>> assert len(gate_set) == 2
>>> assert "P" in gate_set and "M" in gate_setParamètres
- num_qubits – Nombre de qubits dont dispose le QPU concerné. Si a
targetest fourni, ce champ peut être omis. - cible – Un paramètre facultatif
Targetpar rapport auquel les opérations seront validées chaque fois que des portes seront ajoutées à l'ensemble de portes. Le nombre de qubits doit correspondrenum_qubitssi les deux sont présents. - qubit_subset – Un sous-ensemble de
range(num_qubits)définissant la zone d'intérêt du QPU. Toutes les portes ajoutées doivent fonctionner dans ce sous-ensemble. Par défaut, contient tous les qubits. - add_default_spam – Indique s’il faut initialiser l’ensemble de portes avec des portes qui mettent respectivement en œuvre la préparation d’état (nom donné
"P") et la mesure d’état (nom donné"M") sur tous les qubits de la région d’intérêt. - nom – Nom attribué à cet ensemble de portes. Si
None,nameon revient au nom de la classe. - latex_str – Chaîne de caractères facultative de type « LaTeX » pour le rendu de cet ensemble de portes.
__init__
__init__(num_qubits: int | None = None, *, target: Target | None = None, qubit_subset: Iterable[int] | None = None, add_default_spam: bool = True, name: str | None = None, latex_str: str | None = None)
Méthodes
Chronique « 1 » | Chronique « 2 » |
|---|---|
__init__([num_qubits, target, qubit_subset, ...]) | |
add_box_as_gate(box_instr, *[, name, latex_str]) | Ajoutez une instruction de circuit Qiskit contenant une opération « box » en tant que porte logique. |
add_circuit_as_gate(circuit[, qubit_idxs, ...]) | Ajouter un objet « circuit quantique » en tant que porte. |
add_gate(portail) | Ajouter une porte à l'ensemble de portes. |
add_measurement(qubit_idxs, type_d'opération,...) | Ajoutez à cet ensemble de portes une porte qui mesure les qubits spécifiés. |
add_preparation([qubit_idxs, annotations, ...]) | Ajoutez une porte à cet ensemble de portes qui prépare (ou réinitialise) les qubits spécifiés. |
build_new_gate([name, idle_unused, latex_str]) | Renvoie un générateur de circuits dont le contenu sera ajouté en tant que porte logique. |
draw() | Dessinez la topologie du dispositif en utilisant un code couleur par porte. |
get(k[,d]) | |
items() | |
keys() | |
values() |
Attributs
Chronique « 1 » | Chronique « 2 » |
|---|---|
label | Une chaîne de caractères destinée à être utilisée dans les légendes des tracés. |
latex_str | Une chaîne « LaTeX » pour cet ensemble de portails. |
math_label | Une étiquette sous forme de chaîne destinée à être utilisée dans le mode mathématique de LaTeX. |
model_gate_set | Le modèle de cet ensemble de portails. |
name | Nom de cet ensemble de portes; par défaut, il s'agit du nom de la classe. |
num_qubits | Le nombre total de qubits du dispositif sur lequel agit cet ensemble de portes. |
qubit_subset | Les indices du sous-ensemble de qubits du dispositif sur lesquels agissent toutes les portes. |
target | La cible de cet ensemble de portes, s'il y en a une. |
model_gate_set
Type : ModelGateSet
Le modèle de cet ensemble de portails.
target
add_gate
add_gate(gate: QiskitGate)
Ajouter une porte à l'ensemble de portes.
>>> from qiskit_noise_learning.gate_sets import QiskitGateSet, QiskitGate
>>> from qiskit.circuit import QuantumCircuit
>>> gate_set = QiskitGateSet(10)
>>> circuit = QuantumCircuit(5)
>>> circuit.cx(3, 4)
>>> gate_set.add_gate(QiskitGate("gate0", circuit, [4, 5, 7, 8, 9]))
>>> assert "gate0" in gate_setParamètres
porte – La porte à ajouter.
Augmentations
ValueError : si la porte agit sur des qubits situés en dehors de la plage valide, si cet ensemble de portes comporte une cible et qu'une des portes qui le composent ne s'y conforme pas, ou si le nom est déjà utilisé dans l'ensemble de portes.
add_box_as_gate
add_box_as_gate(box_instr: CircuitInstruction, *, name: str | None = None, latex_str: str | None = None) → str
Ajoutez une instruction de circuit Qiskit contenant une opération « box » en tant que porte logique.
>>> from qiskit_noise_learning.gate_sets import QiskitGateSet, QiskitGate
>>> from qiskit.circuit import QuantumCircuit
>>> gate_set = QiskitGateSet(10)
>>> circuit = QuantumCircuit(10)
>>> with circuit.box():
... circuit.cx(3, 4)
... # use noop to indicate that only the first 7 qubits will be part of the gate,
... # otherwise it would be restricted to only qubits 3 and 4, and learned noise
... # will only be with respect to those two qubits
... circuit.noop(range(7))
>>> name = gate_set.add_box_as_gate(circuit[0])
>>> assert name in gate_setParamètres
- box_instr – Instruction de circuit contenant une opération de type « box ».
- nom – Le nom de la porte, ou
Nonepour qu'un nom vous soit attribué automatiquement. - latex_str – Chaîne de caractères facultative de type « LaTeX » pour cette porte.
Retours
Le nom de la porte ajoutée.
Augmentations
ValueError : si l'instruction fournie ne contient pas d'opération qiskit.circuit.BoxOp , ou si l'instruction porte sur des qubits non physiques.
add_circuit_as_gate
add_circuit_as_gate(circuit: QuantumCircuit, qubit_idxs: Iterable[int] | None = None, *, annotations: Iterable[Annotation] | None = None, name: str | None = None, latex_str: str | None = None) → str
Ajouter un objet « circuit quantique » en tant que porte.
Cette méthode est une fine couche d'abstraction add_gate() qui construit un QiskitGate à votre place.
>>> from qiskit_noise_learning.gate_sets import QiskitGateSet, QiskitGate
>>> from qiskit.circuit import QuantumCircuit
>>> gate_set = QiskitGateSet(10)
>>> circuit = QuantumCircuit(5)
>>> circuit.cx(3, 4)
>>> name = gate_set.add_circuit_as_gate(circuit, [4, 5, 7, 8, 9])
>>> assert name in gate_setCes éléments n'ont circuit.qubits absolument aucun rapport avec le sujet et ne représentent pas, par exemple, des qubits physiques. Au contraire, cette correspondance fournit dict(zip(circuit.qubits, qubit_idxs)) la « recette » permettant de déterminer à quels qubits physiques correspond chaque qubit du circuit.
Paramètres
- circuit – Le circuit à utiliser comme porte logique.
- qubit_idxs – Les qubits physiques sur lesquels agit le circuit.
- annotations – Les annotations qui décrivent comment mettre en œuvre le circuit, ou
Noneutiliser les annotations par défaut deQiskitGate. - nom – Le nom de la porte, ou
Nonepour qu'un nom vous soit attribué automatiquement. - latex_str – Chaîne de caractères facultative de type « LaTeX » pour cette porte.
Retours
Le nom de la porte ajoutée.
build_new_gate
build_new_gate(name: str | None = None, idle_unused: bool = True, latex_str: str | None = None) → GateBuilder
Renvoie un générateur de circuits dont le contenu sera ajouté en tant que porte logique.
>>> from qiskit_noise_learning.gate_sets import QiskitGateSet, QiskitGate
>>> from qiskit.circuit import QuantumCircuit
>>> gate_set = QiskitGateSet(10)
>>> with gate_set.build_new_gate() as builder:
... builder.circuit.cx(4, 5)
>>> assert builder.name in gate_set
>>> assert set(gate_set[builder.name].qubit_idxs) == set(range(10))Paramètres
- nom – Le nom de la porte, ou
Nonepour qu'un nom vous soit attribué automatiquement. - idle_unused – Indique si tous les qubits qui
qubit_subsetne font pas déjà partie de la porte seront automatiquement considérés comme des qubits inactifs. - latex_str – Chaîne de caractères facultative de type « LaTeX » pour cette porte.
Retours
Un concepteur de circuits.
add_measurement
add_measurement(qubit_idxs: Iterable[int] | None = None, operation_type: type[Operation] = <class 'qiskit.circuit.measure.Measure'>, *, annotations: Iterable[Annotation] | None = None, name: str | None = None, latex_str: str | None = None) → str
Ajoutez à cet ensemble de portes une porte qui mesure les qubits spécifiés.
Paramètres
- qubit_idxs – Les indices des qubits physiques à mesurer, dans l'ordre dans lequel ils sont convertis en bits classiques. Par défaut, la région d'intérêt est classée par ordre croissant.
- operation_type – Le type d'opération de mesure à appliquer à chaque qubit.
- annotations – Les annotations qui décrivent comment mettre en œuvre la mesure, ou
Noneutiliser les annotations par défaut deQiskitGate. - nom – Le nom de la porte, ou
Nonepour qu'un nom vous soit attribué automatiquement. - latex_str – Chaîne de caractères facultative de type « LaTeX » pour cette porte.
Retours
Le nom de la porte ajoutée.
add_preparation
add_preparation(qubit_idxs: Iterable[int] | None = None, *, annotations: Iterable[Annotation] | None = None, name: str | None = None, latex_str: str | None = None) → str
Ajoutez une porte à cet ensemble de portes qui prépare (ou réinitialise) les qubits spécifiés.
Paramètres
- qubit_idxs – Les indices des qubits physiques à préparer.
- annotations – Les annotations qui décrivent comment mettre en œuvre la préparation, ou
Noneutiliser les annotations par défaut deQiskitGate. - nom – Le nom de la porte, ou
Nonepour qu'un nom vous soit attribué automatiquement. - latex_str – Chaîne de caractères facultative de type « LaTeX » pour cette porte.
Retours
Le nom de la porte ajoutée.