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
- A partire da Python 3.10, Qiskit Terra avrà un supporto ridotto per le piattaforme a 32 bit. Si tratta di Linux i686 e di Windows a 32 bit. Queste piattaforme con Python 3.10 sono ora al livello 3 invece che al livello 2 (secondo i livelli definiti in: https://qiskit.org/documentation/getting_started.html #platform-support) Questo perché le dipendenze upstream Numpy e Scipy hanno abbandonato il supporto per loro. Qiskit pubblicherà comunque i binari precompilati per queste piattaforme, ma non siamo in grado di testare i pacchetti prima della pubblicazione e sarà necessario un compilatore C/C++ in modo che
pippossa creare le proprie dipendenze dai sorgenti. Se si utilizza una di queste piattaforme, si consiglia di utilizzare Python 3.7, 3.8, o 3.9.
Correzioni di bug
-
Corretto un bug per cui l'applicazione
CVaRMeasurementtentava di convertire una matricePauliSumOpin 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 tramiteqiskit.utils.algorithm_globals.massive = True. Il controllo è ora efficiente anche per un numero elevato di qubit. -
DAGCircuit.draw()e la funzione associatadag_drawer()mostreranno ora un messaggio di errore più utile quando il nome del file fornito non è valido. -
QuantumCircuit.add_register()non causerà più riferimenti duplicatiAncillaQubitriferimenti in un circuito quando viene dato unAncillaRegisteri cui bit sono già presenti. -
Conversione fissa di
QuantumCircuits con condizioni classiche su un singolo, senza registroClbitaInstructions quando si utilizza la funzionecircuit_to_instruction()o il metodoQuantumCircuit.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
FakeOpenPulse2Qha 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 diIIZ + IZI + IZZfrom 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
latexemplquando 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 suNone, 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 oggettoTargetdirettamente con il kwargtarget. -
Corretto un problema con la funzione
transpile()che poteva fallire quando l'argomentobackendera un parametroBackendV2o unTargettramite il kwargtargetche 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
AttributeErrorin 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.provideralle implementazioni della classeBackendV2della classe astratta. In precedenza,BackendV2poteva essere inizializzato con un provider, ma non era accessibile agli utenti. -
Corretto il supporto per la classe
QuantumInstancequando viene eseguita con un backendBackendV2backend. In precedenza, il tentativo di utilizzare un elementoQuantumInstancecon unBackendV2avrebbe dato luogo a un errore. -
È stato corretto un bug in
VQEin 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'attributooptimal_pointdell'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()efrom_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
QuantumCircuitche contenevano istruzioni di flusso di controllo. In precedenza, se si tentava di serializzare un circuito contenenteIfElseOp,WhileLoopOp, oForLoopOpla serializzazione falliva. Corretto #7583. -
Corretta la serializzazione QPY di
QuantumCircuitcontenente sottoinsiemi di bit di un fileQuantumRegisteroClassicalRegister. In precedenza, se si cercava di serializzare un circuito come questo, questi bit venivano erroneamente trattati come indipendentiQubitoClbitsenza 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.
-
QFTora avvisa se viene istanziato o costruito con impostazioni che ne causano la perdita di precisione, invece di sollevare unOverflowError. 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
- Qiskit Aer non supporta più pienamente le piattaforme a 32 bit su Python >= 3.10. Si tratta di Linux i686 e di Windows a 32 bit. Queste piattaforme con Python 3.10 sono ora al livello 3 invece che al livello 2 (secondo i livelli definiti in: https://qiskit.org/documentation/getting_started.html #platform-support) Questo perché le dipendenze upstream Numpy e Scipy hanno abbandonato il supporto per loro. Qiskit pubblicherà comunque i binari precompilati per queste piattaforme, ma non siamo in grado di testare i pacchetti prima della pubblicazione e sarà necessario un compilatore C/C++ in modo che
pippossa creare le proprie dipendenze dai sorgenti. Se si utilizza una di queste piattaforme, si consiglia di utilizzare Python 3.7, 3.8, o 3.9.
Correzioni di bug
-
Corregge un bug in
RelaxationNoisePassa 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
LocalNoisePassper le funzioni di rumore che restituiscono un elementoQuantumCircuitper 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
forin 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 simulazionemethoddi"statevector"o"density_matrix"conAerSimulator. Può essere disattivato impostandobatched_shots_gpu=Falsenelle 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_sizea un esecutore personalizzato per l'esecuzione in parallelo di più riprese di un circuito rumoroso.Ad esempio, la configurazione di
max_shot_sizecon 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
Resultche viene restituito dajob.result(). -
Aggiunta l'opzione del simulatore
mps_swap_directionche 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"diAerSimulator. Attualmente questo algoritmo viene utilizzato solo quando tutti i qubit sono misurati e quando l'opzione del simulatoremps_sample_measure_algorithmè impostata su"mps_probabilities". -
Migliorate le prestazioni dell'istruzione di misura per il metodo di simulazione
"matrix_product_state"diAerSimulator. -
Aggiunta un'istruzione
SaveCliffordper salvare lo stato del metodo di simulazione dello stabilizzatore come unCliffordoggetto.Si noti che questa istruzione è essenzialmente equivalente all'istruzione
SaveStabilizer, che però restituisce lo stato salvato come oggettoStabilizerStateinvece che come oggettoCliffordoggetto. -
Aggiunti due passaggi di transpiler per l'inserimento di errori quantistici dipendenti dalle istruzioni nei circuiti:
qiskit.providers.aer.noise.LocalNoisePassqiskit.providers.aer.noise.RelaxationNoisePass
Il passaggio
LocalNoisePasspuò essere utilizzato per implementare modelli di rumore parametrici personalizzati, definendo una funzione di generazione del rumore della formadef fn( inst: Instruction, qubits: Optional[List[int]] = None, ) -> InstructionLikeche restituisce un'istruzione di disturbo (ad esempio, un'istruzione
QuantumErroro 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 diLocalNoisePassche utilizza una funzione di rumore predefinita che restituisce un prodotto tensoriale dithermal_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()eAerSimulator.from_backend()è stato aggiornato per consentire l'aggiunta di errori di rilassamento dipendenti dalla durata sulle porte di ritardo del circuito utilizzando il modelloRelaxationNoisePass.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
QuantumErroraccetta ora diversi nuovi tipi di input come argomento dinoise_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 iQuantumErrors del modello di rumore. -
Aggiunte due funzioni di utilità
qiskit.providers.aer.utils.transpile_quantum_error()eqiskit.providers.aer.utils.transpile_noise_model()per il transpiling dei circuiti contenuti inQuantumErrore di tutti gli errori inNoiseModel. -
È stata aggiunta la possibilità di aggiungere oggetti
QuantumErrordirettamente a un oggettoQuantumCircuitsenza convertirlo in un'istruzioneKrausistruzione.I circuiti contenenti errori quantistici possono ora essere eseguiti sui simulatori
AerSimulatoreQasmSimulatorin alternativa o in aggiunta alla costruzione di unNoiseModelper 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_infocanale quantistico eDensityMatrixclassi.
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 oggettoStatevectorsave_density_matrix()ora viene restituito come un oggettoDensityMatrixsave_stabilizer()ora viene restituito comeStabilizerStatesave_unitary()ora viene restituito comeOperatorsave_superop()ora viene restituito comeSuperOpsave_probabilities_dict()ora viene restituito come un oggettoProbDistribution
-
Modificato il valore predefinito di
standard_gatesinNoneper tutte le funzioni inqiskit.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 unNoiseErrorinvece di unRuntimeError.
Note di deprecazione
-
L'uso dei metodi e degli attributi di NumPy
ndarraysul tipo di ritorno disave_statevector(),save_density_matrix(),save_unitary()esave_superop()è stato deprecato e non funzionerà più in una prossima versione. Queste istruzioni ora restituisconoqiskit.quantum_infoper 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
BackendPropertiesper l'argomentobackenddiNoiseModel.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 TerraBackendV1invece di un oggetto Qiskit Terra. -
Deprecata l'opzione
number_of_qubitsdel costruttoreQuantumErrora favore della determinazione automatica della dimensione. -
Deprecata l'opzione
standard_gatesdel costruttoreQuantumError, 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 utilizzandoapproximate_quantum_error(). -
Deprecata l'opzione
standard_gatesdi tutte le funzioni diqiskit.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 diqiskit.providers.aer.noise.errors.standard_errorse avrebbero dovuto essere fornite come funzioni private. -
Deprecata l'opzione
standard_gatesdiNoiseModel.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, tranneapproximate_quantum_error()eapproximate_noise_model(), perché sono funzioni di aiuto da usare solo per implementare le funzioni diapproximate_*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 diParameterricostruite dall'output JSON avevano identificatori univoci diversi, che le facevano sembrare non uguali all'input. Ora avranno le identità di supporto corrette.