Skip to main content
IBM Quantum Platform

Qiskit 0.12 Versionshinweise


0.12.0

Terra- 0.9

Vorspiel

Die Version 0.9 enthält viele neue Funktionen und viele Fehlerkorrekturen. Die größten Änderungen in dieser Version sind neue Debugging-Funktionen für PassManagers. Dazu gehört eine Funktion zur Visualisierung einer PassManager,, die Möglichkeit, eine Callback-Funktion zu einer PassManager, hinzuzufügen, und die Protokollierung von Durchläufen auf der PassManager. Darüber hinaus standardisiert diese Version die Art und Weise, wie Sie ein erstes Layout für Ihre Schaltung festlegen können. So kann man nun initial_layout den kwarg-Parameter auf qiskit.compiler.transpile() und qiskit.execute() nutzen und die Qubits in der Schaltung werden auf die gewünschten Qubits auf dem Gerät gelegt. Bei der Visualisierung von Schaltkreisen wird dies nun auch bei der Visualisierung eines Schaltkreises, der mit einem Layout umgesetzt wurde, deutlich angezeigt.

Neue Funktionen

  • Ein DAGCircuit Objekt (d.h. die graphische Darstellung eines QuantumCircuit, in der die Abhängigkeiten der Operationen explizit sind) kann nun mit der Methode .draw() visualisiert werden. Dies steht im Einklang mit der Philosophie von Qiskit, die auf eine einfache Visualisierung abzielt. Andere Objekte, die eine Methode .draw() unterstützen, sind QuantumCircuit, PassManager und Schedule.

  • Eine neue Visualisierungsfunktion qiskit.visualization.plot_error_map() wurde hinzugefügt, um die Fehlerkarte für ein bestimmtes Backend darzustellen. Es nimmt ein Backend-Objekt vom qiskit-ibmq-provider auf und zeichnet die aktuelle Fehlerkarte für dieses Gerät.

  • Sowohl qiskit.QuantumCircuit.draw() als auch qiskit.visualization.circuit_drawer() unterstützen nun die Kommentierung der Qubits in der Visualisierung mit Layout-Informationen. Wenn das QuantumCircuit Objekt, das gezeichnet wird, Layout-Metadaten enthält (die normalerweise nur in der Schaltkreisausgabe von transpile() Aufrufen gesetzt werden), wird dieses Layout standardmäßig im Diagramm angezeigt. Dies gilt für alle Schaltkreisschubladen-Backends. Zum Beispiel:

    from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
    from qiskit.compiler import transpile
    
    qr = QuantumRegister(2, 'userqr')
    cr = ClassicalRegister(2, 'c0')
    qc = QuantumCircuit(qr, cr)
    qc.h(qr[0])
    qc.cx(qr[0], qr[1])
    qc.y(qr[0])
    qc.x(qr[1])
    qc.measure(qr, cr)
    
    # Melbourne coupling map
    coupling_map = [[1, 0], [1, 2], [2, 3], [4, 3], [4, 10], [5, 4],
                    [5, 6], [5, 9], [6, 8], [7, 8], [9, 8], [9, 10],
                    [11, 3], [11, 10], [11, 12], [12, 2], [13, 1],
                    [13, 12]]
    qc_result = transpile(qc, basis_gates=['u1', 'u2', 'u3', 'cx', 'id'],
                          coupling_map=coupling_map, optimization_level=0)
    qc.draw(output='text')

    ergibt ein Diagramm wie:

                      ┌──────────┐┌──────────┐┌───┐┌──────────┐┌──────────────────┐┌─┐
       (userqr0) q0|0>┤ U2(0,pi) ├┤ U2(0,pi) ├┤ X ├┤ U2(0,pi) ├┤ U3(pi,pi/2,pi/2) ├┤M├───
                      ├──────────┤└──────────┘└─┬─┘├──────────┤└─┬─────────────┬──┘└╥┘┌─┐
       (userqr1) q1|0>┤ U2(0,pi) ├──────────────■──┤ U2(0,pi) ├──┤ U3(pi,0,pi) ├────╫─┤M├
                      └──────────┘                 └──────────┘  └─────────────┘    ║ └╥┘
      (ancilla0) q2|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla1) q3|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla2) q4|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla3) q5|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla4) q6|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla5) q7|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla6) q8|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
      (ancilla7) q9|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
     (ancilla8) q10|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
     (ancilla9) q11|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
    (ancilla10) q12|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
    (ancilla11) q13|0>──────────────────────────────────────────────────────────────╫──╫─
                                                                                    ║  ║
              c0_0: 0 ══════════════════════════════════════════════════════════════╩══╬═
                                                                                       ║
              c0_1: 0 ═════════════════════════════════════════════════════════════════╩═

    Wenn Sie nicht möchten, dass das Layout auf transpilierten Schaltkreisen (oder anderen Schaltkreisen mit einem Layout) angezeigt wird, gibt es einen neuen booleschen kwarg für beide Funktionen, with_layout (Standardeinstellung True), der, wenn er auf False gesetzt wird, die Layoutbeschriftung in den Ausgangsschaltkreisen deaktiviert.

  • Ein neuer Analysedurchgang CountOpsLongest wurde hinzugefügt, um die Anzahl der Operationen auf dem längsten Pfad des DAGCircuits zu ermitteln. Wenn es verwendet wird, wird ein count_ops_longest_path Schlüssel zum Property Set Dictionary hinzugefügt. Sie können es zu Ihrem Passmanager mit etwas wie hinzufügen:

    from qiskit.transpiler.passes import CountOpsLongestPath
    from qiskit.transpiler.passes import CxCancellation
    from qiskit.transpiler import PassManager
    
    pm = PassManager()
    pm.append(CountOpsLongestPath())

    und greifen Sie dann über den Eigenschaftswert auf den längsten Pfad zu, z. B. mit:

    pm.append(
        CxCancellation(),
        condition=lambda property_set: property_set[
            'count_ops_longest_path'] < 5)

    die eine Bedingung für diesen Durchgang auf der Grundlage des längsten Pfades festlegt.

  • Zwei neue Funktionen, sech() und sech_deriv() , wurden dem Modul qiskit.pulse.pulse_lib der Impulsbibliothek hinzugefügt, um ein unnormalisiertes hyperbolisches Sekantenobjekt SamplePulse bzw. ein unnormalisiertes hyperbolisches Sekantenderviativobjekt SamplePulse zu erzeugen.

  • Der Methode QuantumCircuit.draw() und der Funktion qiskit.visualization.circuit_drawer() wurde eine neue kwarg-Option vertical_compression hinzugefügt. Diese Option funktioniert nur mit dem Backend text . Diese Option kann entweder auf high, medium (Standardeinstellung) oder low gesetzt werden, um einzustellen, wie viel vertikaler Platz für die Ausgabevisualisierung verwendet wird.

  • Der Methode QuantumCircuit.draw() und der Funktion qiskit.visualization.circuit_drawer() wurde eine neue boolesche Option idle_wires hinzugefügt. Es funktioniert für alle Schubladen-Backends. Wenn idle_wires in einem Schubladenaufruf auf False gesetzt ist, zeichnet die Schublade keine Bits, die keine Schaltungselemente in der Visualisierung der Ausgangsquantenschaltung haben.

  • Eine neue PassManager Visualisierungsfunktion qiskit.visualization.pass_mamanger_drawer() wurde hinzugefügt. Diese Funktion nimmt ein PassManager Objekt auf und generiert ein Flusssteuerungsdiagramm aller im PassManager durchgeführten Durchläufe.

  • Bei der Erstellung einer PassManager können Sie jetzt eine Callback-Funktion angeben, die nach jedem Durchlauf ausgeführt wird. Dieser Funktion wird bei jedem Aufruf eine Reihe von kwargs mit dem Zustand des Pass-Managers nach jeder Pass-Ausführung übergeben. Zurzeit sind dies die folgenden Wargs:

    • pass_ (Pass): der ausgeführte Pass
    • dag (DAGCircuit): der dag-Ausgang des Passes
    • time (float): die Zeit für die Ausführung des Passes
    • property_set (PropertySet): die eingestellte Eigenschaft
    • count (int): der Index für die Ausführung des Durchlaufs

    Es ist jedoch erwähnenswert, dass diese Argumente zwar für die Version 0.9 festgelegt sind, aber die Interna des Passmanagers offenlegen und in zukünftigen Versionen geändert werden können.

    Damit können Sie zum Beispiel eine Callback-Funktion erstellen, die nach jedem Durchlauf die Schaltkreisausgabe visualisiert:

    from qiskit.transpiler import PassManager
    
    def my_callback(**kwargs):
        print(kwargs['dag'])
    
    pm = PassManager(callback=my_callback)

    Zusätzlich können Sie bei der Verwendung von qiskit.compiler.transpile() die Rückruffunktion angeben:

    from qiskit.compiler import transpile
    
    def my_callback(**kwargs):
        print(kwargs['pass'])
    
    transpile(circ, callback=my_callback)
  • Eine neue Methode filter() wurde der Klasse qiskit.pulse.Schedule hinzugefügt. Dies ermöglicht die Filterung der Anweisungen in einem Zeitplan. Zum Beispiel die Filterung nach Instruktionstyp:

    from qiskit.pulse import Schedule
    from qiskit.pulse.commands import Acquire
    from qiskit.pulse.commands import AcquireInstruction
    from qiskit.pulse.commands import FrameChange
    
    sched = Schedule(name='MyExperiment')
    sched.insert(0, FrameChange(phase=-1.57)(device))
    sched.insert(60, Acquire(5))
    acquire_sched = sched.filter(instruction_types=[AcquireInstruction])
  • Zusätzliche Zerlegungsmethoden für verschiedene Arten von Gattern. Diese Methoden verwenden verschiedene Zerlegungstechniken, um ein Gatter in eine Folge von CNOTs und Einzel-Qubit-Gattern zu zerlegen. Die folgenden Methoden werden hinzugefügt:

    Methode
    Beschreibung
    QuantumCircuit.iso()Fügen Sie eine beliebige Isometrie von m bis n Qubits zu einem Schaltkreis hinzu. Dies ermöglicht es, beliebige Einheiten an n Qubits anzuhängen (m=n) oder einen beliebigen Zustand von n Qubits vorzubereiten ( m=0 )
    QuantumCircuit.diag_gate()Hinzufügen eines diagonalen Gatters zur Schaltung
    QuantumCircuit.squ()Ein beliebiges 2x2 unitary in drei Rotationstore zerlegen und zu einer Schaltung hinzufügen
    QuantumCircuit.ucg()Anbringen eines gleichmäßig gesteuerten Gatters (auch Multiplex-Gatter genannt) an eine Schaltung
    QuantumCircuit.ucx()Anbringen eines gleichmäßig gesteuerten (auch als Multiplex bezeichneten) Rx-Rotationsgatters an einen Schaltkreis
    QuantumCircuit.ucy()Anbringen eines gleichmäßig gesteuerten (auch als Multiplex bezeichneten) Ry-Rotationsgatters an eine Schaltung
    QuantumCircuit.ucz()Anbringen eines gleichmäßig gesteuerten (auch als Multiplex bezeichneten) Rz-Rotationsgatters an einer Schaltung
  • Ergänzung der Algorithmen Gray-Synth und Patel-Markov-Hayes für die Synthese von linearen CNOT-Phasen- und reinen CNOT-Schaltungen. Diese Funktionen ermöglichen die Synthese von Schaltungen, die nur aus CNOT-Gattern bestehen, wenn eine lineare Funktion gegeben ist, oder einer Schaltung, die nur aus CNOT- und Phasengattern besteht, wenn eine Matrixbeschreibung gegeben ist.

  • Dem Modul qiskit.circuit.random wurde eine neue Funktion random_circuit hinzugefügt. Diese Funktion generiert eine zufällige Schaltung einer bestimmten Größe, indem sie zufällig verschiedene Gatter auswählt und sie der Schaltung hinzufügt. Damit kann man zum Beispiel eine 5-Qubit-Schaltung mit einer Tiefe von 10 erzeugen:

    from qiskit.circuit.random import random_circuit
    
    circ = random_circuit(5, 10)
  • Eine neue kwarg output_names wurde der Funktion qiskit.compiler.transpile() hinzugefügt. Dieser kwarg nimmt eine Zeichenkette oder eine Liste von Zeichenketten auf und verwendet diese als Wert des Schaltkreisnamens für die Ausgabeschaltkreise, die durch den Aufruf von transpile() zurückgegeben werden. Zum Beispiel:

    from qiskit.compiler import transpile
    my_circs = [circ_a, circ_b]
    tcirc_a, tcirc_b = transpile(my_circs,
                                 output_names=['Circuit A', 'Circuit B'])

    wird das Attribut name für tcirc_a und tcirc_b zu 'Circuit A' bzw. 'Circuit B' .

  • Eine neue Methode equiv() wurde zu den Klassen qiskit.quantum_info.Operator und qiskit.quantum_info.Statevector hinzugefügt. Diese Methoden werden verwendet, um zu prüfen, ob ein zweites Operator Objekt oder Statevector bis zur globalen Phase gleichwertig ist.

  • Die Benutzerkonfigurationsdatei hat mehrere neue Optionen:

    • Das Feld circuit_drawer akzeptiert jetzt einen automatischen Wert. Wenn der Wert für das Feld circuit_drawer festgelegt wird, ist das standardmäßige Schubladen-Backend mpl, wenn es verfügbar ist, ansonsten wird das Text-Backend verwendet.
    • Ein neues Feld circuit_mpl_style kann verwendet werden, um den Standardstil zu setzen, der von der Matplotlib-Schaltkreisschublade verwendet wird. Gültige Werte für dieses Feld sind bw und default , um den Standard auf Schwarz-Weiß bzw. den Standard-Farbstil einzustellen.
    • Ein neues Feld transpile_optimization_level kann verwendet werden, um die standardmäßige Transpiler-Optimierungsstufe für Aufrufe von qiskit.compiler.transpile() zu setzen. Der Wert kann entweder auf 0, 1, 2 oder 3 gesetzt werden.
  • Es wurde ein neuer Impulsbefehl Delay eingeführt, der in einen Impuls Schedule eingefügt werden kann. Dieser Befehl akzeptiert ein duration und kann zu jedem Channel hinzugefügt werden. Andere Befehle dürfen während einer Verzögerung nicht auf einem Kanal geplant werden.

    Die Verzögerung kann wie bei jedem anderen Impulsbefehl hinzugefügt werden. Zum Beispiel:

    from qiskit import pulse
    
    drive_channel = pulse.DriveChannel(0)
    delay = pulse.Delay(20)
    
    sched = pulse.Schedule()
    sched += delay(drive_channel)

