{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "c5693a08-8ac2-4ca6-bfa9-3bf6148d257b",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"트랜스파일레이션 기본 설정 및 구성 옵션\"\n",
        "description: \"Qiskit SDK 에서 양자 회로 트랜스파일링을 위한 기본 설정 및 구성 옵션.\"\n",
        "---\n",
        "\n",
        "<span id=\"transpilation-default-settings-and-configuration-options\" />\n",
        "\n",
        "# 트랜스파일레이션 기본 설정 및 구성 옵션\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "051470e1-7466-4ad7-affe-6ceec583d5d5",
      "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": "a3513040-821f-4e07-9f82-98e8ba38819b",
      "metadata": {},
      "source": [
        "추상 회로는 트랜스파일링이 필요한데, 이는 QPU의 기본 게이트 세트가 제한되어 있고 임의의 연산을 실행할 수 없기 때문입니다. 트랜스파일러의 기능은 임의의 회로를 변경하여 지정된 QPU에서 실행할 수 있도록 하는 것입니다.  이는 회로를 지원되는 베이시스 게이트로 변환하고 필요에 따라 SWAP 게이트를 도입하여 회로의 연결이 QPU의 연결과 일치하도록 하는 방식으로 수행됩니다.\n",
        "\n",
        "[패스 관리자를 사용한 Transpile](transpile-with-pass-managers) 에서 설명한 대로 다음을 사용하여 [패스 관리자를](/docs/api/qiskit/qiskit.transpiler.PassManager) 생성할 수 있습니다. [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) 함수를 호출하고 회로나 회로 목록을 [run](/docs/api/qiskit/qiskit.transpiler.PassManager#run) 메서드에 전달하여 변환합니다. 최적화 수준과 백엔드만 전달하고 다른 모든 옵션에 기본값을 사용하도록 선택하여 `generate_preset_pass_manager` 을 호출하거나, 함수에 추가 인수를 전달하여 번역을 미세 조정할 수 있습니다.\n",
        "\n",
        "<span id=\"basic-usage-without-parameters\" />\n",
        "\n",
        "## 매개변수 없이 기본 사용법\n",
        "\n",
        "이 예제에서는 추가 파라미터를 지정하지 않고 트랜스파일러에 회로와 타겟 QPU를 전달합니다.\n",
        "\n",
        "회로를 생성하고 결과를 확인합니다:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "f7070db2-2b3e-4dcd-bbc7-cac7662867b3",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/defaults-and-configuration-options/extracted-outputs/f7070db2-2b3e-4dcd-bbc7-cac7662867b3-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit import QuantumCircuit\n",
        "from qiskit.circuit.library import grover_operator, DiagonalGate\n",
        "from qiskit_ibm_runtime.fake_provider import FakeSherbrooke\n",
        "\n",
        "# Create circuit to test transpiler on\n",
        "oracle = DiagonalGate([1] * 7 + [-1])\n",
        "qc = QuantumCircuit(3)\n",
        "qc.h([0, 1, 2])\n",
        "qc = qc.compose(grover_operator(oracle))\n",
        "\n",
        "# Add measurements to the circuit\n",
        "qc.measure_all()\n",
        "\n",
        "# View the circuit\n",
        "qc.draw(output=\"mpl\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "24622567-920c-48d9-aeba-d85a8dd34788",
      "metadata": {},
      "source": [
        "회로를 트랜스파일하고 결과를 확인합니다:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "27ab746b-e3d7-49a7-b40b-d1e2d9ca6088",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/defaults-and-configuration-options/extracted-outputs/27ab746b-e3d7-49a7-b40b-d1e2d9ca6088-0.svg\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "execution_count": 2,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit.transpiler import generate_preset_pass_manager\n",
        "\n",
        "# Specify the QPU to target\n",
        "backend = FakeSherbrooke()\n",
        "\n",
        "# Transpile the circuit\n",
        "pass_manager = generate_preset_pass_manager(\n",
        "    optimization_level=1, backend=backend\n",
        ")\n",
        "transpiled_circ = pass_manager.run(qc)\n",
        "\n",
        "# View the transpiled circuit\n",
        "transpiled_circ.draw(output=\"mpl\", idle_wires=False)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6c0e9d2d-511e-4948-9f48-3b7b0fe56d7a",
      "metadata": {},
      "source": [
        "<span id=\"all-available-parameters\" />\n",
        "\n",
        "## 사용 가능한 모든 매개변수\n",
        "\n",
        "다음은 함수에서 사용할 수 있는 모든 매개변수입니다 [`generate_preset_pass_manager`](/docs/api/qiskit/qiskit.transpiler.generate_preset_pass_manager#qiskit.transpiler.generate_preset_pass_manager) 함수에 사용할 수 있는 모든 매개변수는 다음과 같습니다.  컴파일 대상을 설명하는 인자와 트랜스파일러의 작동 방식에 영향을 주는 인자의 두 가지 클래스가 있습니다.\n",
        "\n",
        "`optimization_level` 을 제외한 모든 매개변수는 선택 사항입니다.  자세한 내용은 [트랜스파일러 API 설명서를](/docs/api/qiskit/transpiler#transpiler-api) 참조하세요.\n",
        "\n",
        "* `optimization_level` (int) - 회로에서 얼마나 많은 최적화를 수행할지 설정합니다. 범위(0 - 3)의 정수입니다. 레벨이 높을수록 더 최적화된 회로를 생성하지만, 트랜스퓔레이션 시간이 길어집니다. 자세한 내용은 [트랜스파일러 최적화 수준 설정을](set-optimization) 참조하세요.\n",
        "\n",
        "<span id=\"parameters-used-to-describe-the-compilation-target\" />\n",
        "\n",
        "### 컴파일 대상 설명에 사용되는 매개변수:\n",
        "\n",
        "이러한 인수는 큐비트의 연결성을 설명하는 큐비트의 커플링 맵, 큐비트가 지원하는 기본 게이트, 게이트의 오류율 등의 정보를 포함하여 회로 실행을 위한 타겟 큐비트를 설명합니다.\n",
        "\n",
        "이러한 매개변수 중 상당수는 [번역에 일반적으로 사용되는 매개변수에](common-parameters) 자세히 설명되어 있습니다.\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**QPU (`Backend`) 매개변수**\">\n",
        "    **백엔드 매개변수** - `backend` 를 지정하면 `target` 또는 다른 백엔드 옵션을 지정할 필요가 없습니다. 마찬가지로 `target` 을 지정하면 `backend` 또는 다른 백엔드 옵션을 지정할 필요가 없습니다.\n",
        "\n",
        "    * `backend` (백엔드) - 이 옵션을 설정하면 트랜스파일러가 입력 회로를 이 장치로 컴파일합니다. 이러한 설정에 영향을 주는 다른 옵션(예: `coupling_map`)이 설정되어 있으면 `backend` 의 설정이 재정의됩니다.\n",
        "    * `target` (대상) - 백엔드 트랜스파일러 대상입니다. 일반적으로 이것은 백엔드 인수의 일부로 지정되지만 Target 개체를 수동으로 구성한 경우 여기에 지정할 수 있습니다. 이렇게 하면 `backend` 에서 대상을 재정의합니다.\n",
        "    * `backend_properties` ( BackendProperties ) - 게이트 오류, 판독 오류, 큐비트 일관성 시간 등에 대한 정보를 포함하여 QPU가 반환하는 속성입니다. `backend.properties()` 을 실행하여 이 정보를 제공하는 QPU를 찾습니다.\n",
        "    * `timing_constraints` (Dictstr\\[, int] | None) - 명령어 시간 해결에 대한 선택적 제어 하드웨어 제한입니다. 이 정보는 QPU 구성에 의해 제공됩니다. QPU에 명령어 시간 할당에 대한 제한이 없는 경우 `timing_constraints` 은 `None` 이며 조정이 수행되지 않습니다. QPU는 다음과 같은 일련의 제한 사항을 보고할 수 있습니다:\n",
        "      * `granularity`: 최소 펄스 게이트 분해능을 dt 단위로 나타내는 정수 값입니다. 사용자 정의 펄스 게이트는 이 세분성 값의 배수인 지속 시간을 가져야 합니다.\n",
        "      * `min_length`: 최소 펄스 게이트 길이를 dt 단위로 나타내는 정수 값입니다. 사용자 정의 펄스 게이트는 이 길이보다 길어야 합니다.\n",
        "      * `pulse_alignment`: 게이트 명령 시작 시간의 시간 분해능을 나타내는 정수 값입니다. 게이트 인스트럭션은 이 값의 배수인 시간에 시작해야 합니다.\n",
        "      * `acquire_alignment`: 측정 명령 시작 시간의 시간 분해능을 나타내는 정수 값입니다. 측정 명령은 이 값의 배수인 시간에 시작해야 합니다.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**레이아웃 및 토폴로지 매개변수**\">\n",
        "    * `basis_gates` ( \\[Liststr] | None) - 언롤링할 기준 게이트 이름 목록입니다.  예를 들어 \\[' u1 ', ' u2 ', ' u3 ', 'cx']. `None`, 펼치지 마세요.\n",
        "    * `coupling_map` ( CouplingMap | List\\[ \\[Listint] ]) - 매핑에서 타겟에 대한 커플링 맵(사용자 지정 가능)을 지정합니다. 커플링 맵이 대칭인 경우 양쪽 방향을 모두 지정해야 합니다. 다음 형식이 지원됩니다.\n",
        "      * CouplingMap 인스턴스\n",
        "      * 목록 - 인접성 행렬로 제공해야 하며, 각 항목은 QPU가 지원하는 모든 방향성 2비트 상호작용을 지정합니다.  예를 들어 \\[\\[0, 1], \\[0, 3], \\[1, 2], \\[1, 5], \\[2, 5], \\[4, 1,] \\[5, 3] ]\n",
        "    * `inst_map` ( \\[ListInstructionScheduleMap] | None) - 회로 연산을 펄스 스케줄에 매핑합니다. `None` 인 경우 QPU의 `instruction_schedule_map` 이 사용됩니다.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "<span id=\"parameters-used-to-influence-how-the-transpiler-works\" />\n",
        "\n",
        "### 트랜스파일러의 동작 방식을 제어하는 데 사용되는 매개변수\n",
        "\n",
        "이러한 매개 변수는 특정 번역 단계에 영향을 줍니다. 그중 일부는 여러 단계에 영향을 미칠 수 있지만 간결성을 위해 한 단계로만 나열했습니다. 사용하려는 큐비트에 `initial_layout` 같은 인수를 지정하면 해당 값이 이를 변경할 수 있는 모든 패스를 재정의합니다. 즉, 트랜스파일러는 사용자가 수동으로 지정한 내용을 변경하지 않습니다. 특정 단계에 대한 자세한 내용은 [트랜스파일러 단계를](transpiler-stages) 참조하세요.\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**초기화 단계**\">\n",
        "    * `hls_config` (HLSConfig) - `HighLevelSynthesis` 변환 패스에 직접 전달되는 선택적 구성 클래스 `HLSConfig` . 이 구성 클래스를 사용하면 다양한 상위 레벨 오브젝트에 대한 합성 알고리즘 목록과 해당 파라미터를 지정할 수 있습니다.\n",
        "    * `init_method` (str) - 초기화 단계에 사용할 플러그인 이름입니다. 기본적으로 외부 플러그인은 사용되지 않습니다. `list_stage_plugins()` 를 실행하고 스테이지 이름 인수에 `init` 를 입력하면 설치된 플러그인 목록을 확인할 수 있습니다.\n",
        "    * `unitary_synthesis_method` (str) - 사용할 단일 합성 방법의 이름입니다. 기본적으로 `default` 이 사용됩니다. `unitary_synthesis_plugin_names()` 을 실행하여 설치된 플러그인 목록을 확인할 수 있습니다.\n",
        "    * `unitary_synthesis_plugin_config` (딕셔너리) - 단일 합성 플러그인에 직접 전달되는 선택적 구성 딕셔너리입니다. 기본 단일 합성 방법에는 사용자 지정 구성이 적용되지 않으므로 기본적으로 이 설정은 적용되지 않습니다. 사용자 정의 구성을 적용하는 것은 `unitary_synthesis` 인수를 사용하여 단일 합성 플러그인을 지정한 경우에만 필요합니다. 이 옵션은 각 단일 합성 플러그인마다 사용자 정의되므로 이 옵션을 사용하는 방법은 해당 플러그인 설명서를 참조하세요.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**레이아웃 단계**\">\n",
        "    * `initial_layout` (레이아웃 | 사전 | 목록) - 물리 큐비트 상의 가상 큐비트 초기 위치. 이 레이아웃이 회로를 제약 `coupling_map` 조건과 호환되게 만든다면, 이를 사용할 것입니다. 최종 레이아웃은 동일하지 않을 수 있습니다. 트랜스파일러가 스왑이나 기타 방법을 통해 큐비트를 재배열할 수 있기 때문입니다. 자세한 내용은 [초기 레이아웃 섹션을](common-parameters#initial-layout) 참조하십시오.\n",
        "    * `layout_method` (str) - 레이아웃 선택 패스 이름(`default`, `dense`, `sabre`, `trivial`). 레이아웃 단계에 사용할 외부 플러그인 이름일 수도 있습니다. `stage_name` 인수를 `layout` 으로 하여 `list_stage_plugins()` 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다. 기본값은 `sabre` 입니다.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**라우팅 단계**\">\n",
        "    * `routing_method` (str) - 라우팅 패스 이름 (`basic`, `lookahead`, `default`, `sabre`, 또는 `none`). 라우팅 단계에 사용할 외부 플러그인 이름일 수도 있습니다. `stage_name` 인수를 `routing` 으로 하여 `list_stage_plugins()` 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다. 기본값은 `sabre` 입니다.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**번역 단계**\">\n",
        "    * `translation_method` (str) - 번역 패스 이름 (`default`, `synthesis`, `translator`, `ibm_backend`, `ibm_dynamic_circuits`, `ibm_fractional`) 번역 단계에 사용할 외부 플러그인 이름일 수도 있습니다. `stage_name` 인수를 `translation` 으로 하여 `list_stage_plugins()` 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다. 기본값은 `translator`입니다.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**최적화 단계**\">\n",
        "    * `approximation_degree` (실수, 0-1 범위 | 없음) - 회로 근사치에 사용되는 휴리스틱 다이얼( 1.0 = 근사치 없음, 0.0 = 최대 근사치)입니다. 기본값은 1.0입니다.  `None` 을 지정하면 보고된 오류율에 대한 근사치가 설정됩니다. 자세한 내용은 [근사도 섹션을](common-parameters#approx-degree) 참조하세요.\n",
        "    * `optimization_method` (str) - 최적화 단계에 사용할 플러그인 이름입니다. 기본적으로 외부 플러그인은 사용되지 않습니다. `stage_name` 인수를 `optimization` 으로 하여 `list_stage_plugins()` 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**스케줄링 단계**\">\n",
        "    * `scheduling_method` (str) - 스케줄링 패스의 이름입니다. 스케줄링 단계에 사용할 외부 플러그인 이름일 수도 있습니다. `stage_name` 인수를 `scheduling` 으로 하여 `list_stage_plugins()` 을 실행하면 설치된 플러그인 목록을 확인할 수 있습니다.\n",
        "      * 'as\\_soon\\_as\\_possible': 큐비트 리소스(별칭: `asap`)에서 가능한 한 빨리 탐욕스럽게 인스트럭션을 예약합니다.\n",
        "      * 'as\\_late\\_as\\_possible': 가능한 경우 큐비트를 접지 상태로 유지하는, 즉 인스트럭션을 늦게 예약합니다(별칭: `alap`). 이것이 기본값입니다.\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**트랜스파일러 실행**\">\n",
        "    * `seed_transpiler` (int) - 트랜스파일러의 확률적 부분에 대한 무작위 시드를 설정합니다.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "위의 매개변수를 지정하지 않으면 다음 기본값이 사용됩니다. 자세한 내용은 메서드의 [API 참조 페이지를](../api/qiskit/transpiler_preset) 참조하세요:\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "bcaab4a6",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<qiskit.transpiler.passmanager.StagedPassManager at 0x7fa51ff33590>"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "generate_preset_pass_manager(\n",
        "    optimization_level=1,\n",
        "    backend=None,\n",
        "    target=None,\n",
        "    basis_gates=None,\n",
        "    coupling_map=None,\n",
        "    initial_layout=None,\n",
        "    layout_method=None,\n",
        "    routing_method=None,\n",
        "    translation_method=None,\n",
        "    scheduling_method=None,\n",
        "    approximation_degree=1.0,\n",
        "    seed_transpiler=None,\n",
        "    unitary_synthesis_method=\"default\",\n",
        "    unitary_synthesis_plugin_config=None,\n",
        "    hls_config=None,\n",
        "    init_method=None,\n",
        "    optimization_method=None,\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f1acc6e6",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## 다음 단계\n",
        "\n",
        "<Admonition type=\"tip\" title=\"권장사항\">\n",
        "  * [최적화 수준을 설정하는](set-optimization) 방법을 알아보세요.\n",
        "  * [일반적으로 사용되는 매개변수를](common-parameters) 자세히 살펴보세요.\n",
        "  * [최적화 수준을 설정하는](/docs/guides/runtime-options-overview) 방법을 알아보세요.\n",
        "  * [‘패스 관리자를 사용한 Transpile’](/docs/guides/transpile-with-pass-managers) 주제를 확인해 보세요.\n",
        "  * 예를 들어, [양자 컴퓨터 표현을](/docs/guides/represent-quantum-computers) 참조하십시오.\n",
        "  * Qiskit 패턴 워크플로우의 일환으로 [회로를 트랜스파일하는 방법을](/docs/guides/circuit-transpilation-settings) 알아보세요.\n",
        "  * [트랜스파일 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
}