プロトコル
このモジュールは、パッケージ全体で使用されるさまざまなプロトコルを提供します。
A は typing.Protocol 、クラスが明示的に継承することなく、構造的に実装できるインターフェースである。 たとえば、ある __len__ メソッドを実装するクラスは、そのクラス階層のどこかにその旨が明記されているかどうかにかかわらず Sized、その条件を満たします。
このモジュールにあるプロトコルは、同じ考え方に基づいていますが、それぞれが、それ自体では特に目立たない単一の「dunder」スタイルのメソッド(例えば _linear_operator_)を中心に構成されています。 その1つのメソッドを実装するクラスは、それによって(この例 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で行ってください。