Skip to main content
IBM Quantum Platform

Qiskit SDK 2.4 Versionshinweise


2.4.2

Vorspiel

Qiskit v2.4.2 ist eine Patch-Version, die Fehler behebt, die in der Serie „ v2.4 “ festgestellt wurden.

Dies ist ebenfalls ein Sicherheitsupdate, das eine Stack-Overflow-Sicherheitslücke im Parser von „ OpenQASM 2“ behebt.

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-Speicher beliebig rekursiv arbeiten, was schließlich dazu führte, dass der maximale Stapelspeicherplatz überschritten wurde und der Prozess mit einem Segfault abstürzte.

Fehlerkorrekturen


2.4.1

Vorspiel

Qiskit v2.4.1 behebt eine kleine Anzahl von Fehlern, die seit der Veröffentlichung von Qiskit v2.4.0 festgestellt wurden.

Fehlerkorrekturen

  • 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.

  • 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.


2.4.0

Vorspiel

Qiskit 2.4.0 ist eine neue Funktionsversion des „ Qiskit SDK “. Die Highlights dieser Version sind:

  • Unterstützung für die Entwicklung von Erweiterungsmodulen für „ Python “, die die Qiskit-C-API nutzen und sicher in „ Python “-Wheels verteilt werden können: Mit dieser Version ist es nun praktikabel, leistungskritische oder Low-Level-Komponenten, die Qiskit nutzen, in kompilierte Erweiterungen zu verlagern, die die Qiskit-C-API nutzen. Diese Erweiterungen können nun mithilfe der Standard-Tools von Python als gewöhnliche „ Python “-Radsets gepackt und verteilt werden.
  • Erste Portierung der internen Mechanismen für die Serialisierung und Deserialisierung von QPY nach Rust: Dies beschleunigt sowohl die Erstellung als auch das Laden von QPY-Nutzdaten erheblich und bildet zudem den Ausgangspunkt für die Erweiterung der C-API um QPY-Unterstützung.
  • Erweiterung der Funktionalität der C-API: Die C-API stellt nun DAG-basierte Darstellungen über einen undurchsichtigen QkDag Typ bereit, zusammen mit Transpiler-Pass-Funktionen auf DAG-Ebene, die direkt auf dieser Darstellung operieren. Zu den weiteren Funktionen gehören die Unterstützung parametrisierter Schaltungen, Befehle für Pauli-basierte Berechnungen sowie ein Schaltungstext-Editor.
  • Verbesserungen an der Clifford+T-Transpilation-Pipeline: Wir haben die Clifford+T-Transpilation-Pipeline für die Zielausrichtung auf diskrete Clifford+T-Basis-Gate-Sätze erheblich verbessert, wodurch eine höhere Kompilierungsqualität und deutlich schnellere Laufzeiten erzielt werden. Insbesondere verwendet Qiskit nun den gridsynth Algorithmus als Standardmethode zur Synthese von RZ-Rotationen in einer diskreten Basis und ersetzt damit die in früheren Versionen verwendete Solovay-Kitaev-Zerlegung.

Funktionen der C-API

Funktionen der Schaltungen

  • Es wurde eine PauliProductMeasurement.pauli() Methode hinzugefügt, die den durch den Befehl gemessenen Wert Pauli zurückgibt, einschließlich seiner globalen Phase von +1 oder -1.

  • Das bisher private Attribut QuantumCircuit._data ist nun Teil der öffentlichen API, jedoch nur als Handle zur Übergabe an C-API-Funktionen, die dies erwarten QkCircuit. Der Typ des Objekts ist in der öffentlichen API nicht angegeben, ebenso wenig wie die darauf definierten Methoden.

  • QuantumCircuit.compose() kann bis zu etwa doppelt so schnell sein, wenn sehr lange Schaltkreise auf einen anderen aufgesetzt werden.

  • evolved_operator_ansatz()Unterstützung für SparseObservable bis wurde hinzugefügt.

  • Es wurde ein neues PauliProductRotationGate Gate hinzugefügt, das generische Pauli-Produkt-Rotationen der Form exp⁡(−iθ/2P)\exp(-i \theta / 2 P) für ein Pauli-Produkt PP und einen Rotationswinkel θ\theta darstellt. Zusammen mit dem PauliProductMeasurement bilden diese Gates eine Grundlage für Pauli-basierte Berechnungen.

  • Die RCCXGate ist selbstinvers. Die RCCXGate.inverse() Funktion gibt nun eine neue RCCXGate Instanz zurück, anstatt eine Instanz von Gate mit einer benutzerdefinierten Definition.

  • negate()Es wurde eine neue unäre Negationsoperation eingeführt, mit der Benutzer Float- und Dauerausdrücke negieren können. Wird ein Skalar übergeben, wird dieser automatisch auf den richtigen Typ angehoben.

    Beispielverwendung:

    from qiskit.circuit import ClassicalRegister
    from qiskit.circuit.classical import expr, types
    
    qc = QuantumCircuit(2, 2)
    in_var1 = qc.add_input("in1", types.Float())
    
    with qc.if_test(expr.greater(in_var1, 0.2)) as else_:
        qc.rz(0.3, 0)
    with else_:
        with qc.if_test(expr.greater(expr.negate(in_var1), 0.2)): 
            qc.rz(-0.3, 0)

