mimiqcircuits.decomposition.basis.canonical

Canonical decomposition basis targeting GateU and GateCX.

Classes

CanonicalBasis()

Decomposition basis targeting the canonical primitive gate set.

class mimiqcircuits.decomposition.basis.canonical.CanonicalBasis[source]

Bases: DecompositionBasis

Decomposition basis targeting the canonical primitive gate set.

The canonical basis decomposes all operations to a minimal set of primitives:
  • GateU: Arbitrary single-qubit unitary

  • GateCX: Two-qubit CNOT gate

  • Measure, Reset: Measurement and reset operations

  • Barrier: Scheduling barriers

  • Classical operations, annotations, noise channels

This is the default basis used by decompose().

Example

>>> from mimiqcircuits import Circuit, GateH, GateCCX
>>> from mimiqcircuits.decomposition import decompose, CanonicalBasis
>>> c = Circuit()
>>> c.push(GateH(), 0)
1-qubit circuit with 1 instruction:
└── H @ q[0]

>>> c.push(GateCCX(), 0, 1, 2)
3-qubit circuit with 2 instructions:
├── H @ q[0]
└── C₂X @ q[0:1], q[2]

>>> decomposed = decompose(c, CanonicalBasis())
>>> # All gates are now GateU or GateCX
isterminal(op)[source]

Check if an operation is terminal in the canonical basis.

Terminal operations include:
  • Core gates: GateU, GateCX

  • Measurement/reset: Measure, Reset and variants

  • Control flow: Barrier, IfStatement (if inner op is terminal)

  • Classical operations, annotations

  • Noise channels, expectation values

  • Z-register operations: Add, Multiply, Pow

  • Delay (timing information)

Parameters:

op (Operation) – The operation to check.

Returns:

True if the operation is terminal.

Return type:

bool

decompose(op, qubits, bits, zvars)[source]

Decompose a non-terminal operation using canonical rewrite.

Parameters:
  • op (Operation) – The operation to decompose.

  • qubits (Sequence[int]) – Qubit indices for the operation.

  • bits (Sequence[int]) – Classical bit indices for the operation.

  • zvars (Sequence[int]) – Z-variable indices for the operation.

Returns:

A Circuit containing the decomposed instructions.

Raises:

DecompositionError – If the operation cannot be decomposed.

Return type:

Circuit