TranspileLayout
class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)
ベース: object
トランスパイラからの出力回路のレイアウト属性。
は transpiler は「初期レイアウト」と「最終レイアウト」の順列までユニタリー保存である。 初期レイアウトの順列は、 レイアウトの段階で初期レイアウトを設定し、適用することによって生じる。 最終的なレイアウトの順列は SwapGate ルーティングの段階で挿入される。 このクラスは、様々なヘルパー・メソッドを使ってこれらの順列を推論するためのインターフェイスを提供する。
レイアウトの段階で、トランスパイラーは、回路をターゲットのバックエンドに適合させるために、回路内の量子ビットの順序を再マップする可能性がある。 例えば、入力回路をこうする:
from qiskit.circuit import QuantumCircuit, QuantumRegister
qr = QuantumRegister(3, name="MyReg")
qc = QuantumCircuit(qr)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)
qc.draw("mpl")
レイアウトの段階で、トランスパイラーが量子ビットの並び順を変更したとする:
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.cx(2, 0)
qc.draw("mpl")
メソッドの出力は initial_virtual_layout() メソッドの出力は
Layout({
qr[0]: 2,
qr[1]: 1,
qr[2]: 0,
})(の属性でもある)。 QuantumCircuit.draw() と circuit_drawer() のこの属性は、トランスパイル後の回路可視化で量子ビットの位置へのマッピングを表示するためにも使用されます)。
上記の例を基に、配線段階でトランスパイラがスワップ・ゲートを挿入する必要があり、出力回路がこうなったとする:
from qiskit import QuantumCircuit
qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.swap(0, 1)
qc.cx(2, 1)
qc.draw("mpl")
メソッドの出力は routing_permutation() メソッドの出力は
[1, 0, 2]ルーティング前の量子ビットの位置とルーティング後の最終的な位置を対応付ける。
クラスには3つのパブリック属性があるが、これらは後方互換性のために提供されているもので、トランスパイラの内部状態を表している。 と定義されている:
initial_layout- この属性は、レイアウト段階によって生じる並べ替えをモデル化するために使用されます。 これは、入力のQuantumCircuits 個Qubitのオブジェクトを出QuantumCircuit.qubits力のリスト内の位置にマッピングするLayoutオブジェクトです。input_qubit_mapping- この属性は、元のオブジェクトの入力順序を保持するために使用される。QuantumCircuitオブジェクトの入力順序を保持するために使用される。 これはQubit元の回路(とinitial_layoutの対応する位置にマッピングする。QuantumCircuit.qubitsに対応させる。 これは、回路のOperatorの順列を計算するときに必要である(そして、次のように使用されるOperator.from_circuit()).final_layout- この属性は、ルーティング段階によって生じる順列をモデル化するために使用されます。 これは、出力回路QuantumCircuit.qubits内のクビットを、ルーティング後の最終的な位置にマッピングするLayoutオブジェクトです。 重要な点として、これはルーティング段階において sQuantumCircuitを dSwapGateに挿入することによって生じる置換のみを表している。 これは、元の入力回路の位置から、トランスパイルされた回路の末端における最終的な位置への対応関係ではありません。 これが必要な場合は、を使用してfinal_index_layout()生成することができます。 がfinal_layoutに設定されているNone場合、これはルーティングが実行されなかったことを示しており、出力回路のqubitsリストに含まれる量子ビットを用いた単純なレイアウトと同等であると見なすことができます。
属性
パラメーター
- initial_layout (Layout)
- input_qubit_mapping (dict[Qubit, int])
- final_layout (Layout | None)
- _input_qubit_count (int | None)
- _output_qubit_list (list[Qubit] | None)
final_layout
タイプ: Layout | None
デフォルト値: None
initial_layout
タイプ: Layout
input_qubit_mapping
タイプ: dict[Qubit, int]
方法
final_index_layout
final_index_layout(filter_ancillas=True)
最終的なレイアウトを整数の配列として生成する。
この方法は、入力回路の各クビットについて、最終的な位置の配列を生成する。 例えば、次のような入力回路があったとする:
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)トランスパイラーからの出力はこうだった:
tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)とすると final_index_layout() メソッドが戻る:
[2, 0, 1]これは次のように見ることができる。 元の回路のQubit 0は、レイアウト段階で出力回路のQubit 2にマッピングされ、配線段階でQubit 2にマッピングされる。 元の回路の量子ビット1は、レイアウト段階で出力回路の量子ビット1にマップされ、配線段階で量子ビット0にマップされる。 元の回路のQubit 2は、レイアウト段階で出力回路のQubit 0にマッピングされ、配線段階でQubit 1にマッピングされる。 出力リストの長さは、入力回路の量子ビット数と同じ幅になります。この方法の出力リストは、トランスパイラによって引き起こされる元の回路の量子ビットの並べ替えを追跡するためのものだからです。
パラメーター
filter_ancillas (bool) – False に設定すると、出力回路に割り当てられたアンシラがレイアウトに含まれる。
戻り値
各入力回路量子ビットの最終位置のリスト。
戻りの型
final_virtual_layout
final_virtual_layout(filter_ancillas=True)
最終的なレイアウトを Layout オブジェクトとして生成します。
この方法は、入力回路の各クビットについて、最終的な位置の配列を生成する。 例えば、次のような入力回路があったとする:
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)トランスパイラーからの出力はこうだった:
tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)であれば、この関数の戻り値はレイアウト・オブジェクトとなる:
Layout({
qc.qubits[0]: 2,
qc.qubits[1]: 0,
qc.qubits[2]: 1,
})これは次のように見ることができる。 元の回路のQubit 0は、レイアウト段階で出力回路のQubit 2にマッピングされ、配線段階でQubit 2にマッピングされる。 元の回路の量子ビット1は、レイアウト段階で出力回路の量子ビット1にマップされ、配線段階で量子ビット0にマップされる。 元の回路のQubit 2は、レイアウト段階で出力回路のQubit 0にマッピングされ、配線段階でQubit 1にマッピングされる。 出力リストの長さは、入力回路の量子ビット数と同じ幅になります。この方法の出力リストは、トランスパイラによって引き起こされる元の回路の量子ビットの並べ替えを追跡するためのものだからです。
パラメーター
filter_ancillas (bool) – False に設定すると、出力回路に割り当てられたアンシラがレイアウトに含まれる。
戻り値
各クビットの最終位置にマッピングされたレイアウトオブジェクト。
戻りの型
from_property_set
classmethod from_property_set(dag, property_set)
を構築する。 TranspileLayout 与えられた PropertySet. レイアウト設定キーが存在しない場合は None を返す。
これには、プロパティセットのさまざまなキーを、仮想順列を含む初期レイアウトと最終レイアウトのフルセットに組み合わせることも含まれる。
これは、指定されたプロパティセットを無効にしたり、変異させたりはしない。 その後でプロパティセットを「正規化」するには、次のようにする。 write_into_property_set().
これは以下のプロパティ・セット・キーを読み取る:
layout
必須。 仮想量子ビット Layout 仮想量子ビット(アンシラで拡張される可能性がある)を物理量子ビットのインデックスにマッピングするオブジェクト。 これは直接的に次のことに対応する。 initial_layout.
すべての標準的な使用において、これは必須項目である。 しかし、 virtual_permutation_layout が設定されている場合、回路が実際にハードウェアにレイアウトされていなくても、「つまらない」レイアウトが推測される。 これはこのクラスのデータモデルの残念な制限であり、初期レイアウトを持たずに最終的な順列を指定することはできない。 この欠陥はQiskit 3.0 で修正される。
original_qubit_indices
必須 (ただし PassManager). 各入力仮想量子ビットが、入力回路においてどの相対インデックスであったかを示すマッピング {virtual: index} 。 これはアンシラでも拡張できる(その場合、アンシラのインデックスは受信回路になかったので、あまり意味がない)。
num_input_qubits
必須 (ただし PassManager). 入力回路に含まれる明示的な仮想量子ビットの数(暗黙的なアンシラを含まない)。
final_layout
オプション。 の現在の量子ビットから見て、有効な最終的な並べ替えは次のようになる。 DAGCircuit. これは直接的に次のことに対応する。 final_layout.
virtual_permutation_layout
オプション。 これは、レイアウト選択の前に実行される特定の最適化パスによって設定されます。 ElidePermutations. これは、 final_layout と精神的には似ているが、通常は入力仮想量子ビットにのみ適用される。
このオブジェクトは、Qiskitの導入時の見落としにより、 final_layout と反対の順列規則を使用しています。 言い換えれば、 virtual_permutation_layout Qubit インスタンスを回路の開始点における整数インデックスにマップする。
パラメーター
- dag (DAGCircuit) – 現在の
DAGCircuit. - property_set (PropertySet) – 現在のトランスパイラのプロパティセット。 少なくとも、
layoutキーが設定されていなければならない。
戻りの型
TranspileLayout | なし
initial_index_layout
initial_index_layout(filter_ancillas=False)
整数の配列として初期レイアウトを生成する。
パラメーター
filter_ancillas (bool) – True に設定すると、トランスパイラに追加されたアンシラ量子ビットは出力に含まれない。
戻り値
アレイ内の位置と出力回路内の新しい位置を対応付けるレイアウト配列。
戻りの型
initial_virtual_layout
initial_virtual_layout(filter_ancillas=False)
初期レイアウトの Layout オブジェクトを返します。
これは、入力回路内の仮想オブジェクトのマッピングを返します。 Qubit 入力回路の仮想オブジェクトをレイアウト中に選択された物理量子ビットの位置にマッピングして返します。 これは initial_layout 属性に似ている。
パラメーター
filter_ancillas (bool) – True に設定すると、入力回路の量子ビットだけが返されるレイアウトになる。 出力回路に追加されたアンシラ量子ビットは、返されたオブジェクトからフィルターされます。
戻り値
入力回路のオブジェクトを Qubit オブジェクトを選択された物理量子ビットの位置にマッピングするレイアウトオブジェクト。
戻りの型
routing_permutation
routing_permutation()
最終的なレイアウトを整数の配列として生成する。
もし final_layout 属性が存在しない場合は、ルーティングや他のトランスパイラ変換による出力の並べ替えがなかったことを示す。 この場合、関数は [0, 1, 2, .., n] のリストを返す。
戻り値
アレイ内の位置と出力回路内の新しい位置を対応付けるレイアウト配列。
戻りの型
write_into_property_set
write_into_property_set(property_set)
このレイアウトを property_set のルーズコンストレイントフォームに「アンパック」する。
の逆手法である。 from_property_set().
これは、フォロー・プロパティ・セット・キーを常に書き込み、すでに設定されていた場合は上書きする:
layout
に直接対応している。 initial_layout.
original_qubit_indices
に直接対応している。 input_qubit_mapping.
final_layout
に直接対応している。 final_layout. を呼び出す前の final_layout と同一ではないかもしれないことに注意。 from_property_set()なぜなら、 virtual_permutation_layout の効果が統合されているからである。
virtual_permutation_layout
プロパティセットから削除; TranspileLayout 複数の別々の順列を1つの順列に "確定 "し、正規形を保持する。
さらに、以下のキーも更新される。 TranspileLayout に既知の値がある場合、以下のキーも更新される。 そうでない場合はそのままにしておく。これは、このクラスが特定のオプション・フィールドを設定せずに手動で構築された場合に対処するためである。
num_input_qubits
入力回路の非アンチラ仮想量子ビットの数。
パラメーター
property_set (dict[str, object]) – その PropertySet (または一般的な dict)に出力する。 これにより、入力はその場で変異する。