Skip to main content
IBM Quantum Platform

Note di rilascio di Qiskit 0.34


0.34.2

Terra 0.19.2

Preludio

Qiskit Terra 0.19.2 è principalmente una release di correzione di bug, ma ora è anche dotata di ruote costruite per Python 3.10 su tutte le principali piattaforme.

Nuove funzioni

  • Aggiunto il supporto per l'esecuzione con Python 3.10. Questo include la pubblicazione di binari precompilati su PyPI per Python 3.10 sulle piattaforme supportate.

Note sull'aggiornamento

Correzioni di bug

  • Corretto un bug per cui l'applicazione CVaRMeasurement tentava di convertire una matrice PauliSumOp in una matrice densa per verificare se fosse diagonale. Per operatori di grandi dimensioni (> 16 qubit) questo calcolo è estremamente costoso e genera un errore se non viene esplicitamente abilitato tramite qiskit.utils.algorithm_globals.massive = True. Il controllo è ora efficiente anche per un numero elevato di qubit.

  • DAGCircuit.draw() e la funzione associata dag_drawer() mostreranno ora un messaggio di errore più utile quando il nome del file fornito non è valido.

  • QuantumCircuit.add_register() non causerà più riferimenti duplicati AncillaQubit riferimenti in un circuito quando viene dato un AncillaRegister i cui bit sono già presenti.

  • Conversione fissa di QuantumCircuits con condizioni classiche su un singolo, senza registro Clbit a Instructions quando si utilizza la funzione circuit_to_instruction() o il metodo QuantumCircuit.to_instruction() metodo. Ad esempio, ora funziona quanto segue:

    from qiskit.circuit import QuantumCircuit, Qubit, Clbit
    
    qc = QuantumCircuit([Qubit(), Clbit()])
    qc.h(0).c_if(qc.clbits[0], 0)
    qc.to_instruction()
  • I registri ora rifiutano correttamente i bit duplicati. Corretto #7446.

  • Il mock backend FakeOpenPulse2Q ha ora i tempi di T2 e gli errori di lettura memorizzati per i suoi qubit. Si tratta di valori arbitrari, approssimativamente coerenti con i backend reali al momento della creazione.

  • Fissare l'ordine dei qubit delle evoluzioni a 2 qubit nell'area PauliEvolutionGatese utilizzato con una formula di sintesi del prodotto. Per esempio, prima l'evoluzione di IIZ + IZI + IZZ

    from qiskit.circuit.library import PauliEvolutionGate
    from qiskit.opflow import I, Z
    operator = (I ^ I ^ Z) + (I ^ Z ^ I) + (I ^ Z ^ Z)
    print(PauliEvolutionGate(operator).definition.decompose())

    prodotto

         ┌───────┐
    q_0:Rz(2) ├────────
         ├───────┤
    q_1:Rz(2) ├─■──────
         └───────┘ │ZZ(2)
    q_2: ──────────■──────

    mentre ora si ottiene correttamente

         ┌───────┐
    q_0:Rz(2) ├─■──────
         ├───────┤ │ZZ(2)
    q_1:Rz(2) ├─■──────
         └───────┘
    q_2: ─────────────────
  • È stato risolto un problema nei cassetti dei circuiti latex e mpl quando i nomi dei registri con più trattini bassi nel nome non venivano visualizzati correttamente.

  • I numeri negativi negli output delle matrici dei cassetti vengono ora visualizzati come numeri decimali invece che come frazioni con numeratori e denominatori enormi. Come i numeri positivi, saranno ancora frazioni se il rapporto è tra numeri piccoli.

  • Corretto un problema con il metodo Target.get_non_global_operation_names() quando viene eseguito su una destinazione, solleva erroneamente un'eccezione sulle destinazioni con operazioni globali ideali. In precedenza, se questo metodo veniva richiamato su una destinazione che conteneva una qualsiasi operazione ideale definita a livello globale, in cui le proprietà dell'istruzione erano impostate su None, questo metodo sollevava un'eccezione invece di trattare l'istruzione come globale.

  • È stato risolto un problema con la funzione transpile() che poteva fallire quando veniva passato un oggetto Target direttamente con il kwarg target .

  • Corretto un problema con la funzione transpile() che poteva fallire quando l'argomento backend era un parametro BackendV2 o un Target tramite il kwarg target che conteneva operazioni ideali definite a livello globale.

  • È stato risolto un problema per cui il tracciamento delle sfere di Bloch poteva causare l'emissione di un messaggio AttributeError in Jupyter o quando si cercava di ritagliare le figure in base alle dimensioni con Matplotlib 3.3 o 3.4 (ma non 3.5 ). Ad esempio, il codice seguente si blocca in precedenza con un messaggio:

    AttributeError: 'Arrow3D' object has no attribute '_path2d'

    ma ora avrà successo con tutte le versioni attualmente supportate di Matplotlib :

    from qiskit.visualization import plot_bloch_vector
    plot_bloch_vector([0, 1, 0]).savefig("tmp.png", bbox_inches='tight')
  • Corretto un bug in PauliSumOp.permute() in cui l'oggetto su cui viene chiamato il metodo veniva permutato in-place, invece di restituire una copia permutata. Questo bug si verificava solo per le permutazioni che lasciavano invariato il numero di qubit nell'operatore.

  • Corretto il metodo PauliEvolutionGate.inverse() , che in precedenza calcolava l'inverso invertendo il tempo di evoluzione. Si trattava dell'inverso corretto solo se l'operatore era evoluto esattamente. In particolare, ciò ha fatto sì che l'inverso delle evoluzioni temporali basate sulla trotterizzazione non fosse corretto.

  • Il metodo QuantumInstance.execute() non muterà più il suo input se gli viene dato un elenco di circuiti.

  • Corretta la serializzazione QPY delle istruzioni personalizzate che avevano una definizione esplicita di no-op. In precedenza, queste porte venivano scritte e successivamente lette come se fossero porte opache (senza definizione). Ora eseguono correttamente il round-trip di una definizione vuota. Ad esempio, ora sarà corretto quanto segue:

    import io
    from qiskit.circuit import Instruction, QuantumCircuit, qpy_serialization
    
    # This instruction is explicitly defined as a one-qubit gate with no
    # operations.
    empty = QuantumCircuit(1, name="empty").to_instruction()
    # This instruction will perform some operations that are only known
    # by the hardware backend.
    opaque = Instruction("opaque", 1, 0, [])
    
    circuit = QuantumCircuit(2)
    circuit.append(empty, [0], [])
    circuit.append(opaque, [1], [])
    
    qpy_file = io.BytesIO()
    qpy_serialization.dump(circuit, qpy_file)
    qpy_file.seek(0)
    new_circuit = qpy_serialization.load(qpy_file)[0]
    
    # Previously both instructions in `new_circuit` would now be opaque, but
    # there is now a correct distinction.
    circuit == new_circuit
  • Aggiunto un attributo mancante BackendV2.provider alle implementazioni della classe BackendV2 della classe astratta. In precedenza, BackendV2 poteva essere inizializzato con un provider, ma non era accessibile agli utenti.

  • Corretto il supporto per la classe QuantumInstance quando viene eseguita con un backend BackendV2 backend. In precedenza, il tentativo di utilizzare un elemento QuantumInstance con un BackendV2 avrebbe dato luogo a un errore.

  • È stato corretto un bug in VQE in cui i parametri dell'ansatz venivano ancora ordinati esplicitamente in base al loro nome se l'ansatz veniva ridimensionato. Questo ha portato a un ordine errato dei valori ottimizzati nell'attributo optimal_point dell'oggetto risultato.

    In particolare, questo bug si verificava se l'utente non impostava alcun ansatz e il VQE sceglieva un default con 11 o più parametri liberi.

  • Ha interrotto il parser in QuantumCircuit.from_qasm_str() e from_qasm_file() di accettare programmi OpenQASM che si identificano come provenienti da una versione di linguaggio diversa da 2.0. Questo parser è solo per OpenQASM 2.0; il supporto per i circuiti importati da OpenQASM 3.0 sarà aggiunto in una prossima versione.

  • Corretta la serializzazione QPY di QuantumCircuit che contenevano istruzioni di flusso di controllo. In precedenza, se si tentava di serializzare un circuito contenente IfElseOp, WhileLoopOp, o ForLoopOp la serializzazione falliva. Corretto #7583.

  • Corretta la serializzazione QPY di QuantumCircuit contenente sottoinsiemi di bit di un file QuantumRegister o ClassicalRegister. In precedenza, se si cercava di serializzare un circuito come questo, questi bit venivano erroneamente trattati come indipendenti Qubit o Clbit senza avere un registro impostato. Ad esempio, se si cerca di serializzare un circuito come:

    import io
    from qiskit import QuantumCircuit, QuantumRegister
    from qiskit.circuit.qpy_serialization import load, dump
    
    qr = QuantumRegister(2)
    qc = QuantumCircuit([qr[0]])
    qc.x(0)
    with open('file.qpy', 'wb') as fd:
        dump(qc, fd)

    quando il circuito viene caricato, i registri saranno popolati correttamente anche se il circuito contiene solo un sottoinsieme dei bit del registro.

  • QFT ora avvisa se viene istanziato o costruito con impostazioni che ne causano la perdita di precisione, invece di sollevare un OverflowError. Questo può accadere se il numero di qubit è molto grande (leggermente superiore a 1000) senza che il grado di approssimazione sia altrettanto grande. Il circuito verrà costruito con successo, ma alcuni angoli potrebbero essere indistinguibili da zero, a causa delle limitazioni dei numeri in virgola mobile a doppia precisione.

