Skip to main content
IBM Quantum Platform

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 C3SXGate der dazu führte, dass es fehlschlug, wenn Gate.to_matrix() aufgerufen wurde. Die Gate-Matrix wird nun wie erwartet zurückgegeben.

  • Das QuantumCircuit.parameters ist nun korrekt leer, wenn das Attribut QuantumCircuit.copy_empty_like() für einen parametrischen Schaltkreis verwendet wird. Zuvor wurde ein interner Cache ohne Invalidierung kopiert. Fix #12617.

  • Korrektur des SolovayKitaev transpiler-Durchgang beim Laden von Grundannäherungen aus einer bestehenden .npy Datei. 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 GenericBackendV2 ermö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() eine n-Qubit-Operation auf einen Block von m -Qubits gelegt, wodurch die DAG in einen ungültigen Zustand versetzt wurde. Dieses Verhalten wurde behoben, und der Versuch wird eine DAGCircuitError.

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() oder QuantumCircuit.draw() bei Verwendung der Ausgabeoption mpl wurde behoben, bei dem das Programm hängen blieb, wenn der zu zeichnende Schaltkreis eine ControlFlow -Operation enthielt und die Option fold auf -1 (d.h. keine Faltung) gesetzt war. Behoben #12012.

  • Der EvolvedOperatorAnsatz behandelt jetzt korrekt den Fall, dass das Operator-Argument eine leere Liste ist. Zuvor hatte dies zu einem Fehler geführt.

  • Von nun an, EvolvedOperatorAnsatz keine Qregs mehr, wenn es null Qubits gibt, anstatt eine QuantumRegister instanz mit null Qubits. Dieses Verhalten steht im Einklang mit seiner Oberklasse QuantumCircuit.

  • Die Methode Instruction.repeat() verschiebt nun eine Menge condition zu den äußeren zurückgegebenen Instruction und lässt die inneren Gatter ihrer Definition unbedingt. Zuvor ließ die Methode ClassicalRegister instanzen 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 symengine eingefü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 einem BackendV2 argument aufgerufen wurde. Da das V2 Backend keine Hardware-Kanalfrequenzen meldet, wird in der generierten Zeichnung "no freq" angezeigt unter jeder Kanalbezeichnung.

  • Der VF2Layout pass würde eine Ausnahme auslösen, wenn er mit einer Target instanz ohne Konnektivitätseinschränkungen. Dies wäre bei Zielen von Aer 0.13 der Fall. Das Problem ist nun behoben.

  • Das Standard-Plugin init löste nicht korrekt ein TranspilerError wenn 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() und qasm2.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 2π2\pi 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 Attribut BackendConfiguration.supported_instructions angegeben waren, was der typische Ort ist, an dem Kontrollflussanweisungen in einem BackendConfiguration objekt 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 wie BasisTranslator immer noch die alten Regeln verwenden würden. Behoben #11958.

  • BasePassManager.run() wird nicht mehr die vorherige PropertySet in neue Workflows, wenn sie mehr als einmal aufgerufen werden. Zuvor wurden die gleichen PropertySet zur 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 FakeOpenPulse2Q backend. 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 Modul qiskit.tools) wurde aktualisiert und funktioniert nun wie erwartet. Die Funktion job_monitor() arbeitet jetzt mit Job instanzen. Die Funktionen backend_overview() und backend_monitor() sollten nun wie erwartet funktionieren.

  • InstructionDurations.from_backend() gibt nun eine Instanz einer beliebigen Unterklasse von InstructionDurations anstelle 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.

