Skip to main content
IBM Quantum Platform

TranspileLayout

class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)

GitHub

베이스: object

트랜스파일러의 출력 회로에 대한 레이아웃 어트리뷰트입니다.

transpiler “초기 배열”과 “최종 배열”의 순열을 고려할 때 유니터리를 보존한다. 초기 레이아웃 순열은 레이아웃 단계에서 초기 레이아웃을 설정하고 적용함으로써 발생합니다. 최종 레이아웃 배열의 변화는 라우팅 단계 에서 삽입 SwapGate 작업으로 인해 발생합니다. 이 클래스는 다양한 보조 메서드를 사용하여 이러한 순열을 분석할 수 있는 인터페이스를 제공합니다.

레이아웃 단계에서 트랜스파일러는 회로를 대상 백엔드에 맞출 때 회로의 큐비트 순서를 잠재적으로 다시 매핑할 수 있습니다. 예를 들어 입력 회로를 예로 들어 보겠습니다:

from qiskit.circuit import QuantumCircuit, QuantumRegister

qr = QuantumRegister(3, name="MyReg")
qc = QuantumCircuit(qr)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)
qc.draw("mpl")
이전 코드에서 출력한 회로도입니다.

레이아웃 단계에서 트랜스파일러가 큐비트의 순서를 바꾼다고 가정해 보겠습니다:

from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.cx(2, 0)
qc.draw("mpl")
이전 코드에서 출력한 회로도입니다.

그러면 메서드의 출력은 initial_virtual_layout() 메서드의 출력은 다음과 같습니다:

Layout({
    qr[0]: 2,
    qr[1]: 1,
    qr[2]: 0,
})

(또한, 트랜스파일링 후 회로 시각화에서 큐비트를 위치에 매핑하여 표시하는 데 사용되는 것도 바로 QuantumCircuit.draw()circuit_drawer() 에 있는 이 속성입니다).

위의 예를 바탕으로 라우팅 단계에서 트랜스파일러가 스왑 게이트를 삽입해야 하고 출력 회로가 다음과 같이 된다고 가정해 보겠습니다:

from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.swap(0, 1)
qc.cx(2, 1)
qc.draw("mpl")
이전 코드에서 출력한 회로도입니다.

그런 다음 routing_permutation() 메서드의 출력은 다음과 같습니다:

[1, 0, 2]

라우팅 전 큐비트의 위치를 라우팅 후 최종 위치로 매핑합니다.

클래스와 관련된 세 가지 공개 속성이 있지만, 대부분 이전 버전과의 호환성을 위해 제공되며 트랜스파일러의 내부 상태를 나타냅니다. 다음과 같이 정의됩니다.

  • initial_layout - 이 속성은 레이아웃 단계에서 발생하는 순열을 모델링하는 데 사용됩니다. 이는 입력 QuantumCircuits Qubit 객체들을 출력 QuantumCircuit.qubits 목록 내의 위치에 매핑하는 객체입니다 Layout .
  • input_qubit_mapping - 이 속성은 원본 QuantumCircuit 객체의 입력 순서를 유지하기 위해 사용됩니다. 이는 원본 회로(및 initial_layout)의 가상 Qubit 객체를 원본 회로 내의 QuantumCircuit.qubits 해당 위치로 매핑합니다. Operator.from_circuit()이는 회로의 Operator 순열을 계산할 때 필요하며 (에 의해 사용됩니다).
  • final_layout - 이 속성은 라우팅 단계에서 발생하는 순열을 모델링하는 데 사용됩니다. 이는 출력 회로의 큐비트를 출력 회로 내의 위치에서 QuantumCircuit.qubits 라우팅 후의 최종 위치로 매핑하는 객체입니다 Layout . SwapGate중요한 점은, 이것이 라우팅 단계에서 s를 d에 QuantumCircuit 삽입함으로써 발생하는 순열만을 나타낸다는 것입니다. 이는 원래 입력 회로의 위치와 트랜스파일링된 회로 끝단의 최종 위치 간의 대응 관계가 아닙니다. 이것이 필요하시다면, 를 final_index_layout() 사용하여 생성할 수 있습니다. None가 로 설정된 경우 final_layout , 이는 라우팅이 실행되지 않았음을 나타내며, 출력 회로의 qubits 목록에 있는 큐비트를 사용한 단순한 레이아웃과 동등한 것으로 간주할 수 있습니다.

속성

매개변수

final_layout

유형: Layout | None

기본값: None

initial_layout

유형: Layout

input_qubit_mapping

유형: dict[Qubit, int]


메소드

final_index_layout

final_index_layout(filter_ancillas=True)

GitHub

최종 레이아웃을 정수의 배열로 생성합니다.

