canonical_order
canonical_order(op)
Restituisce una copia di un operatore con i suoi termini ordinati secondo un ordine canonico.
I termini sono ordinati secondo un ordine canonico che dipende esclusivamente dalla struttura di ciascun termine (la stringa di operatori che esso rappresenta) e non dal suo coefficiente. L'ordine è quindi deterministico per un dato insieme di termini, indipendentemente dal modo in cui l'operatore è stato composto. I termini stessi rimangono invariati: questa operazione si limita a riorganizzarli, senza semplificare né riportare l'operatore all'ordine normale.
Questo funziona per qualsiasi tipo di operatore incorporato che implementi il protocollo OperatorTrait ; l'operatore restituito è dello stesso tipo dell'input.
Eventuali indici di gruppo (vedi ad esempio groups) vengono conservati: ogni termine porta con sé il proprio indice di gruppo mentre si sposta, poiché l’indice di gruppo è un’etichetta associata a ciascun termine, indipendente dall’ordine dei termini. Da quel momento in poi, i termini dello stesso gruppo semplicemente non sono più contigui. Se l'input non contiene gruppi, nemmeno il risultato ne contiene.
>>> 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))]
Parametri
op – l'operatore i cui termini devono essere riordinati.
Risultati
Un nuovo operatore dello stesso tipo con i suoi termini in ordine canonico.
Aumenti
TypeError – se non op è un tipo di operatore supportato (vedi OperatorTrait).