Skip to main content
IBM Quantum Platform

Clifford

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

GitHub

Bases: BaseOperator, AdjointMixin, Operation

Un operador unitario N-qubit del grupo Clifford.

Un operador Clifford de N-qubit lleva Paulis a Paulis vía conjugación (hasta una fase global). Más concretamente, el grupo de Clifford CN\mathcal{C}_N se define como

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)

donde PN\mathcal{P}_N es el grupo de Pauli sobre NN qubits que está generado por operadores de Pauli de un solo qubit, y UU es un operador unitario en el grupo unitario U(2N)U(2^N) que representa operaciones sobre NN qubits. CN\mathcal{C}_N es el grupo cociente por el subgrupo de matrices escalares unitarias U(1)U(1).

Representación

Un operador Clifford N-qubit se almacena como un tableau booleano de longitud 2N × ( 2N+1 ) utilizando la convención de la referencia [1].

  • Las filas 0 a N-1 son los generadores del grupo desestabilizador
  • Las filas N a 2N-1 son los generadores del grupo estabilizador.

Se puede acceder a la tabla booleana interna de Clifford mediante el atributo tableau . Se puede acceder a cada una de las filas de desestabilizadores o estabilizadores como una tabla de Estabilizadores de longitud N utilizando destab y stab atributos.

Se puede obtener una representación del operador Clifford más legible llamando al método to_dict() método Esta representación también se utiliza si se imprime un objeto Clifford como en el siguiente ejemplo

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']

Conversión de circuitos

Los operadores Clifford pueden inicializarse a partir de circuitos que contengan sólo las siguientes puertas Clifford: IGate, XGate, YGate, ZGate, HGate, SGate, SdgGate, SXGate, SXdgGate, CXGate, CZGate, CYGate, DCXGate, SwapGate, iSwapGate, ECRGate, LinearFunction, PermutationGate. Se pueden volver a convertir en QuantumCircuito Gate mediante los botones to_circuit() o to_instruction() respectivamente. Nótese que esta descomposición no es necesariamente óptima en términos de número de puertas.

Nota

Un conjunto mínimamente generador de puertas para circuitos Clifford es el HGate y SGate y la puerta CXGate o CZGate de dos qubits.

Los operadores Clifford también pueden convertirse en Operator mediante el método to_operator() método. Para ello, se descompone en un circuito y se simula como un operador unitario.

Referencias

  1. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196

Inicializar un objeto operador.


Atributos

destab

La matriz desestabilizadora para la representación simpléctica.

destab_phase

Devuelve la fase del desestabilizador con representación booleana.

destab_x

La matriz desestabilizadora x para la representación simpléctica.

destab_z

La matriz z desestabilizadora para la representación simpléctica.

dim

Devuelve una tupla (forma_entrada, forma_salida).

name

Identificador único de cadena para el tipo de operación.

num_clbits

Número de bits clásicos.

num_qubits

Devuelve el número de qubits si es un operador N-qubit o Ninguno en caso contrario.

phase

Devuelve la fase con representación booleana.

qargs

Devuelve los qargs para el operador.

stab

La matriz de estabilizadores para la representación simpléctica.

stab_phase

Devuelve la fase del estabilizador con representación booleana.

stab_x

La matriz estabilizadora x para la representación simpléctica.

stab_z

La matriz de estabilizadores para la representación simpléctica.

symplectic_matrix

Devuelve una matriz simpléctica booleana.

x

La matriz x para la representación simpléctica.

z

La matriz z para la representación simpléctica.


Métodos

adjoint

adjoint()

GitHub

Devuelve el adjunto del Operador.

compose

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

GitHub

Devuelve la composición del operador con otro Clifford.

Parámetros

  • other (Clifford) – un objeto Clifford.
  • qargs (list or None) – una lista de posiciones de subsistemas a las que aplicar otras. Si se aplica «None» a todos los subsistemas (valor predeterminado: None).
  • front (bool) – Si es True compone usando el operador derecho de multiplicación, en lugar del izquierdo [por defecto: Falso].

Devuelve

El compuesto Clifford.

Tipo de retorno

Clifford

Eleva