Anmerkungen zu Upgrades

  • Das zuvor veraltete Modul qiskit._util wurde entfernt. qiskit.util sollte stattdessen verwendet werden.

  • Die Methode QuantumCircuit.count_ops() gibt nun ein OrderedDict Objekt statt eines dict zurück. Dies sollte für die meisten Anwendungsfälle kompatibel sein, da OrderedDict eine Unterklasse von dict ist. Die Typenprüfungen und andere Klassenprüfungen müssen jedoch möglicherweise aktualisiert werden.

  • Die Methode DAGCircuit.width() gibt nun die Gesamtzahl der Quantenbits und der klassischen Bits zurück. Vorher wurde nur die Anzahl der Quantenbits zurückgegeben. Wenn Sie nur die Anzahl der Quantenbits benötigen, können Sie stattdessen DAGCircuit.num_qubits() verwenden.

  • Die Funktion DAGCircuit.num_cbits() wurde entfernt. Stattdessen können Sie DAGCircuit.num_clbits() verwenden.

  • Einzelne Quantenbits und klassische Bits werden nicht mehr als (register, index) Tupel dargestellt. Sie sind jetzt Instanzen der Klassen Qubit und Clbit. Wenn Sie mit einzelnen Bits arbeiten, stellen Sie sicher, dass Sie alle Verwendungs- oder Typprüfungen aktualisieren, um nach diesen neuen Klassen anstelle von Tupeln zu suchen.

  • Die voreingestellten Passmanager-Klassen qiskit.transpiler.preset_passmanagers.default_pass_manager und qiskit.transpiler.preset_passmanagers.default_pass_manager_simulator (die die bisherigen Standard-Passmanager für qiskit.compiler.transpile() -Aufrufe waren) wurden entfernt. Wenn Sie diesen Passmanager manuell verwendet haben, wechseln Sie zum neuen Standard, qiskit.transpile.preset_passmanagers.level1_pass_manager.

  • Der Pass LegacySwap wurde entfernt. Wenn Sie ihn in einem benutzerdefinierten Passmanager verwenden, kann er durch den StochasticSwap Pass ersetzt werden, der eine schnellere und stabilere Version ist. Alle voreingestellten Passmanager wurden aktualisiert und verwenden nun StochasticSwap pass anstelle von LegacySwap.

  • Die folgenden veralteten qiskit.dagcircuit.DAGCircuit Methoden wurden entfernt:

    • DAGCircuit.get_qubits() - Verwenden Sie stattdessen DAGCircuit.qubits()

    • DAGCircuit.get_bits() - Verwenden Sie stattdessen DAGCircuit.clbits()

    • DAGCircuit.qasm() - Verwenden Sie eine Kombination aus qiskit.converters.dag_to_circuit() und QuantumCircuit.qasm(). Zum Beispiel:

      from qiskit.dagcircuit import DAGCircuit
      from qiskit.converters import dag_to_circuit
      my_dag = DAGCircuit()
      qasm = dag_to_circuit(my_dag).qasm()
    • DAGCircuit.get_op_nodes() - Verwenden Sie stattdessen DAGCircuit.op_nodes() . Beachten Sie, dass der Rückgabetyp eine Liste von DAGNode Objekten für op_nodes() ist, anstatt der Liste von Tupeln, die zuvor von get_op_nodes() zurückgegeben wurde.

    • DAGCircuit.get_gate_nodes() - Verwenden Sie stattdessen DAGCircuit.gate_nodes() . Beachten Sie, dass der Rückgabetyp eine Liste von DAGNode Objekten für gate_nodes() ist, anstatt der Liste von Tupeln, die zuvor von get_gate_nodes() zurückgegeben wurde.

    • DAGCircuit.get_named_nodes() - Verwenden Sie stattdessen DAGCircuit.named_nodes() . Beachten Sie, dass der Rückgabetyp eine Liste von DAGNode -Objekten für named_nodes() ist und nicht die Liste von node_ids, die zuvor von get_named_nodes() zurückgegeben wurde.

    • DAGCircuit.get_2q_nodes() - Verwenden Sie stattdessen DAGCircuit.twoQ_gates() . Beachten Sie, dass der Rückgabetyp eine Liste von DAGNode Objekten für twoQ_gates() ist, anstatt der Liste von data_dicts, die zuvor von get_2q_nodes() zurückgegeben wurde.

    • DAGCircuit.get_3q_or_more_nodes() - Verwenden Sie stattdessen DAGCircuit.threeQ_or_more_gates() . Beachten Sie, dass der Rückgabetyp eine Liste von DAGNode Objekten für threeQ_or_more_gates() ist, anstatt der Liste von Tupeln, die zuvor von get_3q_or_more_nodes() zurückgegeben wurde.

  • Die folgenden qiskit.dagcircuit.DAGCircuit -Methoden hatten die Unterstützung für die Annahme von node_id als Parameter veraltet. Dies wurde entfernt und jetzt werden nur noch DAGNode Objekte als Eingabe akzeptiert:

    • successors()
    • predecessors()
    • ancestors()
    • descendants()
    • bfs_successors()
    • quantum_successors()
    • remove_op_node()
    • remove_ancestors_of()
    • remove_descendants_of()
    • remove_nonancestors_of()
    • remove_nondescendants_of()
    • substitute_node_with_dag()
  • Die Methode qiskit.dagcircuit.DAGCircuit rename_register() wurde entfernt. Dies wurde von dem gesamten qiskit-Code nicht genutzt. Wenn Sie sich extern darauf verlassen haben, müssen Sie eine externe Funktion neu implementieren.

  • Die Eigenschaft qiskit.dagcircuit.DAGCircuit multi_graph wurde entfernt. Der direkte Zugriff auf das zugrunde liegende networkx multi_graph Objekt wird nicht mehr unterstützt. Stattdessen sollte die von der Klasse DAGCircuit bereitgestellte API verwendet werden.

  • Die veraltete Ausnahmeklasse qiskit.qiskiterror.QiskitError wurde entfernt. Stattdessen sollten Sie qiskit.exceptions.QiskitError verwenden.

  • Die booleschen kwargs, ignore_requires und ignore_preserves aus dem qiskit.transpiler.PassManager Konstruktor wurden entfernt. Diese Optionen sind nicht mehr gültig.

  • Das Modul qiskit.tools.logging ist entfernt worden. Dieses Modul wurde von nichts verwendet und fügte nichts zu den Schnittstellen hinzu, die Python 's Standardbibliothek logging Modul bietet. Wenn Sie einen benutzerdefinierten Formatierer für die Protokollierung festlegen möchten, verwenden Sie stattdessen das Modul logging aus der Standardbibliothek.

  • Die Klasse CompositeGate wurde entfernt. Stattdessen sollten Sie direkt ein Anweisungsobjekt aus einer Schaltung erstellen und dieses an Ihre Schaltung anhängen. Sie können zum Beispiel etwas wie folgt ausführen:

    custom_gate_circ = qiskit.QuantumCircuit(2)
    custom_gate_circ.x(1)
    custom_gate_circ.h(0)
    custom_gate_circ.cx(0, 1)
    custom_gate = custom_gate_circ.to_instruction()
  • Die zuvor veralteten kwargs, seed und config für qiskit.compiler.assemble() wurden entfernt. Verwenden Sie stattdessen seed_simulator bzw. run_config .

  • Die zuvor veralteten Konverter qiskit.converters.qobj_to_circuits() und qiskit.converters.circuits_to_qobj() wurden entfernt. Verwenden Sie stattdessen qiskit.assembler.disassemble() bzw. qiskit.compiler.assemble() .

  • Das zuvor veraltete kwarg seed_mapper für qiskit.compiler.transpile() wurde entfernt. Stattdessen sollten Sie seed_transpiler

  • Die zuvor veralteten kwargs seed, seed_mapper, config und circuits für die Funktion qiskit.execute() wurden entfernt. Verwenden Sie stattdessen die Argumente seed_simulator, seed_transpiler, run_config bzw. experiments .

  • Das zuvor veraltete qiskit.tools.qcvv Modul wurde entfernt. Verwenden Sie stattdessen qiskit-ignis.

  • Die zuvor veralteten Funktionen qiskit.transpiler.transpile() und qiskit.transpiler.transpile_dag() wurden entfernt. Stattdessen sollten Sie qiskit.compiler.transpile verwenden. Wenn Sie transpile_dag() verwendet haben, kann dies durch Laufen ersetzt werden:

    circ = qiskit.converters.dag_to_circuit(dag)
    out_circ = qiskit.compiler.transpile(circ)
    qiskit.converters.circuit_to_dag(out_circ)
  • Die zuvor veraltete Funktion qiskit.compile() wurde entfernt, stattdessen sollten Sie qiskit.compiler.transpile() und qiskit.compiler.assemble() verwenden.

  • Die Jupyter-Zellenmagie %%qiskit_progress_bar von qiskit.tools.jupyter wurde in eine Linienmagie umgewandelt. Dies geschah, um besser widerzuspiegeln, wie die Magie verwendet wird und wie sie funktioniert. Wenn Sie die Zellenmagie %%qiskit_progress_bar in einem bestehenden Notizbuch verwendet haben, müssen Sie diese in eine Linienmagie umwandeln, indem Sie sie in %qiskit_progress_bar ändern. Alles andere sollte sich identisch verhalten.

  • Die veraltete Funktion qiskit.tools.qi.qi.random_unitary_matrix() wurde entfernt. Sie sollten stattdessen die Funktion qiskit.quantum_info.random.random_unitary() verwenden.

  • Die veraltete Funktion qiskit.tools.qi.qi.random_density_matrix() wurde entfernt. Sie sollten stattdessen die Funktion qiskit.quantum_info.random.random_density_matrix() verwenden.

  • Die veraltete Funktion qiskit.tools.qi.qi.purity() wurde entfernt. Sie sollten stattdessen die Funktion qiskit.quantum_info.purity() verwenden.

  • Die veraltete Methode QuantumCircuit._attach() wurde entfernt. Sie sollten stattdessen QuantumCircuit.append() verwenden.

  • Die Methode qiskit.qasm.Qasm get_filename() wurde entfernt. Sie können stattdessen die Methode return_filename() verwenden.

  • Das veraltete Modul qiskit.mapper wurde entfernt. Die Liste der Funktionen und Klassen mit ihren Alternativen sind:

    • qiskit.mapper.CouplingMap: qiskit.transpiler.CouplingMap sollte stattdessen verwendet werden.
    • qiskit.mapper.Layout: qiskit.transpiler.Layout sollte stattdessen verwendet werden
    • qiskit.mapper.compiling.euler_angles_1q(): qiskit.quantum_info.synthesis.euler_angles_1q() sollte stattdessen verwendet werden
    • qiskit.mapper.compiling.two_qubit_kak(): qiskit.quantum_info.synthesis.two_qubit_cnot_decompose() sollte stattdessen verwendet werden.

    Für die veralteten Ausnahmeklassen qiskit.mapper.exceptions.CouplingError und qiskit.mapper.exceptions.LayoutError gibt es keine Alternative, da sie ohne das Modul qiskit.mapper keinen Zweck erfüllen.

  • Das Modul qiskit.pulse.samplers wurde nach qiskit.pulse.pulse_lib.samplers verschoben. Sie müssen die Importe von qiskit.pulse.samplers auf qiskit.pulse.pulse_lib.samplers aktualisieren.

  • seaborn ist jetzt eine Abhängigkeit für die Funktion qiskit.visualization.plot_state_qsphere(). Sie wird benötigt, um geeignete Winkelfarbkarten für die Visualisierung zu erzeugen. Das qiskit-terra[visualization] Extras-Installationsziel wurde aktualisiert, um seaborn>=0.9.0 zu installieren. Wenn Sie Visualisierungen und insbesondere die Funktion plot_state_qsphere() verwenden, können Sie diese verwenden, um seaborn zu installieren, oder einfach manuell ausführen pip install seaborn>=0.9.0

  • Die zuvor veralteten Funktionen qiksit.visualization.plot_state und qiskit.visualization.iplot_state wurden entfernt. Stattdessen sollten Sie die spezifische Funktion für jeden Plot-Typ verwenden. In den folgenden Tabellen können Sie die veralteten Funktionen den entsprechenden neuen Funktionen zuordnen:

    Qiskit Terra 0.6
    Qiskit Terra 0.7 +
    plot_state(rho)plot_state_city(rho)
    plot_state(rho, method='city')plot_state_city(rho)
    plot_state(rho, method='paulivec')plot_state_paulivec(rho)
    plot_state(rho, method='qsphere')plot_state_qsphere(rho)
    plot_state(rho, method='bloch')plot_bloch_multivector(rho)
    plot_state(rho, method='hinton')plot_state_hinton(rho)
  • Die Abhängigkeiten von pylatexenc und pillow für die Backends latex und latex_source für Schaltkreisschubladen sind nicht mehr als Anforderungen aufgeführt. Wenn Sie die Latex-Schaltkreiszeichner verwenden wollen, stellen Sie sicher, dass Sie beide Pakete installiert haben, oder verwenden Sie die setuptools-Extras, um sie zusammen mit qiskit-terra zu installieren:

    pip install qiskit-terra[visualization]
  • Die Wurzel des Namensraumes qiskit gibt nun beim Import eine Warnung aus, wenn entweder qiskit.IBMQ oder qiskit.Aer nicht eingerichtet werden konnte. Dies geschieht immer dann, wenn etwas aus dem Namensraum qiskit importiert wird. Diese Warnungen wurden hinzugefügt, um den Benutzern von vornherein klar zu machen, wenn sie qiskit ausführen und die Pakete qiskit-aer und qiskit-ibmq-provider nicht gefunden werden konnten. Es ist nicht immer klar, ob die Pakete fehlen oder python packaging/pip ein Element falsch installiert hat, bis man sie benutzen will und eine leere ImportError erhält. Diese Warnungen sollten von vornherein deutlich machen, wenn diese häufig verwendeten Aliasnamen fehlen.

    Für Benutzer, die weder qiskit-aer noch qiskit-ibmq-provider verwenden, kann dies jedoch zusätzliche Störungen verursachen. Für diese Benutzer können diese Warnungen leicht mit der Standardbibliothek Python warnings unterdrückt werden. Benutzer können die Warnungen unterdrücken, indem sie diese beiden Zeilen vor jeden Import von qiskit setzen:

    import warnings
    warnings.filterwarnings('ignore', category=RuntimeWarning,
                            module='qiskit')

    Dies unterdrückt die Warnungen, die ausgegeben werden, wenn qiskit-aer oder qiskit-ibmq-provider nicht installiert sind, behält aber alle anderen Warnungen bei, die von qiskit oder einem anderen Paket ausgegeben werden.

