Protocolos
Este módulo fornece vários protocolos utilizados em todo o pacote.
A é typing.Protocol uma interface que uma classe pode implementar estruturalmente, sem herdar explicitamente dela. Por exemplo, qualquer classe que implemente um método __len__ satisfaz essa condição Sized, independentemente de isso estar indicado em algum lugar da hierarquia da classe.
Os protocolos deste módulo seguem a mesma ideia, mas cada um deles se concentra em um único método do tipo “dunder”, que, por si só, não teria nada de especial (por exemplo _linear_operator_). Uma classe que implemente esse método satisfaz, assim, o protocolo correspondente — SupportsLinearOperator neste exemplo — e passa a poder ser utilizada em qualquer lugar onde esse protocolo seja esperado, sem qualquer registro explícito. Observe que o termo “protocolo” às vezes também é usado de forma mais ampla para se referir à função de despacho independente de tipo construída com base em um protocolo (por exemplo linear_operator()), em vez da própria interface; a distinção deve ficar clara a partir do contexto.
A maioria dos protocolos a seguir segue esse padrão, combinada com uma pequena função auxiliar independente de tipo que encaminha a chamada para o método do protocolo, independentemente do objeto que lhe seja passado:
Protocolo | Método | Função auxiliar |
|---|---|---|
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_ (todos @staticmethod) | commutator(), anti_commutator(), double_commutator() |
SupportsApplyUnitary(*args, **kwargs) | Um espelho do protocolo ffsim.SupportsApplyUnitary . |
SupportsApplyUnitaryPlaced(*args, **kwargs) | Uma extensão específica do pacote que contém SupportsApplyUnitary um posicionamento de modo. |
SupportsCommutators(*args, **kwargs) | Um protocolo que indica suporte à geração eficiente de comutadores. |
SupportsFermionOperator(*args, **kwargs) | Um equivalente ao protocolo ffsim.SupportsFermionOperator . |
SupportsLinearOperator(*args, **kwargs) | Um espelho do protocolo ffsim.SupportsLinearOperator . |
SupportsMajoranaOperator(*args, **kwargs) | Um equivalente ao protocolo SupportsFermionOperator , voltado para operadores de Majorana. |