Skip to main content
IBM Quantum Platform

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 C3SXGate che lo faceva fallire se Gate.to_matrix() veniva chiamato. La matrice del gate viene ora restituita come previsto.

  • L'attributo QuantumCircuit.parameters sarà ora correttamente vuoto quando si usa QuantumCircuit.copy_empty_like() su un circuito parametrico. In precedenza, una cache interna veniva copiata senza essere invalidata. Correzione #12617.

  • Correggere il SolovayKitaev quando si caricano le approssimazioni di base da un file .npy esistente. 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 GenericBackendV2 permetteva 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'operazione n-qubit su un blocco di m qubit, lasciando il DAG in uno stato non valido. Questo comportamento è stato corretto e il tentativo solleverà un problema di DAGCircuitError.

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() o QuantumCircuit.draw() quando si utilizzava l'opzione di uscita mpl : il programma si bloccava se il circuito da disegnare conteneva un'operazione ControlFlow e l'opzione fold era impostata su -1 (ovvero nessuna piega). Corretto #12012.

  • L'opzione EvolvedOperatorAnsatz gestisce correttamente il caso in cui l'argomento degli operatori è un elenco vuoto. In precedenza, ciò comportava un errore.

  • D'ora in poi, EvolvedOperatorAnsatz non avrà alcuna qreg quando ci sono zero qubit, invece di avere un'istanza con zero qubit QuantumRegister istanza con zero qubit. Questo comportamento si allinea più coerentemente con la sua superclasse QuantumCircuit.

  • Il metodo Instruction.repeat() sposta ora un insieme condition all'esterno restituito Instruction e lascia incondizionate le porte interne della sua definizione. In precedenza, il metodo lasciava le ClassicalRegister all'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 argomento BackendV2 con 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 VF2Layout solleva un'eccezione quando viene fornita un'istanza Target senza vincoli di connettività. Questo sarebbe il caso degli obiettivi di Aer 0.13. Il problema è stato ora corretto.

  • Il plugin predefinito init non sollevava correttamente un problema di tipo TranspilerError quando 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() e qasm2.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 2π2\pi.


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'attributo BackendConfiguration.supported_instructions , che è la posizione tipica in cui le istruzioni di flusso di controllo sono specificate in un oggetto BackendConfiguration oggetto. 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 come BasisTranslator continuerebbero a usare le vecchie regole. Corretto #11958.

  • BasePassManager.run() non disperderà più il precedente PropertySet nei nuovi flussi di lavoro quando viene richiamato più di una volta. In precedenza, per inizializzare le esecuzioni successive veniva utilizzato lo stesso PropertySet come 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 FakeOpenPulse2Q backend. 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 modulo qiskit.tools) è stato aggiornato per funzionare come previsto. La funzione job_monitor() ora funziona con Job istanze. Le funzioni backend_overview() e backend_monitor() dovrebbero ora funzionare come previsto.

  • InstructionDurations.from_backend() restituisce ora un'istanza di qualsiasi sottoclasse di InstructionDurations invece 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.

Nota

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 a qiskit.synthesis. Questa funzione permette di applicare la Decomposizione Quantistica di Shannon a unitari arbitrari.

  • Un nuovo qiskit.providers.basic_provider è stato introdotto per sostituire qiskit.providers.basicaer. Questo modulo contiene strumenti di provider che rispecchiano quelli del provider BasicAer e offre un singolo simulatore non efficiente basato su statevector: BasicSimulator. Questo simulatore è basato sull'interfaccia BackendV2 ed è destinato esclusivamente a test e semplici prototipi; per funzionalità di simulazione più avanzate, si rimanda al pacchetto qiskit-aer . Per le linee guida sulla migrazione, consultare la nota di deprecazione BasicAer .

  • L'interfaccia e la pipeline di transpiler Target e la pipeline del transpiler supportano ora le definizioni di target con num_qubits=None. Questo per consentire la creazione di simulatori Target-con un numero flessibile di qubit. Una destinazione con num_qubits=None conterrà esclusivamente istruzioni globali (con qargs=None) e quando viene fornita al transpiler, si prevede che quest'ultimo non ridimensioni il circuito. Questa modifica del Target richiede futuri passaggi di transpiler per tenere conto del caso in cui target.num_qubits is None.

  • Una nuova classe, GenericBackendV2 è stata aggiunta al modulo qiskit.providers.fake_provider modulo. Questa classe è configurabile e costruisce un'istanza di BackendV2 che 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 oggetto Target da 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)
    Nota

    Le 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 da ParameterExpression.is_real() per gestire un bug presente nelle versioni precedenti di symengine.

