Skip to main content
IBM Quantum Platform

Qiskit SDK 2.5 Versionshinweise


2.5.2

Vorspiel

Qiskit v2.5.2 ist ein Patch-Release, das Fehlerbehebungen für Probleme enthält, die seit der Veröffentlichung von v2.5.1 festgestellt wurden.

Fehlerkorrekturen

  • Ein kleiner Speicherverlust in den Suzuki-Trotter-Syntheseverfahren wurde behoben, durch den die Zuweisungen aller spärlichen Pauli-Strings während der gesamten Laufzeit des Programms beibehalten wurden. Behebt das Problem #16677.

  • Es wurde ein Fehler in der Symbolik-Engine behoben, durch den die Addition oder Subtraktion zweier Ausdrücke fälschlicherweise auf 0 optimiert werden konnte. Dies trat auf, wenn in beiden Ausdrücken dasselbe Symbol vorkam und die numerischen Teile den Wert 0 ergaben, z. B. (1 + x) + (-1 + x).

  • Kollisionen in festen Schichten in den Schaltkreis-Zeichnungsfenstern „Text“ und „ Matplotlib “, wenn ein Kontrollflusskörper auf Qubits wirkt, die relativ zum äußeren Schaltkreis permutiert sind, zum Beispiel circuit.append(BoxOp(body), [0, 2, 1]). Anweisungen innerhalb des Körpers werden nun entsprechend der äußeren Zeichnungsreihenfolge angeordnet, sodass sich im gezeichneten Layout überlappende Gates in separaten Ebenen platziert werden, anstatt übereinander gezeichnet zu werden. Problem Nr. 16510 behoben.

  • Es wurde ein Problem mit der Methode DAGCircuit.depth() behoben, die möglicherweise einen Panic-Fehler auslösen konnte, wenn sie nach dem Löschen des ersten ( Qubit oder Clbit falls sich keine Objekte Qubit im DAG befinden) im aufgerufen wurde DAGCircuit.

  • Es wurde ein Fehler behoben, bei OptimizeCliffordT dem der Durchlauf für Schaltkreise, die in eine Clifford+T-Basis transpiliert wurden und SXGate sowie ausschließen SXdgGate, einen Schaltkreis zurückgeben konnte, der nicht unitär äquivalent zu seiner Eingabe war.

  • Es wurden mehrere Fehler bei der Vereinfachung von behoben, ParameterExpression die zu falschen Ausdrücken führten.

    Behebt #16259. Behebt das Problem #16260. Behebt das Problem #16262. Behebt das Problem #16263.

  • Ein Nichtdeterminismus bei der Reihenfolge der Kantenentfernung in und DAGCircuit.remove_qubits() wurde behoben remove_clbits(). Dies führte dazu, dass später hinzugefügte Kanten nicht-deterministische Identifikatoren erhielten, was sich auf einige Durchlaufalgorithmen auswirkte. Problem Nr. 16655 behoben.

  • Es wurde ein Problem behoben, bei dem der SynthesizeRZRotations Transpiler-Durchlauf möglicherweise einen Panic-Fehler auslösen konnte, wenn das Argument synthesis_error auf bestimmte Werte gesetzt wurde. Problem Nr. 16540 behoben.

  • Ein potenzieller Segfault bei der Auswertung großer Objekte ParameterExpression wurde behoben. Problem Nr. 16676 behoben.

  • Die Methode DAGCircuit.substitute_node_with_dag() überträgt nun Variablendeklarationen auf DAG-Ebene (Eingabe-, erfasste und deklarierte Variablen sowie Stretches) korrekt vom Ersatz-DAG in den Ziel-DAG. Bisher wurden diese bei der Substitution weggelassen. Problem Nr. 15509 behoben.

  • Feste, nicht-deterministische VF2Layout Ausgabe optimization_level=2 bei einer Target symmetrischen Kopplungsabbildung. Aufgrund der nicht deterministischen Fließkommasummierung konnte der Durchlauf zuvor bei unterschiedlichen Durchläufen zu unterschiedlichen Ergebnissen führen. Problem Nr. 16490 behoben.

  • Es wurde ein Fehler behoben, bei StatePreparation.inverse() dem bei Objekten StatePreparation , die durch eine Ganzzahl und ein explizites Argument num_qubits angegeben wurden, die Anzahl der Qubits nicht beibehalten wurde. Problem Nr. 16430 behoben.


2.5.1

Vorspiel

Qiskit v2.5.1 ist eine neue Bugfix-Version der „ Qiskit SDK “.

Fehlerkorrekturen


2.5.0

Vorspiel

Qiskit v2.5.0 ist eine neue Feature-Version des „ Qiskit SDK “. Die Highlights dieser Version sind:

  • Erweiterte C-API und verbesserter Zugriff. Die C-API enthält viele neue Funktionen und Typen (siehe den Abschnitt „Funktionen der C-API“ weiter unten), insbesondere solche zur Untersuchung von Kontrollfluss und klassischen Ausdrücken. qiskit.capi Außerdem wurden ctypes Bindungen zur C-API hinzugefügt, um den Zugriff für die Fehlersuche zu vereinfachen.
  • Erste Unterstützung für den „Pass-Manager“ mit mehreren IR-Stufen. Eine neue MultiStagePassManager Funktion ermöglicht Kompilierungen, bei denen die Komplexität über mehrere IRs hinweg schrittweise verringert wird. Zukünftige Versionen werden die Multi-IR-Fähigkeiten von Qiskit erweitern.
  • Voreingestellte Pass-Manager für Clifford+T und PBC. Zwei neue Funktionen, generate_preset_clifford_t_pass_manager() und generate_preset_pbc_pass_manager(), bieten vorkonfigurierte Pipelines für die Ausrichtung auf Clifford+T- bzw. Pauli-basierte Berechnungsbasen (PBC). Dies ist ein erster Schritt hin zu einer leistungsfähigeren fehlertoleranten Kompilierung in Qiskit.
  • Neue Standardoptimierungen für den Zwei-Qubit-Transpiler. Die standardmäßige Optimierung der Zwei-Qubit-Resynthese in Qiskit (aktiviert auf den Stufen 2 und 3 in den voreingestellten Pipelines) nutzt nun einen neuen TwoQubitPeepholeOptimization Durchlauf. Im Vergleich zur bisherigen Kombination aus ConsolidateBlocks und UnitarySynthesis ist diese leistungsfähiger und besser geeignet, die Zerlegung mit der höchsten Wiedergabetreue auszuwählen.
  • Leistungsverbesserungen beim Transpiler. Beschleunigungen von „ 2-3x “ über benchpress verschiedene Schaltkreise hinweg sind typisch. Dies ist darauf zurückzuführen, dass mehrere Transpiler-Durchläufe nun Multithreading-Unterstützung bieten, sowie auf zahlreiche weitere Verbesserungen wie die oben erwähnte neue Zwei-Qubit-Synthese, algorithmische Verbesserungen in SabreLayout, Optimierungen in rustworkxsowie effizientere Routinen für Hashing, Speicherzuweisung und lineare Algebra.

