Skip to main content
IBM Quantum Platform

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)

GitHub

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_toreZielbasis_tore
koppeln_karteZielkoppeln_karte
dtZieldt
Anmerkung

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']). Falls None, 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:

    1. CouplingMap Instanz
    2. 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:

    1. Layout Instanz

    2. 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]}
    3. 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 layout verwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sie list_stage_plugins() mit "layout" für das Argument stage_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 routing Stufe verwendet werden soll. Du kannst eine Liste der installierten Plugins anzeigen, indem du list_stage_plugins() mit "routing" als Argument stage_name verwendest.

  • translation_method (str | None) – Name des Übersetzungspasses ("default", "translator" oder "synthesis"). Dies kann auch der Name des externen Plugins sein, das für die Stufe translation verwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sie list_stage_plugins() mit "translation" für das Argument stage_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') Wenn None, wird keine Terminierung vorgenommen. Dies kann auch der Name des externen Plugins sein, das für die Stufe scheduling verwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sie list_stage_plugins() mit "scheduling" für das Argument stage_name .

  • dt (float | None) – Backend-Abtastzeit (Auflösung) in Sekunden. Wenn None (Standard), wird backend.dt verwendet.

  • approximation_degree (float | None) – Heuristischer Regler zur Schaltungsnäherung, wobei 1.0 keine Näherung (bis auf die numerische Toleranz) und 0.0 die maximale Näherung bedeutet. Sofern target verfügbar ist, bedeutet der Wert, None dass 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_SEED Umgebungsvariable und transpiler_seed der 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 None wä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 circuits Parameters entsprechen.

  • unitary_synthesis_method (str) – Der Name der zu verwendenden einheitlichen Synthesemethode. Standardmäßig 'default' wird verwendet. Mit unitary_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_method angegeben 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 backend Arguments angegeben, aber wenn Sie ein Target Objekt manuell erstellt haben, können Sie es hier manuell angeben. Dadurch wird das Ziel aus backend… überschrieben.

  • hls_config (HLSConfig | None) – Eine optionale Konfigurationsklasse HLSConfig , die direkt an HighLevelSynthesis den 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 init verwendet werden soll. Standardmäßig wird ein externes Plugin nicht verwendet. Sie können eine Liste der installierten Plugins anzeigen, indem Sie list_stage_plugins() mit "init" für das Argument stage name.

  • optimization_method (str | None) – Der Name des Plugins, das für die Stufe optimization verwendet werden soll. Standardmäßig wird ein externes Plugin nicht verwendet. Sie können eine Liste der installierten Plugins anzeigen, indem Sie list_stage_plugins() mit "optimization" für das Argument stage_name .

  • ignore_backend_supplied_default_methods (bool) – Bei der Einstellung True werden 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_processes in der Benutzerkonfigurationsdatei und der Umgebungsvariablen QISKIT_NUM_PROCS . Wenn diese Option auf None gesetzt 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

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.