{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "35492576-b15e-43e6-8b9b-293631c6b194",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"OpenQASM 2 그리고 Qiskit SDK\"\n",
        "description: \"OpenQASM 2와 Qiskit SDK 간 코드 변환 방법.\"\n",
        "---\n",
        "\n",
        "<span id=\"openqasm-2-and-the-qiskit-sdk\" />\n",
        "\n",
        "# OpenQASM 2 그리고 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=\"패키지 버전\">\n",
        "    이 페이지의 코드는 다음 요구 사항을 사용하여 개발되었습니다.\n",
        "    다음 버전 이상을 사용하는 것이 좋습니다.\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": [
        "키스킷 SDK는 양자 프로그램의 OpenQASM 표현을 변환하기 위한 몇 가지 도구와 [QuantumCircuit](/docs/api/qiskit/qiskit.circuit.QuantumCircuit) 클래스.\n",
        "\n",
        "<span id=\"qasm2-import\" />\n",
        "\n",
        "<span id=\"import-an-openqasm-2-program-into-qiskit\" />\n",
        "\n",
        "## OpenQASM 2 프로그램을 Qiskit으로 가져오기\n",
        "\n",
        "두 가지 함수는 OpenQASM 2 프로그램을 키스킷으로 가져옵니다.\n",
        "이들은 [`qasm2.load()`](../api/qiskit/qasm2#load)는 파일 이름을, 그리고 [`qasm2.loads()`](../api/qiskit/qasm2#loads)는 OpenQASM 2 프로그램을 문자열로 받습니다.\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": [
        "자세한 내용은 [OpenQASM 2 키스킷 API를](/docs/api/qiskit/qasm2) 참조하세요.\n",
        "\n",
        "<span id=\"import-simple-programs\" />\n",
        "\n",
        "### 간단한 프로그램 가져오기\n",
        "\n",
        "대부분의 OpenQASM 2 프로그램의 경우 단일 인수로 `qasm2.load` 및 `qasm2.loads` 을 사용하면 됩니다.\n",
        "\n",
        "<span id=\"example-import-an-openqasm-2-program-as-a-string\" />\n",
        "\n",
        "#### 예시: OpenQASM 2 프로그램을 문자열로 가져오기\n",
        "\n",
        "OpenQASM 2 프로그램을 문자열로 가져오려면 `qasm2.loads()` 을 사용하여 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",
        "#### 예시: 파일에서 OpenQASM 2 프로그램을 임포트하기\n",
        "\n",
        "`load()` 을 사용하여 파일에서 OpenQASM 2 프로그램을 가져오려면 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",
        "### OpenQASM 링크: Qiskit 게이트를 사용한 2게이트\n",
        "\n",
        "기본적으로 키스킷의 OpenQASM 2 임포터는 `\"qelib1.inc\"` 파일을 *사실상* 표준 라이브러리로 취급합니다.\n",
        "가져오기는 이 파일을 [OpenQASM 2를 정의하는 원본 문서에](https://arxiv.org/abs/1707.03429) 포함된 것으로 설명된 게이트가 정확히 포함된 것으로 취급합니다.\n",
        "키스킷은 [회로 라이브러리에](../api/qiskit/circuit_library) 내장된 게이트를 사용하여 `\"qelib1.inc\"` 에 있는 게이트를 표현합니다.\n",
        "프로그램에서 수동으로 정의된 게이트 OpenQASM 2 `gate` 문은 기본적으로 커스텀 [키스킷 `Gate` 서브클래스로](../api/qiskit/qiskit.circuit.Gate) 구성됩니다.\n",
        "\n",
        "임포터에 특정 클래스를 사용하도록 지시할 수 있습니다 [`Gate`](../api/qiskit/qiskit.circuit.Gate)`gate` 클래스를 사용하도록 임포터에 지시할 수 있습니다.\n",
        "이 메커니즘을 사용하여 추가 게이트 이름을 명시적인 정의가 필요 없는 \"기본 제공\"으로 처리할 수도 있습니다.\n",
        "`\"qelib1.inc\"` 외부에서 `gate` 문에 사용할 게이트 클래스를 지정하면 일반적으로 결과 회로가 더 효율적으로 작업할 수 있습니다.\n",
        "\n",
        "<Admonition type=\"warning\">\n",
        "  Qiskit SDKv1.0 기준, Qiskit의 OpenQASM 2 *익스포터* ( [Qiskit 회로를 OpenQASM 2로 내보내기](#qasm2-export) 참조)는 여전히 실제보다 더 많은 게이트가 있는 `\"qelib1.inc\"` 것처럼 동작합니다.\n",
        "  이는 임포터의 기본 설정으로는 당사 임포터로 내보낸 프로그램을 가져올 수 없을 수도 있음을 의미합니다.\n",
        "  이 문제를 해결하기 위해 [기존 내보내기 도구로 작업하는 구체적인 예시를](#qasm2-import-legacy) 참조하십시오.\n",
        "\n",
        "  이 불일치는 키스킷의 레거시 동작이며, [이후 키스킷 릴리스에서 해결될](https://github.com/Qiskit/qiskit/issues/10737) 예정입니다.\n",
        "</Admonition>\n",
        "\n",
        "사용자 지정 인스트럭션에 대한 정보를 OpenQASM 2 임포터에 전달하려면 [ `qasm2.CustomInstruction` 클래스를](../api/qiskit/qasm2#qiskit.qasm2.CustomInstruction) 사용합니다.\n",
        "여기에는 네 가지 필수 정보가 순서대로 있습니다:\n",
        "\n",
        "* OpenQASM 2 프로그램에서 사용되는 게이트의 **이름입니다**\n",
        "* 게이트가 취하는 **각도 매개변수의 수입니다**\n",
        "* 게이트가 작동하는 **큐비트 수입니다**\n",
        "* 게이트의 Python **생성자** 클래스 또는 함수는 게이트 파라미터(큐비트 제외)를 개별 인수로 받습니다\n",
        "\n",
        "임포터가 지정된 사용자 지정 명령어와 일치하는 `gate` 정의를 발견하면 해당 사용자 지정 정보를 사용하여 게이트 객체를 재구성합니다.\n",
        "사용자 지정 명령의 `name` 과 일치하지만 매개변수 수와 큐비트 수가 모두 일치하지 않는 `gate` 문이 발견되면 임포터는 불일치를 나타내는 [`QASM2ParseError`](../api/qiskit/qasm2#qasm2parseerror)를 발생시켜 제공된 정보와 프로그램 간의 불일치를 나타냅니다.\n",
        "\n",
        "또한 다섯 번째 인수 `builtin` 를 `True` 로 선택적으로 설정하여 명시적으로 정의하지 않더라도 OpenQASM 2 프로그램 내에서 게이트를 자동으로 사용할 수 있도록 할 수 있습니다.\n",
        "임포터가 기본 제공 사용자 지정 명령어에 대한 명시적인 `gate` 정의를 발견하면 이를 자동으로 수락합니다.\n",
        "이전과 마찬가지로 동일한 이름의 명시적 정의가 제공된 사용자 지정 명령과 호환되지 않으면 [`QASM2ParseError`](../api/qiskit/qasm2#qasm2parseerror) 가 발생합니다.\n",
        "이는 구형 OpenQASM 2 내보내기 및 하드웨어의 '기본 게이트'를 내장 명령어로 취급하는 다른 특정 퀀텀 플랫폼과의 호환성에 유용합니다.\n",
        "\n",
        "키스킷은 [키스킷의 OpenQASM 2 내보내기 기능의](#qasm2-export) 레거시 버전에서 생성된 OpenQASM 2 프로그램과 작업하기 위한 데이터 속성을 제공합니다.\n",
        "이것은 [`qasm2.LEGACY_CUSTOM_INSTRUCTIONS`](../api/qiskit/qasm2#legacy-compatibility)에 `custom_instructions` 인자로 지정할 수 있습니다 [`qasm2.load()`](../api/qiskit/qasm2#load) 및 [`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",
        "#### 예시: Qiskit의 레거시 익스포터로 생성된 프로그램 가져오기\n",
        "\n",
        "이 OpenQASM 2 프로그램은 원래 버전( `\"qelib1.inc\"` )에는 없는 게이트를 선언하지 않고 사용하지만 키스킷 라이브러리의 표준 게이트입니다.\n",
        "를 사용하여 [`qasm2.LEGACY_CUSTOM_INSTRUCTIONS`](../api/qiskit/qasm2#legacy-compatibility) 를 사용하여 임포터에게 키스킷의 OpenQASM 2 익스포터가 이전에 사용한 것과 동일한 게이트 세트를 사용하도록 쉽게 지시할 수 있습니다.\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",
        "#### 예시: OpenQASM 2 프로그램을 가져올 때 특정 게이트 클래스를 사용하십시오\n",
        "\n",
        "키스킷은 일반적으로 OpenQASM 2 `gate` 문에 있는 정의가 키스킷 표준 라이브러리 게이트와 정확히 일치하는지 확인할 수 없습니다.\n",
        "대신, 키스킷은 제공된 정확한 정의를 사용하여 사용자 정의 게이트를 선택합니다.\n",
        "이는 기본 제공 표준 게이트 중 하나 또는 사용자 정의 사용자 지정 게이트를 사용하는 것보다 효율성이 떨어질 수 있습니다.\n",
        "특정 클래스로 `gate` 문을 수동으로 정의할 수 있습니다.\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",
        "#### 예시: OpenQASM 2 프로그램에서 새로운 내장 게이트 정의하기\n",
        "\n",
        "`builtin=True` 인수가 설정되어 있으면 사용자 정의 게이트에 관련 정의가 필요하지 않습니다.\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",
        "### 사용자 정의 클래식 함수 정의\n",
        "\n",
        "OpenQASM 2에는 게이트 인자에 사용할 수 있는 몇 가지 기본 제공 클래식 함수가 포함되어 있습니다.\n",
        "`custom_classical` 인수를 사용하여 더 많은 함수로 언어를 확장할 수 있습니다 [`qasm2.load()`](../api/qiskit/qasm2#load) 및 [`qasm2.loads()`](../api/qiskit/qasm3#loads)와 함께 [`qasm2.CustomClassical`](../api/qiskit/qasm2#qiskit.qasm2.CustomClassical) 클래스를 추가할 수 있습니다.\n",
        "\n",
        "사용자 지정 클래식 함수를 정의하려면 제공해야 합니다:\n",
        "\n",
        "* OpenQASM 2 프로그램에 표시되는 함수 *이름*\n",
        "* 허용하는 부동 소수점 인수의 수입니다\n",
        "* 함수를 평가하는 호출 가능한 Python 객체입니다\n",
        "\n",
        "정의된 모든 사용자 정의 클래식 함수는 임포터에 의해 OpenQASM 2 언어에 내장된 것으로 취급됩니다.\n",
        "OpenQASM 2 언어 내에는 새로운 함수를 정의하는 공식적인 방법이 없으며, 이것은 키스킷 확장입니다.\n",
        "\n",
        "<span id=\"example-use-custom-classical-instructions\" />\n",
        "\n",
        "#### 예시: 사용자 정의 클래식 명령어 사용\n",
        "\n",
        "여기에서는 두 가지 사용자 지정 클래식 함수를 제공합니다.\n",
        "첫 번째는 간단하며 입력에 하나를 추가하기만 하면 됩니다.\n",
        "두 번째는 수학 연산 $\\arctan(y/x)$ 을 사분면 인식 방식으로 표현하는 함수 `math.atan2` 입니다.\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",
        "### Strict 모드\n",
        "\n",
        "기본적으로 이 구문 분석기는 공식 사양보다 더 완화되어 있습니다.\n",
        "매개변수 목록의 후행 쉼표, 불필요한 (빈 문) 세미콜론, `OPENQASM 2.0;` 버전 문 생략, 기타 오류 발생 없이 여러 가지 품질 개선 사항을 허용합니다.\n",
        "그러나 `strict=True` 에서 \"사양 문자\" 모드를 사용할 수 있습니다.\n",
        "\n",
        "<span id=\"qasm2-export\" />\n",
        "\n",
        "<span id=\"export-a-qiskit-circuit-to-openqasm-2\" />\n",
        "\n",
        "## Qiskit 회로를 OpenQASM 2로 내보내기\n",
        "\n",
        "키스킷은 또한 [`QuantumCircuit`](../api/qiskit/qiskit.circuit.QuantumCircuit) 를 OpenQASM 2.\n",
        "함수를 사용하여 [`qasm2.dump()`](../api/qiskit/qasm2#dump) 함수를 사용하고 [`qasm2.dumps()`](../api/qiskit/qasm2#dumps) 함수를 사용하여 문자열에 씁니다.\n",
        "이 함수들은 현재 매우 간단한 인터페이스를 가지고 있습니다 [`qasm2.dump()`](../api/qiskit/qasm2#dump)의 경우에만 출력을 쓸 위치를 받습니다.\n",
        "\n",
        "<Admonition type=\"warning\">\n",
        "  키스킷의 OpenQASM 2 내보내기는 여전히 레거시, 비표준 버전의 `\"qelib1.inc\"` include 파일을 가정합니다.\n",
        "  [이 문제는 Qiskit의 이후 릴리스에서 해결될 예정이지만](https://github.com/Qiskit/qiskit/issues/10737), 그동안 Qiskit으로 만든 OpenQASM 2 프로그램을 다시 가져와야 하는 경우 [위의 예를 사용하여 가져오기 프로그램에 레거시 게이트에 대한 정보를 알리세요](#qasm2-import-legacy).\n",
        "</Admonition>\n",
        "\n",
        "<span id=\"example-export-a-circuit-to-openqasm-2\" />\n",
        "\n",
        "### 예시: 회로를 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",
        "\n",
        "<Admonition type=\"tip\" title=\"권장사항\">\n",
        "  * [IBM 퀀텀 컴포저](/docs/guides/composer) 가이드에서 OpenQASM 코드를 생성하는 방법을 알아보세요.\n",
        "  * [OpenQASM 2 키스킷 API](/docs/api/qiskit/qasm2) 참조를 참조하세요.\n",
        "  * [‘프로그램 확인’](/docs/guides/debugging-tools) 항목을 다시 한 번 확인해 주세요.\n",
        "  * [OpenQASM 라이브 사양을](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
}