QiskitError - si otro no puede convertirse en operador o tiene dimensiones incompatibles para los subsistemas especificados.

Nota

La composición (&) se define por defecto como multiplicación matricial izquierda para los operadores matriciales, mientras que @ (equivalente a dot()) se define como multiplicación matricial derecha. Es decir, que A & B == A.compose(B) es equivalente a B @ A == B.dot(A) cuando A y B son del mismo tipo.

Si se configura el parámetro front=True kwarg, la multiplicación de matrices a la derecha es equivalente al método dot() método A.dot(B) == A.compose(B, front=True).

conjugate

conjugate()

GitHub

Devuelve el conjugado del Clifford.

copy

copy()

GitHub

Realiza una copia en profundidad del operador actual.

dot

dot(other, qargs=None)

GitHub

Devuelve el operador multiplicado por la derecha self * other.

Parámetros

  • other (Operator) – un objeto operador.
  • qargs (list or None) – una lista de posiciones de subsistemas a las que aplicar otras. Si se aplica «None» a todos los subsistemas (valor predeterminado: None).

Devuelve

La matriz derecha multiplicada Operador.

Tipo de retorno

Operador

Nota

El producto punto puede obtenerse utilizando el operador binario @ . Por tanto, a.dot(b) es equivalente a a @ b.

expand

expand(other)

GitHub

Devuelve el producto tensorial de orden inverso con otro Clifford.

Parámetros

other (Clifford) – un objeto Clifford.

Devuelve

el producto tensorial bab \otimes a, donde aa

es el actual Clifford, y bb es el otro Clifford.

Tipo de retorno

Clifford

from_circuit

static from_circuit(circuit)

GitHub

Inicializar desde un QuantumCircuit o Instrucción.

Parámetros

circuit (QuantumCircuit orInstruction) – para inicializar.

Devuelve

el objeto Clifford para la instrucción.

Tipo de retorno

Clifford

Eleva

QiskitError - si la instrucción de entrada no es Clifford o contiene una instrucción de registro clásica.

from_dict

classmethod from_dict(obj)

GitHub

Cargar un Clifford de un diccionario

from_label

static from_label(label)

GitHub

Devuelve un producto tensorial de puertas Clifford de un solo qubit.

Parámetros

label (string) – cadena de operadores monocubitales.

Devuelve

El operador Clifford de N-qubit.

Tipo de retorno

Clifford

Eleva

QiskitError - si la etiqueta contiene caracteres no válidos.

Información adicional:

Las etiquetas corresponden a los Cliffords de un solo qubit son

    • Etiqueta
    • Estabilizador
    • Desestabilizador
    • "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

Crear un Clifford a partir de una Función Lineal.

Si la función lineal está representada por una matriz binaria invertible nxn A, entonces la matriz simpléctica de Clifford correspondiente [ [A^t, 0], [0, A^ {-1}] ].

Parámetros

linear_function (LinearFunction) – Una función lineal a convertir.

Devuelve

el objeto de Clifford para esta función lineal.

Tipo de retorno

Clifford

from_matrix

classmethod from_matrix(matrix)

GitHub

Crea una Clifford a partir de una matriz unitaria.

Tenga en cuenta que esta función tarda un tiempo exponencialmente largo w.r.t. el número de qubits.

Parámetros

matrix (np.array) – Una matriz unitaria que representa un Clifford a convertir.

Devuelve

el objeto de Clifford para la matriz unitaria.

Tipo de retorno

Clifford

Eleva

QiskitError - si la entrada no es una matriz Clifford.

from_operator

classmethod from_operator(operator)

GitHub

Crea un Clifford a partir de un operador.

Tenga en cuenta que esta función tarda un tiempo exponencialmente largo w.r.t. el número de qubits.

Parámetros

operator (Operator) – Un operador que representa un Clifford a convertir.

Devuelve

el objeto Clifford para el operador.

Tipo de retorno

Clifford

Eleva

QiskitError - si la entrada no es un operador Clifford.

from_permutation

classmethod from_permutation(permutation_gate)

GitHub

Crear un Clifford a partir de un PermutationGate.

Parámetros