Anbieter-Funktionen

  • Das BasicSimulator erkennt nun automatisch Clifford-Schaltungen und optimiert deren Simulation mithilfe des Stabilisator-Formalismus über StabilizerState. Dies führt zu erheblichen Leistungssteigerungen bei Schaltungen, die ausschließlich Clifford-Gatter (H, S, CX, CZ, X, Y, Z usw.) enthalten, mit polynominaler Skalierung anstelle einer exponentiellen Skalierung der Anzahl der Qubits. Bei Nicht-Clifford-Schaltungen wird weiterhin die bestehende Simulationsmethode mit Zustandsvektoren verwendet. Diese Optimierung ist für die Benutzer nicht erkennbar und erfordert keine Änderungen am Code.

    Zum Beispiel:

    from qiskit import QuantumCircuit
    from qiskit.providers.basic_provider import BasicSimulator
    
    # Clifford circuit (Bell state)
    qc = QuantumCircuit(2, 2)
    qc.h(0)
    qc.cx(0, 1)
    qc.measure([0, 1], [0, 1])
    
    # Automatically uses optimized StabilizerState simulation
    backend = BasicSimulator()
    result = backend.run(qc, shots=1000).result()
    counts = result.get_counts()

Funktionen der Quanteninformation

  • Es wurde die PauliLindbladMap.generators() Methode hinzugefügt, die einen bequemeren Zugriff auf die Generatorterme der Map bietet. Dies ist ein Alias für die bereits vorhandene PauliLindbladMap.get_qubit_sparse_pauli_list_copy() Methode und entspricht den in Aer und Runtime für ähnliche Klassen verwendeten Namenskonventionen.

  • PauliEs wurde die SparseObservable.evolve() Methode hinzugefügt, die ein SparseObservable mit einem konjugiert. Intern wird hierfür eine statische Nachschlagetabelle verwendet, um Matrixberechnungen zu vermeiden.

    Beispiel:

    from qiskit.quantum_info import SparseObservable, Pauli
    
    obs = SparseObservable("Y")
    pauli = Pauli("X")
    evolved = obs.evolve(pauli)

