Note di rilascio di Qiskit 0.46
0.46.3
Preludio
Qiskit 0.46.3 è un rilascio di bugfix e backport minori per la serie 0.46. È anche l'ultimo rilascio della versione minore 0.46, che segna la fine del suo ciclo di vita.
Correzioni di bug
-
Corretto un decoratore mancante in
C3SXGateche lo faceva fallire seGate.to_matrix()veniva chiamato. La matrice del gate viene ora restituita come previsto. -
L'attributo
QuantumCircuit.parameterssarà ora correttamente vuoto quando si usaQuantumCircuit.copy_empty_like()su un circuito parametrico. In precedenza, una cache interna veniva copiata senza essere invalidata. Correzione #12617. -
Correggere il
SolovayKitaevquando si caricano le approssimazioni di base da un file.npyesistente. In precedenza, il caricamento di un'approssimazione memorizzata che consentiva ulteriori riduzioni (ad esempio a causa di cancellazioni di porte) poteva causare un errore di runtime. Inoltre, la differenza di fase globale del prodotto di porta U(2) e della rappresentazione SO(3) è stata persa durante una procedura di salvataggio/ricaricamento. Correzioni Qiskit/qiskit#12576. -
Il costruttore
GenericBackendV2permetteva di creare backend malformati perché accettava porte di base che non potevano essere allocate nella dimensione del backend. In altre parole, un backend con un singolo qubit non dovrebbe accettare una base con porte a due qubit. -
In precedenza,
DAGCircuit.replace_block_with_op()permetteva di inserire un'operazionen-qubit su un blocco dimqubit, lasciando il DAG in uno stato non valido. Questo comportamento è stato corretto e il tentativo solleverà un problema diDAGCircuitError.
Altre note
- Questo rilascio estende il file constraints.txt con un elenco completo dei numeri di versione delle dipendenze di Qiskit 0.46.3. Poiché questo rilascio segna la fine del ciclo di vita della versione 0.46, questo assicura un ambiente di installazione riproducibile per il futuro, basato sulle specifiche della versione in constraints.txt.
0.46.2
Preludio
Qiskit 0.46.2 è una release minore per la correzione di bug e backport per la serie 0.46.
Nuove funzioni
- Questa versione di Qiskit finalizza il supporto per NumPy 2.0. Qiskit continuerà a supportare sia Numpy 1.x che 2.x per il prossimo futuro.
Correzioni di bug
-
È stato risolto un problema con
circuit_drawer()oQuantumCircuit.draw()quando si utilizzava l'opzione di uscitampl: il programma si bloccava se il circuito da disegnare conteneva un'operazione ControlFlow e l'opzionefoldera impostata su -1 (ovvero nessuna piega). Corretto #12012. -
L'opzione
EvolvedOperatorAnsatzgestisce correttamente il caso in cui l'argomento degli operatori è un elenco vuoto. In precedenza, ciò comportava un errore. -
D'ora in poi,
EvolvedOperatorAnsatznon avrà alcuna qreg quando ci sono zero qubit, invece di avere un'istanza con zero qubitQuantumRegisteristanza con zero qubit. Questo comportamento si allinea più coerentemente con la sua superclasseQuantumCircuit. -
Il metodo
Instruction.repeat()sposta ora un insiemeconditionall'esterno restituitoInstructione lascia incondizionate le porte interne della sua definizione. In precedenza, il metodo lasciava leClassicalRegisterall'interno della definizione interna, uno stato non valido che si manifestava in seguito come bug apparentemente non correlati, ad esempio durante la transpilazione o l'esportazione. Corretto #11935. -
Corretta un'imprecisione in virgola mobile durante la scalatura di alcune unità di impulso tra secondi e nanosecondi. Se l'impulso fosse stato definito simbolicamente, la scalatura avrebbe potuto introdurre un inutile errore in virgola mobile per alcune versioni di
symengine, che avrebbe potuto dare risultati inaspettati una volta che i simboli fossero stati completamente vincolati. Vedere #12392. -
Corretto un bug in
qiskit.visualization.pulse_v2.interface.draw()che non disegnava gli orari degli impulsi quando la funzione draw veniva chiamata con un argomentoBackendV2con un argomento. Poiché il backend V2 non riporta le frequenze dei canali hardware, il disegno generato mostrerà "nessuna frequenza" sotto l'etichetta di ciascun canale. -
Il
VF2Layoutsolleva un'eccezione quando viene fornita un'istanzaTargetsenza vincoli di connettività. Questo sarebbe il caso degli obiettivi di Aer 0.13. Il problema è stato ora corretto. -
Il plugin predefinito
initnon sollevava correttamente un problema di tipoTranspilerErrorquando veniva chiamato con un livello di ottimizzazione non valido. -
PassManager.run()non perderà più tempo a serializzare se gli vengono dati più ingressi, se deve lavorare solo in serie. -
Il parser OpenQASM 2.0 (
qasm2.load()eqasm2.loads()) è ora in grado di valutare espressioni gate-angle che includono operandi interi che farebbero traboccare l'intero di dimensioni di sistema. Questi saranno valutati in un contesto di virgola mobile a doppia precisione, proprio come il resto dell'espressione. Attenzione: un intero arbitrariamente grande non è necessariamente rappresentabile in virgola mobile a doppia precisione, quindi è possibile che il circuito, comunque sia stato generato, abbia già perso tutta la precisione numerica modulo .
0.46.1
Preludio
Qiskit 0.46.1 è una versione con correzione di bug minori per la serie 0.46.
Correzioni di bug
-
È stato risolto un problema con
convert_to_target()per cui il convertitore ignorava erroneamente le istruzioni di flusso di controllo se erano specificate nell'attributoBackendConfiguration.supported_instructions, che è la posizione tipica in cui le istruzioni di flusso di controllo sono specificate in un oggettoBackendConfigurationoggetto. Corretto #11872. -
Chiamando
EquivalenceLibrary.set_entry()aggiornerà correttamente l'oggetto grafico interno della libreria. In precedenza, i metadati venivano aggiornati, ma la struttura del grafo rimaneva inalterata, il che significava che utenti comeBasisTranslatorcontinuerebbero a usare le vecchie regole. Corretto #11958. -
BasePassManager.run()non disperderà più il precedentePropertySetnei nuovi flussi di lavoro quando viene richiamato più di una volta. In precedenza, per inizializzare le esecuzioni successive veniva utilizzato lo stessoPropertySetcome in precedenza, veniva utilizzato per inizializzare le esecuzioni successive, il che poteva significare che ai task venivano fornite informazioni sulle proprietà non valide. Il comportamento ora corrisponde a quello di Qiskit 0.44. Corretto #11784. -
Proprietà e informazioni di configurazione aggiornate del
FakeOpenPulse2Qbackend. Sono state aggiunte proprietà di gate mancanti per alcuni gate definiti nelle impostazioni predefinite dell'impulso, in modo che i gate definiti nelle due posizioni siano coerenti. -
Il modulo degli strumenti di monitoraggio
qiskit.tools.monitor(incluso nell'ormai deprecato moduloqiskit.tools) è stato aggiornato per funzionare come previsto. La funzionejob_monitor()ora funziona conJobistanze. Le funzionibackend_overview()ebackend_monitor()dovrebbero ora funzionare come previsto. -
InstructionDurations.from_backend()restituisce ora un'istanza di qualsiasi sottoclasse diInstructionDurationsinvece della classe base.
0.46.0
Preludio
La release 0.46.0 è l'ultima versione minore della serie 0.x. Questo rilascio aggiunge principalmente nuovi avvisi di deprecazione per le modifiche alle API in arrivo nella futura major release 1.0.0. È completamente compatibile con le versioni di Qiskit 0.45.x. Si raccomanda vivamente di effettuare l'aggiornamento da 0.45.x a 0.46.0 in modo da poter vedere gli avvisi relativi alle interfacce che cambieranno con Qiskit 1.0.0.
La serie di release 0.46.x continuerà a essere supportata e a ricevere correzioni di bug e sicurezza tramite patch per 6 mesi dopo questa release. Per maggiori dettagli sul programma di rilascio e sul ciclo di supporto, vedere: start/install#qiskit-versioning che documenta il programma di rilascio in modo più dettagliato.
Se il vostro progetto dipende da Qiskit, potrebbe fare affidamento su funzionalità che non saranno più supportate in Qiskit 1.0.0. Per questo motivo, si consiglia di impostare in modo proattivo la versione supportata all'indirizzo <1.0. Il rilascio di Qiskit 1.0.0 è previsto circa due settimane dopo quello di Qiskit 0.46.0, il 2024-02-15, e potrebbe non essere ancora disponibile quando leggete questo messaggio.
La struttura di packaging di Qiskit sta cambiando in Qiskit 1.0, e purtroppo i requisiti modificati non possono essere comunicati completamente a pip, soprattutto se i comandi di pip install --upgrade vengono eseguiti dopo che l'ambiente è stato inizialmente configurato. Tutte le versioni di Qiskit precedenti a 1.0 (compresa questa) hanno un conflitto di installazione con Qiskit 1.0 che pip non risolve.
Se import qiskit solleva un errore ImportError per voi, il vostro ambiente è in uno stato non valido e le versioni di Qiskit 0.45/0.46 e 1.0 sono entrambe raggiungibili, il che comporterà codice sottilmente danneggiato. È necessario creare un nuovo ambiente virtuale e assicurarsi che sia installata solo una delle due versioni. In particolare, se si intende installare Qiskit 1.0, non devono essere installati pacchetti che dipendono da qiskit-terra ; questi pacchetti sono incompatibili con Qiskit 1.0 e devono essere aggiornati. Se si intende installare Qiskit 0.45 o 0.46, è necessario assicurarsi di non aver tentato di installare qiskit>=1.0.
Se sviluppate una libreria basata su Qiskit e avete ancora una dipendenza da qiskit-terra, dovreste rilasciare urgentemente un nuovo pacchetto che dipenda solo da qiskit. Dalla versione 0.44, il pacchetto qiskit contiene solo il nucleo del compilatore qiskit-terra (il componente che ora si chiama semplicemente "Qiskit"), quindi se la vostra versione minima è 0.44, potete tranquillamente passare una dipendenza da qiskit-terra>=0.44 a qiskit>=0.44 senza alcun cambiamento in ciò che verrà installato. Per maggiori dettagli e raccomandazioni per i test e la preparazione, consultare la sezione per gli sviluppatori della guida alla migrazione.
Nuove funzioni
-
È stata aggiunta una nuova funzione,
qs_decomposition()è stata aggiunta aqiskit.synthesis. Questa funzione permette di applicare la Decomposizione Quantistica di Shannon a unitari arbitrari. -
Un nuovo
qiskit.providers.basic_providerè stato introdotto per sostituireqiskit.providers.basicaer. Questo modulo contiene strumenti di provider che rispecchiano quelli del providerBasicAere offre un singolo simulatore non efficiente basato su statevector:BasicSimulator. Questo simulatore è basato sull'interfacciaBackendV2ed è destinato esclusivamente a test e semplici prototipi; per funzionalità di simulazione più avanzate, si rimanda al pacchettoqiskit-aer. Per le linee guida sulla migrazione, consultare la nota di deprecazioneBasicAer. -
L'interfaccia e la pipeline di transpiler
Targete la pipeline del transpiler supportano ora le definizioni di target connum_qubits=None. Questo per consentire la creazione di simulatoriTarget-con un numero flessibile di qubit. Una destinazione connum_qubits=Noneconterrà esclusivamente istruzioni globali (conqargs=None) e quando viene fornita al transpiler, si prevede che quest'ultimo non ridimensioni il circuito. Questa modifica delTargetrichiede futuri passaggi di transpiler per tenere conto del caso in cuitarget.num_qubits is None. -
Una nuova classe,
GenericBackendV2è stata aggiunta al moduloqiskit.providers.fake_providermodulo. Questa classe è configurabile e costruisce un'istanza diBackendV2che può essere eseguita localmente (nello spirito dei falsi backend). Gli utenti possono configurare il numero di qubit, le porte di base, la mappa di accoppiamento, la capacità di eseguire circuiti dinamici (istruzioni di flusso di controllo), le calibrazioni delle istruzioni e il dtm del backend senza dover ricorrere alla costruzione manuale del target. Le proprietà dei Qubit e dei gate sono generate con un campionamento casuale da intervalli predefiniti. Il seme per questa generazione casuale può essere fissato per garantire la riproducibilità dell'output del backend. È importante notare che questo backend supporta solo le porte della libreria standard. Se si ha bisogno di un backend più flessibile, c'è sempre la possibilità di istanziare direttamente un oggettoTargetda usare per la trasposizione.Esempio di utilizzo 1:
from qiskit import QuantumCircuit, transpile from qiskit.providers.fake_provider import GenericBackendV2 # Create a simple circuit circuit = QuantumCircuit(3) circuit.h(0) circuit.cx(0,1) circuit.cx(0,2) circuit.measure_all() circuit.draw('mpl') # Define backend with 3 qubits backend = GenericBackendV2(num_qubits=3) # Transpile and run transpiled_circuit = transpile(circuit, backend) result = backend.run(transpiled_circuit).result()Esempio di utilizzo 2:
from qiskit import QuantumCircuit, ClassicalRegister, transpile from qiskit.providers.fake_provider import GenericBackendV2 # Create a circuit with classical control creg = ClassicalRegister(19) qc = QuantumCircuit(25) qc.add_register(creg) qc.h(0) for i in range(18): qc.cx(0, i + 1) for i in range(18): qc.measure(i, creg[i]) qc.ecr(20, 21).c_if(creg, 0) # Define backend with custom basis gates # and control flow instructions backend = GenericBackendV2( num_qubits=25, basis_gates = ["ecr","id","rz","sx","x"], control_flow=True) #Transpile transpiled_qc = transpile(qc, backend)NotaLe proprietà del rumore generate da queste classi non imitano alcun dispositivo quantistico concreto e non devono essere utilizzate per misurare comportamenti concreti del backend. Si tratta di "default ragionevoli" che possono essere usati per testare le funzionalità generali di interfacciamento con il backend. Per una simulazione più accurata dei dispositivi esistenti, è possibile costruire manualmente un modello di rumore dal backend reale utilizzando le funzionalità offerte da
qiskit-aer.
Note sull'aggiornamento
- La versione minima richiesta per
symengineè stata portata a >= 0.11. Questo ha permesso di rimuovere i workaround daParameterExpression.is_real()per gestire un bug presente nelle versioni precedenti disymengine.
Note di deprecazione
-
Il
ScheduleBlock.scoped_parameters()eScheduleBlock.search_parameters()sono stati deprecati. Questi metodi produconoParametercon nomi modificati per indicare lo scoping dell'impulso. L'intenzione originaria dei metodi era che questi oggetti continuassero a collegarsi agli oggetti originaliParameteroriginali non coperti. Tuttavia, la modifica del nome interrompe il collegamento, per cui l'assegnazione tramite la versione con scope non funziona. Vedere #11654 per maggiori dettagli. -
Passaggio di un
QuasiDistribution,ProbDistributiono un dizionario di distribuzione per l'argomentodatadella funzione di visualizzazioneplot_histogram()della funzione di visualizzazione è ora deprecato. Il supporto per questa operazione sarà rimosso nella versione di Qiskit 1.0. Se si desidera tracciare un istogramma a partire da un valore diQuasiDistribution,ProbDistribution, o di un dizionario di distribuzione, è necessario utilizzare la funzioneplot_distribution()invece di utilizzare la funzione -
Il pacchetto
qiskit-terraPython è deprecato e non riceverà più aggiornamenti a partire da Qiskit 1.0.0. Se si installaqiskit-terrada solo, questo non sarà più aggiornato per Qiskit>=1.0.0. Se si sta eseguendo qiskit senza il pacchettoqiskit, verrà emesso unFutureWarningall'importazione diqiskitper indicare che non si sta usando il pacchettoqiskit. -
L'uso dell'oggetto
qiskit.Aerè deprecato e sarà rimosso in Qiskit 1.0. Si dovrebbe invece utilizzare lo stesso oggetto dello spazio dei nomiqiskit_aer, che è un sostituto a tutti gli effetti. -
L'importazione da
qiskit.providers.aerè deprecata e non funzionerà più in Qiskit 1.0. Dovreste invece importare daqiskit_aer, che è un sostituto di primo livello. -
L'esecuzione di lavori pulse su backend da
qiskit.providers.fake_providerè deprecato e tutto il supporto sarà rimosso in Qiskit 1.0. Ciò è dovuto al fatto che Qiskit Aer ha rimosso la sua funzionalità di simulazione per questi lavori. Per i carichi di lavoro di simulazione hamiltoniana di basso livello, si consiglia di utilizzare una libreria specializzata come Qiskit Dynamics. -
Il modulo
qiskit.transpiler.synthesisè deprecato e sarà rimosso in Qiskit 1.0. I seguenti oggetti sono stati spostati:qiskit.transpiler.synthesis.aqcè stato spostato aqiskit.synthesis.unitary.aqc(ad eccezione diqiskit.synthesis.unitary.aqc.AQCSynthesisPlugin).qiskit.synthesis.unitary.aqc.AQCSynthesisPluginè stato spostato suqiskit.transpiler.passes.synthesis.AQCSynthesisPlugin.qiskit.transpiler.synthesis.graysynth()è stato spostato aqiskit.synthesis.synth_cnot_phase_aam().qiskit.transpiler.synthesis.cnot_synth()è stato spostato aqiskit.synthesis.synth_cnot_count_full_pmh().
-
Il modulo
qiskit.tools.jupyterè stato deprecato e sarà rimosso in Qiskit 1.0.0. Questo modulo è deprecato perché la sua funzionalità è legata al pacchetto legacyqiskit-ibmq-provider, che non è più supportato e che supporta anche soloBackendV1. Se attualmente si utilizza questa funzionalità, esistono strumenti jupyter simili nel pacchetto qiskit-ibm-provider che possono essere utilizzati al suo posto. -
Il modulo
qiskit.tools.monitorè stato deprecato e sarà rimosso in Qiskit 1.0.0. Questo modulo è deprecato perché la sua funzionalità è legata al pacchetto legacyqiskit-ibmq-provider, che non è più supportato e che supporta anche soloBackendV1. -
Il modulo
qiskit.tools.visualizationè stato deprecato e sarà rimosso in Qiskit 1.0.0. Questo modulo era un redirect ereditato dalla posizione originale del modulo di visualizzazione di Qiskit ed è stato spostato inqiskit.visualizationin Qiskit 0.8.0. Se si utilizza ancora questo percorso, è sufficiente aggiornare le importazioni daqiskit.tools.visualizationaqiskit.visualization. -
Il modulo
qiskit.tools.eventse l'utilitàprogressbar()che esponeva sono stati deprecati e saranno rimossi nella versione di Qiskit 1.0.0. La funzionalità di questo modulo non era molto utilizzata e veniva coperta meglio da pacchetti dedicati come tqdm. -
Il modulo
qiskit.toolsè stato deprecato e sarà rimosso in Qiskit 1.0.0. Ad eccezione di quanto indicato nelle note di rilascio sopra per specifici sottomoduli (qiskit.tools.jupyter,qiskit.tools.monitor,qiskit.tools.eventseqiskit.tools.visualization), le funzionalità di questo modulo sono state migrate aqiskit.utils. Se si utilizza una qualsiasi funzionalità di questo modulo, si possono aggiornare le importazioni daqiskit.toolsaqiskit.utils. -
Il modulo
qiskit.testè deprecato. Questo modulo contiene strumenti e aiutanti per i test interni a Qiskit e la maggior parte delle sue funzionalità sono state spostate o non sono più utilizzate in Qiskit. In pratica, il modulo non è mai stato pensato per essere utilizzato esternamente. Se il codice del modulo è assolutamente necessario al di là di Qiskit, si consideri la possibilità di copiarlo nella propria infrastruttura di test. -
Il modulo
qiskit.quantum_info.synthesisè deprecato e sarà rimosso in Qiskit 1.0.0. I seguenti oggetti sono stati spostati inqiskit.synthesis:OneQubitEulerDecomposerè stato spostato aqiskit.synthesis.one_qubitTwoQubitBasisDecomposerè stato spostato aqiskit.synthesis.two_qubitsXXDecomposerè stato spostato aqiskit.synthesis.two_qubitstwo_qubit_cnot_decompose()è stato spostato aqiskit.synthesis.two_qubits
La classe
Quaternionè stata migrata daqiskit.quantum_info.synthesisaqiskit.quantum_info. Questo spostamento non ha influito sul percorso di importazione abituale della classe, ma l'accesso alla classe tramiteqiskit.quantum_info.synthesisè ora deprecato.Questa funzione è deprecata e sarà rimossa in Qiskit 1.0.0:
cnot_rxx_decompose()
-
Il modulo parser legacy OpenQASM 2, precedentemente presente in
qiskit.qasmè stato deprecato. Verrà rimosso nel rilascio di Qiskit 1.0.0. Il parser legacy di OpenQASM 2 è stato sostituito dal moduloqiskit.qasm2che fornisce un parser più rapido e corretto per OpenQASM 2. -
La funzione
qiskit.converters.ast_to_dagè stata deprecata e sarà rimossa nella versione di Qiskit 1.0.0. In precedenza veniva utilizzato per convertire l'albero della sintassi astratta generato dal parser legacy OpenQASM 2 (nel moduloqiskit.qasmche è stato deprecato) e convertirlo direttamente in un fileDAGCircuit. Poiché il parser legacy OpenQASM 2 è stato deprecato, questa funzione non servirà più a nulla dopo la rimozione del parser legacy. Se in precedenza si utilizzava questo metodo, si può invece analizzare i file OpenQASM 2 in un fileQuantumCircuitusando l'opzioneQuantumCircuit.from_qasm_file()oQuantumCircuit.from_qasm_str()e poi convertire il fileQuantumCircuitin un fileDAGCircuitconcircuit_to_dag(). -
Il metodo
QuantumCircuit.qasm()utilizzato per generare una rappresentazione OpenQASM 2 dell'oggettoQuantumCircuitè stato deprecato e verrà rimosso nella versione di Qiskit 1.0.0. Ilqasm2.dump()oqasm2.dumps()che forniscono una funzionalità simile, devono essere utilizzate al loro posto. Se si utilizza il metodoQuantumCircuit.qasm()per generare output formattato con pygments, si dovrebbe invece guardare al pacchetto standaloneopenqasm-pygmentsche fornisce questa funzionalità (comeqasm2.dump()eqasm2.dumps()non forniscono output colorato pygments). -
La classe
ParametricPulsee gli impulsi sono ora deprecati e saranno rimossi in Qiskit 1.0. Ciò comprende:ParametricPulseConstantDragGaussianGaussianSquare
La classe è stata sostituita da
SymbolicPulsee dalla corrispondente libreria di impulsi.SymbolicPulseoffre migliori prestazioni, flessibilità e supporto QPY. -
Il passaggio per il transpiler e il corrispondente plugin per lo stage di layout di
NoiseAdaptiveLayoute il corrispondente plugin per lo stage di layout"noise_adaptive"sono stati deprecati e saranno rimossi nella release 1.0.0. Questo passaggio è stato ampiamente superato daVF2LayouteVF2PostLayoutche imposta un layout basato sulle caratteristiche di rumore riportate da un backend. -
Il passaggio
CrosstalkAdaptiveScheduleè stato deprecato e sarà rimosso nella versione 1.0.0. Questo passaggio non era più utilizzabile perché il suo funzionamento interno dipendeva dall'impostazione di proprietà personalizzate nel payload di un fileBackendPropertiesdi un'istanzaBackendV1istanza. Poiché nessun backend imposta questi campi, il passaggio è stato deprecato. -
Il modulo
qiskit.visualization.qcstyleè ora deprecato e sarà rimosso nella versione di Qiskit 1.0.0. Si consiglia invece di utilizzareqiskit.visualization.circuit.qcstylecome sostituto diretto. -
L'iniezione di operazioni di gate di circuito nel contesto del costruttore di impulsi è ora deprecata. La deprecazione riguarda le seguenti funzioni:
call_gate(),cx(),u1(),u2(),u3(),x()
Oltre agli argomenti di ingresso di tipo
QuantumCircuittipo incall().Se si desidera comunque iniettare orari calibrati nel backend, è possibile utilizzare il seguente schema invece di chiamare i comandi di gate.
from qiskit.providers.fake_provider import GenericBackendV2 from qiskit import pulse backend = GenericBackendV2(num_qubits=5) sched = backend.target['x'][(qubit,)].calibration with pulse.build() as only_pulse_scheds: pulse.call(sched)Allo stesso modo,
QuantumCircuitpuò essere iniettato nel contesto del costruttore, transpilando e schedulando manualmente l'oggetto.from math import pi from qiskit.compiler import schedule, transpile qc = QuatumCircuit(2) qc.rz(pi/2, 0) qc.sx(0) qc.rz(pi/2, 0) qc.cx(0, 1) qc_t = transpile(qc, backend) sched = schedule(qc_t, backend) with pulse.build() as only_pulse_scheds: pulse.call(sched)In ogni caso, ora si consiglia di scrivere un programma minimo di impulsi con il costruttore e di collegarlo a
QuantumCircuittramite il metodoQuantumCircuit.add_calibration()come microcodice di un'istruzione gate, piuttosto che scrivere l'intero programma con il modello a impulsi.I seguenti argomenti in
build()sono stati deprecati:default_transpiler_settingsdefault_circuit_scheduler_settings
Insieme alle funzioni:
-
I seguenti strumenti in
qiskit.utilssono stati deprecati:- Utilità in
qiskit.utils.arithmetic - Utilità in
qiskit.utils.circuit_utils - Utilità in
qiskit.utils.entangler_map - Utilità in
qiskit.utils.name_unnamed_args
Queste funzioni erano utilizzate esclusivamente nel contesto di
qiskit.algorithmseqiskit.opflow, e saranno rimosse in seguito alla rimozione diqiskit.algorithmseqiskit.opflowin Qiskit 1.0. - Utilità in
-
Il modulo
qiskit.providers.fake_providerè stato migrato nel pacchettoqiskit-ibm-runtimePython. Per questo motivo, i seguenti elementi del fileqiskit.providers.fake_providersono stati deprecati a partire da Qiskit 0.46 e saranno rimossi in Qiskit 1.0:qiskit.providers.fake_provider.FakeProviderqiskit.providers.fake_provider.FakeProviderForBackendV2qiskit.providers.fake_provider.FakeProviderFactoryqiskit.providers.fake_provider.fake_backends.FakeBackendV2- qualsiasi backend falso contenuto in
qiskit.providers.fake_provider.backends(accessibile attraverso il provider) qiskit.providers.fake_provider.FakeQasmSimulatorqiskit.providers.fake_provider.FakeJobqiskit.providers.fake_provider.FakeQobj
Esempio di migrazione al nuovo falso provider:
# Legacy path from qiskit.providers.fake_provider import FakeProvider, FakeSherbrooke backend1 = FakeProvider().get_backend("fake_ourense") backend2 = FakeSherbrooke() # New path # run "pip install qiskit-ibm-runtime" from qiskit_ibm_runtime.fake_provider import FakeProvider, FakeSherbrooke backend1 = FakeProvider().get_backend("fake_ourense") backend2 = FakeSherbrooke()Inoltre, i seguenti backend fasulli progettati per scopi speciali di test sono stati sostituiti dalla nuova classe
GenericBackendV2e sono anch'essi deprecati a partire da Qiskit 0.46:qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2LegacyQubitPropsqiskit.providers.fake_provider.fake_backend_v2.FakeBackend5QV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendSimple
Esempio di migrazione alla nuova
GenericBackendV2classe:# Legacy path from qiskit.providers.fake_provider import FakeBackend5QV2 backend = FakeBackend5QV2() # New path from qiskit.providers.fake_provider import GenericBackendV2 backend = GenericBackendV2(num_qubits=5) # note that this class will generate 5q backend with generic # properties that serves the same purpose as FakeBackend5QV2 # but will generate different results -
Il modulo
qiskit.extensionsè ora deprecato. Era in attesa di deprezzamento dal rilascio di Qiskit 0.45. La maggior parte degli oggetti è stata spostata inqiskit.circuit.library, tra cui:DiagonalGate,HamiltonianGateGate,Initialize,Isometry,MCGupDiag,UCGate,UCPauliRotGate,UCRXGate,UCRYGate,UCRZGate,UnitaryGate.
Con la deprecazione degli oggetti, sono stati deprecati anche i seguenti metodi di circuito:
QuantumCircuit.diagonal,QuantumCircuit.hamiltonian,QuantumCircuit.isometryeQuantumCircuit.iso,QuantumCircuit.uc,QuantumCircuit.ucrx,QuantumCircuit.ucry,QuantumCircuit.ucrz.
-
La funzione
execute()è deprecata. Questa funzione funge da involucro di alto livello per la trasposizione di un circuito con alcune opzioni di trasposizione e l'esecuzione su un backend con alcune opzioni di esecuzione. Per fare la stessa cosa, si può usare esplicitamente la funzionetranspile()(con le opportune opzioni di transpile) seguita dabackend.run()(con le opportune opzioni di esecuzione).Ad esempio, invece di correre:
from qiskit import execute job = execute(circuit, backend)si può correre:
from qiskit import transpile new_circuit = transpile(circuit, backend) job = backend.run(new_circuit)In alternativa, la primitiva
Samplerè semanticamente equivalente alla funzione deprecataexecute()deprecata. La classeBackendSamplerè un wrapper generico per i backend che non supportano le primitive:from qiskit.primitives import BackendSampler sampler = BackendSampler(backend) job = sampler.run(circuit) -
La conversione implicita da un argomento denso
BaseOperator`ad unoSparsePauliOpnegli argomenti osservabili diEstimatorè deprecata a partire da Qiskit 0.46 e sarà rimossa in Qiskit 1.0. Si dovrebbe convertire esplicitamente in un elementoSparsePauliOputilizzandoSparsePauliOp.from_operator()invece. -
La libreria degli impulsi discreti è ora deprecata e sarà rimossa in una versione futura. Ciò comprende:
constant()zero()square()sawtooth()triangle()cos()sin()gaussian()gaussian_deriv()sech()sech_deriv()gaussian_square()drag()
Utilizzare invece il corrispondente
SymbolicPulse, conget_waveform(). Ad esempio, al posto dipulse.gaussian(100,0.5,10)si usapulse.Gaussian(100,0.5,10).get_waveform().Si noti che la fase di
SawtootheSquareè definita in modo tale che una fase di si sposta di un ciclo intero, contrariamente alla controparte discreta. Si noti inoltre che il supporto per l'ampiezza complessa è deprecato nella libreria degli impulsi simbolici: utilizzare invecefloat,ampeangle. -
La classe
ConfigurableFakeBackendche è stata utilizzata principalmente per i test interni, è ora deprecata. Verrà rimosso nel rilascio di Qiskit 1.0.0. Si può invece usare la classeGenericBackendV2per costruire un backend simile per i test. -
Il caricamento degli oggetti della libreria
ScalableSymbolicPulsecon il parametro complessoampda file qpy di versione 5 o inferiore (Qiskit Terra < 0.23.0 ) è ora deprecato. In seguito alla rimozione in Qiskit di 1.0.0, il complessoampverrà automaticamente convertito in float (amp,angle). La modifica si applica agli impulsi:ConstantDragGaussianGaussianSquare
-
Il modulo
qiskit.providers.basicaere tutte le sue classi sono deprecate a partire da Qiskit 0.46. Il loro utilizzo deve essere sostituito con il moduloqiskit.quantum_infoe il nuovo moduloqiskit.providers.basic_providermodulo.La migrazione dall'uso di
qiskit.providers.basicaeraqiskit.providers.basic_providerpuò essere eseguita come segue:Migrate from | Replace with ------------------------------------------------------------------------------ :mod:`.basicaer` | :mod:`.basic_provider` :class:`.BasicAerProvider` | :class:`.BasicProvider` :class:`.BasicAerJob` | :class:`.BasicProviderJob` :class:`.QasmSimulatorPy` | :class:`.BasicSimulator` :class:`.UnitarySimulatorPy` | use :class:`~.quantum_info.Operator` :class:`.StatevectorSimulatorPy` | use :class:`~.quantum_info.Statevector`Una differenza notevole è che il nuovo provider non è più esposto attraverso un'istanza globale (come
BasicAer), quindi non sarà valido per farefrom qiskit import BasicProvider. Invece, la classe del provider deve essere importata dal suo sottomodulo e istanziata:from qiskit.providers.basic_provider import BasicProvider provider = BasicProvider() backend = provider.get_backend("sim_name")Gli esempi seguenti mostrano i percorsi di migrazione dei tre simulatori in
basicaer.-
Simulatore di vettore di stato:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("statevector_simulator") statevector = backend.run(qc).result().get_statevector() # New path qc.remove_final_measurements() # no measurements allowed from qiskit.quantum_info import Statevector statevector = Statevector(qc) -
Simulatore unitario:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("unitary_simulator") result = backend.run(qc).result() # New path qc.remove_final_measurements() # no measurements allowed from qiskit.quantum_info import Operator result = Operator(qc).data -
Simulatore Qasm:
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("qasm_simulator") result = backend.run(qc).result() # New path from qiskit.providers.basic_provider import BasicProvider backend = BasicProvider().get_backend("basic_simulator") result = backend.run(qc).result() # or, directly from qiskit.providers.basic_provider import BasicSimulator backend = BasicSimulator() result = backend.run(qc).result()
-
-
L'utilizzo di un oggetto
PauliListcome osservabile che viene implicitamente convertito in aSparsePauliOpcon coefficienti 1 quando si chiamaEstimator.run()è deprecato. Si deve invece convertire esplicitamente l'argomento usando primaSparsePauliOp(pauli_list).
Problemi critici
-
Quando si aggiorna Qiskit da
0.46.xa1.0.0non sarà possibile effettuare l'aggiornamento in loco. Ad esempio,pip install -U qiskitopip install --upgrade qiskitnon sono supportati e probabilmente non funzioneranno. Per aggiornareqiskitil percorso consigliato è quello di creare un nuovo ambiente virtuale (venv) per creare un nuovo ambiente separato per Qiskit>=1.0.0. Ad esempio:python -m venv qiskit_1.0 source qiskit_1.0/bin/activate pip install qiskit>=1creerà un nuovo ambiente virtuale chiamato
qiskit_1.0che conterrà la nuova versione di Qiskit.