프로토콜
이 모듈은 패키지 전반에 걸쳐 사용되는 다양한 프로토콜을 제공합니다.
A는 클래스가 이를 명시적으로 상속받지 않더라도 구조적으로 구현할 수 있는 인터페이스입니다 typing.Protocol . 예를 들어, 어떤 __len__ 메서드를 구현하는 클래스는 그 클래스 계층 구조의 어느 곳에도 명시되어 있든 없든 상관없이 해당 조건을 만족합니다 Sized.
이 모듈에 포함된 프로토콜들은 모두 같은 개념을 따르지만, 각각은 그 자체로는 별다른 특징이 없는 단일한 ‘dunder’ 스타일 메서드(예: _linear_operator_)를 중심으로 구성되어 있습니다. 해당 메서드를 구현하는 클래스는 그로 인해 — 이 예시에서 SupportsLinearOperator — 해당 프로토콜을 충족하게 되며, 별도의 명시적 등록 절차 없이도 해당 프로토콜이 요구되는 모든 곳에서 사용될 수 있게 됩니다. “프로토콜”이라는 용어는 때때로 인터페이스 그 자체보다는 프로토콜을 기반으로 구축된 타입에 구애받지 않는 디스패치 함수(예: linear_operator())를 가리키는 데 광범위하게 사용되기도 하므로, 문맥을 통해 이 둘을 명확히 구분해야 합니다.
아래에 소개된 대부분의 프로토콜은 이 패턴을 따르며, 전달된 객체가 무엇이든 해당 프로토콜 메서드로 호출을 전달하는, 유형에 구애받지 않는 작은 헬퍼 함수와 함께 사용됩니다:
프로토콜 | 방법 | 헬퍼 함수 |
|---|---|---|
SupportsFermionOperator | _fermion_operator_(self) | fermion_operator() |
SupportsMajoranaOperator | _majorana_operator_(self) | majorana_operator() |
SupportsLinearOperator | _linear_operator_(self, norb, nelec) | linear_operator() |
SupportsApplyUnitary | _apply_unitary_(self, vec, norb, nelec, copy) | apply_unitary() |
SupportsApplyUnitaryPlaced | _apply_unitary_placed_(self, vec, norb, nelec, copy, freg_indices) | – |
SupportsCommutators | _commutator_, _anti_commutator_, _double_commutator_ (모두 @staticmethod) | commutator(), anti_commutator(), double_commutator() |
SupportsApplyUnitary(*args, **kwargs) | ffsim.SupportsApplyUnitary 프로토콜의 미러. |
SupportsApplyUnitaryPlaced(*args, **kwargs) | 모드 배치를 포함하는 SupportsApplyUnitary , 패키지별 확장 기능. |
SupportsCommutators(*args, **kwargs) | 효율적인 커뮤테이터 생성을 지원하는 프로토콜. |
SupportsFermionOperator(*args, **kwargs) | 해당 ffsim.SupportsFermionOperator 프로토콜과 동등한 것. |
SupportsLinearOperator(*args, **kwargs) | ffsim.SupportsLinearOperator 프로토콜의 미러. |
SupportsMajoranaOperator(*args, **kwargs) | 마요라나 연산자를 대상으로 하는 해당 SupportsFermionOperator 프로토콜의 등가물. |
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.