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 (확장 경로만이 유효한 위치입니다). 이 객체에 대한 접근은 WrapAngles강력히 권장되나, Qiskit 지원이 필요하지 않은 경우 2.2 를 사용하십시오.

참고

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

입력된 키스킷 IR에 대한 최적화 작업을 실행합니다.

매개변수

  • passmanager_ir (DAGCircuit) – 최적화할 Qiskit IR.
  • state (DAGCircuit) – 패스 관리자 자체에 의한 워크플로 실행과 관련된 상태.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – 최적화 작업이 실행될 때마다 호출되는 콜백 함수입니다.

리턴

최적화된 키스킷 IR 및 워크플로 상태.

리턴 유형

튜플 [ DAGCircuit, 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에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.