UnitarySynthesisPlugin
class qiskit.transpiler.passes.synthesis.plugin.UnitarySynthesisPlugin
Bases : ABC
Classe de plugin de synthèse unitaire abstraite
Cette classe abstraite définit l'interface des plugins de synthèse unitaire.
Attributs
max_qubits
Retourne le nombre maximum de qubits pris en charge par le plugin de synthèse unitaire.
Si la taille de l'unité à synthétiser dépasse cette valeur, le plugin default sera utilisé. S'il n'y a pas de limite supérieure, il renvoie None et tous les unitaires (>= min_qubits s'il est défini) seront transmis à ce plugin lorsqu'il sera activé.
min_qubits
Retourne le nombre minimum de qubits pris en charge par le plugin de synthèse unitaire.
Si la taille de l'unité à synthétiser est inférieure à cette valeur, le plugin default sera utilisé. S'il n'y a pas de limite inférieure, il renvoie None et tous les unitaires (<= max_qubits s'il est défini) seront transmis à ce plugin lorsqu'il sera activé.
supported_bases
Retourne un dictionnaire des bases prises en charge pour la synthèse
Cette fonction est censée renvoyer un dictionnaire dont la clé est une chaîne de base et la valeur une liste de noms de portes dans lesquelles la base fonctionne. Si la méthode de synthèse ne prend pas en charge les bases multiples, elle doit renvoyer None. Par exemple :
{
"XZX": ["rz", "rx"],
"XYX": ["rx", "ry"],
}Si un dictionnaire est renvoyé par cette méthode, les kwargs d'exécution se verront passer un paramètre matched_basis qui contient une liste des chaînes de base (c'est-à-dire les clés du dictionnaire) qui correspondent à l'ensemble de portes de base cible pour la transpilation. Si aucune entrée du dictionnaire ne correspond à l'ensemble de portes de base cible, le kwarg matched_basis sera défini comme une liste vide, et un plugin peut choisir comment traiter l'ensemble de portes de base cible qui ne correspond pas aux capacités du plugin.
supports_basis_gates
Retourne si le plugin supporte la prise en charge de basis_gates
Si le résultat est True , la méthode run() du plugin recevra un kwarg basis_gates contenant une liste de noms de portes que le backend cible prend en charge. Par exemple, ['sx', 'x', 'cx', 'id', 'rz'].
supports_coupling_map
Retourne si le plugin supporte la prise en charge de coupling_map
Si le résultat est True , la méthode run() du plugin recevra un kwarg coupling_map. Le kwarg coupling_map sera défini comme un tuple dont le premier élément est un objet CouplingMap représentant la connectivité des qubits du backend cible, le second élément étant une liste d'entiers représentant les indices des qubits dans la carte de couplage sur laquelle se trouve l'unité. Notez que si le backend cible n'a pas de carte de couplage définie, la valeur du kwarg coupling_map sera (None, qubit_indices).
supports_gate_errors
Retourne si le plugin supporte la prise en charge de gate_errors
gate_errors sera un dictionnaire sous la forme de {gate_name: {(qubit_1, qubit_2): error}}. Par exemple :
{
'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126},
'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07}
}Notez que ce dictionnaire peut ne pas être complet ou être vide, car il dépend du fait que le backend cible signale les erreurs de porte sur chaque porte pour chaque qubit. Les taux d'erreur de porte indiqués à l'adresse gate_errors sont fournis par l'objet du dispositif cible Backend et la signification exacte peut varier en fonction du backend.
supports_gate_errors_by_qubit
Retourne si le plugin supporte la prise en charge de gate_errors_by_qubit
Elle diffère de supports_gate_errors/gate_errors par l'utilisation d'une vue différente des mêmes données. Au lieu d'une clé par nom de porte, cette clé est une clé par qubit et utilise des instances pour représenter les portes (au lieu des noms de portes) Gate pour représenter les portes (au lieu des noms de portes).
gate_errors_by_qubit sera un dictionnaire sous la forme de {(qubits,): [Gate, error]}. Par exemple :
{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}Notez que ce dictionnaire peut ne pas être complet ou être vide, car il dépend du fait que le backend cible signale les erreurs de porte sur chaque porte pour chaque qubit. Les taux d'erreur de porte indiqués à l'adresse gate_errors sont fournis par l'objet du dispositif cible Backend et la signification exacte peut varier en fonction du backend.
La valeur par défaut est False
supports_gate_lengths
Retourne si le plugin supporte la prise en charge de gate_lengths
gate_lengths sera un dictionnaire sous la forme de {gate_name: {(qubit_1, qubit_2): length}}. Par exemple :
{
'sx': {(0,): 0.0006149355812506126, (1,): 0.0006149355812506126},
'cx': {(0, 1): 0.012012477900732316, (1, 0): 5.191111111111111e-07}
}où la valeur length est exprimée en secondes.
Notez que ce dictionnaire peut ne pas être complet ou être vide, car il dépend de la façon dont le backend cible indique les longueurs de porte pour chaque porte et chaque qubit.
supports_gate_lengths_by_qubit
Retourne si le plugin supporte la prise en charge de gate_lengths_by_qubit
Elle diffère de supports_gate_lengths/gate_lengths par l'utilisation d'une vue différente des mêmes données. Au lieu d'une clé par nom de porte, il s'agit d'une clé par qubit et les instances sont utilisées pour représenter les portes (au lieu des noms de portes) Gate pour représenter les portes (au lieu des noms de portes)
gate_lengths_by_qubit sera un dictionnaire sous la forme de {(qubits,): [Gate, length]}. Par exemple :
{
(0,): [SXGate(): 0.0006149355812506126, RZGate(): 0.0],
(0, 1): [CXGate(): 0.012012477900732316]
}où la valeur length est exprimée en secondes.
Notez que ce dictionnaire peut ne pas être complet ou être vide, car il dépend de la façon dont le backend cible indique les longueurs de porte pour chaque porte et chaque qubit.
La valeur par défaut est False
supports_natural_direction
Retourne si le plugin supporte une bascule pour considérer la directionnalité des portes à 2 qubits comme natural_direction.
Reportez-vous à la documentation de UnitarySynthesis pour connaître les valeurs possibles et la signification de ces valeurs.
supports_pulse_optimize
Retourne si le plugin supporte une bascule pour optimiser les impulsions pendant la synthèse comme pulse_optimize.
Reportez-vous à la documentation de UnitarySynthesis pour connaître les valeurs possibles et la signification de ces valeurs.
supports_target
Si le plugin prend en charge l'option target
target sera un objet Target représentant l'appareil cible pour la sortie de la passe de synthèse.
Par défaut, il s'agit de False puisque l'interface du plugin est antérieure à la classe Target . Si un plugin renvoie True pour cet attribut, on s'attend à ce que le plugin utilise le paramètre Target au lieu des valeurs transmises si l'un des paramètres supports_gate_lengths, supports_gate_errors, supports_coupling_map, et supports_basis_gates est défini (bien que, dans l'idéal, tous ces paramètres devraient contenir des informations en double).
Méthodes
run
abstractmethod run(unitary, **options)
Exécuter la synthèse pour la matrice unitaire donnée
Paramètres
- unitary (numpy.ndarray) – La matrice unitaire à synthétiser dans un
DAGCircuitobjet - options - Les kwargs optionnels qui sont transmis en fonction de la sortie des méthodes
support_*sur la classe. Reportez-vous à la documentation de ces méthodes surUnitarySynthesisPluginpour connaître les clés et les valeurs.
Retours
La représentation du circuit dag de l'unité. Vous pouvez également renvoyer un tuple de la forme (dag, wires) où dag est la représentation du circuit dag de la représentation du circuit de l'unité et wires est le fil de mappage à utiliser pour qiskit.dagcircuit.DAGCircuit.substitute_node_with_dag(). Si vous renvoyez un tuple et que wires est None , le comportement sera le même que si vous ne renvoyiez qu'un tuple DAGCircuit était retourné. De plus, si ce retour se fait à l'adresse None , aucune substitution ne sera effectuée.
Type de retour