Skip to main content
IBM Quantum Platform

CNOTDihedral

class qiskit.quantum_info.CNOTDihedral(data=None, num_qubits=None, validate=True)

GitHub

Bases: BaseOperator, AdjointMixin

Um operador N-qubit do grupo CNOT-Dihedral.

O grupo CNOT-Dihedral é gerado pelas portas quânticas, CXGate, TGate, e XGate.

Representação

Um operador NN -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 N×NN \times N matriz binária invertível e um NN vetor binário.

O polinômio de fase é um polinômio de grau no máximo 3, em NN 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, TdgGate SGate, SdgGate, CXGate CZGate, CSGate, CSdgGate, SwapGate, CCZGate,. Eles podem ser convertidos de volta em um objeto QuantumCircuit, Gate ou usando os to_circuit() métodos to_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 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. Shelly Garion e Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
  2. 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

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

adjoint()

GitHub

Retorna o adjunto do Operador.

compose

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

GitHub

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

CNOTDihedral

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 CNOTDihedral.

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 direita 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 tensor de ordem inversa com outro CNOTDihedral.

Parâmetros

other (CNOTDihedral) – um objeto CNOTDihedral.

Retorna

o produto tensorial bab \otimes a, onde aa

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

Tipo de retorno

CNOTDihedral

input_dims

input_dims(qargs=None)

GitHub

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

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 CNOTDihedral.

Parâmetros

other (CNOTDihedral) – um objeto CNOTDihedral.

Retorna

o produto tensorial aba \otimes b, onde aa

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

Tipo de retorno

CNOTDihedral

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 elemento CNOT-Dihedral.

Retorna

uma implementação de circuito do objeto CNOTDihedral.

Tipo de retorno

QuantumCircuit

Referências

  1. Shelly Garion e Andrew W. Cross, Synthesis of CNOT-Dihedral circuits with optimal number of two qubit gates, Quantum 4(369), 2020
  2. 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).

to_instruction

to_instruction()

GitHub

Retorna uma instrução Gate que implementa o objeto CNOTDihedral.

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 CNOTDihedral.

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