Qiskit 0.18 Versionshinweise
0.18.3
Terra- 0.13.0
Keine Änderung
Aer- 0.5.1
Anmerkungen zu Upgrades
- Ä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 es insbesondere, je nach QasmController Simulationsmethode unterschiedliche Parameter für den Gate-Fusion-Optimierungsdurchlauf einzustellen.
- Fügen Sie
gate_length_unitskwarg zuqiskit.providers.aer.noise.NoiseModel.from_device()hinzu, um benutzerdefiniertegate_lengthsin der Geräuschmodellfunktion zu spezifizieren, um Einheitenumwandlungen für internen Code zu handhaben. - Hinzufügen des Controlled-Y ("cy")-Gatters zu den vom Stabilizer-Simulator unterstützten Gateset-Methoden.
- Für Aer's Backend ist die jsonschema-Validierung von qobj-Eingabeobjekten aus terra nun opt-in statt standardmäßig aktiviert. Wenn Sie die Jsonschema-Validierung von qobj aktivieren möchten, setzen Sie den
validatekwarg in derqiskit.providers.aer.QasmSimualtor.run()Methode für das Backend-Objekt aufTrue.
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.
-
Die Controller-Klassen werden so korrigiert, dass der ReduceBarrier Transpilierungsdurchgang zuerst angewendet wird. Dadurch wird verhindert, dass Barrierebefehle das Abschneiden unbenutzter Qubits verhindern, wenn der einzige für sie definierte Befehl eine Barriere war.
-
Deaktiviert die Gatterfusion für die Matrixprodukt-Zustandssimulationsmethode, da dies in einigen Fällen zu Problemen mit falschen Ergebnissen geführt hat.
-
Behebung eines Fehlers bei der Umrechnung der Gatterzeiteinheit für das Bauteilrauschmodell mit thermischen Relaxationsfehlern und Gatterfehlern. Die Fehlerwahrscheinlichkeit des Depolarisationsfehlers wurde mit der Gate-Zeit in Mikrosekunden berechnet, während sie für die thermische Relaxation in Nanosekunden berechnet wurde. Dies führte dazu, dass kein depolarisierender Fehler angewendet wurde, da die falschen Einheiten das Gerät als kohärenzbegrenzt erscheinen lassen würden.
-
Behebung eines Fehlers bei der falschen Zusammensetzung von QuantumErrors, wenn die Qubits der zusammengesetzten Anweisungen unterschiedlich sind.
-
Behebung eines Problems, bei dem das "diagonale" Tor mit einer zu hohen Toleranz auf Einheitlichkeit geprüft wird. Dies führte dazu, dass Diagonalen, die aus Numpy-Funktionen erzeugt wurden, den Test oft nicht bestanden.
-
Die Optimierung der Schaltung zum Entfernen von Barrieren wird nun vor der Qubit-Trukation durchgeführt. Dies behebt ein Problem, bei dem Barrieren, die vom Terra-Transpiler über ansonsten inaktive Qubits eingefügt werden, verhindern, dass diese abgeschnitten werden.
Ignis- 0.3.0
Keine Änderung
Aqua- 0.6.6
Keine Änderung
IBM Q Anbieter 0.6.1
Keine Änderung
0.18.0
Terra- 0.13.0
Vorspiel
Die Version 0.13.0 enthält viele große Änderungen. Einige Highlights dieser Veröffentlichung sind:
Für den Transpiler haben wir die Graphenbibliothek, die zur Erstellung der qiskit.dagcircuit.DAGCircuit klasse, die die zugrunde liegende Datenstruktur für alle Operationen ist, auf retworkx umgestellt, um die Leistung erheblich zu verbessern. Die Geschwindigkeit der Umsetzung von Schaltkreisen sollte in der Version 0.13.0 deutlich höher sein als in früheren Versionen.
Die Art und Weise, in der die Pulsanweisungen aufgebaut sind, wurde erheblich vereinfacht. Jetzt sind Command s veraltet und ein einheitlicher Satz von Instruction s werden unterstützt.
Das Modul qiskit.quantum_info modul enthält mehrere neue Funktionen zur Erzeugung von Zufallsoperatoren (z.B. Cliffords und Quantenkanäle) und zur Berechnung der Diamantnorm von Quantenkanälen; Erweiterungen der Statevector und DensityMatrix um die Berechnung von Messwahrscheinlichkeiten und Stichprobenmessungen zu unterstützen, und mehrere neue Klassen basieren auf der symplektischen Darstellung von Pauli-Matrizen. Zu diesen neuen Klassen gehören Clifford-Operatoren (Clifford), N-Qubit-Matrizen, die in der Pauli-Basis spärlich sind (SparsePauliOp), Listen von Pauli-Matrizen (PauliTable) und Listen von Stabilisatoren (StabilizerTable).
Diese Version bietet auch eine erheblich verbesserte Dokumentation für Qiskit, einschließlich einer verbesserten Dokumentation für die qiskit.circuit, qiskit.pulse und qiskit.quantum_info module.
Außerdem wurde die Benennung von Gate-Objekten und QuantumCircuit methoden aktualisiert, um konsistenter zu sein. Dies hat dazu geführt, dass mehrere Klassen und Methoden im Zuge der Umstellung auf ein konsistenteres Benennungsschema veraltet sind.
Ausführliche Informationen zu allen Änderungen in dieser Version finden Sie in den detaillierten Versionshinweisen unten.
Neue Funktionen
-
Ein neues Modul für die Schaltungsbibliothek hinzugefügt
qiskit.circuit.library. Hier werden Konstrukteure häufig verwendeter Schaltungen zu finden sein, die als Bausteine für größere Schaltungen oder Anwendungen verwendet werden können. -
Die Klasse
qiskit.providers.BaseJobhat vier neue Methoden:done()running()cancelled()in_final_state()
Diese Methoden werden verwendet, um zu prüfen, ob sich ein Auftrag in einem bestimmten Auftragsstatus befindet.
-
Hinzufügen der Möglichkeit, die Kontrolle davon abhängig zu machen, dass sich ein Qubit im Grundzustand befindet. Der Zustand der Kontroll-Qubits wird durch eine ganze Zahl dargestellt. Zum Beispiel:
from qiskit import QuantumCircuit from qiskit.extensions.standard import XGate qc = QuantumCircuit(4) cgate = XGate().control(3, ctrl_state=6) qc.append(cgate, [0, 1, 2, 3])Erzeugt ein Vier-Qubit-Gatter, bei dem das vierte Qubit umgedreht wird, wenn sich das erste Qubit im Grundzustand und das zweite und dritte Qubit im angeregten Zustand befinden. Wenn
ctrl_stateNoneist, wird die Kontrolle davon abhängig gemacht, dass alle Kontrollbits erregt sind. -
Ein neues Jupyter-Widget,
%circuit_library_info, wurde hinzugefügt zuqiskit.tools.jupyter. Dieses Widget dient zur Visualisierung von Details zu Schaltungen, die aus der Schaltkreisbibliothek erstellt wurden. Zum Beispielfrom qiskit.circuit.library import XOR import qiskit.tools.jupyter circuit = XOR(5, seed=42) %circuit_library_info circuit -
Eine neue kwarg-Option,
formatted, wurde hinzugefügt zuqiskit.circuit.QuantumCircuit.qasm(). Wenn sie aufTruegesetzt wird, gibt die Methode eine syntaxmarkierte Version (unter Verwendung von pygments) auf stdout aus und gibtNonezurück (was sich vom normalen Verhalten der Rückgabe des QASM-Codes als String unterscheidet). -
Eine neue kwarg-Option,
filename, wurde hinzugefügt zuqiskit.circuit.QuantumCircuit.qasm(). Wird ein Pfad angegeben, schreibt die Methode den QASM-Code in diese Datei. Die Ausgabe wird dann wie gewohnt fortgesetzt. -
Eine neue Anweisung
SetFrequency, die es dem Benutzer ermöglicht, die Frequenz derPulseChannelzu ändern. Dies geschieht auf folgende Weise:from qiskit.pulse import Schedule from qiskit.pulse import SetFrequency sched = pulse.Schedule() sched += SetFrequency(5.5e9, DriveChannel(0))In diesem Beispiel ist die Frequenz aller Impulse vor dem Befehl
SetFrequencydie Standardfrequenz und alle Impulse, die nach dem BefehlSetFrequencyan den Antriebskanal Null angelegt werden, liegen bei 5.5 GHz. Benutzer vonSetFrequencysollten etwaige Hardware-Einschränkungen berücksichtigen. -
Eine neue Methode,
assign_parameters()wurde derqiskit.circuit.QuantumCircuitklasse. Diese Methode akzeptiert ein Parameterwörterbuch, das sowohl Floats als auch Parameter-Objekte in einem einzigen Wörterbuch enthält. Mit anderen Worten: Diese neue Methode ermöglicht es Ihnen, Floats, Parameter oder beides in einem einzigen Wörterbuch zu binden.Auch durch die Verwendung der
inplacekwarg kann es angegeben werden, können Sie optional die ursprüngliche Schaltung an Ort und Stelle zu ändern. Standardmäßig ist dies aufFalseeingestellt, und die Methode gibt eine Kopie des ursprünglichen Schaltkreises zurück. -
Eine neue Methode
num_nonlocal_gates()wurde derqiskit.circuit.QuantumCircuitklasse hinzugefügt. Diese Methode gibt die Anzahl der Gatter in einer Schaltung zurück, die 2 oder mehr Qubits enthalten. Diese Gates sind zeit- und fehleraufwändiger in der Umsetzung. -
Die
qiskit.circuit.QuantumCircuitmethodeiso()zum Hinzufügen einesIsometryGatters zur Schaltung hat einen neuen Alias. Sie können jetzt anrufenqiskit.circuit.QuantumCircuit.isometry()zusätzlich zuisoanrufen. -
Ein
description-Attribut wurde der KlasseCouplingMapklasse hinzugefügt, um eine kurze Beschreibung für verschiedene Kopplungskarten (z. B. Vollkarte, Gitterkarte, Linienkarte usw.) zu speichern. -
Eine neue Methode
compose()wurde der KlasseDAGCircuitklasse hinzugefügt, um zwei Schaltkreise über ihre DAGs zusammenzusetzen.dag_left.compose(dag_right, edge_map={right_qubit0: self.left_qubit1, right_qubit1: self.left_qubit4, right_clbit0: self.left_clbit1, right_clbit1: self.left_clbit0})┌───┐ ┌─────┐┌─┐ lqr_1_0: ───┤ H ├─── rqr_0: ──■──┤ Tdg ├┤M├ ├───┤ ┌─┴─┐└─┬─┬─┘└╥┘ lqr_1_1: ───┤ X ├─── rqr_1: ┤ X ├──┤M├───╫─ ┌──┴───┴──┐ └───┘ └╥┘ ║ lqr_1_2: ┤ U1(0.1) ├ + rcr_0: ════════╬════╩═ = └─────────┘ ║ lqr_2_0: ─────■───── rcr_1: ════════╩══════ ┌─┴─┐ lqr_2_1: ───┤ X ├─── └───┘ lcr_0: ═══════════ lcr_1: ═══════════ ┌───┐ lqr_1_0: ───┤ H ├────────────────── ├───┤ ┌─────┐┌─┐ lqr_1_1: ───┤ X ├─────■──┤ Tdg ├┤M├ ┌──┴───┴──┐ │ └─────┘└╥┘ lqr_1_2: ┤ U1(0.1) ├──┼──────────╫─ └─────────┘ │ ║ lqr_2_0: ─────■───────┼──────────╫─ ┌─┴─┐ ┌─┴─┐ ┌─┐ ║ lqr_2_1: ───┤ X ├───┤ X ├──┤M├───╫─ └───┘ └───┘ └╥┘ ║ lcr_0: ═══════════════════╩════╬═ ║ lcr_1: ════════════════════════╩═ -
Die Mock-Backends in
qiskit.test.mockhaben jetzt eine funktionierenderun()Methode, die ähnliche Ergebnisse wie die echten Geräte liefert. Wennqiskit-aerinstalliert ist, wird eine Simulation mit einem Rauschmodell durchgeführt, das aus dem Geräte-Snapshot im Fake-Backend erstellt wird. Andernfalls,qiskit.providers.basicaer.QasmSimulatorPyverwendet, um eine ideale Simulation durchzuführen. Wenn ein Impulsexperiment anrunübergeben wird und qiskit-aer installiert ist, wirdPulseSimulatorzur Simulation der Impulszeitpläne verwendet. -
Die
qiskit.result.Result()methodeget_counts()gibt nun eine Liste aller verfügbaren Zählungen zurück, wenn mehrere Stromkreise in einem Auftrag vorhanden sind. Dies funktioniert, wennget_counts()ohne Argumente aufgerufen wird.Bei dieser Funktion ging es vor allem darum, alle Ergebnisse aus mehreren Schaltkreisen in ein und demselben Histogramm darzustellen. Zum Beispiel ist es jetzt möglich, etwas zu tun wie:
from qiskit import execute from qiskit import QuantumCircuit from qiskit.providers.basicaer import BasicAer from qiskit.visualization import plot_histogram sim = BasicAer.get_backend('qasm_simulator') qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() result = execute([qc, qc, qc], sim).result() plot_histogram(result.get_counts()) -
Ein neuer kwarg,
initial_state, wurde der Funktionqiskit.visualization.circuit_drawer()funktion und derQuantumCircuitmethodedraw(). Wenn diese Option aufTruegesetzt ist, wird der Ausgangszustand in die Schaltkreisvisualisierung für alle Backends einbezogen. Zum Beispiel:from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='mpl', initial_state=True) -
Es ist nun möglich, eine Callable in eine
qiskit.pulse.InstructionScheduleMapeinzufügen, die ein neuesqiskit.pulse.Schedulezurückgibt, wenn es mit Parametern aufgerufen wird. Zum Beispiel:def test_func(x): sched = Schedule() sched += pulse_lib.constant(int(x), amp_test)(DriveChannel(0)) return sched inst_map = InstructionScheduleMap() inst_map.add('f', (0,), test_func) output_sched = inst_map.get('f', (0,), 10) assert output_sched.duration == 10 -
Zwei neue Gatterklassen,
qiskit.extensions.iSwapGateundqiskit.extensions.DCXGate, mit ihrenQuantumCircuitmethodeniswap()unddcx()wurden zu den Standarderweiterungen hinzugefügt. Diese Tore, die lokal gleichwertig sind, können zur Durchführung bestimmter XY-Interaktionen verwendet werden. Eine kurze Begründung für diese Gates findet sich in: arxiv.org/abs/quant-ph/0209035 -
Die Klasse
qiskit.providers.BaseJobverfügt jetzt über eine neue Methodewait_for_final_state(), die den Auftragsstatus abfragt, bis der Auftrag einen endgültigen Status erreicht (z. B.DONEoderERROR). Diese Methode nimmt auch eine optionalecallbackkwarg, die eine Python callable nimmt, die während jeder Iteration der Poll-Schleife aufgerufen wird. -
Die Attribute
search_widthundsearch_depthdesqiskit.transpiler.passes.LookaheadSwappasses sind jetzt beim Initialisieren des Passes einstellbar. Ein größerer Suchraum kann oft zu optimierteren Schaltungen führen, allerdings auf Kosten einer längeren Laufzeit. -
Die Anzahl der Qubits in
BackendConfigurationkann nun über die Eigenschaftnum_qubits. Bisher war sie nur über das Attributn_qubitszugänglich. -
Zwei neue Methoden,
angles()undangles_and_phase()wurden der Klasseqiskit.quantum_info.OneQubitEulerDecomposerklasse hinzugefügt. Diese Methoden geben die relevanten Parameter ohne Validierung zurück, und der Aufruf desOneQubitEulerDecomposerObjekts führt die vollständige Synthese mit Validierung durch. -
Eine
RRZersetzungsbasis wurde hinzugefügt, umqiskit.quantum_info.OneQubitEulerDecomposerzur Zerlegung einer beliebigen 2x2 unitary in zweiRGateSchaltungen hinzugefügt. -
Fügt die Möglichkeit hinzu,
qargsauf Objekte zu setzen, die Unterklassen der abstrakten KlasseBaseOperatorsind. Dies geschieht durch den Aufruf des Objektsop(qargs)(wobeiopeine Operatorklasse ist) und gibt eine flache Kopie des ursprünglichen Objekts mit einer gesetzten qargs-Eigenschaft zurück. Wenn ein solches Objekt mit der Optioncompose()oderdot()methoden verwendet wird, wird der interne Wert für qargs verwendet, wenn dieqargsMethode kwarg nicht verwendet wird. Dies ermöglicht z. B. die Komposition von Teilsystemen mit Hilfe von binären Operatoren:from qiskit.quantum_info import Operator init = Operator.from_label('III') x = Operator.from_label('X') h = Operator.from_label('H') init @ x([0]) @ h([1]) -
Fügt
qiskit.quantum_info.Cliffordoperatorklasse zum Modul quantum_info hinzu. Dieser Operator ist eine effiziente symplektische Darstellung eines N-Qubit-Unitaroperators aus der Clifford-Gruppe. Diese Klasse enthält eineto_circuit()methode zur Kompilierung in eineQuantumCircuitvon Clifford-Gattern mit einer minimalen Anzahl von CX-Gattern für bis zu 3-Qubits. Es bietet auch allgemeine Kompilierung für N > 3 Qubits, aber diese Methode ist nicht optimal für die Anzahl von Zwei-Qubit-Gattern. -
Fügt hinzu
qiskit.quantum_info.SparsePauliOpbetreiberklasse. Dies ist eine effiziente Darstellung einer N-Qubit-Matrix, die in der Pauli-Basis spärlich ist und eineqiskit.quantum_info.PauliTableund einen Vektor komplexer Koeffizienten für ihre Datenstruktur verwendet.Diese Klasse unterstützt einen Großteil der gleichen Funktionalität wie die
qiskit.quantum_info.Operatorklasse, so dassSparsePauliOpobjekte können gestreckt, zusammengesetzt, skalar multipliziert, addiert und subtrahiert werden.Numpy-Arrays oder
Operatorobjekte können in einSparsePauliOpumgewandelt werden, indem die Methode :class:`~qiskit.quantum_info.SparsePauliOp.from_operator verwendet wird.SparsePauliOpkann in eine dünnbesetzte csr_matrix oder ein dichtes Numpy-Array konvertiert werden, indem dieto_matrixmethode oder in einOperatorobjekt unter Verwendung derto_operatormethode.A
SparsePauliOpkann im Hinblick auf seinePauliTableKomponenten und Koeffizienten, seine Koeffizienten und Pauli-String-Labels mit derlabel_iter()methode und die (dichten oder spärlichen) Matrixkomponenten mit dermatrix_iter()methode. -
Hinzufügen
qiskit.quantum_info.diamond_norm()funktion zur Berechnung der Diamantnorm (vollständig begrenzte Spurennorm) eines Quantenkanals. Damit kann der Abstand zwischen zwei Quantenkanälen mitdiamond_norm(chan1 - chan2)berechnet werden. -
Es wurde eine neue Klasse
qiskit.quantum_info.PauliTablehinzugefügt. Dies ist eine effiziente symplektische Darstellung einer Liste von N-Qubit-Pauli-Operatoren. Einige Merkmale dieser Klasse sind:PauliTableobjekte zusammengesetzt werden können, und tensored, die einPauliTableObjekt mit der Kombination der Operation (compose(),dot(),expand(),tensor()) zwischen jedem Element der ersten Tabelle, mit jedem Element der zweiten Tabelle zurückgeben wird.- Die Addition von zwei Tabellen wirkt wie eine Listenkonkatenation der Begriffe in jeder Tabelle (
+). - Pauli-Tabellen können nach lexikographischer Reihenfolge (Tensorprodukt) oder nach Pauli-Gewichten sortiert werden (
sort()). - Doppelte Elemente können gezählt und gelöscht werden (
unique()). - Die PauliTable kann entweder in ihrer ursprünglichen symplektischen booleschen Array-Darstellung, als Pauli-String-Labels (
label_iter()) oder als dichtes Numpy-Array oder dünnbesetzte CSR-Matrizen (matrix_iter()) durchlaufen werden. - Überprüfung der Kommutation zwischen Elementen der Pauli-Tabelle und einer anderen Pauli-Tabelle (
commutes()) oder Pauli-Tabelle (commutes_with_all())
Weitere Einzelheiten finden Sie in der API-Dokumentation der Klasse
qiskit.quantum_info.PauliTable. -
Fügt die Klasse
qiskit.quantum_info.StabilizerTablehinzu. Dies ist eine Unterklasse der Klasseqiskit.quantum_info.PauliTable, die einen booleschen Phasenvektor zusammen mit dem Pauli-Tabellenfeld enthält. Dies ist eine Liste von Stabilisierungsoperatoren, die reelle Pauli-Operatoren mit einem Koeffizienten von +1 oder -1 sind. Da die Stabilisatormatrizen reell sind, ist die"Y"Etikettenmatrix als[[0, 1], [-1, 0]]definiert. Weitere Informationen finden Sie in der API-Dokumentation. -
Fügt hinzu
qiskit.quantum_info.pauli_basis()funktion, die eine N-Qubit-Pauli-Basis alsqiskit.quantum_info.PauliTableObjekt zurückgibt. Die Ordnung dieser Basis kann entweder nach der lexikographischen Standardordnung (Tensorprodukt) oder nach der Anzahl der nicht identischen Pauli-Terme (Gewicht) erfolgen. -
Fügt hinzu
qiskit.quantum_info.ScalarOpoperatorklasse, die ein skalares Vielfaches eines Identitätsoperators darstellt. Dies kann verwendet werden, um eine Identität auf Subsystemen beliebiger Dimension zu initialisieren, und sie wird implizit in andereBaseOperatorUnterklassen umgewandelt (wie eineqiskit.quantum_info.Operatoroderqiskit.quantum_info.SuperOp) umgewandelt, wenn sie mit diesen zusammengesetzt oder ihnen hinzugefügt wird.Beispiel: Identitätsoperator
from qiskit.quantum_info import ScalarOp, Operator X = Operator.from_label('X') Z = Operator.from_label('Z') init = ScalarOp(2 ** 3) # 3-qubit identity op = init @ X([0]) @ Z([1]) @ X([2]) # Op XZX -
Eine neue Methode,
reshape()wurde der Klasseqiskit.quantum_innfo.Operatorhinzugefügt, die eine flache Kopie einer Operator-Unterklasse mit umgestalteten Eingangs- oder Ausgangsdimensionen des Subsystems zurückgibt. Die kombinierten Abmessungen aller Teilsysteme müssen mit denen des ursprünglichen Betreibers übereinstimmen, sonst wird eine Ausnahme ausgelöst. -
Fügt hinzu
qiskit.quantum_info.random_clifford()zur Erzeugung eines zufälligenqiskit.quantum_info.Cliffordoperator. -
Hinzufügen
qiskit.quantum_info.random_quantum_channel()funktion zur Erzeugung eines zufälligen Quantenkanals mit festemChoi-rang in derStinespringdarstellung. -
Hinzufügen
qiskit.quantum_info.random_hermitian()zur Erzeugung eines zufälligen hermiteschenOperator. -
Hinzufügen
qiskit.quantum_info.random_statevector()zur Erzeugung einer zufälligenStatevector. -
Fügt
qiskit.quantum_info.random_pauli_table()hinzu, um eine zufälligeqiskit.quantum_info.PauliTablezu erzeugen. -
Fügt
qiskit.quantum_info.random_stabilizer_table()hinzu, um eine zufälligeqiskit.quantum_info.StabilizerTablezu erzeugen. -
Fügen Sie ein
num_qubits-Attribut zuqiskit.quantum_info.StateVectorundqiskit.quantum_info.DensityMatrixklassen. Dies liefert die Anzahl der Qubits für N-Qubit-Zustände und gibtNonefür Nicht-Qubit-Zustände zurück. -
Fügt hinzu
to_dict()undto_dict()methoden zur Konvertierung vonqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixobjekte in das Bra-Ket-Notationswörterbuch.Beispiel
from qiskit.quantum_info import Statevector state = Statevector.from_label('+0') print(state.to_dict())from qiskit.quantum_info import DensityMatrix state = DensityMatrix.from_label('+0') print(state.to_dict()) -
Fügt hinzu
probabilities()undprobabilities()zuqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen, die ein Array von Messergebniswahrscheinlichkeiten in der Berechnungsgrundlage für die angegebenen Subsysteme zurückgeben.Beispiel
from qiskit.quantum_info import Statevector state = Statevector.from_label('+0') print(state.probabilities())from qiskit.quantum_info import DensityMatrix state = DensityMatrix.from_label('+0') print(state.probabilities()) -
Fügt hinzu
probabilities_dict()undprobabilities_dict()zuqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen, die ein Wörterbuch-Array der Messergebniswahrscheinlichkeiten in der Berechnungsgrundlage für die angegebenen Subsysteme zurückgeben.from qiskit.quantum_info import Statevector state = Statevector.from_label('+0') print(state.probabilities_dict())from qiskit.quantum_info import DensityMatrix state = DensityMatrix.from_label('+0') print(state.probabilities_dict()) -
Hinzufügen
sample_counts()undsample_memory()methoden zu denStatevectorundDensityMatrixfür die Stichprobenerfassung von Messergebnissen auf Subsystemen hinzu.Beispiel:
Erzeugen eines Zählwörterbuchs durch Stichproben aus einem Zustandsvektor
from qiskit.quantum_info import Statevector psi = Statevector.from_label('+0') shots = 1024 # Sample counts dictionary counts = psi.sample_counts(shots) print('Measure both:', counts) # Qubit-0 counts0 = psi.sample_counts(shots, [0]) print('Measure Qubit-0:', counts0) # Qubit-1 counts1 = psi.sample_counts(shots, [1]) print('Measure Qubit-1:', counts1)Rückgabe des Arrays von Messergebnissen für jede Probe
from qiskit.quantum_info import Statevector psi = Statevector.from_label('-1') shots = 10 # Sample memory mem = psi.sample_memory(shots) print('Measure both:', mem) # Qubit-0 mem0 = psi.sample_memory(shots, [0]) print('Measure Qubit-0:', mem0) # Qubit-1 mem1 = psi.sample_memory(shots, [1]) print('Measure Qubit-1:', mem1) -
Fügt eine
measure()methode zu denqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixquantenzustandsklassen hinzu. Dies ermöglicht es, ein einzelnes Messergebnis aus den angegebenen Teilsystemen zu entnehmen und den Zustandsvektor auf den Zustand nach der Messung der Berechnungsgrundlage zu reduzieren. Zum Beispielfrom qiskit.quantum_info import Statevector psi = Statevector.from_label('+1') # Measure both qubits outcome, psi_meas = psi.measure() print("measure([0, 1]) outcome:", outcome, "Post-measurement state:") print(psi_meas) # Measure qubit-1 only outcome, psi_meas = psi.measure([1]) print("measure([1]) outcome:", outcome, "Post-measurement state:") print(psi_meas) -
Fügt eine
reset()methode zu denqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixquantenzustandsklassen hinzu. Dadurch können einige oder alle Teilsysteme auf den Zustand zurückgesetzt werden. Zum Beispielfrom qiskit.quantum_info import Statevector psi = Statevector.from_label('+1') # Reset both qubits psi_reset = psi.reset() print("Post reset state: ") print(psi_reset) # Reset qubit-1 only psi_reset = psi.reset([1]) print("Post reset([1]) state: ") print(psi_reset) -
Eine neue Visualisierungsfunktion
qiskit.visualization.visualize_transition()zur Visualisierung von einzelnen Qubit-Gate-Übergängen wurde hinzugefügt. Es nimmt eine einzelne Qubit-Schaltung auf und liefert eine Animation der Qubit-Zustandsübergänge auf einer Bloch-Kugel. Um diese Funktion nutzen zu können, müssen Sie die Abhängigkeiten für einen Matplotlib-Animation-Writer installiert und global konfiguriert haben. Weitere Einzelheiten hierzu finden Sie in der Dokumentation von matplotlib. Im Standardfall reicht es jedoch aus, sicherzustellen, dass FFmpeg installiert ist, um diese Funktion zu nutzen.Es unterstützt Schaltungen mit den folgenden Gattern:
HGateXGateYGateZGateRXGateRYGateRZGateSGateSdgGateTGateTdgGateU1Gate
Zum Beispiel:
from qiskit.visualization import visualize_transition from qiskit import * qc = QuantumCircuit(1) qc.h(0) qc.ry(70,0) qc.rx(90,0) qc.rz(120,0) visualize_transition(qc, fpg=20, spg=1, trace=True) -
execute()hat ein neues kwargschedule_circuit. Die Einstellungschedule_circuit=Trueermöglicht die Einplanung der Schaltung in eineSchedule. Dies ermöglicht Benutzern, dieqiskit.circuit.QuantumCircuitobjekten benutzerdefinierte Scheduler-Methoden wie die Methodenas_late_as_possibleundas_soon_as_possiblezu verwenden. Zum Beispiel:job = execute(qc, backend, schedule_circuit=True, scheduling_method="as_late_as_possible") -
Eine neue Umgebungsvariable
QISKIT_SUPPRESS_PACKAGING_WARNINGSkann aufYoderygesetzt werden, was die Warnungen über nicht installierteqiskit-aerundqiskit-ibmq-providerzum Zeitpunkt des Imports unterdrücken wird. Dies ist nützlich für Benutzer, die nur qiskit-terra (oder nur qiskit-aer und/oder qiskit-ibmq-provider) einsetzen und die Warnungen nicht auf ein mögliches Paketierungsproblem hinweisen. Sie können die Umgebungsvariable aufNodernsetzen, um sicherzustellen, dass die Warnungen immer aktiviert sind, auch wenn die Benutzerkonfigurationsdatei so eingestellt ist, dass sie ausgeschaltet sind. -
Eine neue Option für die Benutzerkonfigurationsdatei,
suppress_packaging_warnings, wurde hinzugefügt. Wenn Sie in Ihrer Benutzerkonfigurationsdatei den Werttrueangeben:[default] suppress_packaging_warnings = truewerden die Warnungen, dass
qiskit-aerundqiskit-ibmq-providerzum Zeitpunkt des Imports nicht installiert sind, unterdrückt. Dies ist nützlich für Benutzer, die nur qiskit-terra (oder nur qiskit-aer und/oder qiskit-ibmq-provider) einsetzen und die Warnungen nicht auf ein mögliches Paketierungsproblem hinweisen. Wenn die Benutzerkonfigurationsdatei so eingestellt ist, dass die Warnungen deaktiviert sind, kann dies überschrieben werden, indem dieQISKIT_SUPPRESS_PACKAGING_WARNINGSaufNodern -
qiskit.compiler.transpile()hat zwei neue kwargs,layout_methodundrouting_method. Diese ermöglichen es Ihnen, eine bestimmte Methode für die Platzierung und das Routing von Schaltungen auf eingeschränkten Architekturen zu wählen. Zum Beispiel:transpile(circ, backend, layout_method='dense', routing_method='lookahead')wird ausgeführt
DenseLayoutlayout-Durchlauf undLookaheadSwaprouting-Durchlauf. -
Die Art und Weise, in der die Pulsanweisungen aufgebaut sind, wurde erheblich vereinfacht.
Beim bisherigen Stil wurde
Commandmit Kanälen aufgerufen, um eineInstruction. Die Verwendung sowohl von Befehlen als auch von Anweisungen sorgte für Verwirrung. Das war der frühere Stil:sched += Delay(5)(DriveChannel(0)) sched += ShiftPhase(np.pi)(DriveChannel(0)) sched += SamplePulse([1.0, ...])(DriveChannel(0)) sched += Acquire(100)(AcquireChannel(0), MemorySlot(0))oder, gleichwertig (wenn auch weniger häufig):
sched += DelayInstruction(Delay(5), DriveChannel(0)) sched += ShiftPhaseInstruction(ShiftPhase(np.pi), DriveChannel(0)) sched += PulseInstruction(SamplePulse([1.0, ...]), DriveChannel(0)) sched += AcquireInstruction(Acquire(100), AcquireChannel(0), MemorySlot(0))Anstatt einen Befehl und eine Anweisung zu erstellen, wurde nun jeder Befehl in eine Anweisung umgewandelt:
sched += Delay(5, DriveChannel(0)) sched += ShiftPhase(np.pi, DriveChannel(0)) sched += Play(SamplePulse([1.0, ...]), DriveChannel(0)) sched += SetFrequency(5.5, DriveChannel(0)) # New instruction! sched += Acquire(100, AcquireChannel(0), MemorySlot(0)) -
Es gibt jetzt eine
Playanweisung, die eine Beschreibung einer Impulshüllkurve und einen Kanal annimmt. Es gibt eine neuePulseKlasse in derpulse_lib, von der die Puls-Hüllkurven-Beschreibung subclass sein sollte.Zum Beispiel:
Play(SamplePulse([0.1]*10), DriveChannel(0)) Play(ConstantPulse(duration=10, amp=0.1), DriveChannel(0))
Anmerkungen zu Upgrades
-
Die
qiskit.dagcircuit.DAGNodemethodepop, die in der Version 0.9.0 veraltet war, wurde entfernt. Wenn Sie diese Methode verwenden, können Sie Python 'sdelAnweisung oderdelattr()Funktion verwenden, um die gleiche Aufgabe zu erfüllen. -
Es wurde eine neue optionale Visualisierungsanforderung, pygments, hinzugefügt. Sie wird für die Syntaxhervorhebung von OpenQASM 2.0 Code in Jupyter-Widgets und optional für die
qiskit.circuit.QuantumCircuit.qasm()methode. Es muss installiert werden (entweder mitpip install pygmentsoderpip install qiskit-terra[visualization]), bevor man das Widget%circuit_library_infoinqiskit.tools.jupyteroder denformattedkwarg in derqasm()methode. -
Die Option pulse
buffer, die inqiskit.pulse.Channelundqiskit.pulse.Schedulewar in Terra 0.11.0 veraltet und wurde nun entfernt. Um eine Verzögerung auf einem Kanal oder in einem Zeitplan hinzuzufügen, geben Sie diese explizit in Ihrem Zeitplan mit einer Verzögerung an:sched = Schedule() sched += Delay(5)(DriveChannel(0)) -
PulseChannelSpec, die in Terra 0.11.0 veraltet war, wurde nun entfernt. Verwenden Sie stattdessen BackendConfiguration :config = backend.configuration() drive_chan_0 = config.drives(0) acq_chan_0 = config.acquires(0)oder verweisen Sie einfach direkt auf den Kanal, z. B.
DriveChannel(index). -
Ein Importpfad war in Terra 0.10.0 veraltet und wurde nun entfernt: für
PulseChannel,DriveChannel,MeasureChannelundControlChannelverwenden Siefrom qiskit.pulse.channels import Xanstelle vonfrom qiskit.pulse.channels.pulse_channels import X. -
Der Pass
qiskit.transpiler.passes.CSPLayout(der in der Version 0.11.0 eingeführt wurde) wurde dem voreingestellten Passmanager für die Optimierungsstufen 2 und 3 hinzugefügt. Für die Stufe 2 gibt es ein Anruflimit von 1.000 und ein Timeout von 10 Sekunden. Für die Stufe 3 liegt das Anruflimit bei 10.000 und die Zeitüberschreitung bei 1 Minute.Da der Pass nun in den voreingestellten Pass-Managern enthalten ist, ist das Paket python-constraint keine optionale Abhängigkeit mehr und wurde der Anforderungsliste hinzugefügt.
-
Die Klasse
TranspileConfig, die bisher verwendet wurde, um die Laufzeitkonfiguration für eineqiskit.transpiler.PassManagerwurde entfernt und durch eine neue Klasseqiskit.transpile.PassManagerConfigersetzt. Diese neue Klasse wurde so strukturiert, dass sie nur die Informationen enthält, die zur Erstellung einerPassManager. Die Attribute dieser Klasse sind:initial_layoutbasis_gatescoupling_mapbackend_propertiesseed_transpiler
-
Die Funktion
transpile_circuitinqiskit.transpilerwurde entfernt. Um eine Schaltung mit einem benutzerdefiniertenPassManagerzu transponieren, sollten Sie nun dierun()methode des :class:~qiskit.transpiler.PassManager` Objekts verwenden. -
Die
QuantumCircuitmethodedraw()undqiskit.visualization.circuit_drawer()funktion werden nicht mehr den Anfangszustand enthalten, der standardmäßig in Visualisierungen enthalten ist. Wenn Sie den Ausgangszustand in der Ausgabevisualisierung beibehalten möchten, müssen Sie deninitial_statekwarg aufTruesetzen. Zum Beispiel beim Laufen:from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='text')Der Ausgangszustand ist nicht mehr enthalten. Wenn Sie es behalten möchten, können Sie laufen:
from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='text', initial_state=True) -
qiskit.compiler.transpile()(undqiskit.execute.execute(), das interntranspileverwendet) wird nun einen Fehler auslösen, wenn derpass_managerkwarg gesetzt wird und ein Wert für andere kwargs gesetzt wird, die bereits in einem instanziertenPassManagerobjekt gesetzt sind. Zuvor wurden diese widersprüchlichen kwargs einfach ignoriert und die Werte in derPassManagerInstanz verwendet. Zum Beispiel:from qiskit.circuit import QuantumCircuit from qiskit.transpiler.pass_manager_config import PassManagerConfig from qiskit.transpiler import preset_passmanagers from qiskit.compiler import transpile qc = QuantumCircuit(5) config = PassManagerConfig(basis_gates=['u3', 'cx']) pm = preset_passmanagers.level_0_pass_manager(config) transpile(qc, optimization_level=3, pass_manager=pm)wird nun einen Fehler auslösen, während vor dieser Version der Wert in
pmeinfach stillschweigend verwendet wurde und der Wert füroptimization_levelkwarg ignoriert wurde. Dietranspilekwargs, auf die dies zutrifft, sind:optimization_levelbasis_gatescoupling_mapseed_transpilerbackend_propertiesinitial_layoutlayout_methodrouting_methodbackend
-
Die
Operator,Clifford,SparsePauliOp,PauliTable,StabilizerTable, Operatorklassen haben eine zusätzliche Methodecall, die es ihnen erlaubt, dem Operator ein qargs zuzuweisen, das mit demcompose(),dot(),evolve(),,,-, und verwendet werden kann. -
Die Additionsmethode der Klasse
qiskit.quantum_info.Operatorklasse akzeptiert nun einenqargkwarg, um das Hinzufügen eines kleineren Operators zu einem größeren zu ermöglichen, wobei Identitäten auf den anderen Subsystemen vorausgesetzt werden (wie beiqargsaufcompose()unddot()methoden). Dies ermöglicht das Hinzufügen von Subsystemen mit Hilfe der Aufrufmethode wie bei der Komposition. Diese Unterstützung wird zu allen BaseOperator Unterklassen (ScalarOp,Operator,QuantumChannel).Zum Beispiel:
from qiskit.quantum_info import Operator, ScalarOp ZZ = Operator.from_label('ZZ') # Initialize empty Hamiltonian n_qubits = 10 ham = ScalarOp(2 ** n_qubits, coeff=0) # Add 2-body nearest neighbour terms for j in range(n_qubits - 1): ham = ham + ZZ([j, j+1]) -
Die Klasse
BaseOperatorwurde aktualisiert, so dass Addition, Subtraktion und skalare Multiplikation keine abstrakten Methoden mehr sind. Dies bedeutet, dass sie nicht mehr in Unterklassen implementiert werden müssen, wenn sie nicht unterstützt werden. Die Basisklasse wird eineNotImplementedErrorauslösen, wenn die Methoden nicht definiert sind. -
Die Funktion
qiskit.quantum_info.random_density_matrix()funktion gibt nun ein zufälligesDensityMatrixobjekt zurück. In früheren Versionen wurde ein Numpy-Array zurückgegeben. -
Die
qiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixkopieren das Eingabefeld nicht mehr, wenn es bereits den richtigen dtype hat. -
fastjsonschema wird als Abhängigkeit hinzugefügt. Dies wird für eine viel schnellere Validierung von qobj-Wörterbüchern gegen das JSON-Schema verwendet, wenn die
to_dict()-Methode auf qobj-Objekten mit demvalidate-Schlüsselwortargument aufTrueaufgerufen wird. -
Die qobj-Konstruktionsklassen in
qiskit.qobjwerden standardmäßig nicht mehr gegen das qobj-Jsonschema validiert. Dazu gehören die folgenden Klassen:qiskit.qobj.QasmQobjInstructionqiskit.qobj.QobjExperimentHeaderqiskit.qobj.QasmQobjExperimentConfigqiskit.qobj.QasmQobjExperimentqiskit.qobj.QasmQobjConfigqiskit.qobj.QobjHeaderqiskit.qobj.PulseQobjInstructionqiskit.qobj.PulseQobjExperimentConfigqiskit.qobj.PulseQobjExperimentqiskit.qobj.PulseQobjConfigqiskit.qobj.QobjMeasurementOptionqiskit.qobj.PulseLibraryItemqiskit.qobj.QasmQobjInstructionqiskit.qobj.QasmQobjExperimentConfigqiskit.qobj.QasmQobjExperimentqiskit.qobj.QasmQobjConfigqiskit.qobj.QasmQobjqiskit.qobj.PulseQobj
Wenn Sie sich auf diese Validierung verlassen oder sie gegen das Qobj-Schema validieren möchten, können Sie dies tun, indem Sie den
validatekwarg aufTrueonto_dict()methode von einer der Qobj-Klassen der obersten EbeneQasmQobjoderPulseQobj. Zum Beispiel:die das Ausgabewörterbuch anhand des Qobj-Jsonschemas validiert.
-
Das Ausgabewörterbuch von
qiskit.qobj.QasmQobj.to_dict()undqiskit.qobj.PulseQobj.to_dict()hat nicht mehr das Format für eine direkte json-Serialisierung, wie es die API von IBMQ erwartet. Diese Qobj-Objekte sind das derzeitige Format, das wir für die Übergabe von Experimenten an Anbieter/Backends verwenden. Ein Wörterbuchformat, das einfach direkt an die IBMQ-API übergeben werden kann, war zwar fürqiskit-ibmq-providereinigermaßen nützlich, erschwerte aber die Arbeit für andere Anbieter. Insbesondere für Anbieter, die lokale Simulatoren verpacken. Künftig werden die Definitionen dessen, was zwischen Anbietern und dem IBMQ-API-Anforderungsformat übergeben wird, weiter entkoppelt (in einer rückwärtskompatiblen Weise), was die Erstellung von Anbietern und Backends erleichtern dürfte.In der Praxis besteht der einzige funktionale Unterschied zwischen der Ausgabe dieser Methoden und früheren Versionen darin, dass komplexe Zahlen mit dem Typ
complexdargestellt werden und Numpy-Arrays nicht mehr stillschweigend in Listen umgewandelt werden. Wenn Sie bisherjson.dumps()direkt auf der Ausgabe vonto_dict()aufgerufen haben, wird nach dieser Version ein benutzerdefinierter json-Encoder benötigt, um diese Fälle zu behandeln. Zum Beispiel:import json from qiskit.circuit import ParameterExpression from qiskit import qobj my_qasm = qobj.QasmQobj( qobj_id='12345', header=qobj.QobjHeader(), config=qobj.QasmQobjConfig(shots=1024, memory_slots=2, max_credits=10), experiments=[ qobj.QasmQobjExperiment(instructions=[ qobj.QasmQobjInstruction(name='u1', qubits=[1], params=[0.4]), qobj.QasmQobjInstruction(name='u2', qubits=[1], params=[0.4, 0.2]) ]) ] ) qasm_dict = my_qasm.to_dict() class QobjEncoder(json.JSONEncoder): """A json encoder for pulse qobj""" def default(self, obj): # Convert numpy arrays: if hasattr(obj, 'tolist'): return obj.tolist() # Use Qobj complex json format: if isinstance(obj, complex): return (obj.real, obj.imag) if isinstance(obj, ParameterExpression): return float(obj) return json.JSONEncoder.default(self, obj) json_str = json.dumps(qasm_dict, cls=QobjEncoder)generiert eine json-Zeichenkette in genau der gleichen Weise wie
json.dumps(my_qasm.to_dict())in früheren Versionen. -
CmdDefist seit Terra 0.11.0 veraltet und wurde entfernt. Bitte verwenden Sie weiterhinInstructionScheduleMapstattdessen. -
Die Methoden
cmdsundcmd_qubitsinInstructionScheduleMapsind seit Terra 0.11.0 veraltet und wurden entfernt. Bitte verwenden Sie stattdesseninstructionsundqubits_with_instruction. -
PulseDefaults haben
qubit_freq_estundmeas_freq_estseit der Terra-Veröffentlichung 0.11.0 in Hz statt in GHz angegeben. Eine Warnung, die auf diese Änderung hinwies, wurde entfernt. -
Die zuvor veraltete (in der Version 0.11.0 ) Unterstützung für die Übergabe von
qiskit.circuit.Instructionparameter der Typensympy.Basic,sympy.Expr,qiskit.qasm.node.node.Node(QASM AST node) undsympy.Matrixwurde entfernt. Die unterstützten Typen für Instruktionsparameter sind:intfloatcomplexstrlistnp.ndarrayqiskit.circuit.ParameterExpression
-
Die folgenden Eigenschaften von
BackendConfiguration:dtdtmrep_time
haben alle Einheiten von Sekunden. Vor der Veröffentlichung von 0.11.0,
dtunddtmwurden die Einheiten in Nanosekunden angegeben. Vor der Veröffentlichung von 0.12.0 hatterep_timeEinheiten von Mikrosekunden. Die Warnungen, die die Benutzer auf diese Änderungen hinwiesen, wurden nun vonBackendConfigurationentfernt. -
Der Liste der Anforderungen wurde eine neue Anforderung hinzugefügt: retworkx. Es handelt sich um eine Apache 2.0 lizenzierte Graphenbibliothek, die eine ähnliche API wie networkx hat und zur erheblichen Beschleunigung der
qiskit.dagcircuit.DAGCircuitoperationen als Teil des Transpilers erheblich zu beschleunigen. Auf PyPI sind Binärdateien für alle von Qiskit Terra unterstützten Plattformen veröffentlicht, aber wenn Sie eine Plattform verwenden, für die keine vorkompilierten Binärdateien veröffentlicht sind, finden Sie in der retworkx-Dokumentation Anweisungen zur Pip-Installation aus sdist.Wenn Sie im Rahmen der Umstellung Probleme mit dem Transpiler oder der DAGCircuit-Klasse haben, können Sie zur vorherigen networkx-Implementierung zurückkehren, indem Sie die Umgebungsvariable
USE_RETWORKXaufNsetzen. Diese Option wird in der Version 0.14.0 entfernt werden.
Hinweise zu veralteten Versionen
-
Die Übergabe der Daten an den Konstruktor für
qiskit.dagcircuit.DAGNodeals Wörterbuchargdata_dictist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie nun die Felder als kwargs an den Konstruktor übergeben. Zum Beispiel das bisherige Verhalten von:from qiskit.dagcircuit import DAGNode data_dict = { 'type': 'in', 'name': 'q_0', } node = DAGNode(data_dict)sollte jetzt sein:
from qiskit.dagcircuit import DAGNode node = DAGNode(type='in', name='q_0') -
Die Benennung von Gate-Objekten und -Methoden wurde aktualisiert, um konsistenter zu sein. Folgende Änderungen wurden vorgenommen:
- Die Pauli-Tore haben alle nur einen Großbuchstaben (
I,X,Y,Z) - Den parametrisierten Pauli-Toren (d. h. Rotationen) wird der Großbuchstabe
Rvorangestellt (RX,RY,RZ) - Bei einer kontrollierten Version wird der Großbuchstabe
Cvorangestellt (CX,CRX,CCX) - Gates werden nach ihrer Wirkung benannt, nicht nach ihren alternativen Namen (
CCX, nichtToffoli)
Die alten Namen sind veraltet und werden in einer zukünftigen Version entfernt. Dies ist eine Liste der Änderungen, die die alte und neue Klasse, das Namensattribut und die Methoden zeigt. Wenn eine neue Spalte leer ist, gibt es für diese keine Änderung.
Alte KlasseNeue KlasseAlter Name AttributNeues Attribut NameAlteqiskit.circuit.QuantumCircuitmethodeNeueqiskit.circuit.QuantumCircuitverfahrenToffoliGateCCXGateccxccx()undtoffoli()CrxGateCRXGatecrxcrx()CryGateCRYGatecrycry()CrzGateCRZGatecrzcrz()FredkinGateCSwapGatecswapcswap()undfredkin()Cu1GateCU1Gatecu1cu1()Cu3GateCU3Gatecu3cu3()CnotGateCXGatecxcx()undcnot()CyGateCYGatecycy()CzGateCZGateczcz()DiagGateDiagonalGatediagdiagonaldiag_gatediagonal()IdGateIGateidideni()undid()Isometryisoisometryiso()isometry()undiso()UCGUCGatemultiplexerigg uc()UCRotUCPauliRotGateUCXUCRXGateucrotXucrxucxucrx()UCYUCRYGateucrotyucryucyucry()UCZUCRZGateucrotzucrzuczucrz() - Die Pauli-Tore haben alle nur einen Großbuchstaben (
-
Der kwarg
periodfür die Funktionensquare(),sawtooth(), undtriangle()inqiskit.pulse.pulse_libist nun veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie nun diefreqkwarg verwenden, um die Frequenz einzustellen. -
Die Methoden
DAGCircuit.compose_back()undDAGCircuit.extend_back()sind veraltet und werden in einer zukünftigen Version entfernt. Stattdessen sollten Sie dieqiskit.dagcircuit.DAGCircuit.compose()verwenden, die eine allgemeinere und flexiblere Methode ist, die die gleiche Funktionalität bietet. -
Der
callbackkwarg desqiskit.transpiler.PassManagerkonstruktors der Klasse ist veraltet und wird in einer zukünftigen Version entfernt werden. Anstatt ihn auf Objektebene während der Erstellung zu setzen, sollte er nun als kwarg-Parameter in derqiskit.transpiler.PassManager.run()methode gesetzt werden. -
Die Schlüsselwörter
n_qubitsundnumberofqubitssind in Terra veraltet und werden durchnum_qubitsersetzt. Die alten Namen werden in einer zukünftigen Version entfernt werden. Die von dieser Änderung betroffenen Objekte sind im Folgenden aufgeführt:KlasseAlte MethodeNeue MethodeQuantumCircuitn_qubitsnum_qubits()Paulinumberofqubitsnum_qubits()FunktionAltes ArgumentNeues Argumentrandom_circuit()n_qubitsnum_qubitsMSGaten_qubitnum_qubits -
Die Funktion
qiskit.quantum_info.synthesis.euler_angles_1qist jetzt veraltet. Sie wurde abgelöst durch dieqiskit.quantum_info.OneQubitEulerDecomposerklasse ersetzt, die die gleiche Funktionalität bietet:OneQubitEulerDecomposer().angles(mat) -
Der
pass_managerkwarg für dieqiskit.compiler.transpile()ist veraltet und wird in einer zukünftigen Version entfernt werden. Der bevorzugte Weg, um einen Schaltkreis mit einem benutzerdefinierten Objekt zu transpilierenPassManagerobjekts ist die Verwendung derrun()methode desPassManagerObjekts. -
Die Funktion
qiskit.quantum_info.random_state()ist veraltet und wird in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie dieqiskit.quantum_info.random_statevector()funktion verwenden. -
Die Methoden
add,subtract, undmultiplyderqiskit.quantum_info.Statevectorundqiskit.quantum_info.DensityMatrixklassen sind veraltet und werden in einer zukünftigen Version entfernt werden. Stattdessen sollten Sie die binären Operatoren+,-,*verwenden. -
qiskit.quantum_info.Statevector.to_counts(),qiskit.quantum_info.DensityMatrix.to_counts()undqiskit.quantum_info.counts.state_to_counts()sind veraltet. Diese Funktionen werden durch die Klassenmethodenqiskit.quantum_info.Statevector.probabilities_dict()und ersetztqiskit.quantum_info.DensityMatrix.probabilities_dict(). -
SamplePulseundParametricPulses (z.B.Gaussian) sind jetzt Unterklassen vonPulseund wurden in dieqiskit.pulse.pulse_libverschoben. Der frühere Pfad über " pulse.commands " ist veraltet und wird in einer zukünftigen Version entfernt werden. -
DelayInstructionwurde veraltet und durchDelayersetzt. Diese neue Anweisung wurde von der vorherigenCommandDelayübernommen. Das Migrationsmuster ist:Delay(<duration>)(<channel>) -> Delay(<duration>, <channel>) DelayInstruction(Delay(<duration>), <channel>) -> Delay(<duration>, <channel>)Bis zum Ende des Verfallszeitraums wird auch die bisherige
DelaySyntax für den Aufruf eines Befehls auf einem Kanal unterstützt:Delay(<phase>)(<channel>)Die neue Anweisung
Delayunterstützt das Attributcommandnicht. -
FrameChangeundFrameChangeInstructionsind veraltet und wurden ersetzt durchShiftPhase. Die Änderungen sind:FrameChange(<phase>)(<channel>) -> ShiftPhase(<phase>, <channel>) FrameChangeInstruction(FrameChange(<phase>), <channel>) -> ShiftPhase(<phase>, <channel>)Bis zum Ende des Verfallszeitraums wird die bisherige FrameChange Syntax für den Aufruf eines Befehls auf einem Kanal unterstützt:
ShiftPhase(<phase>)(<channel>) -
Die Methode
callvonSamplePulseundParametricPulses ist veraltet. Die Migration verläuft wie folgt:Pulse(<*args>)(<channel>) -> Play(Pulse(*args), <channel>) -
AcquireInstructionist veraltet und wurde ersetzt durchAcquire. Die Änderungen sind:Acquire(<duration>)(<**channels>) -> Acquire(<duration>, <**channels>) AcquireInstruction(Acquire(<duration>), <**channels>) -> Acquire(<duration>, <**channels>)Bis zum Ende des Verfallszeitraums wird die bisherige Acquire-Syntax für den Aufruf des Befehls auf einem Kanal unterstützt:
Acquire(<duration>)(<**channels>)
Fehlerkorrekturen
-
Der
BarrierBeforeFinalMeasurementstranspiler-Durchgang, der in den voreingestellten Transpiler-Stufen enthalten ist, wenn ein physisches Gerät anvisiert wird, fügte zuvor eine Barriere nur über gemessene Qubits ein. In einigen Fällen erlaubte dies dem Transpiler, nach einer Messoperation einen Swap einzufügen, wodurch die Schaltung für aktuelle Geräte ungültig wurde. Der Pass wurde aktualisiert, so dass die eingefügte Barriere alle Qubits auf dem Gerät umfasst. Behebt #3937 -
Bei der Erweiterung einer
QuantumCircuitinstanz (Extendee) mit einem anderen Stromkreis (Extension) wird der Stromkreis per Referenz genommen. Wenn ein Schaltkreis mit sich selbst erweitert wird, führt dies zu einer Endlosschleife, da Erweiterungsnehmer und Erweiterung identisch sind. Dieser Fehler wurde behoben, indem die Erweiterung kopiert wurde, wenn es sich um dasselbe Objekt wie der Erweiterungsempfänger handelt. Behebt #3811 -
Behebt einen Fall in
qiskit.result.Result.get_counts()behoben, bei dem die Ergebnisse für einen Ablauf nicht referenziert werden konnten, wenn das Experiment als Schedule ohne Namen initialisiert wurde. Behebt #2753 -
Zuvor hatte das Ersetzen von
Parameterobjekte in einer Schaltung durch neue Parameter-Objekte vor der Zerlegung einer Schaltung dazu führen, dass die ersetzten Werte nicht korrekt in die zerlegten Gatter eingesetzt werden. Dies wurde so gelöst, dass Bindung und Abbau in beliebiger Reihenfolge erfolgen können. -
Das Matplotlib-Ausgabe-Backend für die
qiskit.visualization.circuit_drawer()funktion undqiskit.circuit.QuantumCircuit.draw()methodenschublade wurde korrigiert, umCU1Gategates korrekt darzustellen. Behebt #3684 -
Ein Fehler in
qiskit.circuit.QuantumCircuit.from_qasm_str()undqiskit.circuit.QuantumCircuit.from_qasm_file()beim Laden von QASM mit benutzerdefinierten Gates wurde behoben. Laden Sie nun dieses QASM:OPENQASM 2.0; include "qelib1.inc"; gate rinv q {sdg q; h q; sdg q; h q; } qreg q[1]; rinv q[0];entspricht der folgenden Schaltung:
rinv_q = QuantumRegister(1, name='q') rinv_gate = QuantumCircuit(rinv_q, name='rinv') rinv_gate.sdg(rinv_q) rinv_gate.h(rinv_q) rinv_gate.sdg(rinv_q) rinv_gate.h(rinv_q) rinv = rinv_gate.to_instruction() qr = QuantumRegister(1, name='q') expected = QuantumCircuit(qr, name='circuit') expected.append(rinv, [qr[0]])Behebt #1566
-
Zulassen, dass Quantenschaltungen Anweisungen Listenparameterwerte haben. Dies wird in Aer für Erwartungswert-Snapshot-Parameter verwendet, zum Beispiel
params = [[1.0, 'I'], [1.0, 'X']]]für . -
Bisher wurden für Schaltungen mit zusammengesetzten Gattern (die mit
qiskit.circuit.QuantumCircuit.to_gate()oderqiskit.circuit.QuantumCircuit.to_instruction()oder den entsprechenden Konvertern erstellt wurden), führte der Versuch, den Schaltkreis mehr als einmal zu binden, dazu, dass nur der erste Bindungswert auf alle Schaltkreise angewendet wurde, wenn sie transpiliert wurden. Dieses Problem wurde behoben, so dass die für nachfolgende Bindungen angegebenen Werte korrekt berücksichtigt werden.
Sonstige Anmerkungen
-
Die Klassen qasm und pulse qobj:
QasmQobjInstructionQobjExperimentHeaderQasmQobjExperimentConfigQasmQobjExperimentQasmQobjConfigQobjHeaderPulseQobjInstructionPulseQobjExperimentConfigPulseQobjExperimentPulseQobjConfigQobjMeasurementOptionPulseLibraryItemQasmQobjInstructionQasmQobjExperimentConfigQasmQobjExperimentQasmQobjConfigQasmQobjPulseQobj
von
qiskit.qobjwurden alle ohne Verwendung der marsmallow-Bibliothek neu implementiert. Diese neuen Implementierungen sind so konzipiert, dass sie einen sofortigen Ersatz darstellen (mit Ausnahme der in den Versionshinweisen des Upgrades genannten Fälle), aber die von Marshmallow übernommenen Besonderheiten funktionieren möglicherweise nicht. Bitte melden Sie alle gefundenen Inkompatibilitäten.
Aer- 0.5.0
Hinzugefügt
- Unterstützung für Terra-Diagonaltor hinzufügen
- Unterstützung für parametrisierte qobj hinzufügen
Fest
- Postfix für Linux auf Raspberry Pi hinzugefügt
- Verarbeitung von Numpy-Array-Eingaben von qobj
Ignis- 0.3.0
Hinzugefügt
- API-Dokumentation
- CNOT-Dihedral randomisiertes Benchmarking
- Akkreditierungsmodul für die Ausgangsakkreditierung von lauten Geräten
- Impulskalibrierungen für einzelne Qubits
- Impuls-Diskriminator
- Schaltungen zur Verifikation der Verschränkung
- Gateset-Tomographie für Ein-Qubit-Gatesätze
- Fügt randomisierte Benchmarking-Utility-Funktionen hinzu
calculate_1q_epg,calculate_2q_epgFunktionen zur Berechnung von 1- und 2-Qubit-Fehlern pro Tor aus Fehlern pro Clifford - Fügt randomisierte Benchmarking-Utility-Funktionen
calculate_1q_epc,calculate_2q_epczur Berechnung von 1- und 2-Qubit-Fehlern pro Clifford aus Fehlern pro Tor hinzu
Geändert
- Unterstützung ganzzahliger Bezeichnungen für Qubits in der Tomographie
- Unterstützung von Integer-Etiketten zur Messfehlerbegrenzung
Veraltet
- Die Funktion
twoQ_clifford_errorist veraltet. Verwenden Sie stattdessencalculate_2q_epc. - Python 3.5 unterstützung in qiskit-ignis ist veraltet. Die Unterstützung wird am Ende des Lebensdatums der Python-Community für diese Version eingestellt, das ist der 13.09.2020.
Aqua- 0.6.5
Keine Änderung
IBM Q Anbieter 0.6.0
Keine Änderung