Skip to main content
IBM Quantum Platform

Qiskit SDK 1.4 Versionshinweise


1.4.6

Vorspiel

Qiskit v1.4.6 ist eine reine Sicherheitsversion und die letzte Version der Qiskit-Reihe v1.x.

Qiskit v1.x wird in keiner Form mehr gepflegt.

Sicherheitsprobleme

  • Die beiden Parser „ OpenQASM “ (qasm2.load() und qasm2.loads()) beenden nun den Vorgang mit einem RecursionError Fehler, wenn versucht wird, einen zu tief verschachtelten Ausdruck auszuwerten. Die maximal zulässige Tiefe wird bei der Übergabe an die Parser aus dem sys.getrecursionlimit() „ Python “ übernommen.

    Bisher konnten die Parser im Rust-Speicher beliebig rekursiv arbeiten, was schließlich dazu führte, dass der maximale Stapelspeicherplatz überschritten wurde und der Prozess mit einem Segfault abstürzte.


1.4.5

Vorspiel

Qiskit v1.4.5 ist die letzte Bugfix-Veröffentlichung der 1.4 Serie und markiert das Ende des Lebenszyklus der Serie. Der Support für die Sicherheitskorrekturen der Serie 1.4 wird bis zum 31. März 2026 fortgesetzt.

Fehlerkorrekturen

  • Die Behandlung von anonymen Bits in der Schaltkreisvisualisierung wurde korrigiert. Früher wurden Bits, die nicht mit einem Register verbunden waren, mit der Standarddarstellung Python angezeigt, während sie jetzt den Index in lesbarer Form zeigen. #14031 behoben.

  • Es wurde ein Problem in der Optimize1qGatesDecomposition wenn der Durchgang mit einem Gatter initialisiert wurde Target der 1q Gatter mit festen Winkelparametern enthält. Zuvor gab der Durchlauf möglicherweise Gatter außerhalb des Ziels aus, da nicht überprüft wurde, ob das Gatter im Ziel beliebige Parameterwerte unterstützt. Behoben #14743.

  • Falsches Verhalten im BasisTranslator pass, bei dem ein Multi-Qubit-Gatter innerhalb eines ControlFlowOp block die unterstützte Operation mit seinen lokalen Qubit-Indizes verfolgte, anstatt die absoluten Indizes des äußeren Schaltkreises zu verwenden. Behoben #13728.

  • Ein Fehler wurde behoben in HighLevelSynthesisbehoben, bei dem benutzerdefinierte Gatterkalibrierungen nicht erkannt wurden, wenn das Gatter innerhalb anderer Befehlsobjekte verschachtelt war. Teilweise behoben #13728.

  • Es wurde ein Fehler in der Schaltkreistext-Schublade behoben, der auftreten konnte, wenn Schaltkreisblöcke innerhalb von Kontrollflussoperationen auf anderen Registern definiert waren als der äußere Schaltkreis. Diese Situation kann zum Beispiel beim direkten Anhängen ControlFlowOp operationen direkt oder für Schaltungen nach der Transpilierung.


1.4.4

Vorspiel

Qiskit v1.4.4 ist ein kleineres Bugfix-Release für die v1.4.x Release-Serie.

