Skip to main content
IBM Quantum Platform

Clifford

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

GitHub

Bases: BaseOperator, AdjointMixin, Operation

Um operador unitário N-qubit do grupo Clifford.

Um operador de Clifford de N qubit leva Paulis a Paulis por meio de conjugação (até uma fase global). Mais precisamente, o grupo de Clifford CN\mathcal{C}_N é definido 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)

onde PN\mathcal{P}_N é o grupo Pauli em NN qubits que é gerado por operadores Pauli de um único qubit e UU é um operador unitário no grupo unitário U(2N)U(2^N) que representa operações em NN qubits. CN\mathcal{C}_N é o grupo quociente pelo subgrupo de matrizes unitárias escalares U(1)U(1).

Representação

Um operador Clifford N-qubit é armazenado como um tableau booleano de comprimento 2N × ( 2N+1 ) usando a convenção da referência [1].

  • As linhas de 0 a N-1 são os geradores do grupo desestabilizador
  • As linhas N a 2N-1 são os geradores do grupo estabilizador.

A tabela booleana interna para o Clifford pode ser acessada usando o atributo tableau . As linhas do desestabilizador ou do estabilizador podem ser acessadas como uma tabela Stabilizer de comprimento N usando destab e stab atributos.

Uma representação mais fácil de ler do operador Clifford pode ser obtida chamando o método to_dict() método. Essa representação também é usada se um objeto Clifford for impresso, como no exemplo a seguir

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

Conversão de circuitos

Os operadores de Clifford podem ser inicializados a partir de circuitos que contêm apenas as seguintes portas de Clifford: IGate, XGate, YGate, ZGate, HGate, SGate, SdgGate, SXGate, SXdgGate, CXGate, CZGate, CYGate, DCXGate, SwapGate, iSwapGate, ECRGate, LinearFunction, PermutationGate. Eles podem ser convertidos novamente em um QuantumCircuit, ou Gate usando a função to_circuit() ou to_instruction() respectivamente. Observe que essa decomposição não é necessariamente ideal em termos de número de portas.

Nota

Um conjunto de portas geradoras mínimas para circuitos de Clifford é o HGate e SGate portão e *o *CXGate ou CZGate porta de dois qubits.

Os operadores Clifford também podem ser convertidos em objetos Operator usando o método to_operator() método. Isso é feito por meio da decomposição em um circuito e, em seguida, da simulação do circuito como um operador unitário.

Referências

  1. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits (Simulação aprimorada de circuitos estabilizadores ), Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196

Inicializa um objeto operador.


Atributos

destab

A matriz desestabilizadora para a representação simpática.

destab_phase

Retorna a fase do desestabilizador com representação booleana.

destab_x

A matriz x do desestabilizador para a representação simpática.

destab_z

A matriz z do desestabilizador para a representação simpática.

dim

Retorna uma tupla (input_shape, output_shape).

name

Identificador de cadeia de caracteres exclusivo para o tipo de operação.

num_clbits

Número de bits clássicos.

num_qubits

Retorna o número de qubits se for um operador N-qubit ou None caso contrário.

phase

Retorna a fase com representação booleana.

qargs

Retorna os qargs do operador.

stab

A matriz estabilizadora para a representação simpática.

stab_phase

Retorna a fase do estabilizador com representação booleana.

stab_x

A matriz estabilizadora x para a representação simpática.

stab_z

A matriz estabilizadora para a representação simpática.

symplectic_matrix

Retorna uma matriz simétrica booleana.

x

A matriz x para a representação simpática.

z

A matriz z para a representação simpática.


Métodos

adjoint

adjoint()

GitHub

Retorna o adjunto do Operador.

compose

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

GitHub

Retorna a composição do operador com outro Clifford.

Parâmetros

  • other (Clifford) – um objeto Clifford.
  • qargs (list or None) – uma lista de posições do subsistema às quais aplicar outras. Se None for aplicado a todos os subsistemas (padrão: None).
  • front (bool) – Se True, compor usando o operador multiplicação à direita, em vez de multiplicação à esquerda [, padrão: False].

Retorna

