Source code for tket_exts.tket.qsystem.random

"""QSystem random 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 QSystemRandomExtension(TketExtension): """QSystem's random operations."""
[docs] @functools.cache def __call__(self) -> Extension: """Returns the qsystem random extension""" return load_extension("tket.qsystem.random")
[docs] def TYPES(self) -> list[TypeDef]: """Return the types defined by this extension""" return [self.context.type_def]
[docs] def OPS(self) -> list[OpDef]: """Return the operations defined by this extension""" return [ self.delete_RNGContext.op_def(), self.new_RNGContext.op_def(), self.random_float.op_def(), self.random_int.op_def(), self.random_int_bounded.op_def(), self.random_advance.op_def(), ]
@functools.cached_property def context(self) -> ExtType: """Linear RNG context type.""" return self().get_type("context").instantiate([]) @functools.cached_property def delete_RNGContext(self) -> ExtOp: """Discard the given RNG context.""" return self().get_op("DeleteRNGContext").instantiate() @functools.cached_property def new_RNGContext(self) -> ExtOp: """Seed the RNG and return a new RNG context (call once).""" return self().get_op("NewRNGContext").instantiate() @functools.cached_property def random_float(self) -> ExtOp: """Generate a random float in [0, 1).""" return self().get_op("RandomFloat").instantiate() @functools.cached_property def random_int(self) -> ExtOp: """Generate a random 32-bit unsigned integer.""" return self().get_op("RandomInt").instantiate() @functools.cached_property def random_int_bounded(self) -> ExtOp: """Generate a random 32-bit unsigned integer less than bound.""" return self().get_op("RandomIntBounded").instantiate() @functools.cached_property def random_advance(self) -> ExtOp: """Advance the RNG state by the given delta.""" return self().get_op("RandomAdvance").instantiate()