Skip to main content
IBM Quantum Platform

Clifford

class qiskit.quantum_info.Clifford(data, validate=True, copy=True)

GitHub

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 CN\mathcal{C}_N è definito come

CN={UU(2N)UPNU=PN}/U(1)\mathcal{C}_N = \{ U \in U(2^N) | U \mathcal{P}_N U^{\dagger} = \mathcal{P}_N \} / U(1)

dove PN\mathcal{P}_N è il gruppo di Pauli su NN qubit generato da operatori di Pauli a singolo qubit e UU è un operatore unitario nel gruppo unitario U(2N)U(2^N) che rappresenta operazioni su NN qubit. CN\mathcal{C}_N è il gruppo quoziente del sottogruppo di matrici scalari unitarie U(1)U(1).

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.

Nota

Un insieme di porte minimamente generato per i circuiti Clifford è l'insieme di porte HGate e SGate e la porta CXGate o CZGate a due qubit.

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

  1. 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

adjoint()

GitHub

Restituisce l'adjoint dell'Operatore.

compose

compose(other, qargs=None, front=False)

GitHub

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

Clifford

Aumenti

QiskitError – se l’altro non può essere convertito in un operatore o presenta dimensioni incompatibili con i sottosistemi specificati.

Nota

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

conjugate()

GitHub

Restituisce il coniugato di Clifford.

copy

copy()

GitHub

Eseguire una copia profonda dell'operatore corrente.

dot

dot(other, qargs=None)

GitHub

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

Operatore

Nota

Il prodotto di punti può essere ottenuto utilizzando l'operatore binario @ . Quindi a.dot(b) è equivalente a a @ b.

expand

expand(other)

GitHub

Restituisce il prodotto tensoriale di ordine inverso con un altro Clifford.

Parametri

other (Clifford) – un oggetto Clifford.

Risultati

il prodotto tensoriale bab \otimes a, dove aa

è il Clifford attuale e bb è l'altro Clifford.

Tipo di restituzione

Clifford

from_circuit

static from_circuit(circuit)

GitHub

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

Clifford

Aumenti

QiskitError – se l'istruzione immessa non è di tipo Clifford o contiene un'istruzione relativa a un registro classico.

from_dict

classmethod from_dict(obj)

GitHub

Caricare un Clifford da un dizionario

from_label

static from_label(label)

GitHub

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

Clifford

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)

GitHub

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

Clifford

from_matrix

classmethod from_matrix(matrix)

GitHub

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

Clifford

Aumenti

QiskitError – se l'input non è una matrice di Clifford.

from_operator

classmethod from_operator(operator)

GitHub

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

Clifford

Aumenti

QiskitError – se l'operatore di input non è un operatore di Clifford.

from_permutation

classmethod from_permutation(permutation_gate)

GitHub

Creare un Clifford da un PermutationGate.

Parametri

permutation_gate (PermutationGate) – Una permutazione da convertire.

Risultati

l'oggetto Clifford per questa permutazione.

Tipo di restituzione

Clifford

input_dims

input_dims(qargs=None)

GitHub

Restituisce una tupla di dimensioni di ingresso per i sottosistemi specificati.

is_unitary

is_unitary()

GitHub

Restituisce True se la tabella Clifford è valida.

output_dims

output_dims(qargs=None)

GitHub

Restituisce una tupla di dimensioni di uscita per i sottosistemi specificati.

power

power(n)

GitHub

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

Clifford

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)

GitHub

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)

GitHub

Restituisce il prodotto tensoriale con un altro Clifford.

Parametri

other (Clifford) – un oggetto Clifford.

Risultati

il prodotto tensoriale aba \otimes b, dove aa

è il Clifford attuale e bb è l'altro Clifford.

Tipo di restituzione

Clifford

Nota

Il prodotto tensoriale può essere ottenuto utilizzando l'operatore binario ^ . Quindi a.tensor(b) è equivalente a a ^ b.

to_circuit

to_circuit()

GitHub

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

QuantumCircuit

Riferimenti

  1. S. Bravyi, D. Maslov, Circuiti privi di Hadamard espongono la struttura del gruppo di Clifford, arXiv:2003.09412 [quant-ph]
  2. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196

to_dict

to_dict()

GitHub

Restituisce la rappresentazione a dizionario dell'oggetto Clifford.

to_instruction

to_instruction()

GitHub

Restituisce un'istruzione Gate che implementa il Clifford.

to_labels

to_labels(array=False, mode='B')

GitHub

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[0,0][0, 0][1001]\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}II
"-I"1[0,0][0, 0][1001]\begin{bmatrix} -1 & 0 \\ 0 & -1 \end{bmatrix}I-I
"X"0[1,0][1, 0][0110]\begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}XX
"-X"1[1,0][1, 0][0110]\begin{bmatrix} 0 & -1 \\ -1 & 0 \end{bmatrix}X-X
"Y"0[1,1][1, 1][0110]\begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}iYiY
"-Y"1[1,1][1, 1][0110]\begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix}iY-iY
"Z"0[0,1][0, 1][1001]\begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}ZZ
"-Z"1[0,1][0, 1][1001]\begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix}Z-Z

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

elenco o array

Aumenti

QiskitError – se sia lo stabilizzatore che il destabilizzatore sono entrambi falsi.

to_matrix

to_matrix()

GitHub

Converte l'operatore in matrice Numpy.

to_operator

to_operator()

GitHub

Convertire in un oggetto Operatore.

Tipo di restituzione

Operatore

transpose

transpose()

GitHub

Restituisce la trasposizione del Clifford.

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