Skip to main content
IBM Quantum Platform

TranspileLayout

class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)

GitHub

ベース: 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 オブジェクトです。 重要な点として、これはルーティング段階において s QuantumCircuit を d SwapGateに挿入することによって生じる置換のみを表している。 これは、元の入力回路の位置から、トランスパイルされた回路の末端における最終的な位置への対応関係ではありません。 これが必要な場合は、を使用して final_index_layout() 生成することができます。 が final_layout に設定されている None場合、これはルーティングが実行されなかったことを示しており、出力回路の qubits リストに含まれる量子ビットを用いた単純なレイアウトと同等であると見なすことができます。

属性

パラメーター

final_layout

タイプ: Layout | None

デフォルト値: None

initial_layout

タイプ: Layout

input_qubit_mapping

タイプ: dict[Qubit, int]


方法

final_index_layout

final_index_layout(filter_ancillas=True)

GitHub

最終的なレイアウトを整数の配列として生成する。

この方法は、入力回路の各クビットについて、最終的な位置の配列を生成する。 例えば、次のような入力回路があったとする:

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 に設定すると、出力回路に割り当てられたアンシラがレイアウトに含まれる。

戻り値

各入力回路量子ビットの最終位置のリスト。

戻りの型

list [ int ]

final_virtual_layout

final_virtual_layout(filter_ancillas=True)

GitHub

最終的なレイアウトを 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)

GitHub

を構築する。 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)

GitHub

整数の配列として初期レイアウトを生成する。

パラメーター

filter_ancillas (bool) – True に設定すると、トランスパイラに追加されたアンシラ量子ビットは出力に含まれない。

戻り値

アレイ内の位置と出力回路内の新しい位置を対応付けるレイアウト配列。

戻りの型

list [ int ]

initial_virtual_layout

initial_virtual_layout(filter_ancillas=False)

GitHub

初期レイアウトの Layout オブジェクトを返します。

これは、入力回路内の仮想オブジェクトのマッピングを返します。 Qubit 入力回路の仮想オブジェクトをレイアウト中に選択された物理量子ビットの位置にマッピングして返します。 これは initial_layout 属性に似ている。

パラメーター

filter_ancillas (bool) – True に設定すると、入力回路の量子ビットだけが返されるレイアウトになる。 出力回路に追加されたアンシラ量子ビットは、返されたオブジェクトからフィルターされます。

戻り値

入力回路のオブジェクトを Qubit オブジェクトを選択された物理量子ビットの位置にマッピングするレイアウトオブジェクト。

戻りの型

レイアウト

routing_permutation

routing_permutation()

GitHub

最終的なレイアウトを整数の配列として生成する。

もし final_layout 属性が存在しない場合は、ルーティングや他のトランスパイラ変換による出力の並べ替えがなかったことを示す。 この場合、関数は [0, 1, 2, .., n] のリストを返す。

戻り値

アレイ内の位置と出力回路内の新しい位置を対応付けるレイアウト配列。

戻りの型

list [ int ]

write_into_property_set

write_into_property_set(property_set)

GitHub

このレイアウトを 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)に出力する。 これにより、入力はその場で変異する。

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