{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "35492576-b15e-43e6-8b9b-293631c6b194",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"OpenQASM 2 und die Qiskit SDK\"\n",
        "description: \"So konvertieren Sie Code zwischen „ OpenQASM 2” und „ Qiskit SDK ”.\"\n",
        "---\n",
        "\n",
        "<span id=\"openqasm-2-and-the-qiskit-sdk\" />\n",
        "\n",
        "# OpenQASM 2 und die Qiskit SDK\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f1330cdd-036e-4a99-b2d1-0348a4d70cb3",
      "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",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "328f6a16-5ec4-4d80-8507-f5d97aa02f26",
      "metadata": {},
      "source": [
        "Das Qiskit SDK bietet einige Werkzeuge zur Konvertierung zwischen OpenQASM Repräsentationen von Quantenprogrammen und der [QuantumCircuit](/docs/api/qiskit/qiskit.circuit.QuantumCircuit) klasse.\n",
        "\n",
        "<span id=\"qasm2-import\" />\n",
        "\n",
        "<span id=\"import-an-openqasm-2-program-into-qiskit\" />\n",
        "\n",
        "## OpenQASM 2-Programm in Qiskit importieren\n",
        "\n",
        "Zwei Funktionen importieren OpenQASM 2 Programme in Qiskit.\n",
        "Diese sind [`qasm2.load()`](../api/qiskit/qasm2#load)der einen Dateinamen annimmt, und [`qasm2.loads()`](../api/qiskit/qasm2#loads), die das Programm OpenQASM 2 als Zeichenkette annimmt.\n",
        "\n",
        "```python\n",
        "import qiskit.qasm2\n",
        "\n",
        "qiskit.qasm2.load(filename, include_path=('.',), include_input_directory='append', custom_instructions=(), custom_classical=(), strict=False)\n",
        "qiskit.qasm2.loads(program, include_path=('.',), custom_instructions=(), custom_classical=(), strict=False)\n",
        "```\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "52d909cd-6332-46a3-9a1a-330e1c4a66cf",
      "metadata": {},
      "source": [
        "Weitere Informationen finden Sie in der [OpenQASM 2 Qiskit API](/docs/api/qiskit/qasm2).\n",
        "\n",
        "<span id=\"import-simple-programs\" />\n",
        "\n",
        "### Einfache Programme importieren\n",
        "\n",
        "Für die meisten OpenQASM 2 Programme können Sie einfach `qasm2.load` und `qasm2.loads` mit einem einzigen Argument verwenden.\n",
        "\n",
        "<span id=\"example-import-an-openqasm-2-program-as-a-string\" />\n",
        "\n",
        "#### Beispiel: Importieren Sie ein Programm „ OpenQASM 2” als Zeichenfolge\n",
        "\n",
        "Verwenden Sie `qasm2.loads()` , um ein OpenQASM 2 Programm als String in eine QuantumCircuit:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "f7d62945-1899-4b39-acee-6aaf6b37db09",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "     ┌───┐     ┌─┐   \n",
              "q_0: ┤ H ├──■──┤M├───\n",
              "     └───┘┌─┴─┐└╥┘┌─┐\n",
              "q_1: ─────┤ X ├─╫─┤M├\n",
              "          └───┘ ║ └╥┘\n",
              "c: 2/═══════════╩══╩═\n",
              "                0  1 "
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import qiskit.qasm2\n",
        "\n",
        "program = \"\"\"\n",
        "    OPENQASM 2.0;\n",
        "    include \"qelib1.inc\";\n",
        "    qreg q[2];\n",
        "    creg c[2];\n",
        "\n",
        "    h q[0];\n",
        "    cx q[0], q[1];\n",
        "\n",
        "    measure q -> c;\n",
        "\"\"\"\n",
        "circuit = qiskit.qasm2.loads(program)\n",
        "circuit.draw()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6556b10e-7d15-4c51-a917-a969a23babff",
      "metadata": {},
      "source": [
        "<span id=\"example-import-an-openqasm-2-program-from-a-file\" />\n",
        "\n",
        "#### Beispiel: Importieren eines Programms „ OpenQASM 2” aus einer Datei\n",
        "\n",
        "Verwenden Sie `load()` , um ein OpenQASM 2 Programm aus einer Datei in eine QuantumCircuit:\n",
        "\n",
        "```python\n",
        "import qiskit.qasm2\n",
        "circuit = qiskit.qasm2.load(\"myfile.qasm\")\n",
        "```\n",
        "\n",
        "<span id=\"custom-instructions\" />\n",
        "\n",
        "<span id=\"link-openqasm-2-gates-with-qiskit-gates\" />\n",
        "\n",
        "### Link OpenQASM 2 Gates mit Qiskit Gates\n",
        "\n",
        "Standardmäßig behandelt der OpenQASM 2 Importer von Qiskit die Include-Datei `\"qelib1.inc\"` als eine *de facto* Standardbibliothek.\n",
        "Der Importer behandelt diese Datei so, als enthalte sie genau die Gatter, die in der [ursprünglichen Definition von OpenQASM 2](https://arxiv.org/abs/1707.03429) beschrieben sind.\n",
        "Qiskit verwendet die eingebauten Gatter in der [Schaltkreisbibliothek](../api/qiskit/circuit_library), um die Gatter in `\"qelib1.inc\"` darzustellen.\n",
        "Gatter, die im Programm durch manuelle OpenQASM 2 `gate` Anweisungen definiert werden, werden standardmäßig als benutzerdefinierte [Qiskit `Gate` Unterklassen](../api/qiskit/qiskit.circuit.Gate) konstruiert.\n",
        "\n",
        "Sie können den Importer anweisen, bestimmte [`Gate`](../api/qiskit/qiskit.circuit.Gate) klassen für die gegebenen `gate` Anweisungen zu verwenden, auf die er trifft.\n",
        "Sie können diesen Mechanismus auch verwenden, um zusätzliche Gatternamen als \"eingebaut\" zu behandeln, d.h. sie müssen nicht explizit definiert werden.\n",
        "Wenn Sie außerhalb von `\"qelib1.inc\"` angeben, welche Gatterklassen für `gate` Anweisungen verwendet werden sollen, ist die resultierende Schaltung in der Regel effizienter.\n",
        "\n",
        "<Admonition type=\"warning\">\n",
        "  Laut Qiskit SDKv1.0 verhält sich *der* Qiskit-Exporter OpenQASM 2 (siehe [Exportieren eines Qiskit-Schaltkreises nach OpenQASM 2](#qasm2-export) ) immer noch so, als `\"qelib1.inc\"` hätte er mehr Gatter als tatsächlich vorhanden sind.\n",
        "  Das bedeutet, dass die Standardeinstellungen des Importprogramms möglicherweise nicht in der Lage sind, ein von unserem Importprogramm exportiertes Programm zu importieren.\n",
        "  Siehe [das konkrete Beispiel zur Verwendung des Legacy-Exporters,](#qasm2-import-legacy) um dieses Problem zu beheben.\n",
        "\n",
        "  Diese Diskrepanz ist ein veraltetes Verhalten von Qiskit und [wird in einer späteren Version von Qiskit behoben](https://github.com/Qiskit/qiskit/issues/10737) werden.\n",
        "</Admonition>\n",
        "\n",
        "Um Informationen über eine benutzerdefinierte Anweisung an den OpenQASM 2 Importer zu übergeben, verwenden Sie [die Klasse `qasm2.CustomInstruction` ](../api/qiskit/qasm2#qiskit.qasm2.CustomInstruction).\n",
        "Dazu sind vier Informationen erforderlich, und zwar in dieser Reihenfolge:\n",
        "\n",
        "* Der **Name** des Tores, der im Programm OpenQASM 2 verwendet wird\n",
        "* Die **Anzahl der Winkelparameter**, die das Tor annimmt\n",
        "* Die **Anzahl der Qubits**, auf die das Gate wirkt\n",
        "* Die Python **Konstruktorklasse** oder -funktion für das Tor, die die Torparameter (aber nicht die Qubits) als einzelne Argumente entgegennimmt\n",
        "\n",
        "Wenn der Importer auf eine `gate` Definition stößt, die mit einer bestimmten benutzerdefinierten Anweisung übereinstimmt, verwendet er diese benutzerdefinierte Information, um das Gate-Objekt zu rekonstruieren.\n",
        "Wenn eine `gate` Anweisung gefunden wird, die mit der `name` einer benutzerdefinierten Anweisung übereinstimmt, aber nicht mit der Anzahl der Parameter und der Anzahl der Qubits übereinstimmt, löst der Importeur eine [`QASM2ParseError`](../api/qiskit/qasm2#qasm2parseerror), um die Nichtübereinstimmung zwischen den gelieferten Informationen und dem Programm anzuzeigen.\n",
        "\n",
        "Zusätzlich kann ein fünftes Argument `builtin` optional auf `True` gesetzt werden, um das Tor automatisch innerhalb des OpenQASM 2 Programms verfügbar zu machen, auch wenn es nicht explizit definiert ist.\n",
        "Wenn der Importer auf eine explizite `gate` Definition für einen eingebauten benutzerdefinierten Befehl stößt, wird er diesen stillschweigend akzeptieren.\n",
        "Wenn eine explizite Definition desselben Namens nicht mit der bereitgestellten benutzerdefinierten Anweisung kompatibel ist, wird wie zuvor eine [`QASM2ParseError`](../api/qiskit/qasm2#qasm2parseerror) ausgelöst.\n",
        "Dies ist nützlich für die Kompatibilität mit älteren OpenQASM 2-Exportern und mit bestimmten anderen Quantenplattformen, die die \"Basisgatter\" ihrer Hardware als eingebaute Anweisungen behandeln.\n",
        "\n",
        "Qiskit bietet ein Datenattribut für die Arbeit mit OpenQASM 2 Programmen, die mit älteren Versionen von [Qiskits OpenQASM 2 Exportfunktionen](#qasm2-export) erstellt wurden.\n",
        "Dies ist [`qasm2.LEGACY_CUSTOM_INSTRUCTIONS`](../api/qiskit/qasm2#legacy-compatibility), das als `custom_instructions` Argument für [`qasm2.load()`](../api/qiskit/qasm2#load) und [`qasm2.loads()`](../api/qiskit/qasm2#loads).\n",
        "\n",
        "<span id=\"qasm2-import-legacy\" />\n",
        "\n",
        "<span id=\"example-import-a-program-created-by-qiskits-legacy-exporter\" />\n",
        "\n",
        "#### Beispiel: Importieren eines mit dem alten Exporter von Qiskit erstellten Programms\n",
        "\n",
        "Dieses OpenQASM 2 Programm verwendet Gatter, die nicht in der Originalversion von `\"qelib1.inc\"` enthalten sind, ohne sie zu deklarieren, aber Standardgatter in der Qiskit-Bibliothek sind.\n",
        "Sie können mit [`qasm2.LEGACY_CUSTOM_INSTRUCTIONS`](../api/qiskit/qasm2#legacy-compatibility) können Sie dem Importeur auf einfache Weise mitteilen, dass er denselben Satz von Gates verwenden soll, den der OpenQASM 2 Exporter von Qiskit zuvor verwendet hat.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "a4b52b96-1b2d-48bb-8aa4-bd413aa3acea",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit import qasm2\n",
        "\n",
        "program = \"\"\"\n",
        "    OPENQASM 2.0;\n",
        "    include \"qelib1.inc\";\n",
        "\n",
        "    qreg q[4];\n",
        "    creg c[4];\n",
        "\n",
        "    h q[0];\n",
        "    cx q[0], q[1];\n",
        "\n",
        "    // 'rxx' is not actually in `qelib1.inc`,\n",
        "    // but Qiskit used to behave as if it were.\n",
        "    rxx(0.75) q[2], q[3];\n",
        "\n",
        "    measure q -> c;\n",
        "\"\"\"\n",
        "circuit = qasm2.loads(\n",
        "    program,\n",
        "    custom_instructions=qasm2.LEGACY_CUSTOM_INSTRUCTIONS,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "0de0c75d-3890-4138-a994-e8dcf728d7f3",
      "metadata": {},
      "source": [
        "<span id=\"example-use-a-particular-gate-class-when-importing-an-openqasm-2-program\" />\n",
        "\n",
        "#### Beispiel: Verwenden Sie beim Importieren eines Programms aus „ OpenQASM 2“ eine bestimmte Gate-Klasse\n",
        "\n",
        "Qiskit kann im Allgemeinen nicht überprüfen, ob die Definition in einer OpenQASM 2 `gate` Anweisung genau einem Qiskit Standard-Bibliotheksgatter entspricht.\n",
        "Stattdessen wählt Qiskit ein benutzerdefiniertes Tor anhand der angegebenen Definition aus.\n",
        "Dies kann weniger effizient sein als die Verwendung eines der eingebauten Standardgatter oder eines benutzerdefinierten Gatters.\n",
        "Sie können `gate` Anweisungen mit bestimmten Klassen manuell definieren.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "73432f4a-c5c1-4cec-ba5d-85ad4787ef52",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit import qasm2\n",
        "from qiskit.circuit import Gate\n",
        "from qiskit.circuit.library import RZXGate\n",
        "\n",
        "\n",
        "# Define a custom gate that takes one qubit and two angles.\n",
        "class MyGate(Gate):\n",
        "    def __init__(self, theta, phi):\n",
        "        super().__init__(\"my\", 1, [theta, phi])\n",
        "\n",
        "\n",
        "custom_instructions = [\n",
        "    # Link the OpenQASM 2 name 'my' with our custom gate.\n",
        "    qasm2.CustomInstruction(\"my\", 2, 1, MyGate),\n",
        "    # Link the OpenQASM 2 name 'rzx' with Qiskit's\n",
        "    # built-in RZXGate.\n",
        "    qasm2.CustomInstruction(\"rzx\", 1, 2, RZXGate),\n",
        "]\n",
        "\n",
        "program = \"\"\"\n",
        "    OPENQASM 2.0;\n",
        "\n",
        "    gate my(theta, phi) q {\n",
        "        U(theta / 2, phi, -theta / 2) q;\n",
        "    }\n",
        "    gate rzx(theta) a, b {\n",
        "        // It doesn't matter what definition is\n",
        "        // supplied, if the parameters match;\n",
        "        // Qiskit will still use `RZXGate`.\n",
        "    }\n",
        "\n",
        "    qreg q[2];\n",
        "    my(0.25, 0.125) q[0];\n",
        "    rzx(pi) q[0], q[1];\n",
        "\"\"\"\n",
        "\n",
        "circuit = qasm2.loads(\n",
        "    program,\n",
        "    custom_instructions=custom_instructions,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "eb78c9cc-e600-4be0-8616-b9bc5ddad511",
      "metadata": {},
      "source": [
        "<span id=\"example-define-a-new-built-in-gate-in-an-openqasm-2-program\" />\n",
        "\n",
        "#### Beispiel: Definieren Sie ein neues integriertes Gate in einem Programm „ OpenQASM 2”\n",
        "\n",
        "Wenn das Argument `builtin=True` gesetzt ist, braucht ein benutzerdefiniertes Tor keine zugehörige Definition zu haben.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "c37eb527-bed0-4c62-8404-f79e49d42318",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit import qasm2\n",
        "from qiskit.circuit import Gate\n",
        "\n",
        "\n",
        "# Define a custom gate that takes one qubit and two angles.\n",
        "class MyGate(Gate):\n",
        "    def __init__(self, theta, phi):\n",
        "        super().__init__(\"my\", 1, [theta, phi])\n",
        "\n",
        "\n",
        "custom_instructions = [\n",
        "    qasm2.CustomInstruction(\"my\", 2, 1, MyGate, builtin=True),\n",
        "]\n",
        "\n",
        "program = \"\"\"\n",
        "    OPENQASM 2.0;\n",
        "    qreg q[1];\n",
        "\n",
        "    my(0.25, 0.125) q[0];\n",
        "\"\"\"\n",
        "\n",
        "circuit = qasm2.loads(\n",
        "    program,\n",
        "    custom_instructions=custom_instructions,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4145ce48-0001-42e2-be5e-83c2e31f0fd9",
      "metadata": {},
      "source": [
        "<span id=\"custom-classical\" />\n",
        "\n",
        "<span id=\"define-custom-classical-functions\" />\n",
        "\n",
        "### Benutzerdefinierte klassische Funktionen definieren\n",
        "\n",
        "OpenQASM 2 enthält einige eingebaute klassische Funktionen zur Verwendung in Gate-Argumenten.\n",
        "Sie können die Sprache um weitere Funktionen erweitern, indem Sie das Argument `custom_classical` für [`qasm2.load()`](../api/qiskit/qasm2#load) und [`qasm2.loads()`](../api/qiskit/qasm3#loads)mit der [`qasm2.CustomClassical`](../api/qiskit/qasm2#qiskit.qasm2.CustomClassical) klasse.\n",
        "\n",
        "Um eine benutzerdefinierte klassische Funktion zu definieren, müssen Sie diese angeben:\n",
        "\n",
        "* Der *Name* der Funktion, wie er im Programm OpenQASM 2 erscheint\n",
        "* Die Anzahl der akzeptierten Gleitkomma-Argumente\n",
        "* Ein aufrufbares Python Objekt, das die Funktion\n",
        "\n",
        "Alle benutzerdefinierten klassischen Funktionen werden vom Importer als in die Sprache OpenQASM 2 integriert behandelt.\n",
        "Innerhalb der Sprache OpenQASM 2 gibt es keine offizielle Möglichkeit, neue Funktionen zu definieren; dies ist eine Qiskit-Erweiterung.\n",
        "\n",
        "<span id=\"example-use-custom-classical-instructions\" />\n",
        "\n",
        "#### Beispiel: Verwenden Sie benutzerdefinierte klassische Anweisungen\n",
        "\n",
        "Hier bieten wir zwei benutzerdefinierte klassische Funktionen an.\n",
        "Die erste ist einfach und fügt der Eingabe lediglich eine Eins hinzu.\n",
        "Die zweite ist die Funktion `math.atan2`, die die mathematische Operation $\\arctan(y/x)$ in einer quadrantengerechten Weise darstellt.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "b135de19-4b54-4820-8f9d-84a42494debe",
      "metadata": {},
      "outputs": [],
      "source": [
        "import math\n",
        "from qiskit import qasm2\n",
        "\n",
        "program = \"\"\"\n",
        "    include \"qelib1.inc\";\n",
        "    qreg q[2];\n",
        "    rx(arctan(pi, 3 + add_one(0.2))) q[0];\n",
        "    cx q[0], q[1];\n",
        "\"\"\"\n",
        "\n",
        "\n",
        "def add_one(x):\n",
        "    return x + 1\n",
        "\n",
        "\n",
        "customs = [\n",
        "    # Our `add_one` takes only one parameter.\n",
        "    qasm2.CustomClassical(\"add_one\", 1, add_one),\n",
        "    # `arctan` takes two parameters, and `math.atan2` implements it.\n",
        "    qasm2.CustomClassical(\"arctan\", 2, math.atan2),\n",
        "]\n",
        "circuit = qasm2.loads(program, custom_classical=customs)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4373999e-9df1-4078-ab83-d1c88a577aaf",
      "metadata": {},
      "source": [
        "<span id=\"strict\" />\n",
        "\n",
        "<span id=\"strict-mode\" />\n",
        "\n",
        "### Strikter Modus\n",
        "\n",
        "Standardmäßig ist dieser Parser entspannter als die offizielle Spezifikation.\n",
        "Es erlaubt abschließende Kommas in Parameterlisten, unnötige (leere Anweisung) Semikolons, das Weglassen der `OPENQASM 2.0;` Versionsanweisung und verschiedene andere Qualitätsverbesserungen, ohne Fehler zu erzeugen.\n",
        "Sie können jedoch den \"Letter-of-the-Spec\"-Modus mit `strict=True` verwenden.\n",
        "\n",
        "<span id=\"qasm2-export\" />\n",
        "\n",
        "<span id=\"export-a-qiskit-circuit-to-openqasm-2\" />\n",
        "\n",
        "## Exportieren Sie einen Qiskit-Schaltkreis nach „ OpenQASM “ 2\n",
        "\n",
        "Qiskit kann auch eine [`QuantumCircuit`](../api/qiskit/qiskit.circuit.QuantumCircuit) nach OpenQASM 2 exportieren.\n",
        "Sie verwenden die Funktion [`qasm2.dump()`](../api/qiskit/qasm2#dump) um in eine Datei zu schreiben, und [`qasm2.dumps()`](../api/qiskit/qasm2#dumps) um in eine Zeichenkette zu schreiben.\n",
        "Diese Funktionen haben derzeit eine sehr einfache Schnittstelle: Sie akzeptieren eine Schaltung und, nur im Fall von [`qasm2.dump()`](../api/qiskit/qasm2#dump)einen Ort, an den die Ausgabe geschrieben werden soll.\n",
        "\n",
        "<Admonition type=\"warning\">\n",
        "  Der OpenQASM 2 Exporter von Qiskit geht immer noch von einer veralteten, nicht standardisierten Version der `\"qelib1.inc\"` Include-Datei aus.\n",
        "  [Dies wird in einer späteren Version von Qiskit behoben werden](https://github.com/Qiskit/qiskit/issues/10737), aber in der Zwischenzeit, wenn Sie ein OpenQASM 2 Programm, das mit Qiskit erstellt wurde, wieder importieren müssen, verwenden Sie [das obige Beispiel, um dem Importer die Legacy Gates mitzuteilen](#qasm2-import-legacy).\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"example-export-a-circuit-to-openqasm-2\" />\n",
        "\n",
        "### Beispiel: Exportieren Sie eine Schaltung nach „ OpenQASM “ 2\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "70f4d657-8be3-400d-a793-d36962a855ef",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit import QuantumCircuit, qasm2\n",
        "\n",
        "# Define any circuit.\n",
        "circuit = QuantumCircuit(2, 2)\n",
        "circuit.h(0)\n",
        "circuit.cx(0, 1)\n",
        "circuit.measure([0, 1], [0, 1])\n",
        "\n",
        "# Export to a string.\n",
        "program = qasm2.dumps(circuit)\n",
        "\n",
        "# Export to a file.\n",
        "qasm2.dump(circuit, \"my_file.qasm\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "1c0fd601-51ec-4d82-8821-20e0554a3662",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Nächste Schritte\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Empfehlungen\">\n",
        "  * Erfahren Sie in der Anleitung [IBM Quantum Composer](/docs/guides/composer), wie Sie OpenQASM Code erzeugen.\n",
        "  * Siehe die [OpenQASM 2 Qiskit API-Referenz](/docs/api/qiskit/qasm2).\n",
        "  * Lesen Sie den Abschnitt [„Überprüfen Sie Ihr Programm“](/docs/guides/debugging-tools) durch.\n",
        "  * Besuchen Sie die [OpenQASM Live-Spezifikation](https://openqasm.com/).\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": 4
}