Funktionen des Transpilers

  • Collect2qBlocksDen Analyse-Durchläufen Collect1qRuns und wurde ein neues filter_fn Argument hinzugefügt. Mit dieser optionalen Funktion lassen sich die erfassten Schaltkreise nach benutzerdefinierten Kriterien filtern, um beispielsweise nur Einzel-Qubit-Läufe mit mindestens einem Hadamard-Gatter oder nur 2-Qubit-Blöcke mit mindestens 3 CX-Gattern zurückzugeben.

  • SynthesizeRZRotationsEs wurde ein neuer Transpiler-Durchlauf hinzugefügt, der alle Rotationsgatter für einzelne Qubits RZGate mit Gleitkomma-Winkeln durch äquivalente Clifford+T-Sequenzen ersetzt.

    Die Genauigkeit der Synthese lässt sich entweder durch die Angabe eines approximation_degreeoder alternativ durch die explizite Festlegung sowohl synthesis_error von als auch cache_errorvon steuern.

    Beispielverwendung:

    from qiskit import QuantumCircuit
    from qiskit.transpiler.passes import SynthesizeRZRotations
    
    qc = QuantumCircuit(1)
    qc.rz(1.23, 0)
    
    rz_synthesis_pass = SynthesizeRZRotations(approximation_degree=0.9999)
    synthesized_qc = rz_synthesis_pass(qc)
    synthesized_qc.draw("mpl")
    _images/release_notes-1.png
  • XXPlusYYGateDas StandardEquivalenceLibrary enthält nun eine RXXGateauf / basierendeRYYGate Äquivalenz für XXMinusYYGate, die der bereits für vorhandenen entspricht.

  • SubstitutePi4RotationsDer Transpiler-Durchlauf wurde erweitert, um weitere Standardgatter zu verarbeiten:

  • Es wurde eine Funktion clifford_t_pass_manager() hinzugefügt, die einen Pass-Manager für die Transpilierung in Clifford+T-Basissätze erstellt. Diese Funktion wird automatisch aufgerufen, generate_preset_pass_manager() wenn die Zielbasis aus Clifford+T-Gattern besteht.

    Die generierte Transpilations-Pipeline besteht aus den folgenden Schritten:

    • Initialisierung : Zerlegt größere Gatter in 1-Qubit- und 2-Qubit-Gatter und führt logische Optimierungen durch.
    • Layout : Wendet die Standard-Layoutstrategie für kontinuierliche Basissätze an.
    • Routing : Wendet die für kontinuierliche Basissätze verwendete Standard-Routing-Strategie an.
    • RZ-Transformation : Transformiert die Schaltung in die Clifford-RZ-Basis.
    • RZ-Optimierung : Optimiert die Schaltung innerhalb der Clifford+RZ-Basis.
    • T-Transformation : Transformiert die Schaltung in die Clifford+T-Basis.
    • T-Optimierung : Optimiert die Schaltung innerhalb der Clifford+T-Basis.
    • Planung : Wendet die Standard-Planungsstrategie an, die für kontinuierliche Basissätze verwendet wird.

    Diese Phasen befinden sich noch im Versuchsstadium und können sich ändern. Insbesondere sind sie noch nicht als Plugins für die Transpiler-Stufe verfügbar (im Gegensatz zu den Stufen für kontinuierliche Basissätze).

    Um optimale Ergebnisse zu erzielen, sollten Sie erwägen, sowohl TT als auch T†T^\dagger in die angegebene Clifford+T-Basis aufzunehmen und so viele Clifford-Gatter wie möglich einzubeziehen. Zum Beispiel:

    basis_gates = get_clifford_gate_names() + ["t", "tdg"]
  • Die Standard-Äquivalenzbibliothek wurde erweitert und verfeinert:

    • Es wurden Zerlegungen für RXGate (in Bezug auf HGate und RZGate) und ZGate (in Bezug auf SdgGate) hinzugefügt
    • Vereinfachte Zerlegungen für TGate und TdgGate , bei denen ein einziges entsprechendes Dagger-Gatter sowie Clifford-Gatter verwendet werden
  • Der Optimierungsdurchlauf des OptimizeCliffordT Transpilers akzeptiert nun ein basis_gates Argument und bevorzugt Zerlegungen, die Clifford-Gatter aus der Zielbasis verwenden.

  • Dem LitinskiTransformation Pass wurde ein neues Argument namens insert_barrier hinzugefügt. Wenn fix_clifford=True und insert_barrier=True, wird zwischen dem auf dem Pauli-Prinzip basierenden Rechenteil der Schaltung und den abschließenden Clifford-Operatoren eine Barriere eingefügt.

  • Dem LitinskiTransformation Pass wurde ein Argument use_ppr hinzugefügt, das – sofern True– das Rust-native PauliProductRotationGate verwendet, um Pauli-Produkt-Rotationen darzustellen. Dies verbessert die Leistung und die Ergonomie, da das PauliProductRotationGate direkt einzelne Pauli-Produkte darstellt, anstatt allgemeine Summen von Paulis. Wenn use_ppr=False (Standardeinstellung), verwendet PauliEvolutionGate der Durchlauf weiterhin Objekte zur Darstellung der Drehungen.

  • ConvertToPauliRotationsEs wurde ein neuer Transpiler-Durchlauf hinzugefügt, der einen Quantenkreis, der Standardgatter für ein, zwei und drei Qubits sowie Barrieren und Messungen enthält, in einen äquivalenten Schaltkreis umwandelt, der PauliProductRotationGate Gatter und PauliProductMeasurement Anweisungen enthält.

  • Der RemoveIdentityEquivalent Transpiler-Durchlauf läuft nun standardmäßig im Multithread-Modus. Dadurch wird die Laufzeitleistung des Durchlaufs verbessert, wenn dieser auf großen Schaltkreisen ausgeführt wird. Sie können das Threading-Verhalten mithilfe der RAYON_NUM_THREADS Umgebungsvariable steuern. Informationen zur Verwendung dieser Umgebungsvariablen finden Sie in der Dokumentation der Funktion.

  • Dem SabrePreLayout Pass wurde ein neues Argument min_distance hinzugefügt, das die Entfernung für den ersten Durchlauf von „ VF2 “ mit der erweiterten Kopplungskarte festlegt. Bei dieser Einstellung min_distance > 1 werden alle Prüfungen auf kleinere Entfernungen übersprungen, insbesondere die Prüfung „ distance-1 “, die der Ausführung des VF2Layout „Pass“ entspricht.

  • Das call_limit_vf2 Argument des Passes SabrePreLayout kann nun ein 2-Tupel sein, ähnlich wie das call_limit Argument von VF2Layout. Handelt es sich um ein 2-Tupel, wird zunächst das erste Element verwendet, bis die erste Übereinstimmung gefunden wird; danach wechselt die Begrenzung zum zweiten Element.

  • Der Optimierungsdurchlauf des OptimizeCliffordT Transpilers ersetzt nun auch Ketten aufeinanderfolgender Clifford+T-Gatter, wenn die Anzahl der T-Gatter gleich bleibt, die Anzahl der Clifford-Gatter jedoch reduziert wird.

  • Die Fast-Path-Hauptschleife von UnitarySynthesis speichert nun ihre Hilfsobjekte für den Zwei-Qubit-Dekompositor intern aggressiv im Cache, wodurch der gesamte Durchlauf an seiner standardmäßigen Aufrufposition in den voreingestellten Durchlaufmanagern um etwa 2x schneller wird.

