Protocoles
Ce module fournit divers protocoles utilisés dans l'ensemble du progiciel.
Une interface est typing.Protocol une interface à laquelle une classe peut se conformer d'un point de vue structurel, sans en hériter explicitement. Par exemple, toute classe qui implémente une méthode __len__ satisfait à cette condition Sized, qu'elle le mentionne ou non quelque part dans sa hiérarchie de classes.
Les protocoles de ce module reposent sur le même principe, mais chacun d'entre eux s'articule autour d'une seule méthode de type « dunder », en soi banale (par exemple _linear_operator_). Une classe qui implémente cette méthode satisfait ainsi au protocole correspondant – SupportsLinearOperator dans cet exemple – et peut être utilisée partout où ce protocole est requis, sans qu'aucun enregistrement explicite ne soit nécessaire. Il convient de noter que le terme « protocole » est parfois utilisé de manière assez large pour désigner la fonction de répartition indépendante du type, implémentée au-dessus d’un protocole (par exemple linear_operator()), plutôt que l’interface elle-même; la distinction devrait ressortir clairement du contexte.
La plupart des protocoles présentés ci-dessous suivent ce modèle, associé à une petite fonction d’aide indépendante du type qui transmet l’appel à la méthode du protocole, quel que soit l’objet qui lui est transmis :
Protocole | Méthode | Fonction d'aide |
|---|---|---|
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_ (toutes @staticmethod) | commutator(), anti_commutator(), double_commutator() |
SupportsApplyUnitary(*args, **kwargs) | Un miroir du protocole ffsim.SupportsApplyUnitary . |
SupportsApplyUnitaryPlaced(*args, **kwargs) | Une extension spécifique à un paquet, comportant SupportsApplyUnitary un placement de mode. |
SupportsCommutators(*args, **kwargs) | Un protocole permettant la génération efficace de commutateurs. |
SupportsFermionOperator(*args, **kwargs) | Un équivalent du protocole ffsim.SupportsFermionOperator . |
SupportsLinearOperator(*args, **kwargs) | Un miroir du protocole ffsim.SupportsLinearOperator . |
SupportsMajoranaOperator(*args, **kwargs) | Un équivalent du protocole SupportsFermionOperator , axé sur les opérateurs de Majorana. |