Aer 0.10.3

Preludio

Qiskit Aer 0.10.3 è principalmente una release di correzione di bug, che risolve diversi bug scoperti dopo la release 0.10.2. Tuttavia, questa versione introduce anche il supporto per l'esecuzione con Python 3.10, comprese le ruote binarie precompilate su tutte le principali piattaforme. Questa release include anche ruote binarie precompilate per arm64 su macOS.

Nuove funzioni

  • Aggiunto il supporto per l'esecuzione con Python 3.10. Questo include la pubblicazione di binari precompilati su PyPI per Python 3.10 sulle piattaforme supportate.

  • Aggiunto il supporto per i sistemi M1 macOS. I binari precompilati per le versioni supportate di Python >= 3.8 su arm64 macOS saranno ora pubblicati su PyPI per questo e per i rilasci futuri.

Note sull'aggiornamento

Correzioni di bug

  • Corregge un bug in RelaxationNoisePass a causa del quale la durata delle istruzioni veniva sempre assunta in unità di tempo dt, indipendentemente dall'unità di misura effettiva dell'istruzione. Ora la conversione delle unità di misura è gestita correttamente per tutte le unità di durata delle istruzioni.

    Per i dettagli, vedere il n. 1453.

  • Corregge un problema con LocalNoisePass per le funzioni di rumore che restituiscono un elemento QuantumCircuit per l'opzione rumore. Questi sono stati aggiunti al DAG come istruzioni di circuito opache che devono essere srotolate per essere simulate. Questa correzione li compone in modo che le istruzioni di circuito vengano aggiunte al nuovo DAG e possano essere simulate senza ulteriori srotolamenti se tutte le istruzioni di circuito sono supportate dal simulatore.

    Per i dettagli, vedere il numero 1447.

  • Le transpilazioni multi-thread per generare porte diagonali ora funzionano correttamente se il numero di porte di un circuito supera fusion_parallelization_threshold. In precedenza, thread diversi fondevano occasionalmente lo stesso elemento in più blocchi, causando risultati errati.

  • Corregge un errore di troncamento dei circuiti nei Qobj parametrizzati. In precedenza, i parametri dei QObj parametrati potevano essere risolti in modo errato se i qubit non utilizzati dei loro circuiti venivano troncati, perché gli indici dei parametri non venivano aggiornati dopo la rimozione delle istruzioni sui qubit non misurati.

    Per i dettagli, vedere il numero 1427.