O Clifford composto.

Tipo de retorno

Clifford

Aumentos

QiskitError - se outro não puder ser convertido em um operador ou tiver dimensões incompatíveis para os subsistemas especificados.

Nota

Por padrão, a composição (&) é definida como multiplicação de matriz à esquerda para operadores de matriz, enquanto @ (equivalente a dot()) é definida como multiplicação de matriz à direita. Ou seja, A & B == A.compose(B) é equivalente a B @ A == B.dot(A) quando A e B são do mesmo tipo.

A configuração do kwarg front=True muda isso para multiplicação de matriz à direita e é equivalente ao método dot() método A.dot(B) == A.compose(B, front=True).

conjugate

conjugate()

GitHub

Retorna o conjugado do Clifford.

copy

copy()

GitHub

Faça uma cópia profunda do operador atual.

dot

dot(other, qargs=None)

GitHub

Retorna o operador multiplicado à direita self * other.

Parâmetros

  • other (Operator) – um objeto operador.
  • qargs (list or None) – uma lista de posições do subsistema às quais aplicar outras. Se None for aplicado a todos os subsistemas (padrão: None).

Retorna

A matriz correta multiplicou o Operator.

Tipo de retorno

Operador

Nota

O produto escalar pode ser obtido usando o operador binário @ . Portanto, a.dot(b) é equivalente a a @ b.

expand

expand(other)

GitHub

Retorna o produto tensorial de ordem inversa com outro Clifford.

Parâmetros

other (Clifford) – um objeto Clifford.

Retorna

o produto tensorial bab \otimes a, onde aa

é o Clifford atual, e bb é o outro Clifford.

Tipo de retorno

Clifford

from_circuit

static from_circuit(circuit)

GitHub

Inicializar a partir de um QuantumCircuit ou de uma instrução.

Parâmetros

circuit (QuantumCircuit orInstruction) – para inicializar.

Retorna

o objeto Clifford para a instrução.

Tipo de retorno

Clifford

Aumentos

QiskitError - se a instrução de entrada for não-Clifford ou contiver uma instrução de registro clássico.

from_dict

classmethod from_dict(obj)

GitHub

Carregar um Clifford de um dicionário

from_label

static from_label(label)

GitHub

Retorna um produto tensorial de portas Clifford de um único qubit.

Parâmetros

label (string) – cadeia de operadores de um único qubit.

Retorna

O operador Clifford de N-qubit.

Tipo de retorno

Clifford

Aumentos

QiskitError - se o rótulo contiver caracteres inválidos.

Informações adicionais:

Os rótulos correspondem aos Cliffords de um único qubit

    • Rótulo
    • 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

Criar um Clifford a partir de uma função linear.

Se a função linear for representada por uma matriz inversível binária A nxn, então o Clifford correspondente tem uma matriz simpática [[A^t, 0], [0, A^ {-1}] ].

Parâmetros

linear_function (LinearFunction) – Uma função linear a ser convertida.

Retorna

o objeto de Clifford para essa função linear.

Tipo de retorno

Clifford

from_matrix

classmethod from_matrix(matrix)

GitHub

Crie um Clifford a partir de uma matriz unitária.

Observe que essa função leva um tempo exponencialmente longo w.r.t. o número de qubits.

Parâmetros

matrix (np.array) – Uma matriz unitária que representa um Clifford a ser convertido.

Retorna

o objeto de Clifford para a matriz unitária.

Tipo de retorno

Clifford

Aumentos

QiskitError - se a entrada não for uma matriz de Clifford.

from_operator

classmethod from_operator(operator)

GitHub

Crie um Clifford a partir de um operador.

Observe que essa função leva um tempo exponencialmente longo w.r.t. o número de qubits.

Parâmetros

operator (Operator) – Um operador que representa um Clifford a ser convertido.

Retorna

o objeto Clifford para o operador.

Tipo de retorno

Clifford

Aumentos

QiskitError - se a entrada não for um operador de Clifford.

from_permutation

classmethod from_permutation(permutation_gate)

GitHub

Crie um Clifford a partir de um PermutationGate.

