CNOTDihedral
class qiskit.quantum_info.CNOTDihedral(data=None, num_qubits=None, validate=True)
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,TGateyXGate.Representación
Un operador CNOT-Dihedral -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 , y un vector binario .
El polinomio de fase es un polinomio de grado 3 como máximo, en 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,TdgGateSGate,SdgGate,CXGateCZGate,CSGate,CSdgGate,SwapGate,,CCZGate. Pueden volver a convertirse en un objetoQuantumCircuit,Gateo utilizando losto_circuit()métodosto_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
Operatormediante el métodoto_operator()método. Para ello, se descompone en un circuito y se simula como un operador unitario.Referencias:
- Shelly Garion y 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 y Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).
Inicializa un objeto operador CNOTDihedral.
Parámetros
- data (CNOTDihedral orQuantumCircuit orInstruction) – operador para inicializar.
- num_qubits (int) – Inicializar un operador CNOTDihedral vacío.
- validate (bool) – si es True, valida el elemento CNOTDihedral.
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
compose
compose(other, qargs=None, front=False)
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
Eleva
QiskitError - si otro no puede convertirse en operador o tiene dimensiones incompatibles para los subsistemas especificados.
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
copy
dot
dot(other, qargs=None)
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
El producto punto puede obtenerse utilizando el operador binario @ . Por tanto, a.dot(b) es equivalente a a @ b.
expand
expand(other)
Devuelve el producto tensorial de orden inverso con otro CNOTDihedral.
Parámetros
other (CNOTDihedral) – un objeto CNOTDihedral.
Devuelve
el producto tensorial , donde
es el CNOTDihedral actual, y es el otro CNOTDihedral.
Tipo de retorno
input_dims
output_dims
power
power(n)
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
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)
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)
Devuelve el producto tensorial con otro CNOTDihedral.
Parámetros
other (CNOTDihedral) – un objeto CNOTDihedral.
Devuelve
el producto tensorial , donde
es el CNOTDihedral actual, y es el otro CNOTDihedral.
Tipo de retorno
El producto tensorial puede obtenerse utilizando el operador binario ^ . Por tanto, a.tensor(b) es equivalente a a ^ b.
to_circuit
to_circuit()
Devuelve un QuantumCircuit que implementa el elemento CNOT-Diédrico.
Devuelve
una implementación en circuito del objeto CNOTDihedral.
Tipo de retorno
Referencias
- Shelly Garion y 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 y Jay M. Gambetta, Scalable randomized benchmarking of non-Clifford gates, npj Quantum Inf 2, 16012 (2016).