Hinweise zu veralteten Versionen

  • Die Gates U und CX sind veraltet. Wenn Sie diese Gates in Ihrem Code verwenden, sollten Sie sie aktualisieren und stattdessen u3 und cx verwenden. Wenn Sie zum Beispiel die Schaltkreis-Gate-Funktionen circuit.u_base() und circuit.cx_base() verwenden, sollten Sie diese in circuit.u3() bzw. circuit.cx() ändern.

  • Das u0 Tor wurde zugunsten der Verwendung mehrerer iden Tore veraltet und wird in Zukunft entfernt werden. Wenn du das u0 Gate in deiner Schaltung verwendest, solltest du deine Aufrufe aktualisieren und iden verwenden. Wenn Sie z. B. vorher circuit.u0(2) in Ihrer Schaltung verwendet haben, sollten Sie dies nun ändern:

    circuit.iden()
    circuit.iden()

    stattdessen.

  • Die Klasse qiskit.pulse.DeviceSpecification ist jetzt veraltet. Stattdessen sollten Sie qiskit.pulse.PulseChannelSpec verwenden.

  • Der Zugriff auf eine Klasse qiskit.circuit.Qubit, qiskit.circuit.Clbit oder qiskit.circuit.Bit über den Index ist veraltet (aus Kompatibilität mit den (register, index) Tupeln, die diese Klassen ersetzt haben). Stattdessen sollten Sie die Attribute register und index verwenden.

  • Die Übergabe eines Bits an die Methode qiskit.QuantumCircuit append als Tupel (register, index) ist veraltet. Stattdessen sollten Bit-Objekte direkt verwendet werden.

  • Der Zugriff auf die Elemente eines qiskit.transpiler.Layout Objekts mit einem Tupel (register, index) ist veraltet. Stattdessen sollte direkt ein Bit-Objekt verwendet werden.

  • Die qiskit.transpiler.Layout Konstruktormethode qiskit.transpiler.Layout.from_tuplelist() ist veraltet. Stattdessen sollte der Konstruktor qiskit.transpiler.Layout.from_qubit_list() verwendet werden.

  • Das Modul qiskit.pulse.ops ist veraltet. Alle Funktionen, die es bietet:

    • union
    • flatten
    • shift
    • insert
    • append

    verfügen über gleichwertige Methoden, die direkt in den Klassen qiskit.pulse.Schedule und qiskit.pulse.Instruction verfügbar sind. Diese Methoden sollten stattdessen verwendet werden.

  • Die Methode qiskit.qasm.Qasm get_tokens() ist veraltet. Stattdessen sollten Sie die Methode generate_tokens() verwenden.

  • Die Methode qiskit.qasm.qasmparser.QasmParser get_tokens() ist veraltet. Stattdessen sollten Sie die Methode read_tokens() verwenden.

  • Die Methode as_dict() für die Klasse Qobj ist veraltet und wird in Zukunft entfernt werden. Stattdessen sollten Sie die Aufrufe durch to_dict() ersetzen.

