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
DAGCircuitObjekt (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, sindQuantumCircuit,PassManagerundSchedule. -
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 auchqiskit.visualization.circuit_drawer()unterstützen nun die Kommentierung der Qubits in der Visualisierung mit Layout-Informationen. Wenn dasQuantumCircuitObjekt, das gezeichnet wird, Layout-Metadaten enthält (die normalerweise nur in der Schaltkreisausgabe vontranspile()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(StandardeinstellungTrue), der, wenn er aufFalsegesetzt wird, die Layoutbeschriftung in den Ausgangsschaltkreisen deaktiviert. -
Ein neuer Analysedurchgang
CountOpsLongestwurde hinzugefügt, um die Anzahl der Operationen auf dem längsten Pfad des DAGCircuits zu ermitteln. Wenn es verwendet wird, wird eincount_ops_longest_pathSchlü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()undsech_deriv(), wurden dem Modulqiskit.pulse.pulse_libder Impulsbibliothek hinzugefügt, um ein unnormalisiertes hyperbolisches SekantenobjektSamplePulsebzw. ein unnormalisiertes hyperbolisches SekantenderviativobjektSamplePulsezu erzeugen. -
Der Methode
QuantumCircuit.draw()und der Funktionqiskit.visualization.circuit_drawer()wurde eine neue kwarg-Optionvertical_compressionhinzugefügt. Diese Option funktioniert nur mit dem Backendtext. Diese Option kann entweder aufhigh,medium(Standardeinstellung) oderlowgesetzt werden, um einzustellen, wie viel vertikaler Platz für die Ausgabevisualisierung verwendet wird. -
Der Methode
QuantumCircuit.draw()und der Funktionqiskit.visualization.circuit_drawer()wurde eine neue boolesche Optionidle_wireshinzugefügt. Es funktioniert für alle Schubladen-Backends. Wennidle_wiresin 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 Passdag(DAGCircuit): der dag-Ausgang des Passestime(float): die Zeit für die Ausführung des Passesproperty_set(PropertySet): die eingestellte Eigenschaftcount(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 Klasseqiskit.pulse.Schedulehinzugefü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:
MethodeBeschreibungQuantumCircuit.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.randomwurde eine neue Funktionrandom_circuithinzugefü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_nameswurde der Funktionqiskit.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 vontranspile()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
namefür tcirc_a und tcirc_b zu'Circuit A'bzw.'Circuit B'. -
Eine neue Methode
equiv()wurde zu den Klassenqiskit.quantum_info.Operatorundqiskit.quantum_info.Statevectorhinzugefügt. Diese Methoden werden verwendet, um zu prüfen, ob ein zweitesOperatorObjekt oderStatevectorbis zur globalen Phase gleichwertig ist. -
Die Benutzerkonfigurationsdatei hat mehrere neue Optionen:
- Das Feld
circuit_drawerakzeptiert jetzt einen automatischen Wert. Wenn der Wert für das Feldcircuit_drawerfestgelegt wird, ist das standardmäßige Schubladen-Backend mpl, wenn es verfügbar ist, ansonsten wird das Text-Backend verwendet. - Ein neues Feld
circuit_mpl_stylekann verwendet werden, um den Standardstil zu setzen, der von der Matplotlib-Schaltkreisschublade verwendet wird. Gültige Werte für dieses Feld sindbwunddefault, um den Standard auf Schwarz-Weiß bzw. den Standard-Farbstil einzustellen. - Ein neues Feld
transpile_optimization_levelkann verwendet werden, um die standardmäßige Transpiler-Optimierungsstufe für Aufrufe vonqiskit.compiler.transpile()zu setzen. Der Wert kann entweder auf 0, 1, 2 oder 3 gesetzt werden.
- Das Feld
-
Es wurde ein neuer Impulsbefehl
Delayeingeführt, der in einen ImpulsScheduleeingefügt werden kann. Dieser Befehl akzeptiert eindurationund kann zu jedemChannelhinzugefü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._utilwurde entfernt.qiskit.utilsollte stattdessen verwendet werden. -
Die Methode
QuantumCircuit.count_ops()gibt nun einOrderedDictObjekt statt einesdictzurück. Dies sollte für die meisten Anwendungsfälle kompatibel sein, daOrderedDicteine Unterklasse vondictist. 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 stattdessenDAGCircuit.num_qubits()verwenden. -
Die Funktion
DAGCircuit.num_cbits()wurde entfernt. Stattdessen können SieDAGCircuit.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_managerundqiskit.transpiler.preset_passmanagers.default_pass_manager_simulator(die die bisherigen Standard-Passmanager fürqiskit.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
LegacySwapwurde entfernt. Wenn Sie ihn in einem benutzerdefinierten Passmanager verwenden, kann er durch denStochasticSwapPass ersetzt werden, der eine schnellere und stabilere Version ist. Alle voreingestellten Passmanager wurden aktualisiert und verwenden nunStochasticSwappass anstelle vonLegacySwap. -
Die folgenden veralteten
qiskit.dagcircuit.DAGCircuitMethoden wurden entfernt:-
DAGCircuit.get_qubits()- Verwenden Sie stattdessenDAGCircuit.qubits() -
DAGCircuit.get_bits()- Verwenden Sie stattdessenDAGCircuit.clbits() -
DAGCircuit.qasm()- Verwenden Sie eine Kombination ausqiskit.converters.dag_to_circuit()undQuantumCircuit.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 stattdessenDAGCircuit.op_nodes(). Beachten Sie, dass der Rückgabetyp eine Liste vonDAGNodeObjekten fürop_nodes()ist, anstatt der Liste von Tupeln, die zuvor vonget_op_nodes()zurückgegeben wurde. -
DAGCircuit.get_gate_nodes()- Verwenden Sie stattdessenDAGCircuit.gate_nodes(). Beachten Sie, dass der Rückgabetyp eine Liste vonDAGNodeObjekten fürgate_nodes()ist, anstatt der Liste von Tupeln, die zuvor vonget_gate_nodes()zurückgegeben wurde. -
DAGCircuit.get_named_nodes()- Verwenden Sie stattdessenDAGCircuit.named_nodes(). Beachten Sie, dass der Rückgabetyp eine Liste vonDAGNode-Objekten fürnamed_nodes()ist und nicht die Liste von node_ids, die zuvor vonget_named_nodes()zurückgegeben wurde. -
DAGCircuit.get_2q_nodes()- Verwenden Sie stattdessenDAGCircuit.twoQ_gates(). Beachten Sie, dass der Rückgabetyp eine Liste vonDAGNodeObjekten fürtwoQ_gates()ist, anstatt der Liste von data_dicts, die zuvor vonget_2q_nodes()zurückgegeben wurde. -
DAGCircuit.get_3q_or_more_nodes()- Verwenden Sie stattdessenDAGCircuit.threeQ_or_more_gates(). Beachten Sie, dass der Rückgabetyp eine Liste vonDAGNodeObjekten fürthreeQ_or_more_gates()ist, anstatt der Liste von Tupeln, die zuvor vonget_3q_or_more_nodes()zurückgegeben wurde.
-
-
Die folgenden
qiskit.dagcircuit.DAGCircuit-Methoden hatten die Unterstützung für die Annahme vonnode_idals Parameter veraltet. Dies wurde entfernt und jetzt werden nur nochDAGNodeObjekte 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.DAGCircuitrename_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.DAGCircuitmulti_graphwurde entfernt. Der direkte Zugriff auf das zugrunde liegendenetworkxmulti_graphObjekt wird nicht mehr unterstützt. Stattdessen sollte die von der KlasseDAGCircuitbereitgestellte API verwendet werden. -
Die veraltete Ausnahmeklasse
qiskit.qiskiterror.QiskitErrorwurde entfernt. Stattdessen sollten Sieqiskit.exceptions.QiskitErrorverwenden. -
Die booleschen kwargs,
ignore_requiresundignore_preservesaus demqiskit.transpiler.PassManagerKonstruktor wurden entfernt. Diese Optionen sind nicht mehr gültig. -
Das Modul
qiskit.tools.loggingist entfernt worden. Dieses Modul wurde von nichts verwendet und fügte nichts zu den Schnittstellen hinzu, die Python 's StandardbibliothekloggingModul bietet. Wenn Sie einen benutzerdefinierten Formatierer für die Protokollierung festlegen möchten, verwenden Sie stattdessen das Modulloggingaus der Standardbibliothek. -
Die Klasse
CompositeGatewurde 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,
seedundconfigfürqiskit.compiler.assemble()wurden entfernt. Verwenden Sie stattdessenseed_simulatorbzw.run_config. -
Die zuvor veralteten Konverter
qiskit.converters.qobj_to_circuits()undqiskit.converters.circuits_to_qobj()wurden entfernt. Verwenden Sie stattdessenqiskit.assembler.disassemble()bzw.qiskit.compiler.assemble(). -
Das zuvor veraltete kwarg
seed_mapperfürqiskit.compiler.transpile()wurde entfernt. Stattdessen sollten Sieseed_transpiler -
Die zuvor veralteten kwargs
seed,seed_mapper,configundcircuitsfür die Funktionqiskit.execute()wurden entfernt. Verwenden Sie stattdessen die Argumenteseed_simulator,seed_transpiler,run_configbzw.experiments. -
Das zuvor veraltete
qiskit.tools.qcvvModul wurde entfernt. Verwenden Sie stattdessen qiskit-ignis. -
Die zuvor veralteten Funktionen
qiskit.transpiler.transpile()undqiskit.transpiler.transpile_dag()wurden entfernt. Stattdessen sollten Sieqiskit.compiler.transpileverwenden. Wenn Sietranspile_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 Sieqiskit.compiler.transpile()undqiskit.compiler.assemble()verwenden. -
Die Jupyter-Zellenmagie
%%qiskit_progress_barvonqiskit.tools.jupyterwurde in eine Linienmagie umgewandelt. Dies geschah, um besser widerzuspiegeln, wie die Magie verwendet wird und wie sie funktioniert. Wenn Sie die Zellenmagie%%qiskit_progress_barin 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 Funktionqiskit.quantum_info.random.random_unitary()verwenden. -
Die veraltete Funktion
qiskit.tools.qi.qi.random_density_matrix()wurde entfernt. Sie sollten stattdessen die Funktionqiskit.quantum_info.random.random_density_matrix()verwenden. -
Die veraltete Funktion
qiskit.tools.qi.qi.purity()wurde entfernt. Sie sollten stattdessen die Funktionqiskit.quantum_info.purity()verwenden. -
Die veraltete Methode
QuantumCircuit._attach()wurde entfernt. Sie sollten stattdessenQuantumCircuit.append()verwenden. -
Die Methode
qiskit.qasm.Qasmget_filename()wurde entfernt. Sie können stattdessen die Methodereturn_filename()verwenden. -
Das veraltete Modul
qiskit.mapperwurde entfernt. Die Liste der Funktionen und Klassen mit ihren Alternativen sind:qiskit.mapper.CouplingMap:qiskit.transpiler.CouplingMapsollte stattdessen verwendet werden.qiskit.mapper.Layout:qiskit.transpiler.Layoutsollte stattdessen verwendet werdenqiskit.mapper.compiling.euler_angles_1q():qiskit.quantum_info.synthesis.euler_angles_1q()sollte stattdessen verwendet werdenqiskit.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.CouplingErrorundqiskit.mapper.exceptions.LayoutErrorgibt es keine Alternative, da sie ohne das Modulqiskit.mapperkeinen Zweck erfüllen. -
Das Modul
qiskit.pulse.samplerswurde nachqiskit.pulse.pulse_lib.samplersverschoben. Sie müssen die Importe vonqiskit.pulse.samplersaufqiskit.pulse.pulse_lib.samplersaktualisieren. -
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. Dasqiskit-terra[visualization]Extras-Installationsziel wurde aktualisiert, umseaborn>=0.9.0zu installieren. Wenn Sie Visualisierungen und insbesondere die Funktionplot_state_qsphere()verwenden, können Sie diese verwenden, umseabornzu installieren, oder einfach manuell ausführenpip install seaborn>=0.9.0 -
Die zuvor veralteten Funktionen
qiksit.visualization.plot_stateundqiskit.visualization.iplot_statewurden 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.6Qiskit 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
pylatexencundpillowfür die Backendslatexundlatex_sourcefü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
qiskitgibt nun beim Import eine Warnung aus, wenn entwederqiskit.IBMQoderqiskit.Aernicht eingerichtet werden konnte. Dies geschieht immer dann, wenn etwas aus dem Namensraumqiskitimportiert 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 leereImportErrorerhä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
warningsunterdrü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
UundCXsind veraltet. Wenn Sie diese Gates in Ihrem Code verwenden, sollten Sie sie aktualisieren und stattdessenu3undcxverwenden. Wenn Sie zum Beispiel die Schaltkreis-Gate-Funktionencircuit.u_base()undcircuit.cx_base()verwenden, sollten Sie diese incircuit.u3()bzw.circuit.cx()ändern. -
Das
u0Tor wurde zugunsten der Verwendung mehrereridenTore veraltet und wird in Zukunft entfernt werden. Wenn du dasu0Gate in deiner Schaltung verwendest, solltest du deine Aufrufe aktualisieren undidenverwenden. Wenn Sie z. B. vorhercircuit.u0(2)in Ihrer Schaltung verwendet haben, sollten Sie dies nun ändern:circuit.iden() circuit.iden()stattdessen.
-
Die Klasse
qiskit.pulse.DeviceSpecificationist jetzt veraltet. Stattdessen sollten Sieqiskit.pulse.PulseChannelSpecverwenden. -
Der Zugriff auf eine Klasse
qiskit.circuit.Qubit,qiskit.circuit.Clbitoderqiskit.circuit.Bitüber den Index ist veraltet (aus Kompatibilität mit den(register, index)Tupeln, die diese Klassen ersetzt haben). Stattdessen sollten Sie die Attributeregisterundindexverwenden. -
Die Übergabe eines Bits an die Methode
qiskit.QuantumCircuitappendals Tupel(register, index)ist veraltet. Stattdessen sollten Bit-Objekte direkt verwendet werden. -
Der Zugriff auf die Elemente eines
qiskit.transpiler.LayoutObjekts mit einem Tupel(register, index)ist veraltet. Stattdessen sollte direkt ein Bit-Objekt verwendet werden. -
Die
qiskit.transpiler.LayoutKonstruktormethodeqiskit.transpiler.Layout.from_tuplelist()ist veraltet. Stattdessen sollte der Konstruktorqiskit.transpiler.Layout.from_qubit_list()verwendet werden. -
Das Modul
qiskit.pulse.opsist veraltet. Alle Funktionen, die es bietet:unionflattenshiftinsertappend
verfügen über gleichwertige Methoden, die direkt in den Klassen
qiskit.pulse.Scheduleundqiskit.pulse.Instructionverfügbar sind. Diese Methoden sollten stattdessen verwendet werden. -
Die Methode
qiskit.qasm.Qasmget_tokens()ist veraltet. Stattdessen sollten Sie die Methodegenerate_tokens()verwenden. -
Die Methode
qiskit.qasm.qasmparser.QasmParserget_tokens()ist veraltet. Stattdessen sollten Sie die Methoderead_tokens()verwenden. -
Die Methode
as_dict()für die Klasse Qobj ist veraltet und wird in Zukunft entfernt werden. Stattdessen sollten Sie die Aufrufe durchto_dict()ersetzen.
Fehlerkorrekturen
-
Die Definition von
CU3Gatewurde so geändert, dass sie der kanonischen Definition einer kontrolliertenU3Gateentspricht. -
Die Handhabung des Layouts im Passmanager wurde vereinheitlicht. Dies behebt mehrere gemeldete Probleme bei der Handhabung des Layouts. Der
initial_layoutkwarg Parameter aufqiskit.compiler.transpile()undqiskit.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:
Sonstige Anmerkungen
-
Der Standardwert PassManager für
qiskit.compiler.transpile()undqiskit.execute()wurde auf den unterqiskit.transpile.preset_passmanagers.level1_pass_managerdefinierten 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.DAGCircuitnode_counterwurde 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 Namensraumqiskit.transpiler, wie er vonlogging.getLogger('qiskit.transpilerverwendet 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
- Logging-Modul
- Reinheit RB
- Interleaved RB
- Wiederholungscode für die Verifizierung
- Saatgutwerte können nun beliebig zu RB hinzugefügt werden (nicht nur in der Reihenfolge)
- Unterstützung für das Hinzufügen mehrerer Ergebnisse zur Messungsbegrenzung
- RB Fitters unterstützt jetzt die Angabe von Schätzwerten
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) undrcccx(mit 3 Kontrollen). -
Variationsform
RYCRX -
Ein neuer
'basic-no-ancilla'Modus aufmct. -
Mehrfach gesteuerte Drehtore
mcrx,mcryundmcrzals allgemeines Toru3werden 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,WeightedPauliOperatorundTPBGroupedPauliOperatorhinzu. -
Fügen Sie die Funktion
evolution_instructionhinzu, um eine registerlose Anweisung zur Zeitentwicklung zu erhalten. -
Hinzufügen des Moduls
op_converterzur Vereinheitlichung der Stelle, die für die Umwandlung verschiedener Arten von Operatoren zuständig ist. -
Fügen Sie die Klasse
Z2Symmetrieshinzu, 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_motionhinzu, 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
Qubitvon Qiskit Terra an. - Verhindern Sie, dass
QPE/IQPEdie eingegebenenOperatorObjekte 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 KlasseMatrixOperator,WeightedPauliOperatorundTPBGroupedPauliOperator. - Die
powerinevolution_instructionwurde 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_CACHEeingestellt werden.
Fehlerkorrekturen
- Ein Fehler, bei dem
TruthTableOraclefalsche Schaltungen für Wahrheitstabellen mit nur einem einzigen1Wert 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_layoutinQuantumInstanceüber eine Liste.
Entfernt
- Das allgemeine mehrfach gesteuerte Drehtor
mcu3wird entfernt und durch die mehrfach gesteuerten Drehtoremcrx,mcry, undmcrz
Veraltet
- Die Klasse
Operatorist veraltet und wird durchMatrixOperator,WeightedPauliOperatorundTPBGroupedPauliOperatorersetzt.
IBM Q Anbieter 0.3
Keine Änderung