WrapAngles
class qiskit.transpiler.passes.WrapAngles(*args, **kwargs)
ベース: TransformationPass
ターゲットで指定された境界の外側の角度をラップする。
このパスでは、回路内のすべてのゲートをチェックし、ターゲットで指定された境界の外にゲートがあるかどうかをチェックする。 バウンド外のゲートが特定された場合、ターゲット内のコールバックが呼び出され、バウンド外のゲートを同等のサブサーキットで置き換える。 このパスは、パラメータ化されているゲートでは実行されない。たとえゲートが指定された境界の外にパラメータ化されていないパラメータを持っていたとしても、である。 回路内にパラメータ化されたゲートがある場合、ゲートの変換にはバウンド角が必要なため、このパスでは無視される。 例えば、以下の例はコールバックの仕組みと登録がどのように機能するかを示しているが、有用な変換を示しているわけではなく、単純なものである:
from qiskit.circuit import Gate, Parameter, Qubit, QuantumCircuit
from qiskit.circuit.library import RZGate
from qiskit.dagcircuit import DAGCircuit
from qiskit.transpiler.passes import WrapAngles
from qiskit.transpiler import Target, WrapAngleRegistry
param = Parameter("a")
circuit = QuantumCircuit(1)
circuit.rz(6.8, 0)
target = Target(num_qubits=1)
target.add_instruction(RZGate(param), angle_bounds=[(0, 0.5)])
def callback(angles, _qubits):
angle = angles[0]
if angle > 0:
number_of_gates = angle / 0.5
else:
number_of_gates = (6.28 - angle) / 0.5
dag = DAGCircuit()
dag.add_qubits([Qubit()])
for _ in range(int(number_of_gates)):
dag.apply_operation_back(RZGate(0.5), [dag.qubits[0]])
return dag
registry = WrapAngleRegistry()
registry.add_wrapper("rz", callback)
wrap_pass = WrapAngles(target, registry)
res = wrap_pass(circuit)
res.draw("mpl")
パラメーター
-
registry (WrapAngleRegistry) –
ゲート角度を包むためにパスが使用するラッピング関数のレジストリ。 指定がない場合、グローバル
DEFAULT_REGISTRYオブジェクトが使用されます。このパスを単独で実行する予定がない限り、またはこのパスを含む
PassManagerカスタムビルドを作成している場合を除き、に依存DEFAULT_REGISTRYすることをお勧めします。
属性
デフォルト_レジストリ
デフォルト値: <qiskit._accelerate.angle_bound_registry.WrapAngleRegistry object>
明示的なレジストリが指定されていない場合、このパスがデフォルトで使用するグローバルインスタンス。 WrapAngleRegistry
これはQiskitの設計上の見落としにより、 qiskit.transpiler.passes.utils.wrap_angles.WRAP_ANGLE_REGISTRY 以下の場所からも公開アクセス可能です: 2.2 (拡張パスが唯一の有効な場所となります) このオブジェクトには 2.2 経由でアクセスすることを強く推奨します。ただし、Qiskit WrapAnglesをサポートする必要がない場合はこの限りではありません。
Qiskit 2.3 以降では、パス qiskit.transpiler.passes.utils.wrap_angles に完全に新しいレジストリオブジェクトを書き込もうとする試みはデフォルト設定に反映されません。 オブジェクト全体を上書きすることは推奨しませんが、やむを得ずこれを行う必要がある場合、かつQiskit 2.2 以降のバージョンをサポートするには、同じオブジェクトへの参照を以下の両方に記述する必要があります:
WrapAngles.DEFAULT_REGISTRYqiskit.transpiler.passes.utils.wrap_angles.WRAP_ANGLE_REGISTRY
is_analysis_pass
パスが分析パスかどうかをチェックする。
パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。
is_transformation_pass
パスが変形パスかどうかをチェックする。
パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。
方法
execute
execute(passmanager_ir, state, callback=None)
入力Qiskit IRに対して最適化タスクを実行する。
パラメーター
- passmanager_ir (Any) – Qiskit IRを最適化する。
- state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
- callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。
戻り値
Qiskit IRとワークフローの状態を最適化。
戻りの型
タプル [ Any, PassManagerState ]
name
run
run(dag)
DAGCircuitでパスを実行する。 これはパス開発者によって実装される。
パラメーター
dag - パスが実行されるダグ。
レイズ
NotImplementedError - パスが未実装の場合。
update_status
update_status(state, run_state)
ワークフローのステータスを更新する。
パラメーター
- state (PassManagerState) – 更新するマネージャーの状態を渡す。
- run_state (RunState) – 現在のタスクの完了状況。
戻り値
パスマネージャーの状態を更新。
戻りの型