Kompilierungsroutinen
qiskit.compiler
Funktionen zur Schaltungszusammenstellung
transpile
qiskit.compiler.transpile(circuits, backend=None, basis_gates=None, coupling_map=None, initial_layout=None, layout_method=None, routing_method=None, translation_method=None, scheduling_method=None, dt=None, approximation_degree=1.0, seed_transpiler=None, optimization_level=None, callback=None, output_name=None, unitary_synthesis_method='default', unitary_synthesis_plugin_config=None, target=None, hls_config=None, init_method=None, optimization_method=None, ignore_backend_supplied_default_methods=False, num_processes=None, qubits_initially_zero=True)
Transpilieren Sie einen oder mehrere Schaltkreise entsprechend den gewünschten Transpilierungszielen.
Die Transpilierung erfolgt möglicherweise parallel unter Verwendung von Multiprocessing, wenn circuits eine Liste mit > 1 QuantumCircuit objekt ist, abhängig von der lokalen Umgebung und Konfiguration.
Die Priorisierung von Transpilationszielbeschränkungen funktioniert wie folgt: Wenn eine target Eingabe vorliegt, hat sie Vorrang vor allen backend Eingaben oder losen Beschränkungen (basis_gates, coupling_map, oder dt). Wenn eine backend zusammen mit einer losen Bedingung aus der obigen Liste angegeben wird, hat die lose Bedingung Vorrang vor der entsprechenden Backend-Bedingung. Dieses Verhalten ist in der nachstehenden Tabelle zusammengefasst. Die erste Spalte der Tabelle fasst die potenziellen vom Benutzer bereitgestellten Beschränkungen zusammen, und jede Zelle zeigt, ob die Priorität dieser spezifischen Beschränkungseingabe oder einer anderen Eingabe (Ziel/Backend( V2 )) zugewiesen ist.
Vom Benutzer bereitgestellt | Ziel | backend( V2 ) |
|---|---|---|
| basis_tore | Ziel | basis_tore |
| koppeln_karte | Ziel | koppeln_karte |
| dt | Ziel | dt |
Wenn die Zielbasis aus Clifford+T-Gattern besteht, erstellt diese Funktion eine spezielle Clifford+T-Transpiler-Pipeline; eine ausführlichere Dokumentation finden generate_preset_clifford_t_pass_manager() Sie unter […]. Argumente, die ausschließlich für die Transpilierung in kontinuierliche Basissätze gelten, werden in diesem Ablauf ignoriert. Beispielsweise wird das "unitary_synthesis_method" bei der Synthese von Einzel-Qubit-Unitarien zu einer Clifford+T-Sequenz nicht berücksichtigt.
Parameter
-
circuits (_CircuitT) – Stromkreis(e) zum Umsetzen
-
backend (Backend | None) – Wenn diese Option gesetzt ist, kompiliert der Transpiler die Eingabeschaltung für dieses Zielgerät. Wenn eine andere Option explizit festgelegt ist (z. B.
coupling_map), hat diese Vorrang vor der des Backends. -
basis_gates (list[str] | None) – Liste der Basisgatterbezeichnungen, in die entrollt werden soll (z. B. g.:
['u1', 'u2', 'u3', 'cx']). FallsNone, nicht entrollen. -
coupling_map (CouplingMap |list[list[int]] | None) –
Gezielte Kopplungskarte (vielleicht benutzerdefiniert) zum Ziel in der Kartierung. Wenn die Kopplungskarte symmetrisch ist, müssen beide Richtungen angegeben werden.
Es werden mehrere Formate unterstützt:
CouplingMapInstanz- Die Liste muss als Adjazenzmatrix angegeben werden, wobei jeder Eintrag alle vom Backend unterstützten gerichteten Zwei-Qubit-Wechselwirkungen angibt, z. B. g.:
[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]
-
initial_layout (Layout |dict |list | None) –
Ausgangsposition der virtuellen Qubits auf den physischen Qubits. Wenn dieses Layout die Schaltung mit den coupling_map-Bedingungen kompatibel macht, wird es verwendet. Das endgültige Layout ist nicht garantiert gleich, da der Transpiler die Qubits durch Vertauschen oder andere Mittel vertauschen kann. Es werden mehrere Formate unterstützt:
-
LayoutInstanz -
Diktat * virtuell zu physisch:
{qr[0]: 0, qr[1]: 3, qr[2]: 5}-
physisch zu virtuell:
{0: qr[0], 3: qr[1], 5: qr[2]}
-
-
Liste
-
virtuell zu physisch:
[0, 3, 5] # virtual qubits are ordered (in addition to named) -
physisch zu virtuell:
[qr[0], None, None, qr[1], None, qr[2]]
-
-
-
layout_method (str | None) – Name des Layout-Auswahldurchgangs ('trivial', 'dicht', 'sabre'). Dies kann auch der Name des externen Plugins sein, das für die Stufe
layoutverwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sielist_stage_plugins()mit"layout"für das Argumentstage_name. -
routing_method (str | None) – Name des Routing-Verfahrens („basic“, „lookahead“, „stochastic“, „sabre“, „none“). Dies kann auch der Name des externen Plugins sein, das für die
routingStufe verwendet werden soll. Du kannst eine Liste der installierten Plugins anzeigen, indem dulist_stage_plugins()mit"routing"als Argumentstage_nameverwendest. -
translation_method (str | None) – Name des Übersetzungspasses (
"default","translator"oder"synthesis"). Dies kann auch der Name des externen Plugins sein, das für die Stufetranslationverwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sielist_stage_plugins()mit"translation"für das Argumentstage_name. -
scheduling_method (str | None) – Name des Zeitplanausweises. *
'as_soon_as_possible': Anweisungen so früh wie möglich auf einer Qubit-Ressource gierig einplanen. (alias:'asap') *'as_late_as_possible': Anweisungen spät einplanen, d.h. Qubits möglichst im Grundzustand halten. (alias:'alap') WennNone, wird keine Terminierung vorgenommen. Dies kann auch der Name des externen Plugins sein, das für die Stufeschedulingverwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sielist_stage_plugins()mit"scheduling"für das Argumentstage_name. -
dt (float | None) – Backend-Abtastzeit (Auflösung) in Sekunden. Wenn
None(Standard), wirdbackend.dtverwendet. -
approximation_degree (float | None) – Heuristischer Regler zur Schaltungsnäherung, wobei
1.0keine Näherung (bis auf die numerische Toleranz) und0.0die maximale Näherung bedeutet. Soferntargetverfügbar ist, bedeutet der Wert,Nonedass für eine Operation im Ziel eine Annäherung bis zur angegebenen Fehlerrate zulässig ist. -
seed_transpiler (int | None) – Legt einen Startwert für den PRNG fest, der von den stochastischen Teilen des Transpilers verwendet wird. Dieser Parameter hat Vorrang vor der
QISKIT_TRANSPILER_SEEDUmgebungsvariable undtranspiler_seedder Einstellung in der Benutzerkonfigurationsdatei. -
optimization_level (int | None) –
Wie stark die Schaltkreise optimiert werden sollen. Höhere Stufen führen zu optimierteren Schaltkreisen, allerdings auf Kosten einer längeren Umsetzungszeit.
- 0: keine Optimierung
- 1: Optimierung der Beleuchtung
- 2: Starke Optimierung
- 3: noch stärkere Optimierung
Wenn Sie
Nonewählen, wird standardmäßig Stufe 2 gewählt. -
callback (Callable[[BasePass, DAGCircuit, float, PropertySet, int], Any] | None) –
Eine Callback-Funktion, die nach jeder Ausführung eines Durchgangs aufgerufen wird. Die Funktion wird mit 5 Schlüsselwortargumenten aufgerufen, |
pass_: der durchzuführende Durchgang. |dag: die Tagesausgabe des Durchlaufs. |time: die Zeit für die Ausführung des Durchlaufs. |property_set: die eingestellte Eigenschaft. |count: der Index für die Ausführung des Durchlaufs. Die genauen Argumente, die übergeben werden, legen die Interna des Pass-Managers offen und können sich ändern, wenn sich die Interna des Pass-Managers ändern. Wenn Sie beabsichtigen, eine Callback-Funktion über mehrere Versionen hinweg wiederzuverwenden, stellen Sie sicher, dass die übergebenen Argumente dieselben sind. Um die Callback-Funktion zu nutzen, definieren Sie eine Funktion, die kwargs dict aufnimmt und auf die Variablen zugreift. Zum Beispiel:def callback_func(**kwargs): pass_ = kwargs['pass_'] dag = kwargs['dag'] time = kwargs['time'] property_set = kwargs['property_set'] count = kwargs['count'] ... transpile(circ, callback=callback_func) -
output_name (str |list[str] | None) – Eine Liste mit Zeichenfolgen zur Identifizierung der Ausgangsschaltungen. Die Länge der Liste sollte genau der Länge des
circuitsParameters entsprechen. -
unitary_synthesis_method (str) – Der Name der zu verwendenden einheitlichen Synthesemethode. Standardmäßig
'default'wird verwendet. Mitunitary_synthesis_plugin_names(). können Sie eine Liste der installierten Plugins anzeigen. -
unitary_synthesis_plugin_config (dict | None) – Ein optionales Konfigurationswörterbuch, das direkt an das unitäre Synthese-Plugin übergeben wird. Standardmäßig hat diese Einstellung keine Auswirkungen, da die standardmäßige unitäre Synthesemethode keine benutzerdefinierte Konfiguration erfordert. Dies sollte nur notwendig sein, wenn ein unitäres Synthese-Plugin mit dem Argument
unitary_synthesis_methodangegeben wird. Da dies für jedes Unitary Synthesis Plugin individuell ist, finden Sie in der Plugin-Dokumentation Hinweise zur Verwendung dieser Option. -
target (Target | None) – Ein Backend-Transpiler-Ziel. Normalerweise wird dies als Teil des
backendArguments angegeben, aber wenn Sie einTargetObjekt manuell erstellt haben, können Sie es hier manuell angeben. Dadurch wird das Ziel ausbackend… überschrieben. -
hls_config (HLSConfig | None) – Eine optionale Konfigurationsklasse
HLSConfig, die direkt anHighLevelSynthesisden Transformationsdurchlauf übergeben wird. Diese Konfigurationsklasse ermöglicht die Festlegung von Listen mit Synthesealgorithmen und deren Parametern für verschiedene Objekte auf hoher Ebene. -
init_method (str | None) – Der Name des Plugins, das für die Stufe
initverwendet werden soll. Standardmäßig wird ein externes Plugin nicht verwendet. Sie können eine Liste der installierten Plugins anzeigen, indem Sielist_stage_plugins()mit"init"für das Argument stage name. -
optimization_method (str | None) – Der Name des Plugins, das für die Stufe
optimizationverwendet werden soll. Standardmäßig wird ein externes Plugin nicht verwendet. Sie können eine Liste der installierten Plugins anzeigen, indem Sielist_stage_plugins()mit"optimization"für das Argumentstage_name. -
ignore_backend_supplied_default_methods (bool) – Bei der Einstellung
Truewerden alle von einem Backend angegebenen Standardmethoden ignoriert. Einige Backends geben alternative Standardmethoden an, um benutzerdefinierte kompilierungszielspezifische Pässe/Plugins zu unterstützen, die backendspezifische Kompilierungstechniken unterstützen. Wenn Sie es vorziehen, dass diese Standardwerte nicht verwendet werden, können Sie mit dieser Option diese backend-spezifischen Standardwerte deaktivieren. -
num_processes (int | None) – Die maximale Anzahl der parallelen Prozesse, die für diesen Aufruf von transpile gestartet werden sollen, wenn die parallele Ausführung aktiviert ist. Dieses Argument hat Vorrang vor
num_processesin der Benutzerkonfigurationsdatei und der UmgebungsvariablenQISKIT_NUM_PROCS. Wenn diese Option aufNonegesetzt ist, wird die Standardkonfiguration des Systems oder die lokale Benutzerkonfiguration verwendet. -
qubits_initially_zero (bool) – Zeigt an, ob die Eingangsschaltung nullinitialisiert ist.
Rückgabe
Die umgesetzte(n) Schaltung(en).
Erhöht
TranspilerError - bei fehlerhaften Eingaben in den Transpiler (z. B. widersprüchliche Parameter) oder bei Fehlern in den Durchläufen
Rückgabetyp
_CircuitT