Note di rilascio di Qiskit SDK 1.4
1.4.6
Preludio
Qiskit v1.4.6 è una versione dedicata esclusivamente alla sicurezza e rappresenta l'ultima versione della serie Qiskit v1.x.
Qiskit v1.x non è più sottoposto a manutenzione in nessuna forma.
Problemi di sicurezza
-
I due parser di OpenQASM (
qasm2.load()eqasm2.loads()) ora generano unRecursionErrorquando si tenta di valutare un'espressione eccessivamente profonda.sys.getrecursionlimit()La profondità massima consentita viene ricavata da Python nel punto in cui i parser entrano in azione.In precedenza, i parser potevano eseguire ricorsioni arbitrarie nello spazio di Rust, finendo per superare lo spazio massimo dello stack e causando un errore di segmento nel processo.
1.4.5
Preludio
Qiskit v1.4.5 è l'ultima versione con correzione di bug della serie 1.4 e segna la fine del ciclo di vita della serie. Il supporto per le correzioni di sicurezza della serie 1.4 continuerà fino al 31 marzo 2026.
Correzioni di bug
-
Corretta la gestione dei bit anonimi nella visualizzazione dei circuiti. In precedenza, i bit non associati a un registro venivano visualizzati con la rappresentazione predefinita di Python, mentre ora mostrano l'indice in modo leggibile. Corretto #14031.
-
Corretto un problema nel metodo
Optimize1qGatesDecompositionquando il passaggio era inizializzato con un fileTargetche contiene porte 1q con parametri angolari fissi. In precedenza, il passaggio avrebbe potenzialmente emesso gate al di fuori dell'obiettivo, poiché non controllava che il gate nell'obiettivo supportasse valori di parametro arbitrari. Corretto #14743. -
Corretto il comportamento errato nel passaggio
BasisTranslatorin cui un gate multi-qubit all'interno di unControlFlowOprintracciava l'operazione supportata con i suoi indici di qubit locali invece di utilizzare gli indici assoluti del circuito esterno. Corretto #13728. -
Corretto un bug in
HighLevelSynthesisin cui le calibrazioni personalizzate del gate non venivano riconosciute se il gate appariva annidato all'interno di altri oggetti istruzione. Parzialmente corretto #13728. -
Corretto un errore nel cassetto del testo del circuito, che poteva verificarsi quando i blocchi di circuito all'interno delle operazioni di flusso di controllo erano definiti su registri diversi da quelli del circuito esterno. Questa situazione può verificarsi, ad esempio, quando si eseguono
ControlFlowOpdirettamente, o per i circuiti dopo la trasposizione.
1.4.4
Preludio
Qiskit v1.4.4 è una release di correzione di bug minori per la serie di release v1.4.x.
Correzioni di bug
-
ApplyLayoutora gestirà correttamente il caso dell'applicazione di uno zero-qubitLayout. In precedenza, si affermava che non era stato impostato alcun layout, anche se il campo"layout"dell'oggettoPropertySetera uguale aLayout(). -
Corretto un bug nel metodo
QuantumCircuit.assign_parameters()che provocava un errore con gli input di stringhe e gli argomentistrict=False. Per maggiori dettagli, consultare il numero #13933. -
È stato corretto l'attributo
namedella classeOrGatein modo che sia impostato su"or"per identificare in modo univoco questo gate. In precedenza era erroneamente impostato su"and", il che rendeva impossibile distinguerlo daAndGateo far sì che i plugin di sintesi sintetizzassero un fileOrGate. Corretto #14434 -
Corretto un bug nel passaggio
ElidePermutationsin cui la mappatura dei qubit non veniva aggiornata correttamente in presenza diPermutationGates, il che portava a circuiti e aggiornamenti errati dell'insieme di proprietà del gestore del passaggio. -
È stato risolto un bug nel menu
PauliEvolutionSynthesisDefaultePauliEvolutionSynthesisRustiqche modificava l'attributo.synthesisdel circuito originale quando si impostavapreserve_order=False. Il comportamento dei plugin è stato ripristinato e il circuito originale è ora conservato in tutta la pipeline di transpilazione. -
È stato corretto un bug di correttezza quando si esportano circuiti con istruzioni di ritardo utilizzando le unità di
'ps'in QASM3. -
È stato risolto un problema di compatibilità con la versione minima supportata di rustworkx, 0.15. Con determinati input i parametri
VF2LayouteVF2PostLayoututilizzavano in precedenza un metodo rustworkx aggiunto in rustworkx 0.16.0, che causava un errore quando si utilizzava una vecchia versione di rustworkx, elencata come supportata. -
SabreLayouteSabreSwape non si farà più prendere dal panico quando si applica il risultato dell'instradamento a un circuito che usa oggettiexpr.Varin un ambito di flusso di controllo annidato. -
La funzione della libreria dei circuiti
quantum_volume()è stata aggiornata per gestire unnumpy.random.Generatorcome input per il suo argomentoseed. In precedenza, un simile argomento generatore dava come risultatoTypeError. -
Corretto un bug nelle funzioni della libreria dei circuiti
evolved_operator_ansatz(),qaoa_ansatz()ehamiltonian_variational_ansatz()in cui i parametri avevano una componente complessa pari a zero. Questo per lo più non è un problema, a meno che non venga tradotto in SymPy usando il metodoParameterExpression.sympify()che in tal caso sollevava un errore.
1.4.3
Preludio
Qiskit v1.4.3 è una release di correzione di bug minori per la serie di release v1.4.x.
Correzioni di bug
-
Corretto un bug in
DAGCircuitche faceva sì che i nodi di uscitaVardiventassero nodi di ingresso durantedeepcopye il decapaggio. -
Corretto un problema nel
BasisTranslatorin cui la fase globale del DAG non veniva aggiornata correttamente. Corretto #14074. -
Corretto un bug in QPY (
qiskit.qpy) in cui i circuiti contenenti porte di classeMCMTGatenon venivano serializzati. Vedere #13965. -
SabreLayoutora propagherà correttamente i valori dinameemetadataquando viene eseguito come passaggio congiunto di layout e instradamento. -
È stato risolto un problema nel plugin
SolovayKitaevSynthesisin cui l'esecuzione ripetuta del plugin con diverse porte di base riutilizzava erroneamente solo le porte di base della prima esecuzione. Il problema era dovuto all'ignoranza delle porte di base durante la memorizzazione nella cache delle approssimazioni di base e ora è stato risolto. -
È stato risolto un problema nel passaggio
SolovayKitaevin cui il passaggio poteva bloccarsi a causa di una rotazione di 180 gradi nella ricorsione interna, che non veniva gestita correttamente. -
È stato risolto un problema nel passaggio
SolovayKitaevin cui l'approssimazione generata poteva avere una fase che differiva di dal valore corretto. Ciò è dovuto alla rappresentazione interna , che richiede una gestione aggiuntiva per ottenere il segno corretto della matrice di gate dei qubit. Corretto #9552 -
L'euristica dell'errore di ripiego in
VF2LayouteVF2PostLayoututilizzata quando non erano stati segnalati tassi di errore, poteva in precedenza assegnare errori maggiori di uno e avere effetti imprevedibili sui punteggi di layout risultanti.
1.4.2
Preludio
Qiskit 1.4.2 è una release di patch che risolve i bug riscontrati nella serie di release 1.4.
Nuove funzioni
- Aggiunto un nuovo flag
trust_payload, alla funzioneqpy.load()funzione. Viene utilizzato per forzare la funzione a caricare un carico utile potenzialmente insicuro. Se il payload contieneScheduleBlock(sia autonomi che come parte diQuantumCircuit.calibrations) e la codifica simbolica nel file QPY è impostata susympy, il payload è potenzialmente insicuro e il suo caricamento potrebbe consentire l'esecuzione di codice arbitrario. Dato che questo flag serve a controllare la deserializzazione di istanzeScheduleBlockistanze che non esistono in Qiskit >= 2.0.0, questo flag esisterà solo in Qiskit 1.4.x e non esisterà in Qiskit >= 2.0.0.
Note sull'aggiornamento
- Per impostazione predefinita,
qpy.loadsolleva un erroreQpyErrorquando viene chiamato con un payload QPY che contiene un oggettoScheduleBlock(sia da solo che come parte diQuantumCircuit.calibrations) che utilizzasympyper la codifica di espressioni simboliche. Questo perché il payload è potenzialmente vulnerabile e deve essere caricato solo se ci si fida del suo contenuto. Se si è certi che il payload non sia dannoso, si può impostare il nuovo argomentotrust_payloaddiqpy.loadaTrue, per consentire il caricamento del payload.
Problemi di sicurezza
- Corretta una vulnerabilità di sicurezza in
qpy.load()durante il caricamento di payload che utilizzanosympyper serializzareParameterExpressione altre espressioni simboliche. Questo include potenzialmente qualsiasi payload QPY che utilizzi la versione QPY < 10, e facoltativamente 10, 11 e 12, a seconda della codifica simbolica utilizzata nella fase di serializzazione (qpy.dump()).
Correzioni di bug
- Corretto un bug nella generazione dell'approssimazione della base per
SolovayKitaev. In precedenza, la generazione di approssimazioni di basi discrete utilizzandogenerate_basis_approximationsper una base contenente porte"sx"o"sxdg"falliva. Il problema è stato risolto.
1.4.1
Preludio
Qiskit 1.4.1 è una piccola release di patch che risolve alcuni bug riscontrati nella serie di supporto esteso 1.4.
Correzioni di bug
-
I circuiti compilati utilizzando un passmanager preimpostato costruito da
generate_preset_pass_manager()ora manterranno correttamente il loro attributonamecome avviene contranspile(). -
Corretto un problema con QPY 13 quando si serializzava o deserializzava un oggetto
ParameterExpressionche era stato definito chiamandoParameterExpression.subs()per sostituire unParametercon unParameterExpression. Ad esempio:from qiskit.circuit import Parameter a = Parameter("A") b = Parameter("B") expr = a + b c = Parameter("C") new_expr = c ** 3.14 final_expr.subs({b: new_expr})Nelle versioni precedenti, se si andava a serializzare un oggetto
QuantumCircuitche conteneva un'espressione come questa conqpy.dump()si sarebbe generato unAttributeErrorcon un messaggio di errore ‘ParameterExpression’ object has no attribute 'name' quando si utilizzava QPY 13 (il default). Il problema è stato risolto in modo che l'eccezione non venga più sollevata e che sia possibile serializzare e deserializzare un payload contenente questi oggetti nidificatiParameterExpressionnidificati. Vedere il numero 13879.
1.4.0
Preludio
La release di Qiskit v1.4 è l'ultima versione minore per la serie v1.x. Questa versione contiene funzionalità minime e aggiunge principalmente nuovi avvisi di deprecazione per le modifiche alle API previste nella futura versione principale v2.0. È completamente compatibile con le versioni di Qiskit v1.3.x. Si raccomanda vivamente di effettuare l'aggiornamento da v1.3.x a v1.4 in modo da poter vedere gli avvisi relativi alle interfacce che cambieranno con Qiskit v2.0. La serie di release v1.4.x continuerà a essere supportata e a ricevere correzioni di bug per 6 mesi e correzioni di sicurezza per 1 anno dopo questa release. Le correzioni avverranno tramite il rilascio di patch. Per maggiori dettagli sul programma di rilascio e sul ciclo di supporto si veda: qiskit-sdk-version-strategy che documenta il programma di rilascio in modo più dettagliato.
Caratteristiche dei circuiti
- Aggiunto un nuovo metodo,
QuantumCircuit.estimate_duration()per calcolare la durata stimata di un'uscita programmata del circuito a partire dal valoretranspiler. Questo dovrebbe essere usato se si desidera una stima della durata dell'intero circuito, invece dell'attributo deprecatoQuantumCircuit.durationdeprecato.
Circuiti deprecati
-
Sottoclassificazione
RegisteroBito qualsiasi sottoclasse di essi (ad esempio,QuantumRegisteroQubit) è deprecato a partire da Qiskit v1.4. La sottoclasse di questi tipi non è mai stata supportata esplicitamente da Qiskit e il suo significato non è mai stato definito. In Qiskit v2.0, la sottoclassificazione può diventare impossibile a causa di limitazioni tecniche e non sarà certamente memorizzata in un circuito. Ciò è dovuto allo spostamento del modello dei dati nello spazio Rust per migliorare le prestazioni. -
Il parametro opzionale
dagnel costruttore delle sottoclassi diDAGNode(in particolareDAGOpNode), che è stato inutilizzato e ignorato da Qiskit v1.2, è ora deprecato a partire da Qiskit v1.4 e sarà rimosso in Qiskit v2.0. -
La classe Multiple-Control-Multiple-Target (MCMT) in
MCMTè ora deprecata e sostituita daMCMTGateche è una vera e propria sottoclasseGateche è una vera e propria sottoclasse. L'uso di un gate al posto di un circuito consente al compilatore di ragionare sull'oggetto a un livello di astrazione superiore e sblocca l'uso di più plugin di sintesi. -
Il
qiskit.circuit.classicalfunctione con esso la classeClassicalFunctione le relative classiclassical_function()eBooleanExpressionsono stati deprecati a partire da Qiskit v1.4 e saranno rimossi in Qiskit v2.0.Questa modifica viene effettuata per evitare la dipendenza dalla libreria esterna
tweedledum, che non è più compatibile con tutte le piattaforme e le versioni di Python supportate da Qiskit. Per una funzionalità simile, utilizzare il filePhaseOracleche avrà un'implementazione che non utilizzatweedledum, eBitFlipOracleche sarà aggiunto in Qiskit v2.0.Fino all'aggiunta di
BitFlipOracle, un oracolo a capovolgimento di fase può essere convertito in un oracolo a capovolgimento di bit condizionandolo sul qubit risultato e applicando porte di Hadamard prima e dopo l'applicazione dell'oracolo, come nell'esempio seguente (dove l'oracolo è suqr_xe il risultato è suqr_y):from qiskit import QuantumRegister, QuantumCircuit from qiskit.circuit.library.phase_oracle import PhaseOracle bool_expr = "(x0 & x1 | ~x2) & x4" qr_x = QuantumRegister(4, "x") qr_y = QuantumRegister(1, "y") bit_flip_oracle = QuantumCircuit(qr_x, qr_y) phase_flip_oracle = PhaseOracle(bool_expr) controlled_phase_flip_oracle = phase_flip_oracle.control(1) bit_flip_oracle.h(qr_y) bit_flip_oracle.compose(controlled_phase_flip_oracle, qubits=[*qr_y, *qr_x], inplace=True) bit_flip_oracle.h(qr_y) print(bit_flip_oracle)Il che si traduce in
┌───────────────┐ x_0: ─────┤0 ├───── │ │ x_1: ─────┤1 ├───── │ Phase Oracle │ x_2: ─────┤2 ├───── │ │ x_3: ─────┤3 ├───── ┌───┐└───────┬───────┘┌───┐ y: ┤ H ├────────■────────┤ H ├ └───┘ └───┘
Deprecazioni delle primitive
- Fornire input di tipo
BackendV1all'argomentobackenddiBackendSamplerV2eBackendEstimatorV2è deprecato a partire da Qiskit 1.4 e sarà rimosso in Qiskit 2.0. Utilizzare un'istanza diBackendV2al suo posto.
Deprecazioni dei provider
-
La
BackendV2Convertere le funzioniconvert_to_target()sono state deprecate in Qiskit v1.4 in seguito alla deprecazione diBackendV1. La funzioneconvert_to_target()viene utilizzata per costruire un'istanzaTargetda una serie di oggetti del flusso di lavoro deprecatoBackendV1flusso di lavoro:BackendConfiguration,BackendPropertiesePulseDefaults.BackendV2Converterviene utilizzato per convertireBackendV1aBackendV2e non può essere mantenuto una volta cheBackendV1viene rimosso. -
Il metodo
BasicSimulator.run_experiment()è stato deprecato e sarà rimosso in Qiskit v2.0. Il metodo accetta un parametroQasmQobjExperimentcome argomento di input, che è stato deprecato insieme alla classeQobje ad altre funzionalità correlate. È possibile chiamareBasicSimulator.run()con unQuantumCircuital posto dell'input. -
I tipi di errore
BackendPropertyErroreBackendConfigurationErrorsono stati deprecati in Qiskit 1.4 e saranno rimossi in Qiskit 2.0. Questi errori sono usati solo quando si recuperano elementi dai deprecatiBackendPropertieseBackendConfigurationoggetti. -
Le classi
GateProperties,BackendStatus, eqiskit.providers.models.JobStatus, che fanno parte del flusso di lavoro legacyBackendV1sono ora deprecate. Questi dovrebbero essere stati deprecati in Qiskit 1.2 insieme agli elementi correlati inqiskit.providers.models.
Deprecazioni della sintesi
-
La firma dell'argomento
atomic_evolutionnel costruttore delle classiLieTrotter,ProductFormula, eSuzukiTrotterè stata modificata in Qiskit v1.2 per migliorare la visualizzazione del circuito di uscita. La vecchia firma è stata deprecata a favore della nuova alternativa. Da Qiskit v2.0, sarà valida solo la nuova alternativa.Per migrare, modificare il callable da
Callable[[Pauli | SparsePauliOp, float], QuantumCircuit]aCallable[[QuantumCircuit, Pauli | SparsePauliOp, float], None].
Deprecazioni del transpiler
-
Il
DAGOpNode.sort_key,DAGOutNode.sort_key, eDAGInNode.sort_keysono stati deprecati e verranno rimossi nella versione di Qiskit v2.0. Questi attributi sono stati originariamente utilizzati come chiave lessicografica per l'ordinamento topologico dei nodi in un file di tipoDAGCircuit. Tuttavia, la chiave non viene più utilizzata per questo scopo, poiché l'ordinamento viene ora eseguito internamente nel codice Rust. Se si utilizza questo attributo, è possibile ricreare la chiave dagli altri attributi di un nodo. Ad esempio, è possibile utilizzare una funzione come:def get_sort_key(node: DAGNode): if isinstance(node, (DAGInNode, DAGOutNode)): return str(node.wire) return ",".join( f"{dag.find_bit(q).index:04d}" for q in itertools.chain(node.qargs, node.cargs) )che genererà una stringa come la chiave di ordinamento.
-
I seguenti usi dell'oggetto
BackendPropertiesnella pipeline di transpilazione sono stati deprecati a partire da Qiskit v1.4 e saranno rimossi in Qiskit v2.0:backend_propargomento di ingresso inDenseLayoutpropertiesargomento di ingresso inVF2Layoutpropertiesecoupling_mapargomenti in ingresso inVF2PostLayout. Si noti checoupling_mapè stato utilizzato solo in presenza diproperties.backend_propsargomento di ingresso inUnitarySynthesisbackend_propertiesargomento di ingresso inPassManagerConfigbackend_propertiesinTarget.from_configuration()backend_propertiesingenerate_routing_passmanager()backend_propertiesingenerate_translation_passmanager()
La classe
BackendPropertiesè stata deprecata da Qiskit v1.2, insieme ad altri elementi del flusso di lavoroBackendV1e sarà rimossa in Qiskit v2.0. Il percorso alternativo per comunicare le informazioni sull'hardware all'argomento di transpilazione è la classeTargetche può essere impostata con l'argomento di inputtarget. Le proprietà di istruzioni specifiche, come gli errori di gate o le durate, possono essere aggiunte a un'istruzioneTargetal momento della costruzione attraverso il metodoTarget.add_instruction()metodo.Nel caso di
generate_routing_passmanager()egenerate_translation_passmanager(), l'argomentobackend_propertiesè facoltativo e viene sostituito quando viene compilato l'argomentotarget. L'uso dell'argomento può essere tranquillamente rimosso in 1.x, a patto che si passi un obiettivo, che era l'uso consigliato. -
La deprecazione di Pulse in Qiskit v1.3, includeva passaggi del costruttore di calibrazione come
RXCalibrationBuilder. IlNormalizeRXAngleè un requisito diRXCalibrationBuildere quindi è stato deprecato in Qiskit v1.4. Anche la funzionerzx_templates()del modulo di calibrazione viene anch'essa deprecata, poiché non viene utilizzata nella nostra base di codice.
Deprecazioni relative alla visualizzazione
-
I parametri
show_idleeshow_barriernei cassetti della linea temporale sono deprecati a partire da Qiskit v1.4. Le alternative sono, rispettivamente, i parametriidle_wireseplot_barriers, introdotti in Qiskit v1.1, che sono del tutto equivalenti. I nomi dei parametri legacy saranno rimossi in Qiskit v2.0. -
In Qiskit v1.4, la funzione timeline drawer
timeline_drawer()emette un avviso di deprecazione se non viene specificato untargetper ottenere la durata delle istruzioni. A partire da Qiskit v2.0,targetsarà richiesto e fallirà se non sarà specificatotimeline_drawer()fallirà se non viene specificato. -
Fornire input di tipo
BackendV1all'argomentobackenddiplot_gate_map(),plot_circuit_layout(), eplot_error_map()sono deprecati a partire da Qiskit 1.4 e saranno rimossi in Qiskit 2.0. Utilizzare un'istanza diBackendV2al suo posto.
Varie Deprecazioni
- L'uso di argomenti posizionali nel costruttore di
Resultè deprecato a partire da Qiskit 1.4 e sarà disabilitato in Qiskit 2.0. Impostare tutti gli argomenti usando la sintassi kwarg, cioè:Result(backend_name="name", ....). Inoltre, l'argomentoqobj_idè deprecato e non sarà più utilizzato in Qiskit 2.0. Sarà comunque possibile impostareqobj_idcome kwarg generico, che finirà nel campo dei metadati insieme agli altri kwarg generici.
Correzioni di bug
- Corretto un problema in
Target.has_calibration()eTarget.get_calibration()in cui il passaggio di un gate parametrizzato non funzionava come previsto. Fare riferimento a qiskit/#11657 e qiskit/#11658 per ulteriori informazioni.
Altre note
-
Passare
property_setcome argomento di una parola chiave arbitraria al metodorun()di una sottoclasse diBasePassManagercambierà il comportamento in Qiskit v2.0. Attualmente viene inoltrata alle funzioni interne di conversione della rappresentazione del gestore di passaggi, come qualsiasi argomento di parola chiave arbitraria a tale metodo. A partire da Qiskit v2.0, l'opzione sarà invece utilizzata per impostare il seme del filePropertySetper l'esecuzione della pipeline e l'argomento non verrà passato alle funzioni di conversione.Questa nota riguarda solo gli implementatori delle sottoclassi di
BasePassManagerche hanno scelto le loro implementazioni di_passmanager_frontende_passmanager_backendper accettare un argomento parola chiave chiamatoproperty_set.