Funktionen der C-API

Funktionen der Schaltungen

  • InstructionSo angepasst LinearFunction.inverse() , dass es eine LinearFunction zurückgibt, die die inverse Transformation darstellt, anstatt bei der Konstruktion einer undurchsichtigen zu scheitern.

  • QuantumCircuit.for_loop() akzeptiert nun ein expr.Var vom types.Uint Typ als loop_parameter Argument. Bei Verwendung in Form eines Kontextmanagers wird die Schleifenvariable automatisch als Variable input des Schleifenkörpers deklariert und steht innerhalb des Schleifengültigkeitsbereichs zur Verfügung. Zum Beispiel:

    from qiskit.circuit import QuantumCircuit, ClassicalRegister
    from qiskit.circuit.classical import expr, types
    
    qc = QuantumCircuit(1, 1)
    cr = ClassicalRegister(5, "reps")
    qc.add_register(cr)
    
    with qc.for_loop(range(5), expr.Var.new("a", types.Uint(32))) as v:
        qc.measure(0, 0)
        qc.store(expr.index(cr, v), qc.clbits[0])
  • TargetHinzugefügt wurde QuantumCircuit.estimate_fidelity(), womit die Genauigkeit der Ausführung einer Schaltung auf einem bestimmten geschätzt wird.

  • ClassicalRegister Objekte mit mehr als 65.535 Bits können nun im Ausdruckssystem qiskit.circuit.classical verwendet werden.

  • ParameterVector akzeptiert nun ein optionales uuid Konstruktorargument und macht seine Basisklasse UUID über das uuid Attribut „base“ zugänglich. Damit lassen sich Vektoren rekonstruieren, deren Elemente identisch sind.

Funktionen zur Quanteninformation

