Source code for tket_exts.tket.rotation

"""Rotation extension operations."""

import functools

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

from ._util import TketExtension, load_extension


[docs] class RotationExtension(TketExtension): """Rotation type for TKET's quantum operations."""
[docs] @functools.cache def __call__(self) -> Extension: """Returns the rotation extension""" return load_extension("tket.rotation")
[docs] def TYPES(self) -> list[TypeDef]: """Return the types defined by this extension""" return [self.rotation.type_def]
[docs] def OPS(self) -> list[OpDef]: """Return the operations defined by this extension""" return [ self.from_halfturns.op_def(), self.from_halfturns_unchecked.op_def(), self.radd.op_def(), self.to_halfturns.op_def(), ]
@functools.cached_property def rotation(self) -> ExtType: """Rotation type expressed as number of half-turns.""" return self().get_type("rotation").instantiate([]) @functools.cached_property def from_halfturns(self) -> ExtOp: """Construct rotation from number of half-turns; returns None if non-finite.""" return self().get_op("from_halfturns").instantiate() @functools.cached_property def from_halfturns_unchecked(self) -> ExtOp: """Construct rotation from number of half-turns; panics if non-finite.""" return self().get_op("from_halfturns_unchecked").instantiate() @functools.cached_property def radd(self) -> ExtOp: """Add two angles together.""" return self().get_op("radd").instantiate() @functools.cached_property def to_halfturns(self) -> ExtOp: """Convert rotation to a number of half-turns.""" return self().get_op("to_halfturns").instantiate()