Skip to main content
IBM Quantum Platform

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.

Nota

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).

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.