Qiskit 0.15 Versionshinweise
0.15.0
Terra- 0.12.0
Vorspiel
Die Version 0.12.0 enthält mehrere neue Funktionen und Fehlerkorrekturen. Die größte Änderung in dieser Version ist die Hinzufügung der Unterstützung von parametrischen Impulsen zu OpenPulse. Dies sind Impulsbefehle, die zur Beschreibung eines Impulses Parameter statt Abtastpunkte verwenden. 0.12.0 ist auch die erste Version, die Unterstützung für Python 3.8 bietet. Es markiert auch den Beginn der Verwerfung der Unterstützung für Python 3.5, die entfernt wird, wenn die Upstream-Community die Unterstützung einstellt.
Neue Funktionen
-
Der Pass
qiskit.transpiler.passes.CSPLayoutwurde um zwei neue Parameter erweitert:call_limitundtime_limit. Mit diesen Optionen lässt sich die Dauer des Durchlaufs begrenzen. Die Optioncall_limitbegrenzt die Anzahl der Aufrufe der rekursiven Funktion im Backtracking Solver. In ähnlicher Weise begrenzttime_limitdie Dauer (in Sekunden), die der Solver laufen darf. Die Standardwerte sind1000Anrufe bzw.10Sekunden. -
qiskit.pulse.Acquirekann nun auf ein einzelnes Qubit angewendet werden. Dadurch wird die Impulsprogrammierung konsistenter und übersichtlicher, da sich nun alle Operationen auf einen einzigen Kanal beziehen. Zum Beispiel:acquire = Acquire(duration=10) schedule = Schedule() schedule.insert(60, acquire(AcquireChannel(0), MemorySlot(0), RegisterSlot(0))) schedule.insert(60, acquire(AcquireChannel(1), MemorySlot(1), RegisterSlot(1))) -
Eine neue Methode
qiskit.transpiler.CouplingMap.draw()wurde hinzugefügt zuqiskit.transpiler.CouplingMaphinzugefügt, um ein Graphviz-Bild aus dem Diagramm der Kopplungskarte zu erzeugen. Zum Beispiel:from qiskit.transpiler import CouplingMap coupling_map = CouplingMap( [[0, 1], [1, 0], [1, 2], [1, 3], [2, 1], [3, 1], [3, 4], [4, 3]]) coupling_map.draw() -
Auf OpenPulse wurden parametrische Impulse hinzugefügt. Dies sind Impulsbefehle, die parametrisiert sind und vom Backend verstanden werden. Beliebige Impulsformen werden weiterhin durch den Befehl SamplePulse unterstützt. Die neuen unterstützten Pulsklassen sind:
qiskit.pulse.ConstantPulseqiskit.pulse.Dragqiskit.pulse.Gaussianqiskit.pulse.GaussianSquare
Sie können wie alle anderen Pulse-Befehle verwendet werden. Beispiel:
from qiskit.pulse import (Schedule, Gaussian, Drag, ConstantPulse, GaussianSquare) sched = Schedule(name='parametric_demo') sched += Gaussian(duration=25, sigma=4, amp=0.5j)(DriveChannel(0)) sched += Drag(duration=25, amp=0.1, sigma=5, beta=4)(DriveChannel(1)) sched += ConstantPulse(duration=25, amp=0.3+0.1j)(DriveChannel(1)) sched += GaussianSquare(duration=1500, amp=0.2, sigma=8, width=140)(MeasureChannel(0)) << sched.durationDer resultierende Zeitplan ähnelt einem SamplePulse Zeitplan, der mit
qiskit.pulse.pulse_liberstellt wurde. Die Methodeqiskit.pulse.Schedule.draw()kann weiterhin wie gewohnt verwendet werden. Der Befehl wird jedoch mit der Methodeqiskit.pulse.ParametricPulse.get_sample_pulse()in eineSamplePulseumgewandelt, so dass der angezeigte Impuls die kontinuierliche Funktion möglicherweise nicht auf die gleiche Weise abtastet wie das Backend.Diese Funktion kann verwendet werden, um Pulse-Programme für jedes Backend zu erstellen, aber die Pulse werden in
SamplePulseObjekte umgewandelt, wenn das Backend keine parametrischen Pulse unterstützt. Backends, die sie unterstützen, erhalten das folgende neue Attribut:backend.configuration().parametric_pulses: List[str] # e.g. ['gaussian', 'drag', 'constant']Beachten Sie, dass das Backend nicht alle in Qiskit definierten parametrischen Pulse unterstützen muss.
Wenn das Backend parametrische Impulse unterstützt und der Impulszeitplan mit ihnen erstellt wird, ist das zusammengesetzte Qobj deutlich kleiner. Die Größe einer PulseQobj, die vollständig mit parametrischen Impulsen aufgebaut ist, hängt nur von der Anzahl der Anweisungen ab, während die Größe einer PulseQobj, die auf andere Weise aufgebaut ist, mit der Dauer der Anweisungen wächst (da für jede Probe ein Wert angegeben werden muss).
-
Hilfsprogramme
qiskit.scheduler.measure()undqiskit.scheduler.measure_all()zum Modul qiskit.scheduler hinzugefügt. Diese Funktionen geben einqiskit.pulse.Scheduleobjekt zurück, das Qubits mit OpenPulse misst. Zum Beispiel:from qiskit.scheduler import measure, measure_all measure_q0_schedule = measure(qubits=[0], backend=backend) measure_all_schedule = measure_all(backend) measure_custom_schedule = measure(qubits=[0], inst_map=backend.defaults().instruction_schedule_map, meas_map=[[0]], qubit_mem_slots={0: 1}) -
Impuls
qiskit.pulse.Scheduleobjekte haben jetzt bessere Darstellungen, die für einfache Zeitpläne gültige Python Ausdrücke sein sollten. -
Die
qiskit.circuit.QuantumCircuitmethodenqiskit.circuit.QuantumCircuit.measure_active(),qiskit.circuit.QuantumCircuit.measure_all(), undqiskit.circuit.QuantumCircuit.remove_final_measurements()haben jetzt einen Zusatz kwarginplace. WenninplaceaufFalseeingestellt ist, gibt die Funktion eine geänderte Kopie der Schaltung zurück. Dies unterscheidet sich vom Standardverhalten, das das Schaltkreisobjekt an Ort und Stelle ändert und nichts zurückgibt. -
Der Klasse wurden mehrere neue Konstruktormethoden hinzugefügt
qiskit.transpiler.CouplingMapklasse hinzugefügt, um Objekte mit grundlegenden Qubit-Kopplungsgraphen zu erstellen. Die neuen Konstruktormethoden sind:Um beispielsweise eine Kopplungskarte von 5 Qubits zu erhalten, die in einer linearen Kette verbunden sind, können Sie jetzt die neuen Konstruktoren verwenden:
from qiskit.transpiler import CouplingMap coupling_map = CouplingMap.from_line(5) coupling_map.draw() -
Einführung eines neuen Passes
qiskit.transpiler.passes.CrosstalkAdaptiveSchedule. Mit diesem Durchgang sollen die Auswirkungen des Übersprechens auf ein Programm reduziert werden. Es verwendet Daten zur Charakterisierung des Übersprechens aus dem Backend, um Gatter zu planen. Wenn ein Gatterpaar ein hohes Übersprechen aufweist, werden sie mit Hilfe einer Barriere in Reihe geschaltet. Naive Serialisierung ist schädlich, weil sie Dekohärenzfehler verursacht. Daher wird in diesem Durchgang ein SMT-Optimierungsansatz verwendet, um einen Zeitplan zu berechnen, der die Auswirkungen des Übersprechens und der Dekohärenzfehler minimiert.Als Eingabe dient eine Schaltung, die bereits auf das Backend übertragen wurde, d.h. die Schaltung ist in Form von physikalischen Qubits ausgedrückt und Swap-Gates wurden eingefügt und bei Bedarf in CNOTs zerlegt. Unter Verwendung dieser Schaltung und der Daten zur Charakterisierung des Übersprechens wird eine Z3 -Optimierung verwendet, um eine neue geplante Schaltung als Ergebnis zu konstruieren.
Zur Verwendung des Passes in einem Stromkreis:
dag = circuit_to_dag(circ) pass_ = CrosstalkAdaptiveSchedule(backend_prop, crosstalk_prop) scheduled_dag = pass_.run(dag) scheduled_circ = dag_to_circuit(scheduled_dag)backend_propist einqiskit.providers.models.BackendPropertiesobjekt für das Ziel-Backend.crosstalk_propist ein Diktat, das die bedingten Fehlerquoten angibt. Für zwei Gatterg1undg2gibtcrosstalk_prop[g1][g2]die bedingte Fehlerrate vong1an, wenng1undg2gleichzeitig ausgeführt werden. Eine Methode zur Erzeugung voncrosstalk_propwird in einer zukünftigen Version von qiskit-ignis hinzugefügt werden. Bis dahin müssen Sie entweder die Übersprechungseigenschaften Ihres Geräts bereits kennen oder Ihre eigenen Experimente zur Gerätecharakterisierung manuell durchführen. -
Im voreingestellten Passmanager für die Optimierungsstufe 1,
qiskit.transpiler.preset_passmanagers.level_1_pass_manager()wennqiskit.transpiler.passes.TrivialLayoutlayoutpass nicht perfekt zu einer bestimmten Schaltung passt, wirdqiskit.transpiler.passes.DenseLayoutlayoutpass stattdessen verwendet. -
Hinzufügen einer neuen abstrakten Methode
qiskit.quantum_info.Operator.dot()zur abstrakten KlasseBaseOperatorhinzugefügt, so dass sie für alle Implementierungen dieser abstrakten Klasse enthalten ist, einschließlichqiskit.quantum_info.OperatorundQuantumChannel(z.B.,qiskit.quantum_info.Choi) Objekte. Diese Methode gibt die rechte Operatormultiplikationa.dot(b)zurück. Dies ist gleichbedeutend mit dem Aufruf der Methode operatorqiskit.quantum_info.Operator.compose()methode mit dem aufTruegesetzten kwargfront. -
Hinzugefügt
qiskit.quantum_info.average_gate_fidelity()undqiskit.quantum_info.gate_error()funktionen zumqiskit.quantum_infomodul für die Arbeit mitqiskit.quantum_info.OperatorundQuantumChannel(z.B.,qiskit.quantum_info.Choi) Objekten. -
Hinzufügen der
qiskit.quantum_info.partial_trace()funktion zu derqiskit.quantum_infodie mitqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixquantenzustandsklassen funktioniert. Zum Beispiel:from qiskit.quantum_info.states import Statevector from qiskit.quantum_info.states import DensityMatrix from qiskit.quantum_info.states import partial_trace psi = Statevector.from_label('10+') partial_trace(psi, [0, 1]) rho = DensityMatrix.from_label('10+') partial_trace(rho, [0, 1]) -
Wenn
qiskit.circuit.QuantumCircuit.draw()oderqiskit.visualization.circuit_drawer()mit demwith_layoutkwarg auf True (Standardeinstellung) aufgerufen wird, werden die physikalischen Qubits nun als ganze Zahlen dargestellt, um sie klar von den virtuellen Qubits zu unterscheiden.Beispiel:
from qiskit import QuantumCircuit from qiskit import transpile from qiskit.test.mock import FakeVigo qc = QuantumCircuit(3) qc.h(0) qc.cx(0, 1) qc.cx(0, 2) transpiled_qc = transpile(qc, FakeVigo()) transpiled_qc.draw(output='mpl') -
Neue Funktionen zur Zustandsmessung im
qiskit.quantum_infomodul hinzugefügt:qiskit.quantum_info.entropy(),qiskit.quantum_info.mutual_information(),qiskit.quantum_info.concurrence(), undqiskit.quantum_info.entanglement_of_formation(). Diese Funktionen arbeiten mit denqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen. -
Die Zerlegungsmethoden für Ein-Qubit-Gatter in
qiskit.quantum_info.synthesis.one_qubit_decompose.OneQubitEulerDecomposerwurden erweitert und umfassen nun auch die'ZXZ'Basis, die durch drei Rotationen um die Z,X,Z-Achse gekennzeichnet ist. Dies bedeutet nun, dass ein allgemeiner 2x2 Operator in die folgenden Basen zerlegt werden kann:U3,U1X,ZYZ,ZXZ,XYX,ZXZ.
Bekannte Probleme
-
Das Ausführen von Funktionen, die
qiskit.tools.parallel_map()(zum Beispielqiskit.execute.execute(),qiskit.compiler.transpile(), undqiskit.transpiler.PassManager.run()), funktionieren möglicherweise nicht, wenn sie von einem Skript aufgerufen werden, das außerhalb einesif __name__ == '__main__':-Blocks läuft, wenn Python 3.8 auf MacOS verwendet wird. Andere Umgebungen sind von diesem Problem nicht betroffen. Dies ist auf Änderungen in der Art und Weise zurückzuführen, wie parallele Prozesse von Python 3.8 auf MacOS gestartet werden. WennRuntimeErroroderAttributeErrorvon Skripten ausgelöst werden, dieparallel_map()direkt aufrufen, oder wenn sie eine Funktion aufrufen, die sie intern mit Python 3.8 auf MacOS verwendet, sollte das Problem durch Einbetten der Skriptaufrufe inif __name__ == '__main__':umgangen werden. Zum Beispiel:from qiskit import QuantumCircuit, QiskitError from qiskit import execute, BasicAer 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], BasicAer.get_backend('qasm_simulator'))geändert werden in
from qiskit import QuantumCircuit, QiskitError from qiskit import execute, BasicAer 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], BasicAer.get_backend('qasm_simulator')) if __name__ == '__main__': main()wenn bei Python 3.8 auf MacOS Fehler auftreten.
Anmerkungen zu Upgrades
-
Der Wert des Parameters
rep_timefür das Konfigurationsobjekt des Pulse-Backends wird jetzt in Sekunden und nicht mehr in Mikrosekunden angegeben. Das erste Mal, wenn einPulseBackendConfigurationObjekt initialisiert wird, wird es eine einzige Warnung an den Benutzer ausgeben, um dies anzuzeigen. -
Das Argument
rep_timefürqiskit.compiler.assemble()nimmt jetzt einen Wert in Sekunden und nicht in Mikrosekunden an. Dies wurde getan, um die Einheiten mit allem anderen in Puls zu machen. Wenn Sie einen Wert fürrep_timeübergeben haben, stellen Sie sicher, dass Sie den Wert aktualisieren, um diese Änderung zu berücksichtigen. -
Der Wert der Eigenschaft
base_gatevonqiskit.circuit.ControlledGateobjekten wurde von der Klasse des Basistors auf eine Instanz der Klasse des Basistors geändert. -
Die Eigenschaft
base_gate_namevonqiskit.circuit.ControlledGatewurde entfernt; Sie können den Namen des Basistors durch Zugriff aufbase_gate.nameauf dem Objekt erhalten. Zum Beispiel:from qiskit import QuantumCircuit from qiskit.extensions import HGate qc = QuantumCircuit(3) cch_gate = HGate().control(2) base_gate_name = cch_gate.base_gate.name -
Geändert
qiskit.quantum_info.Operatormagische Methoden, so dass__mul__(das von Pythons Multiplikationsoperation ausgeführt wird, wenn die linke Seite der Operation definiert ist) die rechte Matrixmultiplikation implementiert (d.h.qiskit.quantum_info.Operator.dot()), und__rmul__(das von Pythons Multiplikationsoperation von der rechten Seite der Operation ausgeführt wird, wenn auf der linken Seite nicht__mul__definiert ist) implementiert die skalare Multiplikation (d.h.qiskit.quantum_info.Operator.multiply()). Bisher haben beide Methoden die Skalarmultiplikation implementiert. -
Das zweite Argument der
qiskit.quantum_info.process_fidelity()funktion,target, ist jetzt optional. Wird keine Zieleinheit angegeben, so wird die Prozesstreue des Eingangskanals mit dem Identitätsoperator zurückgegeben. -
qiskit.compiler.assemble()respektiert nun den konfiguriertenmax_shotsWert für ein Backend. Wenn ein Wert fürshotskwarg angegeben wird, der die in der Backend-Konfiguration eingestellte maximale Anzahl von Schüssen überschreitet, löst die Funktion jetzt eineQiskitErrorAusnahme aus. Wenn kein shots-Argument angegeben wird, ist der Standardwert entweder 1024 (das vorherige Verhalten) odermax_shotsvom Backend, je nachdem, welcher Wert niedriger ist.
Hinweise zu veralteten Versionen
-
Methoden zum Hinzufügen von Gates zu einer
qiskit.circuit.QuantumCircuitmit abgekürzten Schlüsselwortargumenten (z.B.ctl,tgt) wurden umbenannt, um ihre Schlüsselwortargumente anschaulicher zu machen (z.B.control_qubit,target_qubit). Die alten Namen sind veraltet. Nachstehend finden Sie eine Tabelle mit den alten und neuen Aufrufsignaturen für die Methoden vonQuantumCircuit.AnweisungstypFrühere UnterschriftNeue Signaturqiskit.extensions.HGateqc.h(q)qc.h(qubit)qiskit.extensions.CHGateqc.ch(ctl, tgt)qc.ch((control_qubit, target_qubit))qiskit.extensions.IdGateqc.iden(q)qc.iden(qubit)qiskit.extensions.RGateqc.iden(q)qc.iden(qubit)qiskit.extensions.RGateqc.r(theta, phi, q)qc.r(theta, phi, qubit)qiskit.extensions.RXGateqc.rx(theta, q)qc.rx(theta, qubit)qiskit.extensions.CrxGateqc.crx(theta, ctl, tgt)qc.crx(theta, control_qubit, target_qubit)qiskit.extensions.RYGateqc.ry(theta, q)qc.ry(theta, qubit)qiskit.extensions.CryGateqc.cry(theta, ctl, tgt)qc.cry(theta, control_qubit, target_qubit)qiskit.extensions.RZGateqc.rz(phi, q)qc.rz(phi, qubit)qiskit.extensions.CrzGateqc.crz(theta, ctl, tgt)qc.crz(theta, control_qubit, target_qubit)qiskit.extensions.SGateqc.s(q)qc.s(qubit)qiskit.extensions.SdgGateqc.sdg(q)qc.sdg(qubit)qiskit.extensions.FredkinGateqc.cswap(ctl, tgt1, tgt2)qc.cswap(control_qubit, target_qubit1, target_qubit2)qiskit.extensions.TGateqc.t(q)qc.t(qubit)qiskit.extensions.TdgGateqc.tdg(q)qc.tdg(qubit)qiskit.extensions.U1Gateqc.u1(theta, q)qc.u1(theta, qubit)qiskit.extensions.Cu1Gateqc.cu1(theta, ctl, tgt)qc.cu1(theta, control_qubit, target_qubit)qiskit.extensions.U2Gateqc.u2(phi, lam, q)qc.u2(phi, lam, qubit)qiskit.extensions.U3Gateqc.u3(theta, phi, lam, q)qc.u3(theta, phi, lam, qubit)qiskit.extensions.Cu3Gateqc.cu3(theta, phi, lam, ctl, tgt)qc.cu3(theta, phi, lam, control_qubit, target_qubit)qiskit.extensions.XGateqc.x(q)qc.x(qubit)qiskit.extensions.CnotGateqc.cx(ctl, tgt)qc.cx(control_qubit, target_qubit)qiskit.extensions.ToffoliGateqc.ccx(ctl1, ctl2, tgt)qc.ccx(control_qubit1, control_qubit2, target_qubit)qiskit.extensions.YGateqc.y(q)qc.y(qubit)qiskit.extensions.CyGateqc.cy(ctl, tgt)qc.cy(control_qubit, target_qubit)qiskit.extensions.ZGateqc.z(q)qc.z(qubit)qiskit.extensions.CzGateqc.cz(ctl, tgt)qc.cz(control_qubit, target_qubit) -
Die Ausführung von
qiskit.pulse.Acquireauf mehreren Qubits ist veraltet und wird in einer zukünftigen Version entfernt werden. Außerdem sind die Parameterqiskit.pulse.AcquireInstructionmem_slotsundreg_slotsveraltet. Stattdessen solltenreg_slotundmem_slotverwendet werden. -
Das Attribut der
qiskit.providers.models.PulseDefaultsklassecircuit_instruction_mapist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie das neue Attributinstruction_schedule_mapverwenden. Dies geschah, um dem Typ des Wertes des Attributs zu entsprechen, der einInstructionScheduleMapist. -
Der Befehl
qiskit.pulse.PersistentValueist veraltet und wird in einer zukünftigen Version entfernt werden. Eine ähnliche Funktionalität kann mit dem Befehlqiskit.pulse.ConstantPulse(einer der neuen parametrischen Impulse) erreicht werden. Vergleichen Sie das Folgende:from qiskit.pulse import Schedule, PersistentValue, ConstantPulse, \ DriveChannel # deprecated implementation sched_w_pv = Schedule() sched_w_pv += PersistentValue(value=0.5)(DriveChannel(0)) sched_w_pv += PersistentValue(value=0)(DriveChannel(0)) << 10 # preferred implementation sched_w_const = Schedule() sched_w_const += ConstantPulse(duration=10, amp=0.5)(DriveChannel(0)) -
Python 3.5 unterstützung in qiskit-terra ist veraltet. Die Unterstützung wird in der ersten Veröffentlichung nach dem End-of-Life-Datum der Upstream-Community Python für diese Version (13.09.2020) eingestellt.
-
Der
require_cptpkwarg der Funktionqiskit.quantum_info.process_fidelity()funktion ist veraltet und wird in einer zukünftigen Version entfernt werden. Er wird durch zwei separate kwargsrequire_cpundrequire_tpersetzt. -
Die Einstellung des Parameters
scalefürqiskit.circuit.QuantumCircuit.draw()undqiskit.visualization.circuit_drawer()als erstes Positionsargument ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Siescaleals Schlüsselwortargument verwenden. -
Das Modul
qiskit.tools.qi.qiist veraltet und wird in einer zukünftigen Version entfernt werden. Die Legacy-Funktionen des Moduls wurden alle durch Funktionen und Klassen desqiskit.quantum_infomodul ersetzt. Nachfolgend finden Sie eine Tabelle mit den veralteten Funktionen und deren Ersatz:VeraltetErsatzwertqiskit.tools.partial_trace()qiskit.quantum_info.partial_trace()qiskit.tools.choi_to_pauli()qiskit.quantum_info.Choiundquantum_info.PTMqiskit.tools.chop()numpy.roundqiskit.tools.qi.qi.outernumpy.outerqiskit.tools.concurrence()qiskit.quantum_info.concurrence()qiskit.tools.shannon_entropy()qiskit.quantum_info.shannon_entropy()qiskit.tools.entropy()qiskit.quantum_info.entropy()qiskit.tools.mutual_information()qiskit.quantum_info.mutual_information()qiskit.tools.entanglement_of_formation()qiskit.quantum_info.entanglement_of_formation()qiskit.tools.is_pos_def()quantum_info.operators.predicates.is_positive_semidefinite_matrix -
Das Modul
qiskit.quantum_info.states.statesist veraltet und wird in einer zukünftigen Version entfernt werden. Die Legacy-Funktionen des Moduls wurden alle durch Funktionen und Klassen desqiskit.quantum_infomodul ersetzt.VeraltetErsatzwertqiskit.quantum_info.states.states.basis_stateqiskit.quantum_info.Statevector.from_label()qiskit.quantum_info.states.states.projectorqiskit.quantum_info.DensityMatrix -
Der Parameter
scalingder Methodedraw()für die ObjekteScheduleundPulsewurde veraltet und wird in einer zukünftigen Version entfernt. Stattdessen sollte der neue Parameterscaleverwendet werden. Dies geschah, um ein einheitliches Argument zwischen Impuls- und Schaltkreiszeichnungen zu haben. Zum Beispiel:#The consistency in parameters is seen below #For circuits circuit = QuantumCircuit() circuit.draw(scale=0.2) #For pulses pulse = SamplePulse() pulse.draw(scale=0.2) #For schedules schedule = Schedule() schedule.draw(scale=0.2)
Fehlerkorrekturen
- Zuvor hatte der Aufruf von
qiskit.circuit.QuantumCircuit.bind_parameters()vor der Zerlegung einer Schaltung dazu führen, dass die gebundenen Werte nicht korrekt in die zerlegten Gatter eingesetzt werden. Dies wurde so gelöst, dass Bindung und Abbau in beliebiger Reihenfolge erfolgen können. Behebt Problem #2482 und Problem #3509 - Der
Collect2qBlocksPass hatte bisher bei der Entscheidung, ob ein Tor in einen bestehenden Block eingebaut werden soll, die klassischen Bedingungen nicht berücksichtigt. In einigen Fällen führte dies dazu, dass die klassischen Bedingungen beim Transpilieren mitoptimization_level=3verloren gingen. Dieses Problem wurde behoben, so dass klassisch konditionierte Gatter nie in einem Block enthalten sind. Behebt Problem #3215 - Alle Ausgabearten für die Stromkreisschubladen in
qiskit.circuit.QuantumCircuit.draw()undqiskit.visualization.circuit_drawer()haben eine feste und/oder verbesserte Unterstützung für zeichnungsgesteuerte benutzerdefinierte Gatter. Behebt Problem #3546, Problem #3763 und Problem #3764 - Erklärungen und Beispiele wurden der Dokumentation für die
qiskit.circuit.QuantumCircuitmethoden zum Hinzufügen von Gates hinzugefügt:qiskit.circuit.QuantumCircuit.ccx(),qiskit.circuit.QuantumCircuit.ch(),qiskit.circuit.QuantumCircuit.crz(),qiskit.circuit.QuantumCircuit.cswap(),qiskit.circuit.QuantumCircuit.cu1(),qiskit.circuit.QuantumCircuit.cu3(),qiskit.circuit.QuantumCircuit.cx(),qiskit.circuit.QuantumCircuit.cy(),qiskit.circuit.QuantumCircuit.cz(),qiskit.circuit.QuantumCircuit.h(),qiskit.circuit.QuantumCircuit.iden(),qiskit.circuit.QuantumCircuit.rx(),qiskit.circuit.QuantumCircuit.ry(),qiskit.circuit.QuantumCircuit.rz(),qiskit.circuit.QuantumCircuit.s(),qiskit.circuit.QuantumCircuit.sdg(),qiskit.circuit.QuantumCircuit.swap(),qiskit.circuit.QuantumCircuit.t(),qiskit.circuit.QuantumCircuit.tdg(),qiskit.circuit.QuantumCircuit.u1(),qiskit.circuit.QuantumCircuit.u2(),qiskit.circuit.QuantumCircuit.u3(),qiskit.circuit.QuantumCircuit.x(),qiskit.circuit.QuantumCircuit.y(),qiskit.circuit.QuantumCircuit.z(). Behebt Problem #3400 - Korrekturen bei der Behandlung von Parametern für komplexe Zahlen in der Schaltkreisvisualisierung. Behebt Problem #3640
Sonstige Anmerkungen
- Die Transpilerpässe im Verzeichnis
qiskit.transpiler.passeswurden in Unterverzeichnisse aufgeteilt, um sie besser nach Funktionen zu kategorisieren. Sie sind nach wie vor alle über den Namensraumqiskit.transpiler.passeszugänglich.
Aer- 0.4.0
Hinzugefügt
NoiseModel.from_backendzur Erstellung eines grundlegenden Geräuschmodells für ein IBMQ-Backend hinzugefügt (#569)- Es wurden Multi-GPU-fähige Simulationsmethoden zu
QasmSimulator,StatevectorSimulatorundUnitarySimulatorhinzugefügt. Der qasm-Simulator verfügt über gpu-Versionen der Dichtematrix- und Zustandsvektor-Methoden und kann über"method": "density_matrix_gpu"oder"method": "statevector_gpu"inbackend_optionsaufgerufen werden. Die Methode statevector simulator gpu kann über"method": "statevector_gpu"aufgerufen werden. Die GPU-Methode des unitären Simulators kann über"method": "unitary_gpu"aufgerufen werden. Diese Backends verwenden CUDA und benötigen einen NVidia-Grafikprozessor.(#544)PulseSimulatorBackend hinzugefügt (#542)- Die Klassen
PulseSystemModelundHamiltonianModelwurden hinzugefügt, um Modelle zu repräsentieren, die inPulseSimulatorverwendet werden können (#496, #493)duffing_model_generatorshinzugefügt, umPulseSystemModelObjekte aus einer Liste von Parametern zu erzeugen (#516)- ODE-Funktionslöser nach C++ migriert (#442, #350)
- High-Level-Impuls-Simulator-Tests hinzugefügt (#379)
- CMake BLAS_LIB_PATH Flag, um den Pfad für die BLAS-Bibliothek zu setzen (#543)
Geändert
- Die Struktur des Verzeichnisses
srcwurde geändert, um den Quellcode des Simulators zu organisieren. Simulator-Controller-Header wurden nachsrc/controllersverschoben und Simulator-Methoden-State-Header befinden sich insrc/simulators(#544)- Mehrere Funktionen wurden an einen anderen Ort verschoben (#568): * Der Inhalt von
qiskit.provider.aer.noise.errorswurde in das Modulqiskit.providers.noiseverschoben. * Der Inhalt vonqiskit.provider.aer.noise.utilswurde in das Modulqiskit.provider.aer.utilsverschoben.- Die Optimierung zum Zusammenfassen aufeinanderfolgender Gatter in einer Schaltung (Fusion) wurde standardmäßig aktiviert (#579).
Veraltet
- Veraltete
utils.qobj_utilsFunktionen (#568)- Veraltet
qiskit.providers.aer.noise.device.basic_device_noise_model. Sie wird durch die MethodeNoiseModel.from_backend(#569) abgelöst
Entfernt
- Die Methoden
NoiseModel.as_dict,QuantumError.as_dict,ReadoutError.as_dictundQuantumError.kron, die in 0.3 (#568) veraltet waren, wurden entfernt.
Ignis- 0.2
Keine Änderung
Aqua- 0.6
Keine Änderung
IBM Q Anbieter 0.4.6
Hinzugefügt
-
Mehrere neue Methoden wurden zu
IBMQBackendhinzugefügt:wait_for_final_state()blockiert, bis der Auftrag abgeschlossen ist. Sie benötigt eine Callback-Funktion, die sie nach jeder Abfrage aufruft, um Feedback zu geben.active_jobs()gibt die an ein Backend übermittelten Aufträge zurück, die sich derzeit in einem nicht abgeschlossenen Status befinden.job_limit()gibt das Auftragslimit für ein Backend zurück.remaining_jobs_count()gibt die Anzahl der Aufträge zurück, die Sie an das Backend übermitteln können, bevor das Auftragslimit erreicht ist.
-
QueueInfohat jetzt eine neue Methodeformat(), die eine formatierte Zeichenkette mit den Warteschlangeninformationen zurückgibt. -
IBMQJobhat jetzt drei neue Methoden:done(),running(), undcancelled(), die zur Angabe des Auftragsstatus verwendet werden. -
qiskit.providers.ibmq.ibmqbackend.IBMQBackend.run()akzeptiert jetzt einen optionalen Parameter job_tags. Wenn angegeben, werden dem Job die job_tags zugewiesen, die später als Filter inqiskit.providers.ibmq.ibmqbackend.IBMQBackend.jobs()verwendet werden können. -
IBMQJobManagerverfügt jetzt über eine neue Methoderetrieve_job_set(), mit der Sie einen zuvor übermittelten Auftragssatz anhand der Auftragssatz-ID abrufen können.
Geändert
- Die Hierarchie von
Exceptionwurde durch mehr spezialisierte Klassen verfeinert. Sie können jedoch weiterhin ihre übergeordneten Ausnahmen abfangen (z. B.IBMQAccountError). Außerdem wurde die AusnahmeklasseIBMQApiUrlErrordurchIBMQAccountCredentialsInvalidUrlundIBMQAccountCredentialsInvalidTokenersetzt.
Veraltet
- Die Verwendung von Proxy-URLs ohne Protokoll (z. B.
http://) ist aufgrund der jüngsten Änderungen von Python veraltet.