Funktionen des Transpilers

  • generate_preset_clifford_t_pass_manager()Es wurde eine neue Funktion hinzugefügt, die eine bequeme Möglichkeit bietet, einen voreingestellten Pass-Manager für die Clifford+T-Kompilierung zu erstellen.

    Sie sollten diese Funktion gegenüber transpile() oder generate_preset_pass_manager() mit einer Clifford+T-Basis bevorzugen, da sie Argumente bereitstellt, die speziell auf Clifford+T-Kompilationen zugeschnitten sind. Insbesondere stützt es ein Argument rz_synthesis_config , das die Synthese von RZ-Rotationen in die Clifford+T-Basis steuert.

  • StandardEquivalenceLibraryEs wurden Äquivalenzen für die Standardgatter C3SXGate und RC3XGate zur hinzugefügt.

  • generate_preset_pbc_pass_manager()Es wurde eine neue Funktion hinzugefügt, die es ermöglicht, einen voreingestellten Pass-Manager für die Kompilierung in eine PBC-Zwischenrepräsentation (Pauli-based computation) zu erstellen, bestehend aus PauliProductRotationGate und PauliProductMeasurement Objekten sowie Barrier, Reset, Delay, und Kontrollflussoperationen.

  • Der CommutativeCancellation Pass gibt nun ein XGate oder SXGate aus, wenn die erfasste X-Rotation ein geeignetes Vielfaches von π/2\pi/2 ist und sich das entsprechende Gate entweder im Target oder im eingehenden Schaltkreis befindet.

  • Über das transpiler_seed Feld in der Benutzerkonfigurationsdatei kann nun ein Standardwert für das seed_transpiler Argument von transpile() und generate_preset_pass_manager() festgelegt werden.

  • QISKIT_TRANSPILER_SEEDFür die seed_transpiler Argumente von transpile() und generate_preset_pass_manager() kann nun über die Umgebungsvariable ein Standardwert festgelegt werden, der Vorrang vor dem entsprechenden Schlüssel in einer Benutzerkonfigurationsdatei hat.

  • Dem FixedPoint Analyse-Durchlauf wurde ein neues Argument getter hinzugefügt. Dieser optionale Callback kann bereitgestellt werden, um einen Wert aus dem PropertySet abzuleiten, anstatt einen einzelnen Schlüssel direkt auszulesen.

  • Der Pass ConvertToPauliRotations unterstützt nun Rundgänge mit ControlFlowOp Objekten.

  • Der ConvertToPauliRotations Transpiler-Durchlauf wurde erweitert, um Schaltungen mit PauliProductRotationGate und PauliProductMeasurement Objekten zu verarbeiten. Diese Operationen werden bei der Konvertierung unverändert weitergegeben.

  • Die Transpiler „pass“ RemoveIdentityEquivalent und CommutativeOptimization „have“ wurden erweitert, um „gates“ verarbeiten PauliProductRotationGate zu können.

  • Der LitinskiTransformation Pass wurde erweitert, um Rotationsgates für einzelne Qubits ( RXR_X und RYR_Y ) sowie PauliProductRotationGate und PauliProductMeasurement Operationen zu unterstützen.

  • Einzel-Qubit-Rotationsgatter und PauliProductRotationGate Objekte mit Winkeln, die – bis auf die angegebene Näherung – ganzzahlige Vielfache von π/2\pi/2 sind, werden nun vom LitinskiTransformation Pass als Clifford-Gatter erkannt.

  • Dem LitinskiTransformation Pass wurde ein approximation_degree Argument hinzugefügt, das die zulässigen Annäherungen bei der Interpretation von nahezu-Clifford-Rotationen als Clifford-Gatter festlegt.

  • Ermöglicht matrixbasierte Überprüfungen zwischen PauliProductRotationGate und anderen matrixbasierten Gatterfunktionen in der CommutationChecker. Bisher lieferten diese Prüfungen immer das Ergebnis False.

  • TwoQubitControlledUDecomposer wird nun mit 8 statt 24 Einzelqubit-Gattern synthetisiert.

  • Der LitinskiTransformation unterstützt nun auch Schaltkreise mit PhaseGate und U1Gate Befehlen. RZGateBisher war das einzige akzeptierte parametrisierte Gatter.

  • Ermöglichte Multi-IR-Compiler-Workflows mithilfe des neuen MultiStagePassManager. Dieser Pass-Manager bietet einen stufenweisen Ausführungsablauf, bei dem in jeder Stufe entweder das IR beibehalten oder in ein anderes IR umgewandelt werden kann. Stufen können allgemein über die Task Schnittstelle (und die Basisklasse GenericPass) definiert werden, die zur Reduzierung des IR verwendet werden kann, oder über BasePassManager Objekte, wodurch sie mit bestehenden Pipelines kompatibel sind, wie sie beispielsweise von bereitgestellt werden generate_preset_pass_manager().

  • Die Funktionen generate_preset_pass_manager() und transpile() leiten nun das approximation_degree Argument an die CommutativeOptimization Transpiler-Passes und SubstitutePi4Rotations weiter. approximation_degree=NoneDa diese beiden Durchläufe nicht unterstützen, wird der Standardwert verwendet, 1.0 wenn None angegeben wird.

  • PauliDer CommutationChecker kann nun Kommutationen zwischen Standardgattern und Pauli-basierten Gattern wie PauliEvolutionGate, PauliProductRotationGate, PauliProductMeasurement, und effizient überprüfen, ohne auf matrixbasierte Überprüfungen zurückgreifen zu müssen.

  • Beim Sabre-Layout und -Routing (SabreLayout und SabreSwap) wird die lookahead Heuristik nun anhand der Anzahl der Schaltungsebenen statt anhand der Anzahl der Schaltungsgatter definiert. Dadurch wird die Verzerrung in der Heuristik verringert; bei schmalen Schaltkreisen könnte die bisherige Heuristik sehr weit entfernte Gatter mit dem gleichen Gewicht wie nahezu verlegbare Gatter berücksichtigen, während sie bei breiten Schaltkreisen (mit mehr als 40 Qubits) nicht in der Lage wäre, alle Gatter selbst in der einzigen Schicht hinter der Grenze zu erfassen.

  • Verbesserte Leistung bei CommutationChecker der Auswertung von Kommutationen zwischen PauliProductRotationGate und PauliProductMeasurement Objekten. Dies wird erreicht, indem man ihre Generatoren als Pauli-Terme mit einem einzigen Term darstellt und anhand dieser Darstellungen Kommutativitätsprüfungen durchführt.

  • Verbesserte Leistung des CommutativeOptimization Transpiler-Durchlaufs bei Schaltkreisen, die PauliProductRotationGate und PauliProductMeasurement Objekte enthalten.

  • Der CommutativeOptimization Transpiler-Durchlauf entfernt nun Gatter, die bis auf eine globale Phase mit der Identitätsfunktion äquivalent sind.

  • TwoQubitPeepholeOptimizationEs wurde ein neuer Transpiler-Durchlauf hinzugefügt, der die bisherige Kombination aus ConsolidateBlocks und UnitarySynthesis ersetzt, wenn optimization_level in den voreingestellten Compiler-Pipelines den Wert 2 oder 3 hat.

    Der neue einheitliche Durchlauf kann besser ermitteln, wann Zwei-Qubit-Blöcke neu synthetisiert werden können, um die geschätzte Genauigkeit der Schaltung zu verbessern, was zu qualitativ hochwertigeren Kompilierungen führt, insbesondere bei überkompletten Basen oder heterogenen Target Objekten. Zudem verfügt es über eine verbesserte Thread-basierte Parallelisierung der Analyse und Synthese.

Visualisierungsfunktionen

Hinweise zum Transpiler-Upgrade

  • Die transpile() Funktion nutzt nun einen anderen, effizienteren Compiler-Workflow bei der Kompilierung auf eine Clifford+T-Basis. In diesem Workflow werden nicht mehr die generischen Plugins für die unitäre Synthese verwendet, um Einzel-Qubit-Unitarien in Clifford+T-Sequenzen zu synthetisieren. Seit kurzem stützt sich das Verfahren darauf, die Codes in „ RZR_Z “-Gates zu kompilieren und diese direkt zu synthetisieren, was eine bessere Qualität und Laufzeitleistung ermöglicht. Infolgedessen haben die "unitary_synthesis_method" Argumente und "unitary_synthesis_plugin_config" keinen Einfluss mehr auf die Clifford+T-Synthese in transpile(). approximation_degreeStattdessen kann die Genauigkeit entweder global durch Festlegen des Parameters eingestellt werden oder durch Verwendung generate_preset_clifford_t_pass_manager() von, das das Argument bereitstellt rz_synthesis_config , um eine Konfiguration für die „ RZR_Z “-Synthese zu übergeben.

