Skip to main content
IBM Quantum Platform

TranspileLayout

class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)

GitHub

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")
Schéma de circuit produit par le code précédent.

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")
Schéma de circuit produit par le code précédent.

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")
Schéma de circuit produit par le code précédent.

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'un Layout objet qui associe les objets de Qubit la liste QuantumCircuit d'entrée à leur position dans la liste de sortie QuantumCircuit.qubits .
  • input_qubit_mapping - Cet attribut sert à conserver l'ordre d'entrée de l'objet d'origine QuantumCircuit . Elle associe l'objet virtuel Qubit du circuit d'origine (et initial_layout) à sa position correspondante dans QuantumCircuit.qubits le circuit d'origine. Cela est nécessaire pour calculer la permutation du circuit Operator (et est utilisé par Operator.from_circuit()).
  • final_layout - Cet attribut sert à modéliser la permutation provoquée par l 'étape de routage. Il s'agit d'un Layout objet qui met en correspondance les qubits du circuit de sortie, tels qu'ils QuantumCircuit.qubits apparaissent 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'insertion SwapGatede s dans le QuantumCircuit lors 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 le final_index_layout() pour le générer. Si final_layout est défini sur None, 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 du qubits circuit de sortie.

Attributs

Paramètres

final_layout

Type : Layout | None

Valeur par défaut : None

initial_layout

Type : Layout

input_qubit_mapping

Type : dict[Qubit, int]


Méthodes

final_index_layout

final_index_layout(filter_ancillas=True)

GitHub

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

liste [ int ]

final_virtual_layout

final_virtual_layout(filter_ancillas=True)

GitHub

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

Mise en page

from_property_set

classmethod from_property_set(dag, property_set)

GitHub

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.

Remarque

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.

Avertissement

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é layout doit au moins être activée.

Type de retour

TranspileLayout | Aucun

initial_index_layout

initial_index_layout(filter_ancillas=False)

GitHub

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

liste [ int ]

initial_virtual_layout

initial_virtual_layout(filter_ancillas=False)

GitHub

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

Mise en page

routing_permutation

routing_permutation()

GitHub

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

liste [ int ]

write_into_property_set

write_into_property_set(property_set)

GitHub

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.

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