Ignis 0.7.0

Nessuna modifica

IBM Q Fornitore 0.18.3

Nessuna modifica


0.34.1

Terra 0.19.1

Nessuna modifica

Aer 0.10.2

Correzioni di bug

  • Corretta la simulazione dei loop di for in cui il parametro loop non veniva utilizzato nel corpo del loop. Ad esempio, in precedenza questo codice falliva, ma ora ha successo:

    import qiskit
    from qiskit.providers.aer import AerSimulator
    
    qc = qiskit.QuantumCircuit(2)
    with qc.for_loop(range(4)) as i:
        qc.h(0)
        qc.cx(0, 1)
    
    AerSimulator(method="statevector").run(qc)
  • Corregge un bug in QuantumError.to_dict() per cui le istruzioni di circuiti a N-qubit in cui l'istruzione assemblata si applicava sempre ai qubit [0, ..., N-1] piuttosto che ai qubit dell'istruzione. Questo bug riguardava anche i modelli di rumore del dispositivo e del backend falso.

    Per i dettagli si veda il numero 1415.

Ignis 0.7.0

Nessuna modifica

IBM Q Fornitore 0.18.3

Nessuna modifica


0.34.0

Qiskit 0.34.0 include una point release di Qiskit Aer: la versione 0.10.1, che corregge le regressioni delle prestazioni della versione 0.10.0, scoperte subito dopo il rilascio. Di seguito sono riportate le note di rilascio di Qiskit Aer 0.10.0 e 0.10.1.

