TranspileLayout
class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)
Bases : object
Attributs de mise en page pour le circuit de sortie du transpondeur.
La transpiler préserve l'unité à l'exception des permutations correspondant à la « disposition initiale » et à la « disposition finale ». La permutation initiale de la mise en page résulte de la définition et de l'application de la mise en page initiale au cours de l 'étape de mise en page. La permutation finale de la disposition est due à SwapGate une insertion effectuée lors de la phase de routage. Cette classe fournit une interface permettant d'analyser ces permutations à l'aide de diverses méthodes d'aide.
Au cours de la phase de mise en page, le transpileur peut éventuellement modifier l'ordre des qubits dans le circuit pour l'adapter au backend cible. Par exemple, le circuit d'entrée est le suivant
from qiskit.circuit import QuantumCircuit, QuantumRegister
qr = QuantumRegister(3, name="MyReg")
qc = QuantumCircuit(qr)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)
qc.draw("mpl")
Supposons qu'au cours de la phase de mise en page, le transpondeur réorganise les qubits de manière à ce qu'ils soient :
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.cx(2, 0)
qc.draw("mpl")
La sortie de la méthode initial_virtual_layout() est équivalente à :
Layout({
qr[0]: 2,
qr[1]: 1,
qr[2]: 0,
})(C'est également cet attribut dans les éléments QuantumCircuit.draw() et circuit_drawer() qui sert à afficher la correspondance entre les qubits et les positions dans les visualisations de circuits après la transpilation).
Sur la base de l'exemple précédent, supposons qu'au cours de l'étape de routage, le transpondeur doive insérer des portes de permutation, et que le circuit de sortie devienne :
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.swap(0, 1)
qc.cx(2, 1)
qc.draw("mpl")
La sortie de la méthode routing_permutation() est la suivante :
[1, 0, 2]qui établit une correspondance entre les positions des qubits avant le routage et leurs positions finales après le routage.
Trois attributs publics sont associés à la classe, mais ils sont essentiellement fournis à des fins de rétrocompatibilité et représentent l'état interne du transpondeur. Ils sont définis comme suit :
initial_layout- Cet attribut sert à modéliser la permutation provoquée par l 'étape « Mise en page ». Il s'agit d'unLayoutobjet qui associe les objets deQubitla listeQuantumCircuitd'entrée à leur position dans la liste de sortieQuantumCircuit.qubits.input_qubit_mapping- Cet attribut sert à conserver l'ordre d'entrée de l'objet d'origineQuantumCircuit. Elle associe l'objet virtuelQubitdu circuit d'origine (etinitial_layout) à sa position correspondante dansQuantumCircuit.qubitsle circuit d'origine. Cela est nécessaire pour calculer la permutation du circuitOperator(et est utilisé parOperator.from_circuit()).final_layout- Cet attribut sert à modéliser la permutation provoquée par l 'étape de routage. Il s'agit d'unLayoutobjet qui met en correspondance les qubits du circuit de sortie, tels qu'ilsQuantumCircuit.qubitsapparaissent dans ce circuit, avec leurs positions finales après acheminement. Il est important de noter que cela ne représente que la permutation résultant de l'insertionSwapGatede s dans leQuantumCircuitlors de l 'étape de routage. Il ne s'agit pas d'une correspondance entre la position du circuit d'entrée d'origine et la position finale à la fin du circuit transpilé. Si vous en avez besoin, vous pouvez utiliser lefinal_index_layout()pour le générer. Sifinal_layoutest défini surNone, cela indique que le routage n’a pas été exécuté, et peut être considéré comme équivalent à une configuration triviale avec les qubits issus de la liste duqubitscircuit de sortie.
Attributs
Paramètres
- initial_layout (Layout)
- input_qubit_mapping (dict[Qubit, int])
- final_layout (Layout | None)
- _input_qubit_count (int | None)
- _output_qubit_list (list[Qubit] | None)
final_layout
initial_layout
Type : Layout
input_qubit_mapping
Méthodes
final_index_layout
final_index_layout(filter_ancillas=True)
Génère la disposition finale sous la forme d'un tableau d'entiers.
Cette méthode génère un tableau de positions finales pour chaque qubit du circuit d'entrée. Par exemple, si vous avez un circuit d'entrée comme :
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)et la sortie du transpileur était :
tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)alors la méthode final_index_layout() est renvoyée :
[2, 0, 1]Cela se traduit de la manière suivante. Le qubit 0 du circuit d'origine est mis en correspondance avec le qubit 2 du circuit de sortie au cours de l'étape d'implantation, qui est mis en correspondance avec le qubit 2 au cours de l'étape de routage. Le qubit 1 du circuit d'origine est mis en correspondance avec le qubit 1 du circuit de sortie lors de l'étape de mise en page, qui est mis en correspondance avec le qubit 0 lors de l'étape de routage. Le quubit 2 du circuit original est mappé au qubit 0 du circuit de sortie lors de l'étape d'implantation, qui est mappé au qubit 1 lors de l'étape de routage. La longueur de la liste de sortie sera aussi grande que le nombre de qubits du circuit d'entrée, car la liste de sortie de cette méthode sert à suivre la permutation des qubits dans le circuit d'origine causée par le transpileur.
Paramètres
filter_ancillas (bool) – Si la valeur est fixée à False , tous les ancillas alloués dans le circuit de sortie seront inclus dans la mise en page.
Retours
Une liste de positions finales pour chaque qubit du circuit d'entrée.
Type de retour
final_virtual_layout
final_virtual_layout(filter_ancillas=True)
Générer la mise en page finale sous la forme d'un Layout objet.
Cette méthode génère un tableau de positions finales pour chaque qubit du circuit d'entrée. Par exemple, si vous avez un circuit d'entrée comme :
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)et la sortie du transpileur était :
tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)le retour de cette fonction sera un objet de mise en page :
Layout({
qc.qubits[0]: 2,
qc.qubits[1]: 0,
qc.qubits[2]: 1,
})Cela se traduit de la manière suivante. Le qubit 0 du circuit d'origine est mis en correspondance avec le qubit 2 du circuit de sortie au cours de l'étape d'implantation, qui est mis en correspondance avec le qubit 2 au cours de l'étape de routage. Le qubit 1 du circuit d'origine est mis en correspondance avec le qubit 1 du circuit de sortie lors de l'étape de mise en page, qui est mis en correspondance avec le qubit 0 lors de l'étape de routage. Le quubit 2 du circuit original est mappé au qubit 0 du circuit de sortie lors de l'étape d'implantation, qui est mappé au qubit 1 lors de l'étape de routage. La longueur de la liste de sortie sera aussi grande que le nombre de qubits du circuit d'entrée, car la liste de sortie de cette méthode sert à suivre la permutation des qubits dans le circuit d'origine causée par le transpileur.
Paramètres
filter_ancillas (bool) – Si la valeur est fixée à False , tous les ancillas alloués dans le circuit de sortie seront inclus dans la mise en page.
Retours
Un objet de disposition correspondant aux positions finales de chaque qubit.
Type de retour
from_property_set
classmethod from_property_set(dag, property_set)
Construisez le TranspileLayout en lisant les champs de la liste donnée PropertySet. Renvoie None s'il n'y a pas de clés de configuration présentes.
Il s'agit notamment de combiner les différentes clés de l'ensemble des propriétés pour obtenir l'ensemble complet des dispositions initiales et finales, y compris les permutations virtuelles.
Cela n'invalide ni ne modifie en aucune façon l'ensemble de propriétés donné. Afin de "canoniser" l'ensemble de propriétés par la suite, appelez write_into_property_set().
Il lit les clés suivantes de l'ensemble des propriétés :
layout
Obligatoire. L'objet Layout est un objet qui associe des qubits virtuels (éventuellement complétés par des ancillas) à des indices de qubits physiques. Cela correspond directement à initial_layout.
Dans le cadre d'une utilisation standard, ce champ est obligatoire. Cependant, si virtual_permutation_layout est défini, une disposition "triviale" sera déduite, même si le circuit n'est pas réellement disposé au niveau matériel. Il s'agit là d'une limitation regrettable du modèle de données de cette classe, où il n'est pas possible de spécifier une permutation finale sans disposer également d'une disposition initiale. Cette lacune sera corrigée dans Qiskit 3.0.
original_qubit_indices
Requis (mais automatiquement défini par le PassManager). Le mappage {virtual: index} qui indique l'indice relatif de chaque qubit virtuel entrant dans le circuit d'entrée. Cela peut être étendu aux ancillas également (dans ce cas, les indices d'ancillas ne signifient pas grand-chose, puisqu'ils n'étaient pas dans le circuit entrant).
num_input_qubits
Requis (mais automatiquement défini par le PassManager). Le nombre de qubits virtuels explicites dans le circuit d'entrée (c'est-à-dire sans les ancillas implicites).
final_layout
Facultatif. La permutation finale effective, en termes de qubits actuels de l'ensemble des qubits de l'ensemble des qubits de l'ensemble des qubits, est la suivante DAGCircuit. Cela correspond directement à final_layout.
virtual_permutation_layout
Facultatif. Ce paramètre est défini par certaines passes d'optimisation exécutées avant la sélection de la mise en page, telles que ElidePermutations. Elle est similaire dans l'esprit à final_layout, mais ne s'applique généralement qu'aux qubits virtuels d'entrée.
Cet objet utilise la convention de permutation inverse par final_layout rapport à celle de Qiskit, en raison d'une erreur commise lors de son introduction dans Qiskit. En d'autres termes, virtual_permutation_layout cette fonction associe une Qubit instance située à la fin du circuit à son indice entier au début du circuit.
Paramètres
- dag (DAGCircuit) – l'état actuel du
DAGCircuit. - property_set (PropertySet) – l'ensemble des propriétés du transpondeur actuel. La clé
layoutdoit au moins être activée.
Type de retour
TranspileLayout | Aucun
initial_index_layout
initial_index_layout(filter_ancillas=False)
Génère une disposition initiale sous la forme d'un tableau d'entiers.
Paramètres
filter_ancillas (bool) – S'il est fixé à True , les qubits ancillaires ajoutés au transpileur ne seront pas inclus dans la sortie.
Retours
Un tableau d'agencement qui fait correspondre une position dans le tableau à sa nouvelle position dans le circuit de sortie.
Type de retour
initial_virtual_layout
initial_virtual_layout(filter_ancillas=False)
Renvoyer un objet Layout pour la disposition initiale.
Cette fonction renvoie une correspondance entre les objets virtuels Qubit du circuit d'entrée et les positions des qubits physiques sélectionnés lors de la conception. Cela est analogue à l'attribut initial_layout .
Paramètres
filter_ancillas (bool) – S'il est fixé à True , seuls les qubits du circuit d'entrée figureront dans la disposition renvoyée. Les qubits ancillaires ajoutés au circuit de sortie seront filtrés de l'objet retourné.
Retours
Un objet de disposition qui met en correspondance les objets du Qubit circuit d'entrée avec les positions des qubits physiques sélectionnés.
Type de retour
routing_permutation
routing_permutation()
Génère une disposition finale sous forme de tableau d'entiers.
Si aucun attribut final_layout n'est présent, cela indique qu'il n'y a pas eu de permutation de sortie causée par le routage ou d'autres transformations du transpondeur. Dans ce cas, la fonction renvoie une liste de [0, 1, 2, .., n].
Retours
Un tableau d'agencement qui fait correspondre une position dans le tableau à sa nouvelle position dans le circuit de sortie.
Type de retour
write_into_property_set
write_into_property_set(property_set)
déballez ce schéma dans la forme libre de contraintes du site property_set.
Il s'agit de la méthode inverse de from_property_set().
Elle écrit toujours les clés de définition des propriétés suivantes, en les écrasant si elles ont déjà été définies :
layout
Correspond directement à initial_layout.
original_qubit_indices
Correspond directement à input_qubit_mapping.
final_layout
Correspond directement à final_layout. Notez qu'il peut ne pas être identique au final_layout d'avant un appel à from_property_set()car les effets de virtual_permutation_layout y auront été combinés.
virtual_permutation_layout
Supprimé de l'ensemble des propriétés; TranspileLayout "finalise" les multiples permutations séparées en une seule permutation, afin de conserver la forme canonique.
En outre, les clés suivantes sont mises à jour, si le fichier TranspileLayout a une valeur connue pour elles. Dans le cas contraire, ils sont laissés tels quels pour gérer les cas où cette classe a été construite manuellement sans définir certains champs facultatifs.
num_input_qubits
Le nombre de qubits virtuels non-ancilla dans le circuit d'entrée.
Paramètres
property_set (dict[str, object]) – les PropertySet (ou général dict) dans lequel la sortie doit être écrite. L'entrée est ainsi modifiée sur place.