Skip to main content
IBM Quantum Platform

qiskit_noise_learning.models.PauliLindbladModel

class qiskit_noise_learning.models.PauliLindbladModel(gate_set: GateSet, generators: dict[str, QubitSparsePauliList], noise_site: dict[str, str] | None = None)

GitHub

Basi: LinearMap[GeneratorIndex, FidelityIndex]

Una corrispondenza lineare tra i tassi dei generatori di Pauli-Lindblad e le logaritmiche delle fedeltà.

Questa classe di modelli presuppone che ogni gate dell'insieme dei gate sia o un'operazione unitaria, o una preparazione pura (tutti i qubit sono preparati e la parte unitaria è banale), oppure una misurazione pura (tutti i qubit sono misurati e la parte unitaria è banale). Si ipotizza inoltre che siano presenti almeno un preparato e almeno un gate di misurazione.

Il modello di rumore per ciascun gate, in questo caso, è un canale di Pauli, parametrizzato in termini di velocità di una decomposizione di Pauli-Lindblad exp⁡(∑P∈PnrPL(P))\exp(\sum_{P \in \mathcal{P}_n} r_P L(P)), dove rPr_P sono le velocità e L(P)=P⋅P−⋅L(P) = P \cdot P - \cdot. Nel caso dei gate unitari, il rumore può essere modellato come se si verificasse prima o dopo l’operatore unitario ideale.

Parametri

  • gate_set – L'insieme di gate le cui fedeltà vengono modellate. Da convertire in un ModelGateSet.
  • generatori – Un dizionario che associa il nome di un gate all'insieme dei generatori di Pauli-Lindblad relativi al modello di rumore di quel gate. I generatori per ciascun gate devono essere univoci. I generatori per gli strati di preparazione e di misurazione devono essere costituiti esclusivamente da I e X.
  • noise_site – Un dizionario che specifica, per ogni nome di gate, se il modello di rumore si verifica prima o dopo il gate, indicato con le stringhe e "before" "after". Eventuali valori non specificati per l'insieme di porte saranno sostituiti con i valori predefiniti: "after" per le porte unitarie e le porte di preparazione pura, e "before" per la misurazione pura. Se viene specificato un valore per la misurazione pura o la preparazione diverso da quello predefinito, verrà generato un errore.

Aumenti

ValueError : se l'insieme di gate non ha la forma richiesta o se noise_site contiene valori non validi.

__init__

__init__(gate_set: GateSet, generators: dict[str, QubitSparsePauliList], noise_site: dict[str, str] | None = None)


Metodi

Rubrica 1
Rubrica 2
__init__(gate_set, generatori[, noise_site])
compose(esterno)Post-composizione: self mappa I->O, outer mappa O->C, result mappa I->C.
k_local(gate_set[, k, gate_k, paulis, ...])Costruire un modello k-locale.
k_partition_local(gate_set[, k, gate_k, ...])Costruire un modello k-locale in base alle partizioni dei qubit.
left_multiply(matrice)Moltiplicare a sinistra per una matrice esplicita.
pre_compose(interno)Precomposizione: le immagini interne sono A→I, le immagini su se stesso sono I→O, le immagini risultanti sono A→O.
projected_output(output_indices, vettore)Calcolare la proiezione della mappa applicata a un vettore.
rows(output_indices)Costruire la sottomatrice le cui righe corrispondono agli indici di fedeltà indicati.
to_pauli_lindblad_maps(model_data[, ...])Restituisce un dizionario contenente PauliLindbladMap per ogni gate del modello.

Attributi

Rubrica 1
Rubrica 2
gate_setL'insieme di porte le cui fedeltà vengono modellate.
generatorsI generatori per il modello di rumore.
input_spaceLo spazio degli input.
meas_namesI nomi delle misure presenti in questo modello.
noise_siteSe ciascuna mappa di rumore si verifica prima o dopo ciascun gate.
output_spaceLo spazio di output.
prep_namesI nomi dei preparati presenti in questo modello.

gate_set

Tipo: ModelGateSet

L'insieme di porte le cui fedeltà vengono modellate.

generators

Tipo: dict[str, QubitSparsePauliList]

I generatori per il modello di rumore.

meas_names

Tipo: set[str]

I nomi delle misure presenti in questo modello.

noise_site

Tipo: dict[str, str]

Se ciascuna mappa di rumore si verifica prima o dopo ciascun gate.

prep_names

Tipo: set[str]

I nomi dei preparati presenti in questo modello.

rows