Visualisierungsfunktionen

  • Die CouplingMap.draw() Funktion unterstützt nun die Übergabe von Layout-Methoden, die in rustworkx.visualization.graphviz_draw() dem intern aufgerufenen Verfahren verwendet werden sollen. Auf diese Weise können Sie den Graphviz-Layout-Algorithmus anpassen, der zur Visualisierung des CouplingMap Objekts verwendet wird.

  • circuit_drawer()Es wurde ein neuer barrier_label_len Parameter (Standardwert 16) zu QuantumCircuit.draw() und hinzugefügt. Wenn eine Barrier Bezeichnung diese Länge überschreitet, wird sie gekürzt und "..." angehängt. Dadurch wird verhindert, dass sehr lange Barriere-Beschriftungen die Schaltpläne unlesbar machen. Der Parameter wird von allen drei Drawer-Backends (text, mpl, latex) unterstützt.

Hinweise zur Aktualisierung der C-API

  • QuantumCircuitqk_circuit_to_python() gibt nicht mehr einen vollständigen zurück, sondern nur noch den Typ von QuantumCircuit._data. Die neue Methode qk_circuit_to_python_full() bietet die bisherige Funktionalität.

  • qk_obs_to_python() erfordert nun die Verantwortung für die angegebene Beobachtungsgröße und übernimmt diese auch. Sie dürfen die Beobachtungsgröße nach dem Aufruf dieser Funktion nicht mehr freigeben. Dies steht im Einklang mit allen anderen *_to_python Funktionen der C-API und vermeidet den Mehraufwand, der durch das Klonen der Daten entsteht.

  • QkInstruction.params wurde von einem Zeiger auf double in einen Zeiger auf const QkParam * Objekte geändert. Diese Änderung erfolgte, weil Gate-Parameter in der C-API nicht mehr auf feste numerische Werte beschränkt sind, sondern auch parametrisierte Ausdrücke mit ungebundenen Symbolen sein können, die durch ein QkParam *„.“ dargestellt werden.

  • Das QISKIT_VERSION_NUMERIC Symbol wurde aus der Header-Datei entfernt, nachdem es in Qiskit 2.2 als veraltet gekennzeichnet worden war. Verwenden Sie QISKIT_VERSION_HEX stattdessen, das korrekterweise Informationen zum Vorabveröffentlichungsstatus enthält.

  • Angepasst QkTargetOp , um als Typ für sein QkTargetOp.params Attribut zu verwenden QkParam . Den Benutzern den Zugriff auf beliebige freie oder feste Parameter in einem Vorgang ermöglichen.

  • Die qk_transpile_stage_optimization() Funktion verfügt über ein neues obligatorisches Argument, layout das einen veränderblichen Zeiger auf ein QkTranspileLayout Objekt entgegennimmt, welches den Aufbau der Transpile-Pipeline bis zu diesem Zeitpunkt darstellt. qk_transpile_stage_routing()In der Regel handelt es sich dabei um das Objekt, das von qk_transpile_stage_layout() und zurückgegeben wird. Dies ist notwendig, da auf Optimierungsstufe 3 in der Optimierungsphase der VF2PostLayout Durchlauf ausgeführt wird, der das Layout verändern kann, und dies muss bei der Ausführung der Phase nachverfolgt werden.