Anmerkung

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 zu qiskit.synthesis. Diese Funktion ermöglicht die Anwendung der Quanten-Shannon-Zerlegung auf beliebige Einheiten.

  • Ein neues qiskit.providers.basic_provider modul wurde eingeführt und ersetzt qiskit.providers.basicaer. Dieses Modul enthält Provider-Tools, die die des BasicAer Providers widerspiegeln, und bietet einen einzigen, nicht effizienten, zustandsvektorbasierten Simulator: BasicSimulator. Dieser Simulator basiert auf der BackendV2 schnittstelle und ist ausschließlich für Tests und einfaches Prototyping gedacht. Für fortgeschrittene Simulationsmöglichkeiten verweisen wir auf das Paket qiskit-aer . Migrationsrichtlinien finden Sie in der BasicAer deprecation note.

  • Die Target schnittstelle und die Transpiler-Pipeline unterstützen jetzt Zieldefinitionen mit num_qubits=None. Dies soll die Erstellung von Target-basierten Simulatoren mit einer flexiblen Anzahl von Qubits zu ermöglichen. Ein Ziel mit num_qubits=None enthält ausschließlich globale Anweisungen (mit qargs=None), und wenn es dem Transpiler übergeben wird, wird erwartet, dass der Transpiler die Größe der Schaltung nicht ändert. Diese Änderung in der Target erfordert künftige Transpilerdurchläufe, um den Fall zu berücksichtigen, dass target.num_qubits is None.

  • Eine neue Klasse, GenericBackendV2 wurde dem qiskit.providers.fake_provider modul hinzugefügt. Diese Klasse ist konfigurierbar und erstellt eine BackendV2 instanz, 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 ein Target objekt 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)
    Anmerkung

    Die 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-aer angebotenen Funktionen nutzen.

Anmerkungen zu Upgrades

  • Die für symengine erforderliche Mindestversion wurde auf >= 0.11 angehoben. Dies ermöglichte das Entfernen von Workarounds aus ParameterExpression.is_real() um einen Fehler in früheren Versionen von symengine zu beheben.

