TranspileLayout
class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)
Basen: object
Layout-Attribute für die Ausgangsschaltung des Transpilers.
Die transpiler erhält die Einheitlichkeit bis auf die Permutationen des „Ausgangslayouts“ und des „Endlayouts“. Die anfängliche Layout-Permutation entsteht durch das Festlegen und Anwenden des Anfanglayouts während der Layout-Phase. Die endgültige Permutation des Layouts wird durch SwapGate Einfügungen während der Routing-Phase verursacht. Diese Klasse bietet eine Schnittstelle, um diese Permutationen mithilfe verschiedener Hilfsmethoden zu analysieren.
In der Layout-Phase kann der Transpiler die Reihenfolge der Qubits in der Schaltung umstellen, um die Schaltung an das Ziel-Backend anzupassen. Nehmen wir als Beispiel die Eingangsschaltung:
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")
Angenommen, der Transpiler ordnet die Qubits während der Layoutphase neu an:
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.cx(2, 0)
qc.draw("mpl")
Dann ist die Ausgabe der initial_virtual_layout() methode äquivalent zu:
Layout({
qr[0]: 2,
qr[1]: 1,
qr[2]: 0,
})(Es ist auch dieses Attribut in und circuit_drawer() , QuantumCircuit.draw() das verwendet wird, um die Zuordnung von Qubits zu Positionen in Schaltkreisvisualisierungen nach der Transpilierung darzustellen.)
Nehmen wir an, dass der Transpiler während der Routing-Phase Tauschgatter einfügen muss, und die Ausgangsschaltung wird:
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")
Dann lautet die Ausgabe der routing_permutation() methode ist:
[1, 0, 2]die die Positionen der Qubits vor dem Routing auf ihre endgültigen Positionen nach dem Routing abbildet.
Es gibt drei öffentliche Attribute, die mit der Klasse verknüpft sind, die jedoch hauptsächlich aus Gründen der Abwärtskompatibilität bereitgestellt werden und den internen Status des Transpilers darstellen. Sie sind definiert als:
initial_layout- Dieses Attribut dient dazu, die durch die Layout-Phase verursachte Permutation abzubilden. Es handelt sich um einLayoutObjekt, das die EingabeobjekteQuantumCircuitsQubitauf die Position in der AusgabelisteQuantumCircuit.qubitsabbildet.input_qubit_mapping- Dieses Attribut dient dazu, die Eingabereihenfolge des ursprünglichenQuantumCircuitObjekts beizubehalten. Es ordnet das virtuelleQubitObjekt aus dem ursprünglichen Schaltkreis (undinitial_layout) seiner entsprechenden Position inQuantumCircuit.qubitsim ursprünglichen Schaltkreis zu.Operator.from_circuit()Dies wird bei der Berechnung der Permutation des SchaltkreisesOperatorbenötigt (und von … verwendet).final_layout- Dieses Attribut dient dazu, die durch die Routing-Phase verursachte Permutation abzubilden. Es handelt sich um einLayoutObjekt, das die Qubits der Ausgangsschaltung vonQuantumCircuit.qubitsin der Ausgangsschaltung auf ihre endgültigen Positionen nach der Weiterleitung abbildet. Wichtig ist, dass dies lediglich die Permutation darstellt, die durch das EinfügenSwapGatevon s in dasQuantumCircuitwährend der Routing-Phase verursacht wird. Es handelt sich nicht um eine Abbildung der Position der ursprünglichen Eingangsschaltung auf die Endposition am Ende der transpilierten Schaltung. Falls Sie dies benötigen, können Sie es mithilfe desfinal_index_layout()generieren.NoneWennfinal_layoutauf gesetzt ist, bedeutet dies, dass kein Routing durchgeführt wurde, und kann als gleichbedeutend mit einem trivialen Layout betrachtet werden, bei dem die Qubits aus der Liste derqubitsAusgangsschaltung verwendet werden.
Attribute
Parameter
- 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
Typ: Layout
input_qubit_mapping
Methoden
final_index_layout
final_index_layout(filter_ancillas=True)
Erzeugen Sie das endgültige Layout als Array von Ganzzahlen.
Mit dieser Methode wird eine Reihe von Endpositionen für jedes Qubit im Eingangskreis erzeugt. Zum Beispiel, wenn Sie eine Eingangsschaltung wie:
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)und die Ausgabe des Transpilers war:
tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)dann gibt die final_index_layout() methode zurück:
[2, 0, 1]Dies ist wie folgt zu sehen. Qubit 0 in der ursprünglichen Schaltung wird in der Layout-Phase auf Qubit 2 in der Ausgangsschaltung abgebildet, das in der Routing-Phase auf Qubit 2 abgebildet wird. Qubit 1 in der ursprünglichen Schaltung wird in der Layout-Phase auf Qubit 1 in der Ausgangsschaltung abgebildet, das in der Routing-Phase auf Qubit 0 abgebildet wird. Qubit 2 in der ursprünglichen Schaltung wird in der Layout-Phase auf Qubit 0 in der Ausgangsschaltung abgebildet, das in der Routing-Phase auf Qubit 1 abgebildet wird. Die Länge der Ausgabeliste ist so groß wie die Anzahl der Qubits der Eingangsschaltung, da die Ausgabeliste dieser Methode dazu dient, die durch den Transpiler verursachte Permutation der Qubits in der ursprünglichen Schaltung zu verfolgen.
Parameter
filter_ancillas (bool) – Bei der Einstellung False werden alle in der Ausgangsschaltung zugewiesenen Hilfsgeräte in das Layout einbezogen.
Rückgabe
Eine Liste der Endpositionen für jedes Qubit der Eingangsschaltung.
Rückgabetyp
final_virtual_layout
final_virtual_layout(filter_ancillas=True)
Erzeugen Sie das endgültige Layout als Layout objekt.
Mit dieser Methode wird eine Reihe von Endpositionen für jedes Qubit im Eingangskreis erzeugt. Zum Beispiel, wenn Sie eine Eingangsschaltung wie:
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)und die Ausgabe des Transpilers war:
tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)dann wäre die Rückgabe dieser Funktion ein Layout-Objekt:
Layout({
qc.qubits[0]: 2,
qc.qubits[1]: 0,
qc.qubits[2]: 1,
})Dies ist wie folgt zu sehen. Qubit 0 in der ursprünglichen Schaltung wird in der Layout-Phase auf Qubit 2 in der Ausgangsschaltung abgebildet, das in der Routing-Phase auf Qubit 2 abgebildet wird. Qubit 1 in der ursprünglichen Schaltung wird in der Layout-Phase auf Qubit 1 in der Ausgangsschaltung abgebildet, das in der Routing-Phase auf Qubit 0 abgebildet wird. Qubit 2 in der ursprünglichen Schaltung wird in der Layout-Phase auf Qubit 0 in der Ausgangsschaltung abgebildet, das in der Routing-Phase auf Qubit 1 abgebildet wird. Die Länge der Ausgabeliste ist so groß wie die Anzahl der Qubits der Eingangsschaltung, da die Ausgabeliste dieser Methode dazu dient, die durch den Transpiler verursachte Permutation der Qubits in der ursprünglichen Schaltung zu verfolgen.
Parameter
filter_ancillas (bool) – Bei der Einstellung False werden alle in der Ausgangsschaltung zugewiesenen Hilfsgeräte in das Layout einbezogen.
Rückgabe
Ein Layout-Objekt, das die Endpositionen für jedes Qubit abbildet.
Rückgabetyp
from_property_set
classmethod from_property_set(dag, property_set)
Konstruieren Sie die TranspileLayout durch Auslesen der Felder aus dem angegebenen PropertySet. Gibt None zurück, wenn keine Layout-Einstellungsschlüssel vorhanden sind.
Dazu gehört die Kombination der verschiedenen Schlüssel des Eigenschaftssatzes zu einem vollständigen Satz von Anfangs- und Endlayouts, einschließlich virtueller Permutationen.
Dadurch wird der angegebene Eigenschaftssatz weder ungültig noch in irgendeiner Weise verändert. Um den Eigenschaftssatz anschließend zu "kanonisieren", rufen Sie write_into_property_set().
Damit werden die folgenden Schlüssel für Eigenschaftssätze gelesen:
layout
Erforderlich. Das Layout objekt, das virtuelle Qubits (möglicherweise erweitert durch Ancillas) auf physikalische Qubit-Indizes abbildet. Dies entspricht direkt der initial_layout.
Bei allen Standardanwendungen ist dies ein Pflichtfeld. Wenn jedoch virtual_permutation_layout gesetzt ist, wird ein "triviales" Layout abgeleitet, auch wenn die Schaltung nicht tatsächlich in Hardware ausgelegt ist. Dies ist eine unglückliche Einschränkung des Datenmodells dieser Klasse, bei dem es nicht möglich ist, eine endgültige Permutation anzugeben, ohne auch ein anfängliches Layout zu haben. Dieses Manko wird in Qiskit 3.0 behoben.
original_qubit_indices
Erforderlich (wird aber automatisch von der PassManager). Das Mapping {virtual: index} , das angibt, welchen relativen Index jedes eingehende virtuelle Qubit in der Eingangsschaltung hatte. Dies kann auch mit Ancillas erweitert werden (in diesem Fall sind die Ancilla-Indizes bedeutungslos, da sie nicht in der Eingangsschaltung enthalten waren).
num_input_qubits
Erforderlich (wird aber automatisch von der PassManager). Die Anzahl der expliziten virtuellen Qubits in der Eingangsschaltung (d. h. ohne implizite Ancillas).
final_layout
Optional. Die effektive endgültige Permutation, ausgedrückt in den aktuellen Qubits des DAGCircuit. Dies entspricht direkt der final_layout.
virtual_permutation_layout
Optional. Dies wird durch bestimmte Optimierungsläufe festgelegt, die vor der Layoutauswahl ausgeführt werden, wie z. B ElidePermutations. Sie ähnelt im Geiste der final_layout, gilt aber in der Regel nur für die virtuellen Eingangs-Qubits.
Dieses Objekt verwendet die entgegengesetzte Permutationskonvention, was auf ein Versehen in Qiskit bei dessen Einführung zurückzuführen final_layout ist. Mit anderen Worten: virtual_permutation_layout Es ordnet eine Qubit Instanz am Ende des Schaltkreises ihrem ganzzahligen Index am Anfang des Schaltkreises zu.
Parameter
- dag (DAGCircuit) – den aktuellen Stand der
DAGCircuit. - property_set (PropertySet) – den aktuellen Eigenschaftssatz des Transpilers. Hier muss zumindest der Schlüssel
layoutgesetzt sein.
Rückgabetyp
TranspileLayout | Keine
initial_index_layout
initial_index_layout(filter_ancillas=False)
Erzeugen Sie ein anfängliches Layout als Array von Ganzzahlen.
Parameter
filter_ancillas (bool) – Wenn diese Option auf True gesetzt ist, werden alle dem Transpiler hinzugefügten Ancilla-Qubits nicht in der Ausgabe berücksichtigt.
Rückgabe
Ein Layout-Array, das eine Position im Array auf die neue Position in der Ausgangsschaltung abbildet.
Rückgabetyp
initial_virtual_layout
initial_virtual_layout(filter_ancillas=False)
Rückgabe eines Layout objekt für das anfängliche Layout zurück.
Dies liefert eine Zuordnung der virtuellen Qubit Objekte im Eingangsschaltkreis zu den Positionen der physikalischen Qubits, die beim Layout ausgewählt wurden. Dies entspricht dem initial_layout Attribut.
Parameter
filter_ancillas (bool) – Bei der Einstellung True werden nur die Qubits des Eingangsschaltkreises in das zurückgegebene Layout aufgenommen. Alle Ancilla-Qubits, die dem Ausgangskreis hinzugefügt werden, werden aus dem zurückgegebenen Objekt herausgefiltert.
Rückgabe
Ein Layout-Objekt, das die Objekte der Qubit Eingangsschaltung den Positionen der ausgewählten physikalischen Qubits zuordnet.
Rückgabetyp
routing_permutation
routing_permutation()
Erzeugen eines endgültigen Layouts als Array von Ganzzahlen.
Wenn es kein final_layout attribut vorhanden ist, bedeutet dies, dass es keine durch Routing oder andere Transpiler-Transformationen verursachte Ausgabe-Permutation gab. In diesem Fall wird die Funktion eine Liste von [0, 1, 2, .., n] zurückgeben.
Rückgabe
Ein Layout-Array, das eine Position im Array auf die neue Position in der Ausgangsschaltung abbildet.
Rückgabetyp
write_into_property_set
write_into_property_set(property_set)
'Entpacken' Sie dieses Layout in die lose Form der property_set.
Dies ist die umgekehrte Methode von from_property_set().
Dies schreibt immer die folgenden Eigenschaftsschlüssel und überschreibt sie, wenn sie bereits gesetzt waren:
layout
Entspricht direkt initial_layout.
original_qubit_indices
Entspricht direkt input_qubit_mapping.
final_layout
Entspricht direkt final_layout. Beachten Sie, dass dies nicht unbedingt identisch ist mit dem final_layout von vor einem Aufruf von from_property_set()nicht identisch, da die Auswirkungen von virtual_permutation_layout darin kombiniert wurden.
virtual_permutation_layout
Aus dem Eigenschaftssatz gestrichen; TranspileLayout "finalisiert" die mehreren getrennten Permutationen zu einer einzigen Permutation, um die kanonische Form beizubehalten.
Darüber hinaus werden die folgenden Schlüssel aktualisiert, wenn der TranspileLayout einen bekannten Wert für sie hat. Andernfalls werden sie so belassen, wie sie sind, um Fälle zu behandeln, in denen diese Klasse manuell erstellt wurde, ohne bestimmte optionale Felder zu setzen.
num_input_qubits
Die Anzahl der virtuellen Nicht-Cancilla-Qubits in der Eingangsschaltung.
Parameter
property_set (dict[str, object]) – die PropertySet (oder allgemein dict), in die die Ausgabe geschrieben werden soll. Dadurch wird die Eingabe an Ort und Stelle verändert.