Fehlerkorrekturen

  • ApplyLayout wird nun den Fall der Anwendung eines Null-Qubits korrekt behandeln Layout. Zuvor wurde behauptet, es sei kein Layout festgelegt worden, selbst wenn das Feld "layout" der Datei PropertySet gleich Layout() war.

  • Es wurde ein Fehler in der Methode QuantumCircuit.assign_parameters() der zu einem Fehler bei String-Eingaben und dem Argument strict=False führte. Siehe #13933 für weitere Einzelheiten.

  • Behoben wurde das name attribut der OrGate klasse korrigiert, so dass es jetzt auf "or" gesetzt ist, um dieses Tor eindeutig zu identifizieren. Zuvor war er fälschlicherweise auf "and" gesetzt, was es unmöglich machte, ihn von AndGate zu unterscheiden oder Synthese-Plugins zur Synthese eines OrGate. Behoben #14434

  • Es wurde ein Fehler im ElidePermutations transpiler-Pass, bei dem die Qubit-Zuordnung nicht korrekt aktualisiert wurde, wenn ein PermutationGates nicht korrekt aktualisiert wurde, was zu falschen Schaltungen und Aktualisierungen des Eigenschaftssatzes des Pass-Managers führte.

  • Ein Fehler im Programm PauliEvolutionSynthesisDefault und PauliEvolutionSynthesisRustiq plugins behoben, die beim Setzen von preserve_order=False das Attribut .synthesis des ursprünglichen Stromkreises veränderten. Das Verhalten der Plugins wurde wiederhergestellt, und der ursprüngliche Schaltkreis wird nun in der gesamten Transpilationspipeline beibehalten.

  • Es wurde ein Fehler behoben, der beim Export von Schaltungen mit Verzögerungsanweisungen unter Verwendung von 'ps' Einheiten nach QASM3 auftrat.

  • Ein Kompatibilitätsproblem mit der minimal unterstützten Version von rustworkx, 0.15, wurde behoben. Bei bestimmten Eingaben werden die VF2Layout und VF2PostLayout eine rustworkx-Methode verwendet, die in rustworkx 0.16.0 hinzugefügt wurde, was zu einem Fehler führte, wenn eine ältere rustworkx-Version verwendet wurde, die als unterstützt aufgeführt ist.

  • SabreLayout und SabreSwap gerät nicht mehr in Panik, wenn das Routing-Ergebnis auf einen Schaltkreis angewendet wird, der expr.Var objekte in einem verschachtelten Kontrollflussbereich verwendet.

  • Die Funktion der Schaltkreisbibliothek quantum_volume() wurde aktualisiert, um ein numpy.random.Generator als Eingabe für ihr seed Argument zu verwenden. Früher hätte ein solches Generator-Argument zu einer TypeError geführt.

  • Ein Fehler in den Funktionen der Schaltkreisbibliothek wurde behoben evolved_operator_ansatz(), qaoa_ansatz() und hamiltonian_variational_ansatz(), bei denen die Parameter eine komplexe Komponente von Null hatten. Dies war meist kein Problem, es sei denn, es wurde mit der Methode SymPy ParameterExpression.sympify() methode, die dann einen Fehler auslösen würde.


1.4.3

Vorspiel

Qiskit v1.4.3 ist ein kleineres Bugfix-Release für die v1.4.x Release-Serie.

Fehlerkorrekturen

  • Es wurde ein Fehler in DAGCircuit der dazu führte, dass Ausgabe Var knoten während deepcopy und Pickling zu Eingabeknoten wurden.

  • Es wurde ein Problem im BasisTranslator transpilerdurchgang, bei dem die globale Phase der DAG nicht korrekt aktualisiert wurde. Behoben #14074.

  • Es wurde ein Fehler in QPY (qiskit.qpy), bei dem Schaltungen mit Gattern der Klasse MCMTGate enthalten, nicht serialisiert werden konnten. Siehe #13965.

  • SabreLayout propagiert nun korrekt die name und metadata felder einer Schaltung korrekt weiter, wenn sie als gemeinsamer Layout- und Routing-Durchgang ausgeführt werden.

  • Es wurde ein Problem im SolovayKitaevSynthesis unitären Synthese-Plugin behoben, bei dem durch wiederholtes Ausführen des Plugins mit verschiedenen Basisgattern fälschlicherweise nur die Basisgatter des ersten Laufs wiederverwendet wurden. Das Problem wurde durch das Ignorieren der Basistore beim Zwischenspeichern von Basisapproximationen verursacht und ist nun behoben.

  • Es wurde ein Problem im SolovayKitaev transpiler-Durchgang, bei dem es zu einem Absturz kommen konnte, wenn eine 180-Grad-Drehung in der internen Rekursion auftrat, die nicht korrekt behandelt wurde.

  • Es wurde ein Problem im SolovayKitaev transpiler-Durchgang behoben, bei dem die generierte Annäherung eine Phase haben konnte, die um π\pi vom korrekten Wert abwich. Dies ist auf die interne SO(3)SO(3) Darstellung zurückzuführen, die eine zusätzliche Behandlung erfordert, um das richtige Vorzeichen der Qubit-Gate-Matrix zu erhalten. Behoben #9552

  • Die Fallback-Fehlerheuristik in VF2Layout und VF2PostLayoutdie verwendet wurde, als es keine gemeldeten Fehlerquoten gab, konnte früher Fehler größer als eins zuweisen und unvorhersehbare Auswirkungen auf die resultierenden Layout-Punktzahlen haben.