Parâmetros

permutation_gate (PermutationGate) – Uma permutação a ser convertida.

Retorna

o objeto de Clifford para essa permutação.

Tipo de retorno

Clifford

input_dims

input_dims(qargs=None)

GitHub

Retorna uma tupla de dimensão de entrada para os subsistemas especificados.

is_unitary

is_unitary()

GitHub

Retorna True se a tabela de Clifford for válida.

output_dims

output_dims(qargs=None)

GitHub

Retorna uma tupla de dimensão de saída para os subsistemas especificados.

power

power(n)

GitHub

Retorna a composição de um operador consigo mesmo n vezes.

Parâmetros

n (int) – o número de vezes para compor com o self ( n>0 ).

Retorna

o operador composto n vezes.

Tipo de retorno

Clifford

Aumentos

QiskitError - se as dimensões de entrada e saída do operador não forem iguais ou se a potência não for um número inteiro positivo.

reshape

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

GitHub

Retorna uma cópia superficial com dimensões reformuladas do subsistema de entrada e saída.

Parâmetros

  • input_dims (None or tuple) – novas dimensões de entrada do subsistema. Se for None (Nenhum), os dims de entrada originais serão preservados [Padrão: Nenhum].
  • output_dims (None or tuple) – novas dimensões de saída do subsistema. Se for None (Nenhum), os dims de saída originais serão preservados [Padrão: Nenhum].
  • num_qubits (None or int) – remodelar para um operador N-qubit [Padrão: Nenhum].

Retorna

retorna self com dimensões de entrada e saída remodeladas.

Tipo de retorno

BaseOperator

Aumentos

QiskitError - se o tamanho combinado de todas as dimensões de entrada do subsistema ou de saída do subsistema não for constante.

tensor

tensor(other)

GitHub

Retorna o produto tensorial com outro Clifford.

Parâmetros

other (Clifford) – um objeto Clifford.

Retorna

o produto tensorial aba \otimes b, onde aa

é o Clifford atual, e bb é o outro Clifford.

Tipo de retorno

Clifford

Nota

O produto tensor pode ser obtido usando o operador binário ^ . Portanto, a.tensor(b) é equivalente a a ^ b.

to_circuit

to_circuit()

GitHub

Retorna um QuantumCircuit implementando o Clifford.

Para N <= 3 qubits this is based on optimal CX cost decomposition from reference [1]. For N > 3 qubits, isso é feito usando a rotina de compilação geral não otimizada da referência [2].

Retorna

uma implementação de circuito do Clifford.

Tipo de retorno

QuantumCircuit

Referências

  1. S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]
  2. S. Aaronson, D. Gottesman, Improved Simulation of Stabilizer Circuits (Simulação aprimorada de circuitos estabilizadores ), Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196

to_dict

to_dict()

GitHub

Retorna a representação do dicionário do objeto Clifford.

to_instruction

to_instruction()

GitHub

Retorna uma instrução Gate que implementa o Clifford.

to_labels

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

GitHub

Converta um Clifford em uma lista de rótulos de cadeia de (des)estabilizadores Pauli.

Para grandes conversões de Clifford, o uso do array=True kwarg será mais eficiente, pois ele aloca antecipadamente a memória para a matriz completa de rótulos do Numpy.

Rótulo
Fase
Simétrico
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) – retorna uma matriz Numpy se for True; caso contrário, retorna uma lista (Padrão: False).
  • mode (Literal["S", "D", "B"]) – retorna tanto o estabilizador quanto o desestabilizador se for "B", retorna apenas o estabilizador se for "S" e retorna apenas o desestabilizador se for "D".

Retorna

As linhas do site StabilizerTable em forma de rótulo.

Tipo de retorno

lista ou matriz

Aumentos

QiskitError - se o estabilizador e o desestabilizador forem ambos falsos.

to_matrix

to_matrix()

GitHub

Converte o operador em uma matriz Numpy.

to_operator

to_operator()

GitHub

Converter em um objeto Operator.

Tipo de retorno

Operador

transpose

transpose()

GitHub

Retorna a transposição do Clifford.

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.