Terra 0.19.1

Nessuna modifica

Aer 0.10.1

Preludio

La patch di Qiskit Aer 0.10.1 risolve le regressioni delle prestazioni introdotte in Qiskit Aer 0.10.0.

Correzioni di bug

  • Correzione della regressione delle prestazioni nelle simulazioni rumorose dovuta a un forte aumento dell'overhead di serializzazione per il caricamento dei modelli di rumore da Python in C++, a causa di chiamate multiprocessing nidificate non intenzionali di Python. Per i dettagli si veda il numero 1407.

Aer 0.10.0

Preludio

La versione di Qiskit Aer 0.10 include diversi miglioramenti delle prestazioni e del modello di rumore. Alcuni punti salienti sono:

  • Prestazioni migliorate per le simulazioni in parallelo su GPU e HPC
  • Supporto per la simulazione di circuiti contenenti istruzioni di flusso di controllo QASM 3.0
  • Supporto per il rumore di rilassamento sui circuiti programmati nei modelli di rumore di backend
  • Supporto di passaggi di transpiler creati dall'utente per definire errori di gate e modelli di rumore personalizzati e inserirli nei circuiti.

Nuove funzioni

  • Aggiunto il supporto delle istruzioni di controllo-flusso QASM 3.0 introdotte in Qiskit-Terra 0.19.0. Le istruzioni supportate sono ForLoopOp, WhileLoopOp, ContinueLoopOp, BreakLoopOp, IfElseOp.

  • Aggiunta un'ottimizzazione della simulazione a scatti multipli per le simulazioni su GPU. Questa funzione opzionale utilizza la memoria disponibile su 1 o più GPU per eseguire più scatti di simulazione in parallelo, migliorando notevolmente le prestazioni delle simulazioni multi-scatto con modelli di rumore e/o misure intermedie.

    Questa opzione è abilitata per impostazione predefinita quando si usa device="GPU" e una simulazione method di "statevector" o "density_matrix" con AerSimulator. Può essere disattivato impostando batched_shots_gpu=False nelle opzioni del simulatore.

    Questa ottimizzazione è particolarmente vantaggiosa per numeri medio-piccoli di qubit, dove la memoria della GPU è sufficiente per eseguire più simulazioni in parallelo. Il numero massimo di qubit attivi del circuito per abilitare questa ottimizzazione può essere configurato utilizzando l'opzione del simulatore batch_shots_gpu_max_qubits . Il valore predefinito di questa opzione è 16.

  • Aggiunta la nuova opzione max_shot_size a un esecutore personalizzato per l'esecuzione in parallelo di più riprese di un circuito rumoroso.

    Ad esempio, la configurazione di max_shot_size con un esecutore personalizzato:

    backend = AerSimulator(
       max_shot_size=1, max_job_size=1, executor=custom_executor)
    job = backend.run(circuits)

    dividerà gli scatti di un circuito rumoroso in più circuiti. Dopo che tutti i singoli scatti hanno terminato l'esecuzione, i risultati del lavoro vengono automaticamente combinati in un singolo oggetto che viene restituito da Result che viene restituito da job.result().

  • Aggiunta l'opzione del simulatore mps_swap_direction che consente all'utente di determinare la direzione degli swap interni, quando vengono inseriti per un gate a 2 qubit. I valori possibili sono "mps_swap_right" e "mps_swap_left". La direzione degli scambi può influire sulle prestazioni, a seconda del circuito.

  • Implementata una nuova ottimizzazione del campionamento delle misure per il metodo di simulazione "matrix_product_state" di AerSimulator. Attualmente questo algoritmo viene utilizzato solo quando tutti i qubit sono misurati e quando l'opzione del simulatore mps_sample_measure_algorithm è impostata su "mps_probabilities".

  • Migliorate le prestazioni dell'istruzione di misura per il metodo di simulazione "matrix_product_state" di AerSimulator.

  • Aggiunta un'istruzione SaveClifford per salvare lo stato del metodo di simulazione dello stabilizzatore come un Clifford oggetto.

    Si noti che questa istruzione è essenzialmente equivalente all'istruzione SaveStabilizer , che però restituisce lo stato salvato come oggetto StabilizerState invece che come oggetto Clifford oggetto.

  • Aggiunti due passaggi di transpiler per l'inserimento di errori quantistici dipendenti dalle istruzioni nei circuiti:

    • qiskit.providers.aer.noise.LocalNoisePass
    • qiskit.providers.aer.noise.RelaxationNoisePass

    Il passaggio LocalNoisePass può essere utilizzato per implementare modelli di rumore parametrici personalizzati, definendo una funzione di generazione del rumore della forma

    def fn(
        inst: Instruction,
        qubits: Optional[List[int]] = None,
    ) -> InstructionLike

    che restituisce un'istruzione di disturbo (ad esempio, un'istruzione QuantumError o di altro tipo) che può dipendere da qualsiasi proprietà o parametro dell'istruzione e degli argomenti del qubit.

    Questa funzione può essere applicata a tutte le istruzioni di un circuito o a un sottoinsieme specifico (per ulteriori dettagli, consultare la documentazione di LocalNoisePass )

    RelaxationNoisePass è un caso speciale di LocalNoisePass che utilizza una funzione di rumore predefinita che restituisce un prodotto tensoriale di thermal_relaxation_error() su ciascun qubit di un'istruzione, dipendente dalla durata dell'istruzione e dai parametri della costante di tempo di rilassamento forniti per il passaggio.

  • Il modello di base del rumore del dispositivo implementato da NoiseModel.from_backend() e AerSimulator.from_backend() è stato aggiornato per consentire l'aggiunta di errori di rilassamento dipendenti dalla durata sulle porte di ritardo del circuito utilizzando il modello RelaxationNoisePass.

    Per abilitare questo rumore durante l'esecuzione di simulazioni rumorose, occorre innanzitutto programmare il circuito in modo che inserisca istruzioni di ritardo programmate come segue:

    backend = AerSimulator.from_backend(ibmq_backend)
    scheduled_circuit = qiskit.transpile(
        circuit, backend=backend, scheduling_method='asap')
    result = backend.run(scheduled_circuit).result()

    Se il circuito viene transpilato senza essere programmato (e non contiene istruzioni di ritardo), la simulazione rumorosa non includerà l'effetto degli errori di rilassamento del ritardo. In questo caso la simulazione sarà equivalente alla precedente simulazione di qiskit-aer 0.9 in cui il rumore di rilassamento viene aggiunto solo alle istruzioni gate in base alla loro durata ottenuta dalle proprietà del backend.

  • Il costruttore di QuantumError accetta ora diversi nuovi tipi di input come argomento di noise_ops , ad esempio:

    import numpy as np
    
    from qiskit import QuantumCircuit
    from qiskit.circuit.library import IGate, XGate, Reset
    from qiskit.quantum_info import Kraus
    from qiskit.providers.aer.noise import QuantumError
    
    # Quantum channels
    kraus = Kraus([
        np.array([[1, 0], [0, np.sqrt(1 - 0.9)]], dtype=complex),
        np.array([[0, 0], [0, np.sqrt(0.9)]], dtype=complex)
    ])
    print(QuantumError(kraus))
    
    # Construction from a QuantumCircuit
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    error = QuantumError(qc)
    
    # Construction from a tuple of (Instruction, List[int]), where the list of
    # integers represents the qubits.
    error = QuantumError((Reset(), [0]))
    
    # Construction from an iterable of objects in the same form as above, but
    # where each also has an associated probability.
    error = QuantumError([
        ((IGate(), [0]), 0.9),
        ((XGate(), [0]), 0.1),
    ])
    
    # A short-hand for the iterable form above, where the qubits are implicit,
    # and each instruction is over all qubits.
    error = QuantumError([(IGate(), 0.9), (XGate(), 0.1)])

    Si noti che il formato di input originale basato su JSON è deperito.

  • Aggiunta una funzione di utilità qiskit.providers.aer.utils.transform_noise_model() per costruire un modello di rumore applicando una funzione fornita a tutti i QuantumErrors del modello di rumore.

  • Aggiunte due funzioni di utilità qiskit.providers.aer.utils.transpile_quantum_error() e qiskit.providers.aer.utils.transpile_noise_model() per il transpiling dei circuiti contenuti in QuantumError e di tutti gli errori in NoiseModel.

  • È stata aggiunta la possibilità di aggiungere oggetti QuantumError direttamente a un oggetto QuantumCircuit senza convertirlo in un'istruzione Kraus istruzione.

    I circuiti contenenti errori quantistici possono ora essere eseguiti sui simulatori AerSimulator e QasmSimulator in alternativa o in aggiunta alla costruzione di un NoiseModel per la definizione di istruzioni circuitali rumorose.

    Esempio:

    from qiskit import QuantumCircuit
    from qiskit.providers.aer import AerSimulator
    from qiskit.providers.aer.noise import pauli_error
    
    error_h = pauli_error([('I', 0.95), ('X', 0.05)])
    error_cx = pauli_error([('II', 0.9), ('XX', 0.1)])
    
    qc = QuantumCircuit(3)
    qc.h(0)
    qc.append(error_h, [0])
    qc.cx(0, 1)
    qc.append(error_cx, [0, 1])
    qc.cx(0, 2)
    qc.append(error_cx, [0, 2])
    qc.measure_all()
    
    backend = AerSimulator(method='stabilizer')
    result = backend.run(qc).result()
    result.get_counts(0)

    Anche i circuiti che contengono errori quantistici possono essere valutati utilizzando il quantum_info canale quantistico e DensityMatrix classi.

