ContextAwareDynamicalDecoupling
class qiskit.transpiler.passes.ContextAwareDynamicalDecoupling(*args, **kwargs)
베이스: TransformationPass
게이트 및 큐비트 컨텍스트를 고려하여 X- 시퀀스 동적 디커플링을 구현합니다.
이 패스는 컨텍스트 인식 동적 디커플링(DD) [1을] 구현하여 다음을 보장합니다
- 장치에 인접한 큐비트에서 동시에 발생하는 DD 시퀀스는 상호 직교합니다
- ECR 및 CX 게이트의 스펙트럼 큐비트에 대한 DD 시퀀스는 인접한 타겟/제어 큐비트의 에코 펄스에 직교합니다.
상호 직교하는 DD 서열은 현재 월시-하다마드 서열로, X 게이트로만 구성되어 있습니다. 따라서 어떤 경우에는 더 일반적인 시퀀스와 함께 PadDynamicalDecoupling 를 XY4 와 같은 보다 일반적인 시퀀스와 함께 사용하는 것이 좋습니다.
이 패스는 지연 시퀀스를 정렬하고 인접 큐비트에 대한 잠재적 제어 및 대상 연산을 고려할 수 있으므로 장치에서 두 큐비트 상호 작용의 지속 시간이 동일한 경우 가장 잘 수행됩니다. 그러나 그렇지 않은 경우에도 여전히 유효합니다.
이 패스가 패스 관리자 내에서 실행되는 경우(아래 예시에서와 같이) 자동으로 PadDelay 를 실행하여 지연을 할당합니다. 대신 독립형으로 실행되는 경우( PassManager)로 실행되는 경우 지연이 이미 삽입되어 있어야 합니다.
예:
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import QFTGate
from qiskit.transpiler import PassManager
from qiskit.transpiler.passes import ALAPScheduleAnalysis, ContextAwareDynamicalDecoupling
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
num_qubits = 10
circuit = QuantumCircuit(num_qubits)
circuit.append(QFTGate(num_qubits), circuit.qubits)
circuit.measure_all()
target = FakeSherbrooke().target
pm = generate_preset_pass_manager(optimization_level=2, target=target)
dd = PassManager([
ALAPScheduleAnalysis(target=target),
ContextAwareDynamicalDecoupling(target=target),
])
transpiled = pm.run(circuit)
with_dd = dd.run(transpiled)
print(with_dd.draw(idle_wires=False))참조
[1] A. Seif 외. (2024). 다음을 통해 양자 컴퓨터에서 상호 연관된 노이즈 억제하기
컨텍스트 인식 컴파일, arXiv:2403.06852.
매개변수
- 대상 - 회로를 실행할
Target회로를 실행할 디바이스입니다. - min_duration - DD 시퀀스를 삽입하기 위한 최소 지연 기간(
dt)입니다. 예를 들어 매우 짧은 인접 지연으로 인해 큰 지연 블록이 중단되고 작은 블록으로 분할되는 경우에 유용할 수 있습니다.None인 경우 가장 긴/가장 짧은 CX 또는 ECR 게이트의 차이의 최소 두 배로 설정합니다. - 스킵_리셋_쿼비트 - 초기 지연 및 리셋 후 지연을 건너뜁니다.
- skip_dd_threshold - 유휴 큐비트에서 동적 디커플링을 건너뛰는 경우, 디커플링 시퀀스 기간이 유휴 윈도우의 이 비율을 초과하는 경우 건너뜁니다. 예를 들어 유휴 시간의 95% 이상을 차지하는 DD 시퀀스를 건너뛰려면 이 값을 0.95 으로 설정합니다. 값이 1이면 DD 시퀀스가 창에 맞는 경우 적용됨을 의미합니다.
- pulse_alignment - 게이트 타이밍 할당을 위한 하드웨어 제약 조건(
dt)입니다. 이 값을 제공하면 삽입된 게이트는 이 값의 정수 배수에 대해서만 실행됩니다. 이는 일반적으로backend.configuration().timing_constraints에서 제공됩니다.None의 경우target에서 추출한 것입니다. - 색칠_전략 -
rx.greedy_graph_color에 사용되는 색칠 전략입니다. 기본값은 포화도 전략으로, 이분형 그래프에서 최적입니다( [2의] 1.2.2.8 섹션 참조).
참조
[2] A. Kosowski, 그리고 K. 마누스제프스키, 그래프의 고전적 채색, 그래프 채색,
2-19, 2004. ISBN 0-8218-3458-4.
속성
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 ]
get_orthogonal_sequence
name
run
run(dag)
DAGCircuit에서 패스를 실행합니다. 이는 패스 개발자가 구현합니다.
매개변수
dag (DAGCircuit) – 패스가 실행되는 날짜입니다.
레이즈
NotImplementedError - 패스를 구현하지 않은 경우.
리턴 유형
update_status
update_status(state, run_state)
워크플로 상태를 업데이트합니다.
매개변수
- state (PassManagerState) – 관리자 상태를 전달하여 업데이트합니다.
- run_state (RunState) – 현재 작업의 완료 상태입니다.
리턴
패스 관리자 상태가 업데이트되었습니다.
리턴 유형