Skip to main content
IBM Quantum Platform

Qiskit 0.20 Versionshinweise


0.20.1

Terra- 0.15.2

Fehlerkorrekturen

  • Beim Zugriff auf das definition -Attribut einer parametrisierten Gate -Instanz wurde das generierte QuantumCircuit mit einem ungültigen ParameterTable generiert, so dass das Lesen von QuantumCircuit.parameters oder der Aufruf von QuantumCircuit.bind_parameters die ungebundenen Parameter falsch meldete. Dieses Problem wurde behoben.
  • SXGate().inverse() hatte zuvor ein "sx_dg"-Gatter mit einem korrekten definition aber einem falschen to_matrix zurückgegeben. Diese wurde aktualisiert, so dass SXGate().inverse() eine SXdgGate() zurückgibt und umgekehrt.
  • Instruction.inverse()wenn es nicht von einer Unterklasse überschrieben wird, in einigen Fällen eine Gate Instanz mit einer falschen to_matrix Methode zurückgeben würde. Die Instanzen der falschen to_matrix Methoden wurden entfernt.
  • Bei C3XGate mit einem Wert ungleich Null angle hatte die Invertierung des Gatters über C3XGate.inverse() zuvor ein falsches inverses Gatter erzeugt. Dies wurde korrigiert.
  • Die Modi von MCXGate wurden 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 eines MCXVChain -Gatters enthält, einen Fehler auslöst.
  • Bisher wurde bei der Erstellung eines mehrfach gesteuerten Phasengatters über PhaseGate.control ein MCU1Gate Gatter zurückgegeben. Dies wurde korrigiert, so dass eine MCPhaseGate zurückgegeben wird.
  • Bisher führte der Versuch, eine Schaltung mit MCPhaseGate zu zerlegen, zu einem Fehler aufgrund einer Inkonsistenz in der Definition von MCPhaseGate. Dies wurde korrigiert.
  • QuantumCircuit.compose und DAGCircuit.compose hatten in einigen Fällen bedingte Gatter falsch übersetzt, wenn die Eingangsschaltung mehr als ein ClassicalRegister enthielt. Dieses Problem wurde behoben.
  • Es wurde ein Problem bei der Erstellung eines qiskit.result.Counts objekts aus einem leeren Datenwörterbuch. Dadurch wird ein leeres Counts objekt. Die Methode most_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 qregs und cregs entsprechend aktualisiert, nicht aber die Listen qubits und clbits . 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 Methode extend aktualisiert explizit die zwischengespeicherten Bitlisten.
  • Behebung von Fehlern in den konkreten Implementierungen der Methode meth:~qiskit.circuit.ControlledGate.inverse, die den Parameter ctrl_state nicht 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.DAGDependency zur 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.converters für die Konvertierung nach und von DAGDependency. Dabei handelt es sich um folgende Funktionen:

    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.passes Der erste, UnrollCustomDefinitionswickelt alle Anweisungen in der Schaltung entsprechend ihrer definition eigenschaft ab und hält an, wenn er entweder die angegebene basis_gates oder einen Satz von Gattern in der angegebenen EquivalenceLibrary. Die zweite, BasisTranslatorverwendet den Satz von Übersetzungen in der mitgelieferten EquivalenceLibrary um Schaltkreisanweisungen auf einer bestimmten Grundlage neu zu schreiben.

  • Ein neues translation_method Schlüsselwort-Argument wurde hinzugefügt zu transpile() 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 Beispiel transpile(circ, backend, translation_method='translator'). Folgende Auswahlmöglichkeiten sind gültig:

    Der Standardwert ist 'translator'.

  • Eine neue Klasse für den Umgang mit Zählergebnisdaten, qiskit.result.Countswurde hinzugefügt. Diese Klasse ist eine Unterklasse von dict und 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. A Counts objekt 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.DAGCircuit objekten wurde hinzugefügt: from_networkx(). Diese Methode nimmt ein networkx MultiDiGraph Objekt (in dem von to_networkx() zurückgegebenen Format) auf und gibt ein neues DAGCircuit objekt 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_qubits wurde hinzugefügt zu assemble() und execute() hinzugefügt. Bei Backends, die diese Funktion unterstützen, kann mit init_qubits gesteuert werden, ob das Backend, das die Schaltungen ausführt, zu Beginn jedes Schusses Initialisierungssequenzen einfügt. Standardmäßig ist dies auf True eingestellt, was bedeutet, dass alle Qubits zu Beginn jedes Schusses als im Grundzustand befindlich angenommen werden können. Wenn jedoch init_qubits auf False eingestellt 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_delay wurde hinzugefügt zu qiskit.compiler.assemble(), qiskit.execute.execute() und dem Konstruktor für PulseQobjtConfig.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 als rep_delays von einem Backend PulseBackendConfiguration objekt, auf das als backend.configuration().rep_delays zugegriffen werden kann.)

    Der rep_delay kwarg funktioniert nur auf Backends, die eine dynamische Wiederholungszeit zulassen. Dies wird auch in dem PulseBackendConfiguration objekt für ein Backend als das dynamic_reprate_enabled -Attribut angegeben. Wenn dynamic_reprate_enabled False ist, wird der für rep_time angegebene Wert für qiskit.compiler.assemble(), qiskit.execute.execute() oder der Konstruktor für PulseQobjtConfig anstelle von rep_delay verwendet. rep_time kann nur die Dauer eines Programms angegeben werden, nicht aber die Zeitspanne zwischen den Programmen.

  • Die qobj_schema.json JSON-Schemadatei in qiskit.schemas wurde aktualisiert, um rep_delay als optionale Konfigurationseigenschaft für pulse qobjs aufzunehmen.

  • Die backend_configuration_schema.json JSON Schema-Datei in mod:qiskit.schemas wurde aktualisiert, um rep_delay_range und default_rep_delay als optionale Eigenschaften für eine Puls-Backend-Konfiguration aufzunehmen.

  • Ein neues Attribut, global_phasedas für die Verfolgung der globalen Phase verwendet wird, wurde der qiskit.circuit.QuantumCircuit klasse 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_phase geä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 QuantumCircuit objekt verwenden, die globale Phase zu berücksichtigen. Zum Beispiel. mit dem global_phase attribut kann die to_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 DAGCircuit klasse hinzugefügt, damit die globale Phase bei der Konvertierung zwischen QuantumCircuit und DAGCircuit.

  • Zwei neue Klassen, AncillaRegister und AncillaQubit wurden dem qiskit.circuit modul hinzugefügt. Diese sind Unterklassen von QuantumRegister und Qubit und 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 Methode QuantumCircuit. Diese Methode gibt eine kontrollierte Version des QuantumCircuit objekts zurück, sowohl mit offenen als auch mit geschlossenen Kontrollen. Diese Funktionalität war bisher nur über die Gate klasse.

  • Eine neue Methode repeat() wurde der QuantumCircuit klasse 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 der QuantumCircuit klasse 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 Klasse qiskit.transpiler.Layout klasse hinzugefügt. Diese Methode ermöglicht die Umwandlung von zwei Layout objekte in eine Qubit-Map umzuwandeln, um zwei Schaltkreise zusammenzusetzen.

  • Dem Modul qiskit.test.mock.utils wurde eine neue Klasse ConfigurableFakeBackend hinzugefü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 der qiskit.circuit.EquivalenceLibrary klasse 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 zu qiskit.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 SetPhase an DriveChannel(0) angelegt werden, auf π\pi im Bogenmaß gesetzt.

  • Ein neuer Impulsbefehl ShiftFrequency wurde hinzugefügt qiskit.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 ShiftFrequency an DriveChannel(0) angelegt werden, die Frequenz der Hüllkurve a um 340MHz vermindert.

  • Eine neue Methode conjugate() wurde der ParameterExpression klasse hinzugefügt. Dies ermöglicht den Aufruf von numpy.conj() , ohne einen Fehler zu verursachen. Da ein ParameterExpression objekt real ist, wird es sich selbst zurückgeben. Dieses Verhalten entspricht dem von Python floats/ints.

  • Eine neue Klasse PhaseEstimation wurde hinzugefügt zu qiskit.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 ϕ\phi eines Eigenwerts e2πiϕe^{2\pi i\phi} eines unitären Operators UU abzuschätzen, sofern der entsprechende Eigenzustand ∣psi⟩|psi\rangle vorliegt. Das bedeutet