1.4.2

Vorspiel

Qiskit 1.4.2 ist ein Patch-Release, das Fehler aus der 1.4 Release-Serie behebt.

Neue Funktionen

  • Der Funktion wurde ein neues Flag trust_payload hinzugefügt qpy.load() funktion. Dies wird verwendet, um die Funktion zu zwingen, eine potenziell unsichere Nutzlast zu laden. Wenn die Nutzlast Folgendes enthält ScheduleBlock objekte (entweder eigenständig oder als Teil von QuantumCircuit.calibrations) und die symbolische Kodierung in der QPY-Datei auf sympy gesetzt ist, dann ist die Nutzlast potentiell unsicher und das Laden könnte die Ausführung von beliebigem Code ermöglichen. Da dieses Flag für die Steuerung der Deserialisierung von ScheduleBlock instanzen dient, die in Qiskit >= 2.0.0 nicht existieren, wird dieses Flag nur in Qiskit 1.4.x und nicht in Qiskit >= 2.0.0 existieren.

Anmerkungen zu Upgrades

  • Standardmäßig löst qpy.load nun eine QpyError aus, wenn es mit einer QPY-Nutzlast aufgerufen wird, die ein ScheduleBlock objekt enthält (entweder eigenständig oder als Teil von QuantumCircuit.calibrations), das sympy zur Kodierung symbolischer Ausdrücke verwendet. Der Grund dafür ist, dass die Nutzlast potenziell angreifbar ist und nur geladen werden sollte, wenn Sie dem Inhalt vertrauen. Wenn Sie sicher sind, dass die Nutzlast nicht bösartig ist, können Sie das neue Argument trust_payload von qpy.load auf True setzen, um das Laden der Nutzlast zu ermöglichen.

Sicherheitsprobleme

  • Es wurde eine Sicherheitslücke in qpy.load() beim Laden von Payloads, die sympy zur Serialisierung von ParameterExpression objekte und andere symbolische Ausdrücke. Dazu gehören potenziell alle QPY-Nutzdaten, die die QPY-Version < 10 und optional 10, 11 und 12 verwenden, je nach der im Serialisierungsschritt verwendeten symbolischen Kodierung (qpy.dump()).

Fehlerkorrekturen

  • Ein Fehler bei der Erzeugung der Basisapproximation für SolovayKitaev. Bisher schlug die Erzeugung diskreter Basisapproximationen mit generate_basis_approximations für eine Basis mit "sx" oder "sxdg" Gattern fehl. Dies wurde nun behoben.

1.4.1

Vorspiel

Qiskit 1.4.1 ist ein kleines Patch-Release, das einige Fehler in der 1.4 extended support series behebt.