OpenQASM Hinweise zum Upgrade

  • Der zuvor von qiskit.qasm3 OpenQASM 3 generierte Code enthielt keinen Typ für die Iteratorvariable. Der Exporter enthält nun einen expliziten Typ gemäß der Spezifikation „ OpenQASM “ ( 3.0 ).

Hinweise zum Synthesis-Upgrade

Hinweise zum Transpiler-Update

  • Die Verwendung des internen Zufallszahlengenerators für den CSPLayout Durchlauf wurde geändert. Das bedeutet, dass der Durchlauf bei einem festen Startwert möglicherweise andere Ergebnisse liefert als in früheren Versionen. Es kann nicht garantiert werden, dass die Ergebnisse der Startwertgenerierung zwischen den transpiler verschiedenen Versionen stabil bleiben. Sollten Sie sich jedoch auf die genauen Ergebnisse dieses Durchlaufs verlassen haben, können Sie den Durchlauf in einer früheren Version ausführen, die Ausgabe speichern qpy und sie dann in der neuesten Version laden.

Verschiedene Hinweise zum Upgrade

  • Qiskit basiert nun auf dem Image „ manylinux_2_28 “, wodurch die erforderliche Version auf glibc Hosts mit „ Linux “ von „ 2.17 “ auf „ 2.28 “ angehoben wird. Dies sollte unter Debian 10+ (Buster), Ubuntu 18.10 + (Cosmic), Fedora 29+ und RHEL 8+ unterstützt werden.

    NumPy Unter Python 3.14 wird bereits glibc 2.28 benötigt, sodass Qiskit in der Praxis auf Plattformen, die auf die Abhängigkeiten von manylinux2014 beschränkt sind, mit späteren Versionen von Python ohnehin nicht einsetzbar war. Die glibc-Version wurde für alle Versionen von „ Python “ aktualisiert, um die Konsistenz beim Build zu gewährleisten.

    Es ist möglicherweise weiterhin möglich, Qiskit aus dem Quellcode glibc mit älteren Versionen von zu kompilieren, allerdings wird dies nicht mehr im Rahmen der CI getestet.

Veraltete Funktionen der C-API

