Skip to main content
IBM Quantum Platform

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)

GitHub

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_set

Paramètres

  • num_qubits – Nombre de qubits dont dispose le QPU concerné. Si a target est fourni, ce champ peut être omis.
  • cible – Un paramètre facultatif Target par 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 correspondre num_qubits si 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, name on 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 »
labelUne chaîne de caractères destinée à être utilisée dans les légendes des tracés.
latex_strUne chaîne « LaTeX » pour cet ensemble de portails.
math_labelUne étiquette sous forme de chaîne destinée à être utilisée dans le mode mathématique de LaTeX.
model_gate_setLe modèle de cet ensemble de portails.
nameNom de cet ensemble de portes; par défaut, il s'agit du nom de la classe.
num_qubitsLe nombre total de qubits du dispositif sur lequel agit cet ensemble de portes.
qubit_subsetLes indices du sous-ensemble de qubits du dispositif sur lesquels agissent toutes les portes.
targetLa 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

Type : Target | None

La cible de cet ensemble de portes, s'il y en a une.

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_set

Paramè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_set

Paramètres

  • box_instr – Instruction de circuit contenant une opération de type « box ».
  • nom – Le nom de la porte, ou None pour 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_set
Remarque

Ces é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 None utiliser les annotations par défaut de QiskitGate.
  • nom – Le nom de la porte, ou None pour 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 None pour qu'un nom vous soit attribué automatiquement.
  • idle_unused – Indique si tous les qubits qui qubit_subset ne 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 None utiliser les annotations par défaut de QiskitGate.
  • nom – Le nom de la porte, ou None pour 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 None utiliser les annotations par défaut de QiskitGate.
  • nom – Le nom de la porte, ou None pour 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.

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.