permutation_gate (PermutationGate) – Una permutación a convertir.

Devuelve

el objeto Clifford para esta permutación.

Tipo de retorno

Clifford

input_dims

input_dims(qargs=None)

GitHub

Devuelve tupla de dimensión de entrada para subsistemas especificados.

is_unitary

is_unitary()

GitHub

Devuelve True si la tabla Clifford es válida.

output_dims

output_dims(qargs=None)

GitHub

Devuelve tupla de dimensión de salida para subsistemas especificados.

power

power(n)

GitHub

Devuelve la composición de un operador consigo mismo n veces.

Parámetros

n (int) – el número de veces que se compone con uno mismo ( n>0 ).

Devuelve

el operador compuesto n veces.

Tipo de retorno

Clifford

Eleva

QiskitError - si las dimensiones de entrada y salida del operador no son iguales, o la potencia no es un entero positivo.

reshape

reshape(input_dims=None, output_dims=None, num_qubits=None)

GitHub

Devuelve una copia superficial con las dimensiones de los subsistemas de entrada y salida remodeladas.

Parámetros

  • input_dims (None or tuple) – nuevas dimensiones de entrada del subsistema. Si es Ninguno, se conservarán las atenuaciones de entrada originales [Por defecto: Ninguno].
  • output_dims (None or tuple) – nuevas dimensiones de salida del subsistema. Si es Ninguno, se conservarán las atenuaciones de salida originales. [Predeterminado: Ninguno].
  • num_qubits (None or int) – remodelar a un operador N-qubit [Por defecto: Ninguno].

Devuelve

devuelve self con las dimensiones de entrada y salida reformadas.

Tipo de retorno

BaseOperator

Eleva

QiskitError - si el tamaño combinado de todas las dimensiones de entrada del subsistema o las dimensiones de salida del subsistema no es constante.

tensor

tensor(other)

GitHub

Devuelve el producto tensorial con otro Clifford.

Parámetros

other (Clifford) – un objeto Clifford.

Devuelve

el producto tensorial aba \otimes b, donde aa

es el actual Clifford, y bb es el otro Clifford.

Tipo de retorno

Clifford

Nota

El producto tensorial puede obtenerse utilizando el operador binario ^ . Por tanto, a.tensor(b) es equivalente a a ^ b.

to_circuit

to_circuit()

GitHub

Devuelve un QuantumCircuit implementando el Clifford.

Para N <= 3 qubits this is based on optimal CX cost decomposition from reference [1]. For N > 3 qubits esto se hace utilizando la rutina general de compilación no óptima de la referencia [2].

Devuelve

una implementación en circuito del Clifford.

Tipo de retorno

QuantumCircuit

Referencias

  1. S. Bravyi, D. Maslov, Los circuitos sin Hadamard exponen la estructura del grupo de 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

Devuelve la representación de diccionario del objeto Clifford.

to_instruction

to_instruction()

GitHub

Devuelve una instrucción Gate que implementa el Clifford.

to_labels

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

GitHub

Convierte un Clifford en una lista Pauli (de)stabilizer etiquetas de cadena.

Para grandes conversiones de Clifford, el uso de array=True kwarg será más eficiente, ya que asigna memoria para la matriz Numpy completa de etiquetas por adelantado.

Etiqueta
Fase
Symplectic
Matriz
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

Parámetros

  • array (bool) – devuelve un array Numpy si es True, en caso contrario devuelve una lista (Por defecto: False).
  • mode (Literal["S", "D", "B"]) – devuelve tanto el estabilizador como el desestabilizador si es "B", devuelve sólo el estabilizador si es "S" y devuelve sólo el desestabilizador si es "D".

Devuelve

Las filas de StabilizerTable en forma de etiqueta.

Tipo de retorno

lista o matriz

Eleva

QiskitError - si tanto el estabilizador como el desestabilizador son falsos.

to_matrix

to_matrix()

GitHub

Convertir operador a matriz Numpy.

to_operator

to_operator()

GitHub

Convertir a un objeto Operador.

Tipo de retorno

Operador

transpose

transpose()

GitHub

Devuelve la transposición del Clifford.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.