TernaryTreeEncoding
class TernaryTreeEncoding(tree, mode_map=None)
베이스: object
마요라나 연산자의 파울리 이미지로 컴파일된 3진 트리.
나무의 각 다리를 마요라나 연산자로 매핑하고 이에 대한 파울리 끈을 구성하는 작업은 매핑된 연산자마다 수행하는 것이 아니라, 여기에서 한 번만 수행됩니다. 이 중 하나를 3진 트리 매퍼에 전달하세요.
이 짝짓기는 ‘Bonsai’ 논문의 알고리즘 1을 따릅니다: [1] 각 노드에서 해당 노드의 모드의 를 전달하는 다리에 도달할 때까지 해당 노드의 X 링크를 따라 내려간 다음, 링크를 Z 따라 내려갑니다. 마찬가지로 링크도 Y 를 전달합니다 . 이것이 바로 를 페르미온 진공으로 만드는 원리이므로, 이는 조정 가능한 관례가 아닙니다.
[ 1 ]
A. Miller, Z., Zimborás, S., Knecht, S., Maniscalco, S. 및 G. García-Pérez, “분재 알고리즘: 페르미온-큐비트 매핑을 직접 생성하기”, PRX Quantum 4, 030314 (2023), arXiv:2212.09731.
사용량
>>> from qiskit_fermions.mappers import TernaryTree, TernaryTreeEncoding
>>> enc = TernaryTreeEncoding(TernaryTree.breadth_first(4, 3))
>>> enc.num_modes, enc.max_weight
(4, 2)
두 인코딩은 모든 마요라나 연산자에 동일한 파울리 문자열을 할당할 때 서로 동일하다고 간주되며, 이를 통해 집합이나 사전에서 중복을 제거할 수 있습니다. 모드 맵을 생략하는 것은 항등 연산자를 부여하는 것과 같으며, 그 외의 어떤 맵을 사용하든 각 끈이 속하는 마요라나 연산자가 달라집니다:
>>> tree = TernaryTree.chain(3, "Z")
>>> TernaryTreeEncoding(tree) == TernaryTreeEncoding(tree, [0, 1, 2])
True
>>> TernaryTreeEncoding(tree) == TernaryTreeEncoding(tree, [2, 1, 0])
False
인코딩은 한 번 생성된 후 이를 통해 매핑된 모든 연산자에서 재사용되므로, 호출할 때마다 페어링 및 문자열 생성 과정이 반복되지 않습니다. 매핑된 연산자의 큐비트 수는 여기에서 고정되지 않고 매퍼에 전달되므로, 하나의 인코딩으로 이상의 num_modes 모든 너비를 가진 레지스터를 처리할 수 있습니다.
인코딩은 피클로 변환할 수 없습니다. 이는 파생된 아티팩트입니다. 컴파일 과정에서 트리와 이를 구축하는 데 사용된 모드 맵은 버려지므로, 피클을 지원하려면 순전히 직렬화 목적으로만 이를 보존해야 합니다. 대신 ( TernaryTree 및 모드 맵)을 픽클 처리한 다음 다시 컴파일하세요.
속성
max_weight
모든 단일 마요라나 연산자 중 가장 큰 파울리 가중치.
항상 이를 생성한 트리의 TernaryTree.max_weight 와 동일합니다. 즉, 짝을 이루지 않은 다리는 가장 깊은 짝을 이룬 다리보다 더 깊게 위치하지 않습니다.
num_modes
이 인코딩이 포함하는 페르미온 모드의 수.
메소드
majorana_image
majorana_image(majorana)
마요라나 연산자의 파울리 상을 (qubit, label) 쌍으로 majorana 반환합니다.
이 지수는 이며 2 * mode + is_prime, 와 일치합니다 gamma(). 이 문자열은 큐비트 순서대로 오름차순으로 정렬되어 있습니다.
>>> from qiskit_fermions.mappers import TernaryTree, TernaryTreeEncoding
>>> enc = TernaryTreeEncoding(TernaryTree.chain(3, "Z"))
>>> enc.majorana_image(4)
[(0, 'Z'), (1, 'Z'), (2, 'X')]
이 계수는 항상 정확히 입니다. 다리의 벡터는 서로 다른 큐비트에 대한 파울리 연산들의 곱이므로, 헤르미트 연산이며, 보정해야 할 위상이 없는 단위 행렬의 제곱입니다.
매개변수
마조라나 – 마조라나 지수, 2 * mode + is_prime.
인상
- ValueError – 가 보다
majorana작지 않은 경우2 * num_modes. - OverflowError – 가
majorana음수이거나 32비트에 들어가지 않는 경우.
total_parity
total_parity(num_qubits)
이 인코딩의 총 페르미온 패리티 관측량을 도출하라.
트리의 다리는 마요라나 연산자로 짝을 이루며, 정확히 하나가 남게 되는데, 그 남은 것이 바로 총 패리티 이다.
이는 측정해야 할 관측값이지, 부과해야 할 제약 조건이 아닙니다. 두 고유값 모두 물리적 값이므로, 상태를 영역으로 투영하지 않습니다. 3진 트리 인코딩은 모드당 1 큐비트를 사용하며, 전체 차원 공간에 대한 유니터리 동형사상입니다. 이때 두 패리티 영역은 모두 의 중복도로 표현되며, 투영하여 제거해야 할 비물리적 부분공간은 존재하지 않습니다.
이 문자열은 일반적으로 all- 문자열이 아닙니다. 이는 all- 경로를 통해 도달하는 분기이며, 이 경로에 속하지 않는 모든 노드에서는 항등 원소를 유지합니다. 조던-위그너 사슬에서는 전체 문자열입니다:
>>> from qiskit_fermions.mappers import TernaryTree, TernaryTreeEncoding
>>> TernaryTreeEncoding(TernaryTree.chain(4, "Z")).total_parity(4)
<SparseObservable with 1 term on 4 qubits: (1+0j)(Z_3 Z_2 Z_1 Z_0)>
4모드에서 균형 트리에서는 그렇지 않습니다:
>>> TernaryTreeEncoding(TernaryTree.breadth_first(4, 3)).total_parity(4)
<SparseObservable with 1 term on 4 qubits: (1+0j)(Z_3 Z_0)>
오직 지지 조건만이 트리에 따라 달라집니다: 계수는 모든 트리와 모든 모드 맵에서 입니다.
매개변수
num_qubits – 결과 관측량의 큐비트 수. 인코딩의 모드 수 이상이어야 하며, 그보다 큰 값인 경우 동일 값으로 채워집니다.
리턴
계수가 인 단일 문자열.
리턴 유형
전체 패리티 관측량
인상
- ValueError – 가 인코딩의 모드 개수보다 작을
num_qubits경우. - OverflowError – 가
num_qubits음수이거나 32비트에 들어가지 않는 경우.