StarPreRouting
class qiskit.transpiler.passes.StarPreRouting
베이스: TransformationPass
스타에서 선형 사전 라우팅으로 실행
이 패스는 모든 2q 게이트 스타 연결 하위 회로를 스왑을 사용한 선형 연결과 동등한 것으로 다시 작성하는 논리적 최적화 패스입니다.
예를 들어,
from qiskit.circuit import QuantumCircuit from qiskit.transpiler.passes import StarPreRouting qc = QuantumCircuit(10) qc.h(0) qc.cx(0, range(1, 5)) qc.h(9) qc.cx(9, range(8, 4, -1)) qc.measure_all() StarPreRouting()(qc).draw("mpl")![]()
이 패스는 섹션 IV에 설명된 유사한 패스에서 영감을 얻었습니다: C. 캠벨 외., "Superstaq: 양자 프로그램의 심층 최적화", 2023 IEEE 국제 양자 컴퓨팅 및 엔지니어링 컨퍼런스(QCE), 미국 워싱턴주 벨뷰, 2023, 1020-1032페이지, 도이: 10.1109/QCE57702.2023.00116.
속성
is_analysis_pass
패스가 분석 패스인지 확인합니다.
패스가 AnalysisPass, 인 경우 패스가 DAG를 분석하고 해당 분석 결과를 속성 집합에 쓸 수 있음을 의미합니다. 이러한 종류의 패스에서는 DAG에 대한 수정이 허용되지 않습니다.
is_transformation_pass
패스가 변환 패스인지 확인합니다.
패스가 TransformationPass, 인 경우 패스가 DAG를 조작할 수는 있지만 속성 집합을 수정할 수는 없음을 의미합니다(단, 읽을 수는 있음).
메소드
collect_all_matching_blocks
collect_all_matching_blocks(dag, min_block_size=2)
주어진 필터링 함수 filter_fn과 일치하는 모든 블록을 수집합니다. 수집되지 않은 노드가 더 이상 남지 않을 때까지 필터_fn과 일치하지 않는 가장 큰 블록을 찾은 다음, 필터_fn과 일치하는 가장 큰 블록을 찾는 식으로 반복적으로 찾습니다. 직관적으로, 일치하지 않는 노드의 큰 블록을 찾으면 나중에 일치하는 노드의 큰 블록을 찾는 데 도움이 됩니다. min_block_size 옵션은 수집할 블록의 최소 게이트 수를 지정합니다.
기본적으로 블록은 입력에서 회로의 출력 방향으로 수집됩니다. collect_from_back 옵션을 사용하면 이 방향을 변경할 수 있습니다. 즉, 출력에서 회로의 입력 쪽으로 블록을 수집하는 것입니다.
일치하는 블록 목록만 반환합니다.
collect_matching_block
collect_matching_block(dag, filter_fn)
주어진 필터링 함수와 일치하는 가장 큰 입력 노드 블록(즉, _in_degree 이 0인 노드)을 반복적으로 수집합니다. 예를 들어 스왑 게이트 블록, 선형 게이트 블록(CX 및 SWAP), 클리포드 게이트 블록, 단일 큐비트 게이트 블록, 2큐비트 게이트 블록 등을 수집하는 것이 이에 해당합니다. 여기서 '반복적으로'란 한 노드가 수집되면 그 직계 후임 노드의 _in_degree 가 1씩 감소하여 더 많은 노드가 입력되어 현재 블록에 수집될 수 있도록 허용한다는 의미입니다. 수집된 노드 블록을 반환합니다.
determine_star_blocks_processing
determine_star_blocks_processing(dag, min_block_size)
스타 블록과 이러한 스타 블록 내 노드의 처리 순서를 dag로 반환합니다 :param dag: 스타 블록을 결정해야 하는 dag. :type dag: DAGCircuit 또는 DAGDependency :param min_block_size: 스타 블록의 최소 2-큐비트 게이트 수. :type min_block_size: int
리턴
주어진 dag에 있는 스타 블록의 목록 Union[ [ListDAGOpNode], [ListDAGDepNode] ]: 처리 순서를 지정하는 연산 목록
리턴 유형
[ListStarBlock]
매개변수
- dag (DAGCircuit |DAGDependency)
- min_block_size (int)
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 - 패스를 구현하지 않은 경우.
star_preroute
star_preroute(dag, blocks, processing_order)
Dag의 스타 블록과 이러한 스타 블록 내 노드의 처리 순서를 반환합니다 :param dag: 스타 프리라우팅을 수행해야 하는 dag. :type dag: DAGCircuit 또는 DAGDependency :param blocks: 주어진 dag에 있는 스타 블록의 목록 :type blocks: [ListStarBlock] :매개변수 처리_순서: :유형 처리_순서를 지정하는 연산 목록: Union[ [ListDAGOpNode], [ListDAGDepNode] ] :매개변수 처리 순서:
리턴
사전 라우팅된 회로를 지정하는 dag: 사전 라우팅 후 최종 큐비트 매핑을 나타냅니다
리턴 유형
new_dag
update_status
update_status(state, run_state)
워크플로 상태를 업데이트합니다.
매개변수
- state (PassManagerState) – 관리자 상태를 전달하여 업데이트합니다.
- run_state (RunState) – 현재 작업의 완료 상태입니다.
리턴
패스 관리자 상태가 업데이트되었습니다.
리턴 유형