Änderungen am Build-System

  • Die C-API-Header werden nun nicht mehr im Build-Skript von erstellt qiskit-cext, sondern durch eine im Repository enthaltene Binärdatei in den qiskit-bindgen-cDistributionsordner eingebunden. Das make Rezept make cheader (und das vollständige make c) erzeugt nach wie vor das vollständige Distributions-Artefakt in dist/c.

  • Das Build-System liest nun die Umgebungsvariable, um QISKIT_BUILD_PROFILE zu entscheiden, ob im release Modus oder im debug Modus gebaut werden soll. Wenn dies nicht festgelegt ist, pip install . wird standardmäßig (weiterhin) der Release-Modus und pip install -e . der Debug-Modus verwendet.

  • Die Mindestversion von CMake, die zum Erstellen und Ausführen der C-API-Testsuite erforderlich ist, wurde von 3.27 auf 3.20 gesenkt. Qiskit legt sich nicht auf eine bestimmte Richtlinie hinsichtlich der erforderlichen CMake-Version fest, bemüht sich jedoch nach Kräften, die Repositorys gängiger und weiterhin unterstützter Linux -Distributionen abzustimmen.

  • Qiskit verwaltet seine zusätzlichen Entwicklungsabhängigkeiten nun mithilfe separater Einträge in Abhängigkeitsgruppen gemäß PEP 735 für verschiedene Aufgaben und ersetzt damit die alten, monolithischen Dateien „ requirements-dev.txt “ und „ requirements-optional.txt “.

  • Pakete, deren Erstellung von der Qiskit-C-API abhängt, können nun Qiskit als Build-Abhängigkeit im „ Python “-Bereich angeben und anschließend die Header-Dateien über qiskit.capi.get_include() suchen.

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 aus dem Endausdruck herausgerechnet wurden. 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, auch nicht von diesen 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.