Verschiedene Hinweise zum Upgrade

  • Die erforderliche Mindestversion von „ NumPy “ lautet nun „ 2.0 “, entsprechend den Empfehlungen von SPEC 0.

  • Qiskit verfügt nun über eine offizielle Richtlinie zu Versionsabhängigkeiten, die in der Dokumentation für Mitwirkende im Repository nachverfolgt wird. Das ist:

    • NumPy und SciPy orientieren sich an den SPEC 0 -Richtlinien der wissenschaftlichen Python -Community (zwei Jahre Support);
    • Alle anderen Abhängigkeiten von „ Python “ und Rust unterliegen keinen weiteren Einschränkungen als der Plattformunterstützung;
    • Optionale, ausschließlich für den Build bestimmte sowie ausschließlich für Entwickler bestimmte „ Python “-Abhängigkeiten unterliegen keinen Einschränkungen und müssen nicht alle Laufzeitversionen von „ Python “ oder Host-Plattformen unterstützen.

Veraltete Funktionen in Circuits

  • Das CommutationChecker System verwaltet keinen internen Cache mit Kommutationsbeziehungen mehr. Die folgenden Elemente sind daher nun veraltet und werden in Qiskit entfernt: v3.0:

    • das cache_max_entries Argument des Konstruktors; die Einstellung hat derzeit keine Auswirkung.
    • clear_cached_commutations() Methode; der Aufruf dieser Methode hat keine Auswirkung.
    • die num_cached_entries() Methode; ihr Aufruf liefert immer den Wert 0.

Veraltete Funktionen in „Synthesis“

  • Einige Verhaltensweisen der Argumente von qs_decomposition() sind nun veraltet und werden in Qiskit v3.0 entfernt.

    • Die Einstellung opt_a1 von und opt_a2 ist nicht mehr erforderlich; die Funktion ermittelt automatisch, ob die Optimierungen angewendet werden können.
    • TwoQubitBasisDecomposerdecomposer_1q und decomposer_2q sollten jeweils Instanzen von OneQubitEulerDecomposer bzw. sein; die Verwendung beliebiger aufrufbarer Funktionen aus dem „ Python “ ist im Vergleich zum Rust-Kern nicht performant.

Änderungen am Build-System

  • qiskit-bindgen-cliDas im Repository enthaltene Tool zur Generierung von Bindings wurde von qiskit-bindgen-c in umbenannt. Das bevorzugte Makefile Rezept make c bleibt davon unberührt.

  • qiskit-cext-vtable``qiskit-bindgen-cli Es wurde ein check-abi Befehl hinzugefügt, der überprüfen kann, ob zwei Slot-Einträge (entweder aus qiskit-bindgen-cli show-slots oder in integriert) für die jeweiligen Versionsnummern Semver-kompatibel sind.

  • qiskit-bindgen-cli erhielt den show-slots Befehl, der eine Liste der Slot-Zuweisungen für die Laufzeitverknüpfung mit der C-API ausgibt (beispielsweise über das Qiskit-Paket „ Python -space“).

  • Die Mindestversion der Build-Abhängigkeit setuptools-rust wurde auf „ 1.13 “ angehoben, um das neue Extension(generated_files=...) Argument nutzen zu können.

  • Qiskit kann nun optional mit mimalloc als globalem Allokator kompiliert werden. Um die Verwendung von mimalloc zu aktivieren, setzen Sie die Umgebungsvariable QISKIT_BUILD_WITH_MIMALLOC=1. Diese Option kann entweder beim Erstellen des Pakets „ Python “ oder bei der Verwendung des Makefiles (make c) zum Erstellen einer eigenständigen gemeinsam genutzten Bibliothek verwendet werden.

  • Die minimal unterstützte Rust-Version (MSRV) für die Kompilierung von Qiskit aus dem Quellcode wurde von 1.85 auf 1.87 erhöht. Rust 1.87 musste aktualisiert werden, um die neuesten Versionen unserer Upstream-Abhängigkeiten zu installieren. Insbesondere benötigt „nalgebra“ 0.34 die Rust-Bibliothek „ 1.87 “.

  • Die in den Testanforderungen angegebene Mindestversion von stestr wurde von 2.0 auf 3.2.0 angehoben. Dies geschah, um neue Funktionen von stestr, insbesondere den stestr history Befehl, in den Testjobs des Continuous-Integration- Python s zu nutzen.

