canonical_order
canonical_order(op)
Gibt eine Kopie eines Operators zurück, dessen Terme in einer kanonischen Reihenfolge sortiert sind.
Die Terme sind in einer kanonischen Reihenfolge sortiert, die ausschließlich von der Struktur des jeweiligen Terms (der von ihm dargestellten Operatorfolge) abhängt und nicht von seinem Koeffizienten. Die Reihenfolge ist daher für eine bestimmte Menge von Termen deterministisch, unabhängig davon, wie der Operator zusammengesetzt wurde. Die Terme selbst bleiben unverändert – dadurch werden sie lediglich neu angeordnet, der Operator wird jedoch weder vereinfacht noch in Normalform gebracht.
Dies funktioniert für alle integrierten Operatortypen, die das OperatorTrait Protokoll implementieren; der zurückgegebene Operator hat denselben Typ wie die Eingabe.
Etwaige Gruppenindizes (siehe z. B. groups) bleiben erhalten: Jeder Term behält seinen Gruppenindex bei, wenn er verschoben wird, da ein Gruppenindex eine termbezogene Kennung ist, die unabhängig von der Reihenfolge der Terme ist. Begriffe derselben Gruppe sind danach einfach nicht mehr zusammenhängend. Wenn die Eingabe keine Gruppen enthält, enthält auch das Ergebnis keine.
>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.ordering import canonical_order
>>> op = FermionOperator.from_dict(
... {
... ((True, 1), (False, 0)): 1.0, # a†_1 a_0
... ((True, 0), (False, 1)): 2.0, # a†_0 a_1
... }
... )
>>> ordered = canonical_order(op)
>>> list(ordered.iter_terms())
[([(True, 0), (False, 1)], (2+0j)), ([(True, 1), (False, 0)], (1+0j))]
Parameter
op – der Operator, dessen Terme neu angeordnet werden sollen.
Rückgabe
Ein neuer Operator desselben Typs, dessen Terme in kanonischer Reihenfolge stehen.
Erhöhungen
TypeError – wenn kein unterstützter Operatortyp op ist (siehe OperatorTrait).