{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "d518f5b4-a19b-4419-b615-59caae67c080",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"OpenQASM 3 y el Qiskit SDK\"\n",
        "description: \"Cómo convertir código entre OpenQASM 3 y Qiskit SDK.\"\n",
        "---\n",
        "\n",
        "<span id=\"openqasm-3-and-the-qiskit-sdk\" />\n",
        "\n",
        "# OpenQASM 3 y el 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=\"Versiones del paquete\">\n",
        "    El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos.\n",
        "    Recomendamos utilizar estas versiones o versiones más recientes.\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "232070ea-8685-4638-ba9d-7b52a123fd2e",
      "metadata": {},
      "source": [
        "El SDK de Qiskit proporciona algunas herramientas para convertir entre OpenQASM representaciones de programas cuánticos, y la clase QuantumCircuit. Tenga en cuenta que estas herramientas aún se encuentran en una fase exploratoria de desarrollo y seguirán evolucionando a medida que aumente la compatibilidad de Qiskit con las capacidades de circuitos dinámicos expresadas por OpenQASM 3.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  Esta función está aún en fase exploratoria.  Por lo tanto, es probable que la sintaxis y las capacidades evolucionen.\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"import-an-openqasm-3-program-into-qiskit\" />\n",
        "\n",
        "## Importar un programa de OpenQASM 3 a Qiskit\n",
        "\n",
        "Debe instalar el paquete `qiskit_qasm3_import ` para utilizar esta función. Instale utilizando el siguiente comando.\n",
        "\n",
        "```bash\n",
        "pip install qiskit-qasm3-import\n",
        "```\n",
        "\n",
        "Actualmente existen dos funciones de alto nivel para importar desde OpenQASM 3 a Qiskit. Estas funciones son `load()`, que toma un nombre de archivo, y `loads()`, que toma el propio programa como cadena:\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": [
        "En este ejemplo, definimos un programa cuántico utilizando OpenQASM 3, y utilizamos `loads()` para convertirlo directamente en un programa 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",
        "## Exportar a OpenQASM 3\n",
        "\n",
        "Puedes exportar código Qiskit a OpenQASM 3 con `dumps()`, que exporta a una cadena, o `dump()`, que exporta a un archivo.\n",
        "\n",
        "<span id=\"example-with-dumps\" />\n",
        "\n",
        "### Ejemplo con `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",
        "### Ejemplo con `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": [
        "Para más información, consulte la sección [Exportar a OpenQASM 3](/docs/api/qiskit/qasm3#exporting-to-openqasm-3) de la referencia de la API.\n",
        "\n",
        "<span id=\"next-steps\" />\n",
        "\n",
        "## Próximos pasos\n",
        "\n",
        "<Admonition type=\"tip\" title=\"Recomendaciones\">\n",
        "  * Aprenda a generar código OpenQASM en la guía [IBM Quantum Composer](/docs/guides/composer).\n",
        "  * Consulta la referencia de [la API de Qiskit en OpenQASM 3](/docs/api/qiskit/qasm3).\n",
        "  * Visita la sección «[Verifica tu programa](/docs/guides/debugging-tools) ».\n",
        "  * Revise [las especificaciones 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
}