Bekannte Probleme

  • Qiskit v2.2 und v2.3 können unlesbare QPY-Dateien für Schaltkreise erzeugen, die ein ParameterExpression enthalten, bei denen alle darin enthaltenen Parameter Instanzen im endgültigen Ausdruck aufheben. Wenn beispielsweise der Ausdruck 0*x + 1.5 in einem Schaltkreis vorkommt, erzeugen sowohl Qiskit v2.2 als auch v2.3 eine QPY-Datei, die aufgrund von Fehlern bei der QPY-Generierung von keiner Qiskit-Version gelesen werden kann, einschließlich dieser beiden selbst und v2.4.

    Dieser Fehler tritt (zumindest in Qiskit v2.4 ) in der Regel als QpyError mit einer Meldung wie „malformed expression: stack was empty before expression completed“ auf.

  • Von qiskit-terrav0.24 und früheren Versionen erzeugte QPY-Dateien können Instanzen definieren ParameterVector , deren Elemente nicht miteinander verbundene Parameter.uuid Attribute aufweisen, die nicht vollständig hin- und zurückübertragen werden können. Vor dieser Version von Qiskit gab QPY eine Warnung aus, wenn es ein implizites ParameterVector Element erkannte, das nicht vollständig rekonstruiert worden war. QPY gibt in dieser Situation keine Warnung mehr aus.

    Um das gefährliche Verhalten zu beobachten, sind alle folgenden Voraussetzungen erforderlich:

    • Sie laden zwei separate QPY-Circuit-Payloads (in derselben Datei oder in separaten Dateien), die mit qiskit-terrav0.24 oder einer früheren Version erstellt wurden.
    • ParameterVectorDie beiden Schaltungen verwenden ParameterVectorElement Instanzen, die von derselben abgeleitet sind.
    • In einer Schaltung wird ein bestimmtes Element des Vektors verwendet, in der anderen hingegen nicht.
    • Sie versuchen, das direkt aus der Schaltung, in der es verwendet wurde, deserialisierte ParameterVectorElement Element mit demselben Elementindex zu vergleichen, das jedoch über die ParameterVectorElement.vector Rückreferenz eines anderen Elements aus einer Schaltung abgerufen wurde, in der das verglichene Element nicht verwendet wird.

    Die Warnung wurde entfernt, da es sich im aktuellen Qiskit weitaus häufiger um ein Fehlalarm handelt, als dass sie auf ein tatsächlich festgestelltes Problem hinweist. Qiskit- v2.5 s und höher erzeugen tatsächlich ein implizites ParameterVector Array, dessen Elemente zwischen den Schaltkreisen als gleichwertig verglichen werden.

Sicherheitsprobleme

  • Die beiden Parser „ OpenQASM “ (qasm2.load() und qasm2.loads()) beenden nun den Vorgang mit einem RecursionError , wenn versucht wird, einen zu tief verschachtelten Ausdruck auszuwerten. Die maximal zulässige Tiefe wird aus dem „ Python “ sys.getrecursionlimit() am Einstiegspunkt in die Parser entnommen.

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

