Note di rilascio di Qiskit 0.5
0.5
Terra 0.5
Evidenziazioni
Questa versione apporta una serie di miglioramenti a Qiskit, sia per quanto riguarda l'esperienza dell'utente che sotto il cofano. Per una descrizione dettagliata delle modifiche, consultare il changelog completo; i punti salienti sono:
- nuovi
statevectorsimulatorse miglioramenti delle funzionalità e delle prestazioni di quelli esistenti (in particolare del simulatore C++), oltre a una riorganizzazione del modo di lavorare con i backend incentrata sull'estensibilità e la flessibilità (con l'uso di alias e backend provider) - riorganizzazione delle funzionalità asincrone, fornendo un'interfaccia più amichevole per l'esecuzione di lavori in modo asincrono tramite le istanze di
Job - numerosi miglioramenti e correzioni in tutto Terra, sia per la comodità degli utenti (come la possibilità di registrare in modo anonimo) sia per migliorare le funzionalità (come il miglioramento del plottaggio dei circuiti)
Considerazioni sulla compatibilità
Si noti che in questa versione sono state introdotte diverse modifiche compatibili con le versioni precedenti, come risultato dello sviluppo in corso. Anche se alcune di queste funzioni continueranno a essere supportate per un certo periodo di tempo prima di essere completamente deprecate, si raccomanda di aggiornare i programmi per prepararsi alle nuove versioni e sfruttare le nuove funzionalità.
QuantumProgram modifiche
Diversi metodi della classe QuantumProgram stanno per essere deprecati:
-
per interagire con i backend e l'API :
Il modo consigliato per aprire una connessione all'API IBM Q e per utilizzare i backend è quello di utilizzare direttamente le funzioni di primo livello invece dei metodi di
QuantumProgram. In particolare, il metodoqiskit.register()fornisce l'equivalente della precedente chiamataqiskit.QuantumProgram.set_api(). Analogamente, sono disponibili i nuoviqiskit.available_backends(),qiskit.get_backend()e le relative funzioni per interrogare direttamente i backend disponibili. Ad esempio, il seguente frammento per la versione 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')sarebbe equivalente al seguente snippet per la versione 0.5:
from qiskit import register, available_backends, get_backend register(token, url) backends = available_backends() backend = get_backend('ibmqx4') print(backend.status) -
metodi di compilazione ed esecuzione dei programmi :
Le funzioni di primo livello ora forniscono anche gli equivalenti per i metodi
qiskit.QuantumProgram.compile()eqiskit.QuantumProgram.execute(). Ad esempio, il seguente snippet della versione 0.4:quantum_program.execute(circuit, args, ...)sarebbe equivalente al seguente snippet per la versione 0.5:
from qiskit import execute execute(circuit, args, ...)
In generale, a partire dalla versione 0.5 si incoraggia a cercare di utilizzare direttamente i singoli oggetti e le classi invece di affidarsi a QuantumProgram. Ad esempio, un QuantumCircuit può essere istanziato e costruito aggiungendo direttamente QuantumRegister, ClassicalRegister, e le porte. Consultare l'esempio di aggiornamento nella sezione Quickstart o gli esempi using_qiskit_core_level_0.py e using_qiskit_core_level_1.py nel repository principale.
Modifiche al nome del backend
Al fine di fornire un framework più estensibile per i backend, sono state apportate alcune modifiche al design:
-
nomi di simulatori locali
I nomi dei simulatori locali sono stati omogeneizzati per seguire lo stesso schema:
PROVIDERNAME_TYPE_simulator_LANGUAGEORPROJECT- per esempio, il simulatore C++ precedentemente chiamatolocal_qiskit_simulatorè oralocal_qasm_simulator_cpp. Una panoramica degli attuali simulatori:QASMil simulatore dovrebbe essere un esperimento. Si applica un circuito su alcuni qubit e si osservano i risultati della misurazione - e si ripete per molti colpi per ottenere un istogramma di conteggi tramiteresult.get_counts().Statevectoril simulatore è in grado di ottenere il vettore di stato completo ( ampiezze) dopo l'evoluzione dello stato zero attraverso il circuito, e può essere ottenuto tramiteresult.get_statevector().Unitaryil simulatore deve ottenere l'equivalente della matrice unitaria del circuito, restituita daresult.get_unitary().- Inoltre, è possibile ottenere stati intermedi da un simulatore applicando un'istruzione
snapshot(slot)in vari punti del circuito. In questo modo si salva lo stato attuale del simulatore in un determinato slot, che può essere recuperato in seguito tramiteresult.get_snapshot(slot).
-
alias del backend :
L'SDK offre ora un sistema di "alias" che consente di utilizzare automaticamente il simulatore più performante di un tipo specifico, se disponibile nel sistema. Ad esempio, con il seguente snippet:
from qiskit import get_backend backend = get_backend('local_statevector_simulator')il backend sarà il simulatore di vettori di stato C++, se disponibile, mentre se non è presente si ricorrerà al simulatore di vettori di stato Python.
Nomi e parametri più flessibili
Diverse funzioni dell'SDK sono state rese più flessibili e facili da usare:
-
nomi di circuiti e registri automatici
qiskit.ClassicalRegister,qiskit.QuantumRegistereqiskit.QuantumCircuitpossono ora essere istanziati senza assegnare loro esplicitamente un nome: una nuova funzione di autonominazione assegnerà automaticamente un identificatore:q = QuantumRegister(2)Si noti inoltre che l'ordine dei parametri è stato invertito
QuantumRegister(size, name). -
metodi che accettano nomi o istanze
In combinazione con le modifiche alla denominazione automatica, alcuni metodi come
qiskit.Result.get_data()accettano ora sia i nomi che le istanze per comodità. Ad esempio, quando si recuperano i risultati di un lavoro che ha un singolo circuito come:qc = QuantumCircuit(..., name='my_circuit') job = execute(qc, ...) result = job.result()Le seguenti chiamate sono equivalenti:
data = result.get_data('my_circuit') data = result.get_data(qc) data = result.get_data()