Begrenzungen
qiskit_addon_slc.bounds
Gebundene Berechnungsfunktionen.
Dieses Modul bietet verschiedene Funktionen zur Berechnung der Fehlergrenzen, aus denen sich ein schattierter Lichtkegel zusammensetzt.
compute_forward_bounds
compute_forward_bounds(circuit, noise_model_paulis, /, observable, *, evolution_max_terms=1000000, eigval_max_qubits=14, atol=1e-08, atol_simplify=1e-08, atol_eigenvalue=1e-08, **kwargs)
Berechnen Sie die nach vorne entwickelten Kommutatorgrenzen bei ungleicher Zeit.
Beginnend am Ende der Schaltung berechnen Sie die durch Vorwärtsentwicklung ermittelten Ungleichzeit-Kommutatorgrenzen für alle Pauli-Fehlerterme jeder verrauschten Schicht in der Zielschaltung.
Das heißt, man berechnet für alle Fehlerterme, , wobei die Zielgröße ist, die an gemessen werden soll observable``circuit .
Die Fehlerterme, , werden durch … bestimmt noise_model_paulis. Dieses Wörterbuch ordnet Identifikatoren von Rauschmodellen (samplomatic.InjectNoise.ref) einer Liste von Pauli-Fehlertermen zu. Die entsprechenden Begriffe werden immer dann verwendet, wenn während der Iteration über ein BoxOp mit einer passenden Annotation InjectNoise gefunden wird circuit.
qiskit_addon_slc.bounds.forward.compute_forward_bounds()Das Argument atol ist ab qiskit-addon-slc 0.2.0 veraltet. Es wird frühestens 3 Monate nach dem Veröffentlichungsdatum entfernt. Verwenden Sie stattdessen atol_simplify und atol_eigenvalue.
Parameter
- circuit (QuantumCircuit) – die Zielschaltung.
- noise_model_paulis (dict[str, QubitSparsePauliList]) – die für jedes Rauschmodell zu berücksichtigenden Pauli-Fehlerterme.
- observable (Pauli |PauliList |SparseObservable |SparsePauliOp) – die Zielgröße, die am Ende der Schaltung gemessen werden soll.
- evolution_max_terms (int) – die maximale Anzahl von Operatorausdrücken, die während der Entwicklung im Blick behalten werden sollen.
- eigval_max_qubits (int) – die maximale Anzahl an Qubits eines Kommutators, für die weiterhin versucht wird, den Eigenwert zu berechnen. Wird dieser Wert überschritten, wird die Schranke über eine einfachere und lockerere Dreiecksungleichung approximiert.
- atol (float) –** VERALTET –** Verwenden Sie stattdessen
atol_eigenvalueundatol_simplify! - atol_simplify (float) – die absolute Toleranz, die für die Kürzung von Termen aus dem Kommutator verwendet wird. Eine Lockerung dieser Toleranz führt zu einer stärkeren Trunkierung der Terme des Kommutators, wodurch die Berechnung seiner Eigenwerte zwar weniger Rechenaufwand erfordert, aber weniger genau ausfällt.
- atol_eigenvalue (float) – die absolute Toleranz, die zur Erkennung der Konvergenz des Eigenwerts des Kommutators verwendet wird. Eine Lockerung dieser Toleranz führt zu einem weniger genauen Eigenwert, wie er vom iterativen Davidson-Eigenwertlöser berechnet wird.
- kwargs – Alle weiteren Schlüsselwortargumente werden an weitergeleitet
compute_bounds().
Rückgabe
Die Kommutatorgrenze bei ungleicher Zeit.
Erhöhungen
NotImplementedError – wenn der Ausdruck mehr als einen Pauli-Term enthält observable . Sollte dieses Problem auftreten, müssen Sie diese Funktion für jedes Pauli-Ziel separat aufrufen.
Rückgabetyp
dict [ str, PauliLindbladMap ]
tighten_with_speed_limit
tighten_with_speed_limit(bounds, circuit, noise_model_paulis, /, observable)
Schränken Sie die angegebenen Grenzen durch Begrenzungen der Informationsausbreitungsgeschwindigkeit ein.
Inspiriert von den Ideen hinter den Lieb-Robinson-Grenzen nutzt diese Funktion die Grenzen der Informationsausbreitungsgeschwindigkeit, um zuvor berechnete, vorwärtsentwickelte Kommutatorgrenzen bei ungleicher Zeit zu verschärfen (siehe auch compute_forward_bounds()).
Parameter
- bounds (dict[str, PauliLindbladMap]) – die zuvor berechneten, durch Vorwärtsentwicklung ermittelten Kommutatorgrenzen bei ungleicher Zeitdauer.
- circuit (QuantumCircuit) – die Zielschaltung.
- noise_model_paulis (dict[str, QubitSparsePauliList]) – die für jedes Rauschmodell zu berücksichtigenden Pauli-Fehlerterme.
- observable (Pauli |PauliList |SparseObservable |SparsePauliOp) – die Zielgröße, die am Ende der Schaltung gemessen werden soll.
Rückgabe
Eine verschärfte Fassung der Kommutatorgrenzen für ungleiche Zeiten.
Erhöhungen
- NotImplementedError – wenn der Ausdruck mehr als einen Pauli-Term enthält
observable. Sollte dieses Problem auftreten, müssen Sie diese Funktion für jedes Pauli-Ziel separat aufrufen. - ValueError – wenn ein Gatter auf mehr als zwei Qubits wirkt.
Rückgabetyp
dict [ str, PauliLindbladMap ]
compute_backward_bounds
compute_backward_bounds(circuit, noise_model_paulis, /, *, evolution_max_terms=1000000, **kwargs)
Berechne die rückwärtsentwickelten Kommutatorgrenzen bei ungleicher Zeit.
Berechnen Sie ausgehend vom Anfang der Schaltung die rückwärtsentwickelten Ungleichzeit-Kommutatorgrenzen für alle Pauli-Fehlerterme jeder verrauschten Schicht in der Zielschaltung.
Das heißt, man berechnet (unter Verwendung der Schatten-1-Norm, auch bekannt als Kernnorm) für alle Fehlerterme, , wobei als der Zustand angenommen wird, in dem alle Werte Null sind, , auf allen aktiven Qubits in circuit.
Die Fehlerterme, , werden durch … bestimmt noise_model_paulis. Dieses Wörterbuch ordnet Identifikatoren von Rauschmodellen (samplomatic.InjectNoise.ref) einer Liste von Pauli-Fehlertermen zu. Die entsprechenden Begriffe werden immer dann verwendet, wenn während der Iteration über ein BoxOp mit einer passenden Annotation InjectNoise gefunden wird circuit.
Vor der Berechnung der Grenzen entfernt diese Funktion alle Operationen Measure aus circuit. Dies ist erforderlich, da der Schaltkreis invertiert wird, bevor er in umgekehrter Reihenfolge verarbeitet wird, wodurch die Rückwärtsentwicklung (im invertierten Schaltkreis) wie eine Vorwärtsentwicklung behandelt werden kann.
Parameter
- circuit (QuantumCircuit) – die Zielschaltung.
- noise_model_paulis (dict[str, QubitSparsePauliList]) – die für jedes Rauschmodell zu berücksichtigenden Pauli-Fehlerterme.
- evolution_max_terms (int) – die maximale Anzahl von Operatorausdrücken, die während der Entwicklung im Blick behalten werden sollen. (Wenn der Operator diese Größe überschreitet, werden die kleinsten Terme abgeschnitten).
- kwargs – Alle weiteren Schlüsselwortargumente werden an weitergeleitet
compute_bounds().
Rückgabe
Die rückwärtsentwickelten Kommutatorgrenzen für ungleiche Zeiten.
Rückgabetyp
dict [ str, PauliLindbladMap ]
merge_bounds
merge_bounds(circuit, forward_bounds, backward_bounds, /, noise_rates=None, *, is_clifford_circuit=False)
Vordere und hintere Grenzen zusammenführen.
Die Ebene, auf der der Wechsel von der Verwendung von Rückwärtsgrenzen zur Verwendung von Vorwärtsgrenzen stattfindet, ist für alle Qubits gleich. Er wird unter Berücksichtigung der bereitgestellten Trainingsdaten ermittelt noise_rates. Werden diese nicht angegeben, werden einheitliche Lärmpegel angenommen. Auch wenn dies eine unrealistische Annahme ist, kann es dennoch sinnvoll sein, sich die zusammengeführten Begrenzungsbereiche vorab anzusehen.
Parameter
- circuit (QuantumCircuit) – die Zielschaltung.
- forward_bounds (dict[str, PauliLindbladMap] | None) – die vorderen Grenzen (siehe auch
compute_forward_bounds()). - backward_bounds (dict[str, PauliLindbladMap] | None) – die hinteren Schranken (siehe auch
compute_backward_bounds()). - noise_rates (dict[str, PauliLindbladMap | None] | None) – die auf dem Ziel-Backend ermittelten Rauschwerte.
- is_clifford_circuit (bool) – ob die Zielschaltung vollständig Clifford-konform ist.
Rückgabe
Die zusammengeführten Grenzen.
Erhöhungen
- ValueError – wenn beide angegebenen Grenzen gleich sind
None. - KeyError – wenn die einen Schlüssel
InjectNoise.modifier_refenthaltenbounds, der im Ziel nicht vorkommt odercircuitdessen nicht gefundenInjectNoise.refwird. - ValueError – wenn die Pauli-Terme des Rauschmodells, deren Grenzen für ein gegebenes berechnet werden, zwischen und
forward_boundsInjectNoise.modifier_refnicht übereinstimmenbackward_bounds. - NotImplementedError – wenn ist
is_clifford_circuit``True.
Rückgabetyp
dict [ str, PauliLindbladMap ] | None
compute_local_scales
compute_local_scales(circuit, bounds, /, noise_rates, *, sampling_cost_budget=inf, bias_tolerance=0.0)
Berechnet das Argument local_scales für ein Samplex.
Mit diesem Argument local_scales wird festgelegt, welche einzelnen Fehlerterme gemildert werden sollen.
Entweder oder sampling_cost_budget muss bias_tolerance angegeben werden. Ersteres legt eine Obergrenze für die Stichprobenkosten fest, während Letzteres eine Obergrenze für die noch zulässige Verzerrung festlegt.
Wenn die Reihenfolge der Pauli-Terme in und bounds noise_rates nicht übereinstimmt, übernimmt die Ausgabe dieser Funktion die in festgelegte Reihenfolge, noise_rates um sicherzustellen, dass die Skalen mit den Raten kompatibel sind, die ebenfalls an die übermittelt werden QuantumProgram.
Parameter
- circuit (QuantumCircuit) – die Zielschaltung.
- bounds (dict[str, PauliLindbladMap]) – die schraffierten Grenzen des Lichtkegels.
- noise_rates (dict[str, PauliLindbladMap | None]) – die Raten des trainierten Rauschmodells.
- sampling_cost_budget (float) – die maximal zulässigen Kosten für die Stichprobenahme.
- bias_tolerance (float) – die maximal zulässige Abweichung.
Rückgabe
- das Wörterbuch
local_scales, das als direkte Eingabe für das … bereitgestellt werden sollsamplomatic.samplex.Samplex.inputs(). - der für die Durchführung der Stichprobenziehung erforderliche
local_scales. - die verbleibende Verzerrung der mit diesen Schranken berechneten Erwartungswerte.
Rückgabetyp
Ein Tupel der Länge 3, dessen Elemente wie folgt lauten:
Erhöhungen
- ValueError – wenn für beide Nicht-Standardwerte angegeben werden, dann das
sampling_cost_budgetund dasbias_tolerance. - KeyError – wenn für eine der in vorkommenden Rauschmodell-Kennungen (
InjectNoise.ref) kein Eintrag vorhandennoise_ratesistcircuit.
Dieses Modul enthält außerdem einige Funktionen auf niedrigerer Ebene, auf die Endbenutzer in der Regel nicht direkt zugreifen, die sich jedoch für die Weiterentwicklung auf Basis dieses Pakets als nützlich erweisen können.
compute_bounds
compute_bounds(circuit, noise_model_paulis, light_cone, norm_fn, *, backwards, max_num_boxes=None, num_processes=1, timeout=None)
Berechnet die Grenzen für den Kommutator bei ungleicher Zeit.
Bei einer Schaltung mit BoxOp Befehlen mit InjectNoise Annotationen und einer Zuordnung von Rauschmodell-Identifikatoren (InjectNoise.ref) zu einer Liste von Pauli-Fehlertermen (noise_model_paulis) berechnet diese Funktion die Grenzen für den ungleichen Zeitkommutator (die Details hierfür werden durch implementiert norm_fn). Dabei werden nur Gatter berücksichtigt, die innerhalb des Lichtkegels der Observable liegen (initialisiert durch light_cone). Diese berechneten Grenzen bilden die Grundlage für den schattierten Lichtkegel.
Da diese Funktion eine lang andauernde Berechnung durchführt, behandelt sie KeyboardInterrupt Ausnahmen auf elegante Weise, sodass der Benutzer die Berechnung zu einem beliebigen Zeitpunkt abbrechen und dennoch die bis zu diesem Zeitpunkt berechneten Ergebnisse erhalten kann.
Parameter
- circuit (QuantumCircuit) – die Zielschaltung.
- noise_model_paulis (dict[str, QubitSparsePauliList]) – die für jedes Rauschmodell zu berücksichtigenden Pauli-Fehlerterme.
- light_cone (LightCone) – der initialisierte und zustandsbehaftete Tracker
LightCone. - norm_fn (Callable[[Pauli, RotationGates], CommutatorBounds]) – die Funktion, die den spezifischen Kommutator für ungleiche Zeiten implementiert.
- backwards (bool) – ob die Iteration in
circuitumgekehrter Reihenfolge erfolgen soll. - max_num_boxes (int | None) – die maximale Anzahl von Feldern, für die die Grenzen berechnet werden sollen. Als Grenzen für etwaige zusätzliche Felder wird der triviale obere Grenzwert verwendet.
- num_processes (int) – die Anzahl der zu verwendenden parallelen Prozesse.
- timeout (float | None) – ein optionaler Zeitlimit (in Sekunden), nach dessen Ablauf alle verbleibenden Schichten mit trivialen numerischen Grenzen von
2.0. gefüllt werden. Beachten Sie, dass es sich hierbei nicht um eine strikte Zeitüberschreitung handelt und die Ebene, die zum Zeitpunkt des Erreichens dieser Zeitüberschreitung gerade verarbeitet wird, normal abgeschlossen wird.
Rückgabe
Die berechneten Schätzgrenzen für den Kommutator bei ungleicher Zeit.
Rückgabetyp
dict [ str, PauliLindbladMap ]
CommutatorBounds
class CommutatorBounds(commutator_bound, truncation_bias, fallback_to_tri_ineq)
Basen: NamedTuple
Eine Datenklasse zum Speichern von Metadaten über die berechneten Kommutatorgrenzen.
Neue Instanz von „ CommutatorBounds(commutator_bound, truncation_bias, fallback_to_tri_ineq)“ erstellen
Parameter
commutator_bound
Typ: float
Die Schranke für den Kommutator.
Diese Grenze wird je nach Anwendung auf unterschiedliche Weise berechnet. Beispielsweise wird bei Rückwärtsgrenzen die Kernnorm (Schatten-1-Norm) berechnet, während Vorwärtsgrenzen in der Regel unter Verwendung der Spektralnorm (Schatten-Unendlich-Norm) berechnet werden.
Wenn die Normberechnung festgelegte Schwierigkeitsgrenzen überschreitet, wird sie zugunsten einer einfacheren Schätzung auf Basis der Dreiecksungleichung aufgegeben, was dadurch angezeigt wird, dass auf gesetzt wird fallback_to_tri_ineqTrue .
Dieser Wert kann auftreten, wenn NaN die Berechnung der Kommutatorgrenze abgebrochen wurde. Dies kann passieren, wenn der Wert bereits truncation_bias die theoretische Grenze von überschreitet 2.0.
fallback_to_tri_ineq
Typ: bool
Ob „grobe“ Berechnung unter Verwendung einer einfachen Dreiecksungleichung commutator_bound erfolgte.
min
min()
Gibt den durch diese Metadaten kodierten Minimalwert zurück.
Die minimale Schranke ist der kleinere Wert aus der Summe von und commutator_bound bzw truncation_bias . der theoretischen Schranke von 2.0.
Der Wert wird 2.0 verwendet, da eine auf dem Wertebereich begrenzte Pauli-Beobachtungsgröße [-1, +1] nicht um mehr als verzerrt werden kann 2.0.
Rückgabetyp
truncation_bias
Typ: float
Die durch die Abschneidung des Kommutators bedingte Verzerrung des Grenzwerts.