Fehlerkorrekturen

  • BarrierEs wurde ein Problem TranspilerError behoben ConstrainedReschedule , bei dem beim Neuzuweisen eines Schaltkreises, der ein enthält, ein ausgelöst wurde. Problem Nr. 16135 behoben.

  • synth_cz_depth_line_mr() Löst nun bei fehlerhaften Eingaben einen „ Python “-Fehler ValueError aus, anstatt einen „Rust“-Panic. Problem Nr. 16152 behoben.

  • Ein Fehler bei der Zusammensetzung virtueller Permutationslayouts (implizite Permutationen, die am Ende des Schaltkreises angewendet werden) in ElidePermutations und StarPreRouting wurde behoben.

  • ConstrainedReschedule wird nicht mehr ausgelöst AttributeError , wenn das optionale target Argument nicht angegeben wird. Siehe Nr. 16245.

  • CRXGateEs wurde ein Fehler behoben, CommutationChecker der bei der Auswertung der Kommutativitätsbeziehungen zwischen den Gattertypen mit kontrollierter Rotation, CRYGate und CRZGate sowie anderen Standardgattern auftrat. Insbesondere wurde das Verhalten der Durchgänge CommutationAnalysis, CommutativeCancellation, CommutativeOptimization und qk_transpiler_pass_standalone_commutative_cancellation() bei Vorhandensein solcher Gatter korrigiert.

    Problem Nr. 16164 behoben.

  • Es wurde ein Fehler behoben, CSdgGateInverseCancellation bei dem CSGate Paare mit vertauschten Qubit-Argumenten nicht einheitlich storniert wurden. Zuvor wurde eine Sequenz von „ CS−CS†CS-CS^\dagger “ (mit umgekehrten Qubit-Argumenten) abgebrochen, „ CS†−CSCS^\dagger-CS “ jedoch nicht. Nun werden beide regelmäßig abgesagt.

    Problem Nr. 15855 behoben.

  • Es wurde MultiplierGate so angepasst, dass bei der Standardzerlegung die gewünschte Anzahl an Ergebnis-Qubits erhalten bleibt. Bisher wurde dieses Argument ignoriert, und die Zerlegung erfolgte stets unter Verwendung der doppelten Anzahl an Zustandsqubits für die Ergebnisqubits. Problem Nr. 16168 behoben.

  • Ein Programmabsturz wurde behoben, der auftrat RemoveIdentityEquivalent , wenn die globale Phase des Schaltkreises Objekte enthielt ParameterVectorElement . Die Nachricht lautete:

    Der Zeiger kann nicht in den Heap von „ Python “ geklont werden, ohne dass der Thread angehängt ist.

    Siehe Nr. 16053.

  • latexBei der Schaltkreisvisualisierung wird für Winkel, die innerhalb der Toleranz von π/k\pi/k liegen, bei ganzzahligen kk kein überflüssiges führendes 1 mehr ausgegeben (beispielsweise 1π/2 lautet nun π/2), einschließlich der Ausgabemodi, mpl und qasm .

    Behebt das Problem #16170.

  • Es wurde ein Fehler behoben qpy.load() , der bei QPY-Versionen >= 13 auftrat, bei denen Delay Anweisungen mit ganzzahligen Laufzeiten bei der Deserialisierung zu falschen Typen führen konnten. Dies könnte dazu führen, dass späterer Code Fehler auslöst, beispielsweise qasm3.dumps_experimental() die Fehlermeldung „Parameterwert konnte nicht analysiert werden“. Weitere Einzelheiten finden Sie unter Nr. 16076.

  • Es wurde ein Fehler behoben Statevector.evolve() , bei dem der Eingabe-Zustandsvektor direkt geändert wurde, wenn der Befehl eine globale Phase aufwies. Siehe Nr. 15750.

  • Stellen Sie sicher, dass es nicht zu einer Subtraktionspanik durch Unterlauf in ConstrainedReschedule. kommt. Problem Nr. 16231 behoben.

  • Es wurde ein Fehler behoben, UnrollForLoops bei dem beim Entrollen einer statischen QuantumCircuit.for_loop() Funktion, deren Körper einen Wert ungleich QuantumCircuit.global_phase Null enthielt, eine zusätzliche Kopie der Körperphase hinzugefügt wurde.

    Problem Nr. 16185 behoben.

  • VF2Layout und VF2PostLayout wird nicht mehr in Panik geraten und melden: „Float-Werte dürfen nicht ‚nan‘ zurückgeben“, wenn Anweisungen auftauchen, bei denen Fehler gemeldet werden, die als 1.0.

  • Das Problem, dass bei jedem Anruf immer ein Alarm ausgelöst CircuitError wurde, wurde behoben LinearFunction.inverse() . Siehe Nr. 16184.

  • Es wurde ein Problem behoben, bei dem das transpile_optimization_level Feld „Benutzerkonfigurationsdatei“ beim Aufruf von generate_preset_pass_manager()… nicht berücksichtigt wurde. transpile()Bisher war davon nur betroffen.

  • plot_bloch_vector() verändert list die Eingaben nicht mehr.

  • CouplingMap ignoriert nun Kanten, die ein Qubit mit sich selbst verbinden, und gibt diesbezüglich eine Warnung aus. Bisher wurden diese fälschlicherweise stillschweigend akzeptiert, was je nach Kopplungsgraph zu weitreichenden Fehlern im Code führen konnte.

  • Es wurde korrigiert dagdependency_to_circuit() , damit die globale Phase der Schaltung während der Umwandlung korrekt erhalten bleibt. Problem Nr. 16166 behoben.

  • Es wurde korrigiert BitArray.bitcount() , sodass ungenutzte Füllbits im Speicher für gepackte Bytes ignoriert werden. Siehe Nr. 16173.

  • Es wurde ein Fehler behoben, CommutationChecker durch den bestimmte Rust-basierte Gatter, wie beispielsweise das UnitaryGate, die Überprüfung der Matrixgröße umgehen und die Berechnung großer Matrizen auslösen konnten.

  • Das Problem, dass die global_phase. nicht kopiert wurde, wurde behoben circuit_to_dagdependency() . Siehe Nr. 14537.

  • clifford_6_4()Die Vorlagen, rzx_xz(), rzx_zz1(), rzx_zz2(), und rzx_zz3() wurden angepasst, sodass TemplateOptimization diese nun akzeptiert und anwendet. Jede dieser Vorlagen implementiert die Identität in ihrem Gate-Inhalt nur bis zu einer globalen Phase, es fehlte jedoch das Kompensationsfeld global_phase , was TemplateOptimization dazu führte, dass sie bei jedem Durchlauf stillschweigend abgelehnt wurden. Siehe Nr. 14538.

  • Es wurde ein Fehler behoben CommutativeCancellation , bei dem die globale Phase durch „ −π-\pi “ falsch verschoben wurde, wenn eine „ 2π2\pi “-Rotation mithilfe von „“ PhaseGate oder U1Gate„“ akkumuliert wurde. Problem Nr. 16377 behoben.

  • Es wurde korrigiert Commuting2qGateRouter , sodass nun die globale Phase der Eingangsschaltung beibehalten wird, anstatt sie beim Zusammensetzen der angesammelten, noch nicht weitergeleiteten Operationen erneut hinzuzufügen. Problem Nr. 16205 behoben.

  • Es wurde ein Problem behoben, ConsolidateBlocks bei dem die Auswahl der Basisgatter nicht immer deterministisch war, wenn der Basissatz mehrere parametrische oder mehrere nichtparametrische 2-Qubit-Gatter enthielt. Dies könnte dazu führen, dass die transpilierten Schaltkreise von Durchlauf zu Durchlauf unterschiedlich ausfallen.

  • Fest ForLoopOp , mit negativen ganzen Zahlen in seinem Indexsatz. Zuvor war ein OverflowError aufgeworfen worden. Siehe Nr. 16412.

  • const size_t *Nur in Qiskit v2.5.0rc1 wurde der Typ QkLoopElements der C-API fälschlicherweise mit dem elements Member. aufgeführt. Dies dient nun const ptrdiff_t * dazu, negative Werte zu berücksichtigen.

  • force_consolidate=TrueEs wurde ein Fehler behoben, ConsolidateBlocks der auftrat, wenn die Blöcke und Läufe nicht zusammengefasst wurden, wenn die Basisgatter die Auswahl eines Zerlegers nicht zuließen.

  • Es wurde korrigiert Initialize.gates_to_uncompute() , sodass nun eine Schaltung mit der richtigen Anzahl an Qubits zurückgegeben wird, wenn das Gatter in ganzzahliger Form konstruiert wurde (z. B. Initialize(1, num_qubits=2) ). Problem Nr. 16413 behoben.

  • Initialize.inverse()Eine unklare Fehlermeldung in wurde behoben; nun wird beim Aufruf sofort ein Fehler ausgelöst, da die Anweisung nicht invertierbar ist.

    Siehe #15595.

  • QkTranspileOptionsEin Problem mit den qk_transpile() C-API-Funktionen und qk_transpile_stage_optimization() bei der Verwendung von optimization_level 3 in der wurde behoben. Bisher hat die interne Logik zur Verfolgung des Mindestwerts den DAG auch dann nicht aktualisiert, wenn ein besserer Schaltkreis gefunden wurde. Dies führte dazu, dass eine Schaltung zurückgegeben wurde, deren Tiefe und Größe nicht korrekt optimiert worden waren.

  • Ein Fehler im Transpiler-Durchlauf OptimizeAnnotated wurde behoben, bei dem Steuerungsmodifikatoren mit offenen Steuerelementen nicht korrekt kombiniert wurden. Siehe Nr. 16410.

  • pickleParameterExpression Instanzen mit ausgelöschten Variablen (wie x - x) behalten nun auch nach einem Rundlauf durch QPY und die Referenz auf x bei.

  • ParameterExpression Instanzen, deren Auswertungsergebnis ein reiner Wert ist (wie z. B. 0*x + 2), durchlaufen nun erfolgreich den Rundlauf durch QPY und pickle.

  • Es wurden die Kommutativitätsprüfungen zwischen zwei PauliProductMeasurement Befehlen korrigiert, die auf dasselbe klassische Bit zugreifen; zuvor wurde dabei die beobachtbare Schreibreihenfolge nicht berücksichtigt.

  • Es wurde ein Problem bei der Serialisierung von PauliProductMeasurement und PauliProductRotationGate in QPY behoben, bei dem die Pauli-Operatoren falsch behandelt wurden, was zu einer Beeinträchtigung der Kompatibilität mit früheren Qiskit-Versionen führte. Siehe #16099.

  • Es qasm3.dump_experimental() wurde ein Fehler behoben, bei dem dumps_experimental() für in ms… angegebene Verzögerungen fälschlicherweise ein us Suffix ausgegeben wurde. Problem Nr. 16097 behoben.

  • psDie Umrechnung in qasm3.dump_experimental()``ns und dumps_experimental() bei der Ausgabe von in angegebenen Verzögerungen wurde korrigiert. Problem Nr. 16097 behoben.

  • Es wurde ein Fehler behoben synth_qft_line() , sodass Schaltungen mit 32 oder mehr Qubits nun korrekt synthetisiert werden.

  • Es wurde ein Problem behoben, bei dem die mehrmalige Ausführung des SynthesizeRZRotations Transpiler-Durchlaufs mit unterschiedlichen Fehlerbudgets zu falschen Ergebnissen führen oder interne Panikfehler auslösen konnte.

    Siehe #16385.

  • TemplateOptimizationDie Behandlung der globalen Phase in wurde korrigiert; zuvor wurde diese stillschweigend auf die globale Phase des Eingangsschaltkreises (Null) zurückgesetzt, ohne die globalen Phasen der Vorlagen zu berücksichtigen.

    Behebt #14537.

  • Es wurde ein Fehler behoben QuantumCircuit.compose() , der auftrat, wenn front=True „raising“ ValueError in Verbindung mit einer expliziten qubits Zuordnung verwendet wurde. Siehe Nr. 15834.

  • Es wurde ein Fehler im Transpiler-Durchlauf CommutativeOptimization behoben, bei dem Paare von XXPlusYYGate Gatteroperationen, die auf dieselben Qubits wirkten, jedoch in umgekehrter Reihenfolge, fälschlicherweise vereinfacht werden konnten. Siehe Nr. 16161.

  • Es wurde ein Fehler behoben, BasisTranslator bei dem in einer Schaltung mit verschachtelten Kontrollflussoperationen die berechneten Transformationen in den Blöcken übersprungen wurden.

    Siehe #13162, #14025 und #15734.

  • Die QPY-Deserialisierung gibt beim Laden einer Schaltung, die einige, aber nicht alle Elemente einer ParameterVector… verwendet, keine Warnung mehr aus.

  • Behebt ein Problem, bei dem der LightCone Durchlauf bei umfangreichen oder komplexen Operationen aufgrund von Indexfehlern oder Speicherausfällen fehlschlug. Die Probleme #15021 und #13828 wurden behoben.

  • nalgebraEin Problem bei der Schur-Zerlegung für bestimmte Matrizen wurde behoben, indem diese unter Verwendung von faer anstelle von neu implementiert wurde. transpile()qs_decomposition()Das Problem kann auftreten, wenn die Quanten-Shannon-Zerlegung über sowie über den UnitarySynthesis Transpiler-Durchlauf oder über ausgeführt wird.

    Siehe Nr. 15870.

  • QuantumCircuit.remove_final_measurements() gibt keine irreführende Warnung mehr aus, dass versucht wird, Register hinzuzufügen, wenn die Funktion in einer Schaltung mit festgelegter Anordnung aufgerufen wird.

  • Schaltkreise mit Reset Befehlen können nun anhand eines GenericBackendV2. eingeplant werden.

  • random_clifford_circuit()Ein Nichtdeterminismus in wurde behoben, auch wenn ein Startwert angegeben wurde. Siehe Nr. 16138.

