Clifford
class qiskit.quantum_info.Clifford(data, validate=True, copy=True)
Basi: BaseOperator, AdjointMixin, Operation
Un operatore unitario a N-qubit del gruppo di Clifford.
Un operatore Clifford a N-qubit porta Paulis a Paulis tramite coniugazione (fino a una fase globale). Più precisamente, il gruppo di Clifford è definito come
dove è il gruppo di Pauli su qubit generato da operatori di Pauli a singolo qubit e è un operatore unitario nel gruppo unitario che rappresenta operazioni su qubit. è il gruppo quoziente del sottogruppo di matrici scalari unitarie .
Rappresentazione
Un operatore Clifford a N-qubit è memorizzato come un tableau booleano di lunghezza 2N × ( 2N+1 ) utilizzando la convenzione del riferimento [1].
- Le righe da 0 a N-1 sono i generatori del gruppo destabilizzatore
- Le righe da N a 2N-1 sono i generatori del gruppo stabilizzatore.
È possibile accedere al tableau booleano interno del Clifford utilizzando l'attributo tableau . Le righe di destabilizzazione o di stabilizzazione possono essere consultate come una tabella di stabilizzazione di lunghezza N, utilizzando i metodi destab e stab attributi.
Una rappresentazione più facilmente leggibile dell'operatore di Clifford può essere ottenuta richiamando il metodo to_dict() metodo. Questa rappresentazione viene utilizzata anche se viene stampato un oggetto Clifford, come nel seguente esempio
from qiskit import QuantumCircuit
from qiskit.quantum_info import Clifford
# Bell state generation circuit
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
cliff = Clifford(qc)
# Print the Clifford
print(cliff)
# Print the Clifford destabilizer rows
print(cliff.to_labels(mode="D"))
# Print the Clifford stabilizer rows
print(cliff.to_labels(mode="S"))Clifford: Stabilizer = ['+XX', '+ZZ'], Destabilizer = ['+IZ', '+XI']
['+IZ', '+XI']
['+XX', '+ZZ']Conversione del circuito
QuantumCircuitGli operatori di Clifford possono essere inizializzati a partire da circuiti contenenti esclusivamente le seguenti porte di Clifford: IGate, XGate, YGate, ZGate, HGate SGate, SdgGate, SXGate, SXdgGate, CXGate, CZGate, CYGate, DCXGate, SwapGate, iSwapGate, ECRGate, LinearFunction,, PermutationGate. Possono essere riconvertiti in un oggetto, o Gate utilizzando rispettivamente i to_circuit() metodi o to_instruction() . Si noti che questa scomposizione non è necessariamente ottimale in termini di numero di porte logiche.
Gli operatori Clifford possono anche essere convertiti in Operator utilizzando il metodo to_operator() metodo. Ciò avviene tramite la scomposizione in un circuito e la successiva simulazione del circuito come operatore unitario.
Riferimenti
- S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
Inizializza un oggetto operatore.
Attributi
destab
La matrice di destabilizzazione per la rappresentazione simplettica.
destab_phase
Restituisce la fase del destabilizzatore con una rappresentazione booleana.
destab_x
La matrice di destabilizzatori x per la rappresentazione simplettica.
destab_z
La matrice di destabilizzatori z per la rappresentazione simplettica.
dim
Restituisce una tupla (forma_input, forma_output).
name
Identificatore univoco del tipo di operazione.
num_clbits
Numero di bit classici.
num_qubits
Restituisce il numero di qubit se si tratta di un operatore a N qubit o altrimenti None.
phase
Restituisce la fase con una rappresentazione booleana.
qargs
Restituisce i qarg per l'operatore.
stab
La matrice di stabilizzatori per la rappresentazione simplettica.
stab_phase
Restituisce la fase dello stabilizzatore con una rappresentazione booleana.
stab_x
La matrice di stabilizzatori x per la rappresentazione simplettica.
stab_z
La matrice di stabilizzatori per la rappresentazione simplettica.
symplectic_matrix
Restituisce una matrice simplicica booleana.
x
La matrice x per la rappresentazione simplettica.
z
La matrice z per la rappresentazione simplettica.
Metodi
adjoint
compose
compose(other, qargs=None, front=False)
Restituisce l'operatore di composizione con un altro Clifford.
Parametri
- other (Clifford) – un oggetto Clifford.
- qargs (list or None) – un elenco delle posizioni dei sottosistemi su cui applicare altre operazioni. Se "None" si applica a tutti i sottosistemi (impostazione predefinita: None).
- front (bool) – Se True, componi utilizzando la moltiplicazione dell'operatore a destra, invece della moltiplicazione a sinistra, [impostazione predefinita: False].
Risultati
Il composto Clifford.
Tipo di restituzione
Aumenti
QiskitError – se l’altro non può essere convertito in un operatore o presenta dimensioni incompatibili con i sottosistemi specificati.
La composizione (&) per default è definita come moltiplicazione matriciale sinistra per gli operatori matriciali, mentre @ (equivalente a dot()) è definita come moltiplicazione matriciale destra. Cioè A & B == A.compose(B) è equivalente a B @ A == B.dot(A) quando A e B sono dello stesso tipo.
Impostando il kwarg front=True si passa alla moltiplicazione matriciale destra ed è equivalente al metodo dot()A.dot(B) == A.compose(B, front=True) .
conjugate
copy
dot
dot(other, qargs=None)
Restituisce l'operatore moltiplicato a destra self * altro.
Parametri
- other (Operator) – un oggetto operatore.
- qargs (list or None) – un elenco delle posizioni dei sottosistemi su cui applicare altre operazioni. Se "None" si applica a tutti i sottosistemi (impostazione predefinita: None).
Risultati
La matrice destra moltiplicata Operatore.
Tipo di restituzione
Il prodotto di punti può essere ottenuto utilizzando l'operatore binario @ . Quindi a.dot(b) è equivalente a a @ b.
expand
expand(other)
Restituisce il prodotto tensoriale di ordine inverso con un altro Clifford.
Parametri
other (Clifford) – un oggetto Clifford.
Risultati
il prodotto tensoriale , dove
è il Clifford attuale e è l'altro Clifford.
Tipo di restituzione
from_circuit
static from_circuit(circuit)
Inizializza da un sito QuantumCircuit o da un'istruzione.
Parametri
circuit (QuantumCircuit orInstruction) – istruzione di inizializzazione.
Risultati
l'oggetto Clifford per l'istruzione.
Tipo di restituzione
Aumenti
QiskitError – se l'istruzione immessa non è di tipo Clifford o contiene un'istruzione relativa a un registro classico.
from_dict
from_label
static from_label(label)
Restituisce un prodotto tensoriale di porte Clifford a singolo qubit.
Parametri
label (string) – stringa di operatori a singolo qubit.
Risultati
L'operatore di Clifford a N-qubit.
Tipo di restituzione
Aumenti
QiskitError – se l'etichetta contiene caratteri non validi.
Ulteriori informazioni:
Le etichette corrispondono ai clifford a singolo qubit sono
-
- Etichetta
- Stabilizzatore
- Destabilizzatore
-
"I"- +Z
- +X
-
"X"- -Z
- +X
-
"Y"- -Z
- -X
-
"Z"- +Z
- -X
-
"H"- +X
- +Z
-
"S"- +Z
- +Y
from_linear_function
classmethod from_linear_function(linear_function)
Creare un Clifford da una funzione lineare.
Se la funzione lineare è rappresentata da una matrice nxn binaria invertibile A, allora la corrispondente matrice Clifford ha una matrice simplettica [[A^t, 0], [0, A^ {-1}] ].
Parametri
linear_function (LinearFunction) – Una funzione lineare da convertire.
Risultati
l'oggetto Clifford di questa funzione lineare.
Tipo di restituzione
from_matrix
classmethod from_matrix(matrix)
Creare una Clifford da una matrice unitaria.
Si noti che questa funzione richiede un tempo esponenzialmente lungo w.r.t. il numero di qubit.
Parametri
matrix (np.array) – Una matrice unitaria che rappresenta un Clifford da convertire.
Risultati
l'oggetto di Clifford per la matrice unitaria.
Tipo di restituzione
Aumenti
QiskitError – se l'input non è una matrice di Clifford.
from_operator
classmethod from_operator(operator)
Crea un Clifford a partire da un operatore.
Si noti che questa funzione richiede un tempo esponenzialmente lungo w.r.t. il numero di qubit.
Parametri
operator (Operator) – Un operatore che rappresenta un Clifford da convertire.
Risultati
l'oggetto Clifford per l'operatore.
Tipo di restituzione
Aumenti
QiskitError – se l'operatore di input non è un operatore di Clifford.
from_permutation
classmethod from_permutation(permutation_gate)
Creare un Clifford da un PermutationGate.
Parametri
permutation_gate (PermutationGate) – Una permutazione da convertire.
Risultati
l'oggetto Clifford per questa permutazione.
Tipo di restituzione
input_dims
input_dims(qargs=None)
Restituisce una tupla di dimensioni di ingresso per i sottosistemi specificati.
is_unitary
output_dims
output_dims(qargs=None)
Restituisce una tupla di dimensioni di uscita per i sottosistemi specificati.
power
power(n)
Restituisce il risultato dell'applicazione di un operatore su se stesso per n volte.
Parametri
n (int) – il numero di volte che si compone con il sé ( n>0 ).
Risultati
l'operatore composto n volte.
Tipo di restituzione
Aumenti
QiskitError – se le dimensioni di ingresso e di uscita dell'operatore non sono uguali, oppure se la potenza non è un numero intero positivo.
reshape
reshape(input_dims=None, output_dims=None, num_qubits=None)
Restituisce una copia superficiale con le dimensioni dei sottosistemi di ingresso e di uscita rimodellate.
Parametri
- input_dims (None or tuple) – nuove dimensioni di input del sottosistema. Se Nessuno, le attenuazioni dell'input originale verranno mantenute. [Predefinito: Nessuno].
- output_dims (None or tuple) – nuove dimensioni di uscita del sottosistema. Se Nessuno, le gradazioni di output originali verranno mantenute. [Predefinito: Nessuno].
- num_qubits (None or int) – rimodella in un operatore N-qubit [Predefinito: Nessuno].
Risultati
restituisce self con le dimensioni di ingresso e di uscita rimodellate.
Tipo di restituzione
BaseOperator
Aumenti
QiskitError – se la somma delle dimensioni di ingresso o di uscita di tutti i sottosistemi non è costante.
tensor
tensor(other)
Restituisce il prodotto tensoriale con un altro Clifford.
Parametri
other (Clifford) – un oggetto Clifford.
Risultati
il prodotto tensoriale , dove
è il Clifford attuale e è l'altro Clifford.
Tipo di restituzione
Il prodotto tensoriale può essere ottenuto utilizzando l'operatore binario ^ . Quindi a.tensor(b) è equivalente a a ^ b.
to_circuit
to_circuit()
Restituisce un QuantumCircuit che implementa la Clifford.
Per N <= 3 qubits this is based on optimal CX cost decomposition from reference [1]. For N > 3 qubit questo viene fatto usando la routine di compilazione generale non ottimale della referenza [2].
Risultati
un'implementazione circuitale della Clifford.
Tipo di restituzione
Riferimenti
- S. Bravyi, D. Maslov, Circuiti privi di Hadamard espongono la struttura del gruppo di Clifford, arXiv:2003.09412 [quant-ph]
- S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
to_dict
to_instruction
to_labels
to_labels(array=False, mode='B')
Converte un Clifford in un elenco Pauli di etichette di stringhe (de)stabilizzatrici.
Per la conversione di Clifford di grandi dimensioni, l'uso di array=True kwarg sarà più efficiente, poiché alloca in anticipo la memoria per l'intero array Numpy di etichette.
Etichetta | Fase | Simplettico | Matrice | Pauli |
|---|---|---|---|---|
"+I" | 0 | |||
"-I" | 1 | |||
"X" | 0 | |||
"-X" | 1 | |||
"Y" | 0 | |||
"-Y" | 1 | |||
"Z" | 0 | |||
"-Z" | 1 |
Parametri
- array (bool) – restituisce un array Numpy se è vero, altrimenti restituisce un elenco (predefinito: False).
- mode (Literal["S", "D", "B"]) – restituisce sia lo stabilizzatore che il destabilizzatore se "B", restituisce solo lo stabilizzatore se "S" e restituisce solo il destabilizzatore se "D".
Risultati
Le righe di StabilizerTable in forma di etichetta.
Tipo di restituzione
Aumenti
QiskitError – se sia lo stabilizzatore che il destabilizzatore sono entrambi falsi.