Fehlerkorrekturen

  • Schaltkreise, die mit einem voreingestellten Passmanager kompiliert wurden, der von generate_preset_pass_manager() erstellt wurden, behalten nun korrekt ihr name attribut beibehalten, wie es auch bei transpile().

  • Ein Problem mit QPY 13 wurde behoben, das beim Serialisieren oder Deserialisieren eines ParameterExpression -Objekts auftrat, das durch den Aufruf ParameterExpression.subs() definiert wurde, um ein Parameter durch ein ParameterExpression. Zum Beispiel:

    from qiskit.circuit import Parameter
    
    a = Parameter("A")
    b = Parameter("B")
    expr = a + b
    c = Parameter("C")
    new_expr = c ** 3.14
    final_expr.subs({b: new_expr})

    Wenn Sie in früheren Versionen eine Serialisierung einer QuantumCircuit das einen Ausdruck wie diesen enthält, mit qpy.dump() enthielt, wurde bei der Verwendung von QPY 13 (der Standardeinstellung) eine AttributeError mit der Fehlermeldung ‘ParameterExpression’ object has no attribute 'name' ausgegeben. Dies wurde behoben, so dass die Ausnahme nicht mehr ausgelöst wird und Sie eine Nutzlast, die diese verschachtelten Objekte enthält, serialisieren und deserialisieren können ParameterExpression objekte enthält. Siehe #13879.


1.4.0

Vorspiel

Die Qiskit v1.4 Version ist die letzte kleinere Version für die v1.x Serie. Diese Version enthält minimale Funktionen und fügt in erster Linie neue Verwerfungswarnungen für API-Änderungen hinzu, die in der zukünftigen Hauptversion v2.0 erscheinen werden. Es ist vollständig kompatibel mit den Qiskit v1.3.x Versionen. Es wird dringend empfohlen, von v1.3.x auf v1.4 zu aktualisieren, damit Sie die Warnungen darüber sehen können, welche Schnittstellen sich mit Qiskit v2.0 ändern werden. Die v1.4.x Release-Serie wird weiterhin unterstützt und erhält 6 Monate lang Bugfixes und 1 Jahr lang Sicherheitskorrekturen. Die Korrekturen werden in Form von Patches veröffentlicht. Für weitere Details über den Veröffentlichungszeitplan und den Support-Zyklus siehe: qiskit-sdk-version-strategy, das den Veröffentlichungszeitplan detaillierter dokumentiert.

Schaltkreise Funktionen

