order_terms
order_terms(op, key, *, reverse=False)
Renvoie une copie d'un opérateur dont les termes ont été réorganisés selon une clé fournie par l'utilisateur.
Contrairement à canonical_order(), qui impose un ordre unique et fixe, indépendant des coefficients, cette fonction vous permet de trier les termes selon le critère de votre choix : la fonction key est appliquée à chaque terme exactement comme le ferait sorted() , et les termes sont réorganisés en un nouvel opérateur du même type, dans l'ordre ainsi obtenu. Cela s'avère utile chaque fois que l' ordre des termes a une incidence sur un calcul en aval (par exemple, l'échantillonnage aléatoire de formules de produit), car cela permet d'obtenir un ordre déterministe et reproductible, indépendant de la manière dont l'opérateur a été assemblé.
Les termes eux-mêmes restent inchangés : cela ne fait que les réorganiser, sans simplifier ni mettre l'opérateur en ordre normal. Cela fonctionne pour tous les types d'opérateurs intégrés qui implémentent le protocole OperatorTrait ; l'opérateur renvoyé est du même type que l'entrée.
La key reçoit chaque terme sous la forme du même tuple que celui iter_terms() renvoyé par l’opérateur – ou, lorsque l’opérateur suit les groupes (voir groups), du tuple le plus long issu de iter_terms_with_groups(), dont l’élément final correspond à l’index du groupe du terme. La structure exacte du terme lui-même dépend du type d'opérateur. Les indices de groupe sont conservés – chaque terme conserve son indice de groupe lorsqu'il est déplacé – et si la piste d'entrée ne comporte aucun groupe, le résultat n'en comporte pas non plus.
>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.ordering import order_terms
>>> op = FermionOperator.from_dict(
... {
... ((True, 1), (False, 0)): 1.0, # a†_1 a_0, |coeff| = 1
... ((True, 0), (False, 1)): 3.0, # a†_0 a_1, |coeff| = 3
... }
... )
>>> ordered = order_terms(op, key=lambda term: abs(term[1]), reverse=True)
>>> list(ordered.iter_terms())
[([(True, 0), (False, 1)], (3+0j)), ([(True, 1), (False, 0)], (1+0j))]
Paramètres
- op (OperatorTrait) – l'opérateur dont il faut réorganiser les termes.
- key (Callable[[tuple], Any]) – une fonction à un seul terme, utilisée précisément comme argument
keydesorted(). Il reçoit chaque terme sous la forme du tuple décrit dans la note ci-dessus. - reverse (bool) – Si
True, les termes sont classés par ordre décroissant dekey.
Retours
Un nouvel opérateur du même type, dont les termes sont classés dans l'ordre demandé.
Type de retour