{
  "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.1\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-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) 関数で使用可能なすべてのパラメータです。  引数には、コンパイルの対象を記述するものと、トランスパイラの動作に影響を与えるものの2種類がある。\n",
        "\n",
        "`optimization_level` 以外のパラメータはすべてオプションである。  詳細については、 [Transpiler 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",
        "これらの引数は、QPUのカップリングマップ（量子ビットの接続性を記述）、QPUがサポートする基底ゲート、ゲートのエラー率などの情報を含む、回路実行のターゲットQPUを記述します。\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 | リスト\\[ \\[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",
        "これらのパラメータは、特定のトランスピレーション段階に影響を与える。 中には複数のステージに影響を与えるものもあるが、簡単のため1つのステージにのみ記載した。 使用したい量子ビットに `initial_layout` のような引数を指定すると、その値は、それを変更する可能性のあるすべてのパスを上書きする。 言い換えれば、トランスパイラーは、あなたが手動で指定したものを変更することはない。 特定のステージの詳細については、 [トランスパイラのステージを](transpiler-stages)参照のこと。\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"**初期化段階**\">\n",
        "    * `hls_config` (HLSConfig) - `HighLevelSynthesis` 変換パスに直接渡される、オプションのコンフィギュレーション・クラス `HLSConfig` 。 このコンフィギュレーション・クラスでは、さまざまな高レベル・オブジェクトの合成アルゴリズムとそのパラメータのリストを指定できます。\n",
        "    * `init_method` (str) - 初期化段階で使用するプラグイン名。 デフォルトでは、外部プラグインは使用されない。 ステージ名の引数に `init` を指定して `list_stage_plugins()` を実行すると、インストールされているプラグインの一覧を見ることができる。\n",
        "    * `unitary_synthesis_method` (str) - 使用するユニタリー合成法の名前。 デフォルトでは、 `default` 。 `unitary_synthesis_plugin_names()` を実行すると、インストールされているプラグインの一覧を見ることができます。\n",
        "    * `unitary_synthesis_plugin_config` (dict) - ユニタリー合成プラグインに直接渡されるオプションの設定辞書。 デフォルトのユニタリー合成法はカスタムコンフィギュレーションを取らないため、デフォルトではこの設定は何の効果もない。 カスタムコンフィギュレーションの適用は、 `unitary_synthesis` の引数でユニタリー合成プラグインが指定されている場合にのみ必要です。 これは各ユニタリー合成プラグインのカスタムなので、このオプションの使い方はプラグインのドキュメントを参照してください。\n",
        "  </AccordionItem>\n",
        "\n",
        "  <AccordionItem title=\"**レイアウト段階**\">\n",
        "    * `initial_layout` (レイアウト | 辞書 | リスト) - 物理量子ビット上の仮想量子ビットの初期位置。 このレイアウトが回路を制約 `coupling_map` 条件に適合させる場合、それが採用される。 最終的なレイアウトは必ずしも同じとは限らない。トランスパイラが量子ビットをスワップやその他の方法で並べ替える可能性があるためである。 詳細については、 [「初期レイアウト」セクション](common-parameters#initial-layout)を参照してください。\n",
        "    * `layout_method` (str) - レイアウト選択パスの名前 (`default`, `dense`, `sabre`, and `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` (float, 範囲 0-1 | None) - 回路近似に使用されるヒューリスティックダイヤル（ 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'：貪欲に、qubitリソース上でできるだけ早く命令をスケジュールする(エイリアス: `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 0x7f1b3d2d0c90>"
            ]
          },
          "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",
        "  * [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
}