Hinweise zu veralteten Versionen

  • Die ScheduleBlock.scoped_parameters() und ScheduleBlock.search_parameters() methoden sind veraltet. Diese Methoden erzeugen Parameter objekte, 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 skopierten Parameter objekten. 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 Argument data der Funktion plot_histogram() visualisierungsfunktion ist jetzt veraltet. Die Unterstützung dafür wird in der Qiskit 1.0 Version entfernt werden. Wenn Sie ein Histogramm von einem QuasiDistribution, ProbDistributionoder eines Verteilungswörterbuchs zeichnen möchten, sollten Sie stattdessen die Funktion plot_distribution() funktion verwenden.

  • Das Paket qiskit-terra Python ist veraltet und wird ab Qiskit 1.0.0 keine Updates mehr erhalten. Wenn Sie qiskit-terra selbst installieren, wird dies nicht mehr für Qiskit>=1.0.0 aktualisiert. FutureWarning Wenn Sie qiskit ohne das Paket qiskit ausführen, wird beim Import von qiskit ausgegeben, um anzuzeigen, dass Sie das Paket qiskit nicht verwenden.

  • Die Verwendung des qiskit.Aer Objekts ist veraltet und wird in Qiskit 1.0 entfernt werden. Sie sollten stattdessen das gleiche Objekt aus dem Namensraum qiskit_aer verwenden, das einen sofortigen Ersatz darstellt.

  • Der Import von qiskit.providers.aer ist veraltet und wird in Qiskit 1.0 nicht mehr funktionieren. Sie sollten stattdessen von qiskit_aer importieren, das einen sofortigen Ersatz darstellt.

  • Die Ausführung von Impulsaufträgen auf Backends von qiskit.providers.fake_provider ist 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.synthesis ist veraltet und wird in Qiskit 1.0 entfernt werden. Die folgenden Objekte wurden verschoben:

  • Das Modul qiskit.tools.jupyter ist veraltet und wird in Qiskit 1.0.0 entfernt. Dieses Modul ist veraltet, da die Funktionalität dieses Moduls an das alte qiskit-ibmq-provider -Paket gebunden ist, das nicht mehr unterstützt wird und auch nur noch BackendV1. 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.monitor ist veraltet und wird in Qiskit 1.0.0 entfernt. Dieses Modul ist veraltet, da die Funktionalität dieses Moduls an das alte qiskit-ibmq-provider -Paket gebunden ist, das nicht mehr unterstützt wird und auch nur noch BackendV1.

  • Das Modul qiskit.tools.visualization ist veraltet und wird in Qiskit 1.0.0 entfernt. Dieses Modul war eine Weiterleitung vom ursprünglichen Standort des Visualisierungsmoduls von Qiskit und wurde nach qiskit.visualization in Qiskit 0.8.0 verschoben. Wenn Sie immer noch diesen Pfad verwenden, können Sie einfach Ihre Importe von qiskit.tools.visualization auf qiskit.visualization.

  • Das Modul qiskit.tools.events und das darin enthaltene Dienstprogramm progressbar() 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.tools ist 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.events und qiskit.tools.visualization) angegeben, wurden die Funktionen in diesem Modul nach qiskit.utils. Wenn Sie eine der Funktionen dieses Moduls verwenden, können Sie Ihre Importe von qiskit.tools auf qiskit.utils.

  • Das Modul qiskit.test ist 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.synthesis ist veraltet und wird in Qiskit 1.0.0 entfernt werden. Die folgenden Objekte wurden verschoben nach qiskit.synthesis:

    Die Klasse Quaternion wurde von qiskit.quantum_info.synthesis nach qiskit.quantum_info. Dieser Schritt hat keine Auswirkungen auf den üblichen Importpfad der Klasse, aber der Zugriff auf sie über qiskit.quantum_info.synthesis ist 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.qasm enthalten war, wurde veraltet. Sie wird in der Version von Qiskit 1.0.0 entfernt werden. Der veraltete OpenQASM 2 Parser wurde durch das qiskit.qasm2 modul ersetzt, das einen schnelleren und korrekteren Parser für OpenQASM 2 bietet.

  • Die Funktion qiskit.converters.ast_to_dag ist 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 (im qiskit.qasm modul, das veraltet ist) und konvertiert diesen direkt in eine DAGCircuit. 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 eine QuantumCircuit unter Verwendung der QuantumCircuit.from_qasm_file() oder QuantumCircuit.from_qasm_str() konstruktormethoden und dann die Konvertierung von QuantumCircuit in eine DAGCircuit mit circuit_to_dag().

  • Die QuantumCircuit.qasm() methode, die zur Erzeugung einer OpenQASM 2 Repräsentation des QuantumCircuit objekts wurde veraltet und wird in der Qiskit 1.0.0 Version entfernt. Die Website qasm2.dump() oder qasm2.dumps() funktionen, die eine ähnliche Funktionalität bieten, sollten stattdessen verwendet werden. Wenn Sie die Methode QuantumCircuit.qasm() methode verwenden, um eine mit Pygments formatierte Ausgabe zu erzeugen, sollten Sie sich stattdessen das eigenständige Paket openqasm-pygments ansehen, das diese Funktionalität bietet (als qasm2.dump() und qasm2.dumps() keine farbige pygments-Ausgabe liefern).

  • Die ParametricPulse basisklasse und Pulse sind nun veraltet und werden in Qiskit 1.0 entfernt. Diese beinhalten:

    Die Klasse wurde durch SymbolicPulse und die entsprechende Pulsbibliothek ersetzt. SymbolicPulse bietet bessere Leistung, Flexibilität und QPY-Unterstützung.

  • Der NoiseAdaptiveLayout transpiler-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 durch VF2Layout und VF2PostLayout ersetzt, die ein Layout auf der Grundlage der gemeldeten Geräuschmerkmale eines Backends festlegen.

  • Der CrosstalkAdaptiveSchedule transpiler 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 der BackendProperties nutzlast einer BackendV1 instanz. Da keine Backends diese Felder setzen, wurde der Pass veraltet.

  • Das qiskit.visualization.qcstyle Modul ist nun veraltet und wird in der Qiskit 1.0.0 Version entfernt werden. Stattdessen sollten Sie qiskit.visualization.circuit.qcstyle als 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 QuantumCircuit typ in call().

    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, QuantumCircuit in 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 die QuantumCircuit.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_settings
    • default_circuit_scheduler_settings

    Zusammen mit den Funktionen:

  • Die folgenden Werkzeuge in qiskit.utils wurden 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.algorithms und qiskit.opflow verwendet und werden nach der Entfernung von qiskit.algorithms und qiskit.opflow in Qiskit 1.0 entfernt.

  • Das qiskit.providers.fake_provider modul wurde in das Paket qiskit-ibm-runtime Python migriert. Aus diesem Grund sind die folgenden Elemente in der qiskit.providers.fake_provider ab Qiskit 0.46 veraltet und werden in Qiskit entfernt 1.0:

    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 GenericBackendV2 klasse ersetzt und sind ab Qiskit ebenfalls veraltet 0.46:

    Beispiel für die Migration zur neuen GenericBackendV2 klasse:

    # 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.extensions modul ist jetzt veraltet. Sie war seit der Veröffentlichung von Qiskit 0.45 zur Abschaffung vorgesehen. Die meisten Objekte wurden verschoben nach qiskit.circuit.libraryverschoben, darunter:

    Mit der Abschaffung der Objekte wurden auch die folgenden Schaltungsmethoden abgeschafft:

    • QuantumCircuit.diagonal,
    • QuantumCircuit.hamiltonian,
    • QuantumCircuit.isometry und QuantumCircuit.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 die transpile() funktion (mit den entsprechenden Transpile-Optionen) gefolgt von backend.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 Sampler semantisch äquivalent zu der veralteten execute() funktion. Die Klasse BackendSampler ist 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 einem SparsePauliOp in Estimator beobachtbaren Argumenten ist ab Qiskit 0.46 veraltet und wird in Qiskit 1.0 entfernt werden. Sie sollten explizit in eine SparsePauliOp mit SparsePauliOp.from_operator() konvertieren.

  • Die diskrete Impulsbibliothek ist jetzt veraltet und wird in einer zukünftigen Version entfernt werden. Diese beinhalten:

    Verwenden Sie stattdessen die entsprechende SymbolicPulse, mit get_waveform(). Verwenden Sie zum Beispiel anstelle von pulse.gaussian(100,0.5,10) die Adresse pulse.Gaussian(100,0.5,10).get_waveform().

    Man beachte, dass die Phase sowohl von Sawtooth als auch von Square so definiert ist, dass sich die Phase von 2pi2\\pi 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 stattdessen float, amp und angle .

  • Die Klasse ConfigurableFakeBackend klasse, 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 der GenericBackendV2 klasse verwenden, um ein ähnliches Backend für Tests zu erstellen.

  • Das Laden von Objekten der Bibliothek ScalableSymbolicPulse mit dem komplexen Parameter amp aus 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 Komplex amp automatisch in Float (amp, angle) umgewandelt. Die Änderung gilt für die Pulse:

    • Constant
    • Drag
    • Gaussian
    • GaussianSquare
  • Das qiskit.providers.basicaer modul und alle seine Klassen sind ab Qiskit 0.46 veraltet. Ihre Verwendung sollte durch das qiskit.quantum_info modul und das neue qiskit.providers.basic_provider modul ersetzt werden.

    Die Umstellung von der Verwendung von qiskit.providers.basicaer zu qiskit.providers.basic_provider kann 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 BasicProvider zu 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.

    1. 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)
    2. 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
    3. 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 PauliList als eine Beobachtungsgröße, die implizit in a SparsePauliOp mit dem Koeffizienten 1 beim Aufruf von Estimator.run() ist veraltet. Stattdessen sollten Sie das Argument zuerst explizit mit SparsePauliOp(pauli_list) konvertieren.

Kritische Probleme

  • Wenn Sie Qiskit von 0.46.x auf 1.0.0 aktualisieren, können Sie nicht vor Ort aktualisieren. So werden z. B. pip install -U qiskit oder pip install --upgrade qiskit nicht unterstützt und werden wahrscheinlich nicht funktionieren. Um qiskit zu 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>=1

    wird eine neue virtuelle Umgebung mit dem Namen qiskit_1.0 erstellt, die die neue Version von Qiskit enthält.

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.