Fehlerkorrekturen

  • qargsQuantumCircuit.append() lehnt nun doppelte klassische Bits im cargs Argument korrekt ab, was dem Verhalten von entspricht. Zwar lassen sich klassische Bits theoretisch kopieren – im Gegensatz zu Quantenbits –, doch kann das interne Datenmodell von Qiskit die mehrfache Verwendung desselben Bits nicht abbilden, und Schaltungen, die dies nutzen, würden aufgrund der Verletzung der Annahmen des Datenmodells in der Regel zu internen Bibliotheksfehlern oder zu unsinnigem Verhalten des nachgelagerten Simulators führen.

  • QkTargetOp.num_paramsEs wurde eine Diskrepanz behoben, QkTargetOp bei der die Länge des in QkTargetOp.params gespeicherten Arrays nicht mit der von angezeigten Anzahl übereinstimmte. QkTargetOp.num_paramsNANPlatzhalterparameter werden nun durch dargestellt, und die Länge des Arrays beträgt immer. Dieser Fehler trat ausschließlich in der Version „ 2.3.0rc1 “ auf.

  • QuantumCircuit.compose()Der Zeitaufwand, der linear zur Anzahl der Bits der Basisschaltung ist, wurde behoben. Dies könnte zu Leistungsproblemen führen, wenn wiederholt kleine Schaltungen ohne clbits auf einer Basis mit einer sehr großen Anzahl von clbits zusammengesetzt werden.

  • Counts Objekte geben nun beim Erstellen korrekt einen Fehler aus, wenn die Schlüssel nicht alle das gleiche Format haben.

  • Es wurde ein Fehler behoben, CommutationChecker durch den bestimmte Rust-basierte Gatter, wie beispielsweise UnitaryGate, die Größenbeschränkungen für Matrizen umgehen konnten, was zur Erstellung übermäßig großer Matrizen führte.

  • evolved_operator_ansatz()Es wurde ein Fehler behoben, bei dem die Einstellung des parameter_prefix Arguments auf eine einzelne Zeichenkette je nach Reihenfolge der Operatoren zu einem Fehler führen konnte, wenn Identitätsterme entfernt wurden.

  • RuntimeErrorEs wurde ein Fehler behoben, bei dem die Schleifenvariable von a ForLoopOp in der Parametertabelle des äußeren Schaltkreises falsch nachverfolgt wurde, was dazu führte, dass sie in QuantumCircuit.parameters a erschien und a einen internen Fehler assign_parameters() auslöste. Einzelheiten finden Sie unter Nr. 15657.

  • Initialize.inverse()Eine unklare Fehlermeldung in wurde behoben; nun wird sofort ein eindeutiger Fehler ausgegeben, der darauf hinweist, dass die Anweisung nicht invertierbar ist. Siehe #15595.

  • Die MCX-Syntheseverfahren wurden korrigiert, um den Randfall, bei dem 00num_ctrl_qubits ist, korrekt zu behandeln. #15665 behoben.

  • QkTranspileOptionsEin Problem bei den qk_transpile() C-API-Funktionen und qk_transpile_stage_optimization() bei der Verwendung von optimization_level=3 in wurde behoben. Bisher versäumte es die interne Logik zur Verfolgung des Mindestpunktwerts, den DAG zu aktualisieren, nachdem eine bessere Schaltung gefunden worden war, was zu Schaltungen mit suboptimaler Tiefe und Größe führen konnte.

  • ParameterExpression Instanzen mit ausgelöschten Variablen (wie x - x) behalten nun auch nach einem Hin- und Rücklauf durch QPY und Pickle den Verweis auf x bei.

  • ParameterExpression Instanzen, deren Auswertungsergebnis ein reiner Wert ist (wie z. B. 0*x + 2), werden nun erfolgreich durch QPY und Pickle hin- und zurückübertragen.

  • PauliEvolutionGateEs wurde ein Fehler behoben, bei dem die durchschnittliche Gate-Genauigkeit etwas höher war als die tatsächliche Genauigkeit. Dies hatte Folgewirkungen bei Durchgängen wie beispielsweise RemoveIdentityEquivalent, bei denen die Tore in etwas größeren Winkeln entfernt wurden, als es eigentlich hätte sein sollen. Dies wurde nun behoben, und es PauliEvolutionGate ist gewährleistet, dass das Abschneidungen genauso behandelt wie andere Standard-Rotationsgatter.

  • Es wurde eine Kommutativitätsprüfung zwischen zwei PauliProductMeasurement Befehlen eingeführt, falls beide Befehle auf dasselbe klassische Bit zugreifen. In diesem Fall überschreibt die spätere Messung das Ergebnis der früheren Messung, weshalb ein Vertauschen der beiden Messanweisungen innerhalb des Quantenschaltkreises im Allgemeinen ungültig ist.

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

  • Ein Fehler im Transpiler-Durchlauf ElidePermutations wurde behoben, der bei der Verarbeitung von Permutationen einzelner Qubits zu einem Absturz führte.

  • Es wurde ein Problem behoben, das auftrat, QuantumCircuit.compose() wenn die Funktion mit front=True und einer expliziten qubits Zuordnung aufgerufen wurde; in diesem Fall wurde fälschlicherweise ein ValueError ausgelöst, anstatt den korrekten Schaltkreis zurückzugeben. Siehe Nr. 15834.

  • Die Gate.control() Methode wurde korrigiert, um den Randfall, bei num_ctrl_qubits dem 00 gilt, korrekt zu behandeln. Zuvor konnte dies zu einem Fehler oder einem Core-Dump führen. Nun gibt es eine Kopie des ursprünglichen Gates zurück. Problem Nr. 15666 behoben.

  • QuantumCircuit.mcrx()Die Methoden, QuantumCircuit.mcry(), QuantumCircuit.mcrz(), QuantumCircuit.mcp(), und QuantumCircuit.mcx() wurden korrigiert, wenn mehrfach gesteuerte Gates ohne Steuerqubits angehängt werden. Bisher konnte dies zu Speicherüberläufen führen. Dieser Fall wird nun korrekt bearbeitet. Problem Nr. 15664 behoben.

  • Die Definition von MCPhaseGate wurde für den Fall von 00 -Steuerqubits korrigiert.

  • Es wurde ein Problem behoben, BasisTranslator bei dem bei Schaltkreisen mit verschachtelten Kontrollflussoperationen die Transformation nicht auf deren Kontrollflussblöcke angewendet wurde. Siehe #13162, #14025 und #15734.

  • Der Exporter „ OpenQASM 3“ (qiskit.qasm3) enthält nun den Typ des Iterators in „for“-Schleifen. Behebt #13725.

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

Sonstige Hinweise

  • Der SabrePreLayout Pass wurde vereinfacht, um die VF2Layout Verbesserungen im Pass zu nutzen. VF2LayoutDer aufwendige Nachbearbeitungsschritt zur Minimierung „überflüssiger“ Kanten im Layout entfällt nun, da diese Optimierung nun effizienter durch den internen Bewertungsmechanismus von … übernommen wird. Folglich ist das improve_layout Argument nun hinfällig und hat keine Wirkung mehr.
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.