Tamil
மொழிகள்
English
Bengali
French
German
Japanese
Korean
Portuguese
Spanish
Tamil

CNOTDihedral

class CNOTDihedral(data=None, num_qubits=None, validate=True)[source]

Bases: BaseOperator, AdjointMixin

An N-qubit operator from the CNOT-Dihedral group.

The CNOT-Dihedral group is generated by the quantum gates, CXGate, TGate, and XGate.

Representation

An \(N\)-qubit CNOT-Dihedral operator is stored as an affine function and a phase polynomial, based on the convention in references [1, 2].

The affine function consists of an \(N \times N\) invertible binary matrix, and an \(N\) binary vector.

The phase polynomial is a polynomial of degree at most 3, in \(N\) variables, whose coefficients are in the ring Z_8 with 8 elements.

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)

Circuit Conversion

CNOTDihedral operators can be initialized from circuits containing only the following gates: IGate, XGate, YGate, ZGate, TGate, TdgGate SGate, SdgGate, CXGate, CZGate, CSGate, CSdgGate, SwapGate, CCZGate. They can be converted back into a QuantumCircuit, or Gate object using the to_circuit() or to_instruction() methods respectively. Note that this decomposition is not necessarily optimal in terms of number of gates if the number of qubits is more than two.

CNOTDihedral operators can also be converted to Operator objects using the to_operator() method. This is done via decomposing to a circuit, and then simulating the circuit as a unitary operator.

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

Initialize a CNOTDihedral operator object.

Parameters
  • data (CNOTDihedral or QuantumCircuit or Instruction) -- Optional, operator to initialize.

  • num_qubits (int) -- Optional, initialize an empty CNOTDihedral operator.

  • validate (bool) -- if True, validates the CNOTDihedral element.

Raises
  • QiskitError -- if the type is invalid.

  • QiskitError -- if validate=True and the CNOTDihedral element is invalid.

Methods

adjoint

Return the adjoint of the Operator.

compose

Return the operator composition with another CNOTDihedral.

conjugate

Return the conjugate of the CNOTDihedral.

copy

Make a deep copy of current operator.

dot

Return the right multiplied operator self * other.

expand

Return the reverse-order tensor product with another CNOTDihedral.

input_dims

Return tuple of input dimension for specified subsystems.

output_dims

Return tuple of output dimension for specified subsystems.

power

Return the compose of a operator with itself n times.

reshape

Return a shallow copy with reshaped input and output subsystem dimensions.

tensor

Return the tensor product with another CNOTDihedral.

to_circuit

Return a QuantumCircuit implementing the CNOT-Dihedral element.

to_instruction

Return a Gate instruction implementing the CNOTDihedral object.

to_matrix

Convert operator to Numpy matrix.

to_operator

Convert to an Operator object.

transpose

Return the transpose of the CNOTDihedral.

Attributes

dim

Return tuple (input_shape, output_shape).

name

Unique string identifier for operation type.

num_clbits

Number of classical bits.

num_qubits

Return the number of qubits if a N-qubit operator or None otherwise.

qargs

Return the qargs for the operator.