이 메서드는 입력 회로에서 각 큐비트에 대한 최종 위치 배열을 생성합니다. 예를 들어 다음과 같은 입력 회로가 있다고 가정해 보겠습니다:

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)

를 입력했고 트랜스파일러의 출력은 다음과 같았습니다:

tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)

를 반환하면 final_index_layout() 메서드가 반환됩니다:

[2, 0, 1]

이는 다음과 같이 볼 수 있습니다. 원래 회로의 큐비트 0은 레이아웃 단계에서 출력 회로의 큐비트 2에 매핑되고, 이는 라우팅 단계에서 큐비트 2에 매핑됩니다. 원래 회로의 큐비트 1은 레이아웃 단계에서 출력 회로의 큐비트 1에 매핑되고, 라우팅 단계에서는 큐비트 0에 매핑됩니다. 원래 회로의 큐비트 2는 레이아웃 단계에서 출력 회로의 큐비트 0에 매핑되고, 라우팅 단계에서는 큐비트 1에 매핑됩니다. 이 메서드의 출력 목록은 트랜스파일러로 인한 원본 회로의 큐비트 순열을 추적하기 위한 것이므로 출력 목록의 길이는 입력 회로의 큐비트 수만큼 넓어집니다.

매개변수

filter_ancillas (bool) – False 로 설정하면 출력 회로에 할당된 모든 보조 장치가 레이아웃에 포함됩니다.

리턴

각 입력 회로 큐비트에 대한 최종 위치 목록입니다.

리턴 유형

list [ int ]

final_virtual_layout

final_virtual_layout(filter_ancillas=True)

GitHub

최종 레이아웃을 Layout 객체로 생성합니다.

이 메서드는 입력 회로에서 각 큐비트에 대한 최종 위치 배열을 생성합니다. 예를 들어 다음과 같은 입력 회로가 있다고 가정해 보겠습니다:

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)

를 입력했고 트랜스파일러의 출력은 다음과 같았습니다:

tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)

인 경우 이 함수의 반환값은 레이아웃 객체가 됩니다:

Layout({
    qc.qubits[0]: 2,
    qc.qubits[1]: 0,
    qc.qubits[2]: 1,
})

이는 다음과 같이 볼 수 있습니다. 원래 회로의 큐비트 0은 레이아웃 단계에서 출력 회로의 큐비트 2에 매핑되고, 이는 라우팅 단계에서 큐비트 2에 매핑됩니다. 원래 회로의 큐비트 1은 레이아웃 단계에서 출력 회로의 큐비트 1에 매핑되고, 라우팅 단계에서는 큐비트 0에 매핑됩니다. 원래 회로의 큐비트 2는 레이아웃 단계에서 출력 회로의 큐비트 0에 매핑되고, 라우팅 단계에서는 큐비트 1에 매핑됩니다. 이 메서드의 출력 목록은 트랜스파일러로 인한 원본 회로의 큐비트 순열을 추적하기 위한 것이므로 출력 목록의 길이는 입력 회로의 큐비트 수만큼 넓어집니다.

매개변수

filter_ancillas (bool) – False 로 설정하면 출력 회로에 할당된 모든 보조 장치가 레이아웃에 포함됩니다.

리턴

각 큐비트의 최종 위치에 매핑되는 레이아웃 객체입니다.

리턴 유형

레이아웃

from_property_set

classmethod from_property_set(dag, property_set)

GitHub

를 구성합니다 TranspileLayout 에서 주어진 필드를 읽어 PropertySet. 레이아웃 설정 키가 없는 경우 None 을 반환합니다.

여기에는 가상 순열을 포함하여 프로퍼티 세트의 여러 키를 초기 및 최종 레이아웃의 전체 세트에 결합하는 것이 포함됩니다.

이렇게 해도 지정된 프로퍼티 세트가 무효화되거나 어떤 식으로든 변경되지 않습니다. 나중에 프로퍼티 집합을 "정식화"하려면 다음을 호출합니다 write_into_property_set().

그러면 다음과 같은 속성 세트 키를 읽습니다:

layout

필수. 객체는 Layout 객체는 가상 큐비트(잠재적으로 부호로 확장 가능)를 물리적 큐비트 인덱스에 매핑합니다. 이는 직접적으로 initial_layout.

참고

모든 표준 사용에서 이 필드는 필수 필드입니다. 그러나 virtual_permutation_layout 을 설정하면 회로를 실제로 하드웨어에 배치하지 않더라도 "사소한" 레이아웃이 유추됩니다. 이는 이 클래스 데이터 모델의 안타까운 한계로, 초기 레이아웃이 없으면 최종 순열을 지정할 수 없습니다. 이 결함은 키스킷 3.0 에서 수정될 예정입니다.

original_qubit_indices

