Skip to main content
IBM Quantum Platform

WrapAngles

class qiskit.transpiler.passes.WrapAngles(*args, **kwargs)

GitHub

ベース: 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")
WrapAngles パスを実行した際の出力の回路図

パラメーター

  • target (Target) – は Target ターゲットQPUを表す。

  • 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 以降のバージョンをサポートするには、同じオブジェクトへの参照を以下の両方に記述する必要があります:

is_analysis_pass

パスが分析パスかどうかをチェックする。

パスが AnalysisPass,、パスがDAGを分析し、その分析結果をプロパティセットに書き込むことができることを意味する。 この種のパスでは、DAGの変更は許されない。

is_transformation_pass

パスが変形パスかどうかをチェックする。

パスが TransformationPass, の場合、そのパスはDAGを操作することはできるが、プロパティセットを変更することはできない(ただし、読み取ることはできる)ことを意味する。


方法

execute

execute(passmanager_ir, state, callback=None)

GitHub

入力Qiskit IRに対して最適化タスクを実行する。

パラメーター

  • passmanager_ir (Any) – Qiskit IRを最適化する。
  • state (PassManagerState) – パスマネージャー自身によるワークフロー実行に関連する状態。
  • callback (Callable | None) – 最適化タスクの実行ごとに呼び出されるコールバック関数。

戻り値

Qiskit IRとワークフローの状態を最適化。

戻りの型

タプル [ Any, PassManagerState ]

name

name()

GitHub

パスの名前

戻りの型

str

run

run(dag)

GitHub

DAGCircuitでパスを実行する。 これはパス開発者によって実装される。

パラメーター

dag - パスが実行されるダグ。

レイズ

NotImplementedError - パスが未実装の場合。

update_status

update_status(state, run_state)

GitHub

ワークフローのステータスを更新する。

パラメーター

  • state (PassManagerState) – 更新するマネージャーの状態を渡す。
  • run_state (RunState) – 現在のタスクの完了状況。

戻り値

パスマネージャーの状態を更新。

戻りの型

PassManagerState

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