Qiskit 0.5 Versionshinweise
0.5
Terra- 0.5
Schwerpunkte
Diese Version bringt eine Reihe von Verbesserungen für Qiskit, sowohl für die Benutzererfahrung als auch unter der Haube. Eine ausführliche Beschreibung der Änderungen finden Sie im Änderungsprotokoll - die wichtigsten sind:
- neue
statevectorsimulatorssowie Funktions- und Leistungsverbesserungen an den bestehenden (insbesondere am C++-Simulator), zusammen mit einer Umstrukturierung der Arbeit mit Backends, die auf Erweiterbarkeit und Flexibilität ausgerichtet ist (Verwendung von Aliases und Backend-Providern) - umstrukturierung der asynchronen Funktionen, die eine benutzerfreundlichere Schnittstelle für die asynchrone Ausführung von Aufträgen über
JobInstanzen bieten - zahlreiche Verbesserungen und Korrekturen im gesamten Terra, sowohl für die Bequemlichkeit der Benutzer (z. B. anonyme Register) als auch für die erweiterte Funktionalität (z. B. verbesserte Darstellung von Schaltkreisen)
Hinweise zur Kompatibilität
Bitte beachten Sie, dass in dieser Version einige abwärtskompatible Änderungen als Ergebnis der laufenden Entwicklung eingeführt wurden. Während einige dieser Funktionen noch eine Zeit lang unterstützt werden, bevor sie vollständig veraltet sind, ist es empfehlenswert, Ihre Programme zu aktualisieren, um sich auf die neuen Versionen vorzubereiten und die neuen Funktionen zu nutzen.
QuantumProgram Änderungen
Mehrere Methoden der Klasse QuantumProgram sind auf dem Weg, veraltet zu werden:
-
methoden für die Interaktion mit den Backends und der API :
Es wird empfohlen, eine Verbindung zur IBM Q API zu öffnen und die Backends direkt über die Top-Level-Funktionen und nicht über die
QuantumProgramMethoden zu verwenden. Insbesondere bietet die Methodeqiskit.register()das Äquivalent zum vorherigen Aufruf vonqiskit.QuantumProgram.set_api(). In ähnlicher Weise gibt es eine neueqiskit.available_backends(),qiskit.get_backend()und verwandte Funktionen zur direkten Abfrage der verfügbaren Backends. Zum Beispiel der folgende Ausschnitt für die Version 0.4:from qiskit import QuantumProgram quantum_program = QuantumProgram() quantum_program.set_api(token, url) backends = quantum_program.available_backends() print(quantum_program.get_backend_status('ibmqx4')würde dem folgenden Ausschnitt für die Version entsprechen 0.5:
from qiskit import register, available_backends, get_backend register(token, url) backends = available_backends() backend = get_backend('ibmqx4') print(backend.status) -
methoden zum Kompilieren und Ausführen von Programmen :
Die Top-Level-Funktionen bieten nun auch Äquivalente für die Methoden
qiskit.QuantumProgram.compile()undqiskit.QuantumProgram.execute(). Zum Beispiel der folgende Ausschnitt aus der Version 0.4:quantum_program.execute(circuit, args, ...)würde dem folgenden Ausschnitt für die Version entsprechen 0.5:
from qiskit import execute execute(circuit, args, ...)
Im Allgemeinen empfehlen wir ab der Version 0.5, die einzelnen Objekte und Klassen direkt zu verwenden, anstatt sich auf QuantumProgram zu verlassen. Zum Beispiel kann ein QuantumCircuit instanziiert und konstruiert werden, indem QuantumRegister, ClassicalRegister und gates direkt angehängt werden. Bitte sehen Sie sich das Update-Beispiel im Abschnitt Quickstart oder die Beispiele using_qiskit_core_level_0.py und using_qiskit_core_level_1.py im Haupt-Repository an.
Änderungen am Backend-Namen
Um einen erweiterbaren Rahmen für Backends zu schaffen, wurden einige Designänderungen vorgenommen:
-
lokale Simulatoren-Namen
Die Namen der lokalen Simulatoren wurden vereinheitlicht, um dem gleichen Muster zu folgen:
PROVIDERNAME_TYPE_simulator_LANGUAGEORPROJECT- zum Beispiel heißt der C++-Simulator, der vorherlocal_qiskit_simulatorhieß, jetztlocal_qasm_simulator_cpp. Ein Überblick über die aktuellen Simulatoren:QASMder Simulator soll wie ein Experiment sein. Man wendet eine Schaltung auf einige Qubits an und beobachtet die Messergebnisse - und man wiederholt dies für viele Aufnahmen, um ein Histogramm der Zählungen überresult.get_counts()zu erhalten.Statevectorsimulator ist es, den vollständigen Zustandsvektor ( Amplituden) zu erhalten, nachdem der Nullzustand durch die Schaltung entwickelt wurde, und kann überresult.get_statevector()erhalten werden.Unitarysimulator ist es, das unitäre Matrixäquivalent der Schaltung zu erhalten, das überresult.get_unitary()zurückgegeben wird.- Darüber hinaus können Sie Zwischenzustände von einem Simulator erhalten, indem Sie eine
snapshot(slot)Anweisung an verschiedenen Stellen in der Schaltung anwenden. Damit wird der aktuelle Zustand des Simulators in einem bestimmten Slot gespeichert, der später überresult.get_snapshot(slot)abgerufen werden kann.
-
backend-Aliase :
Das SDK bietet jetzt ein "Alias"-System, mit dem automatisch der leistungsfähigste Simulator eines bestimmten Typs verwendet werden kann, sofern er in Ihrem System verfügbar ist. Zum Beispiel mit dem folgenden Ausschnitt:
from qiskit import get_backend backend = get_backend('local_statevector_simulator')das Backend ist der C++-Zustandsvektor-Simulator, falls vorhanden, und der Python -Zustandsvektor-Simulator, falls nicht vorhanden.
Flexiblere Namen und Parameter
Mehrere Funktionen des SDK wurden flexibler und benutzerfreundlicher gestaltet:
-
automatische Schaltkreis- und Registernamen
qiskit.ClassicalRegisterqiskit.QuantumRegisterund können jetzt instanziiert werden, ohne ihnen explizit einen Namen zu geben - eine neue Funktion zur automatischen Benennung weist ihnen automatisch einen Bezeichner zu:qiskit.QuantumCircuitq = QuantumRegister(2)Bitte beachten Sie auch, dass die Reihenfolge der Parameter vertauscht wurde
QuantumRegister(size, name). -
methoden, die Namen oder Instanzen akzeptieren
In Kombination mit den Änderungen bei der automatischen Benennung akzeptieren mehrere Methoden wie
qiskit.Result.get_data()nun sowohl Namen als auch Instanzen. Wenn Sie zum Beispiel die Ergebnisse für einen Auftrag mit einem einzigen Stromkreis abrufen, z. B:qc = QuantumCircuit(..., name='my_circuit') job = execute(qc, ...) result = job.result()Die folgenden Aufrufe sind gleichwertig:
data = result.get_data('my_circuit') data = result.get_data(qc) data = result.get_data()