Source code for qclight.circuit.visual_circuit

"""QCLCircuit class"""
from typing import Iterable
import numpy as np
import numpy.typing as npt
from qclight.gate import HGate, XGate, IGate
from qclight.visualizer import CircuitVisualizer
from .circuit import QCLCircuit

FloatNDArray = npt.NDArray[np.float64]


[docs]class QCLVisualCircuit(QCLCircuit): """Quantum circuit used for a generic computation. This subclass of :class:`~qclight.circuit.circuit.QCLCircuit` adds visualization capabilities to the circuit. To print the circuit, simply call the :meth:`__str__` method. """ def __init__(self, state: "str | list[float] | int") -> "None": super().__init__(state) self._visualizer = CircuitVisualizer(self.n) @property def n(self) -> "int": return self._n @n.setter def n(self, n: "int") -> "None": self._n = n self._identity = IGate().matrix_of_size(n) self._visualizer = CircuitVisualizer(n) def _initialize_state(self, state: "str | list[float] | int") -> "FloatNDArray": super()._initialize_state(state) self._visualizer.set_state(self._state) return self._state
[docs] def x(self, i: "int | list[int]") -> "None": super().x(i) self._visualizer.append_standalone(XGate(), i)
[docs] def h(self, i: "int | list[int]") -> "None": super().h(i) self._visualizer.append_standalone(HGate(), i)
[docs] def cx(self, c: "int", t: "int") -> "None": super().mcx((c,), t) self._visualizer.append_controlled(XGate(), c, t)
[docs] def ccx(self, c1: "int", c2: "int", t: "int") -> "None": super().mcx((c1, c2), t) self._visualizer.append_controlled(XGate(), (c1, c2), t)
[docs] def mcx(self, c_bits: "Iterable[int]", t: "int") -> "None": super().mcx(c_bits, t) self._visualizer.append_controlled(XGate(), c_bits, t)
[docs] def barrier(self, qubits: "Iterable[int] | None" = None) -> "None": """Adds a barrier in the visualization of the circuit. It can help to separate different parts of the circuit. Args: qubits: qubits to which the barrier is applied """ self._visualizer.append_barrier(qubits)
def __str__(self) -> "str": return str(self._visualizer)