Skip to main content
IBM Quantum Platform

トランスパイラーステージプラグインインターフェース

qiskit.transpiler.preset_passmanagers.plugin

このモジュールは、プリセット・パス・マネージャと transpile() 関数を定義します。 これにより、外部の Python パッケージが PassManager オブジェクトを提供できる。

プラグインインターフェースは、Qiskitの外部パッケージがトランスパイラステージを含むことを宣伝できるようにするsetuptools エントリーポイントを使用して構築されています。

トランスパイラ合成メソッド用のプラグインの書き方については、以下を参照してください。 qiskit.transpiler.passes.synthesis.plugin.


プラグインの段階

プリセット・パス・マネージャーには6つのステージがあり、いずれも対応するエントリー・ポイントを使って外部プラグインをアクティブにロードする。 各ステージの概要は以下の通り。 各ステージの説明と期待値の詳細については、ステージ名のリンクから完全なドキュメントを参照してください。

ステージ名
エントリー・ポイント
予約名
サマリー
初期化qiskit.transpiler.initdefault抽象的な回路を高レベルで論理的に最適化し、マルチ量子ビット演算を1量子ビット演算や2量子ビット演算に変換する。
配置qiskit.transpiler.layouttrivial, dense, sabre, default仮想量子ビットの物理量子ビットへの初期マッピングを選択し、明示的なアンシラを含むように回路を拡張する。 このステージは、 routing と組み合わされることもある。
ルーティングqiskit.transpiler.routingdefault, basic, stochastic, lookahead, sabreゲートを回路に挿入し、回路が以下の接続制約に適合するようにする。 Target. 挿入されたゲートはまだターゲットISAにある必要はないため、 swap 命令として出力されることが多い。 この段階は、 layout に包含されることもある。
変換qiskit.transpiler.translationdefault, translator, synthesisターゲットISAの外にあるすべてのゲートを、ISA内のゲートだけを使用するように書き換える。
最適化qiskit.transpiler.optimizationdefault低レベルで物理回路を意識した最適化。 init とは異なり、 optimization ステージは物理的な回路レベルで機能する。
スケジューリングqiskit.transpiler.schedulingalap, asap, default挿入 Delay を挿入し、回路の壁時計のタイミングを完全に明示する。

プラグインの作成

パスマネージャー・ステージ・プラグインを書くには、主に2つのステップがある。 最初のステップは、抽象プラグインクラス PassManagerStagePlugin のサブクラスを作成することです。 PassManager のサブクラスを作成します。 例えば、 layout ステージプラグインを作成する。 VF2Layout (を実行し(最適化レベルに応じて試行回数が増える)、完璧なレイアウトを見つけられなかった場合は TrivialLayout もし VF2Layout 、完璧なレイアウトを見つけることができなければ、このプラグインを使うことになる:

from qiskit.transpiler.preset_passmanagers.plugin import PassManagerStagePlugin
from qiskit.transpiler.preset_passmanagers import common
from qiskit.transpiler import PassManager
from qiskit.transpiler.passes import VF2Layout, TrivialLayout
from qiskit.transpiler.passes.layout.vf2_layout import VF2LayoutStopReason
from qiskit.passmanager import ConditionalController


def _vf2_match_not_found(property_set):
    return property_set.get("layout") is None or (
        property_set.get("VF2Layout_stop_reason") is not None
        and property_set.get("VF2Layout_stop_reason")
        is not VF2LayoutStopReason.SOLUTION_FOUND
    )


class VF2LayoutPlugin(PassManagerStagePlugin):
    def pass_manager(self, pass_manager_config, optimization_level):
        layout_pm = PassManager(
            [
                VF2Layout(
                    coupling_map=pass_manager_config.coupling_map,
                    max_trials=optimization_level * 10 + 1,
                    target=pass_manager_config.target,
                ),
                ConditionalController(
                    TrivialLayout(pass_manager_config.coupling_map),
                    condition=_vf2_match_not_found,
                ),
            ]
        )
        layout_pm += common.generate_embed_passmanager(pass_manager_config.coupling_map)
        return layout_pm

2番目のステップは、パッケージのメタデータ内で、その PassManagerStagePlugin サブクラスをsetuptoolsのエントリポイントとして公開することです。 これは、プラグインパッケージの entry-points table pyproject.toml 内で、プラグインが対象とするステージに応じた適切な名前空間の下に、必要なエントリポイントを記述することで実現できます。 「 Plugin Stages」 では、ステージの一覧、エントリポイント、および各ステージで求められる要件を確認できます。 たとえば、前述のサンプルプラグインを引き続き見てみましょう:

[project.entry-points."qiskit.transpiler.layout"]
"vf2" = "qiskit_plugin_pkg.module.plugin:VF2LayoutPlugin"

各プラグインがユニークな名前である限り、1つのパッケージに含めることができるプラグインの数に制限はありません。 そのため、必要に応じて1つのパッケージで複数のプラグインを公開することができる。 各ステージの予約名のリストについては、 Plugin Stagesを参照してください。


プラグインAPI

PassManagerStagePlugin()PassManagerStagePlugin は、カスタムステージを transpile().
PassManagerStagePluginManager()プリセット・パス・マネージャー・ステージ・プラグイン用のマネージャー・クラス。

list_stage_plugins

qiskit.transpiler.preset_passmanagers.plugin.list_stage_plugins(stage_name)

GitHub

ステージにインストールされているプラグインのリストを取得する。

パラメーター

stage_name (str) – プラグイン名を取得するステージ名

戻り値

指定されたステージにインストールされたプラグイン名のリスト

戻りの型

プラグイン

レイズ

TranspilerError - 無効なステージ名が指定された場合。

passmanager_stage_plugins

qiskit.transpiler.preset_passmanagers.plugin.passmanager_stage_plugins(stage)

GitHub

各ステージ名について、プラグインのクラスタイプをdictで返します。

この関数は、プラグインに関する詳細情報を取得するのに便利です:

from qiskit.transpiler.preset_passmanagers.plugin import passmanager_stage_plugins
routing_plugins = passmanager_stage_plugins('routing')
basic_plugin = routing_plugins['basic']
help(basic_plugin)
Help on BasicSwapPassManager in module ...preset_passmanagers.builtin_plugins object:

class BasicSwapPassManager(...preset_passmanagers.plugin.PassManagerStagePlugin)
 |  Plugin class for routing stage with :class:`~.BasicSwap`
 |
 |  Method resolution order:
 |      BasicSwapPassManager
 |      ...preset_passmanagers.plugin.PassManagerStagePlugin
 |      abc.ABC
 |      builtins.object
 ...

パラメーター

stage (str) – ステージネーム

戻り値

キーはプラグインの名前で、値はそれぞれのクラスタイプです。

戻りの型

dict

レイズ

TranspilerError - 無効なステージ名が指定された場合。

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。