Qiskit 0.42 Versionshinweise
0.42.1
Terra- 0.23.3
Vorspiel
Qiskit Terra 0.23.3 ist eine kleinere Bugfix-Version.
Fehlerkorrekturen
-
Behebt einen Fehler im
Optimize1qGatesDecompositiontransformationsdurchgang, bei dem die Punktzahl für Substitutionen falsch berechnet wurde, wenn die Gate-Fehler null sind. -
Die Methode
ECRGate.inverse()gibt nun eine andereECRGateinstanz zurück und nicht mehr ein benutzerdefiniertes Tor, da sie selbst invers ist. -
Clip-Wahrscheinlichkeiten in den Methoden
QuantumState.probabilities()undQuantumState.probabilities_dict()auf das Intervall[0, 1]. Dies behebt Rundungsfehler, bei denen Wahrscheinlichkeiten z.B. größer als 1 sein können, was zu Fehlern in der Shot-Emulation des Samplers führt. Behoben #9761. -
Es wurde ein Fehler in der
BackendSamplerbehoben, bei dem die binären Wahrscheinlichkeits-Bitstrings auf die minimale Anzahl von Bits abgeschnitten wurden, die erforderlich ist, um das größte Ergebnis als Ganzzahl darzustellen. Das bedeutet, dass wenn z.B.{"0001": 1.0}gemessen wurde, wurde das Ergebnis auf{"1": 1.0}abgeschnitten. -
Es wurde ein Problem mit der
PassManagerConfig.from_backend()konstruktor-Methode, wenn diese mit einemBackendV1basierten Simulator-Backend verwendet wurde. Bei einigen Simulator-Backends, die einige optionale Felder nicht ausfüllten, führte der Konstruktor zu einem Fehler. Behoben #9265 und #8546 -
Behoben sind die
BackendSamplerundBackendEstimatorerfolgreich mit einer benutzerdefiniertenbound_pass_managerausgeführt. Bisher wurde bei der Ausführung von Einzelschaltungen mitbound_pass_managereineValueErrorausgegeben, weil in einem der Schritte keine Liste zurückgegeben wurde. -
Der
GateDirectionder Transpiler-Durchlauf lehnt nun keine Gates mehr ab, die zwar explizit kalibriert wurden, aber nicht in der generischen Kopplungskarte oder im Ziel vorhanden sind. -
Es wurde ein Problem mit der
CommutationCheckerklasse behoben, bei dem versucht wurde, intern ein Array für qubits zuzuweisen, obwohl nur ein Array für qubits benötigt wurde. Dies könnte zu einem übermäßigen Speicherbedarf für breite Gatter führen, zum Beispiel würde ein 4-Qubit-Gatter 32 Gigabyte statt 2 Kilobyte benötigen. Behoben #9197 -
Das Erhalten einer leeren Kalibrierung von
InstructionPropertiesauf AttributeError wurde behoben. Jetzt gibt esNonezurück. -
Korrigiert
qasm()so dass es;nach der Anweisungresetanhängt. -
Register- und Parameternamen werden nun beim OpenQASM 3 Export (
qasm3.dumps()), wenn sie nicht bereits gültige Bezeichner sind. Behoben #9658. -
QPY (mit
qpy.load()) wird nun korrekt deserialisierenStatePreparationanweisungen. Bisher hatte QPY einen Fehler, wenn es versuchte, eine Datei zu laden, die eine solche Datei enthielt. Behoben #8297. -
Ein Fehler wurde behoben in
random_circuit()mit 64 oder mehr Qubits undconditional=True, bei dem der resultierende Schaltkreis einen falsch eingegebenen Wert in seiner Bedingung haben konnte, was zu einer Vielzahl von Fehlern bei der Transpilierung oder anderen Schaltkreisoperationen führte. Behoben #9649. -
Es wurde ein Problem mit den Methoden der
OneQubitEulerDecomposermethoden der Klasseangles()undangles_and_phase()ein Fehler auftrat, wenn die Eingabematrix einen anderen D-Typ alscomplex/np.cdoublehatte. In früheren Versionen funktionierte dies gut, aber in Qiskit Terra 0.23.0 funktionierte dies nicht mehr, als die Interna vonOneQubitEulerDecomposerin Rust umgeschrieben wurden. Behoben #9827 -
Die Qiskit-Tore
CCZGate,CSGate,CSdgGatesind inqelib1.incnicht definiert und sollten daher bei der Ablage als OpenQASM 2.0 in die Datei eingefügt werden. Behebt die Fehler #9559, #9721 und #9722.
Aer- 0.12.0
Keine Änderung
IBM Q Anbieter 0.20.2
Keine Änderung
0.42.0
Terra- 0.23.2
Keine Änderung
Aer- 0.12.0
Vorspiel
Die Highlights der Qiskit Aer 0.12.0 Version sind:
- Hinzufügen eines neuen GPU-Tensor-Netzwerk-Simulators basierend auf cuTensorNet
- Hinzufügen einer neuen
AerDensityMatrixKlasse zumqiskit_aer.quantum_infomodul- Deutliche Verbesserung der Laufzeitleistung der Klassen
AerSimulatorundQasmSimulator,StatevectorSimulatorundUnitarySimulatordurch direkte Konvertierung der Eingabeobjekte in eine interne C++-DarstellungQuantumCircuitobjekte in eine interne C++-Darstellung konvertiert werden, anstatt die Schaltung zunächst in eineQasmQobj. Diese Verbesserung macht sich vor allem bei Schaltungen mit einer geringen Anzahl von Qubits oder bei parametrisierten Schaltungen bemerkbar, die das Schlüsselwortargumentparameter_bindsverwenden.
Neue Funktionen
-
Eine neue Klassenmethode
from_backend_properties()wurde derNoiseModelhinzugefügt. Dies ermöglicht die Erstellung eines neuenNoiseModelaus einemBackendPropertiesObjekt. Eine ähnliche Funktionalität war früher imNoiseModel.from_backend()Konstruktor vorhanden, wurde aber entfernt, da einBackendPropertiesObjekt allein nicht genügend Informationen enthält, um einNoiseModelObjekt zu erstellen. -
Hinzufügen einer neuen Klasse,
AerDensityMatrix, zumqiskit_aer.quantum_infomodul hinzugefügt. Diese Klasse wird verwendet, um die gleiche Schnittstelle wie die UpstreamDensityMatrixklasse in Qiskit, aber unterstützt durch die Simulation von Qiskit Aer. -
Ein neues Schlüsselwortargument,
abelian_grouping, wurde zu derEstimator. Dieses Argument wird verwendet, um zu steuern, ob derEstimatordie Eingabeobservablen in Qubit-weise kommutierbare Observablen gruppiert, was die Anzahl der für die Berechnung des Erwartungswerts erforderlichen Schaltkreisausführungen reduziert und die Laufzeitleistung desEstimator. Standardmäßig ist dies aufTrueeingestellt. -
AerStatehat eine neue Methodeinitialize_density_matrix(), die eine Dichtematrix aufAER::QV::DensityMatrixsetzt. Diese Methode wird inq.i.states.DensityMatrixaufgerufen, um ihre Daten mitndarrayzu initialisieren.initialize_density_matrix()hat ein boolesches Argument, das angibt, ob die Daten vonndarraykopiert oder freigegeben werden sollen. Wenn die Daten von C++ und Python gemeinsam genutzt werden, dürfen die Daten nicht in Python gesammelt werden, während C++ auf sie zugreift. -
Der Aufwand für die Durchführung von Simulationen mit
run()(für alle Backend-Klassen des Simulators) wurde erheblich reduziert. Dies wurde erreicht, indem die interne Serialisierung vonQuantumCircuitobjekte inQasmQobjund stattdessen dasQuantumCircuitobjekt direkt in eine interne C++-Schaltkreisstruktur übertragen, die für die Simulation verwendet wird. Diese Verbesserung macht sich vor allem bei Simulationen von Schaltkreisen mit einer geringen Anzahl von Qubits oder parametrisierten Schaltkreisen bemerkbar, die das Schlüsselwortargumentparameter_bindsvonrun()verwenden. Beachten Sie, dass die Impulssimulation (über das inzwischen veraltetePulseSimulator) und die DASK-basierte Simulation immer noch die interne Serialisierung verwenden und diese Leistungsverbesserung nicht erfahren werden. -
Es wurde eine neue Methode zu
AerJobhinzugefügt,circuits(), die eine Liste vonQuantumCircuitobjekten zurückgibt. Diese Methode gibtNonezurück, wenn Qobj für die Simulation verwendet wird. -
AerStateundAerStatevectorunterstützen jetzt die Anwendung vonKrausbetreiber. InAerStatevectorwird einer der Kraus-Operatoren auf der Grundlage der Fehlerwahrscheinlichkeiten zufällig auf den Quantenzustand angewendet. -
Hinzufügen einer neuen Simulationsmethode, die auf den NVIDIA 's cuTensorNet APIs von cuQuantum SDK. Damit steht ein GPU-beschleunigter allgemeiner Tensornetzwerk-Simulator zur Verfügung, der beliebige Quantenschaltungen simulieren kann, indem er die Schaltung intern in ein Tensornetzwerk übersetzt, um die Simulation durchzuführen. Um diese Simulationsmethode zu verwenden, setzen Sie
method="tensor_network"unddevice="GPU"bei der Initialisierung einesAerSimulatorObjekts. Zum Beispiel:from qiskit_aer import AerSimulator tensor_net_sim = AerSimulator(method="tensor_network", device="GPU")Diese Methode unterstützt sowohl Zustandsvektor- als auch Dichtematrixsimulationen. Die Rauschsimulation kann auch mit einer Density-Matrix-Single-Shot-Simulation durchgeführt werden, wenn es in der Schaltung keine
SaveStatevectorOperationen gibt.Diese neue Simulationsmethode unterstützt auch die Parallelisierung mit mehreren GPUs und MPI-Prozessen durch die Verwendung der Tensor-Netzwerk-Slicing-Technik. Diese Art der Simulation wird jedoch sehr lange dauern, wenn die Eingangsschaltungen kompliziert sind.
-
Die Umgebungsvariable
BLA_VENDORkann nun angegeben werden, um eine andere BLAS-Bibliothek zu verwenden, wenn Qiskit Aer aus dem Quellcode erstellt wird. Wenn dies nicht angegeben wird, wird standardmäßig OpenBLAS verwendet. Wenn die in BLA_VENDOR` angegebene BLAS-Bibliothek nicht gefunden werden kann, wird der Cmake-Erstellungsprozess abgebrochen.
Bekannte Probleme
- Diese Version von Qiskit Aer ist nicht kompatibel mit der Conan 2.X Release-Serie. Wenn Sie Qiskit Aer manuell aus dem Quellcode erstellen, stellen Sie sicher, dass Sie eine Conan 1.x Version verwenden. Die Kompatibilität mit neueren Versionen von Conan wird in einer zukünftigen Version behoben werden. Weitere Einzelheiten finden Sie in Ausgabe #1730.
Anmerkungen zu Upgrades
-
Das Standardverhalten des
Estimatorprimitivs gruppiert nun die Eingabeobservable in qubit-weise kommutierbare Observables. Die Gruppierung verringert die Anzahl der auszuführenden Schaltungen und verbessert die Leistung. Wenn Sie das vorherige Verhalten wünschen, können Sie IhreEstimatorinstanz mit dem Schlüsselwortargumentabelian_grouping=Falseinitialisieren. -
Die Verwendung von Primitiven mit dem Kontextmanager und die Initialisierung mit Schaltkreisen (Observables nur für Estimator) und Parametern, die in der Version Qiskit Terra 0.22.0 im Oktober 2022 veraltet sind, wurden entfernt.
-
Das Verhalten der Methode
run()hat sich geändert, wenn ungültige oder anderweitig nicht simulierbareQuantumCircuitobjekte als Eingabe übergeben werden. Bisher hat die Methoderun()in diesen Fällen einAerJobzurückgegeben, dessen Methoderesult()einResultmit demERRORoderPARTIAL COMPLETEDzurückgibt (je nachdem, ob alle oder nur einige der Schaltkreiseingänge ungültig waren oder nicht). Ab dieser Version wird statt der Rückgabe eines Ergebnisobjekts mit diesen Zuständen eine Ausnahme ausgelöst. Diese Änderung war wegen der Leistungsverbesserungen notwendig, da die Objekte nicht mehr intern in ein Qobj serialisiert werden, bevor sie an C++ übergeben werdenQuantumCircuitobjekte nicht mehr intern in ein Qobj serialisiert werden, bevor sie an C++ übergeben werden, sondern die direkte Konvertierung vonQuantumCircuitnun direkt zu Fehlern, wenn versucht wird, einen Schaltkreis zu simulieren, den Qiskit Aer nicht ausführen kann. Wenn Sie das vorherige Verhalten wünschen, können Sie Qiskit Aer im Standalone-Modus erstellen und Ihre Objekte manuell in eine JSON-Darstellung serialisierenQuantumCircuitobjekte manuell in eine JSON-Darstellung derQasmQobjdie Sie dann an die eigenständige Aer-Binärdatei übergeben, die das vorherige Verhalten beibehält. -
Eine veraltete Methode
add_nonlocal_quantum_error()inNoiseModelwurde entfernt. Es ist keine alternative Methode verfügbar. Wenn Sie nichtlokale Quantenfehler hinzufügen möchten, sollten Sie einen Transpiler-Pass schreiben, der Ihren eigenen Quantenfehler in eine Schaltung einfügt, und diesen Pass kurz vor der Ausführung der Schaltung im Aer-Simulator ausführen. -
Das
NoiseModel.from_backend()akzeptiert nun keinBackendPropertiesObjekt mehr alsbackendArgument. Verwenden Sie stattdessen die neu hinzugefügte MethodeNoiseModel.from_backend_properties(). -
Ein veraltetes
standard_gatesArgument, das in mehreren Methoden und Funktionen (siehe unten) imnoiseModul verwendet wurde, wurde entfernt.NoiseModel.from_backend()undnoise.device.basic_device_gate_errors()kraus_error(),mixed_unitary_error(),pauli_error()unddepolarizing_error()innoise.errors.standard_errorsQuantumError.__init__()
Es gibt keine alternativen Möglichkeiten, da der Benutzer nicht wissen sollte, wie der Simulator intern Rauschen (Quantenfehler) darstellt.
-
Der Konstruktor von
QuantumErrorunterstützt jetzt nicht mehr die veraltete json-ähnliche Eingabe für das Argumentnoise_ops. Verwenden Sie stattdessen z. B. die neue Stileingabe für das Argumentnoise_ops,from qiskit.circuit.library import IGate, XGate from qiskit_aer.noise import QuantumError error = QuantumError([ ((IGate(), [1]), 0.9), ((XGate(), [1]), 0.1), ]) # json-like input is no longer accepted (the following code fails) # error = QuantumError([ # ([{"name": "I", "qubits": [1]}], 0.9), # ([{"name": "X", "qubits": [1]}], 0.1), # ])Außerdem wurden veraltete Argumente gestrichen:
number_of_qubits: Verwenden SieQuantumCircuit, um stattdessennoise_opszu definieren.atol: Verwenden Sie stattdessen das AttributQuantumError.atol.standard_gates: Es gibt keine Alternative (Benutzer sollten sich nicht zu sehr um die interne Darstellung von Quantenfehlern kümmern).
-
Das veraltete Modul
noise.errors.errorutilswurde vollständig entfernt und es sind keine Alternativen verfügbar. Alle Funktionen im Modul waren Hilfsfunktionen, die nur für die Implementierung von Funktionen instandard_errorsgedacht waren (d.h. sie hätten als private Funktionen bereitgestellt werden sollen) und nicht mehr in diesem Modul verwendet werden. -
Die veralteten
utils.noise_remapperwurden vollständig entfernt, und es sind keine Alternativen verfügbar, da der C++-Code nun automatisch Rauschmodelle abschneidet und neu zuordnet, wenn er Schaltkreise abschneidet. -
Alle veralteten Funktionen (
pauli_operators()undreset_operators()) und Klassen (NoiseTransformer) im Modulutils.noise_transformationwurden entfernt, und es sind keine Alternativen verfügbar. Es handelte sich um private Funktionen/Klassen, die nur für die Implementierung vonapproximate_quantum_error()verwendet werden und nicht öffentlich sein sollten. -
Der zuvor veraltete
qobjArgumentname der Methoderun()der KlassenAerSimulatorundPulseSimulatorwurde nun entfernt. Dieser Argumentname wurde als Teil der Qiskit Aer 0.8.0 Version veraltet und wurde durch dencircuitsbzw.schedulesArgumentnamen ersetzt. -
Aer's
setup.pywurde aktualisiert und versucht nun nicht mehr,pipaufzurufen, um Build-Anforderungen zu installieren, sowohl manuell als auch über die Optionsetup_requiresinsetuptools.setup. Die bevorzugte Methode zur Erstellung von Aer ist die Verwendung eines PEP 517-kompatiblen Builders wie z.B.:pip install .Diese Änderung bedeutet, dass ein direkter Aufruf von
setup.pynicht mehr funktioniert, wenn die Build-Anforderungen nicht installiert sind. Dies steht im Einklang mit den modernen Verpackungsrichtlinien Python.
Hinweise zu veralteten Versionen
-
Die Unterstützung für die Ausführung von Qiskit Aer mit Python 3.7 wurde veraltet und wird in einer zukünftigen Version entfernt. Das bedeutet, dass Sie ab einer zukünftigen Version die von Ihnen verwendete Version von Python auf Python 3.8 oder höher aktualisieren müssen.
-
Das
PulseSimulatorBackend ist veraltet und wird in einer zukünftigen Version entfernt werden. Wenn Sie dasPulseSimulatorBackend verwenden, um eine Simulation auf Pulsebene durchzuführen, sollten Sie stattdessen die Qiskit Dynamics Bibliothek verwenden, um die Simulation durchzuführen. Qiskit Dynamics bietet einen flexibleren und robusteren Rahmen für die Simulation auf Impulsebene als dasPulseSimulatorBackend. -
Die Methode
qobj()der KlasseAerJobist jetzt veraltet und wird in einer zukünftigen Version entfernt werden. Die Verwendung des qobj-Formats als Eingabe fürrun()ist seit qiskit-aer 0.9.0 veraltet und in den meisten Fällen würde diese Methode jetzt sowiesoNonezurückgeben. Wenn Sie jetzt die Eingabe für die Methoderun()erhalten möchten, können Sie stattdessen die Methodecircuits()verwenden, die dieQuantumCircuitobjekte zurückgibt, die in dem Auftrag simuliert wurden. -
Ein
warningsArgument, das in mehreren Methoden und Funktionen desnoiseModuls verwendet wurde, wurde zugunsten der Verwendung von Filterfunktionen in der Python Standardbibliothekwarningsveraltet.
Fehlerkorrekturen
-
Es wurde ein Problem behoben, das bei der Erstellung einer neuen
AerStatevector-Instanz aus einernumpy.ndarraymit nicht zusammenhängendem Speicher auftrat. Zuvor führte dies zu unerwartetem Verhalten (und einem möglichen Fehler), daAerStatevectordavon ausging, dass das Eingabefeld zusammenhängend ist. Dies wurde behoben, so dass das Speicherlayout überprüft wird undnumpy.ndarrayintern als zusammenhängendes Array kopiert wird, bevor es verwendet wird. -
Es wurde ein Problem mit der
Samplerklasse behoben, bei dem es früher zu Fehlern kam, wenn die EingabeQuantumCircuitmehrere klassische Mehrfachregister enthielt. Behoben #1679 -
Die Anzahl der Bits des klassischen Registers, das auf der GPU verwendet wird, wurde nicht vor der Berechnung des freien verfügbaren Speichers für Chunks gesetzt, was eine Endlosschleife verursacht. Diese Korrektur setzt also die Anzahl der Bits vor der Zuweisung von Chunks, wenn die Ausführung von Stapelaufnahmen aktiviert ist.
-
Behebung von Build- und Testfehlern bei Aktivierung der GPU und Deaktivierung von cuQuantum.
-
Ein Problem in der Matrixprodukt-Zustandssimulationsmethode (d.h. das Setzen des Schlüsselwortarguments
method="matrix_product_state"bei der Initialisierung einesAerSimulatorObjekts) wurde behoben, bei dem der Simulator die Qubits vor der Durchführung der Messung falsch sortierte, was zu einer Endlosschleife führen konnte. Dies wurde behoben, so dass die Messung der Qubits in der Reihenfolge der aktuellen MPS-Struktur erfolgt und die Sortierung anschließend als Nachbearbeitungsschritt durchgeführt wird. Dies wird wahrscheinlich auch die Leistung der Simulationsmethode verbessern und eine genauere Darstellung der verschränkten Zustände ermöglichen. Behoben #1694 -
Das
AerSimulatorBackend mit Methoden:statevectordensity_matrixmatrix_product_statestabilizer
melden nun, dass sie die Anweisungen
break_loopundcontinue_loopunterstützen, wenn sie als Backends für die Funktion Terratranspile()funktion verwendet werden. Die Simulatoren unterstützten diese bereits, aber sie hatten sie nur nicht gemeldet.
IBM Q Anbieter 0.20.2
In dieser Version werden die allzu restriktiven Versionsbeschränkungen in den Anforderungen für das Paket, das in 0.20.1 hinzugefügt wurde, entfernt. Für die 0.20.1 war die einzige Abhängigkeit, für die eine Versionsobergrenze vorgesehen war, das Paket requests-ntlm , da dessen neue Version die einzige Abhängigkeit war, die derzeit eine Inkompatibilität mit qiskit-ibmq-provider aufweist. Die anderen Versionskappen, die als Teil von 0.20.1 hinzugefügt wurden, verursachten in mehreren Umgebungen Installationsprobleme, da sie das Paket qiskit-ibmq-provider inkompatibel mit den in anderen Paketen verwendeten Abhängigkeitsversionen machten.