Skip to main content
IBM Quantum Platform

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() e qasm2.loads()) ora generano un RecursionError quando 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 Optimize1qGatesDecomposition quando il passaggio era inizializzato con un file Target che 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 BasisTranslator in cui un gate multi-qubit all'interno di un ControlFlowOp rintracciava 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 ControlFlowOp direttamente, 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

  • ApplyLayout ora gestirà correttamente il caso dell'applicazione di uno zero-qubit Layout. In precedenza, si affermava che non era stato impostato alcun layout, anche se il campo "layout" dell'oggetto PropertySet era uguale a Layout().

  • Corretto un bug nel metodo QuantumCircuit.assign_parameters() che provocava un errore con gli input di stringhe e gli argomenti strict=False. Per maggiori dettagli, consultare il numero #13933.

  • È stato corretto l'attributo name della classe OrGate in 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 da AndGate o far sì che i plugin di sintesi sintetizzassero un file OrGate. Corretto #14434

  • Corretto un bug nel passaggio ElidePermutations in cui la mappatura dei qubit non veniva aggiornata correttamente in presenza di PermutationGates, il che portava a circuiti e aggiornamenti errati dell'insieme di proprietà del gestore del passaggio.

  • È stato risolto un bug nel menu PauliEvolutionSynthesisDefault e PauliEvolutionSynthesisRustiq che modificava l'attributo .synthesis del circuito originale quando si impostava preserve_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 VF2Layout e VF2PostLayout utilizzavano 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.

  • SabreLayout e SabreSwap e non si farà più prendere dal panico quando si applica il risultato dell'instradamento a un circuito che usa oggetti expr.Var in un ambito di flusso di controllo annidato.

  • La funzione della libreria dei circuiti quantum_volume() è stata aggiornata per gestire un numpy.random.Generator come input per il suo argomento seed . In precedenza, un simile argomento generatore dava come risultato TypeError.

  • Corretto un bug nelle funzioni della libreria dei circuiti evolved_operator_ansatz(), qaoa_ansatz() e hamiltonian_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 metodo ParameterExpression.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 DAGCircuit che faceva sì che i nodi di uscita Var diventassero nodi di ingresso durante deepcopy e il decapaggio.

  • Corretto un problema nel BasisTranslator in 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 classe MCMTGate non venivano serializzati. Vedere #13965.

  • SabreLayout ora propagherà correttamente i valori di name e metadata quando viene eseguito come passaggio congiunto di layout e instradamento.

  • È stato risolto un problema nel plugin SolovayKitaevSynthesis in 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 SolovayKitaev in 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 SolovayKitaev in cui l'approssimazione generata poteva avere una fase che differiva di π\pi dal valore corretto. Ciò è dovuto alla rappresentazione interna SO(3)SO(3), 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 VF2Layout e VF2PostLayoututilizzata 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 funzione qpy.load() funzione. Viene utilizzato per forzare la funzione a caricare un carico utile potenzialmente insicuro. Se il payload contiene ScheduleBlock (sia autonomi che come parte di QuantumCircuit.calibrations) e la codifica simbolica nel file QPY è impostata su sympy , 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 istanze ScheduleBlock istanze 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.load solleva un errore QpyError quando viene chiamato con un payload QPY che contiene un oggetto ScheduleBlock (sia da solo che come parte di QuantumCircuit.calibrations) che utilizza sympy per 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 argomento trust_payload di qpy.load a True, per consentire il caricamento del payload.

Problemi di sicurezza

  • Corretta una vulnerabilità di sicurezza in qpy.load() durante il caricamento di payload che utilizzano sympy per serializzare ParameterExpression e 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 utilizzando generate_basis_approximations per 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 attributo name come avviene con transpile().

  • Corretto un problema con QPY 13 quando si serializzava o deserializzava un oggetto ParameterExpression che era stato definito chiamando ParameterExpression.subs() per sostituire un Parameter con un ParameterExpression. 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 QuantumCircuit che conteneva un'espressione come questa con qpy.dump() si sarebbe generato un AttributeError con 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 nidificati ParameterExpression nidificati. 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

Circuiti deprecati

  • Sottoclassificazione Register o Bito qualsiasi sottoclasse di essi (ad esempio, QuantumRegister o Qubit) è 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 dag nel costruttore delle sottoclassi di DAGNode (in particolare DAGOpNode), 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 da MCMTGateche è una vera e propria sottoclasse Gate che è 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.classicalfunction e con esso la classe ClassicalFunction e le relative classi classical_function() e BooleanExpression sono 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 file PhaseOracle che avrà un'implementazione che non utilizza tweedledum, e BitFlipOracle che 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 è su qr_x e il risultato è su qr_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

Deprecazioni dei provider

Deprecazioni della sintesi

  • La firma dell'argomento atomic_evolution nel costruttore delle classi LieTrotter, ProductFormula, e SuzukiTrotter è 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] a Callable[[QuantumCircuit, Pauli | SparsePauliOp, float], None].

Deprecazioni del transpiler

  • Il DAGOpNode.sort_key, DAGOutNode.sort_key, e DAGInNode.sort_key sono 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 tipo DAGCircuit. 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 BackendProperties nella pipeline di transpilazione sono stati deprecati a partire da Qiskit v1.4 e saranno rimossi in Qiskit v2.0:

    La classe BackendProperties è stata deprecata da Qiskit v1.2, insieme ad altri elementi del flusso di lavoro BackendV1 e sarà rimossa in Qiskit v2.0. Il percorso alternativo per comunicare le informazioni sull'hardware all'argomento di transpilazione è la classe Target che può essere impostata con l'argomento di input target . Le proprietà di istruzioni specifiche, come gli errori di gate o le durate, possono essere aggiunte a un'istruzione Target al momento della costruzione attraverso il metodo Target.add_instruction() metodo.

    Nel caso di generate_routing_passmanager() e generate_translation_passmanager(), l'argomento backend_properties è facoltativo e viene sostituito quando viene compilato l'argomento target . 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. Il NormalizeRXAngle è un requisito di RXCalibrationBuildere quindi è stato deprecato in Qiskit v1.4. Anche la funzione rzx_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_idle e show_barrier nei cassetti della linea temporale sono deprecati a partire da Qiskit v1.4. Le alternative sono, rispettivamente, i parametri idle_wires e plot_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 un target per ottenere la durata delle istruzioni. A partire da Qiskit v2.0, target sarà richiesto e fallirà se non sarà specificato timeline_drawer() fallirà se non viene specificato.

  • Fornire input di tipo BackendV1 all'argomento backend di plot_gate_map(), plot_circuit_layout(), e plot_error_map() sono deprecati a partire da Qiskit 1.4 e saranno rimossi in Qiskit 2.0. Utilizzare un'istanza di BackendV2 al 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'argomento qobj_id è deprecato e non sarà più utilizzato in Qiskit 2.0. Sarà comunque possibile impostare qobj_id come kwarg generico, che finirà nel campo dei metadati insieme agli altri kwarg generici.

Correzioni di bug

Altre note

  • Passare property_set come argomento di una parola chiave arbitraria al metodo run() di una sottoclasse di BasePassManager cambierà 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 file PropertySet per l'esecuzione della pipeline e l'argomento non verrà passato alle funzioni di conversione.

    Questa nota riguarda solo gli implementatori delle sottoclassi di BasePassManager che hanno scelto le loro implementazioni di _passmanager_frontend e _passmanager_backend per accettare un argomento parola chiave chiamato property_set.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.