U∣ψ⟩=e2πiϕ∣ψ⟩U|\psi\rangle = e^{2\pi i\phi} |\psi\rangle

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.visualization funktion plot_state_qsphere() verfügt über einen neuen kwarg show_state_labels , der dazu dient, zu kontrollieren, ob jeder Blob in der qsphere-Visualisierung beschriftet ist. Standardmäßig ist dieser kwarg auf True eingestellt und zeigt standardmäßig die Basiszustände neben jedem Blob an. Diese Funktion kann deaktiviert werden, indem der show_state_labels kwarg auf False gesetzt wird, wodurch das vorherige Verhalten wiederhergestellt wird.

  • Die qiskit.visualization funktion plot_state_qsphere() hat einen neuen kwarg show_state_phases , der standardmäßig auf False gesetzt ist. Bei der Einstellung True wird die Phase der einzelnen Basiszustände angezeigt.

  • Die qiskit.visualization funktion plot_state_qsphere() hat einen neuen kwarg use_degrees , der standardmäßig auf False gesetzt ist. Bei der Einstellung True wird die Phase jedes Basiszustands in Grad angezeigt, zusammen mit dem Phasenkreis unten rechts.

  • Eine neue Klasse, QuadraticForm zum qiskit.circuit.library modul zur Implementierung einer quadratischen Form auf binären Variablen. Das Element der Schaltkreisbibliothek implementiert die Operation