Veraltete Schaltungen

  • Unterklassifizierung Register oder Bitoder einer Unterklasse davon (zum Beispiel, QuantumRegister oder Qubit) ist ab Qiskit v1.4 veraltet. Die Unterklassifizierung dieser Typen wurde von Qiskit nie explizit unterstützt, und ihre Bedeutung wurde nie definiert. In Qiskit v2.0 kann die Unterklassifizierung aufgrund technischer Beschränkungen unmöglich werden und wird mit Sicherheit nicht in einem Schaltkreis gespeichert werden. Dies ist darauf zurückzuführen, dass das Datenmodell zur Verbesserung der Leistung in den Rust-Raum verschoben wurde.

  • Der optionale Parameter dag im Konstruktor von DAGNode Unterklassen (nämlich DAGOpNode), der seit Qiskit v1.2 unbenutzt war und ignoriert wurde, ist nun ab Qiskit v1.4 veraltet und wird in Qiskit v2.0 entfernt werden.

  • Die Klasse Multiple-Control-Multiple-Target (MCMT) in MCMT ist nun veraltet und wird ersetzt durch MCMTGateersetzt, die eine eigene Gate unterklasse ist. Die Verwendung eines Gatters anstelle einer Schaltung ermöglicht es dem Compiler, das Objekt auf einer höheren Abstraktionsebene zu betrachten und ermöglicht die Verwendung mehrerer Synthese-Plugins.

  • Das qiskit.circuit.classicalfunction modul, und damit auch die ClassicalFunction klasse und die damit verbundenen classical_function() und BooleanExpression sind seit Qiskit v1.4 veraltet und werden in Qiskit v2.0 entfernt.

    Diese Änderung wird durchgeführt, um eine Abhängigkeit von der externen Bibliothek tweedledum zu vermeiden, die nicht mehr mit allen von Qiskit unterstützten Plattformen und Python Versionen kompatibel ist. Für eine ähnliche Funktionalität verwenden Sie bitte die PhaseOracle die eine Implementierung haben wird, die tweedledum nicht verwendet, und die BitFlipOracle , die in Qiskit v2.0 hinzugefügt wird.

    Bis BitFlipOracle hinzugefügt wird, kann ein Phasenumkehr-Orakel in ein Bitumkehr-Orakel umgewandelt werden, indem es auf das Ergebnis-Qubit konditioniert wird und Hadamard-Gatter vor und nach der Anwendung des Orakels angewendet werden, wie im folgenden Beispiel (wobei das Orakel auf qr_x und das Ergebnis auf qr_y liegt):

    from qiskit import QuantumRegister, QuantumCircuit
    from qiskit.circuit.library.phase_oracle import PhaseOracle
    
    bool_expr = "(x0 & x1 | ~x2) & x4"
    qr_x = QuantumRegister(4, "x")
    qr_y = QuantumRegister(1, "y")
    
    bit_flip_oracle = QuantumCircuit(qr_x, qr_y)
    phase_flip_oracle = PhaseOracle(bool_expr)
    controlled_phase_flip_oracle = phase_flip_oracle.control(1)
    bit_flip_oracle.h(qr_y)
    bit_flip_oracle.compose(controlled_phase_flip_oracle, qubits=[*qr_y, *qr_x], inplace=True)
    bit_flip_oracle.h(qr_y)
    
    print(bit_flip_oracle)

    Dies führt zu

              ┌───────────────┐     
    x_0: ─────┤0              ├─────
              │               │     
    x_1: ─────┤1              ├─────
              │  Phase Oracle │     
    x_2: ─────┤2              ├─────
              │               │     
    x_3: ─────┤3              ├─────
         ┌───┐└───────┬───────┘┌───┐
      y: ┤ H ├────────■────────┤ H ├
         └───┘                 └───┘

Veraltete Primitive

Anbieter-Deprecations

Synthese-Veraltungen

  • Die Signatur des Arguments atomic_evolution im Konstruktor der Klassen LieTrotter, ProductFormula, und SuzukiTrotter wurde in Qiskit v1.2 geändert, um die Visualisierung der Ausgangsschaltung zu verbessern. Die ältere Signatur ist nun zugunsten der neuen Alternative veraltet. Ab Qiskit v2.0 ist nur noch die neue Alternative gültig.

    Um zu migrieren, ändern Sie bitte den Callable von Callable[[Pauli | SparsePauliOp, float], QuantumCircuit] auf Callable[[QuantumCircuit, Pauli | SparsePauliOp, float], None].