Note sull'aggiornamento

  • Il tipo di ritorno di diverse istruzioni di salvataggio è stato modificato in modo che siano le classi Qiskit Terra corrispondenti piuttosto che gli array o i dizionari grezzi NumPy. I tipi che sono cambiati sono

    • save_statevector() ora viene restituito come un oggetto Statevector
    • save_density_matrix() ora viene restituito come un oggetto DensityMatrix
    • save_stabilizer() ora viene restituito come StabilizerState
    • save_unitary() ora viene restituito come Operator
    • save_superop() ora viene restituito come SuperOp
    • save_probabilities_dict() ora viene restituito come un oggetto ProbDistribution
  • Modificato il valore predefinito di standard_gates in None per tutte le funzioni in qiskit.providers.aer.noise.errors.standard_errors , poiché tali funzioni sono state aggiornate in modo da utilizzare le porte standard per impostazione predefinita.

  • Quando viene fornito un argomento non supportato a approximate_quantum_error(), ora viene sollevato un NoiseError invece di un RuntimeError.

Note di deprecazione

  • L'uso dei metodi e degli attributi di NumPy ndarray sul tipo di ritorno di save_statevector(), save_density_matrix(), save_unitary() e save_superop() è stato deprecato e non funzionerà più in una prossima versione. Queste istruzioni ora restituiscono qiskit.quantum_info per i loro tipi di ritorno. La parziale retrocompatibilità con il trattamento di questi oggetti come array NumPy è implementata inoltrando i metodi all'array interno durante il periodo di deprecazione.

  • Il passaggio di un oggetto BackendProperties per l'argomento backend di NoiseModel.from_backend() è stato deprecato, poiché è incompatibile con i rumori di ritardo dipendenti dalla durata e sarà rimosso in una prossima versione. Passare invece un oggetto Qiskit Terra BackendV1 invece di un oggetto Qiskit Terra.

  • Deprecata l'opzione number_of_qubits del costruttore QuantumError a favore della determinazione automatica della dimensione.

  • Deprecata l'opzione standard_gates del costruttore QuantumError , in favore dell'esternalizzazione della funzionalità di modifica delle basi. In molti casi, è possibile trasformare qualsiasi errore in un errore definito solo con gate specifici utilizzando approximate_quantum_error().

  • Deprecata l'opzione standard_gates di tutte le funzioni di qiskit.providers.aer.noise.errors.standard_errors , in favore della restituzione degli errori sotto forma di una miscela di porte standard il più possibile predefinita.

  • Deprecate tutte le funzioni di errorutils , perché sono funzioni di aiuto da usare solo per implementare le funzioni di qiskit.providers.aer.noise.errors.standard_errors e avrebbero dovuto essere fornite come funzioni private.

  • Deprecata l'opzione standard_gates di NoiseModel.from_backend() in favore dell'esternalizzazione della funzionalità di modifica delle basi.

  • Deprecato NoiseModel.from_dict() per rendere il modello di rumore indipendente dal formato Qobj (JSON).

  • Deprecate tutte le variabili, le funzioni e le classi pubbliche di qiskit.providers.aer.noise.utils.noise_transformation , tranne approximate_quantum_error() e approximate_noise_model(), perché sono funzioni di aiuto da usare solo per implementare le funzioni di approximate_* e avrebbero dovuto essere fornite come funzioni private.

  • Deprecato remap_noise_model() poiché il codice C++ ora tronca e rimappa automaticamente i modelli di rumore se tronca i circuiti.

Altre note

  • Cambiamenti nell'implementazione della funzione approximate_quantum_error() possono modificare l'errore approssimativo risultante rispetto a Qiskit Aer 0.9.

Ignis 0.7.0

Nessuna modifica

IBM Q Fornitore 0.18.3

Correzioni di bug

  • Correzione fornita in #1100 per un problema con la codifica e la decodifica di JSON quando si utilizza ParameterExpressions in combinazione con Qiskit Terra 0.19.1 e superiori. In precedenza, le istanze di Parameter ricostruite dall'output JSON avevano identificatori univoci diversi, che le facevano sembrare non uguali all'input. Ora avranno le identità di supporto corrette.
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.