Fehlerkorrekturen

  • Die Definition von CU3Gate wurde so geändert, dass sie der kanonischen Definition einer kontrollierten U3Gate entspricht.

  • Die Handhabung des Layouts im Passmanager wurde vereinheitlicht. Dies behebt mehrere gemeldete Probleme bei der Handhabung des Layouts. Der initial_layout kwarg Parameter auf qiskit.compiler.transpile() und qiskit.execute() wird nun beim Transpilieren von Schaltungen die Qubits aus der Schaltung auf die gewünschten Qubits auf dem Gerät legen.

  • Der BasicAer -Simulator wurde um Unterstützung für n-Qubit-Unitarier erweitert, und unitary (arbiträre unitäre Gatter) wurde zur Gruppe der Basisgatter für die Simulatoren hinzugefügt

  • Die Website qiskit.visualization.plost_state_qsphere() wurde aktualisiert, um verschiedene Probleme zu beheben. Die Ausgabe der Q-Sphere-Visualisierung wird nun korrekt generiert und die folgenden Aspekte wurden aktualisiert:

    • Alle komplementären Basiszustände sind antipodisch

    • Die Phase wird durch die Farbe der Linie und der Markierung auf der Oberfläche der Kugel angezeigt


    • Die Wahrscheinlichkeit wird durch die Durchsichtigkeit der Linie und das Volumen der Markierung auf

      kugeloberfläche

