Source code for tket_exts.tket.qsystem

"""QSystem extension operations."""

import functools
import warnings

from hugr.ext import Extension, OpDef, TypeDef
from hugr.ops import ExtOp
from hugr.tys import BoundedNatArg

from .._util import TketExtension, load_extension
from .helios import QSystemHeliosExtension
from .random import QSystemRandomExtension
from .sol import QSystemSolExtension
from .utils import QSystemUtilsExtension

__all__ = [
    "QSystemHeliosExtension",
    "QSystemRandomExtension",
    "QSystemSolExtension",
    "QSystemUtilsExtension",
]


[docs] class QSystemExtension(TketExtension): """Deprecated (since 0.13.0): use :class:`QSystemHeliosExtension` or :class:`QSystemSolExtension` instead. The combined ``tket.qsystem`` extension has been split into platform-specific extensions. Use ``tket_exts.qsystem_helios`` or ``tket_exts.qsystem_sol`` instead. """ @functools.cache def _extension(self) -> Extension: """Load the extension without emitting its public deprecation warning.""" return load_extension("tket.qsystem")
[docs] @functools.cache def __call__(self) -> Extension: """Returns the qsystem extension""" warnings.warn( "QSystemExtension (tket.qsystem) is deprecated. " "Use QSystemHeliosExtension (tket.qsystem.helios) or " "QSystemSolExtension (tket.qsystem.sol) instead.", DeprecationWarning, stacklevel=2, ) return self._extension()
[docs] def TYPES(self) -> list[TypeDef]: """Return the types defined by this extension""" return []
[docs] def OPS(self) -> list[OpDef]: """Return the operations defined by this extension""" return [ self.lazy_measure.op_def(), self.lazy_measure_leaked.op_def(), self.lazy_measure_reset.op_def(), self.phasedX.op_def(), self.qFree.op_def(), self.reset.op_def(), self.runtime_barrier_def, self.Rz.op_def(), self.try_QAlloc.op_def(), self.ZZPhase.op_def(), self.future_to_measure.op_def(), ]
@functools.cached_property def lazy_measure(self) -> ExtOp: """Lazily measure a qubit and lose it (returns a Future).""" return self().get_op("LazyMeasure").instantiate() @functools.cached_property def lazy_measure_leaked(self) -> ExtOp: """Measure a qubit or detect leakage. The returned Future is an integer between 0 and 3, where the first two values are valid measurement results, and 2 is returned if the qubit was leaked. """ return self().get_op("LazyMeasureLeaked").instantiate() @functools.cached_property def lazy_measure_reset(self) -> ExtOp: """Lazily measure a qubit and reset it to Z |0> (returns a Future).""" return self().get_op("LazyMeasureReset").instantiate() @functools.cached_property def phasedX(self) -> ExtOp: """PhasedX gate with two float parameters.""" return self().get_op("PhasedX").instantiate() @functools.cached_property def qFree(self) -> ExtOp: """Free a qubit (lose track of it).""" return self().get_op("QFree").instantiate() @functools.cached_property def reset(self) -> ExtOp: """Reset a qubit to the Z |0> eigenstate.""" return self().get_op("Reset").instantiate() @functools.cached_property def future_to_measure(self) -> ExtOp: """Convert a future(bool) to a measurement (for compatibility with the quantum extension). """ return self().get_op("FutureToMeasurement").instantiate() @functools.cached_property def runtime_barrier_def(self) -> OpDef: """Runtime barrier between operations on argument qubits. This is the generic operation definition. For the instantiated operation, see `runtimeBarrier`. """ return self().get_op("RuntimeBarrier")
[docs] def runtime_barrier(self, size: int) -> ExtOp: """Runtime barrier between operations on argument qubits. Args: size: Length of the qubit array. """ return self.runtime_barrier_def.instantiate([BoundedNatArg(size)])
@functools.cached_property def Rz(self) -> ExtOp: """Rotate a qubit around the Z axis (not physical).""" return self().get_op("Rz").instantiate() @functools.cached_property def try_QAlloc(self) -> ExtOp: """Try allocate a qubit in Z |0> (returns Option-like result).""" return self().get_op("TryQAlloc").instantiate() @functools.cached_property def ZZPhase(self) -> ExtOp: """Two-qubit ZZ gate with a float angle.""" return self().get_op("ZZPhase").instantiate()