Qiskit 0.43 Versionshinweise
0.43.3
Terra- 0.24.2
Vorspiel
Qiskit Terra 0.24.2 ist eine Fehlerbehebungsversion, die einige kleinere Probleme behebt, die seit der Version 0.24.1 festgestellt wurden.
Anmerkungen zu Upgrades
- Die von
dumpausgegebene Version des QPY-Formats hat sich auf 8 erhöht. Diese neue Formatversion bietet Unterstützung für die Serialisierung desQuantumCircuit.layoutattributs.
Fehlerkorrekturen
-
Behebung der Deserialisierung von
DiagonalGateinstanzen durch QPY. Behoben #10364 -
Es wurde ein Problem mit der Funktion
qs_decomposition()behoben, die eine Quanten-Shannon-Zerlegung durchführt. Wenn sie für triviale numerische Einheiten aufgerufen wurde, die nicht von dieser Zerlegung profitieren, wurde ein unerwarteter Fehler ausgelöst. Dieser Fehler wurde behoben, so dass solche Einheiten erkannt werden und das Ersatzschaltbild zurückgegeben wird. Behoben #10036 -
Es wurde ein Problem in der
BasicSwapklasse, das verhinderte, dass dieBasicSwap.run()methode nicht funktionierte, wenn das Schlüsselwortargumentfake_runbei der Instanziierung der Klasse aufTruegesetzt wurde. Behoben #10147 -
Ein Problem beim Kopieren von Schaltkreisen mit new-style
Clbits undQubits (Bits ohne Register), bei denen Verweise auf diese Bits aus der enthaltenen Schaltung unterbrochen werden konnten, was zu Problemen bei der Serialisierung und der Visualisierung von Schaltungen führte. Behoben #10409 -
Der
CheckMaptranspiler-Pass wird nicht mehr fälschlicherweise fehlschlagen, wenn es sich um verschachtelte bedingte Strukturen handelt, die von der Control-Flow-Builder-Schnittstelle erstellt wurden. Siehe #10394. -
Ein Fehler des Pulse Builders wurde behoben, wenn der Kontext mit
BackendV2. -
Die Ausgabe von pulse
measure()undmeasure_all()beim Aufruf von Funktionen mit demBackendV2backend aufgerufen werden. -
Die Dimensionen der Ausgangsdichtematrix von
DensityMatrix.partial_transpose()so dass sie mit den Dimensionen der entsprechenden Eingabedichtematrix übereinstimmen. -
Der Import von
qiskit.primitivesführt nicht mehr zu Verwerfungswarnungen, die von dem veraltetenqiskit.opflowmodul stammen. Diese Warnungen wären den Benutzern durch die Standardfilter von Python verborgen geblieben, lösten aber den eifrigen Import vonopflowaus, so dass ein späterer Import durch einen Benutzer die Warnungen nicht auslösen würde. Behoben #10245 -
Die OpenQASM 2 Ausgabe von
QuantumCircuit.qasm()wenn ein benutzerdefiniertes Torobjekt ein Tor mit demselben Namen enthielt. Idealerweise sollte dies bei den meisten Gattern nicht passieren, aber komplexe algorithmische Operationen wie dieGroverOperatorklasse könnten solche Strukturen versehentlich erzeugen. Siehe #10162. -
Es wurde eine Regression in der LaTeX Schublade von
QuantumCircuit.draw()wenn temporäre Dateien in einem vom Arbeitsverzeichnis getrennten Dateisystem abgelegt werden. Siehe #10211. -
Ein Problem wurde behoben mit
UnitarySynthesisbei Verwendung des Parameterstarget, bei dem Schaltkreise mit Kontrollfluss nicht korrekt auf das Ziel abgebildet wurden. -
Fehler behoben in
VQDworesult.optimal_valueseine Kopie vonresult.optimal_pointswar. Sie gibt nun die entsprechenden Werte zurück. Behoben #10263 -
Die Fehlermeldungen, die ausgegeben werden, wenn ein Versuch, einen vollständig gebundenen
ParameterExpressionin ein konkretesfloatoderintzu konvertieren, fehlgeschlagen ist, zum Beispiel weil der Ausdruck natürlich eine komplexe Zahl war. Behoben #9187 -
Feste
floatUmrechnungen fürParameterExpressionwerte, die zu irgendeinem Zeitpunkt in ihrer Konstruktionsgeschichte eine imaginäre Komponente hatten, die später gelöscht wurde. Bei Verwendung von Sympy als Backend hätten diese Konvertierungen in der Regel bereits funktioniert. Bei der Verwendung von Symengine als Backend schlugen diese Konvertierungen oft mit Typfehlern fehl, obwohl das Ergebnis symbolisch ausgewertet wurde, um real zu sein, undParameterExpression.is_real()wahr ist. Behoben #10191 -
Behebung der
qpyserialisierung vonQuantumCircuit.layoutattribut. Zuvor wurde daslayoutbei der Serialisierung eines Schaltkreises nach QPY weggelassen. Behoben #10112
Aer- 0.12.2
Vorspiel
Qiskit Aer 0.12.2 ist das zweite Patch-Release zu 0.12.0. Damit werden einige Fehler behoben, die seit der Veröffentlichung von 0.12.1 entdeckt wurden.
Anmerkungen zu Upgrades
-
Qiskit Aer erfordert nun eine CUDA-Version für den GPU-Simulator auf 11.2 oder höher. Zuvor war CUDA 10.1 die minimal unterstützte Version. Diese Änderung war aufgrund von Änderungen im Upstream-CUDA-Ökosystem, einschließlich der Unterstützung von cuQuantum, notwendig. Zur Unterstützung von Benutzern, die mit verschiedenen CUDA-Versionen arbeiten, ist jetzt ein separates Paket für CUDA 11 verfügbar:
qiskit-aer-gpu-cu11. Die Verwendung des Paketsqiskit-aer-gpuerfordert jetzt CUDA 12. Wenn Sie bereits ein Benutzer des Paketsqiskit-aer-gpusind und CUDA 11 verwenden möchten, müssen Sie das Programm ausführen:pip uninstall qiskit-aer-gpu && pip install -U qiskit-aer-gpu-cu11um von den früheren CUDA 10.x kompatiblen
qiskit-aer-gpuPaketen auf das neue CUDA 11 kompatible Paket zu wechseln. Wenn Sie CUDA 12 bereits lokal einsetzen, können Sie dasqiskit-aer-gpuPaket wie gewohnt aktualisieren.
Fehlerkorrekturen
-
Wenn eine Schaltung bedingte und Parameter hat, wurde die Schaltung nicht korrekt simuliert, weil die Parameterbindungen von Aer falsche Positionen für die Anwendung der Parameter verwendeten. Dies liegt an der mangelnden Berücksichtigung von bfunc-Operationen, die durch Conditional injiziert werden. Mit diesem Commit werden die Parameter unter Berücksichtigung der injizierten bfun-Operationen auf die richtigen Positionen gesetzt.
-
Parameter für globale Phasen wurden in #1814 nicht korrekt gesetzt. https://github.com/Qiskit/qiskit-aer/pull/1814 Parameterwerte für globale Phasen wurden in eine Schablonenschaltung kopiert und nicht in die tatsächlich zu simulierenden Schaltungen. Diese Übergabe kopiert die Parameterwerte korrekt in die zu simulierenden Schaltkreise.
-
Die Ergebnisse von
backend.run()waren nicht serialisierbar, da sieAerCircuits enthalten. Diese Übergabe macht die Ergebnisse serialisierbar, indemAerCircuits aus den Metadaten entfernt wird. -
meth:
QuantumCircuit.save_statevector()funktioniert nicht, wenn der Schaltkreis aus OpenQASM3 text generiert wurde, weil seine Quantenregister doppelte Qubit-Instanzen haben. Mit dieser Übergabe verwendet :meth:QuantumCircuit.save_statevector():data:QuantumCircuit.qubits, um die zu speichernden Qubits zu erhalten.
IBM Q Anbieter 0.20.2
Keine Änderung.
0.43.2
Zur Erinnerung: Die Aufnahme von Qiskit Aer in das Paket qiskit ist veraltet. Die nächste Unterversion von Qiskit Aer ( 0.13 ) wird in keiner Version des qiskit Pakets enthalten sein, und Sie sollten sofort damit beginnen, Aer separat zu installieren:
pip install qiskit-aerund importiert sie als:
import qiskit_aerAb Qiskit 0.44 wird der Befehl pip install qiskit nicht mehr Qiskit Aer oder den veralteten IBM Q Provider installieren, der bereits durch den neuen IBM Provider ersetzt wurde.
Terra- 0.24.1
Keine Änderung
Aer- 0.12.1
Vorspiel
Qiskit Aer 0.12.1 ist die erste Patch-Veröffentlichung auf 0.12.0. Damit werden einige Fehler behoben, die seit der Veröffentlichung von 0.12.0 entdeckt wurden.
Bekannte Probleme
- Behebung eines Fehlers, der falsche Erwartungswerte in
Estimatorliefert, wennabelian_grouping=True.
Anmerkungen zu Upgrades
- Verbesserte Leistung, wenn die gleichen Schaltungen und mehrere Parameter an
Estimatormitapproximation=Trueübergeben werden.
Hinweise zu veralteten Versionen
- Die Optionen von meth:~.AerSimulator.run müssen die richtigen Typen verwenden.
Fehlerkorrekturen
-
Leistungseinbußen aufgrund der Einführung von
AER::Configwurden behoben. Diese Klasse hat viele Felder, wird aber häufig inAER::Transpile::CircuitOptimizationkopiert. Ursprünglich wurdejson_t(die frühere Klasse für die Konfiguration) auch häufig kopiert, aber sie hat in den meisten Fällen Einträge, und dann ist dieser Kopier-Overhead kein Problem. Mit dieser Korrektur kopiertAER::Transpile::CircuitOptimizationnichtAER::Config. -
Wenn BLAS-Aufrufe fehlschlagen, weil omp-Threads keine Ausnahmen behandeln, stürzt Aer ohne Fehlermeldung ab. Dieser Fix sorgt dafür, dass omp-Threads Ausnahmen korrekt abfangen und dann außerhalb von omp-Schleifen erneut auslösen.
-
Bisher werden Parameter für Gatter in C++ nicht validiert. Wenn die Parameter kürzer sind als erwartet (aufgrund eines benutzerdefinierten Gatters), werden Segmentierungsfehler ausgelöst. Dieser Commit fügt Überprüfungen hinzu, ob die Parameterlänge expediert wird. Dieser Commit behebt die in #1612 gemeldeten Probleme. https://github.com/Qiskit/qiskit-aer/issues/1612
-
Seit 0.12.0 werden Parameterwerte in Schaltkreisen vorübergehend durch konstante Werte ersetzt, und die Parameterwerte werden in der C++-Bibliothek zugewiesen. Wenn also parameter_binds angegeben ist, gibt der Simulator Ergebnisse mit den Konstantenwerten als Parameterwerte zurück. Mit dieser Änderung löst Aer einen Fehler aus, wenn parameter_binds nicht angegeben ist, obwohl Schaltkreise Parameter haben.
-
Verfügbare Geräte und Methoden werden beim Import von Aer nicht mehr abgefragt.
-
Zuvor hatte
AerSimulatordie Metadaten von Schaltkreisen verändert, um die Konsistenz zwischen Eingabe und Ausgabe der Simulation aufrechtzuerhalten, mit dem Nebeneffekt einer unerwarteten Ansicht der Metadaten aus der Anwendung in der Simulation. Diese Lösung vermeidet die Verwendung von Schaltkreis-Metadaten, um die Konsistenz intern aufrechtzuerhalten, und bietet der Anwendung stets eine konsistente Ansicht der Metadaten. -
Ein Fehler wurde behoben, bei dem die Abweichung in den Metadaten in EstimatorResult komplex war und nun einen Float zurückgibt.
-
Ein Build-Break wurde behoben, um Qiskit Aer mit cuQuautum -Unterstützung (AER_ENABLE_CUQUANTUM=true) zu kompilieren. Diese Änderung hat keine Auswirkungen auf die Erstellung von CPU- und normalen GPU-Binärdateien.
-
Ein Fehler in
from_backend()wurde behoben, der einen Fehler auslöste, wenn das Backend keine T1 und T2 Werte (d.h. Keine) für ein Qubit in seinen Qubit-Eigenschaften hat. Diese Übergabe aktualisiertNoiseModel.from_backend()undbasic_device_gate_errors(), so dass sie eine IdentitätQuantumError(d.h. effektiv kein thermischer Relaxationsfehler) zu einem Qubit ohne T1 und T2 Werte für alle Gatter, die auf Qubits einschließlich des Qubits wirken, hinzufügen. #1779 und #1815 behoben. -
Behebung eines Problems: Auch wenn die Anzahl der Qubits durch eine Kopplungskarte oder die Gerätekonfiguration festgelegt ist, wird die Anzahl der Qubits bei der Konfiguration der Simulationsmethode entsprechend der Methode überschrieben. Behoben #1769
-
Dies ist ein Fix für die Einstellung des Bibliothekspfades in CMakeLists.txt für cuQuantum SDK. Da die neueste Version von cuQuantum Bibliotheken für CUDA 11.x und 12.x enthält, verwendet dieser Fix die von FindCUDA zurückgegebene CUDA-Version für den Pfad der Bibliotheken von cuQuantum und cuTENSOR.
-
Dies ist ein Fix für statische Link-Bibliotheken von cuQuantum, wenn mit CUQUANTUM_STATIC=true gebaut wird.
-
Die MPI-Parallelisierung wurde nicht aktiviert, da wir qobj nicht verwendet haben. Diese Korrektur setzt die Anzahl der Prozesse und den MPI-Rang korrekt.
-
AerCircuitwird aus einer Schaltung durch Iteration ihrer Operationen unter Überspringen von Sperrbefehlen erstellt. Das Überspringen von Sperranweisungen führt jedoch zu einer falschen Positionierung von Parameterbindungen. Diese Korrektur fügtbarrier()hinzu und sorgt für korrekte Parameterbindungen. -
Aer unterstützt immer noch Qobj als Argument von
run(), obwohl es veraltet ist. Seit 0.12.0 schlägt es jedoch immer fehl, wenn keinerun_optionsangegeben ist. Diese Korrektur ermöglicht die Simulation von Qobj ohnerun_options. -
Seit 0.12.0 wird
AerConfigfür die Simulationskonfiguration verwendet, während für die Argumente von meth:~.AerSimulator.run eine strenge Typüberprüfung durchgeführt wird. Diese Änderung fügt Casting hinzu, wenn Argumenttypen nicht erwartet werden. -
:meth:
QuantumCircuit.initialize()mit int-Wert wurde nicht korrekt verarbeitet, wie in #1821 <https://github.com/Qiskit/qiskit-aer/issues/1821> berichtet. Dieser Commit ermöglicht eine solche Initialisierung durch die Zerlegung von initialize-Anweisungen. -
QuantumCircuitunterstützt die Parametrisierung seiner globalen_phase. Aer lässt eine solche Parametrisierung jedoch nicht zu und versagt, wenn der Transpiler parametrisierte globale Phasen erzeugt. Dieser Commit unterstützt die Parametrisierung von global_phase und behebt Probleme im Zusammenhang mit https://github.com/Qiskit/qiskit-aer/issues/1795, https://github.com/Qiskit/qiskit-aer/issues/1781, und https://github.com/Qiskit/qiskit-aer/issues/1798. -
Aer wird nun
omp_set_max_active_levels()anstelle des veraltetenomp_set_nested()verwenden, wenn es gegen aktuelle Versionen von OpenMP kompiliert wird.
IBM Q Anbieter 0.20.2
Keine Änderung.
0.43.1
Terra- 0.24.1
Vorspiel
Qiskit Terra 0.24.1 ist die erste Patch-Veröffentlichung auf 0.24.0. Damit werden einige Fehler behoben, die seit der Veröffentlichung von 0.24.0 entdeckt wurden.
Anmerkungen zu Upgrades
- Geändert
QuantumCircuit.assign_parameters()um zugewiesene Integer- und Float-Werte direkt in die Parameter vonInstructioninstanzen in der Schaltung zu binden, anstatt die Werte innerhalb einerParameterExpression. Diese Änderung sollte nur geringe Auswirkungen auf die Benutzer haben, dafloat(QuantumCircuit.data[i].operation.params[j])immer noch einefloaterzeugt (und die einzige Möglichkeit ist, auf den Wert einerParameterExpression). Außerdem,Instruction()parameter können bereitsfloatsein, ebenso wie einParameterExpressionsein, so dass Code, der sich mit Befehlsparametern befasst, bereits beide Fälle behandeln sollte. Die größte Wahrscheinlichkeit für Auswirkungen auf den Benutzer besteht in Code, derisinstanceverwendet, um zu prüfen, obParameterExpressionverwendet und sich je nach Ergebnis unterschiedlich verhält. Zusätzlich serialisiert qpy den numerischen Wert in einem boundParameterExpressionmit einer anderen Genauigkeit alsfloat(siehe auch den zugehörigen Fehlerbehebungshinweis zuQuantumCircuit.assign_parameters()).
Fehlerkorrekturen
-
Aktualisiert
plot_gate_map(),plot_error_map(), undplot_circuit_layout()um 433 Qubit Heavy-Hex-Kopplungskarten zu unterstützen. Dies ermöglicht die Kopplung von Kartenvisualisierungen für das Backend von IBM Quantum 'sibm_seattle. -
Die Bindung von numerischen Werten wurde mit
QuantumCircuit.assign_parameters()um eine Fehlanpassung zwischen den Werten der Schaltkreisanweisungsparameter und den entsprechenden Parameterschlüsseln im Kalibrierungswörterbuch des Schaltkreises zu vermeiden. #9764 und #10166 behoben. Siehe auch den entsprechenden Upgrade-Hinweis zuQuantumCircuit.assign_parameters(). -
Ein Fehler in
BlockCollapserwurde behoben, bei dem klassische Bits ignoriert wurden, wenn ein Block von Knoten kollabiert wurde. -
Ein Fehler wurde behoben in
replace_block_with_op()undreplace_block_with_op()der dazu führte, dass klassische Bits ignoriert wurden. -
Es wurde ein Fehler in
QuantumCircuit.compose()behoben, bei dem das AttributSwitchCaseOp.targetin der Unterschaltung nicht korrekt auf ein Register in der Basisschaltung abgebildet wurde. -
Behebung eines Fehlers in
RZXCalibrationBuilderbei dem der Aufruf von calibration mit falschen Parametern zum Absturz führte, anstatt eine Exception auszulösen. -
Es wurde ein Problem mit der
BooleanExpression.from_dimacs_file()konstruktormethode, bei der der Ausnahmetyp, der ausgelöst wurde, wenn tweedledum nicht installiert war, nicht dem erwartetenMissingOptionalLibraryentsprach. Behoben #10079 -
Die Verwendung von
initial_layoutin Aufrufen vontranspile()wird kein Fehler mehr auftreten, wenn die Schaltung Qubits enthält, die in keinem Register enthalten sind, oder Qubits, die in mehr als einem Register vorhanden sind. Siehe #10125. -
Die Gatterzerlegung von mehrfach gesteuerten Z-Rotationsgattern wurde korrigiert, die über
QuantumCircuit.mcrz(). Bisher wurde bei dieser Methode ein mehrfach gesteuertes Phasentor eingesetzt, das eine relative Phasendifferenz zur Z-Drehung aufweist. Um das vorherigeQuantumCircuit.mcrz()verhalten zu erhalten, verwenden SieQuantumCircuit.mcp(). -
Es wurde ein Problem mit dem
PassManagerConfig.from_backend()konstruktor beim Erstellen einesPassManagerConfigobjekts aus einerBackendV1instanz erstellt wurde, für die kein Kopplungskartenattribut definiert war. Zuvor erzeugte der Konstruktor fälschlicherweise einCouplingMapobjekt mit 0 Qubits, anstattNonezu verwenden. Behoben #10171 -
Behebt einen Fehler in Qiskit 0.24.0, bei dem numerische Drehwinkel vor der Vorbereitung der Zwei-Qubit-Synthese nicht mehr durch symbolische ersetzt wurden. Dies führte zu einer Ausnahme, da die Syntheseroutinen numerische Matrizen benötigen.
-
Behebung eines Fehlers, bei dem die parallele Ausführung von
Optimize1qGatesDecompositionparallel ausgeführt wurde, einen Fehler auslöste, weil OneQubitGateErrorMap nicht gepickt werden konnte. -
Behebung eines Fehlers in den
VF2LayoutundVF2PostLayoutdurchgängen, bei denen die Durchgänge die 1-Qubit-Fehlerkomponente bei der Auswertung eines potenziellen Layouts nicht berücksichtigten.
Aer- 0.12.0
Keine Änderung
IBM Q Anbieter 0.20.2
Keine Änderung
0.43.0
Terra- 0.24.0
Vorspiel
Dies ist eine wichtige Funktionsversion, die zahlreiche neue Funktionen und Fehlerbehebungen enthält.
Diese Version ist die letzte Version mit Unterstützung für die Ausführung von Qiskit mit Python 3.7. Ab der nächsten Minor-Version wird Python >= 3.8 benötigt, um Qiskit auszuführen.
Die Highlights dieser Veröffentlichung:
QuantumInstance, OpFlow, und die Veraltung der Verwendung von Algorithmen
Mit dieser Version wird offiziell die Klasse QuantumInstance klasse (und die zugehörigen Hilfsmethoden und -klassen), das qiskit.opflow modul, und jede Verwendung dieser in qiskit.algorithms. Diese Verwerfung ist das Ergebnis einer langen Arbeit, die in Qiskit Terra 0.21.0 begann, um das qiskit.algorithms modul zu überarbeiten, damit es auf dem rechnergestützten primitives. Für alle bestehenden Benutzer gibt es entsprechende Migrationsleitfäden für die Umstellung auf den neuen Arbeitsablauf:
QuantumInstancemigrationsleitfaden: https://qisk.it/qi _migrationOpflowmigrationsleitfaden: https://qisk.it/opflow _migration- Leitfaden zur Migration von Algorithmen: https://qisk.it/algo _migration
OpenQASM2 Verbesserungen
Diese Version enthält eine umfassende Überarbeitung der OpenQASM 2.0 Unterstützung in Qiskit. Die erste Änderung ist die Einführung eines neuen Parsers für OpenQASM 2.0 im qiskit.qasm2 modul. Dieses neue Modul ersetzt das bestehende qiskit.qasm modul. Der neue Parser ist expliziter und korrekter in Bezug auf die Sprachspezifikation. Er ist ebenfalls in Rust implementiert und ist deutlich schneller als der bisherige Parser. Zusammen mit dem neuen Parser wurde der OpenQASM 2.0 Exporter einem umfangreichen Refactoring unterzogen, das die Korrektheit der Ausgabe bei Verwendung der QuantumCircuit.qasm() methode zur Erzeugung von QASM-Ausgaben aus einem QuantumCircuit objekt.
Transpiler-Unterstützung für Geräte mit getrennter Konnektivität
Der Transpiler unterstützt nun Backends mit disjunkter Konnektivität. Bisher unterstützte der Transpiler nur Backends, die vollständig verbunden waren (d.h. es gab einen Pfad, um Operationen zwischen allen Qubit-Paaren im Backend durchzuführen). Wenn ein Backend keine Konnektivität hat, kann der Transpiler nun schlussfolgern, wie Layout (Layout Stage ) und Routing (Routing Stage ) für das Backend anzuwenden sind. Wenn die Eingabeschaltung nicht auf der Hardware ausgeführt werden kann, weil die Konnektivität zwischen den angeschlossenen Komponenten nicht gegeben ist, wird ein beschreibender Fehler zurückgegeben.
Das Heron-Gerät, das in der Hardware-Roadmap von IBM Quantum vorgestellt wird, beschreibt beispielsweise ein künftiges Backend mit gemeinsamer Steuerungshardware und klassischer Echtzeitkommunikation zwischen einzelnen Quantenprozessoren. Diese Unterstützung ermöglicht es dem Target die genaue Modellierung dieser Arten von zukünftigen Geräten oder anderer Hardware mit ähnlichen Einschränkungen.
Schalterbetrieb
Diese Version fügt eine neue Kontrollflussoperation hinzu, die switch-Anweisung. Dies wird durch eine neue Operationsklasse implementiert SwitchCaseOp und der QuantumCircuit.switch() methode. Dies ermöglicht das Einschalten eines numerischen Eingangs (z. B. eines klassischen Registers oder Bits) und die Ausführung der Schaltung, die dem entsprechenden Wert entspricht.
Neue Funktionen
-
Hinzufügen der Funktionen
add_deprecation_to_docstring(),deprecate_arg(), unddeprecate_func()zu demqiskit.utilsmodul hinzugefügt.add_deprecation_to_docstring()wird den Docstring der Funktion umschreiben, um eine Sphinx.. deprecated::Direktive einzuschließen, so dass die Verwerfung in den Docs und aufhelp()angezeigt wird. Die Verwerfungsdekoratoren vonqiskit.utilsrufenadd_deprecation_to_docstring()bereits für Sie; aber Sie können sie direkt aufrufen, wenn Sie andere Mechanismen für Verwerfungen verwenden.@deprecate_funcersetzt@deprecate_functionund wird verwendet, um eine ganze Funktion zu verwerfen. Es wird den größten Teil der Verwerfungsmeldung automatisch für Sie generieren.@deprecate_argersetzt@deprecate_argumentsund wird verwendet, um ein Argument in einer Funktion zu verwerfen. Sie wird eine nützlichere Meldung als die vorherige Funktion erzeugen. Es ist auch flexibler, z. B. ist es möglich,predicateso einzustellen, dass nur bestimmte Situationen veraltet sind, wie z. B. die Verwendung eines veralteten Wertes oder Datentyps.
Transpiler-Funktionen
-
Es wurde ein alternativer Weg hinzugefügt, um in
HLSConfigdie Liste der Synthesemethoden anzugeben, die für ein bestimmtes High-Level-Objekt verwendet werden. Wie bisher kann eine Synthesemethode als Tupel angegeben werden, das aus dem Namen der Methode und zusätzlichen Argumenten besteht. Außerdem kann eine Synthesemethode als Tupel angegeben werden, das aus einer Instanz vonHighLevelSynthesisPluginund zusätzlichen Argumenten besteht. Wenn es keine zusätzlichen Argumente gibt, kann eine Synthesemethode außerdem einfach durch ihren Namen oder durch eine Instanz vonHighLevelSynthesisPlugin. Das folgende Beispiel veranschaulicht die neue Funktionalität:from qiskit import QuantumCircuit from qiskit.circuit.library.generalized_gates import PermutationGate from qiskit.transpiler import PassManager from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig, HighLevelSynthesis from qiskit.transpiler.passes.synthesis.high_level_synthesis import ACGSynthesisPermutation qc = QuantumCircuit(6) qc.append(PermutationGate([1, 2, 3, 0]), [1, 2, 3, 4]) # All of the ways to specify hls_config are equivalent hls_config = HLSConfig(permutation=[("acg", {})]) hls_config = HLSConfig(permutation=["acg"]) hls_config = HLSConfig(permutation=[(ACGSynthesisPermutation(), {})]) hls_config = HLSConfig(permutation=[ACGSynthesisPermutation()]) # The hls_config can then be passed as an argument to HighLevelSynthesis pm = PassManager(HighLevelSynthesis(hls_config=hls_config)) qc_synthesized = pm.run(qc) -
Unterstützung für das
CouplingMapobjekts, eine disjunkte Konnektivität zu haben. Zuvor konnte einCouplingMapnur konstruiert werden, wenn der Graph zusammenhängend war. Dies ermöglicht die Verwendung vonCouplingMapum Hardware mit disjunkten Qubits darzustellen, z. B. Hardware mit Qubits auf mehreren separaten Chips. -
Eine neue Methode hinzugefügt
CouplingMap.connected_components()hinzugefügt, die verwendet wird, um eine Liste vonCouplingMapkomponenten-Untergraphen für eine disjunkteCouplingMap. Wenn dasCouplingMapobjekt verbunden ist, gibt dies nur ein einzelnesCouplingMapzurück, das dem Original entspricht. -
Neue Regeln zur eingebauten
EquivalenceLibraryinstanz:qiskit.circuit.equivalence_library.SessionEquivalenceLibrary. Die neu hinzugefügten Regeln sind: -
High-Level-Synthese-Plugins hinzugefügt für
LinearFunctionund fürqiskit.quantum_info.Cliffordhinzugefügt, die die Menge der Synthesemethoden erweitern, die vonHighLevelSynthesistranspiler-Pass aufgerufen werden können.Für
LinearFunctionsind die verfügbaren Plugins unten aufgeführt:Plug-in-NameHigh-Level-Synthese-PlugindefaultDefaultSynthesisLinearFunctionkmsKMSSynthesisLinearFunctionpmhPMHSynthesisLinearFunctionFür
qiskit.quantum_info.Cliffordsind die verfügbaren Plugins unten aufgeführt:Plug-in-NameHigh-Level-Synthese-PlugindefaultDefaultSynthesisCliffordagAGSynthesisCliffordbmBMSynthesisCliffordgreedyGreedySynthesisCliffordlayersLayerSynthesisCliffordlnnLayerLnnSynthesisCliffordBitte lesen Sie die
qiskit.synthesisdokumentation für weitere Informationen zu den einzelnen Methoden.Das folgende Beispiel veranschaulicht einige der neuen Plugins:
from qiskit.circuit import QuantumCircuit from qiskit.circuit.library import LinearFunction from qiskit.quantum_info import Clifford from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig, HighLevelSynthesis # Create a quantum circuit with one linear function and one clifford qc1 = QuantumCircuit(3) qc1.cx(0, 1) qc1.swap(0, 2) lin_fun = LinearFunction(qc1) qc2 = QuantumCircuit(3) qc2.h(0) qc2.cx(0, 2) cliff = Clifford(qc2) qc = QuantumCircuit(4) qc.append(lin_fun, [0, 1, 2]) qc.append(cliff, [1, 2, 3]) # Choose synthesis methods that adhere to linear-nearest-neighbour connectivity hls_config = HLSConfig(linear_function=["kms"], clifford=["lnn"]) # Synthesize qct = HighLevelSynthesis(hls_config)(qc) print(qct.decompose()) -
Ein neuer Transpiler-Pass wurde hinzugefügt,
MinimumPointhinzugefügt, der in erster Linie zur Überprüfung einer Schleifenbedingung in einerPassManager. Dieser Durchlauf verfolgt den Zustand der Felder in der Eigenschaftsmenge über die vergangenen Ausführungen und setzt ein boolesches Feld, wenn entweder ein fester Punkt über der Backtracking-Tiefe erreicht wird oder der minimale gefundene Wert ausgewählt wird, wenn die Backtracking-Tiefe erreicht ist. Dies ist eine Alternative zuFixedPointdie einfach nach einem festen Wert in einem Eigenschaftsfeld zwischen aufeinanderfolgenden Ausführungen sucht. -
Eine neue Methode wurde hinzugefügt,
swap_nodes()zu der MethodeDAGCircuitum das Vertauschen von teilweise verbundenen Knoten zu ermöglichen. Teilweise verbunden bedeutet hier, dass die beiden Knoten mindestens eine Kante teilen (die ein Qubit oder Clbit darstellt). Wenn die Knoten keine gemeinsamen Kanten haben, wird aDAGCircuitErrorerhoben. -
Hinzufügen eines neuen Synthesealgorithmus
synth_cz_depth_line_mr()eines CZ-Schaltkreises für Linear Nearest Neighbor (LNN)-Verbindungen in 2-Qubit-Tiefe von 2n+2 unter Verwendung von CX- und Phasengattern (S, Sdg oder Z). Die synthetisierte Schaltung kehrt die Reihenfolge der Qubits um. Der Synthesealgorithmus basiert auf der Arbeit von Maslov und Roetteler ( https://arxiv.org/abs/1705.09176 ). -
Hinzufügen eines neuen Synthesealgorithmus
synth_clifford_depth_lnn()einer Clifford-Schaltung für LNN-Konnektivität in 2-Qubit-Tiefe von 9n+4 (was immer noch nicht optimal ist), unter Verwendung der geschichteten Clifford-Synthese (synth_clifford_layers()),synth_cnot_depth_line_kms()um die CX-Schicht in der Tiefe 5n zu synthetisieren, undsynth_cz_depth_line_mr()um jede der CZ-Schichten in der Tiefe 2n+2 zu synthetisieren. Auf diese PR wird eine weitere PR folgen, die auf der jüngsten Arbeit von Maslov und Yang ( https://arxiv.org/abs/2210.16195 ), die die CX-CZ-Schichten in der Tiefe 5n für LNN-Konnektivität synthetisiert und eine weitere Optimierung durchführt, wodurch die Tiefe einer Clifford-Schaltung auf 7n-4 für LNN-Konnektivität reduziert wird. -
Äquivalenzen zwischen den kontrollierten Pauli-Drehungen und Übersetzungen in Zwei-Pauli-Drehungen sind jetzt in der Äquivalenzbibliothek für Qiskit-Standardgatter verfügbar. Dies ermöglicht zum Beispiel die Übersetzung eines
CRZGatein einRZZGateplusRZGateoder aCRYGatein ein einzelnesRZXGateplus Einzel-Qubit-Gatter:from qiskit.circuit import QuantumCircuit from qiskit.compiler import transpile angle = 0.123 circuit = QuantumCircuit(2) circuit.cry(angle, 0, 1) basis = ["id", "sx", "x", "rz", "rzx"] transpiled = transpile(circuit, basis_gates=basis) print(transpiled.draw()) -
Eine neue Option,
copy_operations, wurde zucircuit_to_dag()um das optionale Deaktivieren des tiefen Kopierens der Operationen von der EingabeQuantumCircuitzur AusgabeQuantumCircuit. In Fällen, in denen die Eingabe :class`~.QuantumCircuit` nach der Konvertierung nicht mehr verwendet wird, ist dieses tiefe Kopieren ein unnötiger Overhead, da alle gemeinsam genutzten Referenzen keine potenziellen unerwünschten Nebeneffekte haben, wenn die EingabeQuantumCircuitverworfen wird. -
Eine neue Option,
copy_operations, wurde zudag_to_circuit()um das optionale Deaktivieren des tiefen Kopierens der Operationen von der EingabeDAGCircuitzur AusgabeQuantumCircuit. In Fällen, in denen die EingabeDAGCircuitnach der Konvertierung nicht mehr verwendet wird, ist dieses tiefe Kopieren ein unnötiger Overhead, da alle gemeinsam genutzten Referenzen keine potenziellen unerwünschten Nebeneffekte haben, wenn die EingabeDAGCircuitverworfen wird. -
Hinzufügen einer neuen Funktion
passmanager_stage_plugins()in dasqiskit.transpiler.preset_passmanagers.pluginmodul hinzugefügt. Diese Funktion wird verwendet, um eine Zuordnung von Plugin-Namen zu ihrem Klassentyp zu erhalten. Dies ermöglicht die Identifizierung und Abfrage jeder definierten Pass Manager Stage Plugin Dokumentation. Zum Beispiel:>>> from qiskit.transpiler.preset_passmanagers.plugin import passmanager_stage_plugins >>> passmanager_stage_plugins('routing')['lookahead'].__class__ qiskit.transpiler.preset_passmanagers.builtin_plugins.LookaheadSwapPassManager >>> help(passmanager_stage_plugins('routing')['lookahead']) Help on BasicSwapPassManager in module qiskit.transpiler.preset_passmanagers.builtin_plugins object: class BasicSwapPassManager(qiskit.transpiler.preset_passmanagers.plugin.PassManagerStagePlugin) | Plugin class for routing stage with :class:`~.BasicSwap` ... -
Der Transpiler-Pass
Errorakzeptiert nun auch aufrufbare Eingaben für seinenmsgParameter. Wenn diese Eingabe-Callables verwendet werden, wird dasproperty_set-Attribut des Durchlaufs übergeben und es wird erwartet, dass sie eine Zeichenkette zurückgeben, die für die Fehlermeldung verwendet wird, wenn der Durchlauf ausgeführt wird. Zum Beispiel:from qiskit.transpiler.passes import Error def error_message(property_set): size = property_set["size'] return f"The circuit size is: {size}" error_pass = Error(error_message)Wenn
error_passin einem Durchlaufmanager enthalten ist, wird die Fehlermeldung"The circuit size is: n"ausgegeben, wobeindie im Eigenschaftssatz eingestellte Schaltkreisgröße ist (in der Regel von der vorherigen Ausführung desSizedurchlaufs). -
Die Methode
build_coupling_map()methode hat ein neues Schlüsselwortargument,filter_idle_qubits, das, wenn es aufTruegesetzt wird, alle Qubits aus der Ausgabe entferntCouplingMapdie keine Operationen unterstützen. -
Der
GateDirectiontranspiler-Durchlauf kann nun korrekt mitSwapGateinstanzen, die in der Schaltung vorhanden sein können, wenn sie in einer Schaltung ausgeführt werden. In diesen Fällen, wenn die Qubit-Argumente des Swap-Gates auf der nicht-nativen Richtung einer Kante liegen, wird die Reihenfolge der Argumente umgedreht. -
Die
RZXCalibrationBuilderundRZXCalibrationBuilderNoEchotranspilerübergänge verwenden nun korrekt einECRGatefür das Verschlusstor, wenn das native Verschlusstor des BackendsECRGate. Zuvor funktionierten die Pässe nur dann korrekt, wenn das VerschlusstorCXGate. -
Hinzufügen eines neuen Konstruktors für die
Targetklasse,Target.from_configuration()hinzugefügt, mit dem Sie einTargetobjekt aus den separaten Objekttypen für die Beschreibung der Einschränkungen eines Backends (z.B. Basisgatter,CouplingMap,BackendProperties, etc). Zum Beispiel:target = Target.from_configuration( basis_gates=["u", "cx", "measure"], coupling_map=CouplingMap.from_line(25), )Dies konstruiert ein
Targetobjekt, das die EigenschaftenUGate,CXGate, undMeasureglobal auf 25 Qubits verfügbar sind, die in einer Linie verbunden sind. -
Es wurde eine neue Funktion
synth_cnot_phase_aam()hinzugefügt, die zur Synthese von cnot-Phasenschaltungen für all-to-all-Architekturen unter Verwendung der Methode von Amy, Azimzadeh und Mosca verwendet wird. Diese Funktion ist identisch mit der verfügbaren Funktionqiskit.transpiler.synthesis.graysynth(), hat aber einen aussagekräftigeren Namen und ist logischer im Paketbaum platziert. Diese neue Funktion ersetzt die alte Funktion, die wahrscheinlich in einer zukünftigen Version veraltet sein wird. -
Interne Optimierungen des Routing-Algorithmus in
SabreSwapdie bei der Transpilierung nicht-dynamischer Schaltungen auf allen Optimierungsebenen ungleich Null verwendet werden, haben das Routing für sehr große Schaltungen beschleunigt. Zum Beispiel wird die Zeit für das Routen einer depth-5QuantumVolumeschaltung für eine 1081-Qubit-Schwer-Hex-Kopplungskarte ungefähr halbiert werden. -
Die Laufzeitleistung des
Optimize1qGatesDecompositiontranspilerpasses wurde erheblich verbessert. Dazu wurden alle Berechnungen für den Durchlauf in Rust umgeschrieben und die Anzahl der Zwischenobjekte, die bei der Ausführung des Durchlaufs erstellt werden, verringert. Dies sollte auch zu einer ähnlichen Verbesserung der Laufzeitleistung vontranspile()entsprechen, wenn das Schlüsselwortargumentoptimization_levelauf1,2oder3gesetzt ist. -
Hinzufügen einer neuen Synthesemethode
synth_stabilizer_layers()eines Stabilisierungszustandes in Schichten. Sie bietet eine ähnliche Zerlegung wie die in Lemma 8 von Bravyi und Maslov ( arxiv:2003.09412 ) beschriebene Synthese ohne den anfänglichen Hadamard-freien Teilkreis, der den Stabilisatorzustand nicht beeinflusst. -
Hinzufügen einer neuen Synthesemethode
synth_stabilizer_lnn()eines Stabilisatorzustands für lineare Nächste-Nachbarn-Konnektivität in 2-Qubit-Tiefe von 2n+2 und zwei verschiedenen CX-Schichten, unter Verwendung von CX- und Phasengattern (S, Sdg oder Z). Der Synthesealgorithmus basiert auf der Arbeit von Maslov und Roetteler ( https://arxiv.org/abs/1705.09176 ). -
Der
SabreLayoutpass unterstützt nun die Ausführung gegen ein Ziel mit einer disjunktenCouplingMap. Wenn eine disjunkte Kopplung angestrebt wird, wird die EingabeDAGCircuitin seine zusammenhängenden Komponenten virtueller Qubits aufgeteilt, jede Komponente wird auf die zusammenhängenden Komponenten der virtuellen Qubits abgebildetCouplingMapdas Layout wird für jede zusammenhängende Komponente isoliert ausgeführt, und dann werden alle Layouts kombiniert und zurückgegeben. Wenn das Argumentrouting_passgesetzt ist, unterstützt der Pass nicht die Ausführung mit disjunkten Verbindungen. -
Die folgenden Layout- und Routing-Transpilerpässe aus den
qiskit.transpiler.passesmodulen unterstützen nun die Annahme einesTargetobjekt, das verwendet wird, um die Einschränkungen eines Ziel-Backends über das erste Positionsargument zu modellieren (derzeit entwedercoupling_mapoderbackend_propertiesgenannt).Die Liste der Pässe mit der neuen Unterstützung für
Targeteingabe sind:CSPLayoutFullAncillaAllocationLayout2qDistanceNoiseAdaptiveLayoutSabreLayoutTrivialLayoutBasicSwapBIPMappingLayoutTransformationLookaheadSwapSabreSwapStochasticSwapCheckMap
-
Die Konstruktionshilfsfunktion des Passmanagers
generate_embed_passmanager()akzeptiert nun auch einTargetfür ihr einziges Positionsargument (derzeitcoupling_map). Dies kann verwendet werden, um eine Layout-Einbettung zu konstruierenPassManageraus einemTargetobjekt zu konstruieren, anstatt aus einemCouplingMap. -
Die folgenden Layout- und Routing-Transpilerpässe aus den
qiskit.transpiler.passesmodulen haben ein neues Schlüsselwortargument,target, das einTargetobjekt aufnimmt, das zur Modellierung der Beschränkungen eines Ziel-Backends verwendet wird. Wenn das Schlüsselwortargumenttargetangegeben ist, wird es als Wahrheitsquelle für alle Hardwarebeschränkungen verwendet, die bei der Durchführung des Transpilerdurchlaufs verwendet werden. Es ersetzt alle anderen Argumente zur Angabe von Hardware-Einschränkungen, typischerweise diejenigen, die einCouplingMap,InstructionScheduleMapoder eine Basis-Gate-Liste enthalten. Die Liste dieser Durchgänge mit dem neuen Argumenttargetsind: -
Die Hilfsfunktion für die Konstruktion des Pass-Managers
generate_scheduling()hat ein neues Schlüsselwortargumenttargetwelches verwendet wird um einTargetobjekts verwendet wird, um die Einschränkungen des Ziel-Backends zu modellieren, für das kompiliert wird, wenn eine neuePassManager. Wenn dieses neue Argument angegeben wird, ersetzt es das andere Argumentinst_map. -
Das
defaultPlugin, das vomUnitarySynthesistranspiler-Pass verwendete Plugin wählt nun die Ein- und Zwei-Qubit-Unitaritätssynthese auf der Grundlage der Fehlerraten aus, die in derTarget. Insbesondere werden alle möglichen Synthesemethoden, die vom Plugin unterstützt werden, durchgespielt und die Option gewählt, die den geringsten Fehler ergibt. Für eine Ein-Qubit-Zerlegung können Pauli-Basis (z. B. RZ-RX-RZ oder RZ-RY-RZ), generische unitäre Basis (z. B. U) und einige andere verwendet werden. Für eine Zwei-Qubit-Zerlegung kann eine beliebige superkontrollierte Basis (z. B. CNOT, iSWAP, B) oder eine mehrfach kontrollierte Basis (z. B. CZ, CH, ZZ^.5, ZX^.2, usw.) verwendet werden. -
Die Schnittstelle für
UnitarySynthesisPluginhat zwei neue optionale Eigenschaftensupports_gate_lengths_by_qubitundsupports_gate_errors_by_qubit, die, wenn sie gesetzt sind, die Feldergate_lengths_by_qubitbzw.gate_errors_by_qubitzu den Eingabeoptionen für die Methoderun()des Plugins hinzufügen. Diese neuen Felder sind eine alternative Ansicht der vongate_lengthsundgate_errorsgelieferten Daten, haben aber stattdessen die Form:{(qubits,): [Gate, length]}(wobeiGatedie Instanz vonGatefür diese Definition ist). Dies ermöglicht es Plugins, mit Gates desselben Typs zu arbeiten, die jedoch unterschiedliche Parameter haben. -
Ein neuer Transpiler-Pass wurde hinzugefügt,
UnrollForLoopsder verwendet wird, um alleForLoopOpoperationen in einer Schaltung. Dieser Durchlauf rollt, wenn möglich, for-Schleifen ab, wenn es keineContinueLoopOpoderBreakLoopOpinnerhalb des Body-Blocks der Schleife gibt. Zum Beispiel:from qiskit.transpiler.passes import UnrollForLoops from qiskit import QuantumCircuit unroll_pass = UnrollForLoops() qc = QuantumCircuit(1) # For loop over range 5 with qc.for_loop(range(5)) as i: qc.rx(i, 0) # Unroll loop into 5 rx gates unroll_pass(qc).draw("mpl")
-
Es wurde ein neuer Parameter
max_trialszur Übergabe hinzugefügtVF2PostLayoutder, wenn er angegeben wird, die Anzahl der ermittelten und verglichenen Layouts bei der Suche nach dem besten Layout begrenzt. Dieser Parameter unterscheidet sich von den bestehenden Parameterncall_limitundtime_limit(mit denen die Anzahl der vom Algorithmus VF2 durchgeführten Zustandsbesuche bzw. die Gesamtzeit für passVF2PostLayoutverwendet werden), indem er dazu dient, eine Obergrenze für die Zeit festzulegen, die für die Bewertung potenzieller Layouts aufgewendet wird, was bei größeren Geräten nützlich sein kann. -
Der
CheckMaptranspilerpass hat ein neues Schlüsselwortargument in seinem Konstruktor,property_set_field. Mit diesem Argument kann ein Feld im Eigenschaftssatz angegeben werden, in dem die Ergebnisse der Analyse gespeichert werden. Zuvor war es nur möglich, das Ergebnis im Feld"is_swap_mapped"zu speichern (was die Standardeinstellung ist). So können Sie das Ergebnis mehrerer Instanzen des Durchlaufs in einemPassManagerin verschiedenen Feldern zu speichern.
Schaltkreise Funktionen
-
Eine neue Gate-Klasse wurde hinzugefügt,
GlobalPhaseGatehinzugefügt, die verwendet werden kann, um eine globale Phase auf derQuantumCircuitinstanz. -
Ein neues Attribut wurde hinzugefügt,
layoutzu derQuantumCircuitklasse. Dieses Attribut wird in der Regel ausgefüllt durchtranspile()oderPassManager.run()(wenn die Layoutstufe und die Routingstufe in derPassManager) und enthält einTranspileLayoutdas die Information über die Permutation der Eingangsschaltung währendtranspile(). -
Dem Konstruktor der Klasse wurde ein neues Argument,
var_order, hinzugefügtPhaseOraclekonstruktor der Klasse hinzugefügt, um die Reihenfolge festzulegen, in der die Variablen im logischen Ausdruck berücksichtigt werden. Zum Beispiel:from qiskit.tools.visualization import plot_histogram from qiskit.primitives import Sampler from qiskit.circuit.library import PhaseOracle from qiskit.algorithms import Grover, AmplificationProblem oracle = PhaseOracle('((A & C) | (B & D)) & ~(C & D)', var_order=['A', 'B', 'C', 'D']) problem = AmplificationProblem(oracle=oracle, is_good_state=oracle.evaluate_bitstring) grover = Grover(sampler=Sampler()) result = grover.amplify(problem) print(result.circuit_results[0]) -
Ein neuer OpenQASM 2 Parser ist verfügbar in
qiskit.qasm2. Dieser hat zwei Einstiegspunkte:qasm2.load()undqasm2.loads()zum Lesen des Quellcodes aus einer Datei bzw. aus einer Zeichenkette:import qiskit.qasm2 program = """ OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; h q[0]; cx q[0], q[1]; """ bell = qiskit.qasm2.loads(program)Dieser neue Parser ist etwa 10x schneller als die bestehenden Parser bei
QuantumCircuit.from_qasm_file()undQuantumCircuit.from_qasm_str()für große Dateien und hat auch weniger Overhead bei jedem Aufruf. Der neue Parser ist besser erweiterbar, anpassbar und im Allgemeinen auch typsicherer; er versucht nicht, benutzerdefinierte Qiskit-Objekte auszugeben, wenn die Definition in der Datei OpenQASM 2 mit dem Qiskit-Objekt kollidiert, im Gegensatz zum aktuellen Exporter. Siehe dieqiskit.qasm2dokumentation des Moduls finden Sie alle Einzelheiten und weitere Beispiele. -
Verbesserung der Zerlegung von mehrfach gesteuerten Pauli-X- und Pauli-Y-Drehungen mit
QuantumCircuit.mcrx()undQuantumCircuit.mcry on :math:`n()zu CX-Gattern, für . Diese Verbesserung basiert auf arXiv:2302.06377. -
Qiskit unterstützt nun die Darstellung von
switchAnweisungen, indem es die neueSwitchCaseOpanweisung und derQuantumCircuit.switch()methode. Dies ermöglicht das Einschalten eines numerischen Eingangs (z. B. eines klassischen Registers oder Bits) und die Ausführung der Schaltung, die dem entsprechenden Wert entspricht. Mehrere Werte können auf denselben Stromkreis verweisen, undCASE_DEFAULTkann als immer übereinstimmende Bezeichnung verwendet werden.Sie können auch eine Builder-Schnittstelle verwenden, ähnlich wie bei den anderen Kontrollflusskonstrukten, um diese Switch-Anweisungen aufzubauen:
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister qreg = QuantumRegister(2) creg = ClassicalRegister(2) qc = QuantumCircuit(qreg, creg) qc.h([0, 1]) qc.measure([0, 1], [0, 1]) with qc.switch(creg) as case: with case(0): # if the register is '00' qc.z(0) with case(1, 2): # if the register is '01' or '10' qc.cx(0, 1) with case(case.DEFAULT): # the default case qc.h(0)Die Anweisung
switchwird vom gesamten Qiskit-Compiler-Stack unterstützt; Sie könnentranspile()schaltungen, die sie enthalten (wenn das Backend seine Unterstützung für das Konstrukt ankündigt), und sie wird nach QPY serialisiert.Der
switchDie Anweisung ist derzeit kein Feature von OpenQASM 3, wird aber aktiv entwickelt und in Erwägung gezogen und soll in naher Zukunft übernommen werden. Qiskit Terra bietet experimentelle Unterstützung für den Export dieser Anweisung in die OpenQASM 3-Syntax, die im verlinkten Pull-Request vorgeschlagen wird, unter Verwendung eines experimentellen Feature-Flags. Um eineswitchAnweisungsschaltung (wie die oben erstellte) mit dieser spekulativen Unterstützung nach OpenQASM 3 zu exportieren, gehen Sie wie folgt vorfrom qiskit import qasm3 qasm3.dumps(qc, experimental=qasm3.ExperimentalFeatures.SWITCH_CASE_V1)
Algorithmen Funktionen
-
Ein neues Attribut hinzugefügt
eigenvalue_thresholdfür dieAdaptVQEklasse hinzugefügt, mit dem eine neue Art von Schwellenwert konfiguriert werden kann, um den Algorithmus zu beenden, sobald sich der Eigenwert weniger als ein bestimmter Wert ändert. -
Ein neues Attribut hinzugefügt
gradient_thresholdfür dieAdaptVQEklasse hinzugefügt, das das Attributthresholdin Zukunft ersetzen wird. Dieses neue Attribut verhält sich genauso wie das bestehende Attributthreshold, hat aber aufgrund der Einführung zusätzlicher Schwellenwertoptionen in der Klasse einen genaueren Namen. -
Hinzufügen des
EstimationProblem.has_good_stateattribut hinzugefügt, mit dem überprüft werden kann, ob einEstimationProblemeinen eigenenEstimationProblem.is_good_statehat oder ob es der Standard ist. Dies ist nützlich für Überprüfungen in Amplitudenschätzern, wie z. BAmplitudeEstimation, die nur die Standardimplementierung unterstützen. -
Fügt ein Flag
localzurComputeUncomputestate Fidelity Klasse, die es erlaubt, die lokale Fidelität zu berechnen, die durch Mittelung über Einzel-Qubit-Projektoren definiert ist. -
Gradientenklassen ordnen das Gradientenergebnis nun entsprechend der Reihenfolge der Eingabeparameter neu an.
Beispiel:
from qiskit.algorithms.gradients import ParamShiftEstimatorGradient from qiskit.circuit import QuantumCircuit, Parameter from qiskit.primitives import Estimator from qiskit.quantum_info import SparsePauliOp # Create a circuit with a parameter p = {i: Parameter(f'p{i}') for i in range(3)} qc = QuantumCircuit(1) qc.rx(p[0], 0) qc.ry(p[1], 0) qc.rz(p[2], 0) op = SparsePauliOp.from_list([("Z", 1)]) param_values = [0.1, 0.2, 0.3] # Create a gradient object estimator = Estimator() grad = ParamShiftEstimatorGradient(estimator) result = grad.run(qc, op, [param_values]).result() # would produce a gradient of the form [df/dp0, df/dp1, df/dp2] result = grad.run(qc, op, [param_values], parameters=[[p[2], p[0]]]).result() # would produce a gradient of the form [df/dp2, df/dp0] -
Unterstützung für den Umgang mit zeitabhängigen Hamiltonianern (d.h. einfach parametrisierten Operatoren) wurde der
TrotterQRTEklasse. Um die Arbeit damit zu erleichtern, wurde dasnum_timestepsattribut und ein passendes Schlüsselwortargument in denTrotterQRTEkonstruktor hinzugefügt, um die Anzahl der Zeitschritte zu bestimmen, die die vollständige Entwicklung unterteilen. -
Unterstützung für beobachtbare Auswertungen in jedem Zeitschritt während der Ausführung der
TrotterQRTEklasse. DieTimeEvolutionProblem.aux_operatorswird bei jedem Zeitschritt ausgewertet, wenn das AttributProductFormula.repsdes Eingangsargumentsproduct_formulaim Konstruktor auf 1 gesetzt ist. -
Es wurden Erweiterungen zum
VQDalgorithmus, die es erlauben, eine Liste von Optimierern und Anfangspunkten für die verschiedenen Minimierungsläufe zu übergeben. So werden beispielsweise derk-te Ausgangspunkt und derk-te Optimierer für die Optimierung desk-1-ten erwarteten Zustands verwendet.
Quanteninformationsmerkmale
-
Zwei neue Konstruktormethoden hinzugefügt,
Clifford.from_matrix()undClifford.from_operator(), die einCliffordobjekt aus seiner unitären Matrix- bzw. Operatordarstellung erzeugen. -
Der Konstruktor von
Cliffordkann nun jedes Clifford-Gatter-Objekt mit bis zu 3 Qubits aufnehmen, solange es eineto_matrix-Methode implementiert, einschließlich parametrisierter Gatter wieRz(pi/2), die vorher nicht konvertierbar waren. -
Neue Hilfsfunktionen hinzugefügt:
commutator(),anti_commutator(), unddouble_commutator()die verwendet werden, um Kommutatoren für jedes Objekt zu berechnen, das die abstrakte BasisklasseLinearOpimplementiert, z. B.QuantumChannel,SparsePauliOp, oderScalarOp. -
Es wurde die Methode
StabilizerState.equivhinzugefügt, die prüft, ob die Erzeugungsmengen zweier Stabilisatorzustände dieselbe Stabilisatorgruppe erzeugen. Zum Beispiel enthält die Stabilisatorgruppe des Zwei-Qubit-Bell-Zustands die vier Elemente und kann daher entweder durch , oder erzeugt werden. -
Eine neue Methode wurde hinzugefügt,
partial_transpose()zurqiskit.quantum_infomodul derDensityMatrixklasse. Diese Methode wird zur Berechnung der partiellen Transposition einer Dichtematrix verwendet, die für den Nachweis der Verschränkung zwischen zweiseitigen Quantensystemen erforderlich ist. -
Hinzufügen einer Methode
qiskit.quantum_info.Operator.apply_permutation()hinzugefügt, die einen Operator mit einer Permutation vorkomponiert oder nachkomponiert. Diese Methode funktioniert für allgemeine Quanten.Hier ist ein Beispiel zur Berechnung von , das die Bits von Operator neu ordnet:
import numpy as np from qiskit.quantum_info.operators import Operator op = Operator(np.array(range(576)).reshape((24, 24)), input_dims=(2, 3, 4), output_dims=(2, 3, 4)) perm = [1, 2, 0] inv_perm = [2, 0, 1] conjugate_op = op.apply_permutation(inv_perm, front=True).apply_permutation(perm, front=False)Der konjugierte Operator hat die Dimensionen (4, 2, 3) x (4, 2, 3), was mit der Permutation übereinstimmt, die das Qutrit an die Position 0, das Qubit an die Position 1 und das 4-Qudit an die Position 2 bringt.
-
Unterstützt nativ die Konstruktion von
SparsePauliOpobjekten mitParameterExpressionkoeffizienten, ohne dass die explizite Konstruktion eines Objektarrays erforderlich ist. Jetzt wird Folgendes unterstützt:from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOp x = Parameter("x") op = SparsePauliOp(["Z", "X"], coeffs=[1, x]) -
Hinzufügen der
SparsePauliOp.assign_parameters()methode undSparsePauliOp.parametersattribut zum Zuweisen und Abfragen von ungebundenen Parametern innerhalb einerSparsePauliOp. Diese Funktion kann z.B. verwendet werden als:from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOp x = Parameter("x") op = SparsePauliOp(["Z", "X"], coeffs=[1, x]) # free_params will be: ParameterView([x]) free_params = op.parameters # assign the value 2 to the parameter x bound = op.assign_parameters([2])
Puls-Funktionen
-
Hinzufügen neuer
SymbolicPulseklassen zur Impulsbibliothek (qiskit.pulse.library) Die neuen Pulse in der Bibliothek sind:Diese neuen Klassen sind Instanzen von
ScalableSymbolicPulse. Mit Ausnahme der PhaseSawtoothist das Verhalten identisch mit dem der entsprechenden Wellenformgeneratorfunktion (z. B.sin()). Die Phase für die KlasseSawtoothist so definiert, dass sich eine Phase von um einen vollen Zyklus verschiebt. -
Unterstützung für QPY (
qiskit.qpy) für die Arbeit mit pulseScheduleBlockinstanzen mit nicht zugewiesenen Referenzen und der Beibehaltung der Datenstruktur für die Referenz auf Unterprogramme. Diese Funktion ermöglicht es dem Benutzer, ein Musterimpulsprogramm für Aufgaben wie die Impulskalibrierung zu serialisieren und zu deserialisieren. Zum Beispiel:from qiskit import pulse from qiskit import qpy with pulse.build() as schedule: pulse.reference("cr45p", "q0", "q1") pulse.reference("x", "q0") pulse.reference("cr45p", "q0", "q1") with open('template_ecr.qpy', 'wb') as fd: qpy.dump(schedule, fd) -
Eine neue Methode
CalibrationEntry.user_provided()wurde zu den Kalibrierungseinträgen hinzugefügt. Diese Methode kann aufgerufen werden, um zu prüfen, ob der Eintrag von einem Endbenutzer oder einem Backend definiert wurde. -
Hinzufügen einer neuen Methode
Target.get_calibration()hinzugefügt, die einen bequemen Zugriff auf die Kalibrierung einer Anweisung in einemTargetobjekts ermöglicht. Diese Methode kann mit den Parametern args und kwargs aufgerufen werden und gibt einen mit Parametern erstellten Impulsplan zurück, wenn die Kalibrierung mit Parametern schabloniert ist.
Anbieter Funktionen
-
Die Klasse
BackendV2Converterklasse hat ein neues Schlüsselwortargument,filter_faulty, in ihrem Konstruktor. Wenn dieses Argument aufTruegesetzt wird, filtert die Konverterklasse alle Qubits oder Operationen heraus, die als nicht-operativ in derBackendPropertiesnutzlast für die EingabeBackendV1. Obwohl es nicht sehr häufig verwendet wird, unterstützt einBackendPropertiesobjekt unterstützt die Anmerkung, dass sowohl Qubits als auch Gatter nicht-operativ sind. Wenn ein Backend dieses Flag für ein Qubit oder ein Gatter gesetzt hatte, enthielt die AusgabeinstanzBackendV2und ihreTargetalle Operationen enthalten, unabhängig davon, ob sie als funktionsfähig aufgelistet waren oder nicht. Durch den Einsatz des neuen Flags können Sie diese nicht-operativen Qubits und Gates aus derTarget. Wenn das Flag gesetzt ist, wird das Ausgabe-Backend immer noch mit der vollen Breite aufgeführt (z. B. ein 24-Qubit-Backend mit 4 als nicht betriebsbereit aufgeführten Qubits hat immer noch 24 Qubits), aber die fehlerhaften Qubits haben keine Operationen, die in derTarget. -
Die Klasse
Optionsklasse implementiert nun dasMappingProtokoll und die__setitem__Methode. Das bedeutet, dassOptionsinstanzen jetzt die gleiche Schnittstelle wie Standardwörterbücher bieten, mit Ausnahme der Löschmethoden (__delitem__, pop, clear). Die Schlüsselzuweisungen werden von den Prüfern validiert, sofern sie registriert sind.
Visualisierungsfunktionen
-
Es wurde eine neue Funktion
staged_pass_manager_drawer()hinzugefügt, die zur Visualisierung einerStagedPassManagerinstanz. Er zeichnet den kompletten Passmanager mit jeder Stufe als äußeres Kästchen.Zum Beispiel:
from qiskit.visualization import staged_pass_manager_drawer from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.providers.fake_provider import FakeSherbrooke backend = FakeSherbrooke() pm = generate_preset_pass_manager(3, backend) staged_pass_manager_drawer(pm) -
Die
StagedPassManager.draw()methode wurde aktualisiert, so dass sie nun neben dem Gesamtpassmanager auch eine Visualisierung der Stufen enthält. Die Stufen werden in der Visualisierung durch äußere Kästen dargestellt. In früheren Versionen waren die Stufen nicht in der Visualisierung enthalten. Zum Beispiel:from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.providers.fake_provider import FakeSherbrooke backend = FakeSherbrooke() pm = generate_preset_pass_manager(3, backend) pm.draw(pm) -
Ein neues Schlüsselwortargument,
figsize, wurde derplot_bloch_multivector()funktion. Dieses Argument kann verwendet werden, um eine Größe für einzelne Bloch-Sphären-Teilplots festzulegen. Wenn es zum Beispiel Qubits gibt undfigsizeauf(w, h)gesetzt wird, dann wird die Gesamtbreite der Figur auf gesetzt, während die Gesamthöhe auf gesetzt wird. -
Ein neues Schlüsselwortargument,
font_size, wurde derplot_bloch_multivector()funktion. Dieses Argument kann verwendet werden, um die Schriftgröße in der Ausgabevisualisierung zu steuern. -
Zwei neue Schlüsselwortargumente,
title_font_sizeundtitle_pad, wurden derplot_bloch_multivector()funktion. Diese Argumente können verwendet werden, um die Schriftgröße des Gesamttitels bzw. seine Auffüllung zu steuern.
Anmerkungen zu Upgrades
-
Die minimal unterstützte Rust-Version (MSRV) wurde von 1.56.1 auf 1.61.0 erhöht. Wenn Sie Qiskit aus dem Quellcode bauen, müssen Sie jetzt sicherstellen, dass Sie mindestens Rust 1.61.0 installiert haben, um Qiskit bauen zu können. Diese Änderung wurde vorgenommen, weil mehrere Upstream-Abhängigkeiten ihre MSRVs erhöht haben.
-
Die Verwendung von Primitiven mit dem Kontextmanager und die Initialisierung mit Schaltkreisen (Observables nur für Estimator) und Parametern, die in der Version Qiskit Terra 0.22.0 im Oktober 2022 veraltet war, wurde entfernt.
-
PrimitiveJob.submit()blockiert nicht mehr bei Beendigung der Ausführung. Daraus ergibt sich,Sampler.run(),BackendSampler.run(),Estimator.run()undBaseEstimator.run()nicht blockieren, bis die MethodePrimitiveJob.result()aufgerufen wird.
Hinweise zum Transpiler-Upgrade
-
Die maximale Anzahl von Versuchen, die bei der Suche nach dem besten Layout mit
VF2LayoutundVF2PostLayoutist nun begrenzt auflevel_1_pass_manager(),level_2_pass_manager(), undlevel_3_pass_manager()auf2 500,25 000bzw.250 000begrenzt. Zuvor wurden alle gefundenen möglichen Layouts bewertet. Diese Änderung wurde vorgenommen, um zu verhindern, dass die Transpilierung bei der Layoutbewertung von Schaltungen mit vielen angeschlossenen Bauteilen auf größeren Bauteilen hängen bleibt, was zu einer kombinatorischen Skalierung führt, da jedes angeschlossene Bauteil in allen möglichen Positionen auf dem Bauteil bewertet wird. Um eine vollständige Suche wie zuvor durchzuführen, führen Sie manuellVF2PostLayoutüber die transpilierte Schaltung im strikten Modus und geben Sie0fürmax_trialsan. -
Das zuvor veraltete
condition-Attribut der KlasseDAGDepNodeklasse wurde entfernt. Sie wurde in der Version 0.18 (07-2021) als veraltet gekennzeichnet. Stattdessen sollten Sie dasconditionattribut desopAttributs verwenden, um auf die Bedingung eines Operationsknotens zuzugreifen. Für andere Knotentypen gibt es keine Bedingung für den Zugriff. -
Der Standardwert von
metadatasowohl inDAGCircuitundDAGDependencywurde aus Gründen der Kompatibilität mit dem entsprechenden AttributmetadatavonNoneauf{}geändertQuantumCircuit. -
Die Methode
CouplingMap.__eq__`()wurde aktualisiert, um zu prüfen, ob die Kantenlisten der zugrundeliegenden Graphen die gleichen Elemente enthalten. Unter der Annahme, dass die zugrundeliegenden Graphen zusammenhängend sind, stellt diese Prüfung zusätzlich sicher, dass die Graphen die gleiche Anzahl von Knoten mit den gleichen Bezeichnungen haben. Jeder Code, derCouplingMap() == CouplingMap()zur Überprüfung der Objektgleichheit verwendet, sollte aufCouplingMap() is CouplingMap()aktualisiert werden. -
Bei der Ausführung der
transpile()funktion mit einemBackendV1basierten Backend oder einemBackendPropertiesüber dasbackend_properties-Schlüsselwortargument ausgeführt wird, das irgendwelche Qubits oder Gates als fehlerhaft gekennzeichnet hat, wird die Funktion nicht mehr versuchen, die Qubits auf der Grundlage dieser Information automatisch neu zuzuordnen. Die Methode, mit dertranspile()versuchte, diese Neuzuordnung vorzunehmen, war grundlegend fehlerhaft, und in den meisten Fällen eines solchen Backends würde ein interner Fehler ausgelöst werden. In der Praxis setzen nur sehr wenige Backends jemals die Felder inBackendPropertiesum ein Qubit oder ein Gate als fehlerhaft zu kennzeichnen. Wenn Sie sich darauf verlassen haben, dasstranspile()verlassen haben, müssen Sie dies nun manuell tun und den Argumentencoupling_mapundbackend_propertieseine gemappte Eingabe übergeben, die die fehlerhaften Qubits und Gates herausgefiltert hat, und dann die Ausgabe manuell neu mappen. -
Das Ergebnis von Transpilationen für fixe Samen kann sich im Vergleich zu früheren Versionen von Qiskit Terra geändert haben. Der Grund dafür sind interne Anpassungen des Routing-Algorithmus, der von
SabreSwapundSabreLayoutverwendeten Routing-Algorithmus, die die Standard-Routing- bzw. Layout-Durchläufe sind, um sie für große Schaltungen deutlich schneller zu machen.
Hinweise zur Aktualisierung von Schaltkreisen
- Die
QuantumCircuitmetadataattribut gibt jetzt immer ein Wörterbuch zurück und kann nur auf ein Wörterbuch gesetzt werden. Zuvor war der StandardwertNoneund konnte manuell aufNoneoder ein Wörterbuch gesetzt werden.
Hinweise zum Algorithmus-Upgrade
- Die veralteten Module
factorizersundlinear_solvers, dieHHLundShorenthalten, wurden ausqiskit.algorithms. Diese Funktionen wurden ursprünglich als Teil der Version 0.22.0 (veröffentlicht am 13. Oktober 2022) veraltet. Sie können den Code stattdessen über das Qiskit-Lehrbuch aufrufen: Lineare Löser (HHL), Faktorisierer (Shor)
Hinweise zum Pulse-Upgrade
Target.update_from_instruction_schedule_map()löst nicht mehrKeyErroroderValueErroraus, wenn im Zielbefehl Qubits fehlen oderinst_name_mapnicht für den undefinierten Befehl vorgesehen ist. Im ersten Fall ignoriert es einfach die Definition der EingabeInstructionScheduleMapdie Definition für undefinierte Qubits. Im letzteren Fall wird eine Gatterzuordnung aus den Standard-Qiskit-Gattern gezogen und schließlich wird ein benutzerdefiniertes opakesGateobjekt anhand des Zeitplannamens definiert, wenn keine Zuordnung gefunden wird.
Hinweise zum Upgrade für Anbieter
-
Das veraltete
max_creditsArgument fürexecute(),assemble()und alleQobj-Konfigurationen (z. B.QasmQobjConfigundPulseQobjConfig) wurde entfernt. Dieses Argument geht auf frühe Versionen von Qiskit zurück, die enger mit dem Dienstleistungsangebot von IBM Quantum verbunden waren. Damals war das Feldmax_creditsTeil des "Kreditsystems", das im Rahmen des Serviceangebots von IBM Quantum verwendet wurde. Dieses Kreditsystem wird jedoch seit fast drei Jahren nicht mehr auf IBM Quantum verwendet, und auch Qiskit ist nicht mehr an das Serviceangebot von IBM Quantum gebunden (und war es schon lange nicht mehr). Wenn Sie sich in irgendeiner Weise auf diese Option für ein Backend verlassen, müssen Sie sicherstellen, dass IhreBackendV2implementierung einmax_creditsFeld in ihremOptionsobjekt enthält. -
Das Attribut
nameattribut derBackendV2basierenden Fake-Backend-Klassen inqiskit.providers.fake_providerhaben sich gegenüber früheren Versionen geändert. Zuvor hatten die Namen ein Suffix"_v2", um die Klasse von derBackendV1version zu unterscheiden. Dieses Suffix wurde entfernt, da es zu Inkonsistenzen mit anderen Snapshot-Daten führen könnte, die zum Aufbau des Backend-Objekts verwendet werden.
Hinweise zu veralteten Versionen
- Die Module
qiskit.opflow,qiskit.utils.backend_utils,qiskit.utils.mitigation,qiskit.utils.measurement_error_mitigation, Klasseqiskit.utils.QuantumInstanceund die Methodenfind_regs_by_name(),run_circuits()sind veraltet und werden in einer zukünftigen Version entfernt. Die Verwendung vonQuantumInstancewird abgelöst durchBaseSampler. Siehe Opflow-Migration. Siehe QuantumInstance Migration.
Transpiler-Veraltungen
-
Der Transpiler-Routing-Pass,
BIPMapping, ist veraltet und wird in einer zukünftigen Version entfernt. Es wurde durch ein externes Plugin-Paket ersetzt:qiskit-bip-mapper. Details zu diesem neuen Paket finden Sie im Github-Repository des Pakets:https://github.com/qiskit-community/qiskit-bip-mapper
Der Pass wurde aus zwei Gründen zu einem separaten Plugin-Paket gemacht: Erstens erschwert die Abhängigkeit von CPLEX die Verwendung und zweitens lässt sich das Plugin-Paket sauberer in
transpile(). -
Die falsche Schreibweise
aquire_alignmentin der KlasseTargetwurde durch die korrekte Schreibweiseacquire_alignmentersetzt. Die alten Konstruktorargumente aquire_alignment undTarget.aquire_alignmentsind veraltet und werden in einer zukünftigen Version entfernt. Verwenden SieTarget.acquire_alignmentum den Wert der Ausrichtungsbeschränkung zu erhalten und zu setzen.
Veraltete Schaltungen
- Einstellung der
QuantumCircuitmetadataattributs aufNoneist veraltet und wird in einer zukünftigen Version nicht mehr unterstützt werden. Stattdessen sollten die Benutzer es auf ein leeres Wörterbuch setzen, wenn es keine Daten enthalten soll.
Algorithmen-Veraltungen
-
Alle der folgenden Funktionen sind nun veraltet, nachdem sie seit 0.22.0 als veraltet eingestuft wurden. Weitere Informationen finden Sie unter https://qisk.it/algo _migration.
-
Das Modul
qiskit.algorithms.minimum_eigen_solversist veraltet und wird ersetzt durchqiskit.algorithms.minimum_eigensolvers. -
Das Modul
qiskit.algorithms.eigen_solversist veraltet und wird ersetzt durchqiskit.algorithms.eigensolvers. -
Das Modul
qiskit.algorithms.evolversist veraltet und wird durchqiskit.algorithms.time_evolversersetzt. -
Die Klasse
qiskit.algorithms.TrotterQRTEist veraltet und wird ersetzt durchqiskit.algorithms.time_evolvers.trotterization.TrotterQRTE. -
Mit
QuantumInstanceoderBackendist veraltet und wird ersetzt durchBaseSamplerin den folgenden Klassen ersetzt: -
Mit
QuantumInstanceoderBackendoderExpectationBaseist veraltet und wird ersetzt durchBaseSamplerin der folgenden statischen Methode ersetzt:get_fidelity() -
Die Funktion
eval_observables()ist veraltet und wurde durch die Funktionestimate_observables()ersetzt.
-
Quantuminformations-Deprecations
- Die Seiten
PauliTableundStabilizerTablesind veraltet und werden in einer zukünftigen Version entfernt. Stattdessen sollte diePauliListverwendet werden. Mit dieser Änderung wurdetable()veraltet, so dass Sie direkt vontableau()aus ohne diese Funktion arbeiten sollten.
Impuls-Deprecations
- Die Zuweisung komplexer Werte an
ParameterExpressionin einem beliebigen Qiskit Pulse Objekt löst nun einePendingDeprecationWarningaus. Dadurch wird das Modul Pulse mit anderen Modulen abgeglichen, bei denen eine solche Zuordnung zunächst nicht möglich war. Der typische Anwendungsfall für komplexe Parameter in dem Modul war die Bibliothek SymbolicPulse. Ab Qiskit-Terra 0.23.0 wurden alle Bibliotheksimpulse von der komplexen Amplitudendarstellung in die reelle Darstellung unter Verwendung von zwei Fließkommazahlen (amp,angle) umgewandelt, wie in der KlasseScalableSymbolicPulseverwendet. Damit entfällt die Notwendigkeit, komplexe Parameter zu verwenden. Jegliche Verwendung komplexer Parameter (und insbesondere kundenspezifischer Impulse) sollte auf ähnliche Weise umgewandelt werden, um die Verwendung komplexer Parameter zu vermeiden.
Fehlerkorrekturen
-
Die
AmplitudeEstimationklasse warnt nun korrekt, wenn eineEstimationProblemmit einer gesetztenis_good_stateEigenschaft als Eingabe übergeben wird, da dies nicht unterstützt und ignoriert wird. Bisher hat der Algorithmus diese Option ignoriert, was zu unerwarteten Ergebnissen führte. -
QuantumCircuit.append()löst nun korrekt einen Fehler aus, wenn eine falsche Anzahl von klassischen Bits für eine Operation angegeben wird. Fix #9385. -
Die
BarrierBeforeFinalMeasurementsundMergeAdjacentBarriershatten zuvor eine nicht-deterministische Reihenfolge der ausgegebenenBarrieranweisungen. Dies änderte die Semantik der Schaltkreise nicht, konnte aber in begrenzten Fällen, in denen es nicht ganz breite Barrieren gab, dazu führen, dass spätere stochastische Transpiler-Durchläufe eine andere topologische Anordnung des Schaltkreises sahen und folglich unterschiedliche Ausgaben für feste Seeds hatten. Um dies zu vermeiden, wurden die Übergänge deterministisch gestaltet. -
Der Rückgabetyp von
run()ist nun immer derselbe wie der seines ersten Arguments. Die Übergabe eines einzelnen Stromkreises ergibt einen einzelnen Stromkreis, die Übergabe einer Liste von Stromkreisen, auch der Länge 1, ergibt eine Liste von Stromkreisen. Siehe #9798. -
Ein Fehler wurde behoben, bei dem
PauliOp.adjoint()keinen korrekten Wert für Paulis mit komplexen Koeffizienten lieferte, wiePauliOp(Pauli("iX")). Behoben #9433. -
Ein Problem mit der Funktion der Schaltkreisschublade wurde behoben
circuit_drawer()undQuantumCircuit.draw()methode bei der Anzeige von Befehlsparametern des TypsQuantumCircuitwas zu einer unleserlichen Zeichnung führte. Behoben #9908 -
Ein Problem mit der Funktion der Schaltkreisschublade wurde behoben
circuit_drawer()undQuantumCircuit.draw()bei Verwendung der Methodetextund des Argumentsvertical_compression="low"behoben, bei dem ein falsches Zeichen für die obere rechte Ecke von Kästchen verwendet wurde, die Gatter in der Schaltung darstellen. -
Es wurde ein Problem mit der
Gate.control()methode behoben, bei der bisher die EingabetypenstroderNonefür das Argumentctrl_statefalsch behandelt wurden. -
Es wurde ein Randfall in der Konstruktion von
Pauliinstanzen; eine Zeichenkette mit einer optionalen Phase und ohne Qubits ist nun ein gültiges Label, wodurch ein Operator ohne Qubits (wiePauli("-i")) entsteht. Dies war bereits bei der Verwendung von Array-Formularen oder leeren Slices möglich. Behoben #9720. -
Es wurde ein Problem bei der Verwendung des
pulsemakromeasure()bei der Arbeit mit einemBackendV2basierten Backend. Zuvor führte der Versuch,qiskit.pulse.macros.measure()mit einemBackendV2basierten Backend zu verwenden, hätte zu einem Fehler geführt. Behoben #9488 -
Es wurde ein Problem mit der Funktion
marginal_distribution()funktion, die fälschlicherweise einen Fehler auslöste, wenn ein eingegebenes Zählwörterbuch den Typ numpy integer anstelle des Typs Python int verwendete. Die zugrundeliegende Funktion würde die verschiedenen Typen immer korrekt behandeln, aber die Überprüfung des Eingabetyps hat in diesem Fall fälschlicherweise eineTypeErrorausgelöst. -
Ein Fehler wurde behoben, bei dem
Parameter.is_real()nichtNonezurückgegeben hat, wenn der Parameter nicht gebunden ist. Behoben #8619. -
Schaltkreise, die
C3SXGateenthalten, können nun sicher über den OpenQASM 2.0 exporter (QuantumCircuit.qasm()) und Parser (QuantumCircuit.from_qasm_str()). -
Es wurde ein Fehler in QPY (
qiskit.qpy), bei dem Schaltungen mit Gattern der KlasseMCXGate,MCXGrayCode, undMCXRecursive, undMCXVChainnicht serialisiert werden konnten. Siehe #9390. -
Die Transpiler-Routing-Pässe wurden korrigiert
StochasticSwap,SabreSwap,LookaheadSwap, undBasicSwapso dass sie konsistent einTranspilerErrorauslösen, wenn ihre jeweilige Methode.run()aufgerufen wird, wenn die Pässe mitcoupling_map=Noneinitialisiert wurden. Früher haben diese Durchläufe in diesem Fall Fehler ausgelöst, aber sie wurden alle durch Seiteneffekte verursacht und die spezifische Ausnahme war nicht vorhersehbar. Behoben #7127 -
Das manuelle Setzen eines Elements in
QuantumCircuit.datawird nun korrekt erlauben, dass die Operation jedes Objekt sein kann, dasOperationimplementiert, nicht nur eincircuit.Instruction. Beachten Sie, dass jede manuelle Mutation vonQuantumCircuit.datawird abgeraten; sie ist in der Regel nicht effizienter als die Erstellung eines neuen Schaltkreisobjekts, da die Überprüfung der Invarianten, die parametrisierte Objekte umgeben, erstaunlich teuer sein kann. -
Fehler behoben, der beim Konstruieren von
DAGDependencyinnerhalb desTemplateOptimizationtranspilerpasses, der zu falschen Optimierungen führen konnte. -
Es wurde ein Fehler in
TensoredOp.to_matrix()behoben, bei dem der globale Koeffizient des Operators mehr als einmal mit der Endmatrix multipliziert wurde. Jetzt wird der globale Koeffizient unabhängig von der Anzahl der gespannten Operatoren oder Zustände korrekt angewendet. Behoben #9398. -
Die Behandlung der globalen Phase im
UnrollCustomDefinitionstranspiler-Durchgang, wenn die betreffende Anweisung eine globale Phase, aber keine Anweisungen in ihrem Definitionsfeld hatte. -
Die Typ-Anmerkungen für die Funktion
transpile()funktion. Der Rückgabetyp wird nun korrekt eingegrenzt, je nachdem, ob ein einzelner Stromkreis oder eine Liste von Stromkreisen übergeben wurde. -
Ein Fehler wurde behoben, bei dem
IterativePhaseEstimationden falschen Schaltkreis erzeugte, was dazu führte, dass der Algorithmus in einfachen Fällen versagte. Behoben #9280. -
Es wurde ein Fehler behoben, der es erlaubte, Broadcasting zu betreiben, wenn ein
PauliListinitialisiert wird vonPaulis oder Etiketten. Zum Beispiel löst der CodePauliList(["XXX", "Z"])nunValueErroraus, anstatt das ÄquivalentPauliList(["XXX", "ZZZ"])zu konstruieren. -
Der OpenQASM 2 Exporter (
QuantumCircuit.qasm()) gibt keine doppelten Definitionen für Gatter mehr aus, die in den Definitionen anderer Gatter vorkommen. Siehe #7771, #8086, #8402, #8558, und #9805. -
Der OpenQASM 2-Exporter (
QuantumCircuit.qasm()) kann nun mehrere und verschachtelte Definitionen vonUnitaryGate. Siehe #4623, #6712, #7772, und #8222. -
Der OpenQASM 2 Exporter (
QuantumCircuit.qasm()) gibt nun die Definitionen für Gatter, die nur in den Definitionen anderer Gatter verwendet werden, in der richtigen Reihenfolge aus. Siehe #7769 und #7773. -
Von Qiskit definierte Standard-Gates, wie z.B
RZXGatehaben nun korrekt parametrisierte Definitionen, wenn sie mit dem OpenQASM 2-Exporter (QuantumCircuit.qasm()). Siehe #7172. -
Quantenvolumenkreise (
QuantumVolume) werden jetzt vom OpenQASM 2-Exporter (QuantumCircuit.qasm()). Siehe #6466 und #7051. -
Der OpenQASM 2 Exporter gibt nun Gatter ohne bekannte Definition mit
opaqueAnweisungen aus, anstatt fehlzuschlagen. Siehe #5036. -
Ein Problem, das
transpile()daran hinderte, zu funktionieren, wenn eine Liste vonCouplingMapobjekten wurde behoben. Beachten Sie, dass die Übergabe einer solchen Liste von Kopplungskarten veraltet ist und ab Qiskit Terra 0.25 nicht mehr möglich sein wird. Behebt #9885. -
Bis zu dieser Version wurde das Argument
figsizevonplot_bloch_multivector()wurde von der Visualisierung nicht verwendet, so dass es unmöglich war, seine Größe zu ändern (z. B. um es für Ein-Qubit-Zustände zu verkleinern). Diese Version behebt das Problem, indem sie eine Verwendung für das Argumentfigsizeeinführt. -
Ein Problem wurde behoben in
transpile()mitoptimization_level=1(sowie in den voreingestellten Pass-Managern, die vongenerate_preset_pass_manager()undlevel_1_pass_manager()zurückgegeben werden), wo früher, wenn die Argumenterouting_methodundlayout_methodnicht gesetzt waren und keine Kontrollflussoperationen in der Schaltung vorhanden waren, in Fällen, in denen Routing erforderlich war, derVF2PostLayouttranspiler-Durchlauf nicht ausgeführt werden konnte. Dies war das Gegenteil des erwarteten Verhaltens, daVF2PostLayoutein potenziell leistungsfähigeres Layout finden soll, nachdem ein heuristischer Layoutdurchlauf und ein Routing durchgeführt wurden. Behoben #9936 -
Konstruktion eines
Statevectoraus einerQuantumCircuitdie Null-Qubit-Operationen enthält, führt nicht mehr zu einem Fehler. Diese Operationen verleihen dem resultierenden Zustandsvektor eine globale Phase. -
Es wurde ein Problem in den Tranpiler-Durchläufen für das Auffüllen von Verzögerungen behoben, das die Beschränkungen des Ziels nicht respektierte und Verzögerungen auch für Qubits einfügte, die den
Delayanweisung.PadDelayundPadDynamicalDecouplingsind so festgelegt, dass sie keine Leerlaufzeit von Qubits auffüllen, so dass das Target keineDelayAnweisungen für die Qubits unterstützt. Auch die alten ZeitplanungsdurchläufeASAPScheduleundALAPSchedule, die intern Verzögerungen auffüllen, werden auf die gleiche Weise festgelegt. Außerdem wurdetranspile()korrigiert, umPadDelaymit einemtargetObjekt aufzurufen, so dass es korrekt funktioniert, wenn es mit der Optionscheduling_methodaufgerufen wird. Behoben #9993 -
Die Typ-Anmerkungen der Methode
QuantumCircuit.assign_parameters()methode korrigiert, um die Änderung des Rückgabetyps in Abhängigkeit vom Wert des Argumentsinplacekorrekt wiederzugeben. -
Ein Problem mit der Leistungsskalierung bei den
VF2LayoutundVF2PostLayoutdurchgängen in den voreingestellten Durchgangsmanagern undtranspile()behoben, das bei der Umsetzung von Schaltungen mit vielen angeschlossenen Komponenten auf großen Geräten auftrat. Der Transpiler setzt nun Obergrenzen für die Anzahl der möglichen Layouts, die ausgewertet werden. -
Es wurde ein Problem in der Funktion
state_to_latex()behoben, bei dem die Funktion aufgrund unbeabsichtigter Koeffizientenrundung möglicherweise ungültige LaTeX erzeugte. Dies konnte auch zu Fehlern führen, wenn die Websitestate_drawer()aufgerufen wurde. Behoben #9297.
Aer- 0.12.0
Keine Änderung
IBM Q Anbieter 0.20.2
Keine Änderung