{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "d518f5b4-a19b-4419-b615-59caae67c080",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"OpenQASM 3 et l' Qiskit SDK\"\n",
        "description: \"Comment convertir du code entre OpenQASM 3 et Qiskit SDK.\"\n",
        "---\n",
        "\n",
        "<span id=\"openqasm-3-and-the-qiskit-sdk\" />\n",
        "\n",
        "# OpenQASM 3 et l' 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=\"Versions de package\">\n",
        "    Le code de cette page a été développé en tenant compte des exigences suivantes.\n",
        "    Nous recommandons d'utiliser ces versions ou des versions plus récentes.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.1\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "232070ea-8685-4638-ba9d-7b52a123fd2e",
      "metadata": {},
      "source": [
        "Le SDK Qiskit fournit des outils de conversion entre les représentations OpenQASM des programmes quantiques et la classe QuantumCircuit. Notez que ces outils sont encore dans une phase exploratoire de développement et qu'ils continueront à évoluer au fur et à mesure que le support de Qiskit pour les capacités de circuits dynamiques exprimées par OpenQASM 3 augmentera.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Cette fonction est encore en phase exploratoire.  Il est donc probable que la syntaxe et les capacités évolueront.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"import-an-openqasm-3-program-into-qiskit\" />\n",
        "\n",
        "## Importer un programme OpenQASM 3 dans Qiskit\n",
        "\n",
        "Vous devez installer le paquet `qiskit_qasm3_import ` pour utiliser cette fonction. L'installation se fait à l'aide de la commande suivante.\n",
        "\n",
        "```bash\n",
        "pip install qiskit-qasm3-import\n",
        "```\n",
        "\n",
        "Actuellement, deux fonctions de haut niveau sont disponibles pour l'importation de OpenQASM 3 dans Qiskit. Ces fonctions sont `load()`, qui prend un nom de fichier, et `loads()`, qui prend le programme lui-même sous la forme d'une chaîne de caractères :\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": [
        "Dans cet exemple, nous définissons un programme quantique à l'aide de OpenQASM 3, et nous utilisons `loads()` pour le convertir directement en un programme quantique 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",
        "## Exporter vers OpenQASM 3\n",
        "\n",
        "Vous pouvez exporter du code Qiskit vers OpenQASM 3 avec `dumps()`, qui exporte vers une chaîne de caractères, ou `dump()`, qui exporte vers un fichier.\n",
        "\n",
        "<span id=\"example-with-dumps\" />\n",
        "\n",
        "### Exemple avec `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",
        "### Exemple avec `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": [
        "Pour plus d'informations, voir la section [Exportation vers OpenQASM 3](/docs/api/qiskit/qasm3#exporting-to-openqasm-3) de la référence API.\n",
        "\n",
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Etapes suivantes\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recommandations\">\n",
        "  * Apprenez à générer le code OpenQASM dans le guide [IBM Quantum Composer](/docs/guides/composer).\n",
        "  * Consultez la référence de l ['API Qiskit sur OpenQASM 3](/docs/api/qiskit/qasm3).\n",
        "  * Consultez la rubrique «[ Vérifier votre programme](/docs/guides/debugging-tools) ».\n",
        "  * Examinez les [spécifications de OpenQASM Live](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
}