Clifford
class qiskit.quantum_info.Clifford(data, validate=True, copy=True)
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 se define como
donde es el grupo de Pauli sobre qubits que está generado por operadores de Pauli de un solo qubit, y es un operador unitario en el grupo unitario que representa operaciones sobre qubits. es el grupo cociente por el subgrupo de matrices escalares unitarias .
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.
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
- 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
compose
compose(other, qargs=None, front=False)
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
Eleva
QiskitError - si otro no puede convertirse en operador o tiene dimensiones incompatibles para los subsistemas especificados.
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
copy
dot
dot(other, qargs=None)
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
El producto punto puede obtenerse utilizando el operador binario @ . Por tanto, a.dot(b) es equivalente a a @ b.
expand
expand(other)
Devuelve el producto tensorial de orden inverso con otro Clifford.
Parámetros
other (Clifford) – un objeto Clifford.
Devuelve
el producto tensorial , donde
es el actual Clifford, y es el otro Clifford.
Tipo de retorno
from_circuit
static from_circuit(circuit)
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
Eleva
QiskitError - si la instrucción de entrada no es Clifford o contiene una instrucción de registro clásica.
from_dict
from_label
static from_label(label)
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
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)
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
from_matrix
classmethod from_matrix(matrix)
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
Eleva
QiskitError - si la entrada no es una matriz Clifford.
from_operator
classmethod from_operator(operator)
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
Eleva
QiskitError - si la entrada no es un operador Clifford.
from_permutation
classmethod from_permutation(permutation_gate)
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
input_dims
is_unitary
output_dims
power
power(n)
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
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)
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)
Devuelve el producto tensorial con otro Clifford.
Parámetros
other (Clifford) – un objeto Clifford.
Devuelve
el producto tensorial , donde
es el actual Clifford, y es el otro Clifford.
Tipo de retorno
El producto tensorial puede obtenerse utilizando el operador binario ^ . Por tanto, a.tensor(b) es equivalente a a ^ b.
to_circuit
to_circuit()
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
Referencias
- S. Bravyi, D. Maslov, Los circuitos sin Hadamard exponen la estructura del grupo de 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')
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 | |||
"-I" | 1 | |||
"X" | 0 | |||
"-X" | 1 | |||
"Y" | 0 | |||
"-Y" | 1 | |||
"Z" | 0 | |||
"-Z" | 1 |
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
Eleva
QiskitError - si tanto el estabilizador como el desestabilizador son falsos.