∣x⟩∣0⟩↦∣x⟩∣Q(x)mod  2m⟩|x\rangle |0\rangle \mapsto |x\rangle |Q(x) \mod 2^m\rangle

für die quadratische Form QQ und mm output qubits. Das Ergebnis ist in den mm Ausgangsqubits im Zweierkomplement kodiert. Wird mm 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() und qiskit.quantum_info.DensityMatrix.expectation_value() methoden zur Berechnung des Erwartungswertes einer qiskit.quantum_info.Operator.

  • Für die seed kwarg im Konstruktor für qiskit.circuit.library.QuantumVolume numpy random Generator-Objekte kann nun verwendet werden. Zuvor waren nur ganze Zahlen eine gültige Eingabe. Dies ist nützlich bei der Integration von QuantumVolume als Teil einer größeren Funktion mit eigener Zufallszahlengenerierung, z. B. zur Erzeugung einer Folge von QuantumVolume schaltungen.

  • Die QuantumCircuit methode compose() verfügt über einen neuen kwarg front , 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, SabreLayout und SabreSwap für Layout und Routing wurden hinzugefügt zu qiskit.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 Funktion transpile() funktion ausgewählt werden, indem die layout_method kwarg auf 'sabre' und/oder die routing_method auf 'sabre' gesetzt wird, um die SabreLayout und SabreSwap entsprechend.

  • Hinzufügen der Methode replace() zu der qiskit.pulse.Schedule klasse hinzugefügt, mit der eine Impulsanweisung durch eine andere ersetzt werden kann. Zum Beispiel:

    .. code-block:: python

    von 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.library für die Gatter X\sqrt{X}, sein Adjungiertes X†\sqrt{X}^\dagger und gesteuertes X\sqrt{X} als SXGate, SXdgGate, und CSXGate. Sie können auch zu einem QuantumCircuit objekt hinzugefügt werden, indem die sx(), sxdg(), und csx() hinzugefügt werden.

  • Hinzufügen von Unterstützung für Reset Anweisungen zu qiskit.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 der seed() methode.

  • Die Methoden qiskit.circuit.ParameterExpression.subs() und qiskit.circuit.QuantumCircuit.assign_parameters() akzeptieren nun ParameterExpression als 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() methode to_gate() hat ein neues kwarg label , das verwendet werden kann, um ein Label für das Ausgabe Gate objekt. 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, und CPhaseGate mit den entsprechenden QuantumCircuit methoden u(), cu(), p(), und cp(). Das UGate gatter ist das generische Ein-Qubit-Rotationsgatter mit 3 Euler-Winkeln und das CUGate tor seine kontrollierte Version. CUGate hat 4 Parameter, um einer möglichen globalen Phase des U-Gatters Rechnung zu tragen. Die PhaseGate und CPhaseGate sind das allgemeine Phasentor in einem beliebigen Winkel und seine kontrollierte Version.

  • Ein neuer kwarg, cregbundle , wurde der Funktion qiskit.visualization.circuit_drawer() funktion und der QuantumCircuit methode draw(). Bei der Einstellung True werden die Kreuze in den Schaltkreisvisualisierungen für die Schubladen text und mpl zu einer einzigen Zeile gebündelt. Der Standardwert ist True. 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 Funktion qiskit.visualization.circuit_drawer() funktion und der QuantumCircuit methode draw(). Bei der Einstellung True wird 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, und MCXVChain) wurden ihre name Eigenschaften geändert, um ihre Implementierung genauer zu beschreiben: mcx_gray, mcx_recursive bzw. mcx_vchain . Zuvor teilten diese Gatter den Namen mcx mit MCXGate, was dazu führte, dass diese Gatter falsch transpiliert und simuliert wurden.

  • Standardmäßig verwenden die voreingestellten Pass-Manager in qiskit.transpiler.preset_passmanagers verwenden UnrollCustomDefinitions und BasisTranslator zur Handhabung von Basisänderungen anstelle des bisherigen Standards Unroller. 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 den translation_method kwarg auf transpile() 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 cregbundle kwarg für die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.visualization.circuit_drawer() funktion wurde auf True geä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 cregbundle kwarg auf False setzen. 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)
  • Schedule plotten mit qiskit.pulse.Schedule.draw() und qiskit.visualization.pulse_drawer() wird die Ereignistabelle nicht mehr standardmäßig angezeigt. Dies kann wieder aktiviert werden, indem der table kwarg auf True gesetzt wird.

  • Der Pass RemoveResetInZeroState war früher im voreingestellten Passmanager enthalten level_0_pass_manager() enthalten, der mit den Funktionen optimization_level=0 for transpile() und execute() verwendet wurde. Allerdings, RemoveResetInZeroState ist jedoch ein Optimierungsdurchgang und hätte nicht in die Optimierungsstufe 0 aufgenommen werden dürfen und wurde daher entfernt. Wenn Sie transpile() mit RemoveResetInZeroState verwenden Sie entweder einen benutzerdefinierten Passmanager oder optimization_level 1, 2 oder 3.

  • Der veraltete kwarg line_length für die qiskit.visualization.circuit_drawer() funktion und qiskit.circuit.QuantumCircuit.draw() methode wurde entfernt. Sie war seit der Veröffentlichung von 0.10.0 veraltet. Stattdessen können Sie die fold kwarg verwenden, um die Breite des Schaltplans anzupassen.

  • Der Ausgabemodus 'mpl' für die qiskit.circuit.QuantumCircuit.draw() methode und circuit_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_tokens Methoden für die qiskit.qasm.Qasm und qiskit.qasm.QasmParser wurden entfernt. Diese Methoden sind seit der Version 0.9.0 veraltet. Stattdessen sollten die Methoden qiskit.qasm.Qasm.generate_tokens() und qiskit.qasm.QasmParser.generate_tokens() verwendet werden.

  • Der veraltete kwarg channels_to_plot für qiskit.pulse.Schedule.draw(), qiskit.pulse.Instruction.draw(), qiskit.visualization.pulse.matplotlib.ScheduleDrawer.draw und pulse_drawer() wurde entfernt. Der kwarg ist seit der Version 0.11.0 veraltet und wurde durch den channels kwarg ersetzt, der identisch funktioniert und stattdessen verwendet werden sollte.

  • Das veraltete Attribut circuit_instruction_map der Klasse qiskit.providers.models.PulseDefaults klasse wurde entfernt. Dieses Attribut ist seit der Version 0.12.0 veraltet und wurde durch das Attribut instruction_schedule_map ersetzt, das stattdessen verwendet werden kann.

  • Die Methode union von Schedule und Instruction sind seit der Version 0.12.0 veraltet und wurden nun entfernt. Verwenden Sie qiskit.pulse.Schedule.insert() und qiskit.pulse.Instruction.meth() stattdessen die Methoden kwarg``time=0``.

  • Das veraltete Argument scaling für die Methode draw von Schedule und Instruction wurde seit der Veröffentlichung von 0.12.0 durch scale ersetzt und ist nun entfernt worden. Verwenden Sie stattdessen die Website scale kwarg.

  • Das veraltete period Argument für qiskit.pulse.library funktionen wurden seit der Veröffentlichung von 0.13.0 durch freq ersetzt und nun entfernt. Verwenden Sie die freq kwarg anstelle von period.

  • Das Modul qiskit.pulse.commands , das die Klassen von Commands enthielt, 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:

    Alt
    Neu
    Command(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.qi waren in der Version 0.12.0 veraltet und wurden nun entfernt. Verwenden Sie stattdessen das qiskit.quantum_info modul und die darin enthaltenen neuen Methoden und Klassen für die Arbeit mit Quantenzuständen und -operatoren.

  • Die Funktionen qiskit.quantum_info.basis_state und qiskit.quantum_info.projector sind ab Qiskit Terra 0.12.0 veraltet, da sie nun entfernt wurden. Verwenden Sie die qiskit.quantum_info.QuantumState und ihre Ableitungen qiskit.quantum_info.Statevector und qiskit.quantum_info.DensityMatrix um 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_paulivec sind 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.validation verwenden, wurden von terra entfernt. Da sie nicht mehr zum Bau von Objekten in Terra verwendet werden.

  • Die Marshmallow-Schemaklassen in qiskit.result wurden entfernt, da sie nicht mehr von der qiskit.result.Result klasse verwendet werden.

  • Die Ausgabe der to_dict() methode für die qiskit.result.Result klasse 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 Methode to_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_slots und reg_slots aus qiskit.pulse.instructions.Acquireentfernt, und channel, mem_slot und reg_slot werden 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 networkx qiskit.dagcircuit.DAGCircuit implementierung 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.pulse das für die Umwandlung von Zeitplan->Zeitplan zuständig ist, wurde von reschedule.py in transforms.py umbenannt. 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 PassManager erlaubte es den TransformationPass Klassen nicht, die PropertySet zu verändern. Diese Einschränkung wurde aufgehoben, so dass eine Klasse TransformationPass jetzt Lese- und Schreibzugriff auf PropertySet und DAGCircuit hat, während run(). Diese Änderung wurde vorgenommen, um TransformationPass Klassen effizienter zu machen, die einen internen Zustand haben, der für spätere Durchläufe in der PassManager. Ohne diese Änderung wäre eine zweite, redundante AnalysisPass erforderlich 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.visualization funktionen plot_state_hinton(), plot_bloch_multivector(), plot_state_city(), plot_state_paulivec(), und plot_state_qsphere() wurde von rho in state umbenannt. Die Übergabe des Wertes per Name an rho ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie das Argument entweder positionell übergeben oder den neuen Parameternamen state verwenden.

  • Das Modul qiskit.pulse.pulse_lib ist veraltet und wird in einer zukünftigen Version entfernt werden. Er wurde umbenannt in qiskit.pulse.library umbenannt, der stattdessen verwendet werden sollte.

  • Die Methode qiskit.circuit.QuantumCircuit methode mirror() ist veraltet und wird in einer zukünftigen Version entfernt werden. Die Methode qiskit.circuit.QuantumCircuit.reverse_ops() sollte stattdessen verwendet werden, da das Spiegeln mit dem Vertauschen der Ausgangsqubits der Schaltung verwechselt werden könnte. Die reverse_ops() methode kehrt nur die Reihenfolge der angewendeten Gates um, anstatt sie zu spiegeln.

  • Die Methoden qubits() und clbits() von qiskit.dagcircuit.DAGCircuit sind veraltet und werden in einer zukünftigen Version entfernt. Sie wurden durch die gleichnamigen Eigenschaften qiskit.dagcircuit.DAGCircuit.qubits und qiskit.dagcircuit.DAGCircuit.clbits ersetzt und werden zwischengespeichert, so dass der Zugriff auf sie wesentlich schneller erfolgt.

  • Die Methode get_sample_pulse für qiskit.pulse.library.ParametricPulse abgeleitete Klassen (zum Beispiel GaussianSquare) ist veraltet und wird in einer zukünftigen Version entfernt werden. Sie wurde durch die Methode get_waveform (zum Beispiel get_waveform()) ersetzt, die sich identisch verhalten sollte.

  • Die Verwendung des optionalen Arguments condition auf qiskit.dagcircuit.DAGNode, qiskit.dagcircuit.DAGCircuit.apply_operation_back(), und qiskit.dagcircuit.DAGCircuit.apply_operation_front() ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen wird die control in qiskit.circuit.Instruction instanzen, die zu einer DAGCircuit sollte verwendet werden.

  • Die Methoden der Klassen set_atol und set_rtol der Klassen qiskit.quantum_info.BaseOperator und qiskit.quantum_info.QuantumState (und ihrer Unterklassen wie Operator und qiskit.quantum_info.DensityMatrix) sind veraltet und werden in einer zukünftigen Version entfernt werden. Stattdessen sollte der Wert für die Attribute .atol und .rtol auf 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_paulivec sind veraltet und werden in einer zukünftigen Version entfernt werden. Die auf matplotlib basierenden äquivalenten Funktionen von qiskit.visualization, plot_bloch_multivector(), plot_state_city(), plot_state_qsphere(), plot_state_hinton(), plot_state_histogram(), und plot_state_paulivec() sollten stattdessen verwendet werden.

  • Die Eigenschaften acquires, mem_slots, und reg_slots der qiskit.pulse.instructions.Acquire pulse wurden veraltet und werden in einer zukünftigen Version entfernt. Sie sind lediglich Duplikate von channel, mem_slot, und reg_slot nachdem die früher veraltete Unterstützung für die Verwendung mehrerer Qubits in einem einzigen Acquire anweisung entfernt worden ist.

  • Die Klasse SamplePulse von qiskit.pulse wurde umbenannt in Waveform. SamplePulse ist veraltet und wird in einer zukünftigen Version entfernt werden.

  • Der Stilwörterbuchschlüssel cregbundle ist veraltet und wird in einer zukünftigen Version entfernt werden. Dies wurde ersetzt durch den kwarg cregbundle , der der qiskit.visualization.circuit_drawer() funktion und der QuantumCircuit methode draw().

Fehlerkorrekturen

  • Die qiskit.circuit.QuantumCircuit verfahren num_nonlocal_gates umfasste bisher Multi-Qubit qiskit.circuit.Instruction objekte (zum Beispiel, Barrier) in die Zählung der nichtlokalen Gatter einbezogen. Dies wurde korrigiert, so dass nur nicht-lokale Gate objekte gezählt werden. Korrekturen #4500

  • ControlledGate instanzen mit einem Satz ctrl_state wurden 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.QuantumRegister oder qiskit.circuit.ClassicalRegister durch Index bei der Verwendung von Numpy-Integer-Typen <https://numpy.org/doc/stable/user/basics.types.html> `__ würde zuvor eine CircuitError Exception auslösen. Dies wurde behoben, so dass Numpy-Typen zusätzlich zu Python 's eingebautem int Typ verwendet werden können. Behebt #3929.

  • Ein Fehler wurde behoben, bei dem nur der erste qiskit.pulse.configuration.Kernel oder qiskit.pulse.configuration.Discriminator für eine qiskit.pulse.Acquire verwendet wurde, wenn es mehrere Acquires gleichzeitig in einer qiskit.pulse.Schedule.

  • Die SI-Einheit, die für die Erstellung von qiskit.pulse.SetFrequency -Objekten verwendet wird, ist Hz, aber wenn ein PulseQobjInstruction objekt aus einer SetFrequency Instanz 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 AttributeError ausgelöst wird, wenn der Aufrufer versucht, auf ein Attribut zuzugreifen, das nur ControlledGate objekt haben. Dieses Problem wurde durch Hinzufügen eines Getters und Setters für num_ctrl_qubits hinzugefügt, um zu überprüfen, ob ein gültiger Wert verwendet wird. Korrekturen #4576

  • Offene Kontrollen wurden durch die Modifizierung eines Gate objekte definition. 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 Durchgang Unroller so 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_barriers in der ZZFeatureMap klasse 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 die qiskit.circuit.QuantumCircuit methode draw() und die qiskit.visualization.circuit_drawer() funktion wurde nicht richtig skaliert, wenn die kwarg scale gesetzt 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.Statevector und qiskit.quantum_info.DensityMatrix klassen nach Schaltkreisen, die Barrier Anweisungen enthalten, eine Ausnahme auslösen. Behebt #4461

  • Wenn früher ein QuantumCircuit ein Gate mit einer klassischen Bedingung enthielt, schlug der Transpiler manchmal fehl, wenn er optimization_level=3 auf transpile() oder execute() ein UnboundLocalError auslösen. Dies wurde durch eine Aktualisierung des ConsolidateBlocks passes, 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 die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.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' auf True gesetzt, und die Indexnummern am Anfang der Spalte wurden nicht richtig ausgerichtet. Dies wurde behoben.

  • Bei der Verwendung von cregbunde=True mit dem 'mpl' output backend für die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.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 die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.visualization.circuit_drawer() funktion CSwapGate gatter und ein kontrolliertes RZZGate werden Gatter nun mit den entsprechenden Symbolen statt in einem Kasten angezeigt.

  • Bei Verwendung des 'mpl' Ausgabe-Backends für die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.visualization.circuit_drawer() funktionsgesteuerte Gatter, die mit der Methode to_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 die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.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 die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.visualization.circuit_drawer() funktion werden generische Gates, die durch direkte Instanziierung von qiskit.circuit.Gate methode erstellt wurden, wird nun die richtige Hintergrundfarbe für das Tor angezeigt. Behebt #4496.

  • Bei Verwendung des 'mpl' Ausgabe-Backends für die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.visualization.circuit_drawer() funktion wurde ein AttributeError behoben, das bei der Verwendung von Isometry oder Initialize auftrat. Behebt #4439.

  • Bei Verwendung des 'mpl' Ausgabe-Backends für die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.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 die qiskit.circuit.QuantumCircuit.draw() methode und qiskit.visualization.circuit_drawer() die Funktion fold kwarg auf -1 setzen, wird die Schaltung nun korrekt ohne Faltung angezeigt. Behebt #4506.

  • Parametrische Impulse von qiskit.pulse.library.discrete haben jetzt standardmäßig Null-Enden von parametrischen Impulsen. Die Endpunkte sind so definiert, dass für eine Funktion f(x)f(x) dann f(−1)=f(duration+1)=0f(-1) = f(duration + 1) = 0. Behebt #4317

Sonstige Anmerkungen

  • Die qiskit.result.Result klasse, 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.QasmSimulator um die Unterstützung von Pauli-Erwartungswert-Snapshots. Fügen Sie mit der Erweiterung qiskit.providers.aer.extensions.SnapshotExpectationValue Schnappschü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.QasmSimulator in den Backends qiskit.providers.aer.StatevectorSimulator und qiskit.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.SnapshotExpectationValue
    • qiskit.providers.aer.extensions.SnapshotProbabilities
    • qiskit.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 QasmSimulator zur 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, Phase und SetPhase Impulsbefehle zu qiskit.providers.aer.PulseSimulator.

  • Verbesserung der Leistung von qiskit.providers.aer.PulseSimulator durch Zwischenspeicherung von Aufrufen der RHS-Funktion

  • Einführung alternativer DE-Lösungsmethoden, spezifizierbar über backend_options in der qiskit.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.QasmSimulator und qiskit.providers.aer.StatevectorSimulator durch 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_units kwarg zu qiskit.providers.aer.noise.NoiseModel.from_device() hinzu, um benutzerdefinierte gate_lengths in 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 validate kwarg in der qiskit.providers.aer.QasmSimualtor.run() Methode für das Backend-Objekt auf True.

  • 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 contains und difference Methoden basierend auf std::set::contains und std::algorithm::set_difference hinzugefü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.PulseSimulator fü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-Klasse Cliffordzu 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-Klasse qiskit.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 Funktion qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() verfügt über die neue Funktion kwarg rand_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 kwarg seed , 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-Klasse Clifford und die aktualisierte CNOT-Dihedral-Klasse qiskit.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 ImportError führen, wenn das Modul qiskit.ignis.measurement.discriminator.iq_discriminators importiert würde. Dies ist nun korrekt als Abhängigkeit aufgeführt, so dass scikit-learn zusammen mit qiskit-ignis installiert wird.
  • Die Funktion qiskit.ignis.verification.qv_circuits() verwendet nun die Klasse der Schaltungsbibliothek QuantumVolume um 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_gates für die Funktion qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq() ist veraltet und wird in einer zukünftigen Version entfernt werden. Sie wird ersetzt durch interleaved_elem. Die Hilfsfunktionen qiskit.ignis.verification.randomized_benchmarking.BasicUtils, qiskit.ignis.verification.randomized_benchmarking.CliffordUtils und qiskit.ignis.verification.randomized_benchmarking.DihedralUtils wurden veraltet. Diese Klassen werden von qiskit.ignis.verification.randomized_benchmarking.RBgroup abgelöst, das die für RB erforderlichen Gruppenoperationen durchführt. Die Klasse qiskit.ignis.verification.randomized_benchmarking.Clifford wird abgelöst durch Clifford.

  • Die kwargs qr und cr für die Funktion qiskit.ignis.verification.qv_circuits() sind veraltet und werden in einer zukünftigen Version entfernt werden. Diese kwargs wurden für die Angabe einer qiskit.circuit.QuantumRegister und qiskit.circuit.ClassicalRegister in 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_lists für die Funktion qiskit.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 in qubit_lists eingeben, 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 von initial_layout im Transpiler und der Frage, ob eine Schaltung mit einem Layout-Set eingebettet wurde. In Zukunft sollten Sie stattdessen einfach transpile() oder execute() 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/interpret Methoden für Konverter anstelle von encode/decode hinzugefügt. to_ising und from_ising zur Klasse QuadraticProgram hinzugefügt. Alle Parameter von convert in den Konstruktor verschoben, außer name. Setter/Getter für Konverterparameter erstellt. auto_define_penalty und interpret for``LinearEqualityToPenalty`` hinzugefügt. Die Fehlermeldungen der Konverter sind jetzt informativer.
  • Hinzufügen eines SLSQP-Optimierers qiskit.optimization.algorithms.SlsqpOptimizer als Wrapper der entsprechenden SciPy Optimierungsmethode. Dies ist ein klassischer Optimierer, der nicht auf Quantenalgorithmen angewiesen ist und als Ersatz für CobylaOptimizer verwendet 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 SummedOp führt eine mathematisch korrektere Gleichheitsprüfung durch, bei der Ausdrücke wie X + X == 2*X und X + Z == Z + X zu True ausgewertet werden.

Hinweise zu veralteten Versionen

  • Die GSLS-Optimierungsklasse hat den Parameter __init__ max_iter zugunsten von maxiter veraltet. Die SPSA-Optimierungsklasse hat den Parameter __init__ max_trials zugunsten von maxiter veraltet. die Funktion optimize_svm hat den Parameter max_iters zugunsten von maxiter veraltet. Die Klasse ADMMParameters hat den Parameter __init__ max_iter zugunsten von maxiter veraltet.
  • Die ising-Konvertierungsklassen qiskit.optimization.converters.QuadraticProgramToIsing und qiskit.optimization.converters.IsingToQuadraticProgram sind veraltet und werden in einer zukünftigen Version entfernt werden. Stattdessen sollten die Methoden qiskit.optimization.QuadraticProgram to_ising() und from_ising() verwendet werden.
  • Die Methode pprint_as_string für qiskit.optimization.QuadraticProgram ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie einfach .pprint_as_string() mit der Ausgabe von to_docplex()
  • Die Methode prettyprint für qiskit.optimization.QuadraticProgram ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie einfach .prettyprint() mit der Ausgabe von to_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 von is_measurement und setzten immer is_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_fn ist 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)) @ Plus ergab nicht 0 oder bei der Normierung von ~StateFn(I) @ ((Plus + Minus) / sqrt(2)) wurde ein Faktor von sqrt(2) übersehen. Dies wurde behoben.
  • OptimizationResult enthielt einige öffentliche Setter und Klassenvariablen waren Optional. Diese Korrektur macht alle Klassenvariablen schreibgeschützt, so dass mypy und pylint die Typen effektiver überprüfen können. MinimumEigenOptimizer.solve erzeugten Bitstrings in einem Ergebnis als str. Durch diese Korrektur wurde das Ergebnis wie bei den anderen Algorithmen in List[float] geändert. In der Dokumentation von qiskit.optimization.algorithms fehlten 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 von x und variables ü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 auf OptimizationResult.variable_names und OptimizationResult.variables_dict in test_converters hinzu. #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), wobei op vom Typ OperatorBase ist, gibt manchmal stillschweigend einen unsinnigen Wert zurück, wenn die Anzahl der Qubits in op und other nicht 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_circuit von VQE gab bisher den auszuwertenden Erwartungswert als Typ OperatorBase zurück. Diese Funktion wurde nach construct_expectation verlagert, und construct_circuit liefert eine Liste der Schaltkreise, die zur Berechnung des Erwartungswerts ausgewertet werden.

