BlockCollector
class qiskit.dagcircuit.BlockCollector(dag)
베이스: object
이 클래스는 DAG(방향성 비순환 그래프)를 특정 기준을 충족하는 노드 블록으로 분할하는 다양한 전략을 구현합니다. 이는 DAG의 표현과 DAGDependency DAGCircuit 표현 모두에서 작동하며, 후자의 경우 노드 간의 교환성을 고려합니다.
DAG 의존성에서 노드를 수집하면 일반적으로 더 최적의 결과를 얻을 수 있지만, 미리 DAG 의존성을 구성해야 하므로 속도가 느립니다. 따라서 DAGCircuit은 낮은 트랜스파일러 설정과 함께 사용해야 하며, DAGDependency는 높은 트랜스파일러 설정과 함께 사용해야 합니다.
일반적으로 최대 블록을 수집하는 방법에는 여러 가지가 있습니다. 여기서 사용되는 접근 방식은 'DAG의 입력 노드에서 시작하여 특정 기준과 일치하는 가장 큰 노드 블록을 탐욕스럽게 수집하는' 형식입니다. 자세한 내용은 https://github.com/Qiskit/qiskit/issues/5775.
매개변수
dag (Union[DAGCircuit, DAGDependency]) – 입력 DAG입니다.
레이즈
DAGCircuitError – 입력 객체가 DAG가 아닙니다.
메소드
collect_all_matching_blocks
collect_all_matching_blocks(filter_fn, split_blocks=True, min_block_size=2, split_layers=False, collect_from_back=False, max_block_width=None)
주어진 필터링 함수 filter_fn과 일치하는 모든 블록을 수집합니다. 수집되지 않은 노드가 더 이상 남지 않을 때까지 필터_fn과 일치하지 않는 가장 큰 블록을 찾은 다음, 필터_fn과 일치하는 가장 큰 블록을 찾는 식으로 반복적으로 찾습니다. 직관적으로, 일치하지 않는 노드의 큰 블록을 찾으면 나중에 일치하는 노드의 큰 블록을 찾는 데 도움이 됩니다.
블록을 수집한 후에는 선택적으로 정제할 수 있습니다. 이 옵션은 수집된 블록을 서로 교집합이 없는 큐비트 split_blocks 부분 집합들로 하위 블록으로 분할할 수 있게 합니다. 이 옵션은 수집된 블록을 중복되지 않는 split_layers 명령어 계층으로 분할할 수 있게 합니다. 이 옵션은 블록이 수집되기 위한 블록 min_block_size 내 최소 게이트 수를 지정합니다. 이 옵션은 블록을 정의할 수 있는 max_block_width 최대 큐비트 수를 지정합니다.
기본적으로 블록은 입력에서 회로의 출력 방향으로 수집됩니다. collect_from_back 옵션을 사용하면 이 방향을 변경할 수 있습니다. 즉, 출력에서 회로의 입력 쪽으로 블록을 수집하는 것입니다.
일치하는 블록 목록만 반환합니다.
collect_matching_block
collect_matching_block(filter_fn, max_block_width)
주어진 필터링 함수와 일치하는 가장 큰 입력 노드 블록(즉, _in_degree 이 0인 노드)을 반복적으로 수집합니다. 예를 들어 스왑 게이트 블록, 선형 게이트 블록(CX 및 SWAP), 클리포드 게이트 블록, 단일 큐비트 게이트 블록, 2큐비트 게이트 블록 등을 수집하는 것이 여기에 해당합니다. 여기서 '반복적으로'란 한 노드가 수집되면 그 직계 후임 노드의 _in_degree 가 1씩 감소하여 더 많은 노드가 입력되어 현재 블록에 수집될 수 있도록 허용한다는 의미입니다. 수집된 노드 블록을 반환합니다.
매개변수
리턴 유형
목록 [ DAGOpNode | DAGDepNode ]