FermionicCircuit
class FermionicCircuit(num_modes)
Basen: object
Ein Wrapper um QuantumCircuit zur Darstellung von Fermionen-Schaltkreisen.
Diese Klasse verfügt im Vergleich zur vollständigen API der zugrunde liegenden … über eine reduzierte API QuantumCircuit. Dies geschieht, um (neben anderen Methoden) zu vermeiden, dass die Möglichkeit offengelegt wird, qubitbasierte Gatter auf einen fermionischen Schaltkreis anzuwenden, was im allgemeinen Fall keine wohldefinierte Operation wäre.
Die Initialisierung einer Schaltungsinstanz kann mit den unten aufgeführten Argumenten erfolgen.
Parameter
num_modes (int) – die Anzahl der fermionischen Moden, auf die diese Schaltung einwirkt.
Attribute
metadata
Erneut belichtet metadata.
modes
Der fermionische Modus, auf den bits diese Schaltung einwirkt.
register
Typ: FermionicRegister
Der innere Kreis FermionicRegister.
Methoden
append
append(gate, fargs, cargs=None, *, copy=True)
Fügt diesem Schaltkreis ein hinzu FermionicGate .
Parameter
-
gate (FermionicGate) – das zu verwendende Fermionen-Gatter.
-
fargs (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – die fermionischen Moden, auf die dieses Gatter einwirkt.
-
cargs (None) –
die klassischen Bits, auf die dieses Gatter einwirkt.
WarnungDerzeit werden keine Tore dieser Art unterstützt.
Erhöhungen
ValueError – wenn das angegebene keine Instanz von ist gateFermionicGate .
Rückgabetyp
Keine
count_ops
decompose
decompose(gates_to_decompose=None, reps=1)
Erneut belichtet decompose().
Parameter
- gates_to_decompose (str |type[Instruction] | Sequence[str |type[Instruction]] | None)
- reps (int)
Rückgabetyp
draw
Protokollmethoden
_apply_unitary_
_apply_unitary_(vec, norb, nelec, copy)
Wendet diese Schaltung auf einen ffsim-Zustandsvektor an und implementiert dabei das ffsim-Protokoll.
Dabei wird die Schaltung in topologischer Reihenfolge durchlaufen, und der unitäre Effekt jedes Befehls wird über das Protokoll ffsim.SupportsApplyUnitary von ffsim auf den Zustandsvektor angewendet. Bei jeder Anweisung, die auf eine Teilmenge des Registers wirkt, werden die fermionischen Moden vor der Ausführung auf ihre absoluten (globalen) Indizes umbenannt.
Einzelheiten finden Sie unter _apply_unitary_placed_() ; bei dieser Methode wird davon ausgegangen, dass die Moden des Schaltkreises mit den Moden des Vektors übereinstimmen ( 0..num_modes d. h. eine Identitätsmodenplatzierung).
Parameter
- vec (ndarray) – der Zustandsvektor, auf den diese Schaltung angewendet werden soll. Ein leerer Ausdruck gibt ihn unverändert zurück.
- norb (int) – die Anzahl der Raumorbitale.
- nelec (int |tuple[int, int]) – entweder eine einzelne ganze Zahl, die die Anzahl der Fermionen in einem spinlosen System angibt, oder ein Paar ganzer Zahlen, das die Anzahl der Fermionen mit Spin alpha und Spin beta angibt.
- copy (bool) – ob der Vektor vor der Bearbeitung kopiert werden soll.
Rückgabe
Der transformierte Vektor.
Erhöhungen
- TypeError – wenn eine Schaltungsanweisung das Protokoll
ffsim.SupportsApplyUnitaryvon ffsim nicht implementiert. - ValueError – wenn eine Schaltungsanweisung die Anwendung ihres Unitaritätsprinzips für die gegebenen
norbund verweigertnelec; oder wenn eine Anweisung, die nur das einfache_apply_unitary_Protokoll implementiert, auf eine Teilmenge im Nicht-Identitätsmodus platziert wird.
Rückgabetyp
_apply_unitary_placed_
_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)
Wendet diese Schaltung an, nachdem ihre Moden den globalen Moden des Vektors zugewiesen wurden.
Dabei wird die Schaltung in topologischer Reihenfolge durchlaufen, und der unitäre Effekt jedes Befehls wird über das Protokoll ffsim.SupportsApplyUnitary von ffsim auf den Zustandsvektor angewendet. Die schrittbezogenen Modi werden zunächst durch die Anordnung dieser Schaltung abgebildet: Ein schaltungslokaler Modus m wird auf den globalen Modus abgebildet freg_indices[m], sodass eine Teilanweisung, die auf schaltungslokale Modi wirkt, auf die globalen Modi angewendet [m0, m1, ...] wird [freg_indices[m0], freg_indices[m1], ...]. Bei der Identitätsplatzierung ist dies freg_indices == 0..num_modes genau der Fall _apply_unitary_(); eine Teilmenge-Platzierung lässt diese Schaltung als Definition eines Gatters fungieren, das auf einer Teilmenge eines größeren Registers platziert ist (z. B. UCJ). Diese platzierungsbezogene Erweiterung ist dokumentiert als SupportsApplyUnitaryPlaced – ein paketspezifisches Protokoll, für das es kein ffsim-Äquivalent gibt.
Ein Befehl wird nur dann auf seine absoluten Modi angewendet, wenn er die platzierungsbewusste Erweiterung _apply_unitary_placed_ (SupportsApplyUnitaryPlaced) implementiert. Ein Befehl, der lediglich die einfache Erweiterung von ffsim implementiert _apply_unitary_ – die kein Modusargument hat und daher auf alle Modi des 0..k Vektors wirkt –, kann nur dann ausgeführt werden, wenn seine Platzierung die Identität ist [0, 1, ..., k-1]; bei jeder anderen Teilmenge lässt sich die Platzierung nicht ausdrücken, und der Befehl wird abgelehnt, anstatt stillschweigend auf die falschen Modi angewendet zu werden.
Parameter
- vec (ndarray) – der Zustandsvektor, auf den diese Schaltung angewendet werden soll. Ein leerer Ausdruck gibt ihn unverändert zurück.
- norb (int) – die Anzahl der räumlichen Orbitalen des globalen Zustandsvektors.
- nelec (int |tuple[int, int]) – entweder eine einzelne ganze Zahl, die die Anzahl der Fermionen in einem spinlosen System angibt, oder ein Paar ganzer Zahlen, das die Anzahl der Fermionen mit Spin alpha und Spin beta angibt.
- copy (bool) – ob der Vektor vor der Bearbeitung kopiert werden soll.
- freg_indices (list[int]) – die absoluten (globalen) Modenindizes, auf die die Moden dieser Schaltung abgebildet werden.
Rückgabe
Der transformierte Vektor.
Erhöhungen
- TypeError – wenn eine Schaltungsanweisung das Protokoll
ffsim.SupportsApplyUnitaryvon ffsim nicht implementiert. - ValueError – wenn eine Schaltungsanweisung die Anwendung ihres Unitaritätsprinzips für die gegebenen
norbund verweigertnelec; oder wenn eine Anweisung, die nur das einfache_apply_unitary_Protokoll implementiert, auf eine Teilmenge im Nicht-Identitätsmodus platziert wird.
Rückgabetyp