{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "5b6cbc5d-14d4-40c6-a702-0ce635c483d8",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"트랜스파일러용 양자 컴퓨터를 표현한다\"\n",
        "description: \"트랜스파일링을 위한 커플링 맵, 베이스 게이트 및 프로세서 오류에 대해 알아보기\"\n",
        "---\n",
        "\n",
        "<span id=\"represent-quantum-computers-for-the-transpiler\" />\n",
        "\n",
        "# 트랜스파일러용 양자 컴퓨터를 표현한다\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "aed00912-17af-4e4c-8639-77957b314b98",
      "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",
        "    qiskit-ibm-runtime~=0.47.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "9dbd70a7-3353-4286-aa6b-3547d7894f58",
      "metadata": {},
      "source": [
        "추상 회로를 특정 QPU(양자 처리 장치)에서 실행할 수 있는 ISA 회로로 변환하려면 트랜스파일러에 QPU에 대한 특정 정보가 필요합니다. 이 정보는 작업을 제출하려는 `BackendV2` (또는 레거시 `BackendV1`) 개체와 백엔드의 `Target` 속성 두 곳에서 찾을 수 있습니다.\n",
        "\n",
        "* 이 컨테이너에는 장치의 지원되는 명령어 집합, 큐비트 연결성 [`Target`](/docs/api/qiskit/qiskit.transpiler.Target) , 펄스 또는 타이밍 정보 등 모든 관련 제약 조건이 포함됩니다.\n",
        "* 기본적으로 `Target` 를 [`Backend`](/docs/api/qiskit/qiskit.providers.BackendV2) 보유하고 있으며, [`InstructionScheduleMap`](/docs/api/qiskit/1.4/qiskit.pulse.InstructionScheduleMap)와 같은 추가 정보를 포함하고, 양자 회로 작업 제출을 위한 인터페이스를 제공합니다.\n",
        "\n",
        "특정 사용 사례가 있거나 이 정보가 트랜스파일러가 보다 최적화된 회로를 생성하는 데 도움이 될 것으로 판단되는 경우 등 트랜스파일러가 사용할 정보를 명시적으로 제공할 수도 있습니다.\n",
        "\n",
        "트랜스파일러가 특정 하드웨어에 가장 적합한 회로를 생성하는 정밀도는 `Target` 또는 `Backend` 에서 제약 조건에 대한 정보를 얼마나 많이 보유하고 있는지에 따라 달라집니다.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  기본 트랜스필레이션 알고리즘의 대부분은 확률적이기 때문에 더 나은 회로를 찾을 수 있다는 보장은 없습니다.\n",
        "</Admonition>\n",
        "\n",
        "이 페이지에서는 QPU 정보를 트랜스파일러로 전달하는 몇 가지 예시를 보여줍니다.\n",
        "\n",
        "<span id=\"default-config\" />\n",
        "\n",
        "<span id=\"default-configuration\" />\n",
        "\n",
        "## 기본 구성\n",
        "\n",
        "트랜스파일러의 가장 간단한 사용법은 `Backend` 또는 `Target` 을 통해 모든 QPU 정보를 제공하는 것입니다. 트랜스파일러의 작동 방식을 더 잘 이해하려면 다음과 같이 회로를 구성하고 다양한 정보로 트랜스파일해 보세요.\n",
        "\n",
        "필요한 라이브러리를 가져오고 QPU를 인스턴스화합니다: 추상 회로를 특정 프로세서에서 실행할 수 있는 ISA 회로로 변환하려면 트랜스파일러에 프로세서에 대한 특정 정보가 필요합니다.  일반적으로 이 정보는 [`Backend`](/docs/api/qiskit/qiskit.providers.Backend#backend) 또는 [`Target`](/docs/api/qiskit/qiskit.transpiler.Target#target) 에 저장되며 추가 정보는 필요하지 않습니다. 그러나 특정 사용 사례가 있거나 이 정보가 트랜스파일러가 보다 최적화된 회로를 생성하는 데 도움이 될 것으로 판단되는 경우 등 트랜스파일러가 사용할 정보를 명시적으로 제공할 수도 있습니다.\n",
        "\n",
        "이 주제에서는 트랜스파일러에 정보를 전달하는 몇 가지 예시를 보여줍니다.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  이 예제들은 모의 `qiskit_ibm_runtime`[`FakeSherbrooke`](/docs/api/qiskit-ibm-runtime/fake-provider-fake-sherbrooke#fakesherbrooke) 백엔드의 타깃을 사용합니다.  하지만 Qiskit과 호환되는 실제 또는 시뮬레이션 백엔드라면 어떤 것이든 시도해 볼 수 있습니다.  결과는 다를 수 있습니다.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "a52d0681-5436-4d7a-8d45-9832472e59ca",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime.fake_provider import FakeSherbrooke\n",
        "\n",
        "backend = FakeSherbrooke()\n",
        "target = backend.target"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4064b5ad-8a3a-462b-ae30-29576230c084",
      "metadata": {},
      "source": [
        "이 예제 회로는 키스킷의 회로 라이브러리에서 [`efficient_su2`](/docs/api/qiskit/qiskit.circuit.library.efficient_su2) 인스턴스를 사용합니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "97f9acc1-ac53-4025-b413-485777932a9b",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/97f9acc1-ac53-4025-b413-485777932a9b-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.circuit.library import efficient_su2\n",
        "\n",
        "qc = efficient_su2(12, entanglement=\"circular\", reps=1)\n",
        "\n",
        "qc.draw(\"mpl\")"
      ]
    },
    {
      "attachments": {},
      "cell_type": "markdown",
      "id": "b133229c-0146-4feb-a366-548d175b858e",
      "metadata": {},
      "source": [
        "이 예에서는 기본 설정을 사용하여 `backend` 의 `target` 로 트랜스파일하여 백엔드에서 실행되는 회로로 변환하는 데 필요한 모든 정보를 제공합니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "4b81fb9d-d199-45c5-b119-c1f0b973afe9",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/4b81fb9d-d199-45c5-b119-c1f0b973afe9-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.transpiler import generate_preset_pass_manager\n",
        "\n",
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, target=target, seed_transpiler=12345\n",
        ")\n",
        "qc_t_target = pass_manager.run(qc)\n",
        "qc_t_target.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2ad3848d",
      "metadata": {},
      "source": [
        "이 예시는 본 주제의 후속 섹션에서 최적의 회로 구축을 위해 트랜스파일러에 전달해야 할 핵심 정보가 커플링 맵과 지원되는 명령어 세트임을 설명하기 위해 사용됩니다. QPU는 일반적으로 전달되지 않은 다른 정보(예: 타이밍 및 스케줄링)에 대해 기본 설정을 선택할 수 있습니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "956f1b7a-80b4-4cda-9ecf-6057f560deb9",
      "metadata": {},
      "source": [
        "<span id=\"coupling-map\" />\n",
        "\n",
        "## 결합 지도\n",
        "\n",
        "커플링 맵은 어떤 큐비트가 연결되어 있고, 따라서 그 사이에 2큐비트 게이트가 있는지를 보여주는 그래프입니다. 때때로 이 그래프는 방향성이 있어 2쿼비트 게이트가 한 방향으로만 갈 수 있는 경우도 있습니다. 그러나 트랜스파일러는 단일 큐비트 게이트를 추가하여 언제든지 게이트의 방향을 뒤집을 수 있습니다. 추상적인 양자 회로는 연결성이 제한되어 있더라도 양자 정보를 이동시키는 스왑 게이트를 도입하여 항상 이 그래프에 표현할 수 있습니다.\n",
        "\n",
        "추상 회로의 큐비트를 *가상 큐비트*, 커플링 맵의 큐비트를 *물리적 큐* 비트라고 합니다. 트랜스파일러는 가상 큐비트와 물리적 큐비트 간의 매핑을 제공합니다. 트랜스필레이션의 첫 번째 단계 중 하나인 *레이아웃* 단계에서는 이 매핑을 수행합니다.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  라우팅 단계는 기본적으로 실제 큐비트를 선택하는 *레이아웃* 단계와 얽혀 있지만, 이 주제에서는 단순화를 위해 별도의 단계로 취급합니다. 라우팅과 레이아웃의 조합을 *쿼비트 매핑이라고* 합니다.  [트랜스파일러 단계](transpiler-stages) 항목에서 이러한 단계에 대해 자세히 알아보세요.\n",
        "</Admonition>\n",
        "\n",
        "`coupling_map` 키워드 인수를 전달하면 트랜스파일러에 미치는 영향을 확인할 수 있습니다:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "ec354bee-e06b-42ea-a117-6c1a9308ca73",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/ec354bee-e06b-42ea-a117-6c1a9308ca73-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "coupling_map = target.build_coupling_map()\n",
        "\n",
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=0, coupling_map=coupling_map, seed_transpiler=12345\n",
        ")\n",
        "qc_t_cm_lv0 = pass_manager.run(qc)\n",
        "qc_t_cm_lv0.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "0d3fe7d4-3a40-423d-975f-b4de6613efe9",
      "metadata": {},
      "source": [
        "위와 같이 여러 개의 SWAP 게이트가 삽입되어(각각 3개의 CX 게이트로 구성됨) 현재 장치에서 많은 오류가 발생합니다. 실제 큐비트 토폴로지에서 어떤 큐비트가 선택되었는지 확인하려면 키스킷 시각화에서 `plot_circuit_layout` 을 사용하세요:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "9be74535-ed36-4d51-afeb-ee53c3f8a046",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/9be74535-ed36-4d51-afeb-ee53c3f8a046-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 5,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.visualization import plot_circuit_layout\n",
        "\n",
        "plot_circuit_layout(qc_t_cm_lv0, backend, view=\"physical\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "633744e3-b9e7-4333-ac7b-0089f28e9c27",
      "metadata": {},
      "source": [
        "이것은 가상 큐비트 0-11이 물리적 큐비트 0-11의 라인에 사소하게 매핑되었음을 보여줍니다. 라우팅이 필요한 경우 `VF2Layout` 을 사용하는 기본값(`optimization_level=1`)으로 돌아가 보겠습니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "8035fd05-f7cd-4151-b19a-4968202246e6",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/8035fd05-f7cd-4151-b19a-4968202246e6-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, coupling_map=coupling_map, seed_transpiler=12345\n",
        ")\n",
        "qc_t_cm_lv1 = pass_manager.run(qc)\n",
        "qc_t_cm_lv1.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "217c75f4-4c86-46bb-9a34-b451ff4743ef",
      "metadata": {},
      "source": [
        "이제 스왑 게이트가 삽입되지 않으며 `target` 클래스를 사용할 때 선택된 물리적 큐비트는 동일합니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "id": "25d9fac3-abda-4b2d-81b4-351dc0772722",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/25d9fac3-abda-4b2d-81b4-351dc0772722-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 7,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.visualization import plot_circuit_layout\n",
        "\n",
        "plot_circuit_layout(qc_t_cm_lv1, backend, view=\"physical\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "db62df0f",
      "metadata": {},
      "source": [
        "이제 레이아웃이 고리 모양으로 완성되었습니다.  이 레이아웃은 회로의 연결성을 존중하기 때문에 스왑 게이트가 없어 실행에 훨씬 유리한 회로를 제공합니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f62e0541",
      "metadata": {},
      "source": [
        "<span id=\"supported-instructions\" />\n",
        "\n",
        "## 지원되는 지침\n",
        "\n",
        "모든 양자 컴퓨터는 제한된 명령어 집합을 지원한다.  회로의 모든 게이트는 이 집합의 원소들로 변환되어야 한다. 이 게이트 집합은 단일 큐비트 및 이중 큐비트 게이트로 구성되어야 하며, 이를 통해 보편적 게이트 집합을 제공해야 합니다. 즉, 모든 양자 연산이 해당 게이트들로 분해될 수 있어야 합니다.  이는 [BasisTranslator](/docs/api/qiskit/qiskit.transpiler.passes.BasisTranslator) 에 의해 수행되며, 이 정보를 제공하기 위해 `basis_gates` 트랜스파일러에 키워드 인자로 지정할 수 있습니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "4445ff03",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "['for_loop', 'sx', 'switch_case', 'id', 'if_else', 'delay', 'rz', 'measure', 'reset', 'ecr', 'x']\n"
          ]
        }
      ],
      "source": [
        "basis_gates = list(target.operation_names)\n",
        "print(basis_gates)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6e9aed06",
      "metadata": {},
      "source": [
        "의 기본 단일 큐비트 `FakeSherbrooke` 게이트는, `x`, 및 `rz``sx`이며, 기본 2큐비트 게이트는 (에코 크로스 `ecr` 공명)입니다. CX 게이트는 `ecr` 게이트로 구성되므로, 일부 QPU에서는 `ecr` 가 2-큐비트 기본 게이트로 지정되는 반면, 다른 QPU에서는 `cx` 가 기본값으로 설정되어 있습니다. 게이트는 `ecr` `cx` 게이트의 *얽힘을* 일으키는 부분입니다. 제어 게이트 외에도 및 `measurement` `delay` 명령어가 있습니다.\n",
        "\n",
        "<Admonition type=\"note\">\n",
        "  QPU에는 기본 게이트가 있지만, 명령어를 제공하거나 펄스 게이트를 추가하는 한 원하는 게이트를 선택할 수 있습니다( [트랜스파일러 패스 생성](/docs/guides/custom-transpiler-pass) 참조) 기본 베이스 게이트는 QPU에서 보정이 완료된 게이트이므로 추가적인 명령/펄스 게이트를 제공할 필요가 없습니다. 예를 들어, 일부 QPU에서는 기본 2큐비트 게이트가 이고 `cx` , 다른 `ecr` QPU에서는 입니다. 자세한 내용은 가능한 [네이티브 게이트 및 연산](/docs/guides/qpu-information#native-gates) 목록을 참조하십시오.\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "313e4743",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/313e4743-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 9,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1,\n",
        "    coupling_map=coupling_map,\n",
        "    basis_gates=basis_gates,\n",
        "    seed_transpiler=12345,\n",
        ")\n",
        "qc_t_cm_bg = pass_manager.run(qc)\n",
        "qc_t_cm_bg.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b0195ba6",
      "metadata": {},
      "source": [
        "해당 `CXGate` 객체들은 게이트와 단일 `ecr` 큐비트 기반 게이트로 분해되었음을 유의하십시오.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "eb3f5aff-3ca2-4688-a59e-da05c724ef09",
      "metadata": {},
      "source": [
        "<span id=\"device-error-rates\" />\n",
        "\n",
        "## 장치 오류율\n",
        "\n",
        "`Target` 클래스에는 디바이스에서의 작업 오류율에 대한 정보가 포함될 수 있습니다.\n",
        "예를 들어, 다음 코드는 큐비트 1과 0 사이의 에코 교차 공명(ECR) 게이트에 대한 속성을 검색합니다(ECR 게이트는 방향성임을 참고하세요):\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "id": "38aa1eca-a6aa-4db9-af36-66289e2059d2",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "InstructionProperties(duration=5.333333333333332e-07, error=0.007494257741828603)"
            ]
          },
          "execution_count": 10,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "target[\"ecr\"][(1, 0)]"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "90cca3a8-ca25-4795-a22f-57ba6d8cfcaa",
      "metadata": {},
      "source": [
        "출력에는 게이트의 지속 시간(초)과 오류율이 표시됩니다. 트랜스파일러에 오류 정보를 표시하려면 위에서 `basis_gates` 및 `coupling_map` 을 사용하여 대상 모델을 빌드하고 백엔드 `FakeSherbrooke` 의 오류 값으로 채우세요.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "id": "e92c39d7-4aab-4657-aa9a-1b8b5788cb58",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit.transpiler import Target\n",
        "from qiskit.circuit.controlflow import IfElseOp, SwitchCaseOp, ForLoopOp\n",
        "\n",
        "err_targ = Target.from_configuration(\n",
        "    basis_gates=basis_gates,\n",
        "    coupling_map=coupling_map,\n",
        "    num_qubits=target.num_qubits,\n",
        "    custom_name_mapping={\n",
        "        \"if_else\": IfElseOp,\n",
        "        \"switch_case\": SwitchCaseOp,\n",
        "        \"for_loop\": ForLoopOp,\n",
        "    },\n",
        ")\n",
        "\n",
        "for i, (op, qargs) in enumerate(target.instructions):\n",
        "    if op.name in basis_gates:\n",
        "        err_targ[op.name][qargs] = target.instruction_properties(i)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "433f2772-b397-42ab-b3a5-a44a85192f3c",
      "metadata": {},
      "source": [
        "새 대상 `err_targ` 을 대상으로 트랜스파일합니다:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "f1e270c4-e2cc-487e-a050-4180bc321b0b",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/represent-quantum-computers/extracted-outputs/f1e270c4-e2cc-487e-a050-4180bc321b0b-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 12,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, target=err_targ, seed_transpiler=12345\n",
        ")\n",
        "qc_t_cm_bg_et = pass_manager.run(qc)\n",
        "qc_t_cm_bg_et.draw(\"mpl\", idle_wires=False, fold=-1)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f8b516be-805d-4d0b-92f9-44d3fbe3b51f",
      "metadata": {},
      "source": [
        "대상에 오류 정보가 포함되어 있기 때문에 `VF2PostLayout` 패스는 사용할 최적의 큐비트를 찾으려고 시도하며, 그 결과 원래 동일한 물리적 큐비트로 발견된 것과 동일한 회로가 생성됩니다.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e815a158-c77a-4e82-bebe-1710d0ae4f1f",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## 다음 단계\n",
        "\n",
        "<Admonition type=\"tip\" title=\"권장사항\">\n",
        "  * [트랜스파일레이션의 기본 설정 및 구성 옵션을](defaults-and-configuration-options) 이해하십시오.\n",
        "  * [번역에 일반적으로 사용되는 매개변수](common-parameters) 항목을 검토하세요.\n",
        "  * [Compare 트랜스파일러 설정](/docs/guides/circuit-transpilation-settings#compare-transpiler-settings) 가이드를 시도해 보세요.\n",
        "  * [Transpile API](/docs/api/qiskit/transpiler) 문서를 참조하십시오.\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": 5
}