Qiskit 0.20 Versionshinweise
0.20.1
Terra- 0.15.2
Fehlerkorrekturen
- Beim Zugriff auf das
definition-Attribut einer parametrisiertenGate-Instanz wurde das generierteQuantumCircuitmit einem ungültigenParameterTablegeneriert, so dass das Lesen vonQuantumCircuit.parametersoder der Aufruf vonQuantumCircuit.bind_parametersdie ungebundenen Parameter falsch meldete. Dieses Problem wurde behoben. SXGate().inverse()hatte zuvor ein "sx_dg"-Gatter mit einem korrektendefinitionaber einem falschento_matrixzurückgegeben. Diese wurde aktualisiert, so dassSXGate().inverse()eineSXdgGate()zurückgibt und umgekehrt.Instruction.inverse()wenn es nicht von einer Unterklasse überschrieben wird, in einigen Fällen eineGateInstanz mit einer falschento_matrixMethode zurückgeben würde. Die Instanzen der falschento_matrixMethoden wurden entfernt.- Bei
C3XGatemit einem Wert ungleich Nullanglehatte die Invertierung des Gatters überC3XGate.inverse()zuvor ein falsches inverses Gatter erzeugt. Dies wurde korrigiert. - Die Modi von
MCXGatewurden aktualisiert, um beim Aufruf von.inverse()ein Tor desselben Modus zurückzugeben. Dies behebt ein Problem, bei dem in einigen Fällen die Transpilierung einer Schaltung, die die Umkehrung einesMCXVChain-Gatters enthält, einen Fehler auslöst. - Bisher wurde bei der Erstellung eines mehrfach gesteuerten Phasengatters über
PhaseGate.controleinMCU1GateGatter zurückgegeben. Dies wurde korrigiert, so dass eineMCPhaseGatezurückgegeben wird. - Bisher führte der Versuch, eine Schaltung mit
MCPhaseGatezu zerlegen, zu einem Fehler aufgrund einer Inkonsistenz in der Definition vonMCPhaseGate. Dies wurde korrigiert. QuantumCircuit.composeundDAGCircuit.composehatten in einigen Fällen bedingte Gatter falsch übersetzt, wenn die Eingangsschaltung mehr als einClassicalRegisterenthielt. Dieses Problem wurde behoben.- Es wurde ein Problem bei der Erstellung eines
qiskit.result.Countsobjekts aus einem leeren Datenwörterbuch. Dadurch wird ein leeresCountsobjekt. Die Methodemost_frequent()methode wurde ebenfalls aktualisiert und löst nun eine aussagekräftigere Ausnahme aus, wenn das Objekt leer ist. Korrekturen #5017 - Durch das Erweitern von Schaltkreisen mit unterschiedlichen Registern wurden die Eigenschaften
qregsundcregsentsprechend aktualisiert, nicht aber die Listenqubitsundclbits. Da diese nicht mehr aus den Registern generiert werden, sondern zwischengespeicherte Listen sind, führt dies zu einer Diskrepanz zwischen Registern und Bits. Dies wurde behoben und die Methodeextendaktualisiert explizit die zwischengespeicherten Bitlisten. - Behebung von Fehlern in den konkreten Implementierungen der Methode meth:~qiskit.circuit.ControlledGate.inverse, die den Parameter
ctrl_statenicht erhalten. - Ein Fehler wurde behoben, der bei langen Impulszeitplänen zu einem Rekursionsfehler führte.
Aer- 0.6.1
Keine Änderung
Ignis- 0.4.0
Keine Änderung
Aqua- 0.7.5
Keine Änderung
IBM Q Anbieter 0.8.0
Keine Änderung
0.20.0
Terra- 0.15.1
Vorspiel
Die Version 0.15.0 enthält mehrere neue Funktionen und Fehlerkorrekturen. Einige Highlights dieser Veröffentlichung sind:
Diese Version beinhaltet die Einführung der arbiträren Basisübersetzung in den Transpiler. Dazu gehört auch die Unterstützung einer breiteren Palette von Bauteil-Basissätzen, z.B. Backends, die RZ-, RY-, RZ-, CZ- oder iSwap -Gatter implementieren.
Die QuantumCircuit klasse verfolgt nun die globale Phase. Das bedeutet, dass die Steuerung eines Schaltkreises mit globaler Phase nun korrekt eine relative Phase hinzufügt, und die Definitionen der Gattermatrix sind nun exakt und nicht mehr bis zu einer globalen Phase gleich.
Neue Funktionen
-
Eine neue DAG-Klasse
qiskit.dagcircuit.DAGDependencyzur Darstellung der Abhängigkeitsform von Schaltkreisen. In dieser DAG sind die Knoten Operationen (Gatter, Maßnahme, Barriere, etc...) und die Kanten entsprechen der Nicht-Kommutation zwischen zwei Operationen. -
Vier neue Funktionen wurden hinzugefügt zu
qiskit.convertersfür die Konvertierung nach und vonDAGDependency. Dabei handelt es sich um folgende Funktionen:circuit_to_dagdependency()zur Konvertierung von einemQuantumCircuitobjekt in einDAGDependencyobjekt.dagdependency_to_circuit()zur Konvertierung von einemDAGDependencyobjekt in einQuantumCircuitobjekt.dag_to_dagdependency()zur Konvertierung von einemDAGCircuitobjekt in einDAGDependencyobjekt.dagdependency_to_dag()zur Konvertierung von einemDAGDependencyobjekt in einDAGCircuitobjekt.
Zum Beispiel:
from qiskit.converters.dagdependency_to_circuit import dagdependency_to_circuit from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit circuit_in = QuantumCircuit(2) circuit_in.h(qr[0]) circuit_in.h(qr[1]) dag_dependency = circuit_to_dagdependency(circuit_in) circuit_out = dagdepency_to_circuit(dag_dependency) -
Es wurden zwei neue Transpiler-Passagen hinzugefügt
qiskit.transpiler.passesDer erste,UnrollCustomDefinitionswickelt alle Anweisungen in der Schaltung entsprechend ihrerdefinitioneigenschaft ab und hält an, wenn er entweder die angegebenebasis_gatesoder einen Satz von Gattern in der angegebenenEquivalenceLibrary. Die zweite,BasisTranslatorverwendet den Satz von Übersetzungen in der mitgeliefertenEquivalenceLibraryum Schaltkreisanweisungen auf einer bestimmten Grundlage neu zu schreiben. -
Ein neues
translation_methodSchlüsselwort-Argument wurde hinzugefügt zutranspile()hinzugefügt, um die Auswahl der Methode zu ermöglichen, die für die Übersetzung von Schaltungen in die verfügbaren Gerätegatter verwendet werden soll. Zum Beispieltranspile(circ, backend, translation_method='translator'). Folgende Auswahlmöglichkeiten sind gültig:'unroller': zur Verwendung desUnrollerpassieren'translator': zur Verwendung desBasisTranslatorpass.'synthesis': zur Verwendung desUnitarySynthesispass.
Der Standardwert ist
'translator'. -
Eine neue Klasse für den Umgang mit Zählergebnisdaten,
qiskit.result.Countswurde hinzugefügt. Diese Klasse ist eine Unterklasse vondictund kann wie jedes andere Wörterbuch verwendet werden. Es enthält jedoch Hilfsmethoden und Attribute für den Umgang mit Zählergebnissen aus Experimenten und übernimmt auch die Nachbearbeitung und Formatierung von Binärstrings bei der Objektinitialisierung. ACountsobjekt kann durch Übergabe eines Zählwörterbuchs erstellt werden, wobei die Schlüssel entweder Ganzzahlen, hexadezimale Zeichenfolgen der Form'0x4a', binäre Zeichenfolgen der Form'0b1101', eine über Register- und Speicherplätze formatierte Bitfolge (z. B.'00 10') oder eine dit-Zeichenfolge sind. Zum Beispiel:from qiskit.result import Counts counts = Counts({"0x0': 1, '0x1', 3, '0x2': 1020}) -
Eine neue Methode zur Konstruktion von
qiskit.dagcircuit.DAGCircuitobjekten wurde hinzugefügt:from_networkx(). Diese Methode nimmt ein networkxMultiDiGraphObjekt (in dem vonto_networkx()zurückgegebenen Format) auf und gibt ein neuesDAGCircuitobjekt zurück. Diese Funktion soll es den Autoren von Transpiler-Passes ermöglichen, die Graph-Algorithmus-Bibliothek von networkx zu nutzen, wenn eine Funktion in der retworkx-API fehlt. Obwohl, hoffentlich wird in solchen Fällen ein Problem mit retworkx issue tracker geöffnet (oder noch besser ein Pull Request eingereicht). -
Ein neuer kwarg für
init_qubitswurde hinzugefügt zuassemble()undexecute()hinzugefügt. Bei Backends, die diese Funktion unterstützen, kann mitinit_qubitsgesteuert werden, ob das Backend, das die Schaltungen ausführt, zu Beginn jedes Schusses Initialisierungssequenzen einfügt. Standardmäßig ist dies aufTrueeingestellt, was bedeutet, dass alle Qubits zu Beginn jedes Schusses als im Grundzustand befindlich angenommen werden können. Wenn jedochinit_qubitsaufFalseeingestellt ist, werden die Qubits zu Beginn jedes Experiments und zwischen den Aufnahmen nicht initialisiert. Beachten Sie, dass das Backend, auf dem die Schaltkreise laufen, diese Funktion unterstützen muss, damit dieses Flag eine Wirkung hat. -
Ein neuer kwarg
rep_delaywurde hinzugefügt zuqiskit.compiler.assemble(),qiskit.execute.execute()und dem Konstruktor fürPulseQobjtConfig.qiskit Dieser neue kwarg wird verwendet, um die Zeit zwischen Programmausführungen zu bezeichnen. Er muss aus der Liste der gültigen Werte ausgewählt werden, die alsrep_delaysvon einem BackendPulseBackendConfigurationobjekt, auf das alsbackend.configuration().rep_delayszugegriffen werden kann.)Der
rep_delaykwarg funktioniert nur auf Backends, die eine dynamische Wiederholungszeit zulassen. Dies wird auch in demPulseBackendConfigurationobjekt für ein Backend als dasdynamic_reprate_enabled-Attribut angegeben. Wenndynamic_reprate_enabledFalseist, wird der fürrep_timeangegebene Wert fürqiskit.compiler.assemble(),qiskit.execute.execute()oder der Konstruktor fürPulseQobjtConfiganstelle vonrep_delayverwendet.rep_timekann nur die Dauer eines Programms angegeben werden, nicht aber die Zeitspanne zwischen den Programmen. -
Die
qobj_schema.jsonJSON-Schemadatei inqiskit.schemaswurde aktualisiert, umrep_delayals optionale Konfigurationseigenschaft für pulse qobjs aufzunehmen. -
Die
backend_configuration_schema.jsonJSON Schema-Datei in mod:qiskit.schemas wurde aktualisiert, umrep_delay_rangeunddefault_rep_delayals optionale Eigenschaften für eine Puls-Backend-Konfiguration aufzunehmen. -
Ein neues Attribut,
global_phasedas für die Verfolgung der globalen Phase verwendet wird, wurde derqiskit.circuit.QuantumCircuitklasse hinzugefügt. Zum Beispiel:import math from qiskit import QuantumCircuit circ = QuantumCircuit(1, global_phase=math.pi) circ.u1(0)Die globale Phase kann im obigen Beispiel auch mit
circ.global_phasegeändert oder abgefragt werden. In beiden Fällen erfolgt die Einstellung im Bogenmaß. Wird die Schaltung in einen Befehl oder ein Gatter umgewandelt, wird die globale Phase durch zwei einzelne Qubit-Drehungen am ersten Qubit dargestellt.Dies ermöglicht es anderen Methoden und Funktionen, die ein
QuantumCircuitobjekt verwenden, die globale Phase zu berücksichtigen. Zum Beispiel. mit demglobal_phaseattribut kann dieto_matrix()methode für ein Tor kann nun genau seinen Zerlegungen entsprechen, anstatt nur bis zu einer globalen Phase.Das gleiche Attribut wurde auch der Klasse
DAGCircuitklasse hinzugefügt, damit die globale Phase bei der Konvertierung zwischenQuantumCircuitundDAGCircuit. -
Zwei neue Klassen,
AncillaRegisterundAncillaQubitwurden demqiskit.circuitmodul hinzugefügt. Diese sind Unterklassen vonQuantumRegisterundQubitund ermöglichen die Markierung von Qubits als Ancillas. Dadurch können diese Qubits in größeren Schaltungen und Algorithmen wiederverwendet werden. -
Eine neue Methode,
control(), wurde der MethodeQuantumCircuit. Diese Methode gibt eine kontrollierte Version desQuantumCircuitobjekts zurück, sowohl mit offenen als auch mit geschlossenen Kontrollen. Diese Funktionalität war bisher nur über dieGateklasse. -
Eine neue Methode
repeat()wurde derQuantumCircuitklasse hinzugefügt. Sie gibt ein neues Schaltkreisobjekt zurück, das eine bestimmte Anzahl von Wiederholungen des ursprünglichen Schaltkreises enthält. Zum Beispiel:from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) repeated_qc = qc.repeat(3) repeated_qc.decompose().draw(output='mpl')Die Parameter werden per Referenz kopiert, d.h. wenn Sie die Parameter in einer Instanz des Schaltkreises aktualisieren, werden alle Wiederholungen aktualisiert.
-
Eine neue Methode
reverse_bits()wurde derQuantumCircuitklasse hinzugefügt. Diese Methode kehrt die Reihenfolge der Bits in einer Schaltung um (sowohl Quanten- als auch klassische Bits). Damit lässt sich ein Schaltkreis von Little-Endian auf Big-Endian und umgekehrt umschalten. -
Eine neue Methode,
combine_into_edge_map()wurde der Klasseqiskit.transpiler.Layoutklasse hinzugefügt. Diese Methode ermöglicht die Umwandlung von zweiLayoutobjekte in eine Qubit-Map umzuwandeln, um zwei Schaltkreise zusammenzusetzen. -
Dem Modul
qiskit.test.mock.utilswurde eine neue KlasseConfigurableFakeBackendhinzugefügt. Diese neue Klasse ermöglicht die Erstellung von konfigurierbaren Mock-Backends für den Einsatz in Tests. Zum Beispiel:from qiskit.test.mock.utils import ConfigurableFakeBackend backend = ConfigurableFakeBackend("Tashkent", n_qubits=100, version="0.0.1", basis_gates=['u1'], qubit_t1=99., qubit_t2=146., qubit_frequency=5., qubit_readout_error=0.01, single_qubit_gates=['u1'])wird ein Backend-Objekt mit 100 Qubits und allen anderen im Konstruktor angegebenen Parametern erstellt.
-
Eine neue Methode
draw()wurde derqiskit.circuit.EquivalenceLibraryklasse hinzugefügt. Diese Methode kann verwendet werden, um den Inhalt einer Äquivalenzbibliothek zu zeichnen, was bei der Fehlersuche nützlich sein kann. Zum Beispiel:from numpy import pi from qiskit.circuit import EquivalenceLibrary from qiskit.circuit import QuantumCircuit from qiskit.circuit import QuantumRegister from qiskit.circuit import Parameter from qiskit.circuit.library import HGate from qiskit.circuit.library import U2Gate from qiskit.circuit.library import U3Gate my_equiv_library = EquivalenceLibrary() q = QuantumRegister(1, 'q') def_h = QuantumCircuit(q) def_h.append(U2Gate(0, pi), [q[0]], []) my_equiv_library.add_equivalence(HGate(), def_h) theta = Parameter('theta') phi = Parameter('phi') lam = Parameter('lam') def_u2 = QuantumCircuit(q) def_u2.append(U3Gate(pi / 2, phi, lam), [q[0]], []) my_equiv_library.add_equivalence(U2Gate(phi, lam), def_u2) my_equiv_library.draw() -
Eine neue Phasenanweisung,
SetPhase, wurde hinzugefügt zuqiskit.pulse. Dieser Befehl setzt die Phase der nachfolgenden Impulse auf die angegebene Phase (im Bogenmaß). Zum Beispiel:import numpy as np from qiskit.pulse import DriveChannel from qiskit.pulse import Schedule from qiskit.pulse import SetPhase sched = Schedule() sched += SetPhase(np.pi, DriveChannel(0))In diesem Beispiel wird die Phase der Impulse, die nach dem Befehl
SetPhaseanDriveChannel(0)angelegt werden, auf im Bogenmaß gesetzt. -
Ein neuer Impulsbefehl
ShiftFrequencywurde hinzugefügtqiskit.pulse.instructions. Mit diesem Befehl kann die Frequenz eines Kanals von der eingestellten Frequenz verschoben werden. Zum Beispiel:from qiskit.pulse import DriveChannel from qiskit.pulse import Schedule from qiskit.pulse import ShiftFrequency sched = Schedule() sched += ShiftFrequency(-340e6, DriveChannel(0))In diesem Beispiel wird bei allen Impulsen, die nach dem Befehl
ShiftFrequencyanDriveChannel(0)angelegt werden, die Frequenz der Hüllkurve a um 340MHz vermindert. -
Eine neue Methode
conjugate()wurde derParameterExpressionklasse hinzugefügt. Dies ermöglicht den Aufruf vonnumpy.conj(), ohne einen Fehler zu verursachen. Da einParameterExpressionobjekt real ist, wird es sich selbst zurückgeben. Dieses Verhalten entspricht dem von Python floats/ints. -
Eine neue Klasse
PhaseEstimationwurde hinzugefügt zuqiskit.circuit.library. Diese Bibliotheksklasse ist die Schaltung, die in der ursprünglichen Formulierung des Phasenschätzungsalgorithmus in arXiv:quant-ph/9511026. Die Phasenschätzung ist die Aufgabe, die Phase eines Eigenwerts eines unitären Operators abzuschätzen, sofern der entsprechende Eigenzustand vorliegt. Das bedeutet
Diese Schätzung (und damit diese Schaltung) ist eine zentrale Routine für mehrere bekannte Algorithmen, wie den Shor-Algorithmus oder die Quantenamplitudenschätzung.
-
Die
qiskit.visualizationfunktionplot_state_qsphere()verfügt über einen neuen kwargshow_state_labels, der dazu dient, zu kontrollieren, ob jeder Blob in der qsphere-Visualisierung beschriftet ist. Standardmäßig ist dieser kwarg aufTrueeingestellt und zeigt standardmäßig die Basiszustände neben jedem Blob an. Diese Funktion kann deaktiviert werden, indem dershow_state_labelskwarg aufFalsegesetzt wird, wodurch das vorherige Verhalten wiederhergestellt wird. -
Die
qiskit.visualizationfunktionplot_state_qsphere()hat einen neuen kwargshow_state_phases, der standardmäßig aufFalsegesetzt ist. Bei der EinstellungTruewird die Phase der einzelnen Basiszustände angezeigt. -
Die
qiskit.visualizationfunktionplot_state_qsphere()hat einen neuen kwarguse_degrees, der standardmäßig aufFalsegesetzt ist. Bei der EinstellungTruewird die Phase jedes Basiszustands in Grad angezeigt, zusammen mit dem Phasenkreis unten rechts. -
Eine neue Klasse,
QuadraticFormzumqiskit.circuit.librarymodul zur Implementierung einer quadratischen Form auf binären Variablen. Das Element der Schaltkreisbibliothek implementiert die Operation
für die quadratische Form und output qubits. Das Ergebnis ist in den Ausgangsqubits im Zweierkomplement kodiert. Wird nicht angegeben, wählt die Schaltung die minimale Anzahl von Qubits, die zur Darstellung des Ergebnisses erforderlich ist, ohne eine Modulo-Operation durchzuführen. Die quadratische Form wird durch eine Matrix für die quadratischen Terme, einen Vektor für die linearen Terme und einen konstanten Offset angegeben. Wenn alle Terme ganzzahlig sind, setzt die Schaltung die quadratische Form exakt um, andernfalls ist sie nur eine Annäherung.
Zum Beispiel:
import numpy as np
from qiskit.circuit.library import QuadraticForm
A = np.array([[1, 2], [-1, 0]])
b = np.array([3, -3])
c = -2
m = 4
quad_form_circuit = QuadraticForm(m, A, b, c)-
Hinzufügen
qiskit.quantum_info.Statevector.expectation_value()undqiskit.quantum_info.DensityMatrix.expectation_value()methoden zur Berechnung des Erwartungswertes einerqiskit.quantum_info.Operator. -
Für die
seedkwarg im Konstruktor fürqiskit.circuit.library.QuantumVolumenumpy random Generator-Objekte kann nun verwendet werden. Zuvor waren nur ganze Zahlen eine gültige Eingabe. Dies ist nützlich bei der Integration vonQuantumVolumeals Teil einer größeren Funktion mit eigener Zufallszahlengenerierung, z. B. zur Erzeugung einer Folge vonQuantumVolumeschaltungen. -
Die
QuantumCircuitmethodecompose()verfügt über einen neuen kwargfront, der verwendet werden kann, um den anderen Stromkreis vor den Ursprungskreis zu setzen, anstatt ihn anzuhängen. Zum Beispiel:from qiskit.circuit import QuantumCircuit circ1 = QuantumCircuit(2) circ2 = QuantumCircuit(2) circ2.h(0) circ1.cx(0, 1) circ1.compose(circ2, front=True).draw(output='mpl') -
Zwei neue Pässe,
SabreLayoutundSabreSwapfür Layout und Routing wurden hinzugefügt zuqiskit.transpiler.passes. Diese neuen Durchgänge basieren auf dem in Li et al. vorgestellten Algorithmus, "Tackling the Qubit Mapping Problem for NISQ-Era Quantum Devices", ASPLOS 2019. Sie können auch ausgewählt werden, wenn Sie die Funktiontranspile()funktion ausgewählt werden, indem dielayout_methodkwarg auf'sabre'und/oder dierouting_methodauf'sabre'gesetzt wird, um dieSabreLayoutundSabreSwapentsprechend. -
Hinzufügen der Methode
replace()zu derqiskit.pulse.Scheduleklasse hinzugefügt, mit der eine Impulsanweisung durch eine andere ersetzt werden kann. Zum Beispiel:.. code-block:: pythonvon qiskit importieren Puls
d0 = pulse.DriveChannel(0)
sched = pulse.Schedule ()
alt = pulse.Play ( pulse.Constant (100, 1.0 ), d0 ) neu = pulse.Play ( pulse.Constant (100, 0.1 ), d0 )
sched += alt
sched = sched.replace (alt, neu)
assert sched == pulse.Schedule (new)
-
Neue Gatterklassen hinzugefügt für
qiskit.circuit.libraryfür die Gatter , sein Adjungiertes und gesteuertes alsSXGate,SXdgGate, undCSXGate. Sie können auch zu einemQuantumCircuitobjekt hinzugefügt werden, indem diesx(),sxdg(), undcsx()hinzugefügt werden. -
Hinzufügen von Unterstützung für
ResetAnweisungen zuqiskit.quantum_info.Statevector.from_instruction(). Man beachte, dass dies eine RNG-Abtastung bei der Auswahl der Projektion auf den Nullzustand beinhaltet, wenn sich das Qubit in einem Überlagerungszustand befindet. Das Saatgut für die Probenahme kann mit derseed()methode. -
Die Methoden
qiskit.circuit.ParameterExpression.subs()undqiskit.circuit.QuantumCircuit.assign_parameters()akzeptieren nunParameterExpressionals den zu ersetzenden Zielwert.Beispiel:
from qiskit.circuit import QuantumCircuit, Parameter p = Parameter('p') source = QuantumCircuit(1) source.rz(p, 0) x = Parameter('x') source.assign_parameters({p: x*x})┌──────────┐ q_0: ┤ Rz(x**2) ├ └──────────┘ -
Die
QuantumCircuit()methodeto_gate()hat ein neues kwarglabel, das verwendet werden kann, um ein Label für das AusgabeGateobjekt. Zum Beispiel:from qiskit.circuit import QuantumCircuit circuit_gate = QuantumCircuit(2) circuit_gate.h(0) circuit_gate.cx(0, 1) custom_gate = circuit_gate.to_gate(label='My Special Bell') new_circ = QuantumCircuit(2) new_circ.append(custom_gate, [0, 1], []) new_circ.draw(output='mpl') -
Hinzugefügt wurde die
UGate,CUGate,PhaseGate, undCPhaseGatemit den entsprechendenQuantumCircuitmethodenu(),cu(),p(), undcp(). DasUGategatter ist das generische Ein-Qubit-Rotationsgatter mit 3 Euler-Winkeln und dasCUGatetor seine kontrollierte Version.CUGatehat 4 Parameter, um einer möglichen globalen Phase des U-Gatters Rechnung zu tragen. DiePhaseGateundCPhaseGatesind das allgemeine Phasentor in einem beliebigen Winkel und seine kontrollierte Version. -
Ein neuer kwarg,
cregbundle, wurde der Funktionqiskit.visualization.circuit_drawer()funktion und derQuantumCircuitmethodedraw(). Bei der EinstellungTruewerden die Kreuze in den Schaltkreisvisualisierungen für die Schubladentextundmplzu einer einzigen Zeile gebündelt. Der Standardwert istTrue. Behebt Problem #4290.Zum Beispiel:
from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='mpl', cregbundle=True) -
Ein neuer kwarg,
initial_state, wurde der Funktionqiskit.visualization.circuit_drawer()funktion und derQuantumCircuitmethodedraw(). Bei der EinstellungTruewird der Ausgangszustand nun in die Schaltkreisvisualisierungen für alle Schubladen einbezogen. Behebt Problem #4293.Zum Beispiel:
from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='mpl', initial_state=True) -
Bei der Verwendung der Schublade "mpl" werden nun Etiketten angezeigt. Es gibt 2 Arten von Etiketten - Toretiketten und Kontrolletiketten. Die Torbezeichnungen ersetzen den Tornamen in der Anzeige. Die Beschriftung der Steuerelemente wird über oder unter den Steuerelementen für ein Tor angezeigt. Behebt die Probleme #3766, #4580 Behebt die Probleme #3766 und #4580.
Zum Beispiel:
from qiskit import QuantumCircuit from qiskit.circuit.library.standard_gates import YGate circuit = QuantumCircuit(2) circuit.append(YGate(label='A Y Gate').control(label='Y Control'), [0, 1]) circuit.draw(output='mpl')
Anmerkungen zu Upgrades
-
Implementierungen des mehrfach gesteuerten X-Gate (
MCXGrayCode,MCXRecursive, undMCXVChain) wurden ihrenameEigenschaften geändert, um ihre Implementierung genauer zu beschreiben:mcx_gray,mcx_recursivebzw.mcx_vchain. Zuvor teilten diese Gatter den NamenmcxmitMCXGate, was dazu führte, dass diese Gatter falsch transpiliert und simuliert wurden. -
Standardmäßig verwenden die voreingestellten Pass-Manager in
qiskit.transpiler.preset_passmanagersverwendenUnrollCustomDefinitionsundBasisTranslatorzur Handhabung von Basisänderungen anstelle des bisherigen StandardsUnroller. Dies geschah, weil die neuen Pässe flexibler sind und eine beliebige Basismenge anvisieren können, auch wenn das Ergebnis unterschiedlich sein kann. Um die vorherige Standardeinstellung zu verwenden, können Sie dentranslation_methodkwarg auftranspile()auf'unroller'setzen. -
Die
qiskit.converters.circuit_to_gate()und :func` qiskit.converters.circuit_to_instruction\Konverterfunktionen hatten bisher das erzeugte Gatter oder die Anweisung automatisch in das aktiveSessionEquivalenceLibraryaufgenommen. Diese Konverter akzeptieren nun ein optionalesequivalence_library` Schlüsselwortargument, um anzugeben, ob und wo die konvertierten Instanzen registriert werden sollen. Das Standardverhalten hat sich dahingehend geändert, dass die konvertierte Instanz nicht registriert wird. -
Der Standardwert der
cregbundlekwarg für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()funktion wurde aufTruegeändert. Das bedeutet, dass z.B. die klassischen Bits im Schaltplan nun standardmäßig gebündelt werden:from qiskit.circuit import QuantumCircuit circ = QuantumCircuit(4) circ.x(0) circ.h(1) circ.measure_all() circ.draw(output='mpl')Wenn Sie möchten, dass Ihre Schaltkreiszeichnung das vorherige Verhalten beibehält und jedes klassische Bit im Diagramm anzeigt, können Sie
cregbundlekwarg aufFalsesetzen. Zum Beispiel:from qiskit.circuit import QuantumCircuit circ = QuantumCircuit(4) circ.x(0) circ.h(1) circ.measure_all() circ.draw(output='mpl', cregbundle=False) -
Scheduleplotten mitqiskit.pulse.Schedule.draw()undqiskit.visualization.pulse_drawer()wird die Ereignistabelle nicht mehr standardmäßig angezeigt. Dies kann wieder aktiviert werden, indem dertablekwarg aufTruegesetzt wird. -
Der Pass
RemoveResetInZeroStatewar früher im voreingestellten Passmanager enthaltenlevel_0_pass_manager()enthalten, der mit den Funktionenoptimization_level=0fortranspile()undexecute()verwendet wurde. Allerdings,RemoveResetInZeroStateist jedoch ein Optimierungsdurchgang und hätte nicht in die Optimierungsstufe 0 aufgenommen werden dürfen und wurde daher entfernt. Wenn Sietranspile()mitRemoveResetInZeroStateverwenden Sie entweder einen benutzerdefinierten Passmanager oderoptimization_level1, 2 oder 3. -
Der veraltete kwarg
line_lengthfür dieqiskit.visualization.circuit_drawer()funktion undqiskit.circuit.QuantumCircuit.draw()methode wurde entfernt. Sie war seit der Veröffentlichung von 0.10.0 veraltet. Stattdessen können Sie diefoldkwarg verwenden, um die Breite des Schaltplans anzupassen. -
Der Ausgabemodus
'mpl'für dieqiskit.circuit.QuantumCircuit.draw()methode undcircuit_drawer()erfordert nun die Installation der Bibliothek pylatexenc. Dies war bereits eine optionale Abhängigkeit für die Visualisierung, war aber bisher nur für den Ausgabemodus'latex'erforderlich. Sie ist nun auch für die matplotlib-Schublade erforderlich, da sie für die korrekte Größenbestimmung von Gattern mit matplotlib's mathtext labels for gates benötigt wird. -
Die veralteten
get_tokensMethoden für dieqiskit.qasm.Qasmundqiskit.qasm.QasmParserwurden entfernt. Diese Methoden sind seit der Version 0.9.0 veraltet. Stattdessen sollten die Methodenqiskit.qasm.Qasm.generate_tokens()undqiskit.qasm.QasmParser.generate_tokens()verwendet werden. -
Der veraltete kwarg
channels_to_plotfürqiskit.pulse.Schedule.draw(),qiskit.pulse.Instruction.draw(),qiskit.visualization.pulse.matplotlib.ScheduleDrawer.drawundpulse_drawer()wurde entfernt. Der kwarg ist seit der Version 0.11.0 veraltet und wurde durch denchannelskwarg ersetzt, der identisch funktioniert und stattdessen verwendet werden sollte. -
Das veraltete Attribut
circuit_instruction_mapder Klasseqiskit.providers.models.PulseDefaultsklasse wurde entfernt. Dieses Attribut ist seit der Version 0.12.0 veraltet und wurde durch das Attributinstruction_schedule_mapersetzt, das stattdessen verwendet werden kann. -
Die Methode
unionvonScheduleundInstructionsind seit der Version 0.12.0 veraltet und wurden nun entfernt. Verwenden Sieqiskit.pulse.Schedule.insert()undqiskit.pulse.Instruction.meth()stattdessen die Methoden kwarg``time=0``. -
Das veraltete Argument
scalingfür die MethodedrawvonScheduleundInstructionwurde seit der Veröffentlichung von 0.12.0 durchscaleersetzt und ist nun entfernt worden. Verwenden Sie stattdessen die Websitescalekwarg. -
Das veraltete
periodArgument fürqiskit.pulse.libraryfunktionen wurden seit der Veröffentlichung von 0.13.0 durchfreqersetzt und nun entfernt. Verwenden Sie diefreqkwarg anstelle vonperiod. -
Das Modul
qiskit.pulse.commands, das die Klassen vonCommandsenthielt, war in der Version 0.13.0 veraltet und wurde nun entfernt. Sie müssen Ihren Pulse-Code aktualisieren, wenn Sie noch Befehle verwendet haben. Zum Beispiel:AltNeuCommand(args)(channel)Instruction(args, channel)"Python Acquire(Dauer)( AcquireChannel(0 )) ``` "Python Acquire(Dauer, AcquireChannel(0 )) | ```python Delay(duration)(channel) ``` | ```python Delay(duration, channel) ``` | | ```python FrameChange(angle)(DriveChannel(0)) ``` | ```python # FrameChange was also renamed ShiftPhase(angle, DriveChannel(0)) ``` | | ```python Gaussian(...)(DriveChannel(0)) ``` | ```python # Pulses need to be `Play`d Play(Gaussian(...), DriveChannel(0)) ``` | -
Alle Klassen und Funktionen des Moduls
qiskit.tool.qiwaren in der Version 0.12.0 veraltet und wurden nun entfernt. Verwenden Sie stattdessen dasqiskit.quantum_infomodul und die darin enthaltenen neuen Methoden und Klassen für die Arbeit mit Quantenzuständen und -operatoren. -
Die Funktionen
qiskit.quantum_info.basis_stateundqiskit.quantum_info.projectorsind ab Qiskit Terra 0.12.0 veraltet, da sie nun entfernt wurden. Verwenden Sie dieqiskit.quantum_info.QuantumStateund ihre Ableitungenqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixum mit Zuständen zu arbeiten. -
Die interaktiven Plotting-Funktionen von
qiskit.visualization,iplot_bloch_multivector,iplot_state_city,iplot_state_qsphere,iplot_state_hinton,iplot_histogram,iplot_state_paulivecsind jetzt nur noch veraltete Aliase für die matplotlib-basierten Äquivalente und sind nicht mehr interaktiv. Der gehostete statische JS-Code, auf den sich diese Funktionen stützten, wurde entfernt, und sie konnten nicht mehr funktionieren. Eine normale Abschaltung war nicht möglich, da die Website, auf die sie angewiesen waren, nicht mehr existiert. -
Die Validierungskomponenten, die Marshmallow von
qiskit.validationverwenden, wurden von terra entfernt. Da sie nicht mehr zum Bau von Objekten in Terra verwendet werden. -
Die Marshmallow-Schemaklassen in
qiskit.resultwurden entfernt, da sie nicht mehr von derqiskit.result.Resultklasse verwendet werden. -
Die Ausgabe der
to_dict()methode für dieqiskit.result.Resultklasse liegt nicht mehr in einem Format für die direkte JSON-Serialisierung vor. Je nach Inhalt der Instanzen dieser Klassen kann es Typen geben, mit denen der Standard-JSON-Encoder nicht umgehen kann, zum Beispiel komplexe Zahlen oder Numpy-Arrays. Wenn Sie die Ausgabe der Methodeto_dict()direkt in JSON serialisieren, sollten Sie sicherstellen, dass Ihr JSON-Encoder diese Typen verarbeiten kann. -
Die Option, mehrere Qubits auf einmal zu erfassen, war in der Version 0.12.0 veraltet und wird nun entfernt. Insbesondere wurden die Init-Args
mem_slotsundreg_slotsausqiskit.pulse.instructions.Acquireentfernt, undchannel,mem_slotundreg_slotwerden einen Fehler auslösen, wenn eine Liste als Eingabe angegeben wird. -
Die Unterstützung für die Verwendung der Umgebungsvariablen
USE_RETWORKX, die in der Version 0.13.0 eingeführt wurde, um einen optionalen Rückgriff auf die Legacy-Implementierung von networkxqiskit.dagcircuit.DAGCircuitimplementierung zu ermöglichen, wurde entfernt. Diese Markierung war nur als Abhilfe für alle Benutzer gedacht, die während des Übergangs zu retworkx ein Problem mit der neuen Implementierung hatten. -
Das Modul innerhalb von
qiskit.pulsedas für die Umwandlung von Zeitplan->Zeitplan zuständig ist, wurde vonreschedule.pyintransforms.pyumbenannt. Der bisherige Importpfad ist veraltet. Um Ihren Code zu aktualisieren:from qiskit.pulse.rescheduler import <X>sollte ersetzt werden durch:
from qiskit.pulse.transforms import <X> -
In früheren Versionen erlaubte eine
PassManagererlaubte es denTransformationPassKlassen nicht, diePropertySetzu verändern. Diese Einschränkung wurde aufgehoben, so dass eine KlasseTransformationPassjetzt Lese- und Schreibzugriff aufPropertySetundDAGCircuithat, währendrun(). Diese Änderung wurde vorgenommen, umTransformationPassKlassen effizienter zu machen, die einen internen Zustand haben, der für spätere Durchläufe in derPassManager. Ohne diese Änderung wäre eine zweite, redundanteAnalysisPasserforderlich gewesen, um den internen Zustand wiederherzustellen, was zu einem erheblichen Mehraufwand geführt hätte.
Hinweise zu veralteten Versionen
-
Der Name des ersten Positionsparameters für die
qiskit.visualizationfunktionenplot_state_hinton(),plot_bloch_multivector(),plot_state_city(),plot_state_paulivec(), undplot_state_qsphere()wurde vonrhoinstateumbenannt. Die Übergabe des Wertes per Name anrhoist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie das Argument entweder positionell übergeben oder den neuen Parameternamenstateverwenden. -
Das Modul
qiskit.pulse.pulse_libist veraltet und wird in einer zukünftigen Version entfernt werden. Er wurde umbenannt inqiskit.pulse.libraryumbenannt, der stattdessen verwendet werden sollte. -
Die Methode
qiskit.circuit.QuantumCircuitmethodemirror()ist veraltet und wird in einer zukünftigen Version entfernt werden. Die Methodeqiskit.circuit.QuantumCircuit.reverse_ops()sollte stattdessen verwendet werden, da das Spiegeln mit dem Vertauschen der Ausgangsqubits der Schaltung verwechselt werden könnte. Diereverse_ops()methode kehrt nur die Reihenfolge der angewendeten Gates um, anstatt sie zu spiegeln. -
Die Methoden
qubits()undclbits()vonqiskit.dagcircuit.DAGCircuitsind veraltet und werden in einer zukünftigen Version entfernt. Sie wurden durch die gleichnamigen Eigenschaftenqiskit.dagcircuit.DAGCircuit.qubitsundqiskit.dagcircuit.DAGCircuit.clbitsersetzt und werden zwischengespeichert, so dass der Zugriff auf sie wesentlich schneller erfolgt. -
Die Methode
get_sample_pulsefürqiskit.pulse.library.ParametricPulseabgeleitete Klassen (zum BeispielGaussianSquare) ist veraltet und wird in einer zukünftigen Version entfernt werden. Sie wurde durch die Methodeget_waveform(zum Beispielget_waveform()) ersetzt, die sich identisch verhalten sollte. -
Die Verwendung des optionalen Arguments
conditionaufqiskit.dagcircuit.DAGNode,qiskit.dagcircuit.DAGCircuit.apply_operation_back(), undqiskit.dagcircuit.DAGCircuit.apply_operation_front()ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen wird diecontrolinqiskit.circuit.Instructioninstanzen, die zu einerDAGCircuitsollte verwendet werden. -
Die Methoden der Klassen
set_atolundset_rtolder Klassenqiskit.quantum_info.BaseOperatorundqiskit.quantum_info.QuantumState(und ihrer Unterklassen wieOperatorundqiskit.quantum_info.DensityMatrix) sind veraltet und werden in einer zukünftigen Version entfernt werden. Stattdessen sollte der Wert für die Attribute.atolund.rtolauf die Klasse gesetzt werden. Zum Beispiel:from qiskit.quantum_info import ScalarOp ScalarOp.atol = 3e-5 op = ScalarOp(2) -
Die interaktiven Plotting-Funktionen von
qiskit.visualization,iplot_bloch_multivector,iplot_state_city,iplot_state_qsphere,iplot_state_hinton,iplot_histogram,iplot_state_paulivecsind veraltet und werden in einer zukünftigen Version entfernt werden. Die auf matplotlib basierenden äquivalenten Funktionen vonqiskit.visualization,plot_bloch_multivector(),plot_state_city(),plot_state_qsphere(),plot_state_hinton(),plot_state_histogram(), undplot_state_paulivec()sollten stattdessen verwendet werden. -
Die Eigenschaften
acquires,mem_slots, undreg_slotsderqiskit.pulse.instructions.Acquirepulse wurden veraltet und werden in einer zukünftigen Version entfernt. Sie sind lediglich Duplikate vonchannel,mem_slot, undreg_slotnachdem die früher veraltete Unterstützung für die Verwendung mehrerer Qubits in einem einzigenAcquireanweisung entfernt worden ist. -
Die Klasse
SamplePulsevonqiskit.pulsewurde umbenannt inWaveform.SamplePulseist veraltet und wird in einer zukünftigen Version entfernt werden. -
Der Stilwörterbuchschlüssel
cregbundleist veraltet und wird in einer zukünftigen Version entfernt werden. Dies wurde ersetzt durch den kwargcregbundle, der derqiskit.visualization.circuit_drawer()funktion und derQuantumCircuitmethodedraw().
Fehlerkorrekturen
-
Die
qiskit.circuit.QuantumCircuitverfahrennum_nonlocal_gatesumfasste bisher Multi-Qubitqiskit.circuit.Instructionobjekte (zum Beispiel,Barrier) in die Zählung der nichtlokalen Gatter einbezogen. Dies wurde korrigiert, so dass nur nicht-lokaleGateobjekte gezählt werden. Korrekturen #4500 -
ControlledGateinstanzen mit einem Satzctrl_statewurden in einigen Fällen nicht als gleich bewertet, selbst wenn die verglichenen Gates gleichwertig waren. Dies wurde behoben, so dass Fixes #4573 -
Beim Zugriff auf ein Bit von einem
qiskit.circuit.QuantumRegisteroderqiskit.circuit.ClassicalRegisterdurch Index bei der Verwendung von Numpy-Integer-Typen <https://numpy.org/doc/stable/user/basics.types.html> `__ würde zuvor eineCircuitErrorException auslösen. Dies wurde behoben, so dass Numpy-Typen zusätzlich zu Python 's eingebautemintTyp verwendet werden können. Behebt #3929. -
Ein Fehler wurde behoben, bei dem nur der erste
qiskit.pulse.configuration.Kerneloderqiskit.pulse.configuration.Discriminatorfür eineqiskit.pulse.Acquireverwendet wurde, wenn es mehrere Acquires gleichzeitig in einerqiskit.pulse.Schedule. -
Die SI-Einheit, die für die Erstellung von
qiskit.pulse.SetFrequency-Objekten verwendet wird, ist Hz, aber wenn einPulseQobjInstructionobjekt aus einerSetFrequencyInstanz erstellt wird, muss es in GHz umgewandelt werden. Diese Konvertierung fehlte in früheren Versionen und wurde nun behoben. -
Zuvor war es möglich, die Anzahl der Kontroll-Qubits auf Null zu setzen. In diesem Fall würde die ursprüngliche, möglicherweise nicht kontrollierte Operation zurückgegeben werden. Dies könnte dazu führen, dass ein
AttributeErrorausgelöst wird, wenn der Aufrufer versucht, auf ein Attribut zuzugreifen, das nurControlledGateobjekt haben. Dieses Problem wurde durch Hinzufügen eines Getters und Setters fürnum_ctrl_qubitshinzugefügt, um zu überprüfen, ob ein gültiger Wert verwendet wird. Korrekturen #4576 -
Offene Kontrollen wurden durch die Modifizierung eines
Gateobjektedefinition. Wenn das Gatter jedoch bereits in der Basismenge vorhanden ist, wurde diese Definition nicht verwendet, was dazu führte, dass nach der Transpilierung falsche Schaltungen an ein Backend gesendet wurden. Dieses Problem wurde behoben, indem der DurchgangUnrollerso geändert wurde, dass er die Definition verwendet, wenn er auf ein kontrolliertes Tor mit offenen Kontrollen trifft. Behebt #4437 -
Das Argument des Schlüsselworts
insert_barriersin derZZFeatureMapklasse fügte eigentlich keine Barrieren zwischen den Hadamard-Schichten und den Evolutionsschichten ein. Dieses Problem wurde behoben, so dass die Barrieren nun korrekt eingefügt werden. -
Es wurde ein Problem behoben, bei dem einige Gatter mit drei oder mehr Qubits in bestimmten Fällen nicht kompiliert werden konnten. Siehe #4577 <https://github.com/Qiskit/qiskit/issues/4577 für weitere Einzelheiten.
-
Das Matplotlib (
'mpl') Ausgabe-Backend für dieqiskit.circuit.QuantumCircuitmethodedraw()und dieqiskit.visualization.circuit_drawer()funktion wurde nicht richtig skaliert, wenn die kwargscalegesetzt war. Schriftarten und Linienstärken wurden nicht an den Rest des Bildes angepasst. Dieses Problem wurde behoben, und alle Elemente des Schaltplans sind nun korrekt skaliert. Zum Beispiel:from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.h(0) circuit.cx(0, 1) circuit.draw(output='mpl', scale=0.5)Behebt #4179.
-
Behebt ein Problem, bei dem das Initialisieren oder Entwickeln von
qiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen nach Schaltkreisen, dieBarrierAnweisungen enthalten, eine Ausnahme auslösen. Behebt #4461 -
Wenn früher ein
QuantumCircuiteinGatemit einer klassischen Bedingung enthielt, schlug der Transpiler manchmal fehl, wenn eroptimization_level=3auftranspile()oderexecute()einUnboundLocalErrorauslösen. Dies wurde durch eine Aktualisierung desConsolidateBlockspasses, um die klassische Bedingung zu berücksichtigen. Behebt #4672. -
In einigen Situationen würden lange Gatter- und Registernamen überlaufen oder übermäßig viel Leerraum um sie herum hinterlassen, wenn das
'mpl'Ausgabe-Backend für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()funktion. Dies wurde behoben, indem die richtige Textbreite für eine Proportionalschrift verwendet wurde. Behebt die Fehler #4611, #4605, #4545, #4497, #4449 und #3641. -
Bei Verwendung des Ausgabe-Backends
style` kwarg on the :meth:`qiskit.circuit.QuantumCircuit.draw` or :func:`qiskit.visualization.circuit_drawer` with the ``'mpl'wurde der Wörterbuchschlüssel'showindex'aufTruegesetzt, und die Indexnummern am Anfang der Spalte wurden nicht richtig ausgerichtet. Dies wurde behoben. -
Bei der Verwendung von
cregbunde=Truemit dem'mpl'output backend für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()funktion und der Messung auf eine zweite Falte, würde der Messpfeil die Creg-Zählung überschreiben. Um dies zu verhindern, wurde der Zähler nach links verschoben. Behebt #4148. -
Bei Verwendung des
'mpl'Ausgabe-Backends für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()funktionCSwapGategatter und ein kontrolliertesRZZGatewerden Gatter nun mit den entsprechenden Symbolen statt in einem Kasten angezeigt. -
Bei Verwendung des
'mpl'Ausgabe-Backends für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()funktionsgesteuerte Gatter, die mit der Methodeto_gate()methode erstellten Gatter nicht richtig beabstandet und konnten sich mit anderen Gattern im Schaltplan überschneiden. Dieses Problem wurde behoben. -
Bei Verwendung des
'mpl'Ausgabe-Backends für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()werden Funktionstore mit Arrays als Parameter, wie z. B.HamiltonianGate, nicht mehr mit übermäßigem Leerraum um sie herum angezeigt. Behebt #4352. -
Bei Verwendung des
'mpl'Ausgabe-Backends für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()funktion werden generische Gates, die durch direkte Instanziierung vonqiskit.circuit.Gatemethode erstellt wurden, wird nun die richtige Hintergrundfarbe für das Tor angezeigt. Behebt #4496. -
Bei Verwendung des
'mpl'Ausgabe-Backends für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()funktion wurde einAttributeErrorbehoben, das bei der Verwendung vonIsometryoderInitializeauftrat. Behebt #4439. -
Bei Verwendung des
'mpl'Ausgabe-Backends für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()funktion wurden bei einigen offen-gesteuerten Gates die offenen Steuerelemente nicht korrekt angezeigt. Dies wurde korrigiert, so dass offene Steuerelemente nun korrekt als offene Kreise angezeigt werden. Behebt #4248. -
Bei Verwendung des
'mpl'Ausgabe-Backends für dieqiskit.circuit.QuantumCircuit.draw()methode undqiskit.visualization.circuit_drawer()die Funktionfoldkwarg auf -1 setzen, wird die Schaltung nun korrekt ohne Faltung angezeigt. Behebt #4506. -
Parametrische Impulse von
qiskit.pulse.library.discretehaben jetzt standardmäßig Null-Enden von parametrischen Impulsen. Die Endpunkte sind so definiert, dass für eine Funktion dann . Behebt #4317
Sonstige Anmerkungen
- Die
qiskit.result.Resultklasse, die zuvor unter Verwendung der Marshmallow-Bibliothek erstellt wurde, wurde überarbeitet und ist nun nicht mehr von Marshmallow abhängig. Diese neue Implementierung sollte ein nahtloser Übergang sein, aber einige spezifische Verhaltensweisen, die zuvor von Marshmallow geerbt wurden, funktionieren möglicherweise nicht. Bitte melden Sie alle gefundenen Inkompatibilitäten.
Aer- 0.6.1
Vorspiel
Diese Version 0.6.0 enthält zahlreiche Leistungsverbesserungen für alle Simulatoren des Aer-Anbieters und bedeutende Änderungen am Build-System, wenn aus dem Quellcode gebaut wird. Die wichtigsten Änderungen sind die Unterstützung der SIMD-Vektorisierung, die Annäherung in der Matrixprodukt-Zustandsmethode durch Trunkierung der Bindungsdimensionen, eine effizientere Pauli-Erwartungswertberechnung und eine stark verbesserte Effizienz bei der Python Konvertierung von C++-Ergebnisobjekten. Das Build-System wurde aktualisiert, um Conan für die Verwaltung allgemeiner C++-Abhängigkeiten bei der Erstellung aus dem Quellcode zu verwenden.
Neue Funktionen
-
Hinzufügen der Unterstützung für Dichtematrix-Snapshots zu den Methoden "statevector" und "statevector_gpu" des QasmSimulator.
-
Schnappschüsse der Dichtematrix für bestimmte Qubits zulassen, nicht nur für alle Qubits. Damit wird die partielle Spur des Zustands über die verbleibenden Qubits berechnet.
-
Ergänzt die "density_matrix"-Simulationsmethode des
qiskit.providers.aer.QasmSimulatorum die Unterstützung von Pauli-Erwartungswert-Snapshots. Fügen Sie mit der Erweiterungqiskit.providers.aer.extensions.SnapshotExpectationValueSchnappschüsse zu Schaltkreisen hinzu. -
Erhebliche Verbesserung der Leistung des Pauli-Erwartungswert-Snapshot-Algorithmus für die Simulationsmethoden "statevector", "statevector_gpu", "density_matrix" und "density_matrix_gpu" der Website
qiskit.providers.aer.QasmSimulator. -
Aktivieren Sie die Optimierung der Gate-Fusion-Schaltung auf
qiskit.providers.aer.QasmSimulatorin den Backendsqiskit.providers.aer.StatevectorSimulatorundqiskit.providers.aer.UnitarySimulator. -
Verbesserung der Leistung durchschnittlicher Snapshot-Daten in Simulatorergebnissen. Dies hat Auswirkungen auf Wahrscheinlichkeit, Pauli-Erwartungswert und Dichtematrix-Snapshots unter Verwendung der folgenden Erweiterungen:
qiskit.providers.aer.extensions.SnapshotExpectationValueqiskit.providers.aer.extensions.SnapshotProbabilitiesqiskit.providers.aer.extensions.SnapshotDensityMatrix
-
Hinzufügen des Konstruktors move und Verbesserung der Speichernutzung der C++-Matrixklasse, um Kopien von Matrizen zu minimieren, wenn die Ausgabe von Simulatoren in Ergebnisse verschoben wird.
-
Verbesserung der Leistung des Einheitssimulators.
-
Hinzufügen einer Annäherung an die "matrix_product_state"-Simulationsmethode der
QasmSimulatorzur Begrenzung der Bindungsdimension der MPS.Es gibt zwei Arten der Angleichung. Beide verwerfen die kleinsten Schmidt-Koeffizienten nach dem SVD-Algorithmus. Es gibt zwei Parameter, die den Grad der Annäherung steuern:
"matrix_product_state_max_bond_dimension"(int): Legt einen Grenzwert für die Anzahl der Schmidt-Koeffizienten fest, die am Ende des svd-Algorithmus erhalten bleiben. Koeffizienten, die diesen Grenzwert überschreiten, werden verworfen. (Voreinstellung: Keine, d. h. keine Begrenzung der Bindungsgröße)."matrix_product_state_truncation_threshold"(double): Verwirft die kleinsten Koeffizienten, deren Summe der Quadrate kleiner als dieser Schwellenwert ist. (Standard: 1e-16 ). -
Verbesserung der Leistung der Maßnahmenstichproben bei Verwendung der Simulationsmethode "matrix_product_state"
QasmSimulator. -
Hinzufügen der Unterstützung für
Delay,PhaseundSetPhaseImpulsbefehle zuqiskit.providers.aer.PulseSimulator. -
Verbesserung der Leistung von
qiskit.providers.aer.PulseSimulatordurch Zwischenspeicherung von Aufrufen der RHS-Funktion -
Einführung alternativer DE-Lösungsmethoden, spezifizierbar über
backend_optionsin derqiskit.providers.aer.PulseSimulator. -
Verbesserung der Leistung von Simulator-Ergebnisklassen durch Verwendung der Move-Semantik und Beseitigung unnötiger Kopien, die beim Kombinieren von Ergebnissen aus separaten Experimenten in das endgültige Ergebnisobjekt entstanden sind.
-
Erhebliche Verbesserung der Leistung der pybind11 Konvertierung von Simulatorergebnissen durch Verwendung der Move-Semantik, wo immer möglich, und durch Verschieben von Vektor- und Matrixergebnissen in Numpy-Arrays ohne Kopien.
-
Änderung der RNG-Engine für Simulatoren von 32-Bit Mersenne-Twister auf 64-Bit Mersenne-Twister-Engine.
-
Verbessert die Leistung der "Zustandsvektor"-Simulationsmethode von
qiskit.providers.aer.QasmSimulatorundqiskit.providers.aer.StatevectorSimulatordurch Verwendung von SIMD-Intrinsics auf Systemen, die den Befehlssatz AVX2 unterstützen. AVX2 unterstützung wird automatisch erkannt und zur Laufzeit aktiviert.
Anmerkungen zu Upgrades
-
Ändert das Build-System so, dass es den Conan-Paketmanager verwendet. Dieses Tool übernimmt die meisten der vom C++-Quellcode benötigten Abhängigkeiten. Für den ersten Build oder wenn Abhängigkeiten hinzugefügt oder aktualisiert werden, kann eine Internetverbindung erforderlich sein, um die erforderlichen Pakete herunterzuladen, wenn sie sich nicht in Ihrem lokalen Conan-Repository befinden.
Wenn Sie die Standalone-Version von qiskit-aer erstellen, müssen Sie zuerst conan mit installieren:
pip install conan -
Ändert die Art und Weise, wie Transpilationsdurchläufe in den C++-Controllerklassen gehandhabt werden, so dass jeder Durchlauf explizit aufgerufen werden muss. Dies ermöglicht eine bessere Anpassung, wann jeder Durchgang aufgerufen werden soll und mit welchen Parametern. Dies ermöglicht insbesondere die Einstellung unterschiedlicher Parameter für den Optimierungsdurchlauf der Gate-Fusion in Abhängigkeit von der Simulationsmethode QasmController.
-
Fügen Sie
gate_length_unitskwarg zuqiskit.providers.aer.noise.NoiseModel.from_device()hinzu, um benutzerdefiniertegate_lengthsin der Geräuschmodellfunktion zu spezifizieren, um Einheitenumwandlungen für internen Code zu handhaben. -
Hinzufügen des Controlled-Y ("cy")-Gatters zu den vom Stabilizer-Simulator unterstützten Gateset-Methoden.
-
Für Aer's Backend ist die jsonschema-Validierung von qobj-Eingabeobjekten aus terra nun opt-in statt standardmäßig aktiviert. Wenn Sie die Jsonschema-Validierung von qobj aktivieren möchten, setzen Sie den
validatekwarg in derqiskit.providers.aer.QasmSimualtor.run()Methode für das Backend-Objekt aufTrue. -
Fügt der Basissimulator-State-Klasse ein OpSet -Objekt hinzu, um die Validierung von Anweisungen, Gattern und Snapshots, die von Simulatoren unterstützt werden, zu erleichtern.
-
Überarbeitung der Klasse OpSet. OpSet in separate Header-Datei verschoben und
containsunddifferenceMethoden basierend aufstd::set::containsundstd::algorithm::set_differencehinzugefügt. Diese ersetzen die entfernten ungültigen und gültigen Anweisungen von OpSet,, allerdings in umgekehrter Reihenfolge. Er gibt eine Liste anderer Ops zurück, die nicht im aktuellen Opset enthalten sind, und nicht die Opset-Anweisungen, die nicht im anderen Opset enthalten sind. -
Verbessert die Überprüfung der Optimierung von Messproben. Der kostspielige Teil dieses Vorgangs wird nun einmal während der Schaltungskonstruktion durchgeführt und nicht mehr mehrmals während der Simulation, wenn der Speicherbedarf, die Simulationsmethode und die endgültige Ausführung überprüft werden.
Fehlerkorrekturen
-
Entfernen Sie "extended_stabilizer" aus den automatisch ausgewählten Simulationsmethoden. Dies ist erforderlich, da die erweiterte Stabilisierungsmethode nicht exakt ist und für bestimmte Schaltungen falsche Ergebnisse liefern kann, wenn der Benutzer nicht weiß, wie er die Konfigurationsparameter optimieren kann.
Die automatische Methode wählt jetzt nur noch die Methoden "Stabilisator", "Dichte_matrix" und "Zustandsvektor" aus. Wenn eine Nicht-Clifford-Schaltung ausgeführt wird, die zu groß für die statevector-Methode ist, wird eine Ausnahme ausgelöst, die vorschlägt, dass Sie stattdessen explizit die Methoden "extended_stabilizer" oder "matrix_product_state" verwenden könnten.
-
Deaktiviert die Gatterfusion für die Matrixprodukt-Zustandssimulationsmethode, da dies in einigen Fällen zu Problemen mit falschen Ergebnissen geführt hat.
-
Behebt einen Fehler, der zu einer falschen Kanalauswertung im
qiskit.providers.aer.PulseSimulatorführt. -
Behebung mehrerer kleinerer Fehler bei der Analyse von Hamiltonian-Edge-Fällen in der Klasse
qiskit.providers.aer.pulse.system_models.hamiltonian_model.HamiltonianModel.
Ignis- 0.4.0
Vorspiel
Die wichtigste Änderung in dieser Version ist ein Refactoring des Randomized Benchmarking Codes, um die aktualisierte Clifford Klasse qiskit.quantum_info.Clifford von Terra zu integrieren und die CNOT-Dihedral Klasse zu verbessern.
Neue Funktionen
- Die Funktion
qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()wurde überarbeitet und verwendet nun die aktualisierte Clifford-KlasseCliffordzu verwenden, um effizientes Randomized Benchmarking (RB) auf Clifford-Sequenzen mit mehr als 2 Qubits zu ermöglichen. Darüber hinaus wurde der Code der CNOT-Dihedral-Klasseqiskit.ignis.verification.randomized_benchmarking.CNOTDihedralüberarbeitet, um ihn effizienter zu machen, indem Numpy-Arrays verwendet werden und keine vorgenerierten Pickle-Dateien, die alle 2-Qubit-Gruppenelemente speichern. Die Funktionqiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()verfügt über die neue Funktion kwargrand_seed, mit der ein Seed für den Zufallszahlengenerator angegeben werden kann, der zur Erzeugung der RB-Schaltungen verwendet wird. Dies kann nützlich sein, um eine reproduzierbare Schaltung zu haben. - Die Funktion
qiskit.ignis.verification.qv_circuits()verfügt über die neue Funktion kwargseed, mit der ein Seed für den Zufallszahlengenerator angegeben werden kann, der zur Erzeugung der Quantum Volume-Schaltungen verwendet wird. Dies kann nützlich sein, um eine reproduzierbare Schaltung zu haben.
Anmerkungen zu Upgrades
- Die Funktion
qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()verwendet nun die aktualisierte Clifford-KlasseCliffordund die aktualisierte CNOT-Dihedral-Klasseqiskit.ignis.verification.randomized_benchmarking.CNOTDihedral, um ihre Ausgabe zu konstruieren, anstatt vorgenerierte Gruppentabellen für die Clifford- und CNOT-Dihedral-Gruppenelemente zu verwenden, die in Pickle-Dateien gespeichert waren. Dies kann zu geringfügigen Abweichungen von der Ausgabe der vorherigen Version führen. - Eine neue Anforderung scikit-learn wurde der Anforderungsliste hinzugefügt. Diese Abhängigkeit wurde in der Version 0.3.0 hinzugefügt, wurde aber in dieser Version nicht richtig als Abhängigkeit angezeigt. Dies würde zu einer
ImportErrorführen, wenn das Modulqiskit.ignis.measurement.discriminator.iq_discriminatorsimportiert würde. Dies ist nun korrekt als Abhängigkeit aufgeführt, so dassscikit-learnzusammen mit qiskit-ignis installiert wird. - Die Funktion
qiskit.ignis.verification.qv_circuits()verwendet nun die Klasse der SchaltungsbibliothekQuantumVolumeum ihre Ausgabe zu konstruieren, anstatt die Schaltung von Grund auf neu aufzubauen. Dies kann zu geringfügigen Abweichungen von der Ausgabe der vorherigen Version führen. - Tomographieausstatter können nun auch eine Liste von Ergebnisobjekten erhalten, anstatt eines einzelnen Ergebnisses, wie in Ausgabe #320 gefordert.
Hinweise zu veralteten Versionen
-
Die Funktion kwarg
interleaved_gatesfür die Funktionqiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()ist veraltet und wird in einer zukünftigen Version entfernt werden. Sie wird ersetzt durchinterleaved_elem. Die Hilfsfunktionenqiskit.ignis.verification.randomized_benchmarking.BasicUtils,qiskit.ignis.verification.randomized_benchmarking.CliffordUtilsundqiskit.ignis.verification.randomized_benchmarking.DihedralUtilswurden veraltet. Diese Klassen werden vonqiskit.ignis.verification.randomized_benchmarking.RBgroupabgelöst, das die für RB erforderlichen Gruppenoperationen durchführt. Die Klasseqiskit.ignis.verification.randomized_benchmarking.Cliffordwird abgelöst durchClifford. -
Die kwargs
qrundcrfür die Funktionqiskit.ignis.verification.qv_circuits()sind veraltet und werden in einer zukünftigen Version entfernt werden. Diese kwargs wurden für die Angabe einerqiskit.circuit.QuantumRegisterundqiskit.circuit.ClassicalRegisterin den generierten Quantum-Volume-Schaltungen zu verwenden, anstatt neue zu erstellen. Die Parameter wurden jedoch nie wirklich beachtet, und es wurde immer ein neues Register erstellt, unabhängig davon, ob sie gesetzt waren oder nicht. Dieses Verhalten ist unverändert und diese kwargs haben immer noch keinen Effekt, aber sie werden vor der Entfernung veraltet, um eine brechende Änderung für Benutzer zu vermeiden, die möglicherweise eine der beiden Einstellungen verwendet haben. -
Die Unterstützung für die Übergabe von Teilmengen von Qubits als Liste im Parameter
qubit_listsfür die Funktionqiskit.ignis.verification.qv_circuits()ist veraltet und wird in einer zukünftigen Version entfernt. In der Vergangenheit wurde dies verwendet, um ein Layout für die Schaltung auf einem Gerät zu spezifizieren. Mit anderen Worten, wenn man ein 5-Qubit-Gerät hätte und eine 2-Qubit-QV-Schaltung auf den Qubits 1, 3 und 4 dieses Geräts laufen lassen wollte. Sie würden[1, 3, 4]als eine der Listen inqubit_listseingeben, was eine virtuelle Schaltung mit 5 Qubits erzeugen würde und qv auf die Qubits 1, 3 und 4 in dieser virtuellen Schaltung anwenden würde. Diese Funktionalität ist jedoch nicht notwendig und überschneidet sich mit dem Konzept voninitial_layoutim Transpiler und der Frage, ob eine Schaltung mit einem Layout-Set eingebettet wurde. In Zukunft sollten Sie stattdessen einfachtranspile()oderexecute()ausführen, wobei das anfängliche Layout so eingestellt ist, dass dies geschieht. Die Ausführung des obigen Beispiels würde zum Beispiel so aussehen:from qiskit import execute from qiskit.ignis.verification import qv_circuits initial_layout = [1, 3, 4] qv_circs, _ = qv_circuits([list(range3)]) execute(qv_circuits, initial_layout=initial_layout)
Fehlerkorrekturen
- Behebung eines Fehlers bei der Position der von py:func:qiskit.ignis.characterization.calibrations.pulse_schedules.drag_schedules eingefügten Messimpulse. Behebt #465
Aqua- 0.7.5
Neue Funktionen
- Die weiche Abhängigkeit von CPLEX im ADMMOptimizer wurde entfernt. Die von ADMMOptimizer verwendeten Standardoptimierer sind nun MinimumEigenOptimizer für QUBO-Probleme und SlsqpOptimizer als kontinuierlicher Optimierer. Sie können CplexOptimizer weiterhin als Optimierer für ADMMOptimizer verwenden, aber es sollte explizit festgelegt werden.
- Neue Yahoo! finanzdienstleister geschaffen.
- Einführung von
QuadraticProgramConverter, einer abstrakten Klasse für Konverter.convert/interpretMethoden für Konverter anstelle vonencode/decodehinzugefügt.to_isingundfrom_isingzur KlasseQuadraticProgramhinzugefügt. Alle Parameter vonconvertin den Konstruktor verschoben, außername. Setter/Getter für Konverterparameter erstellt.auto_define_penaltyundinterpretfor``LinearEqualityToPenalty`` hinzugefügt. Die Fehlermeldungen der Konverter sind jetzt informativer. - Hinzufügen eines SLSQP-Optimierers
qiskit.optimization.algorithms.SlsqpOptimizerals Wrapper der entsprechenden SciPy Optimierungsmethode. Dies ist ein klassischer Optimierer, der nicht auf Quantenalgorithmen angewiesen ist und als Ersatz fürCobylaOptimizerverwendet werden kann. - Der Cobyla-Optimierer wurde modifiziert, um die im SLSQP-Optimierer eingeführte Mehrfachstartfunktion zu berücksichtigen. Standardmäßig läuft der Optimierer nicht im Mehrfachstartmodus.
- Die
SummedOpführt eine mathematisch korrektere Gleichheitsprüfung durch, bei der Ausdrücke wieX + X == 2*XundX + Z == Z + XzuTrueausgewertet werden.
Hinweise zu veralteten Versionen
- Die GSLS-Optimierungsklasse hat den Parameter
__init__max_iterzugunsten vonmaxiterveraltet. Die SPSA-Optimierungsklasse hat den Parameter__init__max_trialszugunsten vonmaxiterveraltet. die Funktion optimize_svm hat den Parametermax_iterszugunsten vonmaxiterveraltet. Die Klasse ADMMParameters hat den Parameter__init__max_iterzugunsten vonmaxiterveraltet. - Die ising-Konvertierungsklassen
qiskit.optimization.converters.QuadraticProgramToIsingundqiskit.optimization.converters.IsingToQuadraticProgramsind veraltet und werden in einer zukünftigen Version entfernt werden. Stattdessen sollten die Methodenqiskit.optimization.QuadraticProgramto_ising()undfrom_ising()verwendet werden. - Die Methode
pprint_as_stringfürqiskit.optimization.QuadraticProgramist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie einfach.pprint_as_string()mit der Ausgabe vonto_docplex() - Die Methode
prettyprintfürqiskit.optimization.QuadraticProgramist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie einfach.prettyprint()mit der Ausgabe vonto_docplex()
Fehlerkorrekturen
- Geändert in der Python-Version 3.8: Auf macOS, ist die Spawn-Start-Methode nun der Standard. Die Fork-Start-Methode sollte als unsicher angesehen werden, da sie zu Abstürzen in Unterprozessen führen kann. P_BFGS unterstützt jedoch kein Spawnen, so dass wir auf einen einzelnen Prozess zurückgreifen. Siehe #1109 <https://github.com/qiskit-community/qiskit-aqua/issues/1109> für weitere Informationen.
- Bindungsparameter in der
CircuitStateFnübernahmen nicht den Wert vonis_measurementund setzten immeris_measurement=False. Dies wurde behoben. - Zuvor erstellte SummedOp.to_matrix_op eine Liste MatrixOp’s (mit Numpy-Matrizen) und summierte sie dann, wobei ein einziges MatrixOp zurückgegeben wurde. Einige Algorithmen (z. B. vqe) erfordern die Summierung von Tausenden von Matrizen, was den Speicher beim Aufbau der Matrizenliste erschöpft. Bei dieser Änderung wird keine Liste erstellt. Vielmehr wird jeder Operand in der Summe in eine Matrix umgewandelt, zu einem Akkumulator addiert und verworfen.
- Der Wechsel von Backends in VQE von statevector zu qasm_simulator oder realem Gerät verursachte einen Fehler aufgrund von CircuitSampler inkompatibler Wiederverwendung. VQE wurde dahingehend geändert, dass immer eine neue CircuitSampler angelegt wird und eine neue Erwartung erstellt wird, wenn sie nicht vom Benutzer eingegeben wurde. Siehe #1153 <https://github.com/qiskit-community/qiskit-aqua/issues/1153> für weitere Einzelheiten.
- Exchange- und Wikipedia-Finanzanbieter wurden korrigiert, um Quandl-Daten korrekt zu verarbeiten. Siehe #775 <https://github.com/qiskit-community/qiskit-aqua/issues/775> für weitere Einzelheiten. Behebt einen Fehler bei der Teilung durch 0 bei der Berechnung des Mittelwertvektors und der Kovarianzmatrix von Finanzdienstleistern. Siehe #781 <https://github.com/qiskit-community/qiskit-aqua/issues/781> für weitere Einzelheiten.
- Die Eigenschaft
ListOp.combo_fnist bei mehreren Transformationen verloren gegangen, z. B. bei der Umwandlung in einen anderen Operatortyp, beim Traversieren, Reduzieren oder Multiplizieren. Dieses Attribut wird nun an den resultierenden Operator weitergegeben. - Bei der Auswertung einiger Operatorausdrücke, z. B. von
SummedOp``s and evaluations with the ``CircuitSampler, wurden Koeffizienten nicht korrekt behandelt oder ganz ignoriert. E.g. die Auswertung von~StateFn(0 * (I + Z)) @ Plusergab nicht 0 oder bei der Normierung von~StateFn(I) @ ((Plus + Minus) / sqrt(2))wurde ein Faktor vonsqrt(2)übersehen. Dies wurde behoben. OptimizationResultenthielt einige öffentliche Setter und Klassenvariablen warenOptional. Diese Korrektur macht alle Klassenvariablen schreibgeschützt, so dass mypy und pylint die Typen effektiver überprüfen können.MinimumEigenOptimizer.solveerzeugten Bitstrings in einem Ergebnis alsstr. Durch diese Korrektur wurde das Ergebnis wie bei den anderen Algorithmen inList[float]geändert. In der Dokumentation vonqiskit.optimization.algorithmsfehlten einige öffentliche Klassen, die sich auf Optimierungsalgorithmen beziehen. Diese Korrektur fügte alle diese Klassen zum Docstring hinzu. #1131 <https://github.com/qiskit-community/qiskit-aqua/issues/1131> für weitere Details.OptimizationResult.__init__nicht überprüft, ob die Größen vonxundvariablesübereinstimmen oder nicht (sie sollten übereinstimmen). Diese Korrektur fügt die Prüfung hinzu, die einen Fehler auslöst, wenn sie nicht übereinstimmen, und behebt Fehler, die durch die Prüfung entdeckt werden. Dieser Fix fügt auch fehlende Unit-Tests in Bezug aufOptimizationResult.variable_namesundOptimizationResult.variables_dictintest_convertershinzu. #1167 <https://github.com/qiskit-community/qiskit-aqua/issues/1167> für weitere Details.- Behebung der Parameterbindung in
OperatorStateFn, die nicht die Parameter des zugrundeliegenden Primitivs, sondern nur die Koeffizienten gebunden hat. op.eval(other), wobeiopvom TypOperatorBaseist, gibt manchmal stillschweigend einen unsinnigen Wert zurück, wenn die Anzahl der Qubits inopundothernicht gleich sind. Diese Korrektur führt zu einem korrekten Verhalten, d.h. es wird ein Fehler ausgelöst, anstatt einen Wert zurückzugeben, da die Eingabe in diesem Fall ungültig ist.- Die Methode
construct_circuitvonVQEgab bisher den auszuwertenden Erwartungswert als TypOperatorBasezurück. Diese Funktion wurde nachconstruct_expectationverlagert, undconstruct_circuitliefert eine Liste der Schaltkreise, die zur Berechnung des Erwartungswerts ausgewertet werden.
IBM Q Anbieter 0.8.0
Neue Funktionen
IBMQBackendhat jetzt eine neuereservations()Methode, die Reservierungsinformationen für das Backend zurückgibt, mit optionaler Filterung. Darüber hinaus können Sie jetzt mitprovider.backends.my_reservations()Ihre eigenen Reservierungen abfragen.qiskit.providers.ibmq.job.IBMQJob.result()löst eineIBMQJobFailureErrorAusnahme aus, wenn der Auftrag fehlgeschlagen ist. Die Ausnahmemeldung enthält nun den Grund für das Fehlschlagen des Auftrags, wenn der gesamte Auftrag aus einem einzigen Grund fehlgeschlagen ist.- Ein neues Attribut
client_versionwurde zuIBMQJobhinzugefügt undqiskit.result.Resultobjekt überqiskit.providers.ibmq.job.IBMQJob.result()abgerufen.client_versionist ein Wörterbuch, wobei der Schlüssel der Name und der Wert die Version des Clients ist, mit dem der Auftrag übermittelt wurde, z. B. Qiskit. - Die Funktion
least_busy()hat jetzt einen neuen, optionalen Parameterreservation_lookahead. Wenn angegeben oder voreingestellt, gilt ein Backend als nicht verfügbar, wenn es in den nächstennMinuten Reservierungen hat, wobeinder Wert vonreservation_lookaheadist. Wird beispielsweise der Standardwert von 60 verwendet, gelten alle Backends, die in den nächsten 60 Minuten Reservierungen haben, als nicht verfügbar. ManagedResultshat jetzt eine neue Methodecombine_results(), die die Ergebnisse aller verwalteten Aufträge kombiniert und ein einzigesResultobjekt zurückgibt. DiesesResultObjekt kann z.B. in den Methoden vonqiskit-ignisfitter verwendet werden.
Anmerkungen zu Upgrades
-
Die Zeitstempel in den folgenden Feldern sind jetzt in Ortszeit statt in UTC:
- Backend-Eigenschaften, die von
qiskit.providers.ibmq.IBMQBackend.properties()zurückgegeben werden. - Backend-Eigenschaften, die von
qiskit.providers.ibmq.job.IBMQJob.properties()zurückgegeben werden. estimated_start_timeundestimated_complete_timeinQueueInfo, zurückgegeben vonqiskit.providers.ibmq.job.IBMQJob.queue_info().dateinResult, zurückgegeben vonqiskit.providers.ibmq.job.IBMQJob.result().
Außerdem wird erwartet, dass der Parameter
datetimefürqiskit.providers.ibmq.IBMQBackend.properties()ebenfalls in Ortszeit angegeben wird, es sei denn, er enthält Informationen über die UTC-Zeitzone. - Backend-Eigenschaften, die von
-
websockets8.0 oder höher ist jetzt erforderlich, wenn Python 3.7 oder höher verwendet wird.websockets7.0 wird weiterhin für Python 3.6 oder darunter verwendet. -
Unter Windows wird die Richtlinie für Ereignisschleifen auf
WindowsSelectorEventLoopPolicygesetzt, anstatt die StandardeinstellungWindowsProactorEventLoopPolicyzu verwenden. Dies behebt das Problem, dass die Methodeqiskit.providers.ibmq.job.IBMQJob.result()unter Windows hängen bleiben konnte. Behebt #691
Hinweise zu veralteten Versionen
- Die Verwendung von
Qconfig.pyzum Speichern von IBM Quantum Experience-Anmeldeinformationen ist veraltet und wird in der nächsten Version entfernt. Sie sollten stattdessenqiskitrc(die Standardeinstellung) verwenden.
Fehlerkorrekturen
- Behebt ein Problem, bei dem ein Aufruf von
qiskit.providers.ibmq.IBMQBackend.jobs()hängen bleiben kann, wenn die Anzahl der zurückgegebenen Aufträge sehr groß ist. Korrekturen #674 - Behebt ein Problem, das beim Erstellen von Fehlerkarten in Jupyter für Backends, die offline sind, ein
ValueErrorauslöst. Korrekturen #706 qiskit.providers.ibmq.IBMQBackend.jobs()gibt nun die korrekte Liste derIBMQJobObjekte zurück, wenn derstatuskwarg auf'RUNNING'gesetzt ist.- Die Paketmetadaten wurden aktualisiert, um die Abhängigkeit von
qiskit-terra>= 0.14.0 korrekt wiederzugeben. Diese Abhängigkeit wurde implizit als Teil der Veröffentlichung von 0.7.0 hinzugefügt, war aber nicht in den Paketanforderungen enthalten, so dass es früher möglich war,qiskit-ibmq-providermit einer zu alten Version vonqiskit-terrazu installieren. Behebt #677