Sonstige Anmerkungen

  • Der Standardwert PassManager für qiskit.compiler.transpile() und qiskit.execute() wurde auf den unter qiskit.transpile.preset_passmanagers.level1_pass_manager definierten Optimierungslevel 1 Pass Manager geändert.

  • Alle Schaltkreiszeichner-Backends drücken nun die Gatterparameter in einem Schaltkreis als gemeinsame Brüche von pi in der Ausgabevisualisierung aus. Wenn der Wert eines Parameters als Bruchteil von Pi ausgedrückt werden kann, wird dieser anstelle des numerischen Werts verwendet.

  • Wenn Sie bei der Verwendung von qiskit.assembler.assemble_schedules() die Anzahl der zu verwendenden memory_slots nicht angeben, wird die Anzahl auf der Grundlage der Anzahl der Erwerbe in den Eingabezeitplänen abgeleitet.

  • Die Auslaufwarnung für die Eigenschaft qiskit.dagcircuit.DAGCircuit node_counter wurde entfernt. Die Verhaltensänderung, vor der gewarnt wird, wurde bereits in Kraft gesetzt, als die Warnung hinzugefügt wurde, so dass die Warnung, dass sie sich geändert hat, keinen Zweck erfüllt.

  • Bei Aufrufen von PassManager.run() werden jetzt für jeden Durchlauf Python-Protokollmeldungen auf der Ebene INFO ausgegeben. Diese Meldungen enthalten den Passnamen und die Gesamtausführungszeit des Passes. Python die Standardprotokollierung von Qiskit-Terra wurde verwendet, weil sie eine standardmäßige Integration der Protokollierung in andere Anwendungen und Bibliotheken ermöglicht. Die gesamte Protokollierung für den Transpiler erfolgt unter dem Namensraum qiskit.transpiler , wie er von logging.getLogger('qiskit.transpiler verwendet wird.) Um beispielsweise die DEBUG-Protokollierung für den Transpiler zu aktivieren, können Sie Folgendes ausführen:

    import logging
    
    logging.basicConfig()
    logging.getLogger('qiskit.transpiler').setLevel(logging.DEBUG)

    die den Log-Level für den Transpiler auf DEBUG setzt und diese Meldungen so konfiguriert, dass sie auf stderr ausgegeben werden.

Aer- 0.3

  • Es gibt einen neuen Hochleistungs-Dichtematrix-Simulator, der in Verbindung mit unseren Lärmmodellen verwendet werden kann, um reale Szenarien besser zu simulieren.
  • Wir haben einen Matrix Product State (MPS)-Simulator hinzugefügt. MPS ermöglicht die effiziente Simulation mehrerer Klassen von Quantenschaltungen, selbst bei Vorhandensein starker Korrelationen und stark verschränkter Zustände. In Fällen, die sich für MPS eignen, können Schaltkreise mit mehreren hundert Qubits und mehr exakt simuliert werden, z. B. um Erwartungswerte von Observablen zu erhalten.
  • Snapshots können in allen unseren Simulatoren durchgeführt werden.
  • Jetzt können wir auch Abtastschaltungen mit Auslesefehlern messen, nicht nur ideale Schaltungen.
  • Wir haben einige Schaltungsoptimierungen mit Rauschpräsenz verstärkt.
  • Es wurden bessere 2-Qubit-Fehlernäherungen einbezogen.
  • Es wurden einige Werkzeuge aufgenommen, mit denen sich bestimmte lärmintensive Simulationen leichter erstellen und schneller simulieren lassen.
  • Höhere Leistung bei Simulationen, die weniger numerische Fließkommapräzision erfordern.

Ignis- 0.2

Neue Funktionen

Fehlerkorrekturen

  • Fehler bei der Anpassung von RB behoben
  • Ein Fehler im Charakterisierungs-Fitter wurde behoben, wenn ein Qubit-Index zur Anpassung ausgewählt wurde

Sonstige Anmerkungen

  • Die Messungsminderung funktioniert jetzt parallel, wenn sie auf mehrere Ergebnisse angewendet wird
  • Die Schätzwerte für RB-Monteure werden verbessert

Aqua- 0.6

Hinzugefügt

  • Relative-Phase-Toffoli-Tore rccx (mit 2 Kontrollen) und rcccx (mit 3 Kontrollen).

  • Variationsform RYCRX

  • Ein neuer 'basic-no-ancilla' Modus auf mct.

  • Mehrfach gesteuerte Drehtore mcrx, mcry und mcrz als allgemeines Tor u3 werden von der Graycode-Implementierung nicht unterstützt

  • Chemie: ROHF Träger mit offener Schale

    • Unterstützt für alle Treiber: Gaussian16, PyQuante, PySCF und PSI4
    • HartreeFock anfangszustand, UCCSD-Variationsform und Zwei-Qubit-Reduktion für die Paritätszuordnung unterstützen nun unterschiedliche Alpha- und Beta-Teilchenzahlen für die Unterstützung der offenen Schale
  • Chemie: UHF-Träger mit offener Schale

    • Unterstützt für alle Treiber: Gaussian16, PyQuante, PySCF und PSI4
    • QMolecule erweitert um Integrale, Koeffizienten usw. für separate Betas
  • Chemie: QMolecule erweitert um Integrale in Atomorbitalen, um den allgemeinen Zugang zu diesen für Experimente zu erleichtern

    • Unterstützt für alle Treiber: Gaussian16, PyQuante, PySCF und PSI4
  • Chemie: Zusätzliche PyQuante und PySCF Treiberkonfiguration

    • Steuerung der Konvergenztoleranz und der maximalen Konvergenziteration.
    • Unter PySCF können Sie eine erste Schätzung abgeben
  • Chemie: Verarbeitungsausgabe von PyQuante und PySCF Berechnungen zum Debug-Protokoll hinzugefügt ( Gaussian16 und PSI4 Ausgaben wurden bereits zum Debug-Protokoll hinzugefügt)

  • Chemie: Zusammenlegung von qiskit-chemistry zu qiskit-aqua

  • Fügen Sie die Klassen MatrixOperator, WeightedPauliOperator und TPBGroupedPauliOperator hinzu.

  • Fügen Sie die Funktion evolution_instruction hinzu, um eine registerlose Anweisung zur Zeitentwicklung zu erhalten.

  • Hinzufügen des Moduls op_converter zur Vereinheitlichung der Stelle, die für die Umwandlung verschiedener Arten von Operatoren zuständig ist.

  • Fügen Sie die Klasse Z2Symmetries hinzu, um die Z2 Symmetrieinformationen zu kapseln, und verfügen Sie über Hilfsmethoden für die Verjüngung eines Operators.

  • Amplitudenschätzung: Maximum Likelihood Postprocessing und Konfidenzintervallberechnung hinzugefügt.

  • Maximum-Likelihood-Amplituden-Schätzung (MLAE): Implementierung eines neuen Algorithmus zur Amplitudenschätzung auf der Grundlage der Maximum-Likelihood-Schätzung, der die Anzahl der erforderlichen Qubits und die Schaltungstiefe reduziert.

  • Hinzufügen von (stückweise) linear und polynomial gesteuerten Pauli-Rotationskreisen.

  • Fügen Sie q_equation_of_motion hinzu, um den angeregten Zustand eines Moleküls zu untersuchen, und fügen Sie zwei Algorithmen zur Vorbereitung des Referenzzustands hinzu.

Geändert

  • Verbessern Sie mct's 'basic' Modus durch die Verwendung von Toffoli-Gattern mit relativer Phase, um Zwischenergebnisse zu erzeugen.
  • Passen Sie sich der neu eingeführten Klasse Qubit von Qiskit Terra an.
  • Verhindern Sie, dass QPE/IQPE die eingegebenen Operator Objekte verändert.
  • Die Abhängigkeit von PyEDA wurde beseitigt; die zugrundeliegenden logischen Operationen der entsprechenden Orakel werden nun von SymPy übernommen.
  • Refaktorieren Sie die Klasse Operator , jede Darstellung hat ihre eigene Klasse MatrixOperator, WeightedPauliOperator und TPBGroupedPauliOperator.
  • Die power in evolution_instruction wurde direkt auf das Theta am CRZ-Gate angewandt, die neue Version wiederholt die Schaltungen zur Umsetzung der Leistung.
  • CircuitCache ist standardmäßig ausgeschaltet und kann jetzt über die Umgebungsvariable QISKIT_AQUA_CIRCUIT_CACHE eingestellt werden.

Fehlerkorrekturen

  • Ein Fehler, bei dem TruthTableOracle falsche Schaltungen für Wahrheitstabellen mit nur einem einzigen 1 Wert erstellt hat.
  • Ein Fehler, der durch den Indeterminismus von PyEDAverursacht wird.
  • Ein Fehler in QPE/IQPEbei der Berechnung von Translation und Stretch.
  • Chemie: Bravyi-Kitaev-Abbildung korrigiert, wenn die Anzahl der Qubits nicht eine Potenz von 2 ist
  • Einrichtung von initial_layout in QuantumInstance über eine Liste.

Entfernt

  • Das allgemeine mehrfach gesteuerte Drehtor mcu3 wird entfernt und durch die mehrfach gesteuerten Drehtore mcrx, mcry, und mcrz

Veraltet

  • Die Klasse Operator ist veraltet und wird durch MatrixOperator, WeightedPauliOperator und TPBGroupedPauliOperator ersetzt.

IBM Q Anbieter 0.3

Keine Änderung

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.