Leistungsverbesserungen

  • Die von TwoQubitBasisDecomposer und TwoQubitWeylDecomposition verwendete interne Bibliothek für lineare Algebra heißt nun „nalgebra “. Dies ermöglicht Stack-Zuweisungen und optimierte Operationen für kleine Matrizen. Beide Durchläufe sind nun leistungsfähiger und beanspruchen weniger Speicher. Weitere Einzelheiten finden Sie unter #15928 und #15960.

  • Die Leistung der Optimierungsstufen 1, 2 und 3 beim Kompilieren in Clifford+T-Basissätze wurde verbessert, insbesondere bei sehr tiefen Schaltkreisen. Bisher wurde die Tiefe des Schaltkreises als Indikator dafür herangezogen, ob in den Optimierungsschritten ein fester Punkt erreicht wurde; dieser Indikator wurde nun (je nach Optimierungsschritt) durch die RZ- und T-Zählwerte ersetzt. Das ist nicht nur deutlich schneller, sondern spiegelt auch die Zielkennzahl besser wider. Weitere Informationen finden Sie unter Nr. 16218.

  • Der ConsolidateBlocks Transpiler-Durchlauf und die zugehörige C-API-Funktion qk_transpiler_pass_standalone_consolidate_blocks() sind nun multithreadfähig, was zu einer verbesserten Laufzeitleistung führt. Weitere Einzelheiten finden Sie unter Nr. 16230.

  • Es wurde eine Leistungsverschlechterung behoben, die ausschließlich in „ v2.5.0rc1 “ auftrat, wenn und VF2PostLayout auf großen Kopplungskarten mit sehr hoher Konnektivität ausgeführt VF2Layout wurden.

  • PauliProductRotationGate.to_matrix()Die Laufzeit der Methode wurde verbessert. Bei „ 10‑qubit “-Pauli-Operatoren führt dies zu einer Beschleunigung um das ~500-Fache.

  • Die vorkompilierten „Wheels“ auf PyPI werden nun unter Verwendung von „mimalloc“ als globalem Allokator erstellt. Dadurch werden die Laufzeitleistung und die Speicherauslastung von Qiskit verbessert. Weitere Informationen finden Sie unter #16024.

  • Der Optimize1qGatesDecomposition Transpiler-Durchlauf und seine C-API-Funktionen qk_transpiler_pass_optimize_1q_sequences() und qk_transpiler_pass_standalone_optimize_1q_sequences() sind nun multithreadfähig, was zu einer verbesserten Laufzeitleistung führt. Weitere Informationen finden Sie unter Nr. 15567.

  • Der CommutationAnalysis Transpiler-Durchlauf läuft nun multithreaded, was zu einer verbesserten Laufzeitleistung führt. Weitere Informationen finden Sie unter Nr. 16014.

  • Der CommutativeCancellation Transpiler-Durchlauf ist nun teilweise intern multithreaded (wenn die Kommutationsanalyse ausgeführt wird). Dies hat zu einer Verbesserung der Laufzeitleistung geführt. Weitere Informationen finden Sie unter Nr. 16014.

  • Die C-API-Funktion qk_transpiler_pass_standalone_commutative_cancellation() ist nun intern teilweise multithreaded (wenn sie die Kommutationsanalyse durchführt). Dies hat zu einer Verbesserung der Laufzeitleistung geführt. Weitere Informationen finden Sie unter Nr. 16014.

  • Der UnitarySynthesis Transpiler-Durchlauf wird nun bei Verwendung des Standard-Synthese-Plugins multithreaded ausgeführt, was zu einer verbesserten Laufzeitleistung führt. Weitere Informationen finden Sie unter Nr. 16275.

  • Die C-API-Funktion qk_transpiler_pass_standalone_unitary_synthesis() ist nun intern multithreadfähig. Dies führt zu einer verbesserten Laufzeitleistung. Weitere Informationen finden Sie unter Nr. 16275.

  • BitArray.bitcount() verwendet nun intern einen effizienteren „ NumPy “-Aufruf, der bei 100 Qubits eine Beschleunigung von etwa 5x erzielt. Weitere Einzelheiten finden Sie unter Nr. 15836.

  • ParameterVector wurde in Rust neu implementiert. Die Erstellung dauert nun etwa fünfmal schneller, und die Vektorelemente benötigen deutlich weniger Speicherplatz.

  • Das Sabre-Routing (verwendet in SabreSwap und SabreLayout) aktualisiert nun seine Extended-Set-Schichtstruktur direkt an Ort und Stelle, anstatt sie bei jedem gerouteten Gate neu aufzubauen. Dies stellt eine erhebliche Leistungssteigerung für umfangreiche Schaltkreise mit dichten Schichtstrukturen dar; ein Schaltkreis mit einem Quantenvolumen von 115 Qubits lässt sich nun in etwa zwei Dritteln der bisherigen Zeit verlegen. Weitere Einzelheiten finden Sie unter Nr. 14912.

  • Die Laufzeit von SubstitutePi4Rotations wurde in praktischen Anwendungsfällen verbessert. In der Regel wird nur ein sehr kleiner Teil der Rotationsgatter durch entsprechende feste Gatter ersetzt, und es ist deutlich schneller, die Operationen an Ort und Stelle zu ersetzen, als den DAG neu aufzubauen. Bei Schaltungen mit einer großen Anzahl von Gatterelementen kann dies die Laufzeit erheblich verkürzen, beispielsweise um mehr als das 10x bei einer QSVT-Schaltung mit 43 Millionen Gatterelementen. Weitere Details und Benchmark-Ergebnisse finden Sie unter #16217.

  • qk_transpiler_pass_standalone_split_2q_unitaries()Der Transpiler, BasisTranslator UnitarySynthesis, und Split2QUnitariessowie die entsprechenden C-API-Funktionen qk_transpiler_pass_standalone_basis_translator(), qk_transpiler_pass_split_2q_unitaries()qk_transpiler_pass_standalone_unitary_synthesis() , und haben intern die beim Erstellen ihrer Ausgabe DAGCircuit verwendete topologische Sortierung geändert, was die Laufzeitleistung der Durchläufe verbessert, da dadurch der Overhead der zuvor verwendeten lexikografischen topologischen Sortierung vermieden wird. Weitere Einzelheiten finden Sie unter Nr. 15987.

  • transpile()Der neue TwoQubitPeepholeOptimization Transpiler-Durchlauf wird nun als Teil der voreingestellten Durchlauf-Manager verwendet, die von generate_preset_pass_manager() generiert und intern von für die Optimierungsphase in den Optimierungsstufen 2 und 3 genutzt werden. Dies ersetzt die bisherige Verwendung der ConsolidateBlocks Transpiler-Durchläufe und UnitarySynthesis in diesen Ebenen während der Optimierungsphase zur Durchführung der Peephole-Optimierung. Der neue Durchlauf bietet eine verbesserte Laufzeitleistung und bessere, auf die Wiedergabetreue abgestimmte Heuristiken für die Synthese.

  • Der interne Hash-Algorithmus, der für die „indexmap“-Typen in Rust verwendet wird, wurde geändert, sodass nun „foldhash“ anstelle der zuvor verwendeten Bibliothek „ahash“ zum Einsatz kommt. Dies hat zu Geschwindigkeitssteigerungen bei einigen Funktionen geführt, die intern intensiv auf Indexmap zurückgreifen. Weitere Informationen finden Sie unter Nr. 15920.

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