Protocolos
Este módulo proporciona diversos protocolos que se utilizan en todo el paquete.
Una interfaz es typing.Protocol una estructura que una clase puede cumplir sin heredar explícitamente de ella. Por ejemplo, cualquier clase que implemente un método __len__ cumple con Sized, independientemente de que así se indique o no en algún lugar de su jerarquía de clases.
Los protocolos de este módulo siguen la misma idea, pero cada uno de ellos se centra en un único método de estilo «dunder» que, por lo demás, no tiene nada de especial (por ejemplo _linear_operator_). Una clase que implemente ese método cumple, por tanto, con el protocolo correspondiente —en SupportsLinearOperator este ejemplo— y puede utilizarse en cualquier lugar donde se requiera dicho protocolo, sin necesidad de ningún registro explícito. Ten en cuenta que el término «protocolo» a veces también se utiliza de forma imprecisa para referirse a la función de despacho independiente del tipo que se basa en un protocolo (por ejemplo linear_operator()), en lugar de a la propia interfaz; la distinción debería quedar clara por el contexto.
La mayoría de los protocolos que se muestran a continuación siguen este patrón, junto con una pequeña función auxiliar independiente del tipo que invoca el método del protocolo en cualquier objeto que se le pase:
Protocolo | Método | Función 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) | Un espejo del protocolo ffsim.SupportsApplyUnitary . |
SupportsApplyUnitaryPlaced(*args, **kwargs) | Una extensión específica del paquete que incluye SupportsApplyUnitary una ubicación de modo. |
SupportsCommutators(*args, **kwargs) | Un protocolo que permite la generación eficiente de conmutadores. |
SupportsFermionOperator(*args, **kwargs) | Un equivalente del protocolo ffsim.SupportsFermionOperator . |
SupportsLinearOperator(*args, **kwargs) | Un espejo del protocolo ffsim.SupportsLinearOperator . |
SupportsMajoranaOperator(*args, **kwargs) | Un equivalente del protocolo SupportsFermionOperator , centrado en los operadores de Majorana. |