Note di deprecazione

  • Il ScheduleBlock.scoped_parameters() e ScheduleBlock.search_parameters() sono stati deprecati. Questi metodi producono Parameter con nomi modificati per indicare lo scoping dell'impulso. L'intenzione originaria dei metodi era che questi oggetti continuassero a collegarsi agli oggetti originali Parameter originali 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'argomento data della funzione di visualizzazione plot_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 di QuasiDistribution, ProbDistribution, o di un dizionario di distribuzione, è necessario utilizzare la funzione plot_distribution() invece di utilizzare la funzione

  • Il pacchetto qiskit-terra Python è deprecato e non riceverà più aggiornamenti a partire da Qiskit 1.0.0. Se si installa qiskit-terra da solo, questo non sarà più aggiornato per Qiskit>=1.0.0. Se si sta eseguendo qiskit senza il pacchetto qiskit , verrà emesso un FutureWarning all'importazione di qiskit per indicare che non si sta usando il pacchetto qiskit .

  • L'uso dell'oggetto qiskit.Aer è deprecato e sarà rimosso in Qiskit 1.0. Si dovrebbe invece utilizzare lo stesso oggetto dello spazio dei nomi qiskit_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 da qiskit_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:

  • 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 legacy qiskit-ibmq-provider , che non è più supportato e che supporta anche solo BackendV1. 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 legacy qiskit-ibmq-provider , che non è più supportato e che supporta anche solo BackendV1.

  • 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 in qiskit.visualization in Qiskit 0.8.0. Se si utilizza ancora questo percorso, è sufficiente aggiornare le importazioni da qiskit.tools.visualization a qiskit.visualization.

  • Il modulo qiskit.tools.events e 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.events e qiskit.tools.visualization), le funzionalità di questo modulo sono state migrate a qiskit.utils. Se si utilizza una qualsiasi funzionalità di questo modulo, si possono aggiornare le importazioni da qiskit.tools a qiskit.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 in qiskit.synthesis:

    La classe Quaternion è stata migrata da qiskit.quantum_info.synthesis a qiskit.quantum_info. Questo spostamento non ha influito sul percorso di importazione abituale della classe, ma l'accesso alla classe tramite qiskit.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 modulo qiskit.qasm2 che 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 modulo qiskit.qasm che è stato deprecato) e convertirlo direttamente in un file DAGCircuit. 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 file QuantumCircuit usando l'opzione QuantumCircuit.from_qasm_file() o QuantumCircuit.from_qasm_str() e poi convertire il file QuantumCircuit in un file DAGCircuit con circuit_to_dag().

  • Il metodo QuantumCircuit.qasm() utilizzato per generare una rappresentazione OpenQASM 2 dell'oggetto QuantumCircuit è stato deprecato e verrà rimosso nella versione di Qiskit 1.0.0. Il qasm2.dump() o qasm2.dumps() che forniscono una funzionalità simile, devono essere utilizzate al loro posto. Se si utilizza il metodo QuantumCircuit.qasm() per generare output formattato con pygments, si dovrebbe invece guardare al pacchetto standalone openqasm-pygments che fornisce questa funzionalità (come qasm2.dump() e qasm2.dumps() non forniscono output colorato pygments).

  • La classe ParametricPulse e gli impulsi sono ora deprecati e saranno rimossi in Qiskit 1.0. Ciò comprende:

    La classe è stata sostituita da SymbolicPulse e dalla corrispondente libreria di impulsi. SymbolicPulse offre migliori prestazioni, flessibilità e supporto QPY.

  • Il passaggio per il transpiler e il corrispondente plugin per lo stage di layout di NoiseAdaptiveLayout e 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 da VF2Layout e VF2PostLayout che 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 file BackendProperties di un'istanza BackendV1 istanza. 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 utilizzare qiskit.visualization.circuit.qcstyle come 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 QuantumCircuit tipo in call().

    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, QuantumCircuit può 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 QuantumCircuit tramite il metodo QuantumCircuit.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_settings
    • default_circuit_scheduler_settings

    Insieme alle funzioni:

  • I seguenti strumenti in qiskit.utils sono 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.algorithms e qiskit.opflow, e saranno rimosse in seguito alla rimozione di qiskit.algorithms e qiskit.opflow in Qiskit 1.0.

  • Il modulo qiskit.providers.fake_provider è stato migrato nel pacchetto qiskit-ibm-runtime Python. Per questo motivo, i seguenti elementi del file qiskit.providers.fake_provider sono stati deprecati a partire da Qiskit 0.46 e saranno rimossi in Qiskit 1.0:

    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 GenericBackendV2 e sono anch'essi deprecati a partire da Qiskit 0.46:

    Esempio di migrazione alla nuova GenericBackendV2 classe:

    # 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 in qiskit.circuit.library, tra cui:

    Con la deprecazione degli oggetti, sono stati deprecati anche i seguenti metodi di circuito:

    • QuantumCircuit.diagonal,
    • QuantumCircuit.hamiltonian,
    • QuantumCircuit.isometry e QuantumCircuit.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 funzione transpile() (con le opportune opzioni di transpile) seguita da backend.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 deprecata execute() deprecata. La classe BackendSampler è 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 uno SparsePauliOp negli argomenti osservabili di Estimator è deprecata a partire da Qiskit 0.46 e sarà rimossa in Qiskit 1.0. Si dovrebbe convertire esplicitamente in un elemento SparsePauliOp utilizzando SparsePauliOp.from_operator() invece.

  • La libreria degli impulsi discreti è ora deprecata e sarà rimossa in una versione futura. Ciò comprende:

    Utilizzare invece il corrispondente SymbolicPulse, con get_waveform(). Ad esempio, al posto di pulse.gaussian(100,0.5,10) si usa pulse.Gaussian(100,0.5,10).get_waveform().

    Si noti che la fase di Sawtooth e Square è definita in modo tale che una fase di 2pi2\\pi 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 invece float, amp e angle .

  • La classe ConfigurableFakeBackend che è stata utilizzata principalmente per i test interni, è ora deprecata. Verrà rimosso nel rilascio di Qiskit 1.0.0. Si può invece usare la classe GenericBackendV2 per costruire un backend simile per i test.

  • Il caricamento degli oggetti della libreria ScalableSymbolicPulse con il parametro complesso amp da 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 complesso amp verrà automaticamente convertito in float (amp, angle). La modifica si applica agli impulsi:

    • Constant
    • Drag
    • Gaussian
    • GaussianSquare
  • Il modulo qiskit.providers.basicaer e tutte le sue classi sono deprecate a partire da Qiskit 0.46. Il loro utilizzo deve essere sostituito con il modulo qiskit.quantum_info e il nuovo modulo qiskit.providers.basic_provider modulo.

    La migrazione dall'uso di qiskit.providers.basicaer a qiskit.providers.basic_provider può 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 fare from 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.

    1. 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)
    2. 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
    3. 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 PauliList come osservabile che viene implicitamente convertito in a SparsePauliOp con coefficienti 1 quando si chiama Estimator.run() è deprecato. Si deve invece convertire esplicitamente l'argomento usando prima SparsePauliOp(pauli_list) .

Problemi critici

  • Quando si aggiorna Qiskit da 0.46.x a 1.0.0 non sarà possibile effettuare l'aggiornamento in loco. Ad esempio, pip install -U qiskit o pip install --upgrade qiskit non sono supportati e probabilmente non funzioneranno. Per aggiornare qiskit il 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>=1

    creerà un nuovo ambiente virtuale chiamato qiskit_1.0 che conterrà la nuova versione di Qiskit.

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