Qiskit 0.34 Versionshinweise
0.34.2
Terra- 0.19.2
Vorspiel
Qiskit Terra 0.19.2 ist in erster Linie ein Bugfix-Release, enthält aber jetzt auch Räder für Python 3.10 auf allen wichtigen Plattformen.
Neue Funktionen
- Unterstützung für den Betrieb mit Python 3.10 hinzugefügt. Dazu gehört die Veröffentlichung vorkompilierter Binärdateien auf PyPI für Python 3.10 auf unterstützten Plattformen.
Anmerkungen zu Upgrades
- Ab Python 3.10 wird Qiskit Terra weniger Unterstützung für 32-Bit-Plattformen bieten. Diese sind Linux i686 und 32-bit Windows. Diese Plattformen mit Python 3.10 sind jetzt auf Stufe 3 statt Stufe 2 (gemäß der in https://qiskit.org/documentation/getting_started.html #platform-support definierten Stufen). Dies liegt daran, dass die Upstream-Abhängigkeiten Numpy und Scipy die Unterstützung für sie eingestellt haben. Qiskit wird weiterhin vorkompilierte Binärdateien für diese Plattformen veröffentlichen, aber wir sind nicht in der Lage, die Pakete vor der Veröffentlichung zu testen, und Sie benötigen einen C/C++-Compiler, damit
pipihre Abhängigkeiten aus dem Quellcode erstellen kann. Wenn Sie eine dieser Plattformen verwenden, empfehlen wir Ihnen, Python 3.7, 3.8 oder 3.9 zu verwenden.
Fehlerkorrekturen
-
Ein Fehler wurde behoben, bei dem der
CVaRMeasurementversucht hat, einePauliSumOpin eine dichte Matrix umzuwandeln, um zu prüfen, ob sie diagonal ist. Für große Operatoren (> 16 Qubits) war diese Berechnung extrem teuer und führte zu einem Fehler, wenn sie nicht explizit mitqiskit.utils.algorithm_globals.massive = Trueaktiviert wurde. Die Prüfung ist nun auch bei einer großen Anzahl von Qubits effizient. -
DAGCircuit.draw()und die zugehörige Funktiondag_drawer()zeigt nun eine nützlichere Fehlermeldung an, wenn der angegebene Dateiname ungültig ist. -
QuantumCircuit.add_register()nicht mehr zu doppeltenAncillaQubitreferenzen in einer Schaltung, wenn einAncillaRegisterdessen Bits bereits vorhanden sind. -
Feste Umrechnung von
QuantumCircuits mit klassischen Bedingungen auf einzelne, registerloseClbits inInstructions bei Verwendung dercircuit_to_instruction()funktion oder derQuantumCircuit.to_instruction()methode. Zum Beispiel funktioniert jetzt Folgendes:from qiskit.circuit import QuantumCircuit, Qubit, Clbit qc = QuantumCircuit([Qubit(), Clbit()]) qc.h(0).c_if(qc.clbits[0], 0) qc.to_instruction() -
Register weisen nun doppelte Bits korrekt zurück. Behoben #7446.
-
Das
FakeOpenPulse2Qmock backend hat jetzt T2 Zeiten und Auslesefehler für seine qubits gespeichert. Dies sind willkürliche Werte, die in etwa mit realen Backends zum Zeitpunkt der Erstellung übereinstimmen. -
Festlegen der Qubit-Reihenfolge von 2-Qubit-Entwicklungen in der
PauliEvolutionGatewenn sie mit einer Produktformelsynthese verwendet werden. Zum Beispiel war früher die Entwicklung vonIIZ + IZI + IZZfrom qiskit.circuit.library import PauliEvolutionGate from qiskit.opflow import I, Z operator = (I ^ I ^ Z) + (I ^ Z ^ I) + (I ^ Z ^ Z) print(PauliEvolutionGate(operator).definition.decompose())Erzeugt
┌───────┐ q_0: ┤ Rz(2) ├──────── ├───────┤ q_1: ┤ Rz(2) ├─■────── └───────┘ │ZZ(2) q_2: ──────────■──────wohingegen es jetzt korrekt zu folgenden Ergebnissen führt
┌───────┐ q_0: ┤ Rz(2) ├─■────── ├───────┤ │ZZ(2) q_1: ┤ Rz(2) ├─■────── └───────┘ q_2: ───────────────── -
In den Schaltkreisschubladen
latexundmplwurde ein Problem behoben, bei dem Registernamen mit mehreren Unterstrichen im Namen nicht korrekt angezeigt wurden. -
Negative Zahlen in Array-Ausgaben aus den Schubladen erscheinen nun als Dezimalzahlen anstelle von Brüchen mit großen Zählern und Nennern. Wie positive Zahlen sind auch sie Brüche, wenn das Verhältnis zwischen kleinen Zahlen liegt.
-
Ein Problem wurde behoben, bei dem die
Target.get_non_global_operation_names()methode bei der Ausführung auf einem Ziel fälschlicherweise eine Ausnahme bei Zielen mit idealen globalen Operationen auslöste. Wurde diese Methode zuvor auf einem Ziel aufgerufen, das ideal global definierte Operationen enthielt, bei denen die Anweisungseigenschaften aufNonegesetzt waren, löste diese Methode eine Ausnahme aus, anstatt die Anweisung als global zu behandeln. -
Es wurde ein Problem mit der Funktion
transpile()funktion, die fehlschlagen konnte, wenn sie einTargetobjekt direkt mit demtargetkwarg übergeben wurde. -
Es wurde ein Problem mit der Funktion
transpile()funktion, die fehlschlagen konnte, wenn dasbackendArgument einBackendV2oder einTargetüber dentargetkwarg, der ideale, global definierte Operationen enthielt. -
Es wurde ein Problem behoben, bei dem das Plotten von Bloch-Kugeln in Jupyter oder beim Versuch, Figuren mit Matplotlib 3.3 oder 3.4 (aber nicht 3.5 ) auf die richtige Größe zuzuschneiden, eine
AttributeErrorauslösen konnte. Zum Beispiel würde der folgende Code vorher mit einer Meldung abstürzen:AttributeError: 'Arrow3D' object has no attribute '_path2d'aber wird nun mit allen aktuell unterstützten Versionen von Matplotlib erfolgreich sein:
from qiskit.visualization import plot_bloch_vector plot_bloch_vector([0, 1, 0]).savefig("tmp.png", bbox_inches='tight') -
Ein Fehler wurde behoben in
PauliSumOp.permute()behoben, bei dem das Objekt, auf dem die Methode aufgerufen wird, an Ort und Stelle permutiert wurde, anstatt eine permutierte Kopie zurückzugeben. Dieser Fehler trat nur bei Permutationen auf, bei denen die Anzahl der Qubits im Operator unverändert blieb. -
Die Methode
PauliEvolutionGate.inverse(), die bisher die Inverse durch Invertierung der Entwicklungszeit berechnete, wurde korrigiert. Dies war nur dann die richtige Umkehrung, wenn der Operator exakt entwickelt wurde. Dies führte insbesondere dazu, dass die Umkehrung der auf der Trotterisierung basierenden Zeitentwicklungen nicht korrekt war. -
Die Methode
QuantumInstance.execute()methode verändert ihre Eingabe nicht mehr, wenn sie eine Liste von Schaltkreisen erhält. -
Die QPY-Serialisierung von benutzerdefinierten Anweisungen, die eine explizite no-op-Definition hatten, wurde korrigiert. Zuvor wurden diese geschrieben und anschließend gelesen, als wären sie undurchsichtige Gatter (ohne bestimmte Definition). Sie werden nun eine leere Definition korrekt abschließen. Zum Beispiel wird das Folgende nun korrekt sein:
import io from qiskit.circuit import Instruction, QuantumCircuit, qpy_serialization # This instruction is explicitly defined as a one-qubit gate with no # operations. empty = QuantumCircuit(1, name="empty").to_instruction() # This instruction will perform some operations that are only known # by the hardware backend. opaque = Instruction("opaque", 1, 0, []) circuit = QuantumCircuit(2) circuit.append(empty, [0], []) circuit.append(opaque, [1], []) qpy_file = io.BytesIO() qpy_serialization.dump(circuit, qpy_file) qpy_file.seek(0) new_circuit = qpy_serialization.load(qpy_file)[0] # Previously both instructions in `new_circuit` would now be opaque, but # there is now a correct distinction. circuit == new_circuit -
Hinzufügen eines fehlenden
BackendV2.providerattribut zu Implementierungen derBackendV2abstrakten Klasse. Zuvor,BackendV2backends mit einem Provider initialisiert werden, der aber für die Benutzer nicht zugänglich war. -
Die Unterstützung für die
QuantumInstanceklasse bei der Ausführung mit einemBackendV2backend. Zuvor war der Versuch, eineQuantumInstancemit einerBackendV2zu verwenden, hätte zu einem Fehler geführt. -
Es wurde ein Fehler in
VQEbehoben, bei dem die Parameter des Ansatzes immer noch explizit nach ihrem Namen ASCII-sortiert waren, wenn der Ansatz in der Größe verändert wurde. Dies führte dazu, dass die Reihenfolge der optimierten Werte im Attributoptimal_pointdes Ergebnisobjekts nicht übereinstimmte.Dieser Fehler trat insbesondere dann auf, wenn der Benutzer keinen Ansatz eingestellt hatte und das VQE eine Voreinstellung mit 11 oder mehr freien Parametern wählte.
-
Stoppte den Parser in
QuantumCircuit.from_qasm_str()undfrom_qasm_file()OpenQASM Programme zu akzeptieren, die sich als aus einer anderen Sprachversion als 2.0 stammend identifizieren. Dieser Parser ist nur für OpenQASM 2.0; Unterstützung für importierte Schaltungen von OpenQASM 3.0 wird in einer kommenden Version hinzugefügt werden. -
Korrigierte QPY-Serialisierung von
QuantumCircuitobjekten, die Kontrollflussanweisungen enthielten. Wenn Sie bisher versucht haben, eine Schaltung zu serialisieren, dieIfElseOp,WhileLoopOp, oderForLoopOpzu serialisieren, schlug die Serialisierung fehl. Behoben #7583. -
Korrigierte QPY-Serialisierung von
QuantumCircuitdie Teilmengen von Bits aus einerQuantumRegisteroderClassicalRegister. Wenn Sie früher versucht haben, eine Schaltung wie diese zu serialisieren, wurden diese Bits fälschlicherweise als eigenständig behandeltQubitoderClbitohne dass ein Register gesetzt ist. Wenn Sie zum Beispiel versuchen, eine Schaltung wie die folgende zu serialisieren:import io from qiskit import QuantumCircuit, QuantumRegister from qiskit.circuit.qpy_serialization import load, dump qr = QuantumRegister(2) qc = QuantumCircuit([qr[0]]) qc.x(0) with open('file.qpy', 'wb') as fd: dump(qc, fd)wenn diese Schaltung nun geladen wird, werden die Register korrekt und vollständig gefüllt, auch wenn die Schaltung nur eine Teilmenge der Bits aus dem Register enthält.
-
QFTgibt nun eine Warnung aus, wenn es mit Einstellungen instanziiert oder gebaut wird, die zu einem Verlust der Genauigkeit führen, anstatt eineOverflowErrorauszulösen. Dies kann passieren, wenn die Anzahl der Qubits sehr groß ist (etwas über 1000), ohne dass der Annäherungsgrad ähnlich groß ist. Die Schaltung wird nun erfolgreich aufgebaut, aber einige Winkel können aufgrund der Beschränkungen der doppelten Genauigkeit von Gleitkommazahlen nicht von Null zu unterscheiden sein.
Aer- 0.10.3
Vorspiel
Qiskit Aer 0.10.3 ist hauptsächlich ein Bugfix-Release, das verschiedene Fehler behebt, die seit der Veröffentlichung von 0.10.2 entdeckt wurden. Mit dieser Version wird jedoch auch die Unterstützung für die Ausführung mit Python 3.10 einschließlich vorkompilierter binärer Räder auf allen wichtigen Plattformen eingeführt. Diese Version enthält auch vorkompilierte Binär-Räder für arm64 auf macOS.
Neue Funktionen
-
Unterstützung für den Betrieb mit Python 3.10 hinzugefügt. Dazu gehört die Veröffentlichung vorkompilierter Binärdateien auf PyPI für Python 3.10 auf unterstützten Plattformen.
-
Unterstützung für M1 macOS Systeme hinzugefügt. Vorkompilierte Binärdateien für unterstützte Python Versionen >= 3.8 auf arm64 macOS werden jetzt auf PyPI für diese und zukünftige Versionen veröffentlicht.
Anmerkungen zu Upgrades
- Qiskit Aer unterstützt nicht mehr vollständig 32-Bit-Plattformen auf Python >= 3.10. Diese sind Linux i686 und 32-bit Windows. Diese Plattformen mit Python 3.10 sind jetzt auf Stufe 3 statt Stufe 2 (gemäß der in https://qiskit.org/documentation/getting_started.html #platform-support definierten Stufen). Dies liegt daran, dass die Upstream-Abhängigkeiten Numpy und Scipy die Unterstützung für sie eingestellt haben. Qiskit wird weiterhin vorkompilierte Binärdateien für diese Plattformen veröffentlichen, aber wir sind nicht in der Lage, die Pakete vor der Veröffentlichung zu testen, und Sie benötigen einen C/C++-Compiler, damit
pipihre Abhängigkeiten aus dem Quellcode erstellen kann. Wenn Sie eine dieser Plattformen verwenden, empfehlen wir Ihnen, Python 3.7, 3.8 oder 3.9 zu verwenden.
Fehlerkorrekturen
-
Behebt einen Fehler in
RelaxationNoisePass, bei dem die Dauer von Anweisungen immer in dt-Zeiteinheiten angenommen wurde, unabhängig von der tatsächlichen Einheit der Konstruktion. Die Einheitenumrechnung wird nun für alle Einheiten der Befehlsdauer korrekt gehandhabt.Siehe #1453 für weitere Informationen.
-
Behebt ein Problem mit
LocalNoisePassfür Rauschfunktionen, die einQuantumCircuitfür die Rauschfunktion zurückgeben. Diese wurden der DAG als undurchsichtige Schaltanweisung angehängt, die zur Simulation abgerollt werden muss. Diese Korrektur setzt sie so zusammen, dass die Schaltanweisungen der neuen DAG hinzugefügt werden und ohne zusätzliches Abrollen simuliert werden können, wenn alle Schaltanweisungen vom Simulator unterstützt werden.Siehe #1447 für weitere Informationen.
-
Multi-threaded Transpilationen zur Erzeugung von diagonalen Gattern funktionieren nun korrekt, wenn die Anzahl der Gatter einer Schaltung
fusion_parallelization_thresholdüberschreitet. Zuvor hatten verschiedene Threads gelegentlich dasselbe Element in mehreren Blöcken verschmolzen, was zu falschen Ergebnissen führte. -
Behebt einen Fehler beim Abschneiden von Schaltkreisen in parametrisierten Qobjs. Zuvor konnten Parameter von parametrisierten QObj falsch aufgelöst werden, wenn unbenutzte Qubits ihrer Schaltkreise abgeschnitten wurden, da die Indizes der Parameter nicht aktualisiert wurden, nachdem die Anweisungen für ungemessene Qubits entfernt worden waren.
Siehe #1427 für weitere Informationen.
Ignis- 0.7.0
Keine Änderung
IBM Q Anbieter 0.18.3
Keine Änderung
0.34.1
Terra- 0.19.1
Keine Änderung
Aer- 0.10.2
Fehlerkorrekturen
-
Die Simulation von
for-Schleifen, bei denen der Schleifenparameter nicht im Körper der Schleife verwendet wurde, wurde korrigiert. Dieser Code würde zum Beispiel früher fehlschlagen, aber jetzt wird er erfolgreich sein:import qiskit from qiskit.providers.aer import AerSimulator qc = qiskit.QuantumCircuit(2) with qc.for_loop(range(4)) as i: qc.h(0) qc.cx(0, 1) AerSimulator(method="statevector").run(qc) -
Behebt einen Fehler in
QuantumError.to_dict(), bei dem N-Qubit-Schaltkreisanweisungen, bei denen die zusammengesetzte Anweisung immer auf die Qubits[0, ..., N-1]und nicht auf die Anweisungsqubits angewendet wurde. Dieser Fehler betraf auch Geräte- und Fake-Backend-Geräuschmodelle.Siehe Ausgabe 1415 für weitere Einzelheiten.
Ignis- 0.7.0
Keine Änderung
IBM Q Anbieter 0.18.3
Keine Änderung
0.34.0
Qiskit 0.34.0 enthält eine Zwischenversion von Qiskit Aer: Version 0.10.1, die Leistungsabweichungen in Version 0.10.0 behebt, die unmittelbar nach der Veröffentlichung entdeckt wurden. Im Folgenden finden Sie die Versionshinweise für Qiskit Aer 0.10.0 und 0.10.1.
Terra- 0.19.1
Keine Änderung
Aer- 0.10.1
Vorspiel
Der Patch für Qiskit Aer 0.10.1 behebt Leistungsmängel, die in Qiskit Aer 0.10.0 eingeführt wurden.
Fehlerkorrekturen
- Behebung von Leistungseinbußen bei verrauschten Simulationen aufgrund eines starken Anstiegs des Serialisierungs-Overheads beim Laden von Rauschmodellen von Python nach C++, der durch unbeabsichtigte verschachtelte Python Multiprocessing-Aufrufe verursacht wurde. Siehe Ausgabe 1407 für weitere Informationen.
Aer- 0.10.0
Vorspiel
Die Version von Qiskit Aer 0.10 enthält mehrere Verbesserungen der Leistung und des Geräuschmodells. Einige Highlights sind:
- Verbesserte Leistung für parallel durchgeführte GPU- und HPC-Simulationen
- Unterstützung für die Simulation von Schaltungen, die QASM 3.0 Kontrollflussanweisungen enthalten
- Unterstützung für Entspannungsrauschen auf geplanten Schaltungen in Backend-Rauschmodellen
- Unterstützung von benutzerdefinierten Transpiler-Passes zur Definition von benutzerdefinierten Gatterfehlern und Rauschmodellen und deren Einfügen in Schaltungen.
Neue Funktionen
-
Unterstützung für die in Qiskit-Terra 0.19.0 eingeführten QASM 3.0 Kontrollflussanweisungen wurde hinzugefügt. Unterstützte Anweisungen sind
ForLoopOp,WhileLoopOp,ContinueLoopOp,BreakLoopOp,IfElseOp. -
Für GPU-Simulationen wurde eine Optimierung für Batch-Shot-Simulationen hinzugefügt. Diese optionale Funktion nutzt den verfügbaren Speicher auf einem oder mehreren Grafikprozessoren, um mehrere Simulationsschüsse parallel auszuführen und so die Leistung bei Multischuss-Simulationen mit Rauschmodellen und/oder Zwischenmessungen erheblich zu verbessern.
Diese Option ist standardmäßig aktiviert, wenn
device="GPU"und eine Simulationmethodvon entweder"statevector"oder"density_matrix"mit demAerSimulatorverwendet wird. Sie kann durch die Einstellungbatched_shots_gpu=Falsein den Simulatoroptionen deaktiviert werden.Diese Optimierung ist am vorteilhaftesten für kleine bis mittlere Anzahlen von Qubits, wenn genügend GPU-Speicher vorhanden ist, um mehrere Simulationen parallel durchzuführen. Die maximale Anzahl der aktiven Schaltkreis-Qubits für die Aktivierung dieser Optimierung kann mit der Option
batch_shots_gpu_max_qubitssimulator konfiguriert werden. Der Standardwert für diese Option ist 16. -
Die neue Option
max_shot_sizewurde zu einem benutzerdefinierten Executor hinzugefügt, um mehrere Aufnahmen einer verrauschten Schaltung parallel auszuführen.Zum Beispiel die Konfiguration von
max_shot_sizemit einem benutzerdefinierten Executor:backend = AerSimulator( max_shot_size=1, max_job_size=1, executor=custom_executor) job = backend.run(circuits)teilt die Aufnahmen eines verrauschten Schaltkreises in mehrere Schaltkreise auf. Nachdem alle einzelnen Schüsse ausgeführt wurden, werden die Auftragsergebnisse automatisch zu einem einzigen
Resultobjekt zusammengefasst, das vonjob.result()zurückgegeben wird. -
Hinzufügen der
mps_swap_directionSimulator-Option, die es dem Benutzer ermöglicht, die Richtung der internen Vertauschungen zu bestimmen, wenn sie für ein 2-Qubit-Gatter eingefügt werden. Gültige Werte sind"mps_swap_right"und"mps_swap_left". Die Richtung der Vertauschung kann je nach Schaltung die Leistung beeinträchtigen. -
Implementierung einer neuen Messprobenoptimierung für die
"matrix_product_state"Simulationsmethode derAerSimulator. Derzeit wird dieser Algorithmus nur verwendet, wenn alle Qubits gemessen werden und wenn die Simulatoroptionmps_sample_measure_algorithmauf"mps_probabilities"gesetzt ist. -
Die Leistung der Messanweisung für die
"matrix_product_state"Simulationsmethode derAerSimulatorwurde verbessert. -
Hinzufügen einer
SaveCliffordAnweisung zum Speichern des Status der Stabilisator-Simulationsmethode alsCliffordobjekt.Beachten Sie, dass diese Anweisung im Wesentlichen der Anweisung
SaveStabilizerentspricht, die jedoch den gespeicherten Zustand alsStabilizerStateobjekt statt einesCliffordobjekt zurück. -
Zwei Transpiler-Durchläufe zum Einfügen von anweisungsabhängigen Quantenfehlern in Schaltungen hinzugefügt:
qiskit.providers.aer.noise.LocalNoisePassqiskit.providers.aer.noise.RelaxationNoisePass
Der
LocalNoisePassDurchlauf kann verwendet werden, um benutzerdefinierte parametrisierte Rauschmodelle zu implementieren, indem eine rauschgenerierende Funktion der Formdef fn( inst: Instruction, qubits: Optional[List[int]] = None, ) -> InstructionLikedie eine Rauschanweisung (z. B. eine
QuantumErroroder eine andere Anweisung) zurückgibt, die von beliebigen Eigenschaften oder Parametern der Anweisung und der Qubit-Argumente abhängen kann.Diese Funktion kann auf alle Anweisungen in einer Schaltung oder auf eine bestimmte Teilmenge angewendet werden (weitere Einzelheiten finden Sie in der Dokumentation
LocalNoisePass)RelaxationNoisePassist ein Spezialfall vonLocalNoisePassund verwendet eine vordefinierte Rauschfunktion, die ein Tensorprodukt vonthermal_relaxation_error()auf jedem Qubit in einer Anweisung zurückgibt, abhängig von der Dauer der Anweisung und den gelieferten Parametern der Relaxationszeitkonstante des Durchgangs. -
Das von
NoiseModel.from_backend()undAerSimulator.from_backend()implementierte grundlegende Rauschmodell wurde erweitert, um das Hinzufügen von zeitabhängigen Relaxationsfehlern an Schaltungsverzögerungsgattern unter Verwendung vonRelaxationNoisePasszu ermöglichen.Um dieses Rauschen bei verrauschten Simulationen zu aktivieren, müssen Sie Ihre Schaltung zunächst wie folgt planen, um geplante Verzögerungsanweisungen einzufügen:
backend = AerSimulator.from_backend(ibmq_backend) scheduled_circuit = qiskit.transpile( circuit, backend=backend, scheduling_method='asap') result = backend.run(scheduled_circuit).result()Wenn die Schaltung ohne Zeitplan umgesetzt wird (und auch keine Verzögerungsanweisungen enthält), werden bei der verrauschten Simulation die Auswirkungen von Verzögerungsrelaxationsfehlern nicht berücksichtigt. In diesem Fall ist die Simulation äquivalent zur vorherigen qiskit-aer 0.9 Simulation, bei der Relaxationsrauschen nur zu Gatteranweisungen auf der Grundlage ihrer Dauer hinzugefügt wird, wie sie aus den Backend-Eigenschaften ermittelt wurde.
-
Der Konstruktor von
QuantumErrorakzeptiert jetzt mehrere neue Arten von Eingaben alsnoise_opsArgument, zum Beispiel:import numpy as np from qiskit import QuantumCircuit from qiskit.circuit.library import IGate, XGate, Reset from qiskit.quantum_info import Kraus from qiskit.providers.aer.noise import QuantumError # Quantum channels kraus = Kraus([ np.array([[1, 0], [0, np.sqrt(1 - 0.9)]], dtype=complex), np.array([[0, 0], [0, np.sqrt(0.9)]], dtype=complex) ]) print(QuantumError(kraus)) # Construction from a QuantumCircuit qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) error = QuantumError(qc) # Construction from a tuple of (Instruction, List[int]), where the list of # integers represents the qubits. error = QuantumError((Reset(), [0])) # Construction from an iterable of objects in the same form as above, but # where each also has an associated probability. error = QuantumError([ ((IGate(), [0]), 0.9), ((XGate(), [0]), 0.1), ]) # A short-hand for the iterable form above, where the qubits are implicit, # and each instruction is over all qubits. error = QuantumError([(IGate(), 0.9), (XGate(), 0.1)])Beachten Sie, dass das ursprüngliche JSON-basierte Eingabeformat veraltet ist.
-
Es wurde eine Hilfsfunktion
qiskit.providers.aer.utils.transform_noise_model()hinzugefügt, um ein Rauschmodell zu erstellen, indem eine bereitgestellte Funktion auf alleQuantumErrors im Rauschmodell angewendet wird. -
Die beiden Funktionen
qiskit.providers.aer.utils.transpile_quantum_error()undqiskit.providers.aer.utils.transpile_noise_model()wurden hinzugefügt, um die inQuantumErrorenthaltenen Schaltkreise und alle Fehler in einemNoiseModelzu transpilieren. -
Es wurde die Möglichkeit hinzugefügt,
QuantumErrorObjekte direkt in eineQuantumCircuitohne Konvertierung in eineKrausanweisung.Schaltungen, die Quantenfehler enthalten, können nun auf den Simulatoren
AerSimulatorundQasmSimulatorausgeführt werden, alternativ oder zusätzlich zur Erstellung einesNoiseModelfür die Definition verrauschter Schaltungsanweisungen.Beispiel:
from qiskit import QuantumCircuit from qiskit.providers.aer import AerSimulator from qiskit.providers.aer.noise import pauli_error error_h = pauli_error([('I', 0.95), ('X', 0.05)]) error_cx = pauli_error([('II', 0.9), ('XX', 0.1)]) qc = QuantumCircuit(3) qc.h(0) qc.append(error_h, [0]) qc.cx(0, 1) qc.append(error_cx, [0, 1]) qc.cx(0, 2) qc.append(error_cx, [0, 2]) qc.measure_all() backend = AerSimulator(method='stabilizer') result = backend.run(qc).result() result.get_counts(0)Schaltungen, die Quantenfehler enthalten, können auch mit dem
quantum_infoquantenkanal undDensityMatrixklassen.
Anmerkungen zu Upgrades
-
Der Rückgabetyp mehrerer Speicheranweisungen wurde geändert, so dass die entsprechenden Qiskit Terra-Klassen anstelle von rohen NumPy Arrays oder Dictionaries verwendet werden. Die folgenden Typen haben sich geändert
save_statevector()kehrt nun alsStatevectorsave_density_matrix()kehrt nun alsDensityMatrixsave_stabilizer()kehrt nun alsStabilizerStatesave_unitary()kehrt nun alsOperatorsave_superop()kehrt nun alsSuperOpsave_probabilities_dict()kehrt nun alsProbDistribution
-
Der Standardwert von
standard_gateswurde inNonefür alle Funktionen inqiskit.providers.aer.noise.errors.standard_errorsgeändert, da diese Funktionen aktualisiert wurden, so dass sie standardmäßig Standard-Gates verwenden. -
Wenn ein nicht unterstütztes Argument an
approximate_quantum_error()übergeben wird, wird nun einNoiseErroranstelle einesRuntimeErrorausgelöst.
Hinweise zu veralteten Versionen
-
Die Verwendung von NumPy
ndarrayMethoden und Attributen auf den Rückgabetyp vonsave_statevector(),save_density_matrix(),save_unitary()undsave_superop()ist veraltet und wird in einer zukünftigen Version nicht mehr funktionieren. Diese Anweisungen geben nunqiskit.quantum_infoklassen für ihre Rückgabetypen zurück. Teilweise Rückwärtskompatibilität mit der Behandlung dieser Objekte als NumPy Arrays wird durch die Weiterleitung von Methoden an das interne Array während der Verwerfungsperiode implementiert. -
Die Übergabe eines
BackendPropertiesobjekts für dasbackend-Argument vonNoiseModel.from_backend()ist veraltet, da es mit zeitdauerabhängigen Verzögerungsgeräuschen inkompatibel ist, und wird in einer zukünftigen Version entfernt werden. Geben Sie stattdessen ein Qiskit TerraBackendV1objekt ein. -
Die Option
number_of_qubitsdesQuantumErrorKonstruktors wurde zugunsten einer automatischen Bestimmung der Dimension abgeschafft. -
Die Option
standard_gatesdesQuantumError-Konstruktors wurde zugunsten der Externalisierung solcher Basisänderungsfunktionen abgeschafft. In vielen Fällen können Sie mitapproximate_quantum_error()jeden Fehler in einen Fehler umwandeln, der nur mit bestimmten Gates definiert ist. -
Die Option
standard_gatesaller Funktionen inqiskit.providers.aer.noise.errors.standard_errorswurde zugunsten der standardmäßigen Rückgabe von Fehlern in Form einer Mischung von Standard-Gates abgeschafft. -
Alle Funktionen in
errorutilswurden veraltet, da es sich um Hilfsfunktionen handelt, die nur für die Implementierung von Funktionen inqiskit.providers.aer.noise.errors.standard_errorsgedacht sind und als private Funktionen bereitgestellt werden sollten. -
Die Option
standard_gatesvonNoiseModel.from_backend()wurde zugunsten der Externalisierung solcher Basisänderungsfunktionen abgeschafft. -
Veraltet
NoiseModel.from_dict()um das Geräuschmodell unabhängig vom Qobj (JSON) Format zu machen. -
Alle öffentlichen Variablen, Funktionen und Klassen in
qiskit.providers.aer.noise.utils.noise_transformationwurden veraltet, mit Ausnahme vonapproximate_quantum_error()undapproximate_noise_model(), da es sich um Hilfsfunktionen handelt, die nur für die Implementierung der Funktionen vonapproximate_*verwendet werden sollen und als private Funktionen hätten bereitgestellt werden sollen. -
Veraltet
remap_noise_model(), da der C++-Code jetzt automatisch die Rauschmodelle abschneidet und neu zuordnet, wenn er Schaltkreise abschneidet.
Sonstige Anmerkungen
- Änderungen in der Implementierung der Funktion
approximate_quantum_error()können den resultierenden Näherungsfehler im Vergleich zu Qiskit Aer 0.9 verändern.
Ignis- 0.7.0
Keine Änderung
IBM Q Anbieter 0.18.3
Fehlerkorrekturen
- In #1100 wurde ein Problem mit der JSON-Kodierung und -Dekodierung bei der Verwendung von
ParameterExpressions in Verbindung mit Qiskit Terra 0.19.1 und höher behoben. Zuvor hatten die aus der JSON-Ausgabe rekonstruiertenParameter-Instanzen unterschiedliche eindeutige Bezeichner, wodurch sie nicht mit der Eingabe übereinstimmten. Sie werden nun die richtigen Identitäten haben, die sie unterstützen.