Skip to main content
IBM Quantum Platform

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 QuantumCircuit Objekten, die Aufrufe von circuit.draw() oder print(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 QuantumCircuit from_qasm_str() und from_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() oder execute() den kwarg memory auf True setzt und dann mit der Methode get_memory() auf das Objekt Result zugreift.
  • Ein qiskit.quantum_info Modul 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_set fü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() und matplotlib_circuit_drawer() von qiskit.tools.visualization sind veraltet. Stattdessen sollte die Funktion circuit_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 von text umgestellt werden.
  • Die Funktionen qiskit.wrapper.load_qasm_string() und qiskit.wrapper.load_qasm_file() sind veraltet und die Konstruktormethoden QuantumCircuit.from_qasm_str() und QuantumCircuit.from_qasm_file() sollten stattdessen verwendet werden.
  • Die Schlüssel plot_barriers und reverse_bits im style kwarg-Wörterbuch sind veraltet, stattdessen sollten die qiskit.tools.visualization.circuit_drawer() kwargs plot_barriers und reverse_bits verwendet werden.
  • Die Funktionen plot_state() und iplot_state() wurden abgeschrieben. Stattdessen sollten die Funktionen plot_state_*() und iplot_state_*() für die gewünschte Visualisierungsmethode aufgerufen werden.
  • Das Argument skip_transpiler wurde aus compile() und execute() gestrichen. Stattdessen können Sie PassManager direkt verwenden, setzen Sie einfach pass_manager auf ein leeres PassManager Objekt mit PassManager()
  • Die Funktion transpile_dag() format kwarg zur Ausgabe verschiedener Ausgabeformate ist veraltet, stattdessen sollten Sie das Standardausgabeobjekt DAGCircuit in 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 Messergebnissen
  • StatevectorSimulatorrückgabe des endgültigen Zustandsvektors für einen Quantenschaltkreis, der auf den Zustand Null einwirkt
  • UnitarySimulatorrückgabe der unitären Matrix für eine Quantenschaltung

noise modul: enthält erweiterte Geräuschmodellierungsfunktionen für die QasmSimulator

  • NoiseModel QuantumError, Klassen für die Simulation eines Qiskit-Quantenschaltkreises in Anwesenheit von Fehlern ReadoutError
  • errors untermodul mit Funktionen zur Erzeugung von QuantumError Objekten 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ämpfung
  • device untermodul zur automatischen Erzeugung eines Geräuschmodells auf der Grundlage von BackendProperties eines Geräts

utils Modul:

  • qobj_utils bietet 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

  • QuantumInstance API für die Entkopplung von Algorithmus und Backend - QuantumInstance kapselt 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, und UnivariateDistribution

  • Konkrete Implementierungen von UncertaintyProblem: FixedIncomeExpectedValue, EuropeanCallExpectedValue, und EuropeanCallDelta

  • 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 FeatureMap pluggable interface: PauliExpansion und PauliZExpansion
    • Mechanismus zur Serialisierung/Deserialisierung von Trainingsmodellen
  • 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 Operator ist auf Terra 0.7 ausgerichtet. Die Ordnung eines n-Qubit-Pauli-Strings ist nun q_{n-1}...q{0} . Daher werden die (De-)Serialisierungen (save_to_dict und load_from_dict) in der Klasse Operator ebenfalls geändert, um die Änderungen der Klasse Pauli zu übernehmen.

Hinweise zur Kompatibilität

  • HartreeFock komponente des steckbaren Typs InitialState nach Qiskit Chemistry verschoben
  • UCCSD komponente des steckbaren Typs VariationalForm nach Qiskit Chemistry verschoben
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.