Skip to main content
IBM Quantum Platform

CNOTDihedral

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

GitHub

Bases: BaseOperator, AdjointMixin

Un operador N-qubit del grupo CNOT-Diédrico.

El grupo CNOT-Diédrico está generado por las puertas cuánticas, CXGate, TGatey XGate.

Representación

Un operador CNOT-Dihedral NN -qubit se almacena como una función afín y un polinomio de fase, basándose en la convención de las referencias [1, 2].

La función afín consiste en una matriz binaria invertible N×NN \times N, y un vector binario NN.

El polinomio de fase es un polinomio de grado 3 como máximo, en NN variables, cuyos coeficientes están en el anillo Z_8 con 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)

Conversión de circuitos

Los operadores CNOTDihedral pueden inicializarse a partir de circuitos que contengan únicamente las siguientes puertas: IGate, XGate, YGate, ZGate, TGate, TdgGate SGate, SdgGate, CXGate CZGate, CSGate, CSdgGate, SwapGate,, CCZGate. Pueden volver a convertirse en un objeto QuantumCircuit, Gate o utilizando los to_circuit() métodos to_instruction() o respectivamente. Ten en cuenta que esta descomposición no es necesariamente óptima en cuanto al número de puertas lógicas si el número de qubits es superior a dos.

Los operadores CNOTDihedral 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:

  1. Shelly Garion y 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 y Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).

Inicializa un objeto operador CNOTDihedral.

Parámetros

Eleva

  • QiskitError - si el tipo no es válido.
  • QiskitError - si validate=True y el elemento CNOTDihedral no es válido.

Atributos

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.

qargs

Devuelve los qargs para el operador.


Métodos

adjoint

adjoint()

GitHub

Devuelve el adjunto del Operador.

compose

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

GitHub

Devuelve el operador composición con otro CNOTDihedral.

Parámetros

  • other (CNOTDihedral) – un objeto CNOTDihedral.
  • 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 CNOTDihedral.

Tipo de retorno

CNOTDiédrica

Eleva

QiskitError - si otro no puede convertirse en operador o tiene dimensiones incompatibles para los subsistemas especificados.

Nota

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

conjugate()

GitHub

Devuelve el conjugado de la CNOTDihedral.

copy

copy()

GitHub

Realiza una copia en profundidad del operador actual.

dot

dot(other, qargs=None)

GitHub

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

Operador

Nota

El producto punto puede obtenerse utilizando el operador binario @ . Por tanto, a.dot(b) es equivalente a a @ b.

expand

expand(other)

GitHub

Devuelve el producto tensorial de orden inverso con otro CNOTDihedral.

Parámetros

other (CNOTDihedral) – un objeto CNOTDihedral.

Devuelve

el producto tensorial bab \otimes a, donde aa

es el CNOTDihedral actual, y bb es el otro CNOTDihedral.

Tipo de retorno

CNOTDiédrica

input_dims

input_dims(qargs=None)

GitHub

Devuelve tupla de dimensión de entrada para subsistemas especificados.

output_dims

output_dims(qargs=None)

GitHub

Devuelve tupla de dimensión de salida para subsistemas especificados.

power

power(n)

GitHub

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

Clifford

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)

GitHub

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)

GitHub

Devuelve el producto tensorial con otro CNOTDihedral.

Parámetros

other (CNOTDihedral) – un objeto CNOTDihedral.

Devuelve

el producto tensorial aba \otimes b, donde aa

es el CNOTDihedral actual, y bb es el otro CNOTDihedral.

Tipo de retorno

CNOTDiédrica

Nota

El producto tensorial puede obtenerse utilizando el operador binario ^ . Por tanto, a.tensor(b) es equivalente a a ^ b.

to_circuit

to_circuit()

GitHub

Devuelve un QuantumCircuit que implementa el elemento CNOT-Diédrico.

Devuelve

una implementación en circuito del objeto CNOTDihedral.

Tipo de retorno

QuantumCircuit

Referencias

  1. Shelly Garion y 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 y Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).

to_instruction

to_instruction()

GitHub

Devuelve una instrucción Gate que implementa el objeto CNOTDihedral.

to_matrix

to_matrix()

GitHub

Convertir operador a matriz Numpy.

to_operator

to_operator()

GitHub

Convertir a un objeto Operador.

Tipo de retorno

Operador

transpose

transpose()

GitHub

Devuelve la transposición del CNOTDihedral.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.