合成プラグイン
qiskit.transpiler.passes.synthesis.plugin
このモジュールはQiskitの合成トランスパイラパスのプラグインインターフェースを定義します。 これらは、外部のpythonパッケージが独自の合成技術を実装するためのフックポイントを提供し、ユーザが以下を実行するときにオプションとしてシームレスに公開されます。 transpile().
プラグインインターフェースは、qiskitの外部パッケージが合成プラグインを含むことを宣伝できるようにするsetuptools エントリポイントを使用して構築されています。
詳細は qiskit.transpiler.preset_passmanagers.plugin トランスパイラ・ステージ用のプラグインの書き方の詳細は、こちらを参照してください。
合成プラグインAPI
ユニタリー合成プラグインAPI
UnitarySynthesisPlugin() | 抽象ユニタリー合成プラグインクラス |
UnitarySynthesisPluginManager() | Unitary Synthesisプラグインマネージャークラス |
unitary_synthesis_plugin_names() | インストールされているユニット合成プラグイン名のリストを返す |
ハイレベル合成プラグインAPI
HighLevelSynthesisPlugin() | 抽象的な高レベル合成プラグインクラス。 |
HighLevelSynthesisPluginManager() | インストールされた高位合成プラグインを追跡するクラス。 |
high_level_synthesis_plugin_names(op_name) | 与えられた高レベルオブジェクト名にインストールされているプラグイン名のリストを返す |
プラグインの作成
ユニタリー・シンセシス・プラグイン
ユニタリー合成プラグインを作成するには、主に2つの手順があります。 UnitarySynthesisPluginまず、抽象プラグインクラスのサブクラスを作成します:。 このプラグインクラスは、ユニタリー合成プラグインのインターフェースと契約を定義しています。 主なメソッドは であり run() 、これは単一の位置引数と、numpy配列としてのユニタリ行列を受け取り、そのユニタリ行列から合成された回路を表す オブジェクトを DAGCircuit 返すことが期待されています。 次に、そのパスに必要な情報をQiskitトランスパイラに通知するために、プラグインが合成を実行するために入力をサポートしているか、あるいはその入力を必要とするかによって、や supports_coupling_map などの supports_basis_gates いくつかの必須のプロパティメソッドを実装する必要があります。 必要なすべての入力項目の詳細については、ドキュメントを UnitarySynthesisPlugin 参照してください。 プラグインクラスの例は、次のようなものになります:
from qiskit.transpiler.passes.synthesis import plugin
from qiskit_plugin_pkg.synthesis import generate_dag_circuit_from_matrix
class SpecialUnitarySynthesis(plugin.UnitarySynthesisPlugin):
@property
def supports_basis_gates(self):
return True
@property
def supports_coupling_map(self):
return False
@property
def supports_natural_direction(self):
return False
@property
def supports_pulse_optimize(self):
return False
@property
def supports_gate_lengths(self):
return False
@property
def supports_gate_errors(self):
return False
@property
def supports_gate_lengths_by_qubit(self):
return False
@property
def supports_gate_errors_by_qubit(self):
return False
@property
def min_qubits(self):
return None
@property
def max_qubits(self):
return None
@property
def supported_bases(self):
return None
def run(self, unitary, **options):
basis_gates = options['basis_gates']
dag_circuit = generate_dag_circuit_from_matrix(unitary, basis_gates)
return dag_circuit何らかの理由でこの run() メソッドに利用可能な入力が不十分な場合は、イシューを作成してください。今後のリリースに向けて、下位互換性を保ちつつ追加できる新しいオプトイン入力を用いて、プラグインのインターフェースを拡張することについて協議させていただきます。 ただし、このプラグインのインターフェースは安定版と見なされており、互換性を損なうような変更が行われることはないことが保証されています。 変更が必要な場合(たとえば、利用可能なオプション入力項目を拡張する場合など)、既存のプラグインに変更を加える必要がないように対応します。
supports_ というプレフィックスが付いたメソッドはすべて、 UnitarySynthesisPlugin の派生クラスでインターフェイスの一部として予約されている。 サブクラスには、抽象クラスで定義されていないカスタム・メソッド( supports_* )を定義してはならない。
2番目の手順は、パッケージのメタデータ内で を UnitarySynthesisPlugin setuptoolsのエントリポイントとして指定することです。 これを行うには、プラグインパッケージ用に に pyproject.toml テーブル entry-points を追加し、その qiskit.unitary_synthesis 名前空間の下に必要なエントリポイントを記述するだけで済みます。 例:
[project.entry-points."qiskit.unitary_synthesis"]
"special" = "qiskit_plugin_pkg.module.plugin:SpecialUnitarySynthesis"各プラグインがユニークな名前である限り、1つのパッケージに含めることができるプラグインの数に制限はありません。 そのため、必要に応じて1つのパッケージで複数のプラグインを公開することができる。 default という名前はQiskit自身が使用するもので、プラグインでは使用できません。
ユニタリー合成プラグイン設定
プラグイン・インターフェイスには、ユーザーが自由形式の設定辞書を提供するためのオプションがあります。 これは options kwargとして run() メソッドに渡される。 もしあなたのプラグインにこのような設定オプションがあるのであれば、ユーザーがどのようにこの設定オプションを指定すべきか、またフリーフォームのフィールドであるため、どのように使用されるかを明確に文書化する必要があります。
高レベル合成プラグイン
高レベル合成プラグインの作成は、概念的にはユニタリー合成プラグインの作成と似ています。 HighLevelSynthesisPluginまず、抽象プラグインクラスのサブクラスを作成します。このクラスは、高レベル合成プラグインのインターフェースと契約を定義しています。 run()主な方法は. です。 Clifford位置引 high_level_object 数は、合成される「上位レベルのオブジェクト」を指定します。これは、型 Operation の任意のオブジェクトです(例えば、 LinearFunction や などが含まれます)。 キーワード引数 target はターゲットバックエンドを指定し、これによりプラグインは、カップリングマップやサポートされているゲートセットなど、ターゲット固有のすべての情報にアクセスできるようになります。 キーワード引 coupling_map 数は結合写像のみを指定するものであり、が指定されていない場合に target のみ使用される。 キーワード引 qubits 数は、物理回路上で合成が行われる場合に、上位オブジェクトが定義される量子ビットのリストを指定します。 の None 値は、レイアウトがまだ決定されておらず、この演算の対象となるターゲットマップまたはカップリングマップ内の物理量子ビットがまだ特定されていないことを示しています。 optionsさらに、プラグイン固有のオプションや調整可能な設定は、自由形式の設定辞書である を通じて指定することができます。 プラグインにこれらの設定オプションがある場合は、自由入力フィールドであるため、ユーザーがこれらの設定オプションをどのように指定すべきか、またそれらがどのように使用されるかを明確に文書化しておく必要があります。 このメソッド run() は、その上位オブジェクトから合成された回路を表すオブジェクトを QuantumCircuit 返すものと期待されます。 また、合成メソッドが指定された高レベルオブジェクトを合成できないことを示すために、を返す None ことも許されます。 高レベルオブジェクトの実際の合成は、トランスパイラ・パスによって HighLevelSynthesis 行われます。 必要なすべての入力項目の詳細については、ドキュメントを HighLevelSynthesisPlugin 参照してください。 プラグインクラスの例は、次のようなものになります:
from qiskit.transpiler.passes.synthesis.plugin import HighLevelSynthesisPlugin
from qiskit.synthesis.clifford import synth_clifford_bm
class SpecialSynthesisClifford(HighLevelSynthesisPlugin):
def run(self, high_level_object, coupling_map=None, target=None, qubits=None, **options):
if higher_level_object.num_qubits <= 3:
return synth_clifford_bm(high_level_object)
else:
return Nonesynth_clifford_bm上記の例では、メソッド を使用して、最大 3 キュービットを持つ 型の Clifford オブジェクトを合成するプラグインを作成しています。
2番目の手順は、パッケージのメタデータ内で を HighLevelSynthesisPlugin setuptoolsのエントリポイントとして指定することです。 これを行うには、プラグインパッケージ用に に pyproject.toml テーブル entry-points を追加し、その qiskit.synthesis 名前空間の下に必要なエントリポイントを記述します。 例:
[project.entry-points."qiskit.synthesis"]
"clifford.special" = "qiskit_plugin_pkg.module.plugin:SpecialSynthesisClifford"は name 、ドット「.」で区切られた2つの部分で構成されています: 合成プラグインが適用される型の Operation 名前(clifford)と、プラグインの名前(special)。各プラグインの名前が一意である限り、1つのパッケージに含まれるプラグインの数に制限はありません。
プラグインの使用
ユニタリー・シンセシス・プラグイン
プラグインを使用するには、合成プラグインを含むパッケージをインストールするだけです。 するとQiskitはインストールされたプラグインを自動的に検出し、 適切な transpile() の有効なオプションとして公開します。 ロード/インポートできないプラグインがインストールされている場合、 Python ロギングに記録されます。
インストール済みの単一合成プラグインの一覧を取得するには、この qiskit.transpiler.passes.synthesis.plugin.unitary_synthesis_plugin_names() 関数を使用できます。
高レベル合成プラグイン
高レベル合成プラグインを使用するには、まず を HLSConfig インスタンス化し、さまざまな高レベルオブジェクトで使用するプラグインの名前を格納します。 例:
HLSConfig(permutation=["acg"], clifford=["layers"], linear_function=["pmh"])オブジェクトの合成 PermutationGate に プラグ acg イン、オブジェクトの合成 Clifford に プラグイン layers 、およびオブジェクトの合成 LinearFunction に プラグイン pmh を使用する高レベル合成構成を作成します。 キーワード引数は、関連するオブジェクトのフィールドです Operation.name 。 cliffordたとえば、すべての Clifford 演算には name があり、これがキーワード引数として使用されます。 ここでは、インストール済みのプラグインが処理できるキーワード引数を任意に指定できます。これには、対応するプラグインがインストールされている場合、カスタムユーザーオブジェクトも含まれます。 各引数内でプラグインを設定するための代替形式の詳細については、こちらを参照 HLSConfig してください。
各ハイレベルオブジェクトに対して、与えられたプラグインのリストは、そのうちの1つが成功するまで順番に試される(上の例では、各リストには1つのプラグインしか含まれていない)。 プラグインの名前で指定するだけでなく、 (name, options) タプルを渡すこともできます。タプルの 2 番目の要素は、プラグインのオプションを含む辞書です。
作成したら、この HLSConfig オブジェクトを transpile() または generate_preset_pass_manager() の引数 hls_config として渡します。これにより、指定されたプラグインが、より大規模なコンパイルワークフローの一部として使用されます。
high_level_synthesis_plugin_names()Operation.name 特定の に対してインストールされている高レベル合成プラグインの一覧を取得するには、 関数を使用し、目的 name の を引数として渡します:
high_level_synthesis_plugin_names("clifford")は、インストールされているすべてのClifford合成プラグインのリストを返します。
使用可能なプラグイン
以下はQiskitで利用可能な合成プラグインクラスです。 これらのクラスは直接使うべきでなく、上に書いたプラグイン・インターフェイスを通して使うべきである。 ここでは、各プラグインのドキュメントを見つけやすくするため、また、あるオブジェクトに対して異なる合成方法を比較しやすくするために、クラスをリストアップしている。
ユニタリー・シンセシス・プラグイン
AQC合成プラグイン
AQCSynthesisPlugin() | AQCベースのQiskitユニタリー合成プラグイン。 |
ソロベイ・キタエフ合成プラグイン
SolovayKitaevSynthesis() | Solovay-Kitaev Qiskitユニタリー合成プラグイン。 |
ロス・セリンガー合成プラグイン
RossSelingerSynthesis() | ロス=セリンガー Qiskit ユニタリー合成プラグイン |
クリフォード・ユニタリー合成プラグイン
CliffordUnitarySynthesis() | クリフォードユニタリー合成プラグイン |
デフォルトのユニタリー合成プラグイン
デフォルトのユニタリー合成プラグインは、回路内のユニタリーゲートを合成するためにトランスパイラ・パスが UnitarySynthesis 使用するデフォルトのアルゴリズムを定義します。 その挙動は、対象となるユニタリー演算に含まれる量子ビットの数と、対象となる基底によって決まります。
連続基底
ターゲット基底が連続的(すなわち Clifford+T ではない)場合、プラグインは以下の分解を使用します:
OneQubitEulerDecomposer1量子ビットゲート:オイラー角による分解(参照)。XXDecomposerTwoQubitControlledUDecomposerTwoQubitBasisDecomposer2量子ビットゲート:KAK/カルタン分解(、、を参照)。- 3量子ビット以上のゲート:量子シャノン分解、参照
qs_decomposition()。
1量子ビットおよび2量子ビットゲートについては、プラグインはターゲットからの基底誤差情報を使用して、期待忠実度を最大化する分解を選択します。
クリフォード+T基底
SolovayKitaevDecompositionターゲット基底がClifford+Tの場合、このプラグインはSolovay-Kitaevアルゴリズム(参照)を用いて、1量子ビットのユニタリー演算を近似します。 basis_gates=["h", "t", "tdg"]基本的な近似を作成するために使用される設定は、 depth=12 、 recursion_degree=5、 であり、これらは近似の精度と計算コストのバランスをとるために経験的に選定されたものである。 カスタムパラメータを使用してソロベイ・キタエフ法を利用する場合、あるいは複数の回路について近似計算を繰り返し行うことを避けたい場合は、このデフォルトのプラグインの代わりにユニタリ合成プラグインを呼び出す SolovayKitaevSynthesis ことができます。
現在、Qiskitはクリフォード+T基底セットにおいて2量子ビット以上のユニタリ演算子を直接近似するアルゴリズムを含んでいません。 したがって、プリセットパス管理者はまずそのようなゲ ["cx", "u"] ートを基底に分解し、得られた1量子ビットユニタリゲートに対してソロベイ・キタエフ法を適用する。
DefaultUnitarySynthesis() | デフォルトのユニタリー合成プラグイン。 |
高レベル合成
Qiskit で直接利用できる高レベル合成プラグインには、オブジェクト、 LinearFunction オブジェクト、および PermutationGate オブジェクトを合成 Clifford するためのプラグインが含まれています。 これらのプラグインの中には、暗黙的に全対全の接続を対象としているものもあります。 これは実用上の制約ではありません。なぜなら HighLevelSynthesis 、通常、レイアウトや配線処理の前に実行されるため、追加のSWAPゲートを挿入することで、最終的な回路がデバイスの接続要件に確実に準拠するよう保証されるからです。 その好例が、最大2層のSWAPゲートを用いて任意の順列を合成できる順列合成プラグ ACGSynthesisPermutation インです。 一方、一部のプラグインは暗黙的に線形接続性を前提としている。 通常、合成回路は深さとゲート数が多くなりますが、次のレイアウトパスでデバイスのトポロジー内の連続した量子ビットの列が選択された場合、追加のSWAPゲートは挿入されません。 nその好例が、深さ における 量子ビットの n あらゆる順列を合成できる順列合成プラグ KMSSynthesisPermutation インです。 通常、「全対全接続のための回路を合成し、SWAPゲートを挿入する」アプローチと、「線形接続のための回路を合成し、SWAPゲートの挿入を最小限に抑えるか、あるいは挿入しない」アプローチのどちらが、より優れた最終回路につながるかを事前に判断するのは困難であるため、両方を試してみて、どちらがより良い結果をもたらすかを確認するのが妥当だろう。 最後に、一部のプラグインは特定の接続状態を対象としているため、レイアウトが確定した後に実行する必要があります。 この場合、合成された回路はデバイスのトポロジーに自動的に適合します。 その好例が、任意のカップリングマップに基づいて任意の順列を合成できる「順列合成」プラグ TokenSwapperSynthesisPermutation インです。 詳細については、各プラグインの説明をご参照ください。
各ハイレベルオブジェクトについて、Qiskitで直接利用可能なすべてのプラグインを一覧にした表を掲載しています。 プラグイン名、プラグインのクラス、対象となる接続マップ、および必要に応じて追加情報を記載します。 HLSConfigプラグインは、前述の方法で使用する必要があることを思い出してください。例えば:
HLSConfig(permutation=["kms"])name = "permutation"オブジェクト(つまり、. を持つもの)の合成 PermutationGate にプラグ kms インを使用する高レベル合成構成を作成します。 KMSSynthesisPermutationこの場合、プラグイン名は「kms」で、プラグインクラスは. です。 この特定の合成アルゴリズムにより、線形な最近傍接続性を満たす回路が生成された。
高レベル合成プラグイン
クリフォード合成
プラグイン名 | プラグイン・クラス | ターゲット・コネクティビティ | 説明 |
|---|---|---|---|
"ag" | AGSynthesisClifford | オールトゥオール | CX数を貪欲に最適化する |
"bm" | BMSynthesisClifford | オールトゥオール | の最適なカウント数。 "default" で使用されます |
"greedy" | GreedySynthesisClifford | オールトゥオール | CX-countを貪欲に最適化します。 "default" で使用されます |
"layers" | LayerSynthesisClifford | オールトゥオール | |
"lnn" | LayerLnnSynthesisClifford | リニア | CXゲートは多数あるが、CXの深さは最大 までと保証される |
"default" | DefaultSynthesisClifford | オールトゥオール | 通常、CXカウントを最適化するにはこれが最適です( における最適なCXカウント) |
AGSynthesisClifford() | Aaronson-Gottesman法に基づくクリフォード合成プラグイン。 |
BMSynthesisClifford() | Bravyi-Maslov法に基づくクリフォード合成プラグイン。 |
GreedySynthesisClifford() | 貪欲合成Bravyi-Hu-Maslov-Shaydulin法に基づくクリフォード合成プラグイン。 |
LayerSynthesisClifford() | Bravyi-Maslov法に基づいてクリフォードを層に合成するクリフォード合成プラグイン。 |
LayerLnnSynthesisClifford() | Bravyi-Maslov法に基づいてクリフォードを層に合成するクリフォード合成プラグインで、合成された各層はLNNの接続性に準拠している。 |
DefaultSynthesisClifford() | デフォルトのクリフォード合成プラグイン。 |
線形関数合成
プラグイン名 | プラグイン・クラス | ターゲット・コネクティビティ | 説明 |
|---|---|---|---|
"kms" | KMSSynthesisLinearFunction | リニア | CXゲートは多数あるが、CXの深さは最大 までと保証される |
"pmh" | PMHSynthesisLinearFunction | オールトゥオール | で使用される。 "default" |
"default" | DefaultSynthesisLinearFunction | オールトゥオール | CXカウントの最適化 |
KMSSynthesisLinearFunction() | Kutin-Moulton-Smithline法に基づく線形関数合成プラグイン。 |
PMHSynthesisLinearFunction() | Patel-Markov-Hayes法に基づく線形関数合成プラグイン。 |
DefaultSynthesisLinearFunction() | デフォルトの線形関数合成プラグイン。 |
順列合成
プラグイン名 | プラグイン・クラス | ターゲット・コネクティビティ | 説明 |
|---|---|---|---|
"basic" | BasicSynthesisPermutation | オールトゥオール | 最適なSWAPカウント。 "default" |
"acg" | ACGSynthesisPermutation | オールトゥオール | SWAPの深さが最大 であることを保証します |
"kms" | KMSSynthesisPermutation | リニア | SWAPゲートは多数ありますが、SWAPの深さは最大 までであることが保証されています |
"token_swapper" | TokenSwapperSynthesisPermutation | 任意 | 任意の接続性に対してSWAPカウントを貪欲に最適化する |
"default" | BasicSynthesisPermutation | オールトゥオール | SWAPカウントの最適化 |
BasicSynthesisPermutation() | 並べ替えに基づく並べ替え合成プラグイン。 |
ACGSynthesisPermutation() | アロン、チュン、グラハム法に基づく順列合成プラグイン。 |
KMSSynthesisPermutation() | クチン、モールトン、スミスライン法に基づく順列合成プラグイン。 |
TokenSwapperSynthesisPermutation() | トークンスワッパーアルゴリズムに基づく順列合成プラグイン。 |
量子場理論の統合
プラグイン名 | プラグイン・クラス | ターゲット・コネクティビティ |
|---|---|---|
"full" | QFTSynthesisFull | オールトゥオール |
"line" | QFTSynthesisLine | リニア |
"default" | QFTSynthesisFull | オールトゥオール |
QFTSynthesisFull() | 全対全接続を使用するQFTゲートの合成プラグイン。 |
QFTSynthesisLine() | 線形接続性を利用したQFTゲートの合成プラグイン。 |
MCX合成
MCXGate 以下の表は、k個の制御量子ビットを持つゲートで利用可能な合成プラグインの一覧です。 利用可能なクリーン/ダーティな補助量子ビットの数が不十分な場合、対応する合成メソッドは None を返します。
プラグイン名 | プラグイン・クラス | クリーンな付帯設備の数 | 汚れたアンシラの数 | 説明 |
|---|---|---|---|---|
"gray_code" | MCXSynthesisGrayCode | 0 | 0 | 指数関数的に多くのCXゲートが発生する。 の値が小さい場合にのみ使用すること |
"noaux_v24" | MCXSynthesisNoAuxV24 | CXゲートの二次数 | ||
"noaux_hp24" | MCXSynthesisNoAuxHP24 | CXゲートの線形数。 に対して "gray_code" 、または "noaux_v24" の代わりに使用します | ||
"n_clean_m15" | MCXSynthesisNCleanM15 | 最大 個のCXゲート | ||
"n_dirty_i15" | MCXSynthesisNDirtyI15 | 最大 個のCXゲート | ||
"2_clean_kg24" | MCXSynthesis2CleanKG24 | 最大 個のCXゲート | ||
"2_dirty_kg24" | MCXSynthesis2DirtyKG24 | 0 | 2 | 最大 個のCXゲート |
"1_clean_kg24" | MCXSynthesis1CleanKG24 | 1 | 0 | 最大 個のCXゲート |
"1_dirty_kg24" | MCXSynthesis1DirtyKG24 | 最大 個のCXゲート | ||
"1_clean_b95" | MCXSynthesis1CleanB95 | 最大 個のCXゲート | ||
"default" | MCXSynthesisDefault | 任意 | 任意 | 利用可能なアンシラに基づいて最適なアルゴリズムを選択する |
MCXSynthesisGrayCode() | グレーコードに基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesisNoAuxV24() | マルチ制御Xゲートの合成プラグインは、Valeら(2024)の論文に基づく MCPhaseGate,。 |
MCXSynthesisNoAuxHP24() | HuangとPalsbergの論文に基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesisNCleanM15() | Maslov(2016)の論文に基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesisNDirtyI15() | Itenら(2016)の論文に基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesis2CleanKG24() | KhattarとGidneyの論文(2024年)に基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesis2DirtyKG24() | KhattarとGidneyの論文(2024年)に基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesis1CleanKG24() | KhattarとGidneyの論文(2024年)に基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesis1DirtyKG24() | KhattarとGidneyの論文(2024年)に基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesis1CleanB95() | Barencoら(1995)の論文に基づくマルチ制御Xゲートの合成プラグイン。 |
MCXSynthesisDefault() | マルチコントロールXゲート用のデフォルトの合成プラグイン。 |
MCMT合成
プラグイン名 | プラグイン・クラス | クリーンな付帯設備の数 | 汚れたアンシラの数 | 説明 |
|---|---|---|---|---|
"vchain" | MCMTSynthesisVChain | は、線形数のトッフォリ・ゲートを使用する | ||
"noaux" | MCMTSynthesisNoAux | Qiskitの標準制御機構を使用 | ||
"xgate" | MCMTSynthesisXGate | は、線形数のトッフォリ・ゲートを使用する | ||
"default" | MCMTSynthesisDefault | 任意 | 任意 | 利用可能なアンシラに基づいて最適なアルゴリズムを選択する |
MCMTSynthesisVChain() | MCMTGate のためのV鎖ベースの合成。 |
MCMTSynthesisNoAux() | MCMTGate のためのV鎖ベースの合成。 |
MCMTSynthesisXGate() | Xゲートをベースゲートとする MCMTGate 。 |
MCMTSynthesisDefault() | MCMTゲートのデフォルト分解。 |
整数比較器
プラグイン名 | プラグイン・クラス | 説明 | 補助量子ビット |
|---|---|---|---|
"twos" | IntComparatorSynthesis2s | 2の補数による加算を使う | クリーン |
"noaux" | IntComparatorSynthesisNoAux | 許容されるすべての整数値で制御されるターゲットを反転させる | なし |
"default" | IntComparatorSynthesisDefault | 利用可能な補助量子ビットに応じて最適なアルゴリズムを使用する | 任意 |
IntComparatorSynthesis2s() | 2s の補数に基づく整数比較。 |
IntComparatorSynthesisNoAux() | 補助量子ビットを使用しない場合、指数関数的に高価な比較になる可能性がある。 |
IntComparatorSynthesisDefault() | IntegerComparatorGate のデフォルト合成。 |
合計
プラグイン名 | プラグイン・クラス | 説明 | 補助量子ビット |
|---|---|---|---|
"default" | WeightedSumSynthesisDefault | Vチェーンベースの合成を使用 | 個のクビットが与えられ、 個のクリーンな補助クビットが使用された |
WeightedSumSynthesisDefault() | デフォルトの合成アルゴリズムを使用して、 を WeightedSumGate 合成します。 |
パウリ進化合成
プラグイン名 | プラグイン・クラス | 説明 | ターゲット・コネクティビティ |
|---|---|---|---|
"rustiq" | PauliEvolutionSynthesisRustiq | Rustiq回路合成ライブラリの合成メソッドを使用する | オールトゥオール |
"default" | PauliEvolutionSynthesisDefault | 対角化Clifford per Pauli項を使用する | オールトゥオール |
PauliEvolutionSynthesisDefault() | デフォルトの合成アルゴリズムを使用して、 を PauliEvolutionGate 合成します。 |
PauliEvolutionSynthesisRustiq() | Rustiq を使用して PauliEvolutionGate を合成する。 |
モジュラー加算器の合成
プラグイン名 | プラグイン・クラス | クリーンな付帯設備の数 | 説明 |
|---|---|---|---|
"modular_v17" | ModularAdderSynthesisV17 | 補助量子ビットを持たないモジュラー加算器 | |
"ripple_cdkm" | ModularAdderSynthesisC04 | リップルキャリー加算器 | |
"ripple_vbe" | ModularAdderSynthesisV95 | -ビット数 | リップルキャリー加算器 |
"qft" | ModularAdderSynthesisD00 | QFTベースの加算器 | |
"default" | ModularAdderSynthesisDefault | 任意 | 利用可能なアンシラに基づいて最適なアルゴリズムを選択する |
ModularAdderSynthesisV17() | 補助量子ビットのないモジュラー加算器(modulo )。 |
ModularAdderSynthesisC04() | リップルキャリー加算器、モジュロ 。 |
ModularAdderSynthesisD00() | QFTベースの加算器、モジュロ 。 |
ModularAdderSynthesisV95() | リップルキャリー加算器、モジュロ 。 |
ModularAdderSynthesisDefault() | デフォルトのモジュラー加算器(キャリー・インなし、キャリー・アウトなし)の合成。 |
ハーフアダーの合成
プラグイン名 | プラグイン・クラス | クリーンな付帯設備の数 | 説明 |
|---|---|---|---|
"ripple_cdkm" | HalfAdderSynthesisC04 | リップルキャリー加算器 | |
"ripple_r25" | HalfAdderSynthesisR25 | アンシラなしのリップルキャリー加算器 | |
"ripple_vbe" | HalfAdderSynthesisV95 | -ビット数 | リップルキャリー加算器 |
"qft" | HalfAdderSynthesisD00 | QFTベースの加算器 | |
"default" | HalfAdderSynthesisDefault | 任意 | 利用可能なアンシラに基づいて最適なアルゴリズムを選択する |
HalfAdderSynthesisC04() | キャリーアウトビットを持つリップルキャリー加算器。 |
HalfAdderSynthesisD00() | キャリーインビットとキャリーアウトビットを持つQFTベースの加算器。 |
HalfAdderSynthesisV95() | キャリーアウトビットを持つリップルキャリー加算器。 |
HalfAdderSynthesisR25() | 補助量子ビットを持たないキャリーアウトビットを持つリップルキャリー加算器。 |
HalfAdderSynthesisDefault() | デフォルトのハーフ・アダー(キャリー・インはないが、キャリー・アウトはある)合成。 |
フルアダー合成
プラグイン名 | プラグイン・クラス | クリーンな付帯設備の数 | 説明 |
|---|---|---|---|
"ripple_cdkm" | FullAdderSynthesisC04 | リップルキャリー加算器 | |
"ripple_vbe" | FullAdderSynthesisV95 | -ビット数 | リップルキャリー加算器 |
"default" | FullAdderSynthesisDefault | 任意 | 利用可能なアンシラに基づいて最適なアルゴリズムを選択する |
FullAdderSynthesisC04() | キャリーインビットとキャリーアウトビットを持つリップルキャリー加算器。 |
FullAdderSynthesisV95() | キャリーインビットとキャリーアウトビットを持つリップルキャリー加算器。 |
FullAdderSynthesisDefault() | キャリーインビットとキャリーアウトビットを持つリップルキャリー加算器。 |
乗数合成
プラグイン名 | プラグイン・クラス | クリーンな付帯設備の数 | 説明 |
|---|---|---|---|
"cumulative" | MultiplierSynthesisH18 | 使用する AdderGate による | 制御加算器に基づく累積加算器 |
"qft" | MultiplierSynthesisR17 | QFTベースの乗算器 | |
"default" | MultiplierSynthesisDefault | 任意 | 利用可能なアンシラに基づいて最適なアルゴリズムを選択する |
MultiplierSynthesisH18() | 制御加算器に基づく累積乗算器。 |
MultiplierSynthesisR17() | QFTベースの乗算器。 |
MultiplierSynthesisDefault() | デフォルトの乗数プラグイン。 |