rows(output_indices: Iterable[FidelityIndex]) → IndexedMatrix[FidelityIndex, GeneratorIndex]

Costruire la sottomatrice le cui righe corrispondono agli indici di fedeltà indicati.

Parametri

output_indices – Gli indici di fedeltà che identificano le righe desiderate.

Risultati

Un IndexedMatrix indice basato sugli indici di fedeltà richiesti (diversi da zero) e sugli indici dei generatori presenti in quelle righe.

Aumenti

ValueError : se un indice di fedeltà assegna un'etichetta a un gate che non è presente nel modello.

k_partition_local

static k_partition_local(gate_set: GateSet, k: int = 2, gate_k: dict[str, int] | None = None, qubit_partitions: dict[str, list[set[int]]] | None = None, local_paulis: dict[str, list[QubitSparsePauliList]] | None = None, noise_site: dict[str, Literal['before', 'after']] | None = None) → Self

Costruire un modello k-locale in base alle partizioni dei qubit.

Si noti che la partizione predefinita per questo metodo (descritta di seguito) comporta un comportamento predefinito diverso rispetto a PauliLindbladModel.k_local().

Questo metodo definisce la k-località in termini di partizioni di un insieme di qubit nn, generalizzando il concetto tradizionale oltre i singoli qubit. Una partizione è un insieme di insiemi disgiunti di indici di qubit che copre {0,...,n−1}\{0, ..., n - 1\}. Due indici di qubit i,ji, j sono vicini se uno dei due bordi (i,j)(i, j) o (j,i)(j, i) è presente nella mappa di accoppiamento, che viene ricavata da gate_set o, in caso contrario, assume per impostazione predefinita la mappa di accoppiamento completa. Data una partizione PP, due insiemi distinti di indici di qubit B0,B1∈PB_0, B_1 \in P sono vicini se esistono indici i∈B0i \in B_0 e j∈B1j \in B_1 che sono vicini. Analogamente, due elementi distinti B0,B1∈PB_0, B_1 \in P sono vicini più prossimi se esiste un elemento distinto B2∈PB_2 \in P che è vicino sia a B0B_0 che a B1B_1, e così via.

Per un dato gate, il modello locale kk viene costruito in modo ricorsivo a partire dai termini locali 11 definiti nell’argomento local_paulis, con termini locali 11 per sottoinsiemi di dimensione m data da local_paulis[m]. I termini locali 22 vengono costruiti tramite il prodotto tensoriale dei termini locali 11 tra coppie di sottoinsiemi adiacenti. In generale, i termini locali di tipo kk sono costruiti a partire dal prodotto tensoriale dei termini locali di tipo (k−1)(k - 1) e dei termini locali di tipo 11 su insiemi di insiemi connessi di tipo kk.

Se non qubit_partition viene specificato alcun valore, si presume la partizione dei singleton. Se non local_paulis viene specificato alcun valore, si considera l'insieme di tutti i possibili stati di Pauli sul numero dato di qubit.

Parametri

  • gate_set – L'insieme di gate oggetto della modellazione. Deve contenere esclusivamente livelli Clifford, di preparazione pura e di misurazione pura. Da convertire in un ModelGateSet. La mappa di accoppiamento viene ricavata da gate_set.model_gate_set.coupling_map, oppure, se è None, viene utilizzata per impostazione predefinita la mappa di accoppiamento completa.
  • k – Il grado di località predefinito del modello. Si applica a tutti i cancelli non specificati in gate_k. Il valore predefinito è 2. Un valore pari a non produce 0 generatori, ovvero la porta viene modellata come priva di rumore.
  • gate_k – Un dizionario che associa i nomi dei gate ai valori di località specifici per ciascun gate, che sostituiscono quelli predefiniti per k i gate specificati.
  • qubit_partitions – Un dizionario che indica una partizione di qubit per ciascun gate. Eventuali partizioni non specificate verranno popolate con un valore predefinito in cui i qubit vengono raggruppati se sono collegati da operazioni di gate unitarie.
  • local_paulis – Un dizionario che indica i Pauli 1-locali da utilizzare per ciascuna partizione di qubit per ogni gate. I.e. len(local_paulis[gate_name]) deve essere pari alla dimensione massima della partizione in qubit_partitions[gate_name], e local_paulis[gate_name][k].num_qubits deve essere pari a k. Per i gate di Clifford, il valore predefinito è local_paulis[gate_name][k] costituito da tutti i Pauli non identici possibili su k qubit, mentre per la misurazione e la preparazione il valore predefinito è costituito da tutti i Pauli composti da {I,X}\{I, X\} i su qubit k .
  • noise_site – Dizionario che indica se modellare il rumore del gate come "before" o "after" il gate stesso.

