Qiskit 0.25 Versionshinweise
0.25.4
Terra- 0.17.2
Vorspiel
Dies ist eine Fehlerbehebungsversion, die mehrere Probleme der Version 0.17.1 behebt. Vor allem aber behebt diese Version die Kompatibilität der QuantumInstance klasse, wenn sie auf Backends läuft, die auf der BackendV1 abstrakten Klasse basieren. Dies behebt alle Algorithmen und Anwendungen, die auf qiskit.algorithms oder qiskit.opflow wenn sie auf neueren Backends laufen.
Fehlerkorrekturen
- Es wurde ein Problem mit dem
BasisTranslatortranspiler-Passes behoben, der in einigen Fällen Gates übersetzte, die sich bereits in der Zielbasis befanden. Dies könnte sowohl zu einer längeren Ausführungszeit als auch zu weniger optimalen Ergebnissen führen. Behoben #6085 - Es wurde ein Problem in
SPSAbehoben, bei dem die Initialisierung des Optimierers mit einer Callback-Funktion über diecallbackkwarg möglicherweise einen Fehler auslöste. - Ein Problem wurde behoben, bei dem der
qiskit.quantum_info.Statevector.expectation_value()undqiskit.quantum_info.DensityMatrix.expectation_value`methods where the ``qargs`()kwarg wurde ignoriert, wenn der Operator einPaulioderSparsePauliOpoperator-Objekt war. Behoben #6303 - Es wurde ein Problem in der
qiskit.quantum_info.Pauli.evolve()methode behoben, die dazu führen konnte, dass das falsche Pauli zurückgegeben wurde, wenn es durch eineCZGate,CYGate, oder einSwapGatetor. - Es wurde ein Problem in der Methode
qiskit.opflow.SparseVectorStateFn.to_dict_fn()behoben, die zuvor aufgrund eines Indexfehlers höchstens einen Eintrag für den Zustand "All Zero" hatte. - Ein Problem in der Methode
qiskit.opflow.SparseVectorStateFn.equals()wurde behoben, so dass nunTrueoderFalsezurückgegeben wird, anstatt eines spärlichen Vektorvergleichs der einzelnen Elemente. - Behebt ein Problem in der
StatevectorundDensityMatrixwahrscheinlichkeitsmethodenqiskit.quantum_info.Statevector.probabilities(),qiskit.quantum_info.Statevector.probabilities_dict(),qiskit.quantum_info.DensityMatrix.probabilities(),qiskit.quantum_info.DensityMatrix.probabilities_dict()bei denen die zurückgegebenen Wahrscheinlichkeiten für bestimmte Werte derqargskwarg eine falsche Reihenfolge aufweisen können. Behoben #6320 - Ein Problem wurde behoben, bei dem die Klasse
TaperedPauliSumOpnicht die Multiplikation mitParameterExpressionobjekt unterstützte und auch nicht über eine notwendigeassign_parameters()Methode für die Arbeit mitParameterExpressionobjekten. Behoben #6127 - Die Kompatibilität für die
QuantumInstanceklasse, wenn sie auf Backends läuft, die auf derBackendV1abstrakten Klasse basieren. Behoben #6280
Aer- 0.8.2
Keine Änderung
Ignis- 0.6.0
Keine Änderung
Aqua- 0.9.1
Keine Änderung
IBM Q Anbieter 0.12.3
Keine Änderung
0.25.3
Terra- 0.17.1
Keine Änderung
Aer- 0.8.2
Bekannte Probleme
SaveExpectationValueundSaveExpectationValueVariancewurden für die extended_stabilizer-Methode vonQasmSimulatorundAerSimulatordeaktiviert, da sie den falschen Wert für bestimmte Pauli-Operator-Komponenten zurückgeben. Siehe #1227 <https://github.com/Qiskit/qiskit-aer/issues/1227> für weitere Informationen und Beispiele.
Fehlerkorrekturen
- Behebt ein Leistungsproblem mit der Art und Weise, wie das Konfigurationsattribut
basis_gatesgesetzt wurde. Zuvor gab es unbeabsichtigte Nebeneffekte in der Backend-Klasse, die dazu führen konnten, dass sich die Laufzeit der wiederholten Simulationen inkrementell erhöhte. Siehe #1229 <https://github.com/Qiskit/qiskit-aer/issues/1229> für weitere Informationen und Beispiele. - Behebt einen Fehler in der
"multiplexer"Simulator-Anweisung, bei der die Reihenfolge der Ziel- und Kontroll-Qubits gegenüber der Reihenfolge in der Qiskit-Anweisung vertauscht war. - Behebt einen in 0.8.0 eingeführten Fehler, bei dem GPU-Simulationen zusätzlich zum GPU-Speicher unbenötigten Host-Speicher zugewiesen haben.
- Behebt einen Fehler in der
stabilizerSimulator-Methode vonQasmSimulatorundAerSimulator, bei dem der Erwartungswert fürsave_expectation_valueundsnapshot_expectation_valuefür bestimmteYPauli's das falsche Vorzeichen haben konnte.
Ignis- 0.6.0
Keine Änderung
Aqua- 0.9.1
Keine Änderung
IBM Q Anbieter 0.12.3
Keine Änderung
0.25.2
Terra- 0.17.1
Keine Änderung
Aer- 0.8.1
Keine Änderung
Ignis- 0.6.0
Keine Änderung
Aqua- 0.9.1
Keine Änderung
IBM Q Anbieter 0.12.3
Sonstige Anmerkungen
- Das Attribut
qiskit.providers.ibmq.experiment.analysis_result.AnalysisResultfitist jetzt optional.
0.25.1
Terra- 0.17.1
Vorspiel
Dies ist eine Fehlerbehebungsversion, die mehrere Probleme der Version 0.17.0 behebt. Am wichtigsten ist, dass diese Version das falsch zusammengestellte sdist-Paket für die Version 0.17.0 korrigiert, das nicht wirklich baubar war und die Installation auf Plattformen ohne vorkompilierte Binärdateien blockierte.
Fehlerkorrekturen
-
Ein Problem wurde behoben, bei dem das
global_phaseattribut im Ausgabeobjekt nicht beibehalten wurdeQuantumCircuitobjekt erhalten blieb, wenn dieqiskit.circuit.QuantumCircuit.reverse_bits()methode aufgerufen wurde. Zum Beispiel:import math from qiskit import QuantumCircuit qc = QuantumCircuit(3, 2, global_phase=math.pi) qc.h(0) qc.s(1) qc.cx(0, 1) qc.measure(0, 1) qc.x(0) qc.y(1) reversed = qc.reverse_bits() print(reversed.global_phase)wird nun korrekt gedruckt .
-
Ein Problem wurde behoben, bei dem der Transpilerdurchlauf
Unrollerbei verschachtelten Anweisungen mit einer Regel in der Definition die globale Phase nicht beibehalten hat. Behoben #6134 -
Ein Problem wurde behoben, bei dem das Attribut
parametereinesControlledGateobjekts, das aus einemUnitaryGateerstellt wurde, nicht auf die unitäre Matrix desUnitaryGateObjekts gesetzt wurde. Zuvor bautecontrol()eineControlledGatemit dem Attributparameterauf die kontrollierte Version derUnitaryGate-Matrix gesetzt. Dies würde zu einer Änderung derparameterdes BasisobjektsUnitaryGateführen und nachfolgende Aufrufe voninverse()würde die Umkehrung eines doppelt gesteuertenUnitaryGateerzeugen. Behoben #5750 -
Ein Problem mit den voreingestellten Pass-Managern wurde behoben
level_0_pass_managerundlevel_1_pass_manager(das entsprichtoptimization_level0 und 1 fürtranspile()), die in manchen Fällen Schaltkreise erzeugten, die nicht der gewünschten Basis entsprachen. -
Behebung eines Fehlers bei der Verwendung von
SPSAmit automatischer Kalibrierung der Lernrate und Störung (d.h.learning_rateundperturbationsindNoneim Initialisierer), speichert die Kalibrierung für alle zukünftigen Optimierungen. Stattdessen sollte die Kalibrierung für jede neue Zielfunktion durchgeführt werden.
Aer- 0.8.1
Fehlerkorrekturen
- Es wurde ein Problem bei der Verwendung der Methode
matrix_product_stateder SimulatorenAerSimulatorundQasmSimulatorbehoben, wenn eine verrauschte Simulation mit Kraus-Fehlern ausgeführt wurde. Bisher wurden bei der Matrixprodukt-Zustandssimulationsmethode nach Anwendung der Kraus-Matrix keine Änderungen an benachbarte Qubits weitergegeben. Dies wurde behoben, so dass die Ausgabe der Simulation korrekt ist. Behoben #1184 und #1205 - Es wurde ein Problem behoben, bei dem die Anweisung
qiskit.extensions.Initializedie Optimierung der Messwertabtastung für die Simulationsmethodenstatevectorundmatrix_product_stateder SimulatorenAerSimulatorundQasmSimulatordeaktivierte, selbst wenn es sich um die erste Schaltungsanweisung handelte oder sie auf alle Qubits angewendet wurde und somit deterministisch war. Behoben #1210 - Behebung eines Problems mit den Anweisungen
SaveStatevectorundSnapshotStatevectorbei Verwendung mit der Simulationsmethodeextended_stabilizerder SimulatorenAerSimulatorundQasmSimulator, bei dem ein nicht normalisierter Zustandsvektor zurückgegeben wurde. Behoben #1196 - Die Simulationsmethode
matrix_product_stateunterstützt nun die bisher fehlende Anweisungqiskit.providers.aer.library.SetMatrixProductState, die es ermöglicht, den Zustand einer Simulation in einer Schaltung zu setzen.
Ignis- 0.6.0
Keine Änderung
Aqua- 0.9.1
IBM Q Anbieter 0.12.2
Keine Änderung
0.25.0
Mit dieser Version wird das Projekt Qiskit Aqua offiziell eingestellt. Dementsprechend wird in einer zukünftigen Version das Paket qiskit-aqua aus dem Qiskit-Metapaket entfernt werden, was bedeutet, dass in dieser zukünftigen Version pip install qiskit nicht mehr qiskit-aqua enthalten sein wird. Die Anwendungsmodule, die von qiskit-aqua bereitgestellt werden, wurden in mehrere neue Pakete aufgeteilt: qiskit-optimization, qiskit-nature, qiskit-machine-learning, und qiskit-finance. Diese Pakete können selbst installiert werden (über den Standardbefehl pip install, z. B. pip install qiskit-nature) oder mit dem Rest des Qiskit-Metapakets als optionale Extras (z. B. pip install 'qiskit[finance,optimization]' oder pip install 'qiskit[all]' . Die Kernalgorithmen und der Operatorfluss sind jetzt als Teil von qiskit-terra unter qiskit.algorithms und qiskit.opflow. Abhängig von Ihrer bisherigen Nutzung von Aqua sollten Sie entweder die Anwendungspakete oder die neuen Module in Qiskit Terra verwenden. Weitere Einzelheiten zur Migration von Qiskit Aqua finden Sie in der Migrationsanleitung.
Terra- 0.17.0
Vorspiel
Die Qiskit Terra 0.17.0 enthält viele neue Funktionen und Fehlerbehebungen. Die wichtigste Neuerung in dieser Version ist die Einführung der Funktionen qiskit.algorithms und qiskit.opflow module, die aus dem Projekt qiskit.aqua migriert und angepasst wurden.
Neue Funktionen
-
Die Funktion
qiskit.pulse.call()kann jetzt einParameterobjekt zusammen mit einer parametrisierten Subroutine verwenden. Dies ermöglicht es, den Objekten für jeden Unterprogrammaufruf unterschiedliche WerteParameterobjekten für jeden Unterprogrammaufruf zuzuweisen.Beispiel:
from qiskit.circuit import Parameter from qiskit import pulse amp = Parameter('amp') with pulse.build() as subroutine: pulse.play(pulse.Gaussian(160, amp, 40), DriveChannel(0)) with pulse.build() as main_prog: pulse.call(subroutine, amp=0.1) pulse.call(subroutine, amp=0.3) -
Die
qiskit.providers.models.QasmBackendConfigurationhat ein neues Feldprocessor_type, das optional verwendet werden kann, um Informationen über den Prozessor eines Backends in der Form{"family": <str>, "revision": <str>, segment: <str>}bereitzustellen. Beispiel:{"family": "Canary", "revision": "1.0", segment: "A"}. -
Die Klassen
qiskit.pulse.Schedule,qiskit.pulse.Instructionundqiskit.pulse.Channelhaben jetzt eineparameterEigenschaft, die alleParameterobjekte zurückgibt, die in dem Objekt verwendet werden, und eineis_parameterized()methode, dieTruezurückgibt, wenn irgendwelche Parameter im Objekt verwendet werden.Zum Beispiel:
from qiskit.circuit import Parameter from qiskit import pulse shift = Parameter('alpha') schedule = pulse.Schedule() schedule += pulse.SetFrequency(shift, pulse.DriveChannel(0)) assert schedule.is_parameterized() == True print(schedule.parameters) -
Hinzufügen eines
PiecewiseChebyshevzu derqiskit.circuit.libraryzur Implementierung einer stückweisen Tschebyscheff-Approximation einer Eingabefunktion. Für eine gegebene Funktion und den Grad implementiert diese Klasse eine stückweise polynomiale Tschebyscheff-Approximation auf qubits zu auf den gegebenen Intervallen. Alle Polynome in der Approximation sind vom Grad .Zum Beispiel:
import numpy as np from qiskit import QuantumCircuit from qiskit.circuit.library.arithmetic.piecewise_chebyshev import PiecewiseChebyshev f_x, degree, breakpoints, num_state_qubits = lambda x: np.arcsin(1 / x), 2, [2, 4], 2 pw_approximation = PiecewiseChebyshev(f_x, degree, breakpoints, num_state_qubits) pw_approximation._build() qc = QuantumCircuit(pw_approximation.num_qubits) qc.h(list(range(num_state_qubits))) qc.append(pw_approximation.to_instruction(), qc.qubits) qc.draw(output='mpl') -
Die
BackendPropertiesklasse hat nun einereadout_length()methode, die die Ausleselänge [sec] des gegebenen Qubits zurückgibt. -
Eine neue Klasse,
ScheduleBlockwurde dem Modulqiskit.pulsemodul hinzugefügt. Diese Klasse bietet eine neue Darstellung eines Pulsprogramms. Diese Darstellung eignet sich am besten für die Syntax des Pulse Builders und basiert auf der relativen Reihenfolge der Anweisungen.Bei dieser Darstellung wird
alignment_contextverwendet, anstatt die Startzeitt0für jede Anweisung anzugeben. Der Startzeitpunkt einer Anweisung wird implizit mit der angegebenen Transformation und der relativen Position der Anweisungen zugewiesen.Die
ScheduleBlockermöglicht ein lazy instruction scheduling, d. h. wir können der Dauer der Anweisungen beliebige Parameter zuweisen.Zum Beispiel:
from qiskit.pulse import ScheduleBlock, DriveChannel, Gaussian from qiskit.pulse.instructions import Play, Call from qiskit.pulse.transforms import AlignRight from qiskit.circuit import Parameter dur = Parameter('rabi_duration') block = ScheduleBlock(alignment_context=AlignRight()) block += Play(Gaussian(dur, 0.1, dur/4), DriveChannel(0)) block += Call(measure_sched) # subroutine defined elsewheredieser Code definiert ein Experiment, bei dem die Dauer eines Gauß-Pulses abgetastet wird, gefolgt von einer Messung
measure_sched, d.h. ein Rabi-Experiment. Sie können das Objektblockfür jede gescannte Dauer wiederverwenden, indem Sie einen Zielwert für die Dauer zuweisen. -
Hinzufügen einer neuen Funktion
array_to_latex()zumqiskit.visualizationmodul hinzugefügt, die zur Darstellung und Visualisierung von Vektoren und Matrizen mit LaTeX verwendet werden kann.from qiskit.visualization import array_to_latex from numpy import sqrt, exp, pi mat = [[0, exp(pi*.75j)], [1/sqrt(8), 0.875]] array_to_latex(mat) -
Die
StatevectorundDensityMatrixklassen haben jetztdraw()methoden, mit denen Objekte entweder als Textmatrizen, IPython-Latex-Objekte, Latex-Quellen, Q-Sphären, Bloch-Sphären und Hinton-Plots gezeichnet werden können. Standardmäßig ist der Ausgabetyp die entsprechende Ausgabe von__repr__, aber diese Vorgabe kann in einer Benutzerkonfigurationsdatei durch Setzen der Optionstate_drawergeändert werden. Zum Beispiel:from qiskit.quantum_info import DensityMatrix dm = DensityMatrix.from_label('r0') dm.draw('latex')from qiskit.quantum_info import Statevector sv = Statevector.from_label('+r') sv.draw('qsphere')Außerdem wird die
draw()methode nun für die ipython-Anzeige dieser Klassen verwendet. Wenn Sie also den Standardausgabetyp in einer Benutzerkonfigurationsdatei ändern, dann wird, wenn eineStatevectoroder einDensityMatrixobjekt in einem Jupyter-Notebook angezeigt werden, wird dieser Ausgabetyp für das Objekt verwendet. -
Pulse
qiskit.pulse.InstructionObjekte und parametrische Pulsobjekte (z.BGaussianunterstützen jetzt die Verwendung vonParameterundParameterExpressionobjekte für den Parameterduration. Zum Beispiel:from qiskit.circuit import Parameter from qiskit.pulse import Gaussian dur = Parameter('x_pulse_duration') double_dur = dur * 2 rx_pulse = Gaussian(dur, 0.1, dur/4) double_rx_pulse = Gaussian(double_dir, 0.1, dur/4)Beachten Sie, dass wir zwar eine Anweisung mit einem parametrisierten
durationerstellen können, das Hinzufügen einer Anweisung mit ungebundenem Parameterdurationzu einem Zeitplan aber nur von der neu eingeführten Darstellung unterstützt wirdScheduleBlock. Weitere Einzelheiten finden Sie in den Versionshinweisen zu bekannten Problemen. -
Die
run()methode für dieQasmSimulatorPy,StatevectorSimulatorPy, undUnitarySimulatorPybackends nimmt jetzt eineQuantumCircuit(oder eine Liste vonQuantumCircuitobjekte) als Eingabe. Das vorherigeQasmQobjobjekt wird im Moment noch unterstützt, wird aber in einer zukünftigen Version veraltet sein.Ein Beispiel für die Anwendung dieses Verfahrens finden Sie unter:
from qiskit import transpile, QuantumCircuit from qiskit.providers.basicaer import BasicAer backend = BasicAer.get_backend('qasm_simulator') circuit = QuantumCircuit(2) circuit.h(0) circuit.cx(0, 1) circuit.measure_all() tqc = transpile(circuit, backend) result = backend.run(tqc, shots=4096).result() -
Der
CommutativeCancellationtranspiler-Pass hat einen neuen optionalen kwarg im Konstruktorbasis_gates, der eine Liste der Namen der Basis-Gates für das Ziel-Backend enthält. Wenn dies angegeben wird, werden nur Tore imbasis_gateskwarg verwendet. Zuvor ersetzte der Pass automatisch aufeinanderfolgende Gates, die mitZGatemit demU1Gatebedingungslos. Mitbasis_gateskwarg können Sie angeben, welche z-Rotationsgates in der Zielbasis vorhanden sind, um dies zu vermeiden. -
Die Konstruktoren der
Bitklasse und der Unterklassen,Qubit,Clbit, undAncillaQubitwurden dahingehend aktualisiert, dass ihre beiden Parameterregisterundindexnun optional sind. Dies ermöglicht die Erstellung von Bit-Objekten, die unabhängig von einem Register sind. -
Eine neue Klasse,
BooleanExpressionwurde dem Modulqiskit.circuit.classicalfunctionmodul hinzugefügt. Diese Klasse ermöglicht die Erstellung eines Orakels aus einem booleschen Ausdruck Python. Zum Beispiel:from qiskit.circuit import BooleanExpression, QuantumCircuit expression = BooleanExpression('~x & (y | z)') circuit = QuantumCircuit(4) circuit.append(expression, [0, 1, 2, 3]) circuit.draw('mpl')circuit.decompose().draw('mpl')Die Website
BooleanExpressionenthält auch eine Methode,from_dimacs_file()die das Laden von Formeln ermöglicht, die im DIMACS-CNF-Format beschrieben sind. Zum Beispiel:from qiskit.circuit import BooleanExpression, QuantumCircuit boolean_exp = BooleanExpression.from_dimacs_file("simple_v3_c2.cnf") circuit = QuantumCircuit(boolean_exp.num_qubits) circuit.append(boolean_exp, range(boolean_exp.num_qubits)) circuit.draw('text')┌───────────────────┐ q_0: ┤0 ├ │ │ q_1: ┤1 ├ │ SIMPLE_V3_C2.CNF │ q_2: ┤2 ├ │ │ q_3: ┤3 ├ └───────────────────┘circuit.decompose().draw('text')q_0: ──o────o──────────── │ │ q_1: ──■────o────■─────── │ │ │ q_2: ──■────┼────o────■── ┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐ q_3: ┤ X ├┤ X ├┤ X ├┤ X ├ └───┘└───┘└───┘└───┘ -
Eine neue Klasse wurde hinzugefügt,
PhaseOraclewurde demqiskit.circuit.librarymodul hinzugefügt. Diese Klasse ermöglicht die Konstruktion von Phasenorakelschaltungen aus Python booleschen Ausdrücken.from qiskit.circuit.library.phase_oracle import PhaseOracle oracle = PhaseOracle('x1 & x2 & (not x3)') oracle.draw('mpl')Diese Phasenorakel können als Teil eines größeren Algorithmus verwendet werden, zum Beispiel mit
qiskit.algorithms.AmplificationProblem:from qiskit.algorithms import AmplificationProblem, Grover from qiskit import BasicAer backend = BasicAer.get_backend('qasm_simulator') problem = AmplificationProblem(oracle, is_good_state=oracle.evaluate_bitstring) grover = Grover(quantum_instance=backend) result = grover.amplify(problem) result.top_measurementDie
PhaseOracleklasse enthält auch einefrom_dimacs_file()methode, die es ermöglicht, ein Phasenorakel aus einer Datei zu konstruieren, die eine Formel im DIMACS-CNF-Format beschreibt.from qiskit.circuit.library.phase_oracle import PhaseOracle oracle = PhaseOracle.from_dimacs_file("simple_v3_c2.cnf") oracle.draw('text')state_0: ─o───────o────────────── │ ┌───┐ │ ┌───┐ state_1: ─■─┤ X ├─■─┤ X ├─■────── │ └───┘ └───┘ │ ┌───┐ state_2: ─■───────────────o─┤ Z ├ └───┘ -
Alle Transpilerübergänge (d.h. alle Instanzen von
BasePass) sind jetzt direkt aufrufbar. Der Aufruf eines Passes bietet eine bequeme Schnittstelle zur Ausführung des Passes auf einemQuantumCircuitobjekt.Zum Beispiel kann ein einzelner Transformationsdurchgang, wie z. B
BasisTranslatorkann mit durchgeführt werden:from qiskit import QuantumCircuit from qiskit.transpiler.passes import BasisTranslator from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel circuit = QuantumCircuit(1) circuit.h(0) pass_instance = BasisTranslator(sel, ['rx', 'rz', 'cx']) result = pass_instance(circuit) result.draw(output='mpl')Bei der Durchführung eines Analysedurchlaufs muss ein Eigenschaftssatz (als
dictoder alsPropertySet) als Parameter hinzugefügt und möglicherweise "an Ort und Stelle" geändert werden. Zum Beispiel:from qiskit import QuantumCircuit from qiskit.transpiler.passes import Depth circuit = QuantumCircuit(1) circuit.h(0) property_set = {} pass_instance = Depth() pass_instance(circuit, property_set) print(property_set) -
Die Klasse
QasmQobjConfigklasse hat jetzt einen optionalen kwarg fürmeas_levelundmeas_return. Diese Felder können verwendet werden, um die Erzeugung vonQasmQobjauftragspayloads zu generieren, diemeas_level=1(mit Kernelementen versehene Daten) für Schaltkreisaufträge unterstützen (bisher war dies nur fürPulseQobjobjekte). Die Funktionassemble()funktion wurde aktualisiert, um dieses Feld fürQasmQobjobjekte, die sie erzeugt. -
Eine neue
tensor()methode wurde zu derQuantumCircuitklasse hinzugefügt. Diese Methode ermöglicht das Tensoring eines anderen Stromkreises mit einem bestehenden Stromkreis. Diese Methode funktioniert analog zuqiskit.quantum_info.Operator.tensor()und ist mit der Little-Endian-Konvention von Qiskit vereinbar.Zum Beispiel:
from qiskit import QuantumCircuit top = QuantumCircuit(1) top.x(0); bottom = QuantumCircuit(2) bottom.cry(0.2, 0, 1); bottom.tensor(top).draw(output='mpl') -
Die
qiskit.circuit.QuantumCircuitklasse unterstützt nun beliebige Freiform-Metadaten mit demmetadataattribut. Ein Benutzer (oder ein Programm, das auf der Basis vonQuantumCircuit) kann einem Stromkreis Metadaten zuordnen, um den Stromkreis zu verfolgen. Zum Beispiel:from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2, user_metadata_field_1='my_metadata', user_metadata_field_2='my_other_value')oder:
from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2) qc.metadata = {'user_metadata_field_1': 'my_metadata', 'user_metadata_field_2': 'my_other_value'}Diese Metadaten werden nicht verwendet, um die Ausführung des Schaltkreises zu beeinflussen, sondern dienen lediglich dazu, den Schaltkreis während der Lebensdauer des Objekts zu verfolgen. Das Attribut
metadatableibt zwischen allen Schaltkreistransformationen bestehen, einschließlichtranspile()undassemble(). Es wird erwartet, dass die Anbieter die Metadaten mit dem zurückgegebenen Ergebnis verknüpfen, so dass die Nutzer die Ergebnisse auf der Grundlage von Schaltkreis-Metadaten filtern können, so wie sie es derzeit mitQuantumCircuit.nametun können. -
Hinzufügen einer neuen Operatorklasse
CNOTDihedralwurde demqiskit.quantum_infomodul hinzugefügt. Diese Klasse wird verwendet, um die CNOT-Dihedral-Gruppe darzustellen, die durch die QuantengatterCXGate,TGate, undXGate. -
Fügt einen
&(__and__) Binäroperator zuBaseOperatorUnterklassen (z.Bqiskit.quantum_info.Operator) in demqiskit.quantum_infomodul. Dies ist eine Abkürzung für den Aufruf der Klassencompose()methode (d.h.A & B == A.compose(B)).Zum Beispiel:
import qiskit.quantum_info as qi qi.Pauli('X') & qi.Pauli('Y') -
Fügt einen binären Operator
&(__and__) zuqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen. Dies ist eine Abkürzung für den Aufruf der Klassenevolve()methode (d.h.psi & U == psi.evolve(U)).Zum Beispiel:
import qiskit.quantum_info as qi qi.Statevector.from_label('0') & qi.Pauli('X') -
Ein neues 2-Qubit-Tor,
ECRGatedie Echo-Kreuzresonanz (ECR), wurde demqiskit.circuit.librarymodul zusammen mit einer entsprechenden Methode hinzugefügt,ecr()für dieQuantumCircuitklasse. Das ECR-Tor besteht aus zwei Impulsen mit einemXGatezwischen ihnen für das Echo. Dieses Tor ist lokal äquivalent zu einemCXGate(kann durch lokale Vor- oder Nachrotation in ein CNOT umgewandelt werden). Es ist das native Gatter auf der aktuellen IBM -Hardware, und die Kompilierung zu diesem Gatter ermöglicht es, die Pre-/Post-Rotationen in den Rest der Schaltung zu integrieren. -
Ein neuer kwarg
approximation_degreewurde der Funktiontranspile()funktion hinzugefügt, um eine ungefähre Kompilierung zu ermöglichen. Gültige Werte reichen von 0 bis 1, wobei ein höherer Wert eine geringere Annäherung bedeutet. Dies ist eine heuristische Wählscheibe zum Experimentieren mit Schaltkreisannäherungen. Die konkrete Auslegung dieser Zahl ist jedem Durchgang überlassen, der sie zur Durchführung einer ungefähren Version des Durchgangs verwenden kann. Konkrete Beispiele sind derUnitarySynthesispass oder die oder Übersetzer zu diskreten Gattersätzen. Wenn ein Pass diese Option nicht unterstützt, bedeutet dies eine exakte Transformation. -
Zwei neue Übersetzerpässe,
GateDirectionundqiskit.transpiler.passes.CheckGateDirectionwurden demqiskit.transpiler.passesmodul hinzugefügt. Diese neuen Übergänge sind als allgemeiner Ersatz fürCXDirectionundCheckCXDirectiongedacht (die beide jetzt veraltet sind, siehe die Verwerfungshinweise für weitere Details), die die gleiche Funktion erfüllen, aber mit anderen Gates als nurCXGate. -
Unter Windows kann die parallele Ausführung mit der Funktion
parallel_map()funktion jetzt aktiviert werden (standardmäßig ist sie noch deaktiviert). Um dies zu tun, können Sie entwederparallel = Truein einer Benutzerkonfigurationsdatei oder die UmgebungsvariableQISKIT_PARALLELaufTRUEsetzen (dies wirkt sich auch auftranspile()undassemble()die beideparallel_map()intern verwenden). Es ist wichtig zu beachten, dass es bei der Aktivierung der Parallelität unter Windows Einschränkungen bei der Art und Weise gibt, wie Python Prozesse unter Windows startet. Weitere Einzelheiten zu den Einschränkungen bei der parallelen Ausführung unter Windows finden Sie im Abschnitt Bekannte Probleme weiter unten. -
Eine neue Funktion,
hellinger_distance()zur Berechnung des Hellinger-Abstands zwischen zwei Zählverteilungen wurde demqiskit.quantum_infomodul hinzugefügt. -
Die Funktion
decompose_clifford()im Modulqiskit.quantum_infomodul (die intern von derqiskit.quantum_info.Clifford.to_circuit()methode verwendet wird) hat einen neuen kwargmethod, der die Auswahl der verwendeten Synthesemethode ermöglicht, indem er entweder auf'AG'oder'greedy'gesetzt wird. Für mehr als drei Qubits ist er standardmäßig auf'greedy'eingestellt, das eine nicht-optimale, gierige Kompilierungsroutine für die Synthese von Clifford-Elementen von Bravyi et. al., was in der Regel zu besseren CX-Kosten führt als die zuvor verwendete Aaronson-Gottesman-Methode (für mehr als zwei Qubits). Sie können diemethodkwarg verwenden, um zur vorherigen Standardmethode von Aaronson-Gottesman zurückzukehren, indem Siemethod='AG'einstellen. -
Die Klasse
Initializeim Modulqiskit.extensionsmodul kann nun unter Verwendung einer Ganzzahl konstruiert werden. Die "1"-Bits der ganzen Zahl fügen einResetund einXGatein die Schaltung für das entsprechende Qubit ein. Dies geschieht unter Verwendung der standardmäßigen Little-Endian-Konvention von qiskit, d.h. das ganz rechte Bit der Ganzzahl setzt das Qubit 0. Wenn Sie beispielsweise den Parameter inInitializeauf5setzen, werden die Qubits 0 und 2 auf den Wert 1 gesetzt.from qiskit.extensions import Initialize initialize = Initialize(13) initialize.definition.draw('mpl') -
Die Klasse
Initializeim Modulqiskit.extensionsmodul unterstützt nun die direkte Konstruktion aus einem Pauli-Label (analog zurqiskit.quantum_info.Statevector.from_label()methode). Die Pauli-Etiketten beziehen sich auf Basiszustände der Pauli-Eigenzustände Z, X, Y. Diese Bezeichnungen verwenden die standardmäßige Little-Endian-Notation von Qiskit, z.B. würde eine Bezeichnung'01'das Qubit 0 mit und das Qubit 1 mit initialisieren.from qiskit.extensions import Initialize initialize = Initialize("10+-lr") initialize.definition.draw('mpl') -
Der kwarg,
template_list, für den Konstruktor desqiskit.transpiler.passes.TemplateOptimizationtranspilerpasses unterstützt nun die Aufnahme einer Liste von sowohlQuantumCircuitundDAGDependencyobjekten. Zuvor wurden nurQuantumCircuitakzeptiert (die intern inDAGDependencyobjekte) in die Eingabeliste aufgenommen. -
Ein neuer Transpiler-Pass,
qiskit.transpiler.passes.RZXCalibrationBuilderder Kalibrierungen erzeugen und zu einem Quantenkreis hinzufügen kann, wurde eingeführt. Dieser Durchlauf nimmt kalibrierteCXGateobjekte und erstellt die Kalibrierungen fürqiskit.circuit.library.RZXGateobjekte mit einem beliebigen Drehwinkel. Die Zeitpläne werden durch Dehnen und Stauchen derGaussianSquareImpulse der Echo-Cross-Resonanztore erstellt. -
Neue Vorlagenschaltungen für die Verwendung von
qiskit.circuit.library.RZXGatewerden demqiskit.circuit.librarymodul hinzugefügt (z.Brzx_yz). Dies ermöglicht die Kopplung desTemplateOptimizationpass mit demqiskit.transpiler.passes.RZXCalibrationBuilderpasses, um automatisch Gate-Sequenzen, wieCNOT - P(theta) - CNOT, zu finden und durch effizientere Schaltungen zu ersetzen, die aufqiskit.circuit.library.RZXGatemit einer Kalibrierung. -
Der Matplotlib-Ausgabetyp für die
circuit_drawer()und diedraw()methode für dieQuantumCircuitklasse unterstützen nun Konfigurationsdateien zur Einstellung des Visualisierungsstils. In früheren Versionen gab es eine Grundfunktion, die es den Benutzern ermöglichte, einenstylekwarg zu übergeben, der einedictenthielt, um die Farben und andere Anzeigefunktionen dermplSchublade anzupassen. Dies wurde nun erweitert, so dass diese Wörterbücher direkt aus JSON-Dateien geladen werden können, ohne dass ein Wörterbuch übergeben werden muss. Dies ermöglicht es Benutzern, neue Stildateien zu erstellen und diesen Stil für Visualisierungen zu verwenden, indem sie den Dateinamen des Stils als String an denstylekwarg übergeben.Um diese Funktion zu nutzen, müssen Sie die Option
circuit_mpl_style_pathin einer Benutzerkonfigurationsdatei festlegen. Diese Option sollte auf den Pfad gesetzt werden, in dem qiskit nach Style-JSON-Dateien suchen soll. Wenn Sie mehrere Pfadangaben machen, sollten diese durch:getrennt werden. Wenn Sie zum Beispielcircuit_mpl_style_path = ~/.qiskit:~/user_stylesin einer Benutzerkonfigurationsdatei einstellen, werden JSON-Dateien sowohl in~/.qiskitals auch in~/user_stylesgesucht. -
Der Funktion
marginal_counts()wurde ein neuer kwargformat_marginalhinzugefügt, der, wenn er aufTruegesetzt wird, die ausgegebenen Zählerstände entsprechendcregsin der Schaltung formatiert, und fehlende Indizes werden mit_dargestellt. Zum Beispiel:from qiskit import QuantumCircuit, execute, BasicAer, result from qiskit.result.utils import marginal_counts qc = QuantumCircuit(5, 5) qc.x(0) qc.measure(0, 0) result = execute(qc, BasicAer.get_backend('qasm_simulator')).result() print(marginal_counts(result.get_counts(), [0, 2, 4], format_marginal=True)) -
Verbesserte die Leistung von
qiskit.quantum_info.Statevector.expectation_value()undqiskit.quantum_info.DensityMatrix.expectation_value()wenn der Argumentoperator einPaulioderSparsePauliOpoperator ist. -
Die Benutzer-Konfigurationsdatei hat 2 neue Konfigurationsoptionen,
num_processesundparallel, die verwendet werden, um das Standardverhalten vonparallel_map(). Die Optionparallelist ein Boolescher Wert, mit dem festgelegt wird, obparallel_map()in mehreren Prozessen ausgeführt wird oder nicht. Wenn er aufFalsegesetzt ist, werden Aufrufe anparallel_map()seriell ausgeführt, während die Einstellung aufTrueeine parallele Ausführung ermöglicht. Die Optionnum_processesnimmt eine ganze Zahl, die angibt, wie viele CPUs bei der parallelen Ausführung verwendet werden sollen. Standardmäßig wird die Anzahl der CPU-Kerne auf einem System verwendet. -
Es gibt 2 neue Umgebungsvariablen,
QISKIT_PARALLELundQISKIT_NUM_PROCS, die verwendet werden können, um das Standardverhalten vonparallel_map(). Die OptionQISKIT_PARALLELkann aufTRUE(beliebige Großschreibung) gesetzt werden, um festzulegen, dass der Standard in mehreren Prozessen ausgeführt wird, wennparallel_map()aufgerufen wird. Wenn er auf einen anderen Wert gesetzt istparallel_map()wird seriell ausgeführt.QISKIT_NUM_PROCSnimmt eine ganze Zahl (z. B.QISKIT_NUM_PROCS=5), die als Standardanzahl von Prozessen verwendet wird, mit denen das Programm laufen soll. Diese beiden Optionen haben Vorrang vor der entsprechenden Option in der Benutzerkonfigurationsdatei. -
Eine neue Methode,
gradient()wurde der KlasseParameterExpressionklasse hinzugefügt. Diese Methode wird verwendet, um den Gradienten einesParameterExpressionobjekts. -
Die Methode
__eq__(d. h. die Methode, die aufgerufen wird, wenn der Operator==verwendet wird) für die OptionParameterExpressionerlaubt nun den Vergleich mit einem numerischen Wert. Zuvor war es nur möglich, zwei Instanzen vonParameterExpressionmit==vergleichen. Zum Beispiel:from qiskit.circuit import Parameter x = Parameter("x") y = x + 2 y = y.assign(x, -1) assert y == 1 -
Die
PauliFeatureMapklasse im Modulqiskit.circuit.librarymodul unterstützt nun die Anpassung des Rotationsfaktors , indem er entweder mit dem kwargalphaim Konstruktor oder mit demalphaattribut nach der Erstellung. Zuvor war dieser Wert auf2.0festgelegt. Die Anpassung dieses Attributs ermöglicht eine bessere Kontrolle der Entscheidungsgrenzen und bietet zusätzliche Flexibilität bei der Handhabung der Eingabemerkmale, ohne dass diese im Datensatz explizit skaliert werden müssen. -
Eine neue
Gateklasse,PauliGatewurde dasqiskit.circuit.librarymodul und die entsprechende Methode hinzugefügt,pauli()wurde der KlasseQuantumCircuitklasse hinzugefügt. Diese neue Gatterklasse ermöglicht es, mehrere individuelle Pauli-Gatter gleichzeitig auf verschiedene Qubits anzuwenden. Dies ist vor allem für Simulatoren nützlich, die dieses neue Gatter nutzen können, um mehrere gleichzeitige Pauli-Gatter effizienter zu implementieren. -
Verbessern Sie den
qiskit.quantum_info.Paulibetreiber. Diese Klasse repräsentiert nun ein Element aus der vollständigen N-Qubit-Pauli-Gruppe einschließlich komplexer Koeffizienten. Es unterstützt jetzt die Operator-API-Methoden einschließlichcompose(),dot(),tensor()usw., wobei compose und dot in Bezug auf die vollständige Pauli-Gruppe definiert sind.Diese Klasse ermöglicht auch die Konvertierung in und aus der Zeichenkettendarstellung von Pauli's zur Vereinfachung.
Zum Beispiel
from qiskit.quantum_info import Pauli P1 = Pauli('XYZ') P2 = Pauli('YZX') P1.dot(P2)Pauli's können auch direkt angehängt werden an
QuantumCircuitobjektefrom qiskit import QuantumCircuit from qiskit.quantum_info import Pauli circ = QuantumCircuit(3) circ.append(Pauli('XYZ'), [0, 1, 2]) circ.draw(output='mpl')Zusätzliche Methoden erlauben es zu berechnen, wann zwei Pauli's kommutieren (unter Verwendung der
commutes()methode) oder anticommute (mit deranticommutes()methode), und die Berechnung der Pauli, die sich aus der Clifford-Konjugation ergeben, mit derevolve()methode.Weitere Informationen finden Sie in der API-Dokumentation der
Pauliklasse für zusätzliche Informationen. -
Eine neue Funktion,
random_pauli()zur Erzeugung eines Zufallselements der N-Qubit-Pauli-Gruppe wurde demqiskit.quantum_infomodul hinzugefügt. -
Eine neue Klasse,
PiecewisePolynomialPauliRotationswurde dem Modulqiskit.circuit.librarymodul hinzugefügt. Dieses Element der Schaltkreisbibliothek dient der Abbildung einer stückweisen Polynomfunktion , die durch Haltepunkte und Koeffizienten definiert ist, auf Qubit-Amplituden. Die Haltepunkte sind eine Teilmenge von , wobei die Anzahl der Zustandsbits ist. Die entsprechenden Koeffizienten , wobei der höchste Grad aller Polynome ist. Dann ist definiert als:
wobei wir implizit annehmen. Und die auf die Amplituden angewandte Abbildung ist gegeben durch
Diese Abbildung basiert auf kontrollierten Pauli-Y-Rotationen und wurde mit Hilfe der PolynomialPauliRotations.
-
Ein neues Modul
qiskit.algorithmsist eingeführt worden. Dieses Modul enthält Funktionen, die denen des (inzwischen veralteten) Modulsqiskit.aqua.algorithmsentsprechen, und stellt die Bausteine für die Konstruktion von Quantenalgorithmen bereit. Einzelheiten zur Migration vonqiskit-aquazu diesem neuen Modul finden Sie in der Migrationsanleitung. -
Ein neues Modul
qiskit.opflowist eingeführt worden. Dieses Modul enthält die gleiche Funktionalität wie das (inzwischen veraltete) Modulqiskit.aqua.operatorsund stellt die Operatoren und Zustandsfunktionen bereit, die zum Aufbau von Quantenalgorithmen verwendet werden. Einzelheiten zur Migration vonqiskit-aquazu diesem neuen Modul finden Sie in der Migrationsanleitung. -
Dies ist die erste Version, die vorkompilierte Binär-Räder für die Systeme Linux aarch64 enthält. Wenn Sie ein manylinux2014 kompatibles aarch64 Linux System verwenden, gibt es jetzt vorkompilierte Räder auf PyPI,. Sie müssen nicht mehr aus den Quellen bauen, um qiskit-terra zu installieren.
-
Die Funktion
qiskit.quantum_info.process_fidelity()funktion kann nun auch mit einem nicht einheitlichen Zielkanal verwendet werden. In diesem Fall ist der zurückgegebene Wert gleich demqiskit.quantum_info.state_fidelity()der normalisiertenqiskit.quantum_info.Choimatrizen für die Kanäle.Beachten Sie, dass die
qiskit.quantum_info.average_gate_fidelity()undqiskit.quantum_info.gate_error()immer noch voraussetzen, dass der Zielkanal einheitlich ist und eine Ausnahme auslösen, wenn dies nicht der Fall ist. -
Es wurde eine neue Funktion zur Impulserzeugung hinzugefügt:
qiskit.pulse.macro(). Dadurch können normale Python Funktionen als Makros dekoriert werden. Dies ermöglicht die Verwendung von Pulsbuilder-Funktionen innerhalb der dekorierten Funktion. Das Builder-Makro kann dann aus einem Pulse-Building-Kontext heraus aufgerufen werden, was die Wiederverwendung von Code ermöglicht.Beispiel:
from qiskit import pulse @pulse.macro def measure(qubit: int): pulse.play(pulse.GaussianSquare(16384, 256, 15872), pulse.MeasureChannel(qubit)) mem_slot = pulse.MemorySlot(0) pulse.acquire(16384, pulse.AcquireChannel(0), mem_slot) return mem_slot with pulse.build(backend=backend) as sched: mem_slot = measure(0) print(f"Qubit measured into {mem_slot}") sched.draw() -
Eine neue Klasse,
PauliTwoDesign, wurde derqiskit.circuit.libraryhinzugefügt, die eine bestimmte Form einer 2-Entwurfsschaltung aus https://arxiv.org/pdf/1803.11173.pdf Diese Schaltung kann zum Beispiel so aussehen:from qiskit.circuit.library import PauliTwoDesign circuit = PauliTwoDesign(4, reps=2, seed=5, insert_barriers=True) circuit.decompose().draw(output='mpl') -
Eine neue Impulsschublade
qiskit.visualization.pulse_v2.draw()(mit dem Aliasqiskit.visualization.pulse_drawer_v2) ist jetzt verfügbar. Diese neue Impulsschublade unterstützt mehrere neue Funktionen, die in der ursprünglichen Impulsschublade nicht vorhanden waren (pulse_drawer()).- Abschneiden von langen Impulsbefehlen.
- Visualisierung von parametrischen Impulsen.
- Neue Stylesheets
IQXStandard,IQXSimple,IQXDebugging. - Visualisierung von Systeminformationen (Kanalfrequenz, etc...) durch Angabe von
qiskit.providers.Backendobjekte für die Visualisierung. - Angabe von
axisObjekten für das Plotten, um die generierten Plots weiter auszubauen, z. B. für Publikationsmanipulationen.
Neue Stylesheets können Callback-Funktionen übernehmen, die das Erscheinungsbild des Ausgabebildes dynamisch verändern, z. B. eine Sammlung von Kanälen neu zusammensetzen, Details von Anweisungen anzeigen, das Erscheinungsbild von Impulshüllkurven aktualisieren usw Sie können benutzerdefinierte Callback-Funktionen erstellen und diese in eine Stylesheet-Instanz einspeisen, um das Erscheinungsbild der Figur zu ändern, ohne den Code der Schublade zu modifizieren. Weitere Einzelheiten finden Sie in den Dokumentationen zum Modul Impulsschublade.
Beachten Sie, dass das Speichern von Dateien jetzt an Matplotlib delegiert wird. Um Bilddateien zu speichern, müssen Sie die Methode
savefigmit dem zurückgegebenen ObjektFigureaufrufen. -
Fügt eine
reverse_qargs()methode zu denqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen. Diese Methode kehrt die Reihenfolge der Teilsysteme in den Zuständen um und ist äquivalent zu derqiskit.circuit.QuantumCircuit.reverse_bits()methode für N-Qubit-Zustände. Zum Beispiel:from qiskit.circuit.library import QFT from qiskit.quantum_info import Statevector circ = QFT(3) state1 = Statevector.from_instruction(circ) state2 = Statevector.from_instruction(circ.reverse_bits()) state1.reverse_qargs() == state2 -
Fügt eine
reverse_qargs()methode zu derqiskit.quantum_info.Operatorklasse. Diese Methode kehrt die Reihenfolge der Subsysteme im Operator um und ist äquivalent zu derqiskit.circuit.QuantumCircuit.reverse_bits()methode für N-Qubit-Operatoren. Zum Beispiel:from qiskit.circuit.library import QFT from qiskit.quantum_info import Operator circ = QFT(3) op1 = Operator(circ) op2 = Operator(circ.reverse_bits()) op1.reverse_qargs() == op2 -
Die Ausgabemethode
latexfür dieqiskit.visualization.circuit_drawer()funktion und diedraw()methode verwenden nun eine benutzerdefinierte Beschriftung für Gates in der Ausgabevisualisierung. Zum Beispiel:import math from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2) qc.h(0) qc.rx(math.pi/2, 0, label='My Special Rotation') qc.draw(output='latex') -
Der
routing_methodkwarg für die Funktiontranspile()funktion akzeptiert jetzt eine neue Option,'none'. Unterrouting_method='none'wird kein Routing-Durchgang als Teil der Transpilation durchgeführt. Wenn die Schaltung nicht in den Kopplungsplan passt, wird eineTranspilerErrorausnahme ausgelöst werden. -
Eine neue Gatterklasse,
RVGatewurde demqiskit.circuit.librarymodul hinzugefügt, zusammen mit der entsprechendenQuantumCircuitmethoderv(). DieRVGateist ein allgemeines Drehtor, ähnlich demUGatejedoch werden anstelle von Euler-Winkeln die drei Komponenten eines Rotationsvektors angegeben, wobei die Richtung des Vektors die Rotationsachse und der Betrag den Rotationswinkel um die Achse in Radiant angibt. Zum Beispiel:import math import np from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(1) theta = math.pi / 5 phi = math.pi / 3 # RGate axis: axis = np.array([math.cos(phi), math.sin(phi)]) rotation_vector = theta * axis qc.rv(*rotation_vector, 0) -
Ungebunden
Parameterobjekte, die in einemQuantumCircuitobjekt verwendet werden, werden nun nach Namen sortiert. Dies wird für die Parameter wirksam, die vomparametersattribut zurückgegeben werden. Außerdem werden dieqiskit.circuit.QuantumCircuit.bind_parameters()undqiskit.circuit.QuantumCircuit.assign_parameters()methoden nun eine Liste von a-Werten aufnehmen, die sie in nach Namen sortierter Reihenfolge an die Parameter binden/zuweisen. Zuvor konnten diese Methoden nur ein Wörterbuch mit Parametern und Werten aufnehmen. Zum Beispiel:from qiskit.circuit import QuantumCircuit, Parameter circuit = QuantumCircuit(1) circuit.rx(Parameter('x'), 0) circuit.ry(Parameter('y'), 0) print(circuit.parameters) bound = circuit.bind_parameters([1, 2]) bound.draw(output='mpl') -
Die Konstruktoren für die
qiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen können nun einQuantumCircuitobjekt aufnehmen, um einStatevectorundDensityMatrixobjekt aus dieser Schaltung erstellen, vorausgesetzt, die Qubits sind in initialisiert. Zum Beispiel:from qiskit import QuantumCircuit from qiskit.quantum_info import Statevector qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) statevector = Statevector(qc) statevector.draw(output='latex') -
Neue Fake-Backend-Klassen sind unter
qiskit.test.mockverfügbar. Dazu gehören nachgebildete Versionen vonibmq_casablanca,ibmq_sydney,ibmq_mumbai,ibmq_lima,ibmq_belem,ibmq_quito. Wie bei den anderen gefälschten Backends enthalten diese Schnappschüsse von Kalibrierungsdaten (z. B.backend.defaults()) und Fehlerdaten (d.h.backend.properties()) die dem realen System entnommen sind und für lokale Tests, Kompilierung und Simulation verwendet werden können.
Bekannte Probleme
-
Der Versuch, ein
qiskit.pulse.InstructionObjekt mit einem parametrisiertendurationhinzuzufügen (d.h. der Wert vondurationist ein ungebundenesParameteroderParameterExpressionobjekt) zu einemqiskit.pulse.Schedulewird nicht unterstützt. Der Versuch, dies zu tun, führt zuUnassignedDurationErrorPulseErrorausgelöst werden. Dies ist eine Einschränkung der Art und Weise, wie dieInstructionÜberschneidungsbeschränkungen derzeit ausgewertet werden. Dies wird unterstützt durchScheduleBlockunterstützt, bei dem die Überschneidungsbeschränkungen unmittelbar vor der Ausführung ausgewertet werden. -
Auf Windows-Systemen, auf denen die parallele Ausführung für
parallel_map()aktiviert ist, funktioniert die Parallelität möglicherweise nicht, wenn sie von einem Skript aufgerufen wird, das außerhalb einesif __name__ == '__main__':-Blocks läuft. Das liegt daran, wie Python unter Windows parallele Prozesse startet. Wenn einRuntimeErroroderAttributeErrorvon Skripten ausgelöst wird, dieparallel_map()(einschließlich der Verwendung von Funktionen, dieparallel_map()intern verwenden, wietranspile()) mit Windows und aktivierter Parallelität aufrufen, können Sie versuchen, die Skriptaufrufe inif __name__ == '__main__':einzubetten, um das Problem zu umgehen. Zum Beispiel:from qiskit import QuantumCircuit, QiskitError from qiskit import execute, Aer qc1 = QuantumCircuit(2, 2) qc1.h(0) qc1.cx(0, 1) qc1.measure([0,1], [0,1]) # making another circuit: superpositions qc2 = QuantumCircuit(2, 2) qc2.h([0,1]) qc2.measure([0,1], [0,1]) execute([qc1, qc2], Aer.get_backend('qasm_simulator'))geändert werden in
from qiskit import QuantumCircuit, QiskitError from qiskit import execute, Aer def main(): qc1 = QuantumCircuit(2, 2) qc1.h(0) qc1.cx(0, 1) qc1.measure([0,1], [0,1]) # making another circuit: superpositions qc2 = QuantumCircuit(2, 2) qc2.h([0,1]) qc2.measure([0,1], [0,1]) execute([qc1, qc2], Aer.get_backend('qasm_simulator')) if __name__ == '__main__': main()wenn bei der Parallelisierung unter Windows Fehler aufgetreten sind.
Anmerkungen zu Upgrades
-
Die voreingestellten Passmanager
level_1_pass_manager,level_2_pass_manager, undlevel_3_pass_manager(die füroptimization_level1, 2, und 3 imtranspile()undexecute()funktionen verwendet werden) verwenden nun unbedingt denOptimize1qGatesDecompositionpass für die 1-Qubit-Gate-Optimierung. Zuvor verwendeten diese Passmanager denOptimize1qGatesverwendet, wenn die Basis-Gatesu1,u2oderu3enthielten. Wenn Sie weiterhin das alteOptimize1qGatesverwenden möchten, müssen Sie eine benutzerdefiniertePassManagermit dem Pass. -
Nach der Transpilation eines parametrisierten
QuantumCircuitist dasglobal_phaseattribut der Ausgangsschaltung nicht mehr in vereinfachter Form zurückgegeben werden, wenn die globale Phase eineParameterExpression.Zum Beispiel:
qc = QuantumCircuit(1) theta = Parameter('theta') qc.rz(theta, 0) qc.rz(-theta, 0) print(transpile(qc, basis_gates=['p']).global_phase)lieferte bisher
0, jetzt aber-0.5*theta + 0.5*theta. Diese Änderung war notwendig, um einen großen Verlust an Laufzeitleistung zu vermeiden, da die Vereinfachung symbolischer Ausdrücke recht langsam sein kann, insbesondere wenn es vieleParameterExpressionobjekte in einem Schaltkreis gibt. -
Die
BasicAerJobjob-Objekte, die von BasicAer Backends zurückgegeben werden, sind nun synchrone Instanzen vonJobV1. Das bedeutet, dass die Aufrufe derrun()blockiert werden, bis die Ausführung der Simulation beendet ist. Wenn Sie das vorherige asynchrone Verhalten wiederherstellen wollen, müssen Sie dierun()mit etwas verpacken, das in einem separaten Thread oder Prozess wiefutures.ThreadPoolExecutoroderfutures.ProcessPoolExecutorausgeführt wird. -
Die Option
allow_sample_measuringfür den Simulator BasicAerQasmSimulatorPywurde vom StandardwertFalseaufTruegeändert. Dies geschah, um das tatsächliche Standardverhalten des Simulators besser widerzuspiegeln, der die Probenmessung verwendet, wenn der Eingangsschaltkreis dies unterstützt (auch wenn sie nicht aktiviert ist). Wenn Sie eine Schaltung betreiben, die keine Sample-Messung unterstützt (d.h. sie hatResetOperationen oder wenn es Operationen nach einer Messung auf einem Qubit gibt), sollten Sie sicherstellen, dass Sie diese Option explizit aufFalsesetzen, wenn Sierun(). -
Der
CommutativeCancellationtranspiler-Pass kennt nun die Gatter der Zielbasis, d. h. er verwendet nur Gatter in der angegebenen Basis. Zuvor ersetzte der Pass bedingungslos aufeinanderfolgende Gatter, die sich mitZGatemit demU1Gate. Da der Pass nun jedoch basisbewusst ist und über einen kwarg,basis_gates, zur Angabe der Zielbasis verfügt, kann sich das Verhalten ändern, wenn der kwarg nicht gesetzt ist. Wenn derbasis_gateskwarg nicht verwendet wird und keine variablen z-Rotationsgatter in der Schaltung vorhanden sind, erfolgt keine kommutative Aufhebung. -
Register(das ist die übergeordnete Klasse fürQuantumRegisterundClassicalRegisterundBit(die die übergeordnete Klasse fürQubitundClbit) sind jetzt unveränderlich. In früheren Versionen war es möglich, den Wert von asizeodernameattribute einesRegisterobjekts und derindexoderregisterattribute einesBitobjekts, nachdem es ursprünglich erstellt wurde. Dies würde jedoch zu einem unzulässigen Verhalten führen, das Container-Strukturen beschädigen würde, die auf einem Hash beruhen (wie z.B. ein dict), da diese Attribute als unveränderliche Eigenschaften eines Registers oder Bits behandelt werden (siehe #4705 für weitere Details). Um dieses unzulässige Verhalten zu vermeiden, werden die Attribute aRegisterundBitnach der ersten Erstellung nicht mehr setzbar sind. Wenn Sie die Objekte bisher zur Laufzeit angepasst haben, müssen Sie nun ein neuesRegisteroderBitObjekt mit den neuen Werten erstellen. -
Die Methode
DAGCircuit.__eq__(die vom Operator==verwendet wird), mit der die strukturelle Gleichheit vonDAGCircuitundQuantumCircuitinstanzen prüft, wird nun dieglobal_phaseundcalibrationsattribute in die auf Gleichheit geprüften Felder ein. Das bedeutet, dass Stromkreise, die in früheren Versionen als gleichwertig eingestuft wurden, nun möglicherweise nicht mehr gleichwertig sind, wenn sich dieglobal_phaseodercalibrationszwischen den Stromkreisen unterscheiden. In früheren Versionen würde dies beispielsweiseTruezurückgeben:import math from qiskit import QuantumCircuit qc1 = QuantumCircuit(1) qc1.x(0) qc2 = QuantumCircuit(1, global_phase=math.pi) qc2.x(0) print(qc2 == qc1)Da jedoch das Attribut
global_phaseder Schaltkreise unterschiedlich ist, wird nunFalsezurückgegeben. -
Die zuvor veralteten Methoden
qubits()undclbits()der KlasseDAGCircuitklasse, die in der Terra-Version 0.15.0 veraltet waren, wurden entfernt. Stattdessen sollten Sie die AttributequbitsundclbitsderDAGCircuitklasse verwenden. Zum Beispiel, wenn Sie laufen würden:from qiskit.dagcircuit import DAGCircuit dag = DAGCircuit() qubits = dag.qubits()Dies würde durch ersetzt werden:
from qiskit.dagcircuit import DAGCircuit dag = DAGCircuit() qubits = dag.qubits -
Die
PulseDefaultsdie von den Fake-Puls-Backendsqiskit.test.mock.FakeOpenPulse2Qundqiskit.test.mock.FakeOpenPulse3Qzurückgegeben werden, wurden aktualisiert und enthalten nun realistischere Impulsfolgen-Definitionen. Wenn Sie diese gefälschten Backend-Klassen verwenden, müssen Sie Ihre Verwendung aufgrund dieser Änderungen möglicherweise aktualisieren. -
Die Standard-Synthesemethode, die von der Funktion
decompose_clifford()imquantum_infomodul (die intern von derqiskit.quantum_info.Clifford.to_circuit()methode) für mehr als 3 Qubits verwendet nun eine nicht-optimale, gierige Kompilierungsroutine für die Synthese von Clifford-Elementen, die von Bravyi et. al., was in der Regel zu besseren CX-Kosten im Vergleich zum alten Standard führt. Wenn Sie zur vorherigen Aaronson-Gottesman-Methode zurückkehren möchten, können Sie dies untermethod='AG'tun. -
Das zuvor veraltete Modul
qiskit.visualization.interactive, das in der Version 0.15.0 veraltet war, wurde nun entfernt. Stattdessen sollten Sie die matplotlib-basierten Visualisierungen verwenden:Interaktive Funktion entferntÄquivalente Matplotlib-Funktioniplot_bloch_multivectorqiskit.visualization.plot_bloch_multivector()iplot_state_cityqiskit.visualization.plot_state_city()iplot_state_qsphereqiskit.visualization.plot_state_qsphere()iplot_state_hintonqiskit.visualization.plot_state_hinton()iplot_histogramqiskit.visualization.plot_histogram()iplot_state_paulivecqiskit.visualization.plot_state_paulivec() -
Die Top-Level-Attribute
qiskit.Aerundqiskit.IBMQwerden jetzt verzögert geladen. Dies bedeutet, dass die Objekte nun immer vorhanden sind und beim Import keine Warnungen mehr ausgegeben werden, wennqiskit-aeroderqiskit-ibmq-providernicht installiert sind (oder von Python nicht gefunden werden können). Wenn Sie das Vorhandensein vonqiskit-aeroderqiskit-ibmq-providermit Hilfe dieser Modulattribute überprüft haben und explizit mitNoneverglichen haben oder nach dem Fehlen des Attributs gesucht haben, wird dies nicht mehr funktionieren, da sie jetzt immer als Objekt definiert sind. Mit anderen Worten: Es läuft etwas wie:try: from qiskit import Aer except ImportError: print("Aer not available") or:: try: from qiskit import IBMQ except ImportError: print("IBMQ not available")wird nicht mehr funktionieren. Um festzustellen, ob diese Anbieter vorhanden sind, können Sie entweder explizit
qiskit.providers.aer.Aerundqiskit.providers.ibmq.IBMQverwenden:try: from qiskit.providers.aer import Aer except ImportError: print("Aer not available") try: from qiskit.providers.ibmq import IBMQ except ImportError: print("IBMQ not available")oder überprüfen Sie stattdessen z. B.
bool(qiskit.Aer)undbool(qiskit.IBMQ):import qiskit if not qiskit.Aer: print("Aer not available") if not qiskit.IBMQ: print("IBMQ not available")Diese Änderung war notwendig, um potentielle Probleme mit dem Importzyklus zwischen den qiskit-Paketen zu vermeiden und auch um die Importzeit zu verbessern, wenn Aer oder IBMQ nicht verwendet werden.
-
Die Option
suppress_packaging_warningsin der Benutzerkonfigurationsdatei und die UmgebungsvariableQISKIT_SUPPRESS_PACKAGING_WARNINGShaben keine Wirkung mehr und werden stillschweigend ignoriert. Die Warnungen, die diese Option kontrollierte, wurden entfernt und werden nicht mehr beim Import aus dem Modulqiskitausgegeben. -
Der zuvor veraltete
conditionkwarg fürqiskit.dagcircuit.DAGNodekonstruktor wurde entfernt. Sie wurde in der Version 0.15.0 veraltet. Stattdessen sollten Sie nun die klassische Bedingung auf dasInstructionobjekt setzen, das an denDAGNodekonstruktor übergeben wird, wenn Sie einen neuenopKnoten erstellen. -
Beim Erstellen einer neuen
Register(das ist die übergeordnete Klasse fürQuantumRegisterundClassicalRegister) oderQuantumCircuitobjekts mit einer Anzahl von Bits (z. B.QuantumCircuit(2)) ist es jetzt erforderlich, dass die Anzahl der Bits als Ganzzahl oder als ein anderer Typ angegeben wird, der in eindeutige Ganzzahlen gecastet werden kann (z. B.2.0). Nicht-ganzzahlige Werte führen nun zu einem Fehler, da die Absicht in diesen Fällen unklar war (man kann keine Nachkommastellen haben). Weitere Informationen darüber, warum dies geändert wurde, finden Sie unter: #4855 -
networkx ist keine Voraussetzung mehr für qiskit-terra. Die gesamte networkx-Nutzung in qiskit-terra wurde mit Ausnahme von 3 Methoden entfernt:
qiskit.dagcircuit.DAGCircuit.to_networkxqiskit.dagcircuit.DAGCircuit.from_networkxqiskit.dagcircuit.DAGDependency.to_networkx
Wenn Sie eine dieser Methoden verwenden, müssen Sie networkx manuell in Ihrer Umgebung installieren, um sie weiterhin nutzen zu können.
-
Standardmäßig wird auf macOS mit Python >= 3.8
parallel_map()nicht mehr in mehreren Prozessen ausgeführt. Dies ist eine Änderung gegenüber früheren Versionen, bei denen das Standardverhalten war, dassparallel_map()mehrere Prozesse starten würde. Diese Änderung wurde vorgenommen, weil bei neueren Versionen von macOS mit Python 3.8 und 3.9 Multiprocessing entweder unzuverlässig ist oder einen erheblichen Overhead verursacht, weil Python 3.8 neue Prozesse mitspawnstattforkstartet. Um die parallele Ausführung auf macOS mit Python >= 3.8 wieder zu aktivieren, können Sie die Optionparallelin der Benutzerkonfigurationsdatei verwenden oder die UmgebungsvariableQISKIT_PARALLELaufTruesetzen. -
Der zuvor veraltete kwarg
callbackauf dem Konstruktor für diePassManagerklasse wurde entfernt. Dieser Warg ist seit der Veröffentlichung von 0.13.0 (9. April 2020) veraltet. Stattdessen können Sie dencallbackkwarg direkt an dieqiskit.transpiler.PassManager.run()methode direkt übergeben. Zum Beispiel, wenn Sie verwenden:from qiskit.circuit.random import random_circuit from qiskit.transpiler import PassManager qc = random_circuit(2, 2) def callback(**kwargs) print(kwargs['pass_']) pm = PassManager(callback=callback) pm.run(qc)kann dies durch ersetzt werden:
from qiskit.circuit.random import random_circuit from qiskit.transpiler import PassManager qc = random_circuit(2, 2) def callback(**kwargs) print(kwargs['pass_']) pm = PassManager() pm.run(qc, callback=callback) -
Es ist nun nicht mehr möglich, einen Basiskanal ohne ein Präfix wie
qiskit.pulse.Channeloderqiskit.pulse.PulseChannelzu instanziieren. Diese Klassen dienen der Klassifizierung der verschiedenen Arten von benutzerseitigen Kanälen, wie z. B.qiskit.pulse.DriveChannel, haben aber keine Definition als Zielressource. Wenn Sie bisher entwederqiskit.pulse.Channeloderqiskit.pulse.PulseChanneldirekt instanziiert haben, ist dies nicht mehr erlaubt. Bitte verwenden Sie die entsprechende Unterklasse. -
Wenn die
require_cpund/oderrequire_tpkwargs vonqiskit.quantum_info.process_fidelity(),qiskit.quantum_info.average_gate_fidelity(),qiskit.quantum_info.gate_error()Truesind, wird jetzt nur noch eine Warnung protokolliert und nicht wie bisher eineQiskitErrorausnahme auslöst, wenn der Eingabekanal nicht-CP bzw. nicht-TP ist. -
Die
QFTklasse im Modulqiskit.circuit.librarymodul berechnet nun die Fourier-Transformation unter Verwendung einer Little-Endian-Darstellung von Tensoren, d. h. der Zustand wird auf abgebildet, wobei angenommen wird, dass die Berechnungsbasis der Little-Endian-Bit-Reihenfolge der ganzen Zahlen entspricht. , usw. Dies wurde getan, um eine bessere Übereinstimmung mit dem Rest von Qiskit zu erreichen, das eine Little-Endian-Konvention für die Bitreihenfolge verwendet. Wenn Sie von der vorherigen Bitreihenfolge abhängig waren, können Sie die Methodereverse_bits()verwenden, um zum vorherigen Verhalten zurückzukehren. Zum Beispiel:from qiskit.circuit.library import QFT qft = QFT(5).reverse_bits() -
Das
qiskit.__qiskit_version__Modul-Attribut war zuvor eindictund gibt nun ein benutzerdefiniertes, schreibgeschütztesMappingObjekt zurück, das die Version von qiskit-Elementen zur Laufzeit statt zur Importzeit überprüft. Dies wurde getan, um den Importpfad von qiskit zu beschleunigen und einen möglichen Importzyklus zu eliminieren, indem die Elementpakete nur zur Laufzeit importiert werden, wenn die Version aus dem Paket benötigt wird. Dies sollte vollständig kompatibel mit demdictsein, das zuvor zurückgegeben wurde, und für die meisten normalen Anwendungsfälle wird es keinen Unterschied geben. Wenn jedoch einige Anwendungen entweder auf die Mutation des Inhalts oder auf eine explizite Typüberprüfung angewiesen waren, kann es erforderlich sein, Aktualisierungen vorzunehmen, um sich an diese Änderung anzupassen. -
Das Modul
qiskit.executewurde umbenannt inqiskit.execute_function. Dies war notwendig, um einen potentiellen Namenskonflikt zwischen derexecute()funktion zu vermeiden, die alsqiskit.executere-exportiert wird.qiskit.executedie Funktion in einigen Situationen mitqiskit.executedem Modul in Konflikt geraten könnte, was zu einem kryptischen Fehler führen würde, weil Pythonqiskit.executeals das Modul behandelt, obwohl die Absicht die Funktion war oder umgekehrt. Die Umbenennung des Moduls war notwendig, um diesen Konflikt zu vermeiden. Wenn Sieqiskit.executeimportieren, um das Modul zu erhalten (typischerweise wurdefrom qiskit.execute import executeverwendet), müssen Sie dies aktualisieren, um stattdessenqiskit.execute_functionzu verwenden.qiskit.executewird nun immer in die Funktion aufgelöst. -
Die Module
qiskit.compiler.transpile,qiskit.compiler.assemble,qiskit.compiler.scheduleundqiskit.compiler.sequencewurden umbenannt inqiskit.compiler.transpiler,qiskit.compiler.assembler,qiskit.compiler.schedulerbzw.qiskit.compiler.sequence. Dies war notwendig, um einen potentiellen Namenskonflikt zwischen den Modulen und den neu exportierten Funktionspfaden zu vermeidenqiskit.compiler.transpile(),qiskit.compiler.assemble(),qiskit.compiler.schedule(), undqiskit.compiler.sequence(). In manchen Situationen führte dieser Namenskonflikt zwischen dem Modulpfad und dem Pfad der reexportierten Funktion zu einem kryptischen Fehler, weil Python einen Import als Modul behandelte, obwohl die Funktion verwendet werden sollte oder umgekehrt. Die Umbenennung des Moduls war notwendig, um diesen Konflikt zu vermeiden. Wenn Sie zuvor die Importe verwendet haben, um die Module zu erhalten (eine typische Verwendung wäre wiefrom qiskit.compiler.transpile import transpile), müssen Sie dies aktualisieren, um die neuen Modulpfade zu verwenden.qiskit.compiler.transpile(),qiskit.compiler.assemble(),qiskit.compiler.schedule(),, undqiskit.compiler.sequence()werden nun immer zu den Funktionen aufgelöst. -
Die Klasse
qiskit.quantum_info.Quaternionwurde aus dem Submodulqiskit.quantum_info.operatorin das Submodulqiskit.quantum_info.synthesisverschoben, um ihren Zweck besser zu erfüllen. Es ist keine Änderung erforderlich, wenn Sie das Modul aus dem Stammqiskit.quantum_infomodul importiert haben, aber wenn Sie vonqiskit.quantum_info.operatorimportiert haben, müssen Sie Ihren Importpfad aktualisieren. -
Die Methode
QuantumCircuit.mcmtwurde entfernt, da sie seit der Veröffentlichung von Qiskit Terra 0.14.0 im April 2020 veraltet ist. Anstatt die Methode zu verwenden, benutzen Sie bitte dieMCMTklasse, um ein Multi-Control-Multi-Target-Gate zu konstruieren, und verwenden Sie dieqiskit.circuit.QuantumCircuit.append()oderqiskit.circuit.QuantumCircuit.compose()um es in eine Schaltung einzufügen.Sie können zum Beispiel ersetzen:
circuit.mcmt(ZGate(), [0, 1, 2], [3, 4])mit:
from qiskit.circuit.library import MCMT mcmt = MCMT(ZGate(), 3, 2) circuit.compose(mcmt, range(5)) -
Die Methode
QuantumCircuit.diag_gatewurde entfernt, da sie seit der Veröffentlichung von Qiskit Terra 0.14.0 im April 2020 veraltet ist. Verwenden Sie stattdessen diediagonal()methode vonQuantumCircuit. -
Die Methode
QuantumCircuit.ucywurde entfernt, da sie seit der Veröffentlichung von Qiskit Terra 0.14.0 im April 2020 veraltet ist. Verwenden Sie stattdessen dieucry()methode vonQuantumCircuit. -
Die zuvor veraltete
mirror()Methode fürqiskit.circuit.QuantumCircuitwurde entfernt. Sie wurde in der Version 0.15.0 veraltet. Dieqiskit.circuit.QuantumCircuit.reverse_ops()methode sollte stattdessen verwendet werden, da das Spiegeln mit dem Vertauschen der Ausgangsqubits der Schaltung verwechselt werden könnte. Bei der Methodereverse_ops()wird lediglich die Reihenfolge der angelegten Gatter umgekehrt, anstatt sie zu spiegeln. -
Die zuvor veraltete Unterstützung der Übergabe eines Floats (für
scalekwarg) als erstes Positionsargument an die Funktionqiskit.circuit.QuantumCircuit.draw()wurde entfernt. Sie wurde in der Version 0.12.0 veraltet. Das erste Positionsargument für dieqiskit.circuit.QuantumCircuit.draw()methode ist jetzt dieoutputkwarg, die keinen Float akzeptiert. Stattdessen sollten Siescaleals benanntes kwarg verwenden, anstatt es an einer bestimmten Stelle einzusetzen.Wenn Sie zum Beispiel vorher
drawmit aufgerufen haben:from qiskit import QuantumCircuit qc = QuantumCircuit(2) qc.draw(0.75, output='mpl')müsste dies nun der Fall sein:
from qiskit import QuantumCircuit qc = QuantumCircuit(2) qc.draw(output='mpl', scale=0.75)oder:
qc.draw('mpl', scale=0.75) -
Funktionen von Qiskit Pulse (
qiskit.pulse), die in der Version 0.15.0 (August 2020) veraltet waren, wurden entfernt. Die Änderungen umfassen folgende Punkte:ModulAltNeuqiskit.pulse.librarySamplePulseWaveformqiskit.pulse.libraryConstantPulseConstant(Modul umbenennen) pulse.pulse_libModulqiskit.pulse.libraryKlasseAlte MethodeNeue MethodeParametricPulseget_sample_pulseget_waveformInstructioncommandNicht zutreffend. Die Befehle und Anweisungen wurden vereinheitlicht. Verwenden Sie operands(), um Informationen über die Befehlsdaten zu erhalten.Acquireacquires,mem_slots,reg_slotsacquire(),mem_slot(),reg_slot(). (DerAcquireanweisung sendet nicht mehr über mehrere Qubits.) -
Das Wörterbuch, das zuvor auf
DAGCircuitkanten gespeichert war, wurde entfernt. Stattdessen enthalten die Kanten nun dieBitinstanz, die zuvor im Wörterbuch enthalten war, als ihr'wire'Feld. Beachten Sie, dass der vonto_networkx()zurückgegebene Graph NetworkX immer noch ein Wörterbuch für seine Kantenattribute hat, aber das Feld'name'wird nicht mehr ausgefüllt. -
Das
parametersattribut derQuantumCircuitklasse gibt nicht mehrsetzurück. Stattdessen wird einParameterView-Objekt zurückgegeben, das alle Methoden implementiert, diesetbietet (wenn auch veraltet). Dies wurde getan, um ein Modell zu unterstützen, das nach Namen sortierte Parameter beibehält. Es sollte vollständig kompatibel sein mit jeder früheren Verwendung vonset, die von demparametersattributs zurückgegeben wird, mit Ausnahme der Fälle, in denen eine explizite Typüberprüfung einer Menge durchgeführt wurde. -
Beim Betrieb
transpile()auf einerQuantumCircuitmitdelay()ausgeführt wird, werden die Einheiten in dt umgerechnet, wenn der Wert von dt (Abtastzeit) bekannt isttranspile()bekannt ist, entweder explizit über dendtkwarg oder über denBackendConfigurationfür einBackendObjekt, das über denbackendkwarg übergeben wird. -
Die Interpretation von
meas_map(das ein Attribut einesPulseBackendConfigurationobjekts oder als das entsprechendemeas_mapkwarg auf derschedule(),assemble(),sequence(), oderexecute()funktionen) wurde aktualisiert, um den tatsächlichen Beschränkungen der Hardware besser zu entsprechen. Das Format dieser Daten ist eine Liste von Listen, wobei die Elemente in der inneren Liste ganze Zahlen sind, die die Bezeichnungen der Qubits angeben. Zum Beispiel:[[A, B, C], [D, E, F, G]]Zuvor wurde die Einschränkung
meas_mapso interpretiert, dass, wenn ein Qubit erfasst wurde (z. B. A), alle anderen Qubits, die eine Untergruppe mit diesem Qubit teilen (B und C), zur gleichen Zeit und für die gleiche Dauer erfasst werden müssen. Diese Einschränkung wurde gelockert. Ein Erwerb erfordert keine weiteren Erwerbe. (Wenn A erworben wird, brauchen B und C nicht erworben zu werden) Stattdessen können Qubits in der gleichen Messgruppe nicht teilweise überlappend erfasst werden - stellen Sie sich vor, dassmeas_mapeine gemeinsame Erfassungsressource angibt (wenn wir A vont=1000bist=2000erfassen, können wir B nicht ab1000<t<2000erfassen). Zum Beispiel:# Good meas_map = [[0, 1]] # Acquire a subset of [0, 1] sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) # Acquire 0 and 1 together (same start time, same duration) sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) sched = sched.append(pulse.Acquire(10, acq_q1)) # Acquire 0 and 1 disjointly sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) sched = sched.append(pulse.Acquire(10, acq_q1)) << 10 # Acquisitions overlap, but 0 and 1 aren't in the same measurement # grouping meas_map = [[0], [1]] sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) sched = sched.append(pulse.Acquire(10, acq_q1)) << 1 # Bad: 0 and 1 are in the same grouping, but acquisitions # partially overlap meas_map = [[0, 1]] sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) sched = sched.append(pulse.Acquire(10, acq_q1)) << 1
Hinweise zu veralteten Versionen
-
Es wurden zwei neue Argumente hinzugefügt
qiskit.dagcircuit.DAGNode.semantic_eq(),bit_indices1undbit_indices2, hinzugefügt, von denen erwartet wird, dass sie dieBitinstanzen in jederDAGNodeauf ihren Index in der Listequbitsoderclbitsder jeweiligenDAGCircuit. Während des Abschaffungszeitraums sind diese Argumente optional, und wenn sie nicht angegeben werden, werden die Zuordnungen automatisch auf der Grundlage der Eigenschaftenregisterundindexder einzelnenBitinstanz. In einer zukünftigen Version werden sie jedoch erforderliche Argumente sein, und die Zuordnung muss vom Benutzer vorgenommen werden. -
Die
pulsefunktionen des Erbauers:qiskit.pulse.call_circuit()qiskit.pulse.call_schedule()
sind veraltet und werden in einer zukünftigen Version entfernt. Diese Funktionen sind in
qiskit.pulse.call()zusammengefasst und sollten stattdessen verwendet werden. -
Die Methode
qiskit.pulse.Schedulemethodeqiskit.pulse.Schedule.flatten()ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen können Sie die Funktionqiskit.pulse.transforms.flatten()funktion verwenden, die denselben Vorgang ausführt. -
Die
assign_parameters()für die folgenden Klassen:qiskit.pulse.channels.Channel,qiskit.pulse.library.Pulse,qiskit.pulse.instructions.Instruction,
und alle ihre Unterklassen sind jetzt veraltet und werden in einer zukünftigen Version entfernt werden. Diese Funktionalität wurde subsumiert
ScheduleBlockwas die zukünftige Richtung für die Konstruktion von parametrisierten Pulsprogrammen ist. -
Das Attribut
parametersfür die folgenden Klassen:ist veraltet und wird in einer zukünftigen Version entfernt werden. Diese Funktionalität wurde subsumiert
ScheduleBlockwas die zukünftige Richtung für die Konstruktion von parametrisierten Pulsprogrammen ist. -
Python 3.6 unterstützung ist veraltet und wird in einer zukünftigen Version entfernt werden. Wenn die Unterstützung eingestellt wird, müssen Sie die von Ihnen verwendete Version von Python auf Python 3.7 oder höher aktualisieren.
-
Zwei
QuantumCircuitmethodencombine()undextend()sowie die entsprechenden Operatoren Python+und+=sind veraltet und werden in einer zukünftigen Version entfernt. Stattdessen wird dieQuantumCircuitmethodecompose()verwendet werden. Diecompose()methode ermöglicht mehr Flexibilität bei der Zusammenstellung von zwei Schaltkreisen, die keine übereinstimmenden Register haben. Sie fügt jedoch im Gegensatz zu den veralteten Methoden nicht automatisch Qubits/Clbits hinzu. Um eine Schaltung auf neuen Qubits/Clbits hinzuzufügen, kann dieqiskit.circuit.QuantumCircuit.tensor()methode verwendet werden. Zum Beispiel:from qiskit.circuit import QuantumRegister, QuantumCircuit a = QuantumRegister(2, 'a') circuit_a = QuantumCircuit(a) circuit_a.cx(0, 1) b = QuantumRegister(2, 'b') circuit_b = QuantumCircuit(b) circuit_b.cz(0, 1) # same as circuit_a + circuit_b (or combine) added_with_different_regs = circuit_b.tensor(circuit_a) # same as circuit_a + circuit_a (or combine) added_with_same_regs = circuit_a.compose(circuit_a) # same as circuit_a += circuit_b (or extend) circuit_a = circuit_b.tensor(circuit_a) # same as circuit_a += circuit_a (or extend) circuit_a.compose(circuit_a, inplace=True) -
Unterstützung für die Übergabe von
Qubitinstanzen an denqubitskwarg derqiskit.transpiler.InstructionDurations.get()methode ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie die Methodeget()methode mit den ganzzahligen Indizes der gewünschten Qubits aufrufen. -
Die Verwendung von
@(__matmul__) für den Aufruf der MethodecomposevonBaseOperatorUnterklassen (z.BOperator) ist veraltet und wird in einer zukünftigen Version entfernt werden. Die Methodeqiskit.quantum_info.Operator.compose()methode kann direkt verwendet oder auch über den Operator&(__and__) aufgerufen werden. -
Die Verwendung von
*(__mul__) für den Aufruf derdot()methode vonBaseOperatorUnterklassen (z.Bqiskit.quantum_info.Operator) ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen können Sie einfach diedot()direkt aufrufen. -
Verwendung von
@(__matmul__) für den Aufruf derevolve()methode derqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen ist veraltet und wird in einer zukünftigen Version entfernt werden. Die Methodeevolvekann direkt verwendet oder auch über den Operator&(__and__) aufgerufen werden. -
Die Klasse
qiskit.pulse.schedule.ParameterizedScheduleist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen können Sie direkt ImpulsScheduleobjekte direkt mit einemParameterobjekt parametrisieren, zum Beispiel:from qiskit.circuit import Parameter from qiskit.pulse import Schedule from qiskit.pulse import ShiftPhase, DriveChannel theta = Parameter('theta') target_schedule = Schedule() target_schedule.insert(0, ShiftPhase(theta, DriveChannel(0)), inplace=True) -
Die Klasse
qiskit.pulse.ScheduleComponentim Modulqiskit.pulsemodul ist veraltet und wird in einer zukünftigen Version entfernt werden. Seine Verwendung sollte entweder durch eineqiskit.pulse.Scheduleoderqiskit.pulse.Instructiondirekt ersetzt werden. Darüber hinaus war der Hauptzweck der KlasseScheduleComponentals gemeinsame Basisklasse sowohl fürScheduleundInstructionfür jede Stelle, die explizit eine Typüberprüfung durchführt oder dokumentiert, dass eineScheduleComponent-Eingabe akzeptiert wird, sollte aktualisiert werden, umInstructionoderSchedule. -
Die JSON-Schemadateien und die Verwendung für die IBMQ-API-Payloads sind veraltet und werden in einer zukünftigen Version entfernt. Dies umfasst alles unter dem Modul
qiskit.schemasund dem Modulqiskit.validation. Dazu gehören auch dievalidatekwargs fürqiskit.qobj.QasmQobj.to_dict()undqiskit.qobj.QasmQobj.to_dict()zusammen mit den Fastjsonschema-Validatoren auf Modulebene inqiskit.qobj(die keine Verwerfungswarnung auslösen). Die Schemadateien wurden in das Repository Qiskit/ibmq-schemas verschoben und sollten als die kanonischen Versionen der API-Schemas behandelt werden. In Zukunft werden nur noch diese Schemata aktualisiert und als Quelle der Wahrheit für die Schemata verwendet. Wenn Sie sich auf die in qiskit-terra gebündelten Schemata verlassen haben, sollten Sie ein Update durchführen und stattdessen dieses Repository verwenden. -
Das Modul
qiskit.utilist veraltet und wird in einer zukünftigen Version entfernt werden. Sie wurde ersetzt durchqiskit.utilsersetzt, das die gleiche Funktionalität bietet und in Zukunft noch erweitert werden soll. Beachten Sie, dass keineDeprecationWarningbezüglich dieser Verwerfung ausgegeben wird, da dies auf Python 3.6 nicht möglich war. -
Der
CXDirectionTranspiler-Pass imqiskit.transpiler.passesmodul ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollte dieGateDirectionverwendet werden. Es verhält sich identisch zuCXDirection, mit der Ausnahme, dass es nun auch die Transformation einer Schaltung mitECRGategattern zusätzlich zuCXGategattern. -
Der
CheckCXDirectionTranspiler-Pass imqiskit.transpiler.passesmodul ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollte derCheckGateDirectionPass verwendet werden. Es verhält sich identisch zuCheckCXDirection, mit der Ausnahme, dass es jetzt auch die Überprüfung der Richtung aller 2-Qubit-Gatter unterstützt, nicht nur derCXGategatter. -
Die Methode
WeightedAddermethodenum_ancilla_qubits()ist veraltet und wird in einer zukünftigen Version entfernt werden. Es wurde ersetzt durch dasqiskit.circuit.library.WeightedAdder.num_ancillasattribut ersetzt, das mit den APIs anderer Schaltkreisbibliotheken konsistent ist. -
Die folgenden Legacy-Methoden der Klasse
qiskit.quantum_info.Pauliklasse wurden veraltet. Siehe die Methodendokumentation zur Ersatzverwendung in der aktualisierten Pauli-Klasse.from_label()sgn_prod()to_spmatrix()kron()update_z()update_x()insert_paulis()append_paulis()delete_qubits()pauli_single()random()
-
Die Verwendung eines
listodernumpy.ndarrayalschannelodertargetArgument für dieqiskit.quantum_info.process_fidelity(),qiskit.quantum_info.average_gate_fidelity(),qiskit.quantum_info.gate_error(), undqiskit.quantum_info.diamond_norm()funktionen ist veraltet und wird in zukünftigen Versionen nicht mehr unterstützt. Die Eingaben sollten stattdessen einGateoder ein Objekt der UnterklasseBaseOperator(z. B.Operator,Choi, etc.) -
Zugriff auf Referenzen von
QubitundClbitinstanzen auf die sie enthaltenden Register über dieregisteroderindexeigenschaften wurde veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen,Registerkönnen Objekte abgefragt werden, um dieBitobjekte zu finden, die sie enthalten. -
Die derzeitige Funktionalität der
qiskit.visualization.pulse_drawer()funktion ist veraltet und wird in einer zukünftigen Version durchqiskit.visualization.pulse_drawer_v2()(die nicht abwärtskompatibel ist) ersetzt werden. -
Die Verwendung von Methoden, die vom Typ
setgeerbt wurden, bei der Ausgabe desparametersattributs (das früher einsetwar) derQuantumCircuitklasse sind veraltet und werden in einer zukünftigen Version entfernt werden. Dazu gehören die Methoden vonadd(),difference(),difference_update(),discard(),intersection(),intersection_update(),issubset(),issuperset(),symmetric_difference(),symmetric_difference_update(),union(),update(),__isub__()(das ist der Operator-=) und__ixor__()(das ist der Operator^=). -
Der Name des ersten (und einzigen) Positionsarguments für die
qiskit.circuit.QuantumCircuit.bind_parameters()methode hat sich vonvalue_dictinvaluesgeändert. Die Übergabe eines Arguments mit dem Namenvalues_dictist veraltet und wird in zukünftigen Versionen entfernt werden. Wenn Sie zum Beispiel vorherbind_parameters()mit einem Aufruf wie:bind_parameters(values_dict={})aufgerufen haben, ist dies veraltet und sollte durchbind_parameters(values={})ersetzt werden, oder noch besser, Sie übergeben das Argument einfach an der Positionbind_parameters({}). -
Der Name des ersten (und einzigen) Positionsarguments für die
qiskit.circuit.QuantumCircuit.assign_parameters()methode hat sich vonparam_dictinparametersgeändert. Die Übergabe eines Arguments mit dem Namenparam_dictist veraltet und wird in zukünftigen Versionen entfernt werden. Wenn Sie zum Beispiel vorherassign_parameters()mit einem Aufruf wie:assign_parameters(param_dict={})aufgerufen haben, ist dies veraltet und sollte durchassign_parameters(values={})ersetzt werden, oder noch besser, Sie übergeben das Argument einfach an der Positionassign_parameters({}).
Fehlerkorrekturen
-
Ein Problem wurde behoben, bei dem die
execute()funktion eineQiskitErrorauslöste, wenn einParameterVectorobjekt für denparameter_bindkwarg übergeben wurde. Parameter an. Zum Beispiel ist es jetzt möglich, etwas aufzurufen wie:execute(circuit, backend, parameter_binds=[{pv1: [...], pv2: [...]}])wobei
pv1undpv2ParameterVectorobjekte sind. Behoben #5467 -
Es wurde ein Problem behoben, bei dem die Beschriftungen von parametrischen Impulsen in der
PulseQobjInstructionklasse nicht richtig gesetzt wurden, wie es bei abgetasteten Impulsen der Fall ist. Das bedeutet auch, dass Impulsnamen, die aus demPulseDefaultsdie von einemBackendzurückgegeben werden, wie z. B.x90,x90m, usw., richtig gesetzt werden. Behoben #5363 -
Ein Problem wurde behoben, bei dem ungebundene Parameter nur im
global_phaseattribut einesQuantumCircuitobjekts vorkommen, nicht imparametersattribut angezeigt und konnten nicht gebunden werden. Behoben #5806 -
Das
calibrationsattribut vonQuantumCircuitobjekten bleiben nun erhalten, wenn+=(d.h. die Methodeextend()) und+(d.h. die Methodecombine()) verwendet werden. Behoben #5930 und #5908 -
Die
namesetter-Methode der KlasseRegister(die die übergeordnete Klasse vonQuantumRegisterundClassicalRegister) prüfte bisher nicht, ob die zugewiesene Zeichenkette ein gültiger Registername gemäß der Spezifikation von OpenQASM ist. Diese Prüfung wurde bisher nur durchgeführt, wenn der Name im Konstruktor angegeben wurde. Dies wurde nun korrigiert, so dass das direkte Setzen des Attributsnamemit einem ungültigen Wert nun ebenfalls eine Ausnahme auslöst. Behoben #5461 -
Es wurde ein Problem mit der
qiskit.visualization.circuit_drawer()funktion undqiskit.circuit.QuantumCircuit.draw()methode bei der Visualisierung einerQuantumCircuitmit einerGatedie eine klassische Bedingung nach einerMeasurehat, die die gleicheClassicalRegisterverwendet, war es möglich, dass die BedingungGateauf der linken Seite desMeasureangezeigt werden. Behoben #5387 -
Im Transpiler-Durchgang
qiskit.transpiler.passes.CSPLayoutkonnte eine Tendenz zu den niederwertigen Qubits beobachtet werden. Diese unerwünschte Verzerrung wurde beseitigt, indem die Kandidaten gemischt wurden, um die Ergebnisse zu randomisieren. Außerdem ist die Verwendung desCSPLayoutpasses in derpreset_passmanagers(für Level 2 und 3) angepasst worden, um einen konfigurierten Seed zu verwenden, wenn derseed_transpilerkwarg beimtranspile()aufgerufen wird. Behoben #5990 -
Behebt einen Fehler, bei dem das Feld
channelsfür einPulseBackendConfigurationobjekt nicht in die Ausgabe derqiskit.providers.models.PulseBackendConfiguration.to_dictmethode enthalten war. Behoben #5579 -
Behebung der
'circular'Verschränkung in derqiskit.circuit.library.NLocalschaltkreisklasse für den Grenzfall, dass der Schaltkreis die gleiche Größe wie der Verschränkungsblock hat (z. B. ein Zwei-Qubit-Schaltkreis und CZ-Verschränkungsgatter). In diesem Fall sollte es nur ein Verschränkungsgatter geben, aber es wurde versehentlich ein zweites in der umgekehrten Richtung wie das erste hinzugefügt. Festgelegt qiskit-community/qiskit-aqua#1452 -
Die Behandlung von Haltepunkten in der
PiecewisePolynomialPauliRotationsklasse in derqiskit.circuit.library. Für die Intervallensind jetztn+1Haltepunkte erlaubt. Dies ermöglicht die Angabe eines anderen Endintervalls als . Dies ist wichtig, weil die Funktion vom Ende des letzten Intervalls bis die Identität ist. -
Es wurde ein Problem in der
qiskit.circuit.library.Permutationschaltkreisklasse, bei dem einige Permutationen nicht korrekt erzeugt wurden. Dieses Problem könnte auch auftretenqiskit.circuit.library.QuantumVolumewenn es mit classical_permutation=False` aufgerufen wurde. Behoben #5812 -
Ein Problem wurde behoben, bei dem die QASM-Ausgabe mit der
qasm()methode für einQuantumCircuitobjekt, das eineControlledGatemit einem offenen Steuerelement die Ausgabe so erfolgte, als ob alle Steuerelemente geschlossen wären, unabhängig von dem angegebenen Zustand des Steuerelements. Dies würde dazu führen, dass ein anderer Schaltkreis ausfrom_qasm_str()beim Parsen des erzeugten QASM.Dies wurde behoben, indem der QASM-Ausgang von
qasm()behoben, indem ein zusammengesetztes Gatter definiert wurde, dasXGatezur Implementierung der Öffnungssteuerung verwendet. Der Name des zusammengesetzten Gatters lautet<original_gate_name>_o<ctrl_state>, wobeiofür die offene Steuerung undctrl_statefür den ganzzahligen Wert des Steuerungszustands steht. Behoben #5443 -
Ein Problem wurde behoben, bei dem die Bindung von
Parameterobjekte in einerQuantumCircuitmit derparameter_bindsin derexecutefunktion dazu führen würde, dass alle gebundenenQuantumCircuitobjekte denselbennamehaben, was bedeutete, dass auch die Ergebnisnamen nicht eindeutig waren. Diese Korrektur bewirkt, dass diebind_parameters()undassign_parameters()einen eindeutigen Schaltkreisnamen zuweisen, wenninplace=Falseals:<base name>-<class instance no.>[-<pid name>]wobei
<base name>der Name ist, der mit dem Kwarg "name" angegeben wird, andernfalls wird "circuit" verwendet. Die Klasseninstanznummer wird jedes Mal erhöht, wenn eine Instanz der Klasse erzeugt wird.<pid name>wird angehängt, wenn es außerhalb des Hauptprozesses aufgerufen wird. Behoben #5185 -
Es wurde ein Problem mit der Funktion
scheduler()behoben, bei dem eine Ausnahme ausgelöst wurde, wenn ein Eingangskreis ein ungebundenes Objekt enthieltQuantumCircuitobjekt enthielt. Behoben #5304 -
Es wurde ein Problem in den
qiskit.transpiler.passes.TemplateOptimizationtranspiler-Durchläufen behoben, bei denen Template-Schaltungen, die ungebundeneParameterobjekte enthielten, in einigen Szenarien abstürzten, wenn die Parameter während der Anpassung der Vorlage nicht gebunden werden konnten. Nun, wenn dieParameterobjekte nicht gebunden werden können, werden Templates mit ungebundenenParameterwerden verworfen und von derTemplateOptimizationpassieren. Behoben #5533 -
Es wurde ein Problem mit der
qiskit.visualization.timeline_drawer()funktion, bei der klassische Bits nicht korrekt behandelt wurden. Behoben #5361 -
Ein Problem in der
qiskit.visualization.circuit_drawer()funktion und derqiskit.circuit.QuantumCircuit.draw()methode, bei denenDelayanweisungen in einemQuantumCircuitobjekt nicht korrekt als Leerlaufzeit behandelt wurden. Wenn also dieidle_wireskwarg aufFalsegesetzt wurde, wurden die Drähte mit denDelayobjekte immer noch angezeigt werden. Dies wurde behoben, so dass die Leerlaufdrähte aus der Visualisierung entfernt werden, wenn sich nurDelayobjekte auf einem Draht sind. -
Wenn zuvor die Option
layout_methodkwarg an die Funktiontranspile()funktion übergeben wurde und dieoptimization_levelkwarg auf >= 2 gesetzt wurde, damit der Durchlaufqiskit.transpiler.passes.CSPLayoutausgeführt werden sollte, wennCSPLayouteine Lösung fand, wurde die Methode inlayout_methodnicht ausgeführt. Dies wurde korrigiert, so dass die Angabelayout_methodimmer beachtet wird. Behoben #5409 -
Wenn das Argument
coupling_map=None(entweder explizit gesetzt, implizit als Standardwert gesetzt oder über dasbackendkwarg), wurde der Schaltkreis beim Transpilieren nicht "eingebettet". Das heißt, selbst wenn eineinitial_layoutangegeben war, wurden die virtuellen Qubits nicht den physischen Qubits zugeordnet. Dies wurde korrigiert, so dass dieqiskit.compiler.transpile()funktion das Argumentinitial_layoutbeachtet, indem sie den Schaltkreis einbettet:from qiskit import QuantumCircuit, QuantumRegister from qiskit.compiler import transpile qr = QuantumRegister(2, name='qr') circ = QuantumCircuit(qr) circ.h(qr[0]) circ.cx(qr[0], qr[1]) transpile(circ, initial_layout=[1, 0]).draw(output='mpl')Wenn sich die
initial_layoutauf mehr Qubits bezieht als in der Schaltung vorhanden sind, wird die Schaltung durch den Transpilierungsprozess um Ancillas erweitert.from qiskit import QuantumCircuit, QuantumRegister from qiskit.compiler import transpile qr = QuantumRegister(2, name='qr') circ = QuantumCircuit(qr) circ.h(qr[0]) circ.cx(qr[0], qr[1]) transpile(circ, initial_layout=[4, 2], coupling_map=None).draw()Behoben #5345
-
Ein neuer kwarg,
user_cost_dict, wurde dem Konstruktor für denqiskit.transpiler.passes.TemplateOptimizationtranspiler-Pass hinzugefügt. Dies ermöglicht es den Nutzern, ein benutzerdefiniertes Kostenverzeichnis für die Gates des zugrundeliegenden Template-Matching-Algorithmus zu erstellen. Zum Beispiel:from qiskit.transpiler.passes import TemplateOptimization cost_dict = {'id': 0, 'x': 1, 'y': 1, 'z': 1, 'h': 1, 't': 1} pass = TemplateOptimization(user_cost_dict=cost_dict) -
Ein Problem bei der Übergabe des
Countsobjekt, das vonget_counts()anmarginal_counts()zurückgegebene Objekt ein nicht korrekt formatiertesCountsobjekt mit bestimmten Eingaben erzeugte, wurde behoben. Korrekturen #5424 -
Verbesserte Zuweisung von Hilfsqubits in
PolynomialPauliRotationsundPiecewiseLinearPauliRotationswas die Implementierung dieser Schaltungen effizienter macht. #5320 und #5322 behoben -
Fixierung der Verwendung der zugewiesenen Hilfsqubits in der
MCXGatein derWeightedAdderklasse. Diese wurden zuvor zugewiesen, aber nicht verwendet. Behoben #5321 -
In einer Reihe von Fällen ist die
latexAusgabemethode für dieqiskit.visualization.circuit_drawer()funktion und diedraw()methode den Gatternamen nicht korrekt an, und in anderen Fällen wurden die Gatterparameter nicht an der richtigen Stelle angezeigt. Jetzt werden die Gatternamen auf die gleiche Weise angezeigt wie bei der Ausgabemethodempl, und die Parameter werden für alle Gatter angezeigt, die sie haben. Außerdem wurden einige der Tore nicht in der richtigen Form angezeigt, was nun behoben wurde. Behebungen #5605, #4938 und #3765 -
Ein Problem wurde behoben, das auftrat, wenn die Methode
qiskit.circuit.Instruction.to_instruction()auf einen Subcircuit angewendet wurde, der klassische Register enthielt und diesesInstructionobjekt wurde dann zu einemQuantumCircuitobjekt hinzugefügt wurde, dann wurde die Ausgabe derqiskit.visualization.circuit_drawer()funktion und derqiskit.circuit.QuantumCircuit.draw()methode in einigen Fällen die Teilschaltung links von einem Takt anzeigte, obwohl sie rechts hätte angezeigt werden müssen. Behoben #5947 -
Ein Problem wurde behoben mit
Delayobjekten in einerQuantumCircuitwoqiskit.compiler.transpile()nicht die Einheiten derDelayin die Einheiten desBackendumgewandelt, wenn diebackendkwarg auftranspile()eingestellt ist. Dies könnte zu einem falschen Verhalten führen, da die Einheiten nicht übereinstimmen, z. B. beim Laufen:from qiskit import transpile, execute from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(1) qc.delay(100, [0], unit='us') qc = transpile(qc, backend) job = execute(qc, backend)hätte früher dazu geführt, dass das Backend 100 Zeitschritte (jeweils mit der Dauer dt) statt der erwarteten ( 100e-6 / dt) Zeitschritte verzögert hätte. Dies wurde korrigiert, so dass die
qiskit.compiler.transpile()funktion die Einheiten korrekt umrechnet.
Sonstige Anmerkungen
- Die Snapshots aller Fake-/Mock-Backends in
qiskit.test.mockwurden aktualisiert, um die jüngsten Geräteänderungen zu berücksichtigen. Dies beinhaltet eine Änderung desbasis_gatesattributs für dieBackendConfigurationin['cx', 'rz', 'sx', 'x', 'id'], die Hinzufügung einerreadout_lengthEigenschaft zu den Qubit-Eigenschaften in derBackendPropertiesund die Aktualisierung derPulseDefaultsso dass alle Mock-Backends parametrische puls-basierteInstructionScheduleMapinstanzen.
Aer- 0.8.0
Vorspiel
Die Version 0.8 enthält mehrere neue Funktionen und Fehlerkorrekturen. Die Highlights dieser Version sind: die Einführung eines einheitlichen AerSimulator Backends für die Ausführung von Schaltungssimulationen mit jeder der unterstützten Simulationsmethoden; eine Simulatorbefehlsbibliothek (qiskit.providers.aer.library), die benutzerdefinierte Befehle zum Speichern verschiedener Arten von Simulatordaten enthält; MPI-Unterstützung für die Ausführung großer Simulationen in einer verteilten Computerumgebung.
Neue Funktionen
-
Python 3.9 unterstützung wurde in dieser Version hinzugefügt. Sie können Qiskit Aer jetzt mit Python 3.9 ausführen, ohne es aus dem Quellcode zu erstellen.
-
Fügen Sie das CMake-Flag
DISABLE_CONAN(default=``OFF``) hinzu. Bei der Installation aus dem Quellcode ermöglicht die EinstellungONdie Umgehung des Conan-Paketmanagers, um Bibliotheken zu finden, die bereits auf Ihrem System installiert sind. Dies ist auch als UmgebungsvariableDISABLE_CONANverfügbar, die Vorrang vor dem CMake-Flag hat. Dies ist nicht das offizielle Verfahren zur Erstellung der VRE. Daher ist der Benutzer dafür verantwortlich, alle benötigten Bibliotheken und die dazugehörigen Dateien bereitzustellen, damit sie von CMake gefunden werden können. -
Diese Version enthält Unterstützung für die Erstellung von qiskit-aer mit MPI-Unterstützung, um große Simulationen auf einer verteilten Rechnerumgebung durchzuführen. Anweisungen zur Erstellung und Ausführung in einer MPI-Umgebung finden Sie in der Anleitung für Mitwirkende.
-
Es ist nun möglich, qiskit-aer mit aktiviertem CUDA unter Windows zu erstellen. Siehe den Leitfaden für Mitwirkende für Anweisungen zur Erstellung aus dem Quellcode mit GPU-Unterstützung.
-
Wenn Sie die Erweiterung qiskit-aer Python aus dem Quellcode erstellen, müssen mehrere Abhängigkeiten vorinstalliert werden, um die C++-Kompilierung zu ermöglichen. Als Annehmlichkeit für den Benutzer wurden bei der Erstellung der Erweiterung fehlende Build-Abhängigkeiten automatisch mit
pipvor den normalensetuptools-Installationsschritten installiert, allerdings war es bisher nicht möglich, diese automatische Installation zu vermeiden. Um dieses Problem zu lösen, wurde eine neue UmgebungsvariableDISABLE_DEPENDENCY_INSTALLhinzugefügt. Wenn es auf1oderONgesetzt ist, wenn die Python-Erweiterung aus dem Quellcode gebaut wird, wird die automatische Installation dieser fehlenden Build-Abhängigkeiten deaktiviert. -
Fügt Unterstützung für optimierte N-Qubit-Pauli-Gatter (
qiskit.circuit.library.PauliGate) zuStatevectorSimulator,UnitarySimulatorund den Zustandsvektor- und Dichtematrixmethoden vonQasmSimulatorundAerSimulator. -
Die Methode
run()für die BackendsAerSimulator,QasmSimulator,StatevectorSimulatorundUnitarySimulatornimmt nun eineQuantumCircuit(oder eine Liste vonQuantumCircuitobjekte) als Eingabe. Das vorherigeQasmQobjobjekt wird im Moment noch unterstützt, wird aber in einer zukünftigen Version veraltet sein.Ein Beispiel für die Anwendung dieses Verfahrens finden Sie unter:
from qiskit import transpile, QuantumCircuit from qiskit.providers.aer import Aer backend = Aer.get_backend('aer_simulator') circuit = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() tqc = transpile(circuit, backend) result = backend.run(tqc, shots=4096).result() -
Die
run()Methode für dasPulseSimulatorBackend nimmt nun eineSchedule(oder eine Liste vonScheduleobjekten) als Eingabe. Das vorherigePulseQobjobjekt wird im Moment noch unterstützt, wird aber in einer zukünftigen Version veraltet sein. -
Fügt das neue
AerSimulatorSimulator-Backend hinzu, das die folgenden Simulationsmethoden unterstütztautomaticstatevectorstabilizerdensity_matrixmatrix_product_stateunitarysuperop
Die automatische Standardmethode wählt automatisch eine Simulationsmethode für jeden ausgeführten Schaltkreis auf der Grundlage der Schaltungsanweisungen und des Rauschmodells (falls vorhanden). Die Initialisierung eines Simulators mit einer bestimmten Methode kann mit der Option method erfolgen.
Die GPU-Simulation für die Zustandsvektor-, Dichtematrix- und unitären Methoden kann durch Setzen der Option
device='GPU'backend aktiviert werden.Beachten Sie, dass die Methoden
unitaryundsuperopkeine Messungen unterstützen, da sie die unitäre Matrix oder die Superoperatormatrix der Laufschaltung simulieren. Daher muss eine der neuen Anweisungensave_unitary(),save_superop()odersave_state()verwendet werden, um den Simulatorstatus in den zurückgegebenen Ergebnissen zu speichern. Auch der Zustand der anderen Simulationsmethoden kann mit den entsprechenden Anweisungen gespeichert werden. Weitere Einzelheiten finden Sie in denqiskit.providers.aer.libraryAPI-Dokumenten.Beachten Sie, dass der
AerSimulatorSimulator die BackendsQasmSimulator,StatevectorSimulatorundUnitarySimulatorersetzt, die in einer zukünftigen Version veraltet sein werden. -
Aktualisiert die Klasse
AerProviderum mehrereAerSimulatorBackends, die für alle verfügbaren Simulationsmethoden und Simulationsgeräte vorkonfiguriert sind. Auf die neuen Backends kann über die Anbieterschnittstelle mit den Namen"aer_simulator""aer_simulator_statevector""aer_simulator_stabilizer""aer_simulator_density_matrix""aer_simulator_matrix_product_state""aer_simulator_extended_stabilizer""aer_simulator_unitary""aer_simulator_superop"
Wenn Aer mit GPU-Unterstützung auf einem kompatiblen System installiert wurde, sind zusätzlich die folgenden GPU-Backends verfügbar
"aer_simulator_statevector_gpu""aer_simulator_density_matrix_gpu""aer_simulator_unitary_gpu"
Zum Beispiel:
from qiskit import Aer # Get the GPU statevector simulator backend backend = Aer.get_backend('aer_simulator_statevector_gpu') -
Es wurde eine neue
norm estimationMethode zur Durchführung von Messungen bei Verwendung der"extended_stabilizer"Simulationsmethode hinzugefügt. Diese Normschätzungsmethode kann verwendet werden, indem die folgenden Optionen an die BackendsAerSimulatorundQasmSimulatorübergeben werdensimulator = QasmSimulator( method='extended_stabilizer', extended_stabilizer_sampling_method='norm_estimation')Die Methode der Normschätzung ist langsamer als die alternativen Optionen
metropolisoderresampled_metropolis, bietet aber eine bessere Leistung bei Schaltungen mit spärlichen Ausgangsverteilungen. Weitere Informationen finden Sie in der Dokumentation vonQasmSimulator. -
Fügt Anweisungen zum Speichern des Simulatorstatus in verschiedenen Formaten hinzu. Diese Anweisungen sind
qiskit.providers.aer.library.SaveDensityMatrixqiskit.providers.aer.library.SaveMatrixProductStateqiskit.providers.aer.library.SaveStabilizerqiskit.providers.aer.library.SaveStateqiskit.providers.aer.library.SaveStatevectorqiskit.providers.aer.library.SaveStatevectorDictqiskit.providers.aer.library.SaveUnitary
Diese Anweisungen können einem Quantenschaltkreis mit Hilfe der Schaltkreismethoden
save_density_matrix,save_matrix_product_state,save_stabilizer,save_state,save_statevector,save_statevector_dict,save_unitaryhinzugefügt werden, die beim Import von Aer zuQuantumCircuithinzugefügt werden.Einzelheiten zur Methodenkompatibilität der einzelnen Befehle finden Sie in der API-Dokumentation
qiskit.providers.aer.library.Beachten Sie, dass die Snapshot-Anweisungen
SnapshotStatevector,SnapshotDensityMatrix,SnapshotStabilizernoch unterstützt werden, aber in einer zukünftigen Version veraltet sein werden. -
Fügt die Quantenschaltungsanweisungen
qiskit.providers.aer.library.SaveExpectationValueundqiskit.providers.aer.library.SaveExpectationValueVariancehinzu, um den Erwartungswert oder den Erwartungswert und die Varianz eines Hermitschen Operators für den Simulatorzustand zu speichern. Diese Anweisungen können einem Quantenschaltkreis mit Hilfe der Schaltkreismethodensave_expectation_valueundsave_expectation_value_variancehinzugefügt werden, die beim Importieren von Aer zuQuantumCircuithinzugefügt werden.Beachten Sie, dass die Snapshot-Anweisung
SnapshotExpectationValuenoch unterstützt wird, aber in einer zukünftigen Version veraltet sein wird. -
Fügt
qiskit.providers.aer.library.SaveProbabilitiesundqiskit.providers.aer.library.SaveProbabilitiesDictQuantenschaltungsanweisung zum Speichern aller Messergebniswahrscheinlichkeiten für Z-Basis-Messungen des Simualtor-Zustands hinzu. Diese Anweisungen können einem Quantenschaltkreis mit Hilfe der Schaltkreismethodensave_probabilitiesundsave_probabilities_dicthinzugefügt werden, die beim Importieren von Aer zuQuantumCircuithinzugefügt wird.Beachten Sie, dass die Snapshot-Anweisung
SnapshotProbabilitiesnoch unterstützt wird, aber in einer zukünftigen Version veraltet sein wird. -
Fügt
qiskit.providers.aer.library.SaveAmplitudesundqiskit.providers.aer.library.SaveAmplitudesSquaredSchaltungsanweisungen zum Speichern ausgewählter komplexer Zustandsvektoramplituden oder ausgewählter Wahrscheinlichkeiten (Amplituden im Quadrat) für unterstützte Simulationsmethoden hinzu. Diese Anweisungen können einem Quantenschaltkreis mit Hilfe der Schaltkreismethodensave_amplitudesundsave_amplitudes_squaredhinzugefügt werden, die beim Importieren von Aer zuQuantumCircuithinzugefügt wird. -
Fügt Anweisungen zum Einstellen des Status der Simulatoren hinzu. Diese Anweisungen müssen für die gesamte Anzahl der Qubits in der Schaltung definiert werden. Sie können an jedem beliebigen Punkt einer Schaltung angewendet werden und überschreiben den Simulatorzustand mit dem angegebenen Zustand. Die zusätzlichen Anweisungen lauten
qiskit.providers.aer.library.SetDensityMatrixqiskit.providers.aer.library.SetStabilizerqiskit.providers.aer.library.SetStatevectorqiskit.providers.aer.library.SetUnitary
Diese Anweisungen können einem Quantenschaltkreis mit Hilfe der Schaltkreismethoden
set_density_matrix,set_stabilizer,set_statevector,set_unitaryhinzugefügt werden, die beim Import von Aer zuQuantumCircuithinzugefügt werden.Einzelheiten zur Methodenkompatibilität der einzelnen Befehle finden Sie in der API-Dokumentation
qiskit.providers.aer.library. -
Unterstützung für diagonale Gatter in der
"matrix_product_state"Simulationsmethode hinzugefügt. -
Die Simulationsmethode
"matrix_product_state"unterstützt nun die Anweisunginitialize.
Bekannte Probleme
- Es gibt ein bekanntes Problem, bei dem die Simulation bestimmter Schaltungen mit einem Kraus-Rauschmodell unter Verwendung der Simulationsmethode
"matrix_product_state"zu einem Absturz des Simulators führen kann. Für weitere Informationen siehe #306.
Anmerkungen zu Upgrades
-
Die Mindestversion von Conan wurde auf 1.31.2 erhöht. Dies war notwendig, um ein Kompatibilitätsproblem mit neueren Versionen des Programms urllib3 (die eine Abhängigkeit von Conan ist) zu beheben. Außerdem wird die native Unterstützung für AppleClang 12 hinzugefügt, was für Benutzer mit neuen Apple-Computern nützlich ist.
-
pybind11die erforderliche Mindestversion ist 2.6 anstelle von 2.4. Dies ist erforderlich, um die CUDA-fähige Kompilierung unter Windows zu unterstützen. -
Cython wurde als Build-Abhängigkeit entfernt.
-
Die x90 Gatterzerlegung von Rauschmodellen, die in qiskit-aer 0.7 veraltet war, wurde entfernt. Diese Zerlegung erfolgt nun unter Verwendung regulärer Rauschmodell-Basisgatter und des qiskit-Transpilers.
-
Die folgenden Optionen für die Simulationsmethode
"extended_stabilizer"haben sich geändert.extended_stabilizer_measure_sampling: Diese Option wurde durch die Optionextended_stabilizer_sampling_methodersetzt, die steuert, wie wir die Qubit-Messung simulieren.extended_stabilizer_mixing_time: Diese Option wurde inextended_stabilizer_metropolis_mixing_timeumbenannt, um klarzustellen, dass sie nur für die Probenahmeverfahrenmetropolisundresampled_metropolisgilt.extended_stabilizer_norm_estimation_samples: Diese Option wurde umbenannt inextended_stabilizer_norm_estimation_default_samples.
Eine zusätzliche Option,
extended_stabilizer_norm_estimation_repetitions, wurde hinzugefügt, die einen Teil des Verhaltens der Stichprobenmethode der Normschätzung steuert.
Hinweise zu veralteten Versionen
- Python 3.6 unterstützung ist veraltet und wird in einer zukünftigen Version entfernt werden. Wenn die Unterstützung eingestellt wird, müssen Sie die von Ihnen verwendete Version von Python auf Python 3.7 oder höher aktualisieren.
Fehlerkorrekturen
- Behebt einen Fehler mit
AerProvider, bei dem Optionen, die für die zurückgegebenen Backends mitset_options()gesetzt wurden, im Anbieter gespeichert wurden und bei nachfolgenden Aufrufen vonget_backend()für das gleiche benannte Backend bestehen blieben. Jetzt gibt jeder Aufruf von undbackends()eine neue Instanz des Simulator-Backends zurück, die konfiguriert werden kann. - Behebt einen Fehler in der Fehlermeldung, die ausgegeben wird, wenn eine Schaltung nicht unterstützte Simulatoranweisungen enthält. Zuvor wurden einige unterstützte Anweisungen in der Fehlermeldung zusammen mit den nicht unterstützten Anweisungen aufgeführt.
- Behebt ein Problem mit der Einstellung von
QasmSimulatorBasis-Gates, wenn die Optionen"method"und"noise_model"zusammen verwendet werden, und wenn sie mit einem Simulator verwendet werden, der mitfrom_backend()erstellt wurde. Die aufgelisteten Basisgatter sind die Schnittmenge der Gatter, die von der Backend-Konfiguration, der Simulationsmethode und den Basisgattern des Rauschmodells unterstützt werden. Wenn die Schnittmenge der Basistore des Geräuschmodells und der Basistore des Simulators leer ist, wird eine Warnung ausgegeben. - Behebung eines Fehlers, bei dem das Tor
"sx"`SXGatenicht als unterstütztes Gatter im C++-Code aufgeführt war, inStateOpSetvonmatrix_product_state.hp. - Behebung eines Fehlers, bei dem
"csx","cu2","cu3"fälschlicherweise als unterstützte Basistore für die Methode"density_matrix"desQasmSimulatoraufgeführt wurden. - Behebung eines Fehlers, bei dem Parameter zwischen Funktionen in
matrix_product_state_internal.cppfalsch übergeben wurden, was zu einer falschen Simulation führte, sowie zum Erreichen ungültiger Zustände, was wiederum eine Endlosschleife verursachte. - Behebt einen Fehler, der dazu führte, dass
c_ifnicht funktionierte, wenn die Breite des bedingten Registers größer als 64 war. Siehe #1077. - Behebt einen Fehler (#1153 ), bei dem Rauschen auf bedingte Gatter immer angewendet wurde, unabhängig davon, ob das bedingte Gatter tatsächlich auf der Grundlage des klassischen Registerwertes angewendet wurde. Jetzt wird das Rauschen eines bedingten Gatters nur in dem Fall angewendet, in dem das bedingte Gatter angewendet wird.
- Behebt einen Fehler mit verschachtelten OpenMP Flagge wurde auf true gesetzt, wenn es nicht sein sollte.
- Behebt einen Fehler bei der Anwendung der Trunkierung in der Matrixprodukt-Zustandsmethode der QasmSimulator.
- Problem #1126 behoben: Fehler bei der Meldung der Messung eines einzelnen Qubits. Der Fehler trat beim Kopieren des Messwertes in die Ausgabedatenstruktur auf.
- In MPS arbeitete apply_kraus direkt mit den Eingabebits in den Parameter-Qubits, anstatt mit den internen Qubits. Beim MPS-Algorithmus sind die Qubits ständig in Bewegung, so dass alle Operationen auf die internen Qubits angewendet werden sollten.
- Beim Aufruf von MPS::sample_measure müssen wir zunächst die Qubits in der Standardreihenfolge sortieren, da dies in qasm_controller.This durch den Aufruf der Methode move_all_qubits_to_sorted_ordering erfolgt. Sie war korrekt in sample_measure_using_apply_measure, fehlte aber in sample_measure_using_probabilities.
- Behebt einen Fehler in der
from_backend()-Methode vonQasmSimulator, der daslocal-Attribut der Konfiguration auf den Backend-Wert setzt und nicht immer aufTrue. - Behebt einen Fehler in
from_backend()undfrom_backend(), bei dembasis_gatesfür IBMQ-Geräte mit dem Basis-Gate['id', 'rz', 'sx', 'x', 'cx']falsch gesetzt war. Das Rauschmodell hat nun immer dieselben Basisgatter wie die Backend-Basisgatter, unabhängig davon, ob diese Anweisungen Fehler im Rauschmodell aufweisen oder nicht. - Behebt ein Problem, bei dem die erweiterte "extended_stabilizer"-Simulationsmethode bei Quantenschaltungen mit spärlichen Ausgangsverteilungen zu falschen Ergebnissen führte. Weitere Informationen und Beispiele finden Sie unter #306.
Ignis- 0.6.0
Neue Funktionen
- Die Funktion
qiskit.ignis.mitigation.expval_meas_mitigator_circuits()wurde verbessert, so dass die Anzahl der von der Funktion erzeugten Schaltkreise, die für die Kalibrierung durch die CTMP-Methode verwendet werden, von auf reduziert wurde (wobei die Anzahl der Qubits ist).
Anmerkungen zu Upgrades
- Die Funktion
qiskit.ignis.verification.randomized_benchmarking_seq()verwendet jetzt die erweiterte CNOTDihedral-Klasseqiskit.ignis.verification.CNOTDihedral, die es ermöglicht, CNOT-Dihedral Randomized Benchmarking auf mehr als zwei Qubits durchzuführen. - Das Python-Paket
retworkxist nun eine Voraussetzung für die Installation von qiskit-ignis. Sie ersetzt die bisherige Verwendung vonnetworkx(die nicht mehr erforderlich ist), um eine bessere Leistung zu erzielen. - Die Abhängigkeit von
scikit-learnwird nicht mehr benötigt und ist nun eine optionale Voraussetzung. Wenn Sie die IQ-Messungsdiskriminatoren (IQDiscriminationFitter,LinearIQDiscriminationFitter,QuadraticIQDiscriminationFitteroderSklearnIQDiscriminator) verwenden, müssen Sie nun scikit-learn manuell installieren, entweder indem Siepip install scikit-learnausführen oder wenn Sie auch qiskit-ignis mitpip install qiskit-ignis[iq]installieren.
Fehlerkorrekturen
- Ein Problem in der Erwartungswert-Methode
expectation_value()wurde behoben. Bei den FehlerminderungsklassenTensoredExpvalMeasMitigatorundCTMPExpvalMeasMitigatorwurde fälschlicherweise die Gesamtzahl der Qubits des Mitigators und nicht die Anzahl der klassischen Bits im Zählwörterbuch verwendet, was zu einer stark verringerten Leistung führte, wenn derqubitskwarg nicht angegeben war. Behoben #561 - Die
"auto"-Methode vonTomographyFitter,StateTomographyFitterundProcessTomographyFittersollte nur dann"cvx"verwenden, wenn CVXPY installiert ist und ein anderer SDP-Löser als SCS verfügbar ist. Der Grund dafür ist, dass der SCS-Solver eine geringere Genauigkeit als andere Solver-Methoden aufweist und häufig eine Dichtematrix oder Choi-Matrix liefert, die nicht vollständig positiv ist und die Validierung fehlschlägt, wenn sie mit demqiskit.quantum_info.state_fidelity()oderqiskit.quantum_info.process_fidelity()funktionen.
Aqua- 0.9.0
Mit dieser Version wird das Qiskit-Aqua-Projekt offiziell abgeschafft. In der Zukunft (frühestens 3 Monate nach dieser Version) wird das Aqua-Projekt seine letzte Version erhalten und archiviert werden. Alle Funktionen, die qiskit-aqua bietet, wurden entweder in neue Pakete oder in andere qiskit-Pakete migriert. Die Anwendungsmodule, die von qiskit-aqua bereitgestellt werden, wurden in mehrere neue Pakete aufgeteilt: qiskit-optimization, qiskit-nature, qiskit-machine-learning, und qiskit-finance. Diese Pakete können einzeln (über den Standardbefehl pip install, z.B. pip install qiskit-nature) oder zusammen mit dem Rest des Qiskit-Metapakets als optionale Extras (z.B. pip install 'qiskit[finance,optimization]' oder pip install 'qiskit[all]') installiert werden. Die Kernbausteine für die Algorithmen und den Operatorfluss sind nun als Teil von qiskit-terra unter qiskit.algorithms und qiskit.opflow. Abhängig von Ihrer bisherigen Nutzung von Aqua sollten Sie entweder die Anwendungspakete oder die neuen Module in Qiskit Terra verwenden.
Weitere Einzelheiten zur Migration von der Verwendung von Qiskit Aqua finden Sie in der Migrationsanleitung.
IBM Q Anbieter 0.12.2
Keine Änderung