Qiskit 0.7 Versionshinweise
0.7
In Qiskit 0.7 haben wir Qiskit Aer eingeführt und es mit Qiskit Terra kombiniert.
Terra- 0.7
Neue Funktionen
Diese Version enthält mehrere neue Funktionen und viele Fehlerkorrekturen. Mit dieser Version werden die Schnittstellen für Schaltplan-, Histogramm-, Bloch-Vektoren- und Zustandsvisualisierungen für stabil erklärt. Außerdem enthält diese Version eine definierte und standardisierte Bitreihenfolge/Endlichkeit in allen Aspekten von Qiskit. Diese sind in dieser Version als stabile Schnittstellen deklariert, an denen in Zukunft keine Änderungen mehr vorgenommen werden, es sei denn, es gibt angemessene und lange Verfallsfristen, die vor kommenden Änderungen warnen.
Außerdem wurden folgende neue Funktionen eingeführt:
- Ein neuer Ausgabemodus für ASCII-Schaltkreiszeichnungen
- Eine neue Schnittstelle zum Zeichnen von Schaltkreisen aus
QuantumCircuitObjekten, die Aufrufe voncircuit.draw()oderprint(circuit)ermöglicht, um eine Zeichnung von Schaltkreisen zu erstellen - Ein Visualisierungsprogramm zum Zeichnen der DAG-Darstellung einer Schaltung
- Ein neuer Quantenzustandsdiagrammtyp für Hinton-Diagramme in den lokalen matplotlib-basierten Zustandsdiagrammen
- 2 neue Konstruktormethoden der Klassen
QuantumCircuitfrom_qasm_str()undfrom_qasm_file(), mit denen man leicht ein Schaltkreisobjekt aus OpenQASM - Eine neue Funktion
plot_bloch_multivector()zur Darstellung von Bloch-Vektoren aus einem Tensored State Vektor oder einer Dichtematrix - Die Messergebnisse pro Schuss sind in Simulatoren und ausgewählten Geräten verfügbar. Auf diese kann man zugreifen, indem man beim Aufruf von
compile()oderexecute()den kwargmemoryaufTruesetzt und dann mit der Methodeget_memory()auf das ObjektResultzugreift. - Ein
qiskit.quantum_infoModul mit überarbeiteten Pauli-Objekten und Methoden für die Arbeit mit Quantenzuständen - Neue transpile Pässe für die Analyse und Transformation von Schaltkreisen:
CommutationAnalysis,CommutationTransformation,CXCancellation,Decompose,Unroll,Optimize1QGates,CheckMap,CXDirection,BarrierBeforeFinalMeasurements - Neue alternative Swap-Mapper-Pässe im Transpiler:
BasicSwap,LookaheadSwap,StochasticSwap - Erweiterte Transpiler-Infrastruktur mit Unterstützung für Analysedurchläufe, Transformationsdurchläufe, ein globales
property_setfür den Durchlaufmanager und Wiederholungssteuerung von Durchläufen
Hinweise zur Kompatibilität
Als Teil der Version 0.7 wurden die folgenden Dinge veraltet und werden entweder entfernt oder in einer zukünftigen Version abwärtskompatibel geändert. Auch wenn dies nicht unbedingt notwendig ist, so sind dies doch Dinge, die man vor der nächsten Version anpassen sollte, um eine grundlegende Änderung zu vermeiden.
plot_circuit(),latex_circuit_drawer(),generate_latex_source()undmatplotlib_circuit_drawer()von qiskit.tools.visualization sind veraltet. Stattdessen sollte die Funktioncircuit_drawer()aus demselben Modul verwendet werden. Es gibt kwarg-Optionen, die die Funktionalität aller veralteten Funktionen widerspiegeln.- Die derzeitige Standardausgabe von
circuit_drawer()(unter Verwendung von Latex und Rückgriff auf Python) ist veraltet und wird in zukünftigen Versionen auf die Standardausgabe vontextumgestellt werden. - Die Funktionen
qiskit.wrapper.load_qasm_string()undqiskit.wrapper.load_qasm_file()sind veraltet und die KonstruktormethodenQuantumCircuit.from_qasm_str()undQuantumCircuit.from_qasm_file()sollten stattdessen verwendet werden. - Die Schlüssel
plot_barriersundreverse_bitsimstylekwarg-Wörterbuch sind veraltet, stattdessen sollten dieqiskit.tools.visualization.circuit_drawer()kwargsplot_barriersundreverse_bitsverwendet werden. - Die Funktionen
plot_state()undiplot_state()wurden abgeschrieben. Stattdessen sollten die Funktionenplot_state_*()undiplot_state_*()für die gewünschte Visualisierungsmethode aufgerufen werden. - Das Argument
skip_transpilerwurde auscompile()undexecute()gestrichen. Stattdessen können SiePassManagerdirekt verwenden, setzen Sie einfachpass_managerauf ein leeresPassManagerObjekt mitPassManager() - Die Funktion
transpile_dag()formatkwarg zur Ausgabe verschiedener Ausgabeformate ist veraltet, stattdessen sollten Sie das StandardausgabeobjektDAGCircuitin das gewünschte Format konvertieren. - Die Unroller wurden veraltet, in Zukunft wird nur noch das Abrollen von DAG zu DAG unterstützt.
Bitte beachten Sie, dass in dieser Version einige abwärtskompatible Änderungen vorgenommen wurden. Die folgenden Hinweise enthalten Informationen darüber, wie Sie sich auf diese Änderungen einstellen können.
Änderungen an Ergebnisobjekten
Im Rahmen der Überarbeitung des Results-Objekts im Hinblick auf mehr Konsistenz und eine stabile Schnittstelle wurden einige Änderungen am Zugriff auf die im Ergebnisobjekt gespeicherten Daten vorgenommen. Zunächst wurde die Methode get_data() in data() umbenannt. Mit dieser Änderung geht eine Änderung des von der Funktion zurückgegebenen Datenformats einher. Es werden nun die Rohdaten von den Backends zurückgegeben, anstatt eine Nachbearbeitung vorzunehmen. In früheren Versionen konnten Sie zum Beispiel aufrufen:
result = execute(circuit, backend).result()
unitary = result.get_data()['unitary']
print(unitary)und das würde die unitäre Matrix wie zurückgeben:
[[1+0j, 0+0.5j], [0-0.5j][-1+0j]]Aber jetzt, wenn Sie (mit der umbenannten Methode) aufrufen:
result.data()['unitary']wird etwas zurückgegeben wie:
[[[1, 0], [0, -0.5]], [[0, -0.5], [-1, 0]]]Um die nachverarbeiteten Ergebnisse im gleichen Format wie vor der Veröffentlichung von 0.7 zu erhalten, müssen Sie die Methoden get_counts(), get_statevector() und get_unitary() für das Ergebnisobjekt anstelle von get_data()['counts'], get_data()['statevector'] bzw. get_data()['unitary'] verwenden.
Darüber hinaus wurde die Unterstützung für len() und die Indizierung auf einem Result Objekt entfernt. Stattdessen sollten Sie sich mit der Ausgabe der nachverarbeiteten Methoden auf den Ergebnisobjekten befassen.
Außerdem wurden die Methoden get_snapshot() und get_snapshots() aus der Klasse Result entfernt. Stattdessen können Sie mit Result.data()['snapshots'] auf die Schnappschüsse zugreifen.
Änderungen an der Visualisierung
Die größte Änderung, die in der Version 0.7 im Bereich der Visualisierung vorgenommen wurde, ist die Entfernung von Matplotlib und anderen Visualisierungsabhängigkeiten aus den Projektanforderungen. Dies wurde getan, um die Anforderungen und die Konfiguration für die Installation von Qiskit zu vereinfachen. Wenn Sie irgendwelche Visualisierungen (einschließlich aller Jupyter-Magics) mit Ausnahme der Ausgaben text, latex und latex_source für die Schaltkreisschublade verwenden möchten, müssen Sie manuell sicherstellen, dass die Visualisierungsabhängigkeiten installiert sind. Sie können die optionalen Anforderungen an das Qiskit Terra-Paket nutzen, um dies zu tun:
pip install qiskit-terra[visualization]Abgesehen davon wurden im Rahmen der Stabilisierung Änderungen an mehreren Schnittstellen vorgenommen, die sich auf bestehenden Code auswirken können. Die erste ist, dass basis kwarg in der Funktion circuit_drawer() nicht mehr akzeptiert wird. Wenn Sie sich auf circuit_drawer() verlassen haben, um die Basisgatter, die beim Zeichnen eines Schaltplans verwendet werden, anzupassen, müssen Sie dies vor dem Aufruf von circuit_drawer() tun. Zum Beispiel:
from qiskit.tools import visualization
visualization.circuit_drawer(circuit, basis_gates='x,U,CX')angepasst werden müssen, um zu sein:
from qiskit import BasicAer
from qiskit import transpiler
from qiskit.tools import visualization
backend = BasicAer.backend('qasm_simulator')
draw_circ = transpiler.transpile(circuit, backend, basis_gates='x,U,CX')
visualization.circuit_drawer(draw_circ)In Zukunft wird die Funktion circuit_drawer() die einzige Schnittstelle für das Zeichnen von Schaltungen im Visualisierungsmodul sein. Vor der Version 0.7 gab es mehrere andere Funktionen, die entweder andere Ausgabe-Backends verwendeten oder die Ausgabe für das Zeichnen von Schaltkreisen änderten. All diese anderen Funktionen sind jedoch veraltet und wurden als Optionen auf circuit_drawer() integriert.
Bei den anderen Visualisierungsfunktionen, plot_histogram() und plot_state() , gibt es ebenfalls ein paar Änderungen, die bei einem Upgrade zu beachten sind. Erstens hat sich die Ausgabe dieser Funktionen geändert. In früheren Versionen zeigten diese Funktionen interaktiv die Ausgabevisualisierung an. Dies hat sich jedoch geändert und gibt nun ein matplotlib.Figure Objekt zurück. Dies bietet viel mehr Flexibilität und Optionen, um mit der Visualisierung zu interagieren, bevor sie gespeichert oder angezeigt wird. Dies erfordert eine Anpassung der Art und Weise, wie diese Funktionen in Anspruch genommen werden. Zum Beispiel vor dieser Version beim Aufruf:
plot_histogram(counts)
plot_state(rho)würde neue Fenster öffnen (abhängig vom Matplotlib-Backend), um die Visualisierung anzuzeigen. Ab 0.7 müssen Sie jedoch show() für die Ausgabe aufrufen, um dieses Verhalten widerzuspiegeln. Zum Beispiel:
plot_histogram(counts).show()
plot_state(rho).show()oder:
hist_fig = plot_histogram(counts)
state_fig = plot_state(rho)
hist_fig.show()
state_fig.show()Beachten Sie, dass dies nur bei der Ausführung außerhalb von Jupyter gilt. In einer Jupyter-Umgebung sind keine Anpassungen erforderlich, da Jupyter-Notebooks von Haus aus wissen, wie man matplotlib.Figure Objekte rendert.
Die Rückgabe des Figure-Objekts bietet jedoch zusätzliche Flexibilität beim Umgang mit der Ausgabe. Anstatt die Abbildung nur anzuzeigen, können Sie sie zum Beispiel direkt in einer Datei speichern, indem Sie die Methode savefig() nutzen. Zum Beispiel:
hist_fig = plot_histogram(counts)
state_fig = plot_state(rho)
hist_fig.savefig('histogram.png')
state_fig.savefig('state_plot.png')Der andere wichtige Aspekt, der sich bei diesen Funktionen geändert hat, ist die Ausführung unter Jupyter. In den Versionen 0.6 plot_state() und plot_histogram() wurden unter Jupyter standardmäßig die interaktiven Javascript-Plots verwendet, wenn die extern gehostete Javascript-Bibliothek zum Rendern der Visualisierung über das Netzwerk erreichbar war. Wenn nicht, würde es einfach die Matplotlib-Version verwenden. In der Version 0.7 ist dies jedoch nicht mehr der Fall, und stattdessen sind separate Funktionen für die interaktiven Plots, iplot_state() und iplot_histogram() , zu verwenden. plot_state() und plot_histogram() verwenden immer die Matplotlib-Versionen.
Außerdem wird ab dieser Version die Funktion plot_state() zugunsten des Aufrufs individueller Methoden für jede Methode zur Darstellung eines Quantenzustands veraltet. Während die Funktion plot_state() bis zur Freigabe von 0.9 weiterhin funktioniert, gibt sie bei jeder Verwendung eine Warnung aus. Der
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) |
Dasselbe gilt für das interaktive JS-Äquivalent, iplot_state(). Die Funktionsnamen sind alle gleich, nur mit einem vorangestellten i für jede Funktion. Zum Beispiel: iplot_state(rho, method='paulivec') ist iplot_state_paulivec(rho).
Änderungen an Backends
Mit den Verbesserungen in der Version 0.7 gibt es ein paar Dinge in Bezug auf Backends, die bei einem Upgrade zu beachten sind. Die größte Änderung ist die Umstrukturierung der Provider-Instanzen im Root-Namensraum qiskit` . Der Anbieter Aer ist nicht standardmäßig installiert und erfordert die Installation des Pakets qiskit-aer . Dieses Paket enthält den neuen leistungsstarken, voll ausgestatteten Simulator. Wenn Sie über pip install qiskit installiert haben, haben Sie dies bereits installiert. Die Python-Simulatoren sind jetzt unter qiskit.BasicAer verfügbar und die alten C++-Simulatoren sind unter qiskit.LegacySimulators verfügbar. Dies bedeutet auch, dass der implizite Rückgriff auf Python-basierte Simulatoren, wenn die C++-Simulatoren nicht gefunden werden, nicht mehr existiert. Wenn Sie nach einem lokalen C++-basierten Simulator-Backend fragen und dieser nicht gefunden werden kann, wird eine Ausnahme ausgelöst, anstatt den Python-Simulator zu verwenden.
Außerdem wurden die bisher veralteten Top-Level-Funktionen register() und available_backends() entfernt. Außerdem wurden die veralteten Methoden backend.parameters() und backend.calibration() zugunsten von backend.properties() entfernt. Weitere Einzelheiten zu diesen Änderungen finden Sie in den 0.6 Versionshinweisen im Abschnitt Arbeiten mit Backends.
Die Aufrufe backend.jobs() und backend.retrieve_jobs() liefern keine Ergebnisse mehr von diesen Aufträgen. Stattdessen müssen Sie die Methode result() für die zurückgegebenen Auftragsobjekte aufrufen.
Änderungen am Compiler, Transpiler und Unrollern
Im Rahmen der Bemühungen um eine Stabilisierung der Compiler-Schnittstellen wurden mehrere Änderungen vorgenommen, die bei der Nutzung der Compiler-Funktionen zu beachten sind. Zunächst ist es wichtig zu wissen, dass die Funktion qiskit.transpiler.transpile() jetzt ein QuantumCircuit Objekt (oder eine Liste von Objekten) annimmt und ein QuantumCircuit Objekt (oder eine Liste von Objekten) zurückgibt. Die DAG-Verarbeitung wird jetzt intern durchgeführt.
Sie können jetzt auch einfach zwischen Schaltkreisen, DAGs und Qobj wechseln, indem Sie die Funktionen in qiskit.converters verwenden.
Aer- 0.1
Neue Funktionen
Aer bietet drei Simulator-Backends:
QasmSimulatorsimulation von Experimenten und Rückgabe von MessergebnissenStatevectorSimulatorrückgabe des endgültigen Zustandsvektors für einen Quantenschaltkreis, der auf den Zustand Null einwirktUnitarySimulatorrückgabe der unitären Matrix für eine Quantenschaltung
noise modul: enthält erweiterte Geräuschmodellierungsfunktionen für die QasmSimulator
NoiseModelQuantumError, Klassen für die Simulation eines Qiskit-Quantenschaltkreises in Anwesenheit von FehlernReadoutErrorerrorsuntermodul mit Funktionen zur Erzeugung vonQuantumErrorObjekten für die folgenden Arten von Quantenfehlern: Kraus, gemischt unitär, kohärent unitär, Pauli, depolarisierend, thermische Relaxation, Amplitudendämpfung, Phasendämpfung, kombinierte Phasen- und Amplitudendämpfungdeviceuntermodul zur automatischen Erzeugung eines Geräuschmodells auf der Grundlage vonBackendPropertieseines Geräts
utils Modul:
qobj_utilsbietet Funktionen zur direkten Modifizierung eines Qobj, um spezielle Simulatoranweisungen einzufügen, die noch nicht von der Qiskit Terra API unterstützt werden.
Aqua- 0.4
Neue Funktionen
-
Programmatische APIs für Algorithmen und Komponenten - jede Komponente kann nun über einen einzigen (nicht leeren) Konstruktoraufruf instanziiert und initialisiert werden
-
QuantumInstanceAPI für die Entkopplung von Algorithmus und Backend -QuantumInstancekapselt ein Backend und seine Einstellungen -
Aktualisierte Dokumentation und Jupyter Notebooks zur Veranschaulichung der neuen programmatischen APIs
-
Transparente Parallelisierung für gradientenbasierte Optimierer
-
Multiple-Controlled-NOT (cnx) Betrieb
-
Steckbare algorithmische Komponente
RandomDistribution -
Konkrete Implementierungen von
RandomDistribution:BernoulliDistribution,LogNormalDistribution,MultivariateDistribution,MultivariateNormalDistribution,MultivariateUniformDistribution,NormalDistribution,UniformDistribution, undUnivariateDistribution -
Konkrete Implementierungen von
UncertaintyProblem:FixedIncomeExpectedValue,EuropeanCallExpectedValue, undEuropeanCallDelta -
Algorithmus zur Schätzung der Amplitude
-
Qiskit-Optimierung: Neue Ising-Modelle für Optimierungsprobleme exakte Abdeckung, Mengenpackung, Vertexabdeckung, Clique und Graphpartition
-
Qiskit AI:
- Neue Feature-Maps zur Erweiterung der
FeatureMappluggable interface:PauliExpansionundPauliZExpansion - Mechanismus zur Serialisierung/Deserialisierung von Trainingsmodellen
- Neue Feature-Maps zur Erweiterung der
-
Qiskit Finance:
- Amplitudenschätzung für Bernoulli-Zufallsvariable: Veranschaulichung der Amplitudenschätzung bei einem Ein-Qubit-Problem
- Laden von mehreren univariaten und multivariaten Zufallsverteilungen
- Europäische Kaufoption: Erwartungswert und Delta (mit univariaten Verteilungen)
- Preisbildung für festverzinsliche Vermögenswerte: Erwartungswert (unter Verwendung multivariater Verteilungen)
-
Die Pauli-Schnur in der Klasse
Operatorist auf Terra 0.7 ausgerichtet. Die Ordnung eines n-Qubit-Pauli-Strings ist nunq_{n-1}...q{0}. Daher werden die (De-)Serialisierungen (save_to_dictundload_from_dict) in der KlasseOperatorebenfalls geändert, um die Änderungen der KlassePaulizu übernehmen.
Hinweise zur Kompatibilität
HartreeFockkomponente des steckbaren TypsInitialStatenach Qiskit Chemistry verschobenUCCSDkomponente des steckbaren TypsVariationalFormnach Qiskit Chemistry verschoben