Qiskit 0.46 Versionshinweise
0.46.3
Vorspiel
Qiskit 0.46.3 ist ein kleineres Bugfix- und Backport-Release für die 0.46 Serie. Es ist auch die letzte Veröffentlichung der Unterversion 0.46, die damit ausläuft.
Fehlerkorrekturen
-
Ein fehlender Dekorator wurde in
C3SXGateder dazu führte, dass es fehlschlug, wennGate.to_matrix()aufgerufen wurde. Die Gate-Matrix wird nun wie erwartet zurückgegeben. -
Das
QuantumCircuit.parametersist nun korrekt leer, wenn das AttributQuantumCircuit.copy_empty_like()für einen parametrischen Schaltkreis verwendet wird. Zuvor wurde ein interner Cache ohne Invalidierung kopiert. Fix #12617. -
Korrektur des
SolovayKitaevtranspiler-Durchgang beim Laden von Grundannäherungen aus einer bestehenden.npyDatei. Bisher konnte das Laden einer gespeicherten Approximation, die weitere Reduktionen (z.B. durch Gatterstornierungen) zuließ, zu einem Laufzeitfehler führen. Außerdem ging die globale Phasendifferenz zwischen dem U(2)-Gatterprodukt und der SO(3)-Darstellung während eines Speicher- und Ladevorgangs verloren. Fixes Qiskit/qiskit#12576. -
Der Konstruktor
GenericBackendV2ermöglichte es, fehlerhafte Backends zu erstellen, da er Basis-Gates akzeptierte, die nicht in der Backend-Größe zugewiesen werden konnten. Das heißt, ein Backend mit einem einzigen Qubit sollte keine Basis mit Zwei-Qubit-Gattern akzeptieren. -
Zuvor,
DAGCircuit.replace_block_with_op()einen-Qubit-Operation auf einen Block vonm-Qubits gelegt, wodurch die DAG in einen ungültigen Zustand versetzt wurde. Dieses Verhalten wurde behoben, und der Versuch wird eineDAGCircuitError.
Sonstige Anmerkungen
- Diese Version erweitert die Datei constraints.txt um eine vollständige Liste der angehefteten Versionsnummern der Abhängigkeiten von Qiskit 0.46.3. Da dieses Release das Ende der Lebensdauer der Version 0.46 markiert, wird damit eine reproduzierbare Installationsumgebung für diese Version sichergestellt, die auf den Versionsangaben in constraints.txt basiert.
0.46.2
Vorspiel
Qiskit 0.46.2 ist ein kleineres Bugfixing- und Backport-Release für die 0.46 Serie.
Neue Funktionen
- Mit dieser Version von Qiskit wird die Unterstützung für NumPy 2.0 abgeschlossen. Qiskit wird in absehbarer Zukunft sowohl Numpy 1.x als auch 2.x weiterhin unterstützen.
Fehlerkorrekturen
-
Ein Problem mit
circuit_drawer()oderQuantumCircuit.draw()bei Verwendung der Ausgabeoptionmplwurde behoben, bei dem das Programm hängen blieb, wenn der zu zeichnende Schaltkreis eine ControlFlow -Operation enthielt und die Optionfoldauf -1 (d.h. keine Faltung) gesetzt war. Behoben #12012. -
Der
EvolvedOperatorAnsatzbehandelt jetzt korrekt den Fall, dass das Operator-Argument eine leere Liste ist. Zuvor hatte dies zu einem Fehler geführt. -
Von nun an,
EvolvedOperatorAnsatzkeine Qregs mehr, wenn es null Qubits gibt, anstatt eineQuantumRegisterinstanz mit null Qubits. Dieses Verhalten steht im Einklang mit seiner OberklasseQuantumCircuit. -
Die Methode
Instruction.repeat()verschiebt nun eine Mengeconditionzu den äußeren zurückgegebenenInstructionund lässt die inneren Gatter ihrer Definition unbedingt. Zuvor ließ die MethodeClassicalRegisterinstanzen innerhalb der inneren Definition, was ein ungültiger Zustand war und sich später als scheinbar unzusammenhängende Fehler manifestierte, z. B. bei der Transpilierung oder dem Export. Behoben #11935. -
Eine Fließkomma-Ungenauigkeit bei der Skalierung bestimmter Impulseinheiten zwischen Sekunden und Nanosekunden wurde behoben. Wenn der Impuls symbolisch definiert war, konnte ein unnötiger Fließkommafehler durch die Skalierung für bestimmte Builds von
symengineeingeführt werden, was zu unerwarteten Ergebnissen führen konnte, sobald die Symbole vollständig gebunden waren. Siehe #12392. -
Es wurde ein Fehler in
qiskit.visualization.pulse_v2.interface.draw()behoben, der keine Impulszeitpläne zeichnete, wenn die Zeichenfunktion mit einemBackendV2argument aufgerufen wurde. Da das V2 Backend keine Hardware-Kanalfrequenzen meldet, wird in der generierten Zeichnung "no freq" angezeigt unter jeder Kanalbezeichnung. -
Der
VF2Layoutpass würde eine Ausnahme auslösen, wenn er mit einerTargetinstanz ohne Konnektivitätseinschränkungen. Dies wäre bei Zielen von Aer 0.13 der Fall. Das Problem ist nun behoben. -
Das Standard-Plugin
initlöste nicht korrekt einTranspilerErrorwenn es mit einer ungültigen Optimierungsstufe aufgerufen wurde. -
PassManager.run()verschwendet bei mehreren Eingaben keine Zeit mehr mit der Serialisierung, wenn es nur seriell arbeiten soll. -
Der Parser OpenQASM 2.0 (
qasm2.load()undqasm2.loads()) kann nun gate-angle-Ausdrücke auswerten, die Integer-Operanden enthalten, die den System-Size-Integer überlaufen lassen würden. Diese werden in einem doppelpräzisen Fließkomma-Kontext ausgewertet, so wie der Rest des Ausdrucks immer ausgewertet wurde. Achtung: Eine beliebig große ganze Zahl ist nicht unbedingt exakt in doppelter Genauigkeit darstellbar, so dass die Möglichkeit besteht, dass die Schaltung, wie auch immer sie erzeugt wurde, bereits alle numerische Genauigkeit modulo verloren hat.
0.46.1
Vorspiel
Qiskit 0.46.1 ist ein kleineres Bugfix-Release für die 0.46 Serie.
Fehlerkorrekturen
-
Ein Problem wurde behoben mit
convert_to_target()bei dem der Konverter fälschlicherweise Kontrollflussanweisungen ignorierte, wenn sie im AttributBackendConfiguration.supported_instructionsangegeben waren, was der typische Ort ist, an dem Kontrollflussanweisungen in einemBackendConfigurationobjekt angegeben werden. Behoben #11872. -
Der Aufruf von
EquivalenceLibrary.set_entry()wird nun das interne Graph-Objekt der Bibliothek korrekt aktualisiert. Bisher wurden zwar die Metadaten aktualisiert, aber die Struktur des Graphen blieb unverändert, so dass Benutzer wieBasisTranslatorimmer noch die alten Regeln verwenden würden. Behoben #11958. -
BasePassManager.run()wird nicht mehr die vorherigePropertySetin neue Workflows, wenn sie mehr als einmal aufgerufen werden. Zuvor wurden die gleichenPropertySetzur Initialisierung von Folgeläufen verwendet, was dazu führen konnte, dass ungültige Eigenschaftsinformationen an Aufgaben weitergegeben wurden. Das Verhalten entspricht nun dem von Qiskit 0.44. Behoben #11784. -
Aktualisierte Eigenschaften und Konfigurationsinformationen des
FakeOpenPulse2Qbackend. Es wurden fehlende Gattereigenschaften für einige in den Impulsvorgaben definierte Gatter hinzugefügt, so dass die an den beiden Standorten definierten Gatter konsistent sind. -
Das Modul für Überwachungswerkzeuge
qiskit.tools.monitor(enthalten in dem inzwischen veralteten Modulqiskit.tools) wurde aktualisiert und funktioniert nun wie erwartet. Die Funktionjob_monitor()arbeitet jetzt mitJobinstanzen. Die Funktionenbackend_overview()undbackend_monitor()sollten nun wie erwartet funktionieren. -
InstructionDurations.from_backend()gibt nun eine Instanz einer beliebigen Unterklasse vonInstructionDurationsanstelle der Basisklasse zurück.
0.46.0
Vorspiel
Die Version 0.46.0 ist die letzte kleinere Version der Serie 0.x. Diese Version fügt in erster Linie neue Verwerfungswarnungen für API-Änderungen hinzu, die in der zukünftigen Hauptversion 1.0.0 vorgenommen werden. Es ist vollständig kompatibel mit den Qiskit 0.45.x Versionen. Es wird dringend empfohlen, von 0.45.x auf 0.46.0 zu aktualisieren, damit Sie die Warnungen darüber sehen können, welche Schnittstellen sich mit Qiskit 1.0.0 ändern werden.
Die 0.46.x Release-Serie wird weiterhin unterstützt und erhält für 6 Monate nach diesem Release Bugfixes und Sicherheitskorrekturen über Patch-Releases. Weitere Einzelheiten über den Veröffentlichungszeitplan und den Support-Zyklus finden Sie unter: start/install#qiskit-versioning, wo der Veröffentlichungszeitplan detailliert dokumentiert ist.
Wenn Ihr Projekt von Qiskit abhängt, kann es auf Funktionen angewiesen sein, die in Qiskit 1.0.0 nicht mehr unterstützt werden. Aus diesem Grund empfehlen wir Ihnen, Ihre unterstützte Version proaktiv auf <1.0 zu begrenzen. Qiskit 1.0.0 wird voraussichtlich etwa zwei Wochen nach Qiskit 0.46.0, am 15.02.2024, veröffentlicht und ist möglicherweise noch nicht verfügbar, wenn Sie diese Nachricht lesen.
Die Paketstruktur von Qiskit ändert sich in Qiskit 1.0, und leider können die geänderten Anforderungen nicht vollständig an pip weitergegeben werden, insbesondere wenn pip install --upgrade Befehle ausgeführt werden, nachdem die Umgebung ursprünglich konfiguriert wurde. Alle Versionen von Qiskit vor 1.0 (einschließlich dieser) haben einen Installationskonflikt mit Qiskit 1.0, den pip nicht beheben kann.
Wenn import qiskit eine ImportError auslöst, befindet sich Ihre Umgebung in einem ungültigen Zustand, und die Versionen von Qiskit 0.45/0.46 und 1.0 sind beide erreichbar, was zu leicht fehlerhaftem Code führen wird. Sie müssen eine neue virtuelle Umgebung erstellen und sicherstellen, dass nur eine der beiden Versionen installiert ist. Insbesondere wenn Sie Qiskit 1.0 installieren möchten, dürfen Sie keine Pakete installieren, die von qiskit-terra abhängen; diese Pakete sind mit Qiskit 1.0 nicht kompatibel und müssen aktualisiert werden. Wenn Sie beabsichtigen, Qiskit 0.45 oder 0.46 zu installieren, müssen Sie sicherstellen, dass Sie nicht versuchen, qiskit>=1.0 zu installieren.
Wenn Sie eine Bibliothek entwickeln, die auf Qiskit basiert und Sie immer noch eine Abhängigkeit von qiskit-terra haben, sollten Sie dringend ein neues Paket veröffentlichen, das nur von qiskit abhängt. Seit der Version 0.44 enthält das qiskit -Paket nur noch den qiskit-terra -Compilerkern (die Komponente, die jetzt einfach "Qiskit" genannt wird). Wenn also Ihre Mindestversion 0.44 ist, können Sie eine qiskit-terra>=0.44 -Abhängigkeit sicher auf qiskit>=0.44 umstellen, ohne dass sich etwas an der Installation ändert. Weitere Einzelheiten und Empfehlungen für Tests und Vorbereitungen finden Sie im Abschnitt für Entwickler im Migrationsleitfaden.
Neue Funktionen
-
Eine neue Funktion,
qs_decomposition()wurde hinzugefügt zuqiskit.synthesis. Diese Funktion ermöglicht die Anwendung der Quanten-Shannon-Zerlegung auf beliebige Einheiten. -
Ein neues
qiskit.providers.basic_providermodul wurde eingeführt und ersetztqiskit.providers.basicaer. Dieses Modul enthält Provider-Tools, die die desBasicAerProviders widerspiegeln, und bietet einen einzigen, nicht effizienten, zustandsvektorbasierten Simulator:BasicSimulator. Dieser Simulator basiert auf derBackendV2schnittstelle und ist ausschließlich für Tests und einfaches Prototyping gedacht. Für fortgeschrittene Simulationsmöglichkeiten verweisen wir auf das Paketqiskit-aer. Migrationsrichtlinien finden Sie in derBasicAerdeprecation note. -
Die
Targetschnittstelle und die Transpiler-Pipeline unterstützen jetzt Zieldefinitionen mitnum_qubits=None. Dies soll die Erstellung vonTarget-basierten Simulatoren mit einer flexiblen Anzahl von Qubits zu ermöglichen. Ein Ziel mitnum_qubits=Noneenthält ausschließlich globale Anweisungen (mitqargs=None), und wenn es dem Transpiler übergeben wird, wird erwartet, dass der Transpiler die Größe der Schaltung nicht ändert. Diese Änderung in derTargeterfordert künftige Transpilerdurchläufe, um den Fall zu berücksichtigen, dasstarget.num_qubits is None. -
Eine neue Klasse,
GenericBackendV2wurde demqiskit.providers.fake_providermodul hinzugefügt. Diese Klasse ist konfigurierbar und erstellt eineBackendV2instanz, die lokal ausgeführt werden kann (im Sinne der Fake-Backends). Die Benutzer können die Anzahl der Qubits, die Basisgatter, die Kopplungskarte, die Fähigkeit zur Ausführung dynamischer Schaltungen (Kontrollflussanweisungen), die Anweisungskalibrierungen und dtm des Backends konfigurieren, ohne sich mit der manuellen Konstruktion von Zielen befassen zu müssen. Qubit- und Gate-Eigenschaften werden durch Zufallsstichproben aus Standardbereichen erzeugt. Der Seed für diese Zufallsgenerierung kann festgelegt werden, um die Reproduzierbarkeit der Backend-Ausgabe zu gewährleisten. Es ist wichtig zu beachten, dass dieses Backend nur Gates aus der Standardbibliothek unterstützt. Wenn Sie ein flexibleres Backend benötigen, gibt es immer die Möglichkeit, direkt einTargetobjekt zu instanziieren, das für die Transpilierung verwendet wird.Anwendungsbeispiel 1:
from qiskit import QuantumCircuit, transpile from qiskit.providers.fake_provider import GenericBackendV2 # Create a simple circuit circuit = QuantumCircuit(3) circuit.h(0) circuit.cx(0,1) circuit.cx(0,2) circuit.measure_all() circuit.draw('mpl') # Define backend with 3 qubits backend = GenericBackendV2(num_qubits=3) # Transpile and run transpiled_circuit = transpile(circuit, backend) result = backend.run(transpiled_circuit).result()Anwendungsbeispiel 2:
from qiskit import QuantumCircuit, ClassicalRegister, transpile from qiskit.providers.fake_provider import GenericBackendV2 # Create a circuit with classical control creg = ClassicalRegister(19) qc = QuantumCircuit(25) qc.add_register(creg) qc.h(0) for i in range(18): qc.cx(0, i + 1) for i in range(18): qc.measure(i, creg[i]) qc.ecr(20, 21).c_if(creg, 0) # Define backend with custom basis gates # and control flow instructions backend = GenericBackendV2( num_qubits=25, basis_gates = ["ecr","id","rz","sx","x"], control_flow=True) #Transpile transpiled_qc = transpile(qc, backend)AnmerkungDie von dieser Klasse erzeugten Rauscheigenschaften ahmen kein konkretes Quantengerät nach und sollten nicht zur Messung konkreter Backend-Verhaltensweisen verwendet werden. Es handelt sich dabei um "vernünftige Standardwerte", die zum Testen der allgemeinen Backend-Schnittstellenfunktionalität verwendet werden können. Für eine genauere Simulation bestehender Geräte können Sie manuell ein Geräuschmodell aus dem realen Backend erstellen, indem Sie die in
qiskit-aerangebotenen Funktionen nutzen.
Anmerkungen zu Upgrades
- Die für
symengineerforderliche Mindestversion wurde auf >= 0.11 angehoben. Dies ermöglichte das Entfernen von Workarounds ausParameterExpression.is_real()um einen Fehler in früheren Versionen vonsymenginezu beheben.
Hinweise zu veralteten Versionen
-
Die
ScheduleBlock.scoped_parameters()undScheduleBlock.search_parameters()methoden sind veraltet. Diese Methoden erzeugenParameterobjekte, deren Namen so geändert wurden, dass sie das Puls-Scoping anzeigen. Die ursprüngliche Absicht der Methoden war, dass diese Objekte weiterhin mit den ursprünglichen, nicht skopiertenParameterobjekten. Durch die Änderung des Namens wird jedoch die Verknüpfung unterbrochen, so dass die Zuweisung über die zugewiesene Version nicht funktioniert. Siehe #11654 für mehr Kontext. -
Übergabe eines
QuasiDistribution,ProbDistributionoder eines Verteilungswörterbuchs für das Argumentdatader Funktionplot_histogram()visualisierungsfunktion ist jetzt veraltet. Die Unterstützung dafür wird in der Qiskit 1.0 Version entfernt werden. Wenn Sie ein Histogramm von einemQuasiDistribution,ProbDistributionoder eines Verteilungswörterbuchs zeichnen möchten, sollten Sie stattdessen die Funktionplot_distribution()funktion verwenden. -
Das Paket
qiskit-terraPython ist veraltet und wird ab Qiskit 1.0.0 keine Updates mehr erhalten. Wenn Sieqiskit-terraselbst installieren, wird dies nicht mehr für Qiskit>=1.0.0 aktualisiert.FutureWarningWenn Sie qiskit ohne das Paketqiskitausführen, wird beim Import vonqiskitausgegeben, um anzuzeigen, dass Sie das Paketqiskitnicht verwenden. -
Die Verwendung des
qiskit.AerObjekts ist veraltet und wird in Qiskit 1.0 entfernt werden. Sie sollten stattdessen das gleiche Objekt aus dem Namensraumqiskit_aerverwenden, das einen sofortigen Ersatz darstellt. -
Der Import von
qiskit.providers.aerist veraltet und wird in Qiskit 1.0 nicht mehr funktionieren. Sie sollten stattdessen vonqiskit_aerimportieren, das einen sofortigen Ersatz darstellt. -
Die Ausführung von Impulsaufträgen auf Backends von
qiskit.providers.fake_providerist veraltet, und die Unterstützung wird in Qiskit 1.0 entfernt. Dies ist darauf zurückzuführen, dass Qiskit Aer seine Simulationsfunktion für solche Aufträge entfernt hat. Für Hamilton-Simulationen auf niedriger Ebene sollten Sie eine Spezialbibliothek wie Qiskit Dynamics verwenden. -
Das Modul
qiskit.transpiler.synthesisist veraltet und wird in Qiskit 1.0 entfernt werden. Die folgenden Objekte wurden verschoben:qiskit.transpiler.synthesis.aqcwurde verschoben nachqiskit.synthesis.unitary.aqc(außer beiqiskit.synthesis.unitary.aqc.AQCSynthesisPlugin).qiskit.synthesis.unitary.aqc.AQCSynthesisPluginwurde aufqiskit.transpiler.passes.synthesis.AQCSynthesisPluginverschoben.qiskit.transpiler.synthesis.graysynth()wurde verschoben nachqiskit.synthesis.synth_cnot_phase_aam().qiskit.transpiler.synthesis.cnot_synth()wurde verschoben nachqiskit.synthesis.synth_cnot_count_full_pmh().
-
Das Modul
qiskit.tools.jupyterist veraltet und wird in Qiskit 1.0.0 entfernt. Dieses Modul ist veraltet, da die Funktionalität dieses Moduls an das alteqiskit-ibmq-provider-Paket gebunden ist, das nicht mehr unterstützt wird und auch nur nochBackendV1. Wenn Sie diese Funktionalität derzeit verwenden, gibt es ähnliche Jupyter-Werkzeuge im Paket qiskit-ibm-provider, die stattdessen verwendet werden können. -
Das Modul
qiskit.tools.monitorist veraltet und wird in Qiskit 1.0.0 entfernt. Dieses Modul ist veraltet, da die Funktionalität dieses Moduls an das alteqiskit-ibmq-provider-Paket gebunden ist, das nicht mehr unterstützt wird und auch nur nochBackendV1. -
Das Modul
qiskit.tools.visualizationist veraltet und wird in Qiskit 1.0.0 entfernt. Dieses Modul war eine Weiterleitung vom ursprünglichen Standort des Visualisierungsmoduls von Qiskit und wurde nachqiskit.visualizationin Qiskit 0.8.0 verschoben. Wenn Sie immer noch diesen Pfad verwenden, können Sie einfach Ihre Importe vonqiskit.tools.visualizationaufqiskit.visualization. -
Das Modul
qiskit.tools.eventsund das darin enthaltene Dienstprogrammprogressbar()sind veraltet und werden in der Version 1.0.0 von Qiskit entfernt. Die Funktionalität dieses Moduls war nicht weit verbreitet und wurde besser von speziellen Paketen wie tqdm abgedeckt. -
Das Modul
qiskit.toolsist veraltet und wird in Qiskit 1.0.0 entfernt. Außer wie in den obigen Versionshinweisen für bestimmte Untermodule (qiskit.tools.jupyter,qiskit.tools.monitor,qiskit.tools.eventsundqiskit.tools.visualization) angegeben, wurden die Funktionen in diesem Modul nachqiskit.utils. Wenn Sie eine der Funktionen dieses Moduls verwenden, können Sie Ihre Importe vonqiskit.toolsaufqiskit.utils. -
Das Modul
qiskit.testist veraltet. Dieses Modul enthält Werkzeuge und Hilfsprogramme für interne Qiskit-Tests, und die meisten seiner Funktionen wurden verschoben oder werden in Qiskit nicht mehr verwendet. In der Praxis war das Modul nie für eine externe Nutzung vorgesehen. Wenn ein Teil des Codes im Modul unbedingt über Qiskit hinaus benötigt wird, sollten Sie diesen Code in Ihre eigene Testinfrastruktur kopieren. -
Das Modul
qiskit.quantum_info.synthesisist veraltet und wird in Qiskit 1.0.0 entfernt werden. Die folgenden Objekte wurden verschoben nachqiskit.synthesis:OneQubitEulerDecomposerwurde verschoben nachqiskit.synthesis.one_qubitTwoQubitBasisDecomposerwurde verschoben nachqiskit.synthesis.two_qubitsXXDecomposerwurde verschoben nachqiskit.synthesis.two_qubitstwo_qubit_cnot_decompose()wurde verschoben nachqiskit.synthesis.two_qubits
Die Klasse
Quaternionwurde vonqiskit.quantum_info.synthesisnachqiskit.quantum_info. Dieser Schritt hat keine Auswirkungen auf den üblichen Importpfad der Klasse, aber der Zugriff auf sie überqiskit.quantum_info.synthesisist jetzt veraltet.Diese Funktion ist veraltet und wird in Qiskit entfernt werden 1.0.0:
cnot_rxx_decompose()
-
Das frühere OpenQASM 2 Parsermodul, das in
qiskit.qasmenthalten war, wurde veraltet. Sie wird in der Version von Qiskit 1.0.0 entfernt werden. Der veraltete OpenQASM 2 Parser wurde durch dasqiskit.qasm2modul ersetzt, das einen schnelleren und korrekteren Parser für OpenQASM 2 bietet. -
Die Funktion
qiskit.converters.ast_to_dagist veraltet und wird in der Version 1.0.0 von Qiskit entfernt werden. Er wurde früher verwendet, um den abstrakten Syntaxbaum, der vom alten OpenQASM 2 Parser (imqiskit.qasmmodul, das veraltet ist) und konvertiert diesen direkt in eineDAGCircuit. Da der alte OpenQASM 2 Parser veraltet ist, wird diese Funktion nicht mehr benötigt, wenn der alte Parser entfernt wird. Wenn Sie dies bisher verwendet haben, können Sie stattdessen Ihre OpenQASM 2-Dateien in eineQuantumCircuitunter Verwendung derQuantumCircuit.from_qasm_file()oderQuantumCircuit.from_qasm_str()konstruktormethoden und dann die Konvertierung vonQuantumCircuitin eineDAGCircuitmitcircuit_to_dag(). -
Die
QuantumCircuit.qasm()methode, die zur Erzeugung einer OpenQASM 2 Repräsentation desQuantumCircuitobjekts wurde veraltet und wird in der Qiskit 1.0.0 Version entfernt. Die Websiteqasm2.dump()oderqasm2.dumps()funktionen, die eine ähnliche Funktionalität bieten, sollten stattdessen verwendet werden. Wenn Sie die MethodeQuantumCircuit.qasm()methode verwenden, um eine mit Pygments formatierte Ausgabe zu erzeugen, sollten Sie sich stattdessen das eigenständige Paketopenqasm-pygmentsansehen, das diese Funktionalität bietet (alsqasm2.dump()undqasm2.dumps()keine farbige pygments-Ausgabe liefern). -
Die
ParametricPulsebasisklasse und Pulse sind nun veraltet und werden in Qiskit 1.0 entfernt. Diese beinhalten:ParametricPulseConstantDragGaussianGaussianSquare
Die Klasse wurde durch
SymbolicPulseund die entsprechende Pulsbibliothek ersetzt.SymbolicPulsebietet bessere Leistung, Flexibilität und QPY-Unterstützung. -
Der
NoiseAdaptiveLayouttranspiler-Pass und das zugehörige"noise_adaptive"layout stage plugin sind veraltet und werden in der Version 1.0.0 entfernt. Dieser Pass wurde weitgehend ersetzt durchVF2LayoutundVF2PostLayoutersetzt, die ein Layout auf der Grundlage der gemeldeten Geräuschmerkmale eines Backends festlegen. -
Der
CrosstalkAdaptiveScheduletranspiler pass wurde veraltet und wird in der Version 1.0.0 entfernt werden. Dieser Pass war nicht mehr verwendbar, da seine interne Funktionsweise davon abhing, dass benutzerdefinierte Eigenschaften in derBackendPropertiesnutzlast einerBackendV1instanz. Da keine Backends diese Felder setzen, wurde der Pass veraltet. -
Das
qiskit.visualization.qcstyleModul ist nun veraltet und wird in der Qiskit 1.0.0 Version entfernt werden. Stattdessen sollten Sieqiskit.visualization.circuit.qcstyleals direkten Ersatz verwenden. -
Das Einfügen von Schaltkreis-Gate-Operationen in den Pulse-Builder-Kontext ist jetzt veraltet. Die Abschaffung betrifft die folgenden Funktionen:
call_gate(),cx(),u1(),u2(),u3(),x()
Sowie Eingabeargumente vom Typ
QuantumCircuittyp incall().Wenn Sie dennoch kalibrierte Backend-Zeitpläne injizieren möchten, können Sie folgendes Muster verwenden, anstatt Gate-Befehle aufzurufen.
from qiskit.providers.fake_provider import GenericBackendV2 from qiskit import pulse backend = GenericBackendV2(num_qubits=5) sched = backend.target['x'][(qubit,)].calibration with pulse.build() as only_pulse_scheds: pulse.call(sched)Ähnlich,
QuantumCircuitin den Builder-Kontext injiziert werden, indem das Objekt manuell transpiliert und eingeplant wird.from math import pi from qiskit.compiler import schedule, transpile qc = QuatumCircuit(2) qc.rz(pi/2, 0) qc.sx(0) qc.rz(pi/2, 0) qc.cx(0, 1) qc_t = transpile(qc, backend) sched = schedule(qc_t, backend) with pulse.build() as only_pulse_scheds: pulse.call(sched)In jedem Fall empfehlen wir nun, ein minimales Pulsprogramm mit dem Builder zu schreiben und es an
QuantumCircuitüber dieQuantumCircuit.add_calibration()methode als Mikrocode einer Gatteranweisung anzuhängen, anstatt das gesamte Programm mit dem Pulsmodell zu schreiben.Die folgenden Argumente in
build()wurden ebenfalls veraltet:default_transpiler_settingsdefault_circuit_scheduler_settings
Zusammen mit den Funktionen:
-
Die folgenden Werkzeuge in
qiskit.utilswurden veraltet:- Anwendungen in
qiskit.utils.arithmetic - Anwendungen in
qiskit.utils.circuit_utils - Anwendungen in
qiskit.utils.entangler_map - Anwendungen in
qiskit.utils.name_unnamed_args
Diese Funktionen wurden ausschließlich im Kontext von
qiskit.algorithmsundqiskit.opflowverwendet und werden nach der Entfernung vonqiskit.algorithmsundqiskit.opflowin Qiskit 1.0 entfernt. - Anwendungen in
-
Das
qiskit.providers.fake_providermodul wurde in das Paketqiskit-ibm-runtimePython migriert. Aus diesem Grund sind die folgenden Elemente in derqiskit.providers.fake_providerab Qiskit 0.46 veraltet und werden in Qiskit entfernt 1.0:qiskit.providers.fake_provider.FakeProviderqiskit.providers.fake_provider.FakeProviderForBackendV2qiskit.providers.fake_provider.FakeProviderFactoryqiskit.providers.fake_provider.fake_backends.FakeBackendV2- jedes gefälschte Backend, das in
qiskit.providers.fake_provider.backendsenthalten ist (zugänglich über den Provider) qiskit.providers.fake_provider.FakeQasmSimulatorqiskit.providers.fake_provider.FakeJobqiskit.providers.fake_provider.FakeQobj
Beispiel für die Migration zum neuen Fake-Anbieter:
# Legacy path from qiskit.providers.fake_provider import FakeProvider, FakeSherbrooke backend1 = FakeProvider().get_backend("fake_ourense") backend2 = FakeSherbrooke() # New path # run "pip install qiskit-ibm-runtime" from qiskit_ibm_runtime.fake_provider import FakeProvider, FakeSherbrooke backend1 = FakeProvider().get_backend("fake_ourense") backend2 = FakeSherbrooke()Zusätzlich wurden die folgenden gefälschten Backends, die für spezielle Testzwecke entwickelt wurden, durch die neue
GenericBackendV2klasse ersetzt und sind ab Qiskit ebenfalls veraltet 0.46:qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2LegacyQubitPropsqiskit.providers.fake_provider.fake_backend_v2.FakeBackend5QV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendSimple
Beispiel für die Migration zur neuen
GenericBackendV2klasse:# Legacy path from qiskit.providers.fake_provider import FakeBackend5QV2 backend = FakeBackend5QV2() # New path from qiskit.providers.fake_provider import GenericBackendV2 backend = GenericBackendV2(num_qubits=5) # note that this class will generate 5q backend with generic # properties that serves the same purpose as FakeBackend5QV2 # but will generate different results -
Das
qiskit.extensionsmodul ist jetzt veraltet. Sie war seit der Veröffentlichung von Qiskit 0.45 zur Abschaffung vorgesehen. Die meisten Objekte wurden verschoben nachqiskit.circuit.libraryverschoben, darunter:DiagonalGate,HamiltonianGateGate,Initialize,Isometry,MCGupDiag,UCGate,UCPauliRotGate,UCRXGate,UCRYGate,UCRZGate,UnitaryGate.
Mit der Abschaffung der Objekte wurden auch die folgenden Schaltungsmethoden abgeschafft:
QuantumCircuit.diagonal,QuantumCircuit.hamiltonian,QuantumCircuit.isometryundQuantumCircuit.iso,QuantumCircuit.uc,QuantumCircuit.ucrx,QuantumCircuit.ucry,QuantumCircuit.ucrz.
-
Die Qiskit
execute()funktion ist veraltet. Diese Funktion diente als High-Level-Wrapper, um einen Schaltkreis mit einigen Transpile-Optionen zu transpilieren und ihn auf einem Backend mit einigen Run-Optionen auszuführen. Um das Gleiche zu tun, können Sie explizit dietranspile()funktion (mit den entsprechenden Transpile-Optionen) gefolgt vonbackend.run()(mit den entsprechenden Run-Optionen).Zum Beispiel, anstatt zu laufen:
from qiskit import execute job = execute(circuit, backend)können Sie laufen:
from qiskit import transpile new_circuit = transpile(circuit, backend) job = backend.run(new_circuit)Alternativ dazu ist das Primitiv
Samplersemantisch äquivalent zu der veraltetenexecute()funktion. Die KlasseBackendSamplerist ein generischer Wrapper für Backends, die keine Primitive unterstützen:from qiskit.primitives import BackendSampler sampler = BackendSampler(backend) job = sampler.run(circuit) -
Die implizite Konvertierung von einem dichten
BaseOperator`zu einemSparsePauliOpinEstimatorbeobachtbaren Argumenten ist ab Qiskit 0.46 veraltet und wird in Qiskit 1.0 entfernt werden. Sie sollten explizit in eineSparsePauliOpmitSparsePauliOp.from_operator()konvertieren. -
Die diskrete Impulsbibliothek ist jetzt veraltet und wird in einer zukünftigen Version entfernt werden. Diese beinhalten:
constant()zero()square()sawtooth()triangle()cos()sin()gaussian()gaussian_deriv()sech()sech_deriv()gaussian_square()drag()
Verwenden Sie stattdessen die entsprechende
SymbolicPulse, mitget_waveform(). Verwenden Sie zum Beispiel anstelle vonpulse.gaussian(100,0.5,10)die Adressepulse.Gaussian(100,0.5,10).get_waveform().Man beachte, dass die Phase sowohl von
Sawtoothals auch vonSquareso definiert ist, dass sich die Phase von im Gegensatz zum diskreten Gegenstück um einen vollen Zyklus verschiebt. Beachten Sie auch, dass die Unterstützung komplexer Amplituden in der symbolischen Pulsbibliothek veraltet ist - verwenden Sie stattdessenfloat,ampundangle. -
Die Klasse
ConfigurableFakeBackendklasse, die hauptsächlich für interne Tests verwendet wurde, ist nun veraltet. Sie wird in der Version von Qiskit 1.0.0 entfernt werden. Stattdessen können Sie mit derGenericBackendV2klasse verwenden, um ein ähnliches Backend für Tests zu erstellen. -
Das Laden von Objekten der Bibliothek
ScalableSymbolicPulsemit dem komplexen Parameterampaus qpy-Dateien der Version 5 oder niedriger (Qiskit Terra < 0.23.0 ) ist jetzt veraltet. Nach dem Entfernen von 1.0.0 in Qiskit wird der Komplexampautomatisch in Float (amp,angle) umgewandelt. Die Änderung gilt für die Pulse:ConstantDragGaussianGaussianSquare
-
Das
qiskit.providers.basicaermodul und alle seine Klassen sind ab Qiskit 0.46 veraltet. Ihre Verwendung sollte durch dasqiskit.quantum_infomodul und das neueqiskit.providers.basic_providermodul ersetzt werden.Die Umstellung von der Verwendung von
qiskit.providers.basicaerzuqiskit.providers.basic_providerkann wie folgt durchgeführt werden:Migrate from | Replace with ------------------------------------------------------------------------------ :mod:`.basicaer` | :mod:`.basic_provider` :class:`.BasicAerProvider` | :class:`.BasicProvider` :class:`.BasicAerJob` | :class:`.BasicProviderJob` :class:`.QasmSimulatorPy` | :class:`.BasicSimulator` :class:`.UnitarySimulatorPy` | use :class:`~.quantum_info.Operator` :class:`.StatevectorSimulatorPy` | use :class:`~.quantum_info.Statevector`Ein bemerkenswerter Unterschied ist, dass der neue Anbieter nicht mehr über eine globale Instanz (wie
BasicAer) zugänglich ist, so dass es nicht möglich ist,from qiskit import BasicProviderzu verwenden. Stattdessen muss die Anbieterklasse aus ihrem Submodul importiert und instanziiert werden:from qiskit.providers.basic_provider import BasicProvider provider = BasicProvider() backend = provider.get_backend("sim_name")Die folgenden Beispiele zeigen die Migrationspfade der drei Simulatoren in
basicaer.-
Zustandsvektor-Simulator:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("statevector_simulator") statevector = backend.run(qc).result().get_statevector() # New path qc.remove_final_measurements() # no measurements allowed from qiskit.quantum_info import Statevector statevector = Statevector(qc) -
Einheits-Simulator:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("unitary_simulator") result = backend.run(qc).result() # New path qc.remove_final_measurements() # no measurements allowed from qiskit.quantum_info import Operator result = Operator(qc).data -
Qasm-Simulator:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("qasm_simulator") result = backend.run(qc).result() # New path from qiskit.providers.basic_provider import BasicProvider backend = BasicProvider().get_backend("basic_simulator") result = backend.run(qc).result() # or, directly from qiskit.providers.basic_provider import BasicSimulator backend = BasicSimulator() result = backend.run(qc).result()
-
-
Die Verwendung einer
PauliListals eine Beobachtungsgröße, die implizit in aSparsePauliOpmit dem Koeffizienten 1 beim Aufruf vonEstimator.run()ist veraltet. Stattdessen sollten Sie das Argument zuerst explizit mitSparsePauliOp(pauli_list)konvertieren.
Kritische Probleme
-
Wenn Sie Qiskit von
0.46.xauf1.0.0aktualisieren, können Sie nicht vor Ort aktualisieren. So werden z. B.pip install -U qiskitoderpip install --upgrade qiskitnicht unterstützt und werden wahrscheinlich nicht funktionieren. Umqiskitzu aktualisieren, wird empfohlen, eine neue virtuelle Umgebung (venv), um eine neue separate Umgebung für Qiskit>=1.0.0 zu erstellen. Zum Beispiel:python -m venv qiskit_1.0 source qiskit_1.0/bin/activate pip install qiskit>=1wird eine neue virtuelle Umgebung mit dem Namen
qiskit_1.0erstellt, die die neue Version von Qiskit enthält.