전개
class Evolution(num_modes, operator, time=1.0, *, synthesis=None, atomic=False)
베이스: FermionicGate
연산자의 시간적 변화를 구현합니다.
페르미온 operator 와 진화 time 가 주어졌을 때, 이 게이트는 유니터리 연산을 구현한다
가 유니터리 연산자가 되려면, 는 헤르미트 연산자여야 한다. 이는 발신자의 책임이며 확인되지 않았습니다. 직접 확인해 보실 is_hermitian() 수 있습니다.
이 게이트를 페르미온 공간에서 분해하는 것(더 작은 Evolution 게이트들로 구성된 회로로 나누는 것)은 선택 사항이며, 이것이 바로 해당 synthesis 속성이 제어하는 부분입니다. 이 게이트는 페르미온-큐비트 변환 단계로 바로 전달될 수도 있는데, 이 단계에서는 게이트에 포함된 operator 항의 개수와 상관없이 게이트를 전체적으로 매핑하고 합성합니다. 참조 synthesis.
(예를 들어 decompose(), 에 의해) 분해될 때, 가 그 방식을 결정합니다 synthesis . 기본값은 이며 FermionicLieTrotter, 이 경우 에 가 groups 할당되어 있을 operator 때는 진화 과정을 그룹별로 분할하고( ‘그룹 연산자 항: 연산자 구조 사용’ 참조), 그렇지 않은 경우에는 항별로 분할합니다(개별 인자들이 서로 교환법칙을 만족할 때만 정확합니다). 변환 과정은 분해를 더욱 변화시킬 수 있습니다. 예를 들어 QDriftTrotterization, 진화 과정을 그 항들의 무작위 표본으로 대체하기도 합니다. 이것이 방출하는 게이트는 이므로 atomic, 더 이상 그들에게 적용되지 synthesis 않습니다.
상태 벡터 시뮬레이션 경로는 를 거치지 않습니다 synthesis. 대신 전체를 정확히 operator 지수 함수화합니다. 따라서 이 게이트를 시뮬레이션할 때는 트로터 오류가 발생하지 않는 반면, 분해된 회로에서는 일반적으로 트로터 오류가 발생한다.
이 게이트의 인스턴스를 초기화하려면 아래에 나열된 인수를 사용하면 됩니다.
매개변수
- num_modes (int) – 이 게이트가 작용하는 페르미온 모드의 개수.
- operator (OperatorTrait) – 작용받는 페르미온 모드를 시간에 따라 진화시키기 위한 헤르미트 연산자 .
- time (float) – 진화 시간 은 의 지수로 입력됩니다. 음수 값을 입력하면 시간이 거꾸로 흐르며 진화가 진행됩니다.
- synthesis (F2FSynthesisPlugin | None) – 이 게이트를 분해할 수 있다면, 이를 분해하는 데 사용되는 페르미온-페르미온 합성 방법. (
None기본값인 경우)FermionicLieTrotter인스턴스가 사용됩니다. - atomic (bool) – 이 게이트가 페르미온 공간에서 더 이상 분해되어서는 안 되는 완전히 분해된 인자인지 여부.
FermionicGate.atomic의 내용을 참조하십시오.
속성
operator
작용을 받는 페르미온 모드의 시간 발전을 수행할 연산자.
메소드
inverse
inverse(annotated=False)
이 게이트의 역함수인 를 반환합니다.
매개변수
annotated (bool) – 무시했다. 이 게이트의 역게이트는 또 다른 게이트이므로 Evolution, 결코 가 될 필요가 없습니다 AnnotatedOperation.
리턴
부정된 시간 동안 동일한 연산자를 변화시키는 게이트 Evolution .
리턴 유형
프로토콜 방법
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
연산자를 전역 모드로 재설정한 후에 exp(-i * time * operator) 적용됩니다.
연산자는 전역 모드에 재할당된 후 로 변환되어 에 전달되고 ffsim.FermionOperatorffsim.linear_operator() , 그 후 를 통해 벡터에 적용됩니다 scipy.sparse.linalg.expm_multiply(). 아직 가 아닌 연산자는 먼저 SupportsFermionOperator 프로토콜을 통해 FermionOperator 변환되므로, 이 패키지의 모든 연산자 유형을 확장할 수 있습니다.
매개변수
- vec (np.ndarray) – 작용을 가할 상태 벡터.
- norb (int) – 전역 상태 벡터의 공간 궤도 수.
- nelec (int |tuple[int, int]) – 스핀이 없는 시스템의 경우 단일 정수이거나, 스핀 알파 및 스핀 베타 페르미온의 개수를 저장하는 정수 쌍입니다. 정수는 스핀이 없는 모드 해석(연산자의 모드가
norb알파 궤도인 경우)을 나타내며, 쌍은 연산자의 모드에2 * norb대한 스핀이 있는 해석을(orb, spin)나타낸다. - copy (bool) – 벡터에 연산을 적용하기 전에 복사할지 여부.
- freg_indices (list[int]) – 이 게이트의 국소 모드가 매핑되는 절대(전역) 모드 인덱스. 이 연산자는 적용되기 전에 로컬 모드에서 이러한 전역 모드로 재라벨링되며, 이는 트랜스파일러의 합성 단계를 반영합니다.
리턴
변환된 벡터.
인상
- MissingOptionalLibraryError – ffsim이 설치되어 있지 않은 경우.
- ValueError – 연산자가 해당
(norb, nelec)섹터를 보존하지 않는 경우. Evolving under는 가 섹터를 그 자체로 매핑할operator때만exp(-i * time * operator)유니터리를 산출하므로, ffsim은 입자 수나 스핀의 z 성분 중 어느 것도 보존하지 않는 연산자를 거부합니다.
리턴 유형
np.ndarray