Skip to main content
IBM Quantum Platform

group_order

group_order(op)

Gibt eine Kopie eines Operators zurück, deren Terme nach Gruppenindex sortiert sind.

Die Begriffe werden ausschließlich nach ihrem Gruppenindex sortiert, wodurch jede Gruppe aus einer zusammenhängenden Folge von Begriffen besteht und die Gruppenindizes nicht absteigend sind. Die Sortierung ist stabil, sodass die Terme innerhalb einer Gruppe ihre relative Reihenfolge beibehalten: Eine Sortierung, bei der zunächst die kanonische Reihenfolge und anschließend die Gruppenreihenfolge berücksichtigt wird, verfeinert somit die kanonische Reihenfolge, anstatt sie durch eine willkürliche Permutation zu ersetzen. 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.

Gruppenindizes geben lediglich an, welche Terme zusammengehören; daher ändert sich dadurch lediglich die Anordnung des Operators, nicht jedoch sein Wert. Was das Layout einbringt, sind Suchkosten: Im Allgemeinen split_out_groups() muss jeder Term durchsucht werden, um die angeforderten Gruppen zu finden, doch bei einem gruppenorientierten Operator bilden die Terme jeder Gruppe einen Bereich, der durch binäre Suche lokalisiert werden kann, sodass eine Suche nur die Kosten der angeforderten Gruppen verursacht und nicht die der enthaltenen Terme. Indem dieser Aufruf aus einer Schleife herausgelöst wird, die wiederholt einige Gruppen aus einem großen Operator abtastet, lassen sich diese Nachschläge effizient durchführen.

Anmerkung

Ein Operator, der keine Gruppen verfolgt (siehe beispielsweise groups), hat keine Sortierkriterien und wird als unveränderte Kopie zurückgegeben, sodass sich dies in einer Pipeline ohne Guard bei jedem Schritt zusammensetzt. Das Ergebnis enthält ebenfalls keine Gruppen.

>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.ordering import group_order
>>> op = FermionOperator.from_dict(
...     {
...         ((True, 0), (False, 1)): 1.0,
...         ((True, 1), (False, 0)): 2.0,
...         ((True, 2), (False, 3)): 3.0,
...     }
... )
>>> op.groups = [1, 0, 1]  # group 1's terms are not contiguous
>>> ordered = group_order(op)
>>> print(ordered.groups)
[0, 1, 1]

Parameter

op – der Operator, dessen Terme neu angeordnet werden sollen.

Rückgabe

Ein neuer Operator desselben Typs, dessen Ausdrücke nach Gruppenindex sortiert sind.

Erhöhungen

TypeError – wenn kein unterstützter Operatortyp op ist (siehe OperatorTrait).

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.