Clifford
class qiskit.quantum_info.Clifford(data, validate=True, copy=True)
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 é definido como
onde é o grupo Pauli em qubits que é gerado por operadores Pauli de um único qubit e é um operador unitário no grupo unitário que representa operações em qubits. é o grupo quociente pelo subgrupo de matrizes unitárias escalares .
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.
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
- 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
compose
compose(other, qargs=None, front=False)
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
Aumentos
QiskitError - se outro não puder ser convertido em um operador ou tiver dimensões incompatíveis para os subsistemas especificados.
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
copy
dot
dot(other, qargs=None)
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
O produto escalar pode ser obtido usando o operador binário @ . Portanto, a.dot(b) é equivalente a a @ b.
expand
expand(other)
Retorna o produto tensorial de ordem inversa com outro Clifford.
Parâmetros
other (Clifford) – um objeto Clifford.
Retorna
o produto tensorial , onde
é o Clifford atual, e é o outro Clifford.
Tipo de retorno
from_circuit
static from_circuit(circuit)
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
Aumentos
QiskitError - se a instrução de entrada for não-Clifford ou contiver uma instrução de registro clássico.
from_dict
from_label
static from_label(label)
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
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)
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
from_matrix
classmethod from_matrix(matrix)
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
Aumentos
QiskitError - se a entrada não for uma matriz de Clifford.
from_operator
classmethod from_operator(operator)
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
Aumentos
QiskitError - se a entrada não for um operador de Clifford.
from_permutation
classmethod from_permutation(permutation_gate)
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
input_dims
input_dims(qargs=None)
Retorna uma tupla de dimensão de entrada para os subsistemas especificados.
is_unitary
output_dims
output_dims(qargs=None)
Retorna uma tupla de dimensão de saída para os subsistemas especificados.
power
power(n)
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
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)
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)
Retorna o produto tensorial com outro Clifford.
Parâmetros
other (Clifford) – um objeto Clifford.
Retorna
o produto tensorial , onde
é o Clifford atual, e é o outro Clifford.
Tipo de retorno
O produto tensor pode ser obtido usando o operador binário ^ . Portanto, a.tensor(b) é equivalente a a ^ b.
to_circuit
to_circuit()
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
Referências
- S. Bravyi, D. Maslov, Hadamard-free circuits expose the structure of the Clifford group, arXiv:2003.09412 [quant-ph]
- 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_instruction
to_labels
to_labels(array=False, mode='B')
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 | |||
"-I" | 1 | |||
"X" | 0 | |||
"-X" | 1 | |||
"Y" | 0 | |||
"-Y" | 1 | |||
"Z" | 0 | |||
"-Z" | 1 |
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
Aumentos
QiskitError - se o estabilizador e o desestabilizador forem ambos falsos.