필수 (하지만 PassManager). 입력 회로에서 들어오는 각 가상 큐비트의 상대 인덱스를 나타내는 {virtual: index} 매핑입니다. 이 경우 앤실라를 사용하여 확장할 수도 있습니다(이 경우 앤실라 인덱스는 들어오는 회로에 없었으므로 큰 의미가 없습니다).

num_input_qubits

필수 (하지만 PassManager). 입력 회로에 있는 명시적 가상 큐비트 수입니다(즉, 암시적 부호 제외).

final_layout

선택사항. 의 현재 큐비트 측면에서 효과적인 최종 순열은 DAGCircuit. 이는 직접적으로 final_layout.

virtual_permutation_layout

선택사항. 이는 레이아웃 선택 전에 실행되는 특정 최적화 패스에 의해 설정됩니다 ElidePermutations. final_layout 와 비슷한 개념이지만 일반적으로 입력 가상 큐비트에만 적용됩니다.

경고

이 객체는 도입 당시 Qiskit의 실수로 인해 와는 final_layout 반대되는 순열 규칙을 사용합니다. 다시 말해, virtual_permutation_layout 회로 끝부분에 있는 Qubit 인스턴스를 회로 시작 부분의 정수 인덱스에 대응시킵니다.

매개변수

  • dag (DAGCircuit) – 의 현재 상태를 DAGCircuit.
  • property_set (PropertySet) – 현재 트랜스파일러의 프로퍼티 세트입니다. 최소한 layout 키가 설정되어 있어야 합니다.

리턴 유형

TranspileLayout | 없음

initial_index_layout

initial_index_layout(filter_ancillas=False)

GitHub

초기 레이아웃을 정수의 배열로 생성합니다.

매개변수

filter_ancillas (bool) – True 로 설정하면 트랜스파일러에 추가된 모든 앤실라 큐비트는 출력에 포함되지 않습니다.

리턴

배열의 위치를 출력 회로의 새 위치에 매핑하는 레이아웃 배열입니다.

리턴 유형

list [ int ]

initial_virtual_layout

initial_virtual_layout(filter_ancillas=False)

GitHub

초기 레이아웃을 위한 Layout 객체를 반환합니다.

이는 입력 회로 내의 가상 Qubit 객체들을 레이아웃 과정에서 선택된 물리적 큐비트의 위치에 매핑한 결과를 반환합니다. 이는 속성과 initial_layout 유사합니다.

매개변수

filter_ancillas (bool) – True 로 설정하면 입력 회로의 큐비트만 반환된 레이아웃에 포함됩니다. 출력 회로에 추가된 모든 앤실라 큐비트는 반환된 오브젝트에서 필터링됩니다.

리턴

입력 회로의 Qubit 객체들을 선택된 물리적 큐비트의 위치에 매핑하는 레이아웃 객체.

리턴 유형

레이아웃

routing_permutation

routing_permutation()

GitHub

최종 레이아웃을 정수의 배열로 생성합니다.

속성이 없는 경우 final_layout 속성이 없으면 라우팅 또는 기타 트랜스파일러 변환으로 인한 출력 순열이 없음을 나타냅니다. 이 경우 함수는 [0, 1, 2, .., n] 의 목록을 반환합니다.

리턴

배열의 위치를 출력 회로의 새 위치에 매핑하는 레이아웃 배열입니다.

리턴 유형

list [ int ]

write_into_property_set

write_into_property_set(property_set)

GitHub

이 레이아웃을 property_set 의 느슨한 제약 조건 형식으로 '언팩'합니다.

의 역 방식입니다 from_property_set().

이렇게 하면 항상 다음 속성 설정 키를 쓰고 이미 설정된 경우 덮어씁니다:

layout

에 직접 해당 initial_layout.

original_qubit_indices

에 직접 해당 input_qubit_mapping.

final_layout

에 직접 해당 final_layout. 로 호출하기 전의 final_layout 와 동일하지 않을 수 있습니다 from_property_set()virtual_permutation_layout 의 효과가 합쳐졌을 것이기 때문입니다.

virtual_permutation_layout

속성 집합에서 삭제됩니다; TranspileLayout 여러 개의 개별 순열을 하나의 순열로 "최종화"하여 표준 형식을 유지합니다.

또한 다음 키가 업데이트됩니다 TranspileLayout 에 알려진 값이 있는 경우 업데이트됩니다. 이 클래스가 특정 옵션 필드를 설정하지 않고 수동으로 생성된 경우를 처리하기 위해 그렇지 않은 경우 그대로 유지됩니다.

num_input_qubits

입력 회로에 있는 비안실라 가상 큐비트 수입니다.

매개변수

property_set (dict[str, object]) – 의 PropertySet (또는 일반 dict)에 출력을 기록해야 합니다. 이렇게 하면 입력이 제자리에서 변경됩니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.