order_terms
order_terms(op, key, *, reverse=False)
Restituisce una copia di un operatore i cui termini sono stati riordinati in base a una chiave specificata dall'utente.
A differenza di canonical_order(), che impone un unico ordine fisso e indipendente dal coefficiente, questa funzione consente di ordinare i termini in base a qualsiasi criterio si desideri: la funzione key viene applicata a ciascun termine esattamente come sorted() farebbe, e i termini vengono riorganizzati in un nuovo operatore dello stesso tipo nell'ordine risultante. Ciò risulta utile ogni volta che l’ ordine dei termini è rilevante per un calcolo successivo (ad esempio, nel campionamento casuale di formule di prodotto), poiché fornisce un ordine deterministico e riproducibile, indipendente dal modo in cui l’operatore è stato casualmente assemblato.
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 integrato che implementi il protocollo OperatorTrait ; l'operatore restituito è dello stesso tipo dell'operando.
Il key riceve ogni termine come la stessa tupla iter_terms() restituita dal dell’operatore – oppure, quando l’operatore tiene traccia dei gruppi (vedi groups), la tupla più lunga proveniente da iter_terms_with_groups(), il cui elemento finale è l’indice di gruppo del termine. La struttura esatta del termine stesso dipende dal tipo di operatore. Gli indici di gruppo vengono mantenuti – ogni termine porta con sé il proprio indice di gruppo quando viene spostato – e se l'input non presenta gruppi, lo stesso vale per il risultato.
>>> 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))]
Parametri
- op (OperatorTrait) – l'operatore i cui termini vanno riordinati.
- key (Callable[[tuple], Any]) – una funzione a un solo termine, utilizzata esattamente come argomento
keydisorted(). Riceve ogni termine come tupla descritta nella nota sopra riportata. - reverse (bool) – Se
True, i termini sono ordinati in ordine decrescente rispetto akey.
Risultati
Un nuovo operatore dello stesso tipo con i suoi termini nell'ordine richiesto.
Tipo di restituzione