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 (QubitoderClbitfalls sich keine ObjekteQubitim DAG befinden) im aufgerufen wurdeDAGCircuit. -
Es wurde ein Fehler behoben, bei
OptimizeCliffordTdem der Durchlauf für Schaltkreise, die in eine Clifford+T-Basis transpiliert wurden undSXGatesowie ausschließenSXdgGate, einen Schaltkreis zurückgeben konnte, der nicht unitär äquivalent zu seiner Eingabe war. -
Es wurden mehrere Fehler bei der Vereinfachung von behoben,
ParameterExpressiondie 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 behobenremove_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
SynthesizeRZRotationsTranspiler-Durchlauf möglicherweise einen Panic-Fehler auslösen konnte, wenn das Argumentsynthesis_errorauf bestimmte Werte gesetzt wurde. Problem Nr. 16540 behoben. -
Ein potenzieller Segfault bei der Auswertung großer Objekte
ParameterExpressionwurde 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
VF2LayoutAusgabeoptimization_level=2bei einerTargetsymmetrischen 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 ObjektenStatePreparation, die durch eine Ganzzahl und ein explizites Argumentnum_qubitsangegeben 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
-
Es wurde ein Problem behoben, bei dem die Methoden zur Rückgabe von Ebenen und
DAGCircuit.layers()den übergeordneten DAGglobal_phasein jeden zurückgegebenen Ebenen-DAGDAGCircuit.serial_layers()kopierten. Behebt #16271. -
Es wurde ein Kompilierungsfehler behoben, der auftrat, wenn
CommutativeCancellationeine Abfolge von Einzel-Qubit-Rotationen vom Typ „ “ zu einem negativen Winkel verschmolz und „ “ als Zielgatter verfügbar war. Siehe Nr. 16594. -
Ein potenzielles Deadlock-Problem im
Optimize1qGatesDecompositionTranspiler-Durchlauf wurde behoben, das bei der Ausführung mit benutzerdefinierten Einzelqubit-Gattern in aQuantumCircuitoder auftratTarget. Problem Nr. 16591 behoben. -
Die Fehlermeldung, die bei
SabreLayoutder Angabe inkompatibler Argumente angezeigt wird, weist nun korrekt auf die Einschränkungen hin. Siehe #16632. -
Feste Synthese von
PhaseOracle,PhaseOracleGate, undBitFlipOracleGatefür Boolesche Ausdrücke, die für jede Belegung wahr sind, wie beispielsweisex | ~x. Problem Nr. 16524 behoben.
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.capiAußerdem wurdenctypesBindungen 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
MultiStagePassManagerFunktion 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()undgenerate_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
TwoQubitPeepholeOptimizationDurchlauf. Im Vergleich zur bisherigen Kombination ausConsolidateBlocksundUnitarySynthesisist diese leistungsfähiger und besser geeignet, die Zerlegung mit der höchsten Wiedergabetreue auszuwählen.- Leistungsverbesserungen beim Transpiler. Beschleunigungen von „ 2-3x “ über
benchpressverschiedene 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 inSabreLayout, Optimierungen inrustworkxsowie effizientere Routinen für Hashing, Speicherzuweisung und lineare Algebra.
Funktionen der C-API
-
Es wurde Unterstützung für die Überprüfung klassischer Ausdrücke in der C-API hinzugefügt, ähnlich wie bei
qiskit.circuit.classical. Die C-API enthält noch keine API zur Erstellung dieser Objekte. Alle Funktionen und Datentypen in „Classical Expressions“ sind in dieser Version neu. -
ControlFlowOpEs wurde Unterstützung für die Überprüfung von Anweisungen zur Kontrollflusssteuerung in der C-API hinzugefügt, die den Unterklassen des „ Python “-Raums entsprechen. Die C-API enthält noch keine API zur Erstellung dieser Objekte. Alle Funktionen und Datentypen in „Control Flow“ sind in dieser Version neu. -
Es wurden Funktionen hinzugefügt, mit denen Informationen zu den Quantenregistern und klassischen Registern eines Schaltkreises sowie zu verschiedenen Eigenschaften der Register selbst abgefragt werden können. Die folgenden Funktionen wurden hinzugefügt:
qk_circuit_num_quantum_registers()qk_circuit_get_quantum_register()qk_circuit_num_classical_registers()qk_circuit_get_classical_register()qk_quantum_register_name()qk_quantum_register_num_bits()qk_quantum_register_circuit_bits()qk_classical_register_name()qk_classical_register_num_bits()qk_classical_register_circuit_bits()
-
qiskit.capienthältctypesnun Bindungen für die gesamte C-API. Diese sind als Modulattribute mit denselben Namen wie die C-API-Objekte verfügbar.qk_circuit_new()Beispielsweise entspricht.qiskit.capi.qk_circuit_new -
QkTargetHinzugefügt wurdeqk_circuit_estimate_fidelity(), womit die Genauigkeit der Ausführung einer Schaltung auf einem bestimmten geschätzt wird. -
Der
qk_transpiler_pass_standalone_litinski_transformation()Befehl wurde erweitert, um Einzel-Qubit-QkGate_RXundQkGate_RYRotationsgatter sowieQkPauliProductRotationdie Befehle undQkPauliProductMeasurementzu unterstützen. -
Einzel-Qubit-Rotationsgatter und
QkPauliProductRotationObjekte mit Winkeln, die ganzzahlige Vielfache von sind – bis auf die Standardnäherung –, werden nun vomqk_transpiler_pass_standalone_litinski_transformation()Pass als Clifford-Gatter erkannt. -
QkDagqk_dag_global_phase()Es wurdenqk_circuit_global_phase()und hinzugefügt, die jeweils die globalen Phasen vonQkCircuitund abfragen. -
QkDagqk_dag_set_global_phase()Es wurdenqk_circuit_set_global_phase()und hinzugefügt, die jeweils die globalen Phasen vonQkCircuitund festlegen. -
Der C-API wurden zwei neue Funktionen hinzugefügt,
qk_transpiler_pass_standalone_2q_peephole_optimization()undqk_transpiler_pass_2q_peephole_optimization(), um den Optimierungsdurchlauf für die unitäre Peephole-Methode mit zwei Qubits von C aus auszuführen. Dies ist derselbe Pass wie derTwoQubitPeepholeOptimizationfür „ Python “.
Funktionen der Schaltungen
-
InstructionSo angepasstLinearFunction.inverse(), dass es eineLinearFunctionzurückgibt, die die inverse Transformation darstellt, anstatt bei der Konstruktion einer undurchsichtigen zu scheitern. -
QuantumCircuit.for_loop()akzeptiert nun einexpr.Varvomtypes.UintTyp alsloop_parameterArgument. Bei Verwendung in Form eines Kontextmanagers wird die Schleifenvariable automatisch als Variableinputdes 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 wurdeQuantumCircuit.estimate_fidelity(), womit die Genauigkeit der Ausführung einer Schaltung auf einem bestimmten geschätzt wird. -
ClassicalRegisterObjekte mit mehr als 65.535 Bits können nun im Ausdruckssystemqiskit.circuit.classicalverwendet werden. -
ParameterVectorakzeptiert nun ein optionalesuuidKonstruktorargument und macht seine BasisklasseUUIDüber dasuuidAttribut „base“ zugänglich. Damit lassen sich Vektoren rekonstruieren, deren Elemente identisch sind.
Funktionen zur Quanteninformation
-
Es wurde die
PauliLindbladMap.parity_sample_with_history()Methode hinzugefügt, die mitPauliLindbladMap.parity_sample()identisch ist, mit dem Unterschied, dass sie zusätzlich die zugrunde liegende Historie der Paulis und Vorzeichen, die zu den endgültigen Stichprobenausdrücken geführt haben, nachverfolgt und zurückgibt. -
QubitSparsePauliList.commutes()Die Methode wurde hinzugefügt. Diese Methode gibt die Kommutationsrelationen zwischen diesem ElementQubitSparsePauliListund einem anderen als Array von booleschen Werten zurück.
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()odergenerate_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 Argumentrz_synthesis_config, das die Synthese von RZ-Rotationen in die Clifford+T-Basis steuert. -
StandardEquivalenceLibraryEs wurden Äquivalenzen für die StandardgatterC3SXGateundRC3XGatezur 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 ausPauliProductRotationGateundPauliProductMeasurementObjekten sowieBarrier,Reset,Delay, und Kontrollflussoperationen. -
Der
CommutativeCancellationPass gibt nun einXGateoderSXGateaus, wenn die erfasste X-Rotation ein geeignetes Vielfaches von ist und sich das entsprechende Gate entweder imTargetoder im eingehenden Schaltkreis befindet. -
Über das
transpiler_seedFeld in der Benutzerkonfigurationsdatei kann nun ein Standardwert für dasseed_transpilerArgument vontranspile()undgenerate_preset_pass_manager()festgelegt werden. -
QISKIT_TRANSPILER_SEEDFür dieseed_transpilerArgumente vontranspile()undgenerate_preset_pass_manager()kann nun über die Umgebungsvariable ein Standardwert festgelegt werden, der Vorrang vor dem entsprechenden Schlüssel in einer Benutzerkonfigurationsdatei hat. -
Dem
FixedPointAnalyse-Durchlauf wurde ein neues Argumentgetterhinzugefügt. Dieser optionale Callback kann bereitgestellt werden, um einen Wert aus demPropertySetabzuleiten, anstatt einen einzelnen Schlüssel direkt auszulesen. -
Der Pass
ConvertToPauliRotationsunterstützt nun Rundgänge mitControlFlowOpObjekten. -
Der
ConvertToPauliRotationsTranspiler-Durchlauf wurde erweitert, um Schaltungen mitPauliProductRotationGateundPauliProductMeasurementObjekten zu verarbeiten. Diese Operationen werden bei der Konvertierung unverändert weitergegeben. -
Die Transpiler „pass“
RemoveIdentityEquivalentundCommutativeOptimization„have“ wurden erweitert, um „gates“ verarbeitenPauliProductRotationGatezu können. -
Der
LitinskiTransformationPass wurde erweitert, um Rotationsgates für einzelne Qubits ( und ) sowiePauliProductRotationGateundPauliProductMeasurementOperationen zu unterstützen. -
Einzel-Qubit-Rotationsgatter und
PauliProductRotationGateObjekte mit Winkeln, die – bis auf die angegebene Näherung – ganzzahlige Vielfache von sind, werden nun vomLitinskiTransformationPass als Clifford-Gatter erkannt. -
Dem
LitinskiTransformationPass wurde einapproximation_degreeArgument 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
PauliProductRotationGateund anderen matrixbasierten Gatterfunktionen in derCommutationChecker. Bisher lieferten diese Prüfungen immer das ErgebnisFalse. -
TwoQubitControlledUDecomposerwird nun mit 8 statt 24 Einzelqubit-Gattern synthetisiert. -
Der
LitinskiTransformationunterstützt nun auch Schaltkreise mitPhaseGateundU1GateBefehlen.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 dieTaskSchnittstelle (und die BasisklasseGenericPass) definiert werden, die zur Reduzierung des IR verwendet werden kann, oder überBasePassManagerObjekte, wodurch sie mit bestehenden Pipelines kompatibel sind, wie sie beispielsweise von bereitgestellt werdengenerate_preset_pass_manager(). -
Die Funktionen
generate_preset_pass_manager()undtranspile()leiten nun dasapproximation_degreeArgument an dieCommutativeOptimizationTranspiler-Passes undSubstitutePi4Rotationsweiter.approximation_degree=NoneDa diese beiden Durchläufe nicht unterstützen, wird der Standardwert verwendet,1.0wennNoneangegeben wird. -
PauliDerCommutationCheckerkann nun Kommutationen zwischen Standardgattern und Pauli-basierten Gattern wiePauliEvolutionGate,PauliProductRotationGate,PauliProductMeasurement, und effizient überprüfen, ohne auf matrixbasierte Überprüfungen zurückgreifen zu müssen. -
Beim Sabre-Layout und -Routing (
SabreLayoutundSabreSwap) wird dielookaheadHeuristik 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
CommutationCheckerder Auswertung von Kommutationen zwischenPauliProductRotationGateundPauliProductMeasurementObjekten. 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
CommutativeOptimizationTranspiler-Durchlaufs bei Schaltkreisen, diePauliProductRotationGateundPauliProductMeasurementObjekte enthalten. -
Der
CommutativeOptimizationTranspiler-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 ausConsolidateBlocksundUnitarySynthesisersetzt, wennoptimization_levelin 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
TargetObjekten. Zudem verfügt es über eine verbesserte Thread-basierte Parallelisierung der Analyse und Synthese.
Visualisierungsfunktionen
-
plot_bloch_vector()akzeptierttuplenun Eingaben. -
Der C-API-Schaltkreis-Zeichner (
qk_circuit_draw()) unterstütztPauliProductMeasurementnun undPauliProductRotationGateGatter. -
Der C-API-Schaltplan-Zeichner (
qk_circuit_draw()) verwendet nun eine Bruchdarstellung für Winkel, die nahe an einfachen Brüchen von liegen, ähnlich wie bei den Visualisierern im Python -Raum. -
Die C-API-Schaltkreiszeichnung (
qk_circuit_draw()) stellt Messungen undCPhaseGateOperationen nun übersichtlicher dar.
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 „ “-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 intranspile().approximation_degreeStattdessen kann die Genauigkeit entweder global durch Festlegen des Parameters eingestellt werden oder durch Verwendunggenerate_preset_clifford_t_pass_manager()von, das das Argument bereitstelltrz_synthesis_config, um eine Konfiguration für die „ “-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
CommutationCheckerSystem verwaltet keinen internen Cache mit Kommutationsbeziehungen mehr. Die folgenden Elemente sind daher nun veraltet und werden in Qiskit entfernt: v3.0:- das
cache_max_entriesArgument 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.
- das
Veraltete Funktionen in „Synthesis“
-
Einige Verhaltensweisen der Argumente von
qs_decomposition()sind nun veraltet und werden in Qiskit v3.0 entfernt.- Die Einstellung
opt_a1von undopt_a2ist nicht mehr erforderlich; die Funktion ermittelt automatisch, ob die Optimierungen angewendet werden können. TwoQubitBasisDecomposerdecomposer_1qunddecomposer_2qsollten jeweils Instanzen vonOneQubitEulerDecomposerbzw. sein; die Verwendung beliebiger aufrufbarer Funktionen aus dem „ Python “ ist im Vergleich zum Rust-Kern nicht performant.
- Die Einstellung
Änderungen am Build-System
-
qiskit-bindgen-cliDas im Repository enthaltene Tool zur Generierung von Bindings wurde vonqiskit-bindgen-cin umbenannt. Das bevorzugteMakefileRezeptmake cbleibt davon unberührt. -
qiskit-cext-vtable``qiskit-bindgen-cliEs wurde eincheck-abiBefehl hinzugefügt, der überprüfen kann, ob zwei Slot-Einträge (entweder ausqiskit-bindgen-cli show-slotsoder in integriert) für die jeweiligen Versionsnummern Semver-kompatibel sind. -
qiskit-bindgen-clierhielt denshow-slotsBefehl, 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-rustwurde auf „ 1.13 “ angehoben, um das neueExtension(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 historyBefehl, 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
ParameterExpressionenthalten, bei denen alle darin enthaltenenParameterInstanzen im endgültigen Ausdruck aufheben. Wenn beispielsweise der Ausdruck0*x + 1.5in 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
QpyErrormit 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 definierenParameterVector, deren Elemente nicht miteinander verbundeneParameter.uuidAttribute 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 implizitesParameterVectorElement 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 verwendenParameterVectorElementInstanzen, 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
ParameterVectorElementElement mit demselben Elementindex zu vergleichen, das jedoch über dieParameterVectorElement.vectorRü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
ParameterVectorArray, dessen Elemente zwischen den Schaltkreisen als gleichwertig verglichen werden. - Sie laden zwei separate QPY-Circuit-Payloads (in derselben Datei oder in separaten Dateien), die mit
Sicherheitsprobleme
-
Die beiden Parser „ OpenQASM “ (
qasm2.load()undqasm2.loads()) beenden nun den Vorgang mit einemRecursionError, 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 ProblemTranspilerErrorbehobenConstrainedReschedule, 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 “-FehlerValueErroraus, 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
ElidePermutationsundStarPreRoutingwurde behoben. -
ConstrainedReschedulewird nicht mehr ausgelöstAttributeError, wenn das optionaletargetArgument nicht angegeben wird. Siehe Nr. 16245. -
CRXGateEs wurde ein Fehler behoben,CommutationCheckerder bei der Auswertung der Kommutativitätsbeziehungen zwischen den Gattertypen mit kontrollierter Rotation,CRYGateundCRZGatesowie anderen Standardgattern auftrat. Insbesondere wurde das Verhalten der DurchgängeCommutationAnalysis,CommutativeCancellation,CommutativeOptimizationundqk_transpiler_pass_standalone_commutative_cancellation()bei Vorhandensein solcher Gatter korrigiert.Problem Nr. 16164 behoben.
-
Es wurde ein Fehler behoben,
CSdgGateInverseCancellationbei demCSGatePaare mit vertauschten Qubit-Argumenten nicht einheitlich storniert wurden. Zuvor wurde eine Sequenz von „ “ (mit umgekehrten Qubit-Argumenten) abgebrochen, „ “ jedoch nicht. Nun werden beide regelmäßig abgesagt.Problem Nr. 15855 behoben.
-
Es wurde
MultiplierGateso 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 enthieltParameterVectorElement. 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 liegen, bei ganzzahligen kein überflüssiges führendes1mehr ausgegeben (beispielsweise1π/2lautet nunπ/2), einschließlich der Ausgabemodi,mplundqasm.Behebt das Problem #16170.
-
Es wurde ein Fehler behoben
qpy.load(), der bei QPY-Versionen >= 13 auftrat, bei denenDelayAnweisungen 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, beispielsweiseqasm3.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,
UnrollForLoopsbei dem beim Entrollen einer statischenQuantumCircuit.for_loop()Funktion, deren Körper einen Wert ungleichQuantumCircuit.global_phaseNull enthielt, eine zusätzliche Kopie der Körperphase hinzugefügt wurde.Problem Nr. 16185 behoben.
-
VF2LayoutundVF2PostLayoutwird nicht mehr in Panik geraten und melden: „Float-Werte dürfen nicht ‚nan‘ zurückgeben“, wenn Anweisungen auftauchen, bei denen Fehler gemeldet werden, die als1.0. -
Das Problem, dass bei jedem Anruf immer ein Alarm ausgelöst
CircuitErrorwurde, wurde behobenLinearFunction.inverse(). Siehe Nr. 16184. -
Es wurde ein Problem behoben, bei dem das
transpile_optimization_levelFeld „Benutzerkonfigurationsdatei“ beim Aufruf vongenerate_preset_pass_manager()… nicht berücksichtigt wurde.transpile()Bisher war davon nur betroffen. -
plot_bloch_vector()verändertlistdie Eingaben nicht mehr. -
CouplingMapignoriert 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,
CommutationCheckerdurch den bestimmte Rust-basierte Gatter, wie beispielsweise dasUnitaryGate, 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 behobencircuit_to_dagdependency(). Siehe Nr. 14537. -
clifford_6_4()Die Vorlagen,rzx_xz(),rzx_zz1(),rzx_zz2(), undrzx_zz3()wurden angepasst, sodassTemplateOptimizationdiese 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 Kompensationsfeldglobal_phase, wasTemplateOptimizationdazu 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 „ “ falsch verschoben wurde, wenn eine „ “-Rotation mithilfe von „“PhaseGateoderU1Gate„“ 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,
ConsolidateBlocksbei 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 einOverflowErroraufgeworfen worden. Siehe Nr. 16412. -
const size_t *Nur in Qiskit v2.5.0rc1 wurde der TypQkLoopElementsder C-API fälschlicherweise mit demelementsMember. aufgeführt. Dies dient nunconst ptrdiff_t *dazu, negative Werte zu berücksichtigen. -
force_consolidate=TrueEs wurde ein Fehler behoben,ConsolidateBlocksder 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 denqk_transpile()C-API-Funktionen undqk_transpile_stage_optimization()bei der Verwendung vonoptimization_level3 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
OptimizeAnnotatedwurde behoben, bei dem Steuerungsmodifikatoren mit offenen Steuerelementen nicht korrekt kombiniert wurden. Siehe Nr. 16410. -
pickleParameterExpressionInstanzen mit ausgelöschten Variablen (wiex - x) behalten nun auch nach einem Rundlauf durch QPY und die Referenz aufxbei. -
ParameterExpressionInstanzen, deren Auswertungsergebnis ein reiner Wert ist (wie z. B.0*x + 2), durchlaufen nun erfolgreich den Rundlauf durch QPY undpickle. -
Es wurden die Kommutativitätsprüfungen zwischen zwei
PauliProductMeasurementBefehlen korrigiert, die auf dasselbe klassische Bit zugreifen; zuvor wurde dabei die beobachtbare Schreibreihenfolge nicht berücksichtigt. -
Es wurde ein Problem bei der Serialisierung von
PauliProductMeasurementundPauliProductRotationGatein 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 demdumps_experimental()für inms… angegebene Verzögerungen fälschlicherweise einusSuffix ausgegeben wurde. Problem Nr. 16097 behoben. -
psDie Umrechnung inqasm3.dump_experimental()``nsunddumps_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
SynthesizeRZRotationsTranspiler-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, wennfront=True„raising“ValueErrorin Verbindung mit einer explizitenqubitsZuordnung verwendet wurde. Siehe Nr. 15834. -
Es wurde ein Fehler im Transpiler-Durchlauf
CommutativeOptimizationbehoben, bei dem Paare vonXXPlusYYGateGatteroperationen, die auf dieselben Qubits wirkten, jedoch in umgekehrter Reihenfolge, fälschlicherweise vereinfacht werden konnten. Siehe Nr. 16161. -
Es wurde ein Fehler behoben,
BasisTranslatorbei dem in einer Schaltung mit verschachtelten Kontrollflussoperationen die berechneten Transformationen in den Blöcken übersprungen wurden. -
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
LightConeDurchlauf 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 vonfaeranstelle von neu implementiert wurde.transpile()qs_decomposition()Das Problem kann auftreten, wenn die Quanten-Shannon-Zerlegung über sowie über denUnitarySynthesisTranspiler-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
ResetBefehlen können nun anhand einesGenericBackendV2. eingeplant werden. -
random_clifford_circuit()Ein Nichtdeterminismus in wurde behoben, auch wenn ein Startwert angegeben wurde. Siehe Nr. 16138.
Leistungsverbesserungen
-
Die von
TwoQubitBasisDecomposerundTwoQubitWeylDecompositionverwendete 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
ConsolidateBlocksTranspiler-Durchlauf und die zugehörige C-API-Funktionqk_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
VF2PostLayoutauf großen Kopplungskarten mit sehr hoher Konnektivität ausgeführtVF2Layoutwurden. -
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
Optimize1qGatesDecompositionTranspiler-Durchlauf und seine C-API-Funktionenqk_transpiler_pass_optimize_1q_sequences()undqk_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
CommutationAnalysisTranspiler-Durchlauf läuft nun multithreaded, was zu einer verbesserten Laufzeitleistung führt. Weitere Informationen finden Sie unter Nr. 16014. -
Der
CommutativeCancellationTranspiler-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
UnitarySynthesisTranspiler-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. -
ParameterVectorwurde 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
SabreSwapundSabreLayout) 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
SubstitutePi4Rotationswurde 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,BasisTranslatorUnitarySynthesis, undSplit2QUnitariessowie die entsprechenden C-API-Funktionenqk_transpiler_pass_standalone_basis_translator(),qk_transpiler_pass_split_2q_unitaries()qk_transpiler_pass_standalone_unitary_synthesis(), und haben intern die beim Erstellen ihrer AusgabeDAGCircuitverwendete 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 neueTwoQubitPeepholeOptimizationTranspiler-Durchlauf wird nun als Teil der voreingestellten Durchlauf-Manager verwendet, die vongenerate_preset_pass_manager()generiert und intern von für die Optimierungsphase in den Optimierungsstufen 2 und 3 genutzt werden. Dies ersetzt die bisherige Verwendung derConsolidateBlocksTranspiler-Durchläufe undUnitarySynthesisin 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.