{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "5b6cbc5d-14d4-40c6-a702-0ce635c483d8",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Darstellung von Quantencomputern für den Transpiler\"\n",
        "description: \"Erfahren Sie mehr über Kopplungskarten, Basisgatter und Prozessorfehler beim Transpiling\"\n",
        "---\n",
        "\n",
        "<span id=\"represent-quantum-computers-for-the-transpiler\" />\n",
        "\n",
        "# Darstellung von Quantencomputern für den Transpiler\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "aed00912-17af-4e4c-8639-77957b314b98",
      "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": "9dbd70a7-3353-4286-aa6b-3547d7894f58",
      "metadata": {},
      "source": [
        "Um eine abstrakte Schaltung in eine ISA-Schaltung umzuwandeln, die auf einer bestimmten QPU (Quantum Processing Unit) laufen kann, benötigt der Transpiler bestimmte Informationen über die QPU. Diese Informationen sind an zwei Stellen zu finden: dem `BackendV2` (oder legacy `BackendV1`) Objekt, an das Sie Aufträge übermitteln wollen, und dem `Target` Attribut des Backends.\n",
        "\n",
        "* Der [`Target`](/docs/api/qiskit/qiskit.transpiler.Target) enthält alle relevanten Einschränkungen eines Geräts, wie beispielsweise den unterstützten Befehlssatz, die Qubit-Konnektivität sowie Informationen zu Impulsen oder Zeitabläufen.\n",
        "* Das [`Backend`](/docs/api/qiskit/qiskit.providers.BackendV2) verfügt standardmäßig über `Target` ein, enthält zusätzliche Informationen – wie beispielsweise das [`InstructionScheduleMap`](/docs/api/qiskit/1.4/qiskit.pulse.InstructionScheduleMap)– und stellt die Schnittstelle für die Übermittlung von Quanten-Schaltkreis-Aufträgen bereit.\n",
        "\n",
        "Sie können dem Transpiler auch explizit Informationen zur Verfügung stellen, z. B. wenn Sie einen bestimmten Anwendungsfall haben oder wenn Sie glauben, dass diese Informationen dem Transpiler helfen, eine optimierte Schaltung zu erstellen.\n",
        "\n",
        "Die Genauigkeit, mit der der Transpiler die am besten geeignete Schaltung für eine bestimmte Hardware erzeugt, hängt davon ab, wie viele Informationen `Target` oder `Backend` über die Beschränkungen hat.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Da viele der zugrundeliegenden Umsetzungsalgorithmen stochastisch sind, gibt es keine Garantie, dass eine bessere Schaltung gefunden wird.\n",
        "</Admonition>\n",
        "\n",
        "Auf dieser Seite finden Sie mehrere Beispiele für die Übergabe von QPU-Informationen an den Transpiler.\n",
        "\n",
        "<span id=\"default-config\" />\n",
        "\n",
        "<span id=\"default-configuration\" />\n",
        "\n",
        "## Standardkonfiguration\n",
        "\n",
        "Die einfachste Verwendung des Transpilers ist die Bereitstellung aller QPU-Informationen durch die Bereitstellung der `Backend` oder `Target`. Um die Funktionsweise des Transpilers besser zu verstehen, konstruieren Sie eine Schaltung und transpilieren Sie sie mit verschiedenen Informationen, wie folgt.\n",
        "\n",
        "Importieren Sie die erforderlichen Bibliotheken und instanziieren Sie die QPU: Um eine abstrakte Schaltung in eine ISA-Schaltung umzuwandeln, die auf einem bestimmten Prozessor laufen kann, benötigt der Transpiler bestimmte Informationen über den Prozessor.  Normalerweise werden diese Informationen in der Datei [`Backend`](/docs/api/qiskit/qiskit.providers.Backend#backend) oder [`Target`](/docs/api/qiskit/qiskit.transpiler.Target#target) gespeichert, das dem Transpiler zur Verfügung gestellt wird, und es werden keine weiteren Informationen benötigt. Sie können dem Transpiler jedoch auch explizit Informationen zur Verfügung stellen, z. B. wenn Sie einen bestimmten Anwendungsfall haben oder wenn Sie glauben, dass diese Informationen dem Transpiler helfen, eine optimierte Schaltung zu erstellen.\n",
        "\n",
        "In diesem Abschnitt werden mehrere Beispiele für die Übergabe von Informationen an den Transpiler vorgestellt.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  In diesen Beispielen wird das Ziel aus dem `qiskit_ibm_runtime`[`FakeSherbrooke`](/docs/api/qiskit-ibm-runtime/fake-provider-fake-sherbrooke#fakesherbrooke) Mock-Backend verwendet.  Sie können es jedoch auf jedem Qiskit-kompatiblen echten oder simulierten Backend ausprobieren.  Ihre Ergebnisse können davon abweichen.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "a52d0681-5436-4d7a-8d45-9832472e59ca",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime.fake_provider import FakeSherbrooke\n",
        "\n",
        "backend = FakeSherbrooke()\n",
        "target = backend.target"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4064b5ad-8a3a-462b-ae30-29576230c084",
      "metadata": {},
      "source": [
        "Die Beispielschaltung verwendet eine Instanz von [`efficient_su2`](/docs/api/qiskit/qiskit.circuit.library.efficient_su2) aus der Schaltkreisbibliothek von Qiskit.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "97f9acc1-ac53-4025-b413-485777932a9b",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/97f9acc1-ac53-4025-b413-485777932a9b-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.circuit.library import efficient_su2\n",
        "\n",
        "qc = efficient_su2(12, entanglement=\"circular\", reps=1)\n",
        "\n",
        "qc.draw(\"mpl\")"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "b133229c-0146-4feb-a366-548d175b858e",
      "metadata": {},
      "source": [
        "In diesem Beispiel werden die Standardeinstellungen für die Übertragung auf die Website `backend`'s `target` verwendet, die alle erforderlichen Informationen für die Konvertierung der Schaltung in eine für das Backend geeignete Schaltung liefert.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "4b81fb9d-d199-45c5-b119-c1f0b973afe9",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/4b81fb9d-d199-45c5-b119-c1f0b973afe9-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.transpiler import generate_preset_pass_manager\n",
        "\n",
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, target=target, seed_transpiler=12345\n",
        ")\n",
        "qc_t_target = pass_manager.run(qc)\n",
        "qc_t_target.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2ad3848d",
      "metadata": {},
      "source": [
        "Dieses Beispiel wird in späteren Abschnitten dieses Themas verwendet, um zu veranschaulichen, dass die Kopplungskarte und der unterstützte Befehlssatz die wesentlichen Informationen sind, die an den Transpiler übergeben werden müssen, um eine optimale Schaltungserstellung zu erreichen. Die QPU kann in der Regel Standardeinstellungen für andere Informationen auswählen, die nicht übergeben werden, wie z. B. Zeitplanung und Terminierung.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "956f1b7a-80b4-4cda-9ecf-6057f560deb9",
      "metadata": {},
      "source": [
        "<span id=\"coupling-map\" />\n",
        "\n",
        "## Kopplungskarte\n",
        "\n",
        "Die Kopplungskarte ist ein Diagramm, das zeigt, welche Qubits miteinander verbunden sind und somit Zwei-Qubit-Tore zwischen ihnen haben. Manchmal ist dieser Graph richtungsabhängig, was bedeutet, dass die Zwei-Qubit-Tore nur in eine Richtung gehen können. Der Transpiler kann jedoch jederzeit die Richtung eines Gatters umkehren, indem er zusätzliche Ein-Qubit-Gatter hinzufügt. Ein abstrakter Quantenschaltkreis kann immer auf diesem Graphen dargestellt werden, selbst wenn seine Konnektivität begrenzt ist, indem man SWAP-Gatter einführt, um die Quanteninformation zu verschieben.\n",
        "\n",
        "Die Qubits unserer abstrakten Schaltkreise werden als *virtuelle Qubits* bezeichnet und die auf der Kopplungskarte als *physikalische Qubits*. Der Transpiler sorgt für ein Mapping zwischen virtuellen und physikalischen Qubits. Einer der ersten Schritte bei der Transpilierung, die *Layout-Phase*, führt dieses Mapping durch.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Obwohl die Routing-Phase standardmäßig mit der *Layout-Phase* - die die eigentlichen Qubits auswählt - verflochten ist, werden sie in diesem Thema der Einfachheit halber als separate Phasen behandelt. Die Kombination von Routing und Layout wird als *Qubit-Mapping* bezeichnet.  Weitere Informationen zu diesen Stufen finden Sie im Thema [Transpiler-Stufen](transpiler-stages).\n",
        "</Admonition>\n",
        "\n",
        "Übergeben Sie das Schlüsselwortargument `coupling_map` , um seine Auswirkungen auf den Transpiler zu sehen:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "ec354bee-e06b-42ea-a117-6c1a9308ca73",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/ec354bee-e06b-42ea-a117-6c1a9308ca73-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "coupling_map = target.build_coupling_map()\n",
        "\n",
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=0, coupling_map=coupling_map, seed_transpiler=12345\n",
        ")\n",
        "qc_t_cm_lv0 = pass_manager.run(qc)\n",
        "qc_t_cm_lv0.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "0d3fe7d4-3a40-423d-975f-b4de6613efe9",
      "metadata": {},
      "source": [
        "Wie oben gezeigt, wurden mehrere SWAP-Gatter eingefügt (die jeweils aus drei CX-Gattern bestehen), was bei aktuellen Geräten eine Menge Fehler verursacht. Um zu sehen, welche Qubits in der tatsächlichen Qubit-Topologie ausgewählt sind, verwenden Sie `plot_circuit_layout` von Qiskit Visualizations:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "9be74535-ed36-4d51-afeb-ee53c3f8a046",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/9be74535-ed36-4d51-afeb-ee53c3f8a046-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.visualization import plot_circuit_layout\n",
        "\n",
        "plot_circuit_layout(qc_t_cm_lv0, backend, view=\"physical\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "633744e3-b9e7-4333-ac7b-0089f28e9c27",
      "metadata": {},
      "source": [
        "Dies zeigt, dass unsere virtuellen Qubits 0-11 trivialerweise auf die Linie der physikalischen Qubits 0-11 abgebildet wurden. Kehren wir zur Standardeinstellung (`optimization_level=1`) zurück, die `VF2Layout` verwendet, wenn ein Routing erforderlich ist.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "8035fd05-f7cd-4151-b19a-4968202246e6",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/8035fd05-f7cd-4151-b19a-4968202246e6-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, coupling_map=coupling_map, seed_transpiler=12345\n",
        ")\n",
        "qc_t_cm_lv1 = pass_manager.run(qc)\n",
        "qc_t_cm_lv1.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "217c75f4-4c86-46bb-9a34-b451ff4743ef",
      "metadata": {},
      "source": [
        "Jetzt werden keine SWAP-Gates eingefügt, und die ausgewählten physikalischen Qubits sind bei Verwendung der Klasse `target` dieselben.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "id": "25d9fac3-abda-4b2d-81b4-351dc0772722",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/25d9fac3-abda-4b2d-81b4-351dc0772722-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.visualization import plot_circuit_layout\n",
        "\n",
        "plot_circuit_layout(qc_t_cm_lv1, backend, view=\"physical\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "db62df0f",
      "metadata": {},
      "source": [
        "Jetzt befindet sich das Layout in einem Ring.  Da bei diesem Layout die Konnektivität der Schaltung berücksichtigt wird, gibt es keine SWAP-Gates, was die Ausführung der Schaltung erheblich verbessert.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f62e0541",
      "metadata": {},
      "source": [
        "<span id=\"supported-instructions\" />\n",
        "\n",
        "## Unterstützte Anweisungen\n",
        "\n",
        "Jeder Quantencomputer unterstützt einen begrenzten Befehlssatz.  Jedes Gatter im Schaltkreis muss in die Elemente dieser Menge übersetzt werden. Dieses Set sollte aus Ein- und Zwei-Qubit-Gates bestehen, die ein universelles Gate-Set bilden, d. h. jede Quantenoperation kann in diese Gates zerlegt werden.  Dies wird vom [BasisTranslator](/docs/api/qiskit/qiskit.transpiler.passes.BasisTranslator) durchgeführt und `basis_gates` kann als Schlüsselwortargument für den Transpiler angegeben werden, um diese Informationen bereitzustellen.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "4445ff03",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "['id', 'delay', 'reset', 'if_else', 'for_loop', 'x', 'rz', 'ecr', 'switch_case', 'measure', 'sx']\n"
          ]
        }
      ],
      "source": [
        "basis_gates = list(target.operation_names)\n",
        "print(basis_gates)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6e9aed06",
      "metadata": {},
      "source": [
        "Die Standard-Ein-Qubit-Gatter auf `FakeSherbrooke` sind `rz`, `x`, und `sx`, und das Standard-Zwei-Qubit-Gatter ist `ecr` (Echoed Cross-Resonance). CX-Gatter bestehen aus `ecr` Gattern, daher wird auf einigen `ecr` QPUs als Basisgatter für zwei Qubits festgelegt, während auf anderen `cx` als Standard gilt. Das `ecr` Tor ist der *verwickelnde* Teil des `cx` Tors. Neben den Steuerlogikgattern gibt es auch `delay` und `measurement` Befehle.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  QPUs verfügen über Standard-Basistore, aber Sie können beliebige Tore auswählen, solange Sie die Anweisung bereitstellen oder Impulstore hinzufügen (siehe „[Transpiler-Durchläufe erstellen](/docs/guides/custom-transpiler-pass) “) Die Standard-Basisgatter sind diejenigen, für die Kalibrierungen auf der QPU durchgeführt wurden, sodass keine weiteren Befehls-/Impulsgatter bereitgestellt werden müssen. Beispielsweise ist bei einigen `cx` QPUs das Standard-Zwei-Qubit-Gatter und `ecr` bei anderen. Weitere Informationen finden Sie in der Liste der möglichen [nativen Gatter und Operationen](/docs/guides/qpu-information#native-gates).\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "313e4743",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/313e4743-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1,\n",
        "    coupling_map=coupling_map,\n",
        "    basis_gates=basis_gates,\n",
        "    seed_transpiler=12345,\n",
        ")\n",
        "qc_t_cm_bg = pass_manager.run(qc)\n",
        "qc_t_cm_bg.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b0195ba6",
      "metadata": {},
      "source": [
        "Beachten Sie, dass die `CXGate` Objekte in `ecr` Gatter und Einzelqubit-Basissgatter zerlegt wurden.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "eb3f5aff-3ca2-4688-a59e-da05c724ef09",
      "metadata": {},
      "source": [
        "<span id=\"device-error-rates\" />\n",
        "\n",
        "## Gerätefehlerraten\n",
        "\n",
        "Die Klasse `Target` kann Informationen über die Fehlerquoten für Operationen auf dem Gerät enthalten.\n",
        "Der folgende Code ruft zum Beispiel die Eigenschaften des ECR-Gatters (echoed cross-resonance) zwischen Qubit 1 und 0 ab (beachten Sie, dass das ECR-Gatter gerichtet ist):\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "id": "38aa1eca-a6aa-4db9-af36-66289e2059d2",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "InstructionProperties(duration=5.333333333333332e-07, error=0.007494257741828603)"
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "target[\"ecr\"][(1, 0)]"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "90cca3a8-ca25-4795-a22f-57ba6d8cfcaa",
      "metadata": {},
      "source": [
        "Die Ausgabe zeigt die Dauer des Gates (in Sekunden) und seine Fehlerquote an. Um Fehlerinformationen an den Transpiler weiterzugeben, erstellen Sie ein Zielmodell mit dem `basis_gates` und `coupling_map` von oben und füllen es mit Fehlerwerten aus dem Backend `FakeSherbrooke`.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "e92c39d7-4aab-4657-aa9a-1b8b5788cb58",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit.transpiler import Target\n",
        "from qiskit.circuit.controlflow import IfElseOp, SwitchCaseOp, ForLoopOp\n",
        "\n",
        "err_targ = Target.from_configuration(\n",
        "    basis_gates=basis_gates,\n",
        "    coupling_map=coupling_map,\n",
        "    num_qubits=target.num_qubits,\n",
        "    custom_name_mapping={\n",
        "        \"if_else\": IfElseOp,\n",
        "        \"switch_case\": SwitchCaseOp,\n",
        "        \"for_loop\": ForLoopOp,\n",
        "    },\n",
        ")\n",
        "\n",
        "for i, (op, qargs) in enumerate(target.instructions):\n",
        "    if op.name in basis_gates:\n",
        "        err_targ[op.name][qargs] = target.instruction_properties(i)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "433f2772-b397-42ab-b3a5-a44a85192f3c",
      "metadata": {},
      "source": [
        "Transpile mit unserem neuen Ziel `err_targ` als Ziel:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "f1e270c4-e2cc-487e-a050-4180bc321b0b",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/f1e270c4-e2cc-487e-a050-4180bc321b0b-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 12,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, target=err_targ, seed_transpiler=12345\n",
        ")\n",
        "qc_t_cm_bg_et = pass_manager.run(qc)\n",
        "qc_t_cm_bg_et.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f8b516be-805d-4d0b-92f9-44d3fbe3b51f",
      "metadata": {},
      "source": [
        "Da das Ziel Fehlerinformationen enthält, versucht der `VF2PostLayout` Durchgang, die optimalen Qubits zu finden, was zu der gleichen Schaltung führt, die ursprünglich mit den gleichen physikalischen Qubits gefunden wurde.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e815a158-c77a-4e82-bebe-1710d0ae4f1f",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Nächste Schritte\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Empfehlungen\">\n",
        "  * Verstehen Sie [die Standardeinstellungen und Konfigurationsoptionen von Transpilation](defaults-and-configuration-options).\n",
        "  * Lesen Sie das Thema [Häufig verwendete Parameter für die Transpilation](common-parameters).\n",
        "  * Probieren Sie die Anleitung [zum Vergleichen der Transpiler-Einstellungen](/docs/guides/circuit-transpilation-settings#compare-transpiler-settings) aus.\n",
        "  * Siehe 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
}