{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "c5693a08-8ac2-4ca6-bfa9-3bf6148d257b",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Voreinstellungen und Konfigurationsoptionen für die Transpilierung\"\n",
        "description: \"Die Standardeinstellungen und Konfigurationsoptionen für die Transpilation von Quantenschaltungen im „ Qiskit SDK ”.\"\n",
        "---\n",
        "\n",
        "<span id=\"transpilation-default-settings-and-configuration-options\" />\n",
        "\n",
        "# Voreinstellungen und Konfigurationsoptionen für die Transpilierung\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "051470e1-7466-4ad7-affe-6ceec583d5d5",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "{/*\n",
        "  DO NOT EDIT THIS CELL!!!\n",
        "  This cell's content is generated automatically by a script. Anything you add\n",
        "  here will be removed next time the notebook is run. To add new content, create\n",
        "  a new cell before or after this one.\n",
        "  */}\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"Paketversionen\">\n",
        "    Der Code auf dieser Seite wurde unter Berücksichtigung der folgenden Anforderungen entwickelt.\n",
        "    Wir empfehlen die Verwendung dieser oder neuerer Versionen.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.2\n",
        "    qiskit-ibm-runtime~=0.47.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a3513040-821f-4e07-9f82-98e8ba38819b",
      "metadata": {},
      "source": [
        "Abstrakte Schaltungen müssen transpiliert werden, da QPUs eine begrenzte Anzahl von Basisgattern haben und keine beliebigen Operationen ausführen können. Der Transpiler hat die Aufgabe, beliebige Schaltungen so zu verändern, dass sie auf einer bestimmten QPU laufen können.  Dazu werden die Schaltungen in die unterstützten Basisgatter übersetzt und bei Bedarf SWAP-Gatter eingeführt, so dass die Konnektivität der Schaltung mit der der QPU übereinstimmt.\n",
        "\n",
        "Wie in [Transpilieren mit Pass-Managern](transpile-with-pass-managers) erläutert, können Sie einen [Pass-Manager](/docs/api/qiskit/qiskit.transpiler.PassManager) mit der Funktion [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) funktion erstellen und einen Schaltkreis oder eine Liste von Schaltkreisen an seine [Ausführungsmethode](/docs/api/qiskit/qiskit.transpiler.PassManager#run) übergeben, um sie zu transpilieren. Sie können `generate_preset_pass_manager` aufrufen und dabei nur die Optimierungsstufe und das Backend angeben und die Standardwerte für alle anderen Optionen verwenden. Sie können der Funktion auch zusätzliche Argumente übergeben, um die Transpilierung fein abzustimmen.\n",
        "\n",
        "<span id=\"basic-usage-without-parameters\" />\n",
        "\n",
        "## Grundlegende Verwendung ohne Parameter\n",
        "\n",
        "In diesem Beispiel übergeben wir eine Schaltung und eine Ziel-QPU an den Transpiler, ohne weitere Parameter zu spezifizieren.\n",
        "\n",
        "Erstellen Sie einen Schaltkreis und sehen Sie sich das Ergebnis an:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "f7070db2-2b3e-4dcd-bbc7-cac7662867b3",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/defaults-and-configuration-options/extracted-outputs/f7070db2-2b3e-4dcd-bbc7-cac7662867b3-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit import QuantumCircuit\n",
        "from qiskit.circuit.library import grover_operator, DiagonalGate\n",
        "from qiskit_ibm_runtime.fake_provider import FakeSherbrooke\n",
        "\n",
        "# Create circuit to test transpiler on\n",
        "oracle = DiagonalGate([1] * 7 + [-1])\n",
        "qc = QuantumCircuit(3)\n",
        "qc.h([0, 1, 2])\n",
        "qc = qc.compose(grover_operator(oracle))\n",
        "\n",
        "# Add measurements to the circuit\n",
        "qc.measure_all()\n",
        "\n",
        "# View the circuit\n",
        "qc.draw(output=\"mpl\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "24622567-920c-48d9-aeba-d85a8dd34788",
      "metadata": {},
      "source": [
        "Transpilieren Sie die Schaltung und betrachten Sie das Ergebnis:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "27ab746b-e3d7-49a7-b40b-d1e2d9ca6088",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/defaults-and-configuration-options/extracted-outputs/27ab746b-e3d7-49a7-b40b-d1e2d9ca6088-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.transpiler import generate_preset_pass_manager\n",
        "\n",
        "# Specify the QPU to target\n",
        "backend = FakeSherbrooke()\n",
        "\n",
        "# Transpile the circuit\n",
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, backend=backend\n",
        ")\n",
        "transpiled_circ = pass_manager.run(qc)\n",
        "\n",
        "# View the transpiled circuit\n",
        "transpiled_circ.draw(output=\"mpl\", idle_wires=False)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6c0e9d2d-511e-4948-9f48-3b7b0fe56d7a",
      "metadata": {},
      "source": [
        "<span id=\"all-available-parameters\" />\n",
        "\n",
        "## Alle verfügbaren Parameter\n",
        "\n",
        "Nachfolgend finden Sie alle verfügbaren Parameter für die [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) funktion.  Es gibt zwei Klassen von Argumenten: diejenigen, die das Ziel der Kompilierung beschreiben, und diejenigen, die beeinflussen, wie der Transpiler arbeitet.\n",
        "\n",
        "Alle Parameter außer `optimization_level` sind optional.  Weitere Einzelheiten finden Sie in der [Transpiler-API-Dokumentation](/docs/api/qiskit/transpiler#transpiler-api).\n",
        "\n",
        "* `optimization_level` (int) - Wie stark die Schaltkreise optimiert werden sollen. Ganzzahl im Bereich (0 - 3). Höhere Stufen führen zu optimierteren Schaltkreisen, allerdings auf Kosten einer längeren Umsetzungszeit. Weitere Informationen finden Sie unter [Transpiler-Optimierungsstufe festlegen](set-optimization).\n",
        "\n",
        "<span id=\"parameters-used-to-describe-the-compilation-target\" />\n",
        "\n",
        "### Parameter zur Beschreibung des Kompilierungsziels:\n",
        "\n",
        "Diese Argumente beschreiben die Ziel-QPU für die Schaltkreisausführung, einschließlich Informationen wie die Kopplungskarte der QPU (die die Konnektivität der Qubits beschreibt), die von der QPU unterstützten Basisgatter und die Fehlerraten der Gatter.\n",
        "\n",
        "Viele dieser Parameter sind unter [Häufig verwendete Parameter für die Transpilation](common-parameters) detailliert beschrieben.\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**QPU (`Backend`) Parameter**\">\n",
        "    **Backend-Parameter** - Wenn Sie `backend` angeben, müssen Sie weder `target` noch andere Backend-Optionen angeben. Wenn Sie `target` angeben, brauchen Sie auch `backend` oder andere Backend-Optionen nicht anzugeben.\n",
        "\n",
        "    * `backend` (Backend) - Wenn dies gesetzt ist, kompiliert der Transpiler die Eingangsschaltung zu diesem Gerät. Wenn eine andere Option eingestellt ist, die sich auf diese Einstellungen auswirkt, wie z. B. `coupling_map`, überschreibt sie die Einstellungen von `backend`.\n",
        "    * `target` (Ziel) - Ein Backend-Transpiler-Ziel. Normalerweise wird dies als Teil des Backend-Arguments angegeben, aber wenn Sie ein Target-Objekt manuell konstruiert haben, können Sie es hier angeben. Damit wird das Ziel von `backend` außer Kraft gesetzt.\n",
        "    * `backend_properties` ( BackendProperties ) - Eigenschaften, die von einer QPU zurückgegeben werden, einschließlich Informationen über Gate-Fehler, Auslesefehler, Qubit-Kohärenzzeiten und so weiter. Suchen Sie eine QPU, die diese Informationen liefert, indem Sie `backend.properties()` ausführen.\n",
        "    * `timing_constraints` (Dictstr\\[, int] | None) - Eine optionale Hardwarebeschränkung für die Auflösung der Befehlszeit. Diese Informationen werden von der QPU-Konfiguration bereitgestellt. Wenn die QPU keine Beschränkung für die Zuweisung der Befehlszeit hat, ist `timing_constraints` `None` und es wird keine Anpassung vorgenommen. Ein QPU könnte eine Reihe von Einschränkungen melden, nämlich:\n",
        "      * `granularity`: Ein ganzzahliger Wert, der die minimale Impuls-Tor-Auflösung in Einheiten von dt angibt. Ein benutzerdefiniertes Impulsgatter sollte eine Dauer haben, die ein Vielfaches dieses Granularitätswertes ist.\n",
        "      * `min_length`: Ein ganzzahliger Wert, der die minimale Impuls-Torlänge in Einheiten von dt angibt. Ein benutzerdefiniertes Impulstor sollte länger als diese Länge sein.\n",
        "      * `pulse_alignment`: Ein ganzzahliger Wert, der die zeitliche Auflösung der Startzeit des Gate-Befehls angibt. Gate-Anweisungen sollten zu einem Zeitpunkt beginnen, der ein Vielfaches dieses Wertes ist.\n",
        "      * `acquire_alignment`: Ein ganzzahliger Wert, der die zeitliche Auflösung der Startzeit der Messanweisung angibt. Der Messauftrag sollte zu einem Zeitpunkt beginnen, der ein Vielfaches dieses Wertes ist.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Layout- und Topologieparameter**\">\n",
        "    * `basis_gates` ( \\[Liststr] | None) - Liste der Namen der Basistore, zu denen abgewickelt werden soll.  Zum Beispiel \\[„ u1 “, „ u2 “, „ u3 “, „cx“]. Wenn `None`, nicht abrollen.\n",
        "    * `coupling_map` ( CouplingMap | List\\[ \\[Listint] ]) - Gerichtete Kopplungskarte (möglicherweise benutzerdefiniert) zum Ziel im Mapping. Wenn die Kopplungskarte symmetrisch ist, müssen beide Richtungen angegeben werden. Diese Formate werden unterstützt:\n",
        "      * CouplingMap instanz\n",
        "      * Liste - muss als Adjazenzmatrix angegeben werden, wobei jeder Eintrag alle gerichteten Zwei-Qubit-Wechselwirkungen angibt, die von der QPU unterstützt werden.  Zum Beispiel: \\[\\[0, 1], \\[0, 3], \\[1, 2], \\[1, 5], \\[2, 5], \\[4, 1], \\[5, 3] ]\n",
        "    * `inst_map` ( \\[ListInstructionScheduleMap] | None) - Zuordnung von Schaltkreisoperationen zu Impulszeitplänen. Wenn `None`, wird die `instruction_schedule_map` der QPU verwendet.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "<span id=\"parameters-used-to-influence-how-the-transpiler-works\" />\n",
        "\n",
        "### Parameter, die die Funktionsweise des Transpilers beeinflussen\n",
        "\n",
        "Diese Parameter wirken sich auf bestimmte Stufen der Umsetzung aus. Einige von ihnen können sich auf mehrere Stufen auswirken, wurden aber der Einfachheit halber nur unter einer Stufe aufgeführt. Wenn Sie ein Argument angeben, z. B. `initial_layout` für die zu verwendenden Qubits, hat dieser Wert Vorrang vor allen Übergängen, die ihn ändern könnten. Mit anderen Worten: Der Transpiler wird nichts ändern, was Sie manuell angeben. Einzelheiten zu den einzelnen Stufen finden Sie unter [Transpiler-Stufen](transpiler-stages).\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**Initialisierungsphase**\">\n",
        "    * `hls_config` (HLSConfig) - Eine optionale Konfigurationsklasse `HLSConfig` , die direkt an den `HighLevelSynthesis` Transformationspass übergeben wird. Mit dieser Konfigurationsklasse können Sie die Listen der Synthesealgorithmen und deren Parameter für verschiedene High-Level-Objekte festlegen.\n",
        "    * `init_method` (str) - Der Plugin-Name, der für die Initialisierungsphase 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 ausführen.\n",
        "    * `unitary_synthesis_method` (str) - Der Name der zu verwendenden unitären Synthesemethode. Standardmäßig wird `default` verwendet. Sie können eine Liste der installierten Plugins sehen, indem Sie `unitary_synthesis_plugin_names()` aufrufen.\n",
        "    * `unitary_synthesis_plugin_config` (dict) - Ein optionales Konfigurationswörterbuch, das direkt an das unitäre Synthese-Plugin übergeben wird. Standardmäßig hat diese Einstellung keine Auswirkung, da die standardmäßige unitäre Synthesemethode keine benutzerdefinierte Konfiguration erfordert. Die Anwendung einer benutzerdefinierten Konfiguration sollte nur notwendig sein, wenn ein unitäres Synthese-Plugin mit dem Argument `unitary_synthesis` angegeben wird. Da dies für jedes Unitary Synthesis Plugin individuell ist, lesen Sie bitte in der Dokumentation des Plugins nach, wie Sie diese Option verwenden.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Layoutphase**\">\n",
        "    * `initial_layout` (Layout | Dict | List) – Ausgangsposition virtueller Qubits auf physikalischen Qubits. Wenn dieses Layout den Schaltkreis mit den `coupling_map` Einschränkungen kompatibel macht, wird es verwendet. Das endgültige Layout muss nicht unbedingt identisch sein, da der Transpiler Qubits durch Vertauschungen oder andere Maßnahmen umordnen kann. Ausführliche Informationen finden Sie im [Abschnitt „Anfängliches Layout](common-parameters#initial-layout) “.\n",
        "    * `layout_method` (str) - Name des Layout-Auswahldurchgangs (`default`, `dense`, `sabre` und `trivial`). Dies kann auch der Name des externen Plugins sein, das für die Layoutphase verwendet werden soll. Sie können eine Liste der installierten Plugins anzeigen, indem Sie `list_stage_plugins()` mit `layout` für das Argument `stage_name` ausführen. Der Standardwert ist `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Routing-Phase**\">\n",
        "    * `routing_method` (str) - Name des Routing-Passes (`basic`, `lookahead`, `default`, `sabre`, oder `none`). Dies kann auch der Name des externen Plugins sein, das für die Routing-Stufe verwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sie `list_stage_plugins()` mit `routing` für das Argument `stage_name` ausführen. Der Standardwert ist `sabre`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Übersetzungsphase**\">\n",
        "    * `translation_method` (str) - Name des Übersetzungsdurchgangs (`default`, `synthesis`, `translator`, `ibm_backend`, `ibm_dynamic_circuits`, `ibm_fractional`) Dies kann auch der Name des externen Plugins sein, das für die Übersetzungsphase verwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sie `list_stage_plugins()` mit `translation` für das Argument `stage_name` ausführen. Der Standardwert ist `translator`.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Optimierungsphase**\">\n",
        "    * `approximation_degree` (Float, im Bereich 0-1 | None) - Heuristische Wahl, die für die Annäherung an den Stromkreis verwendet wird ( 1.0 = keine Annäherung, 0.0 = maximale Annäherung). Der Standardwert ist 1,0.  Durch die Angabe von `None` wird der Näherungsgrad auf die gemeldete Fehlerquote eingestellt. Weitere Einzelheiten finden Sie im [Abschnitt Annäherungsgrad](common-parameters#approx-degree).\n",
        "    * `optimization_method` (str) - Der Name des Plugins, das für die Optimierungsphase 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` ausführen.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Planungsphase**\">\n",
        "    * `scheduling_method` (str) - Name des Zeitplanungsdurchlaufs. Dies kann auch der Name des externen Plugins sein, das für die Planungsphase verwendet wird. Sie können eine Liste der installierten Plugins anzeigen, indem Sie `list_stage_plugins()` mit `scheduling` für das Argument `stage_name` ausführen.\n",
        "      * so bald wie möglich\": Anweisungen so früh wie möglich auf einer Qubit-Ressource einplanen (alias: `asap`).\n",
        "      * 'as\\_late\\_as\\_possible': Anweisungen spät einplanen, d.h. Qubits im Grundzustand halten, wenn möglich (alias: `alap`). Dies ist die Standardeinstellung.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**Transpiler-Ausführung**\">\n",
        "    * `seed_transpiler` (int) - Setzt zufällige Seeds für die stochastischen Teile des Transpilers.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "Die folgenden Standardwerte werden verwendet, wenn Sie keinen der oben genannten Parameter angeben. Weitere Informationen finden Sie in der [API-Referenzseite](../api/qiskit/transpiler_preset) der Methode:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "bcaab4a6",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<qiskit.transpiler.passmanager.StagedPassManager at 0x1403cd250>"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "generate_preset_pass_manager(\n",
        "    optimization_level=1,\n",
        "    backend=None,\n",
        "    target=None,\n",
        "    basis_gates=None,\n",
        "    coupling_map=None,\n",
        "    initial_layout=None,\n",
        "    layout_method=None,\n",
        "    routing_method=None,\n",
        "    translation_method=None,\n",
        "    scheduling_method=None,\n",
        "    approximation_degree=1.0,\n",
        "    seed_transpiler=None,\n",
        "    unitary_synthesis_method=\"default\",\n",
        "    unitary_synthesis_plugin_config=None,\n",
        "    hls_config=None,\n",
        "    init_method=None,\n",
        "    optimization_method=None,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f1acc6e6",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Nächste Schritte\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Empfehlungen\">\n",
        "  * Erfahren Sie, wie Sie [den Optimierungsgrad einstellen](set-optimization).\n",
        "  * Weitere [häufig verwendete Parameter](common-parameters) überprüfen.\n",
        "  * Erfahren Sie, wie Sie [die Optimierungsstufe einstellen](/docs/guides/runtime-options-overview).\n",
        "  * Lesen Sie den Abschnitt „[Transpile mit Pass-Managern](/docs/guides/transpile-with-pass-managers) “.\n",
        "  * Beispiele finden Sie unter [Darstellung von Quantencomputern](/docs/guides/represent-quantum-computers).\n",
        "  * Erfahren Sie, [wie Sie Schaltkreise](/docs/guides/circuit-transpilation-settings) im Rahmen des Qiskit-Patterns-Workflows transpilieren.\n",
        "  * Lesen Sie die [Transpile API Dokumentation](/docs/api/qiskit/transpiler).\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}