CNOTDihedral
class qiskit.quantum_info.CNOTDihedral(data=None, num_qubits=None, validate=True)
Bases: BaseOperator, AdjointMixin
Um operador N-qubit do grupo CNOT-Dihedral.
O grupo CNOT-Dihedral é gerado pelas portas quânticas,
CXGate,TGate, eXGate.Representação
Um operador -qubit CNOT-Dihedral é armazenado como uma função afim e um polinômio de fase, com base na convenção das referências [1 e 2].
A função afim consiste em uma matriz binária invertível e um vetor binário.
O polinômio de fase é um polinômio de grau no máximo 3, em variáveis, cujos coeficientes estão no anel Z_8 com 8 elementos.
from qiskit import QuantumCircuit from qiskit.quantum_info import CNOTDihedral circ = QuantumCircuit(3) circ.cx(0, 1) circ.x(2) circ.t(1) circ.t(1) circ.t(1) elem = CNOTDihedral(circ) # Print the CNOTDihedral element print(elem)
phase polynomial =
0 + 3*x_0 + 3*x_1 + 2*x_0*x_1
affine function =
(x_0,x_0 + x_1,x_2 + 1)Conversão de circuitos
Os operadores CNOTDihedral podem ser inicializados a partir de circuitos que contenham apenas as seguintes portas:
IGate,XGate,YGate,ZGate,TGate,TdgGateSGate,SdgGate,CXGateCZGate,CSGate,CSdgGate,SwapGate,CCZGate,. Eles podem ser convertidos de volta em um objetoQuantumCircuit,Gateou usando osto_circuit()métodosto_instruction()ou, respectivamente. Observe que essa decomposição não é necessariamente ideal em termos de número de portas lógicas se o número de qubits for superior a dois.Os operadores CNOTDihedral também podem ser convertidos em
Operatorusando o métodoto_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
- Shelly Garion e Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
- Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin e Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).
Inicializa um objeto operador CNOTDihedral.
Parâmetros
- data (CNOTDihedral orQuantumCircuit orInstruction) – operador a ser inicializado.
- num_qubits (int) – inicializar um operador CNOTDihedral vazio.
- validate (bool) – se True, valida o elemento CNOTDihedral.
Aumentos
- QiskitError - se o tipo for inválido.
- QiskitError - se validate=True e o elemento CNOTDihedral for inválido.
Atributos
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.
qargs
Retorna os qargs do operador.
Métodos
adjoint
compose
compose(other, qargs=None, front=False)
Retorna a composição do operador com outro CNOTDihedral.
Parâmetros
- other (CNOTDihedral) – um objeto CNOTDihedral.
- 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 CNOTDihedral 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 direita 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 tensor de ordem inversa com outro CNOTDihedral.
Parâmetros
other (CNOTDihedral) – um objeto CNOTDihedral.
Retorna
o produto tensorial , onde
é o CNOTDihedral atual, e é o outro CNOTDihedral.
Tipo de retorno
input_dims
input_dims(qargs=None)
Retorna uma tupla de dimensão de entrada para os subsistemas especificados.
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 CNOTDihedral.
Parâmetros
other (CNOTDihedral) – um objeto CNOTDihedral.
Retorna
o produto tensorial , onde
é o CNOTDihedral atual, e é o outro CNOTDihedral.
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 elemento CNOT-Dihedral.
Retorna
uma implementação de circuito do objeto CNOTDihedral.
Tipo de retorno
Referências
- Shelly Garion e Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
- Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin e Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).