IBM Q Anbieter 0.8.0

Neue Funktionen

  • IBMQBackend hat jetzt eine neue reservations() Methode, die Reservierungsinformationen für das Backend zurückgibt, mit optionaler Filterung. Darüber hinaus können Sie jetzt mit provider.backends.my_reservations() Ihre eigenen Reservierungen abfragen.
  • qiskit.providers.ibmq.job.IBMQJob.result() löst eine IBMQJobFailureError Ausnahme 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_version wurde zu IBMQJob hinzugefügt und qiskit.result.Result objekt über qiskit.providers.ibmq.job.IBMQJob.result() abgerufen. client_version ist 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 Parameter reservation_lookahead. Wenn angegeben oder voreingestellt, gilt ein Backend als nicht verfügbar, wenn es in den nächsten n Minuten Reservierungen hat, wobei n der Wert von reservation_lookahead ist. Wird beispielsweise der Standardwert von 60 verwendet, gelten alle Backends, die in den nächsten 60 Minuten Reservierungen haben, als nicht verfügbar.
  • ManagedResults hat jetzt eine neue Methode combine_results() , die die Ergebnisse aller verwalteten Aufträge kombiniert und ein einziges Result objekt zurückgibt. Dieses Result Objekt kann z.B. in den Methoden von qiskit-ignis fitter 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_time und estimated_complete_time in QueueInfo, zurückgegeben von qiskit.providers.ibmq.job.IBMQJob.queue_info().
    • date in Result, zurückgegeben von qiskit.providers.ibmq.job.IBMQJob.result().

    Außerdem wird erwartet, dass der Parameter datetime für qiskit.providers.ibmq.IBMQBackend.properties() ebenfalls in Ortszeit angegeben wird, es sei denn, er enthält Informationen über die UTC-Zeitzone.

  • websockets 8.0 oder höher ist jetzt erforderlich, wenn Python 3.7 oder höher verwendet wird. websockets 7.0 wird weiterhin für Python 3.6 oder darunter verwendet.

  • Unter Windows wird die Richtlinie für Ereignisschleifen auf WindowsSelectorEventLoopPolicy gesetzt, anstatt die Standardeinstellung WindowsProactorEventLoopPolicy zu verwenden. Dies behebt das Problem, dass die Methode qiskit.providers.ibmq.job.IBMQJob.result() unter Windows hängen bleiben konnte. Behebt #691

Hinweise zu veralteten Versionen

  • Die Verwendung von Qconfig.py zum Speichern von IBM Quantum Experience-Anmeldeinformationen ist veraltet und wird in der nächsten Version entfernt. Sie sollten stattdessen qiskitrc (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 ValueError auslöst. Korrekturen #706
  • qiskit.providers.ibmq.IBMQBackend.jobs() gibt nun die korrekte Liste der IBMQJob Objekte zurück, wenn der status kwarg 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-provider mit einer zu alten Version von qiskit-terra zu installieren. Behebt #677
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.