{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "d518f5b4-a19b-4419-b615-59caae67c080",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"OpenQASM 3 und die „ Qiskit SDK “\"\n",
        "description: \"So konvertieren Sie Code zwischen „ OpenQASM 3” und „ Qiskit SDK ”.\"\n",
        "---\n",
        "\n",
        "<span id=\"openqasm-3-and-the-qiskit-sdk\" />\n",
        "\n",
        "# OpenQASM 3 und die „ Qiskit SDK “\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a86fc5a5-cc81-40e8-96ab-54841218f619",
      "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": "232070ea-8685-4638-ba9d-7b52a123fd2e",
      "metadata": {},
      "source": [
        "Das Qiskit SDK bietet einige Werkzeuge zur Konvertierung zwischen OpenQASM Repräsentationen von Quantenprogrammen und der QuantumCircuit Klasse. Bitte beachten Sie, dass sich diese Werkzeuge noch in einer explorativen Entwicklungsphase befinden und in dem Maße weiterentwickelt werden, in dem die Unterstützung von Qiskit für dynamische Schaltungen, wie sie in OpenQASM 3 zum Ausdruck kommt, zunimmt.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Diese Funktion befindet sich noch in der Erprobungsphase.  Es ist daher wahrscheinlich, dass sich die Syntax und die Fähigkeiten weiterentwickeln werden.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"import-an-openqasm-3-program-into-qiskit\" />\n",
        "\n",
        "## OpenQASM -3-Programm in Qiskit importieren\n",
        "\n",
        "Sie müssen das Paket `qiskit_qasm3_import ` installieren, um diese Funktion nutzen zu können. Installieren Sie mit dem folgenden Befehl.\n",
        "\n",
        "```bash\n",
        "pip install qiskit-qasm3-import\n",
        "```\n",
        "\n",
        "Derzeit gibt es zwei High-Level-Funktionen für den Import von OpenQASM 3 in Qiskit. Diese Funktionen sind `load()`, die einen Dateinamen annimmt, und `loads()`, die das Programm selbst als Zeichenkette annimmt:\n",
        "\n",
        "```python\n",
        "import qiskit.qasm3\n",
        "qiskit.qasm3.load(file_name)\n",
        "qiskit.qasm3.loads(program_string)\n",
        "```\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d3adad38-7523-427e-a358-b7068423f59c",
      "metadata": {},
      "source": [
        "In diesem Beispiel definieren wir ein Quantenprogramm mit OpenQASM 3 und verwenden `loads()` , um es direkt in ein QuantumCircuit:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "e805197c-51fb-4216-8d24-ae26633d29bc",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/interoperate-qiskit-qasm3/extracted-outputs/e805197c-51fb-4216-8d24-ae26633d29bc-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import qiskit.qasm3\n",
        "\n",
        "program = \"\"\"\n",
        "    OPENQASM 3.0;\n",
        "    include \"stdgates.inc\";\n",
        "\n",
        "    input float[64] a;\n",
        "    qubit[3] q;\n",
        "    bit[2] mid;\n",
        "    bit[3] out;\n",
        "\n",
        "    let aliased = q[0:1];\n",
        "\n",
        "    gate my_gate(a) c, t {\n",
        "      gphase(a / 2);\n",
        "      ry(a) c;\n",
        "      cx c, t;\n",
        "    }\n",
        "    gate my_phase(a) c {\n",
        "      ctrl @ inv @ gphase(a) c;\n",
        "    }\n",
        "\n",
        "    my_gate(a * 2) aliased[0], q[{1, 2}][0];\n",
        "    measure q[0] -> mid[0];\n",
        "    measure q[1] -> mid[1];\n",
        "\n",
        "    while (mid == \"00\") {\n",
        "      reset q[0];\n",
        "      reset q[1];\n",
        "      my_gate(a) q[0], q[1];\n",
        "      my_phase(a - pi/2) q[1];\n",
        "      mid[0] = measure q[0];\n",
        "      mid[1] = measure q[1];\n",
        "    }\n",
        "\n",
        "    if (mid[0]) {\n",
        "      let inner_alias = q[{0, 1}];\n",
        "      reset inner_alias;\n",
        "    }\n",
        "\n",
        "    out = measure q;\n",
        "\"\"\"\n",
        "circuit = qiskit.qasm3.loads(program)\n",
        "circuit.draw(\"mpl\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a81fcee5-a89c-4e6d-8a9d-53c7da1e6c0d",
      "metadata": {},
      "source": [
        "<span id=\"export-to-openqasm-3\" />\n",
        "\n",
        "## Exportieren nach „ OpenQASM “ 3\n",
        "\n",
        "Sie können Qiskit-Code nach OpenQASM 3 exportieren, und zwar mit `dumps()`, das in eine Zeichenkette exportiert, oder `dump()`, das in eine Datei exportiert.\n",
        "\n",
        "<span id=\"example-with-dumps\" />\n",
        "\n",
        "### Beispiel mit `dumps()`\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "68e8d8b2-468b-4a70-903a-679355f9b7ee",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "'OPENQASM 3.0;\\ninclude \"stdgates.inc\";\\nbit[2] meas;\\nqubit[2] q;\\nh q[0];\\ncx q[0], q[1];\\nbarrier q[0], q[1];\\nmeas[0] = measure q[0];\\nmeas[1] = measure q[1];\\n'"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit import QuantumCircuit\n",
        "from qiskit.qasm3 import dumps\n",
        "\n",
        "qc = QuantumCircuit(2)\n",
        "qc.h(0)\n",
        "qc.cx(0, 1)\n",
        "qc.measure_all()\n",
        "\n",
        "dumps(qc)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b7a54ec7-c08d-4390-8ce8-b5008c8312d3",
      "metadata": {},
      "source": [
        "<span id=\"example-with-dump\" />\n",
        "\n",
        "### Beispiel mit `dump()`\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "cc93cc6f-08e0-420f-8fb4-64620a53dc5a",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit import QuantumCircuit\n",
        "from qiskit.qasm3 import dump\n",
        "\n",
        "qc = QuantumCircuit(2)\n",
        "qc.h(0)\n",
        "qc.cx(0, 1)\n",
        "qc.measure_all()\n",
        "\n",
        "f = open(\"my_file.txt\", \"w\")\n",
        "dump(qc, f)\n",
        "f.close()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ef8e59ee-2889-4b73-9fe6-30d5e69f7164",
      "metadata": {},
      "source": [
        "Weitere Informationen finden Sie im Abschnitt [Exportieren nach OpenQASM 3](/docs/api/qiskit/qasm3#exporting-to-openqasm-3) in der API-Referenz.\n",
        "\n",
        "<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",
        "  * Lesen Sie die [OpenQASM 3 Qiskit API-Referenz](/docs/api/qiskit/qasm3).\n",
        "  * Besuchen Sie den Abschnitt „[Überprüfen Sie Ihr Programm](/docs/guides/debugging-tools) “.\n",
        "  * Überprüfen 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
}