Risultati

Una nuova PauliLindbladModel istanza.

Aumenti

  • ValueError : se un valore k qualsiasi supera len(gate_set.qubit_subset).
  • ValueError : se un valore k qualsiasi è negativo.
  • ValueError : se gate_k contiene nomi non presenti nell'insieme dei gate.
  • ValueError : il nome non gate_set è presente in nessun altro dizionario.
  • ValueError : una delle partizioni non è valida.
  • ValueError : local_paulis non soddisfa la forma prevista.

k_local

static k_local(gate_set: GateSet, k: int = 2, gate_k: dict[str, int] | None = None, paulis: dict[str, QubitSparsePauliList] | None = None, noise_site: dict[str, Literal['before', 'after']] | None = None) → Self

Costruire un modello k-locale.

Ciò equivale a chiamare la funzione specificando PauliLindbladModel.k_partition_local() , per ogni gate, una partizione composta da singleton.

Parametri

  • gate_set – L'insieme di gate oggetto della modellazione. Deve contenere esclusivamente livelli Clifford, di preparazione pura e di misurazione pura. Da convertire in un ModelGateSet.
  • k – Il grado di località predefinito del modello. Si applica a tutti i cancelli non specificati in gate_k. Il valore predefinito è 2. Un valore pari a non produce 0 generatori, ovvero la porta viene modellata come priva di rumore.
  • gate_k – Un dizionario che associa i nomi dei gate ai valori di località specifici per ciascun gate, che sostituiscono quelli predefiniti per k i gate specificati.
  • paulis – Un dizionario che indica i Paulis a singolo qubit da utilizzare nel modello k-locale per ciascun gate. Per i gate di Clifford, il valore predefinito è "tutti i Pauli a singolo qubit", mentre per la misurazione e la preparazione il valore predefinito è " {I,X}\{I, X\} ".
  • noise_site – Dizionario che indica se modellare il rumore del gate come "before" o "after" il gate stesso.

Risultati

Una nuova istanza PauliFidelityModel .

to_pauli_lindblad_maps

to_pauli_lindblad_maps(model_data: ModelData, include_spam: bool = False, symmetrize_spam: bool = False, restrict_to_qubit_idxs: bool = False) → dict[str, PauliLindbladMap]

Restituisce un dizionario contenente PauliLindbladMap per ogni gate del modello.

Parametri

  • model_data – I parametri del modello stimato.
  • include_spam – Indica se includere i filtri antispam nell'output.
  • symmetrize_spam – Indica se simmetrizzare le mappe di rumore di preparazione e di misura in mappe di depolarizzazione generalizzate completamente specificate. Non ha alcun effetto a meno che non sia include_spam True. Per i livelli SPAM, il rumore può essere specificato solo con i Pauli I e X. In tal caso False, questo metodo restituisce le mappe SPAM con i generatori così come sono specificati: solo con i Pauli I e X. In tal caso True, le mappe di rumore SPAM vengono restituite, in alternativa, come mappe di depolarizzazione generalizzate; ciò significa che tutti i generatori che presentano lo stesso modello hanno necessariamente la stessa frequenza. La mappa depolarizzante generalizzata viene scelta in modo tale che: (1) abbia le stesse fedeltà sugli operatori solo-Z della mappa originale solo-X, e (2) non aggiunga alcun nuovo modello massimo. Si noti che il numero dei generatori potrebbe aumentare: la mappatura richiede che l’insieme dei sottoinsiemi di qubit specificati dai generatori sia chiuso rispetto alla formazione di sottoinsiemi, cosa che in genere non si verifica per le mappe k-locali. Infine, si noti che ciò potrebbe comportare l'introduzione di tassi negativi che prima non esistevano; in tal caso viene visualizzato un avviso.
  • restrict_to_qubit_idxs – Limita le mappe di Pauli-Lindblad restituite esclusivamente ai qubit su cui è definito ciascun gate. L'indice del qubit idx nella mappa restituita corrisponde al qubit fisico sorted(gate.qubit_idxs)[idx]. Se False, ogni mappa restituita agisce su tutti i qubit gate_set.num_qubits , indicizzati in base all'indice fisico dei qubit.

Risultati

Un dizionario che mette in relazione i nomi dei varchi con le corrispondenti mappe di rumore.

Aumenti

ValueError : se non model_data contiene i parametri corretti.

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