Transpiler-Veraltungen

  • Die DAGOpNode.sort_key, DAGOutNode.sort_key, und DAGInNode.sort_key attribute sind veraltet und werden in der Qiskit v2.0 Version entfernt. Diese Attribute wurden ursprünglich als lexikographischer Schlüssel für die topologische Sortierung von Knoten in einer DAGCircuit. Der Schlüssel wird dafür jedoch nicht mehr verwendet, da die Sortierung jetzt intern im Rust-Code erfolgt. Wenn Sie dieses Attribut verwenden, können Sie den Schlüssel aus den anderen Attributen eines Knotens neu erstellen. Sie können zum Beispiel eine Funktion wie diese verwenden:

    def get_sort_key(node: DAGNode):
        if isinstance(node, (DAGInNode, DAGOutNode)):
            return str(node.wire)
        return ",".join(
            f"{dag.find_bit(q).index:04d}" for q in itertools.chain(node.qargs, node.cargs)
        )

    die eine Zeichenkette erzeugt, wie es der Sortierschlüssel tut.

  • Die folgenden Verwendungen des BackendProperties objekts in der Transpilationspipeline sind seit Qiskit v1.4 veraltet und werden in Qiskit entfernt v2.0:

    Die Klasse BackendProperties klasse ist seit Qiskit v1.2 veraltet, zusammen mit anderen Elementen aus dem BackendV1 workflow, und wird in Qiskit v2.0 entfernt. Der alternative Pfad für die Übermittlung von Hardware-Informationen an das Transpilationsargument ist die Target klasse, die mit dem Eingabeargument target festgelegt werden kann. Spezifische Anweisungseigenschaften, wie z. B. Gatterfehler oder Zeitdauer, können einer Target bei der Konstruktion durch die Target.add_instruction() methode hinzugefügt werden.

    Im Falle von generate_routing_passmanager() und generate_translation_passmanager()ist das Argument backend_properties optional und wird ersetzt, wenn das erforderliche Argument target ausgefüllt ist. Die Verwendung des Arguments kann in 1.x sicher entfernt werden, solange Sie ein Ziel übergeben haben, was die empfohlene Verwendung war.

  • Die Verwerfung von Pulse in Qiskit v1.3, beinhaltete Kalibrierungserstellungsübergänge wie RXCalibrationBuilder. Der NormalizeRXAngle pass ist eine Anforderung von RXCalibrationBuilderund wird daher in Qiskit v1.4 veraltet sein. Die Funktion rzx_templates() funktion im Kalibrierungsmodul ist ebenfalls veraltet, da sie in unserer Codebasis nicht verwendet wird.

Veraltete Visualisierungen

  • Die Parameter show_idle und show_barrier in den Zeitleistenschubladen sind ab Qiskit v1.4 veraltet. Die Alternativen sind die Parameter idle_wires und plot_barriers , die in Qiskit v1.1 eingeführt wurden und völlig gleichwertig sind. Die alten Parameternamen werden in Qiskit v2.0 entfernt.

  • In Qiskit v1.4 gibt die Funktion timeline drawer timeline_drawer() eine Verwerfungswarnung aus, wenn kein target angegeben wird, um die Dauer von Anweisungen zu ermitteln. Von Qiskit v2.0 an wird target benötigt und timeline_drawer() schlägt fehl, wenn es nicht angegeben wird.

  • Die Bereitstellung von Eingaben des Typs BackendV1 an das Argument backend von plot_gate_map(), plot_circuit_layout(), und plot_error_map() sind ab Qiskit 1.4 veraltet und werden in Qiskit 2.0 entfernt. Verwenden Sie stattdessen eine Instanz von BackendV2 stattdessen.

Versch. Einstellung von Unterstützung

  • Die Verwendung von Positionsargumenten im Konstruktor von Result ist ab Qiskit 1.4 veraltet und wird in Qiskit 2.0 deaktiviert. Bitte setzen Sie alle Argumente in der kwarg-Syntax, d.h.: Result(backend_name="name", ....). Darüber hinaus ist das Argument qobj_id veraltet und wird in Qiskit 2.0 nicht mehr verwendet. Es wird jedoch weiterhin möglich sein, qobj_id als generischen kwarg zu setzen, der im Metadatenfeld mit den anderen generischen kwargs landet.

Fehlerkorrekturen

Sonstige Anmerkungen

  • Die Übergabe von property_set als beliebiges Schlüsselwortargument an die run() methode einer Unterklasse von BasePassManager wird das Verhalten in Qiskit v2.0 ändern. Es wird derzeit an die internen Funktionen zur Umwandlung der Darstellung des Pass-Managers weitergeleitet, ebenso wie jedes beliebige Schlüsselwortargument für diese Methode. Ab Qiskit v2.0 wird die Option stattdessen verwendet, um den Seed der PropertySet für den Pipeline-Lauf gesetzt, und das Argument wird nicht an die Konvertierungsfunktionen weitergegeben.

    Dieser Hinweis betrifft nur Implementierer von Unterklassen von BasePassManager die ihre Implementierungen von _passmanager_frontend und _passmanager_backend so gewählt haben, dass sie ein Schlüsselwortargument namens property_set akzeptieren.

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