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 (확장 경로만이 유효한 위치입니다). 이 객체에 대한 접근은 WrapAngles강력히 권장되나, Qiskit 지원이 필요하지 않은 경우 2.2 를 사용하십시오.
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)
입력된 키스킷 IR에 대한 최적화 작업을 실행합니다.
매개변수
- passmanager_ir (DAGCircuit) – 최적화할 Qiskit IR.
- state (DAGCircuit) – 패스 관리자 자체에 의한 워크플로 실행과 관련된 상태.
- callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – 최적화 작업이 실행될 때마다 호출되는 콜백 함수입니다.
리턴
최적화된 키스킷 IR 및 워크플로 상태.
리턴 유형
튜플 [ DAGCircuit, PassManagerState ]
name
run
run(dag)
DAGCircuit에서 패스를 실행합니다. 이는 패스 개발자가 구현합니다.
매개변수
dag - 패스가 실행되는 날짜입니다.
레이즈
NotImplementedError - 패스를 구현하지 않은 경우.
update_status
update_status(state, run_state)
워크플로 상태를 업데이트합니다.
매개변수
- state (PassManagerState) – 관리자 상태를 전달하여 업데이트합니다.
- run_state (RunState) – 현재 작업의 완료 상태입니다.
리턴
패스 관리자 상태가 업데이트되었습니다.
리턴 유형