Source code for tket_exts.tket.result
"""Result extension operations."""
import functools
from hugr.ext import Extension, OpDef, TypeDef
from hugr.ops import ExtOp
from hugr.tys import BoundedNatArg, StringArg
from ._util import TketExtension, load_extension
[docs]
class ResultExtension(TketExtension):
"""Result reporting operations."""
[docs]
@functools.cache
def __call__(self) -> Extension:
"""Returns the result extension"""
return load_extension("tket.result")
[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.result_array_bool_def,
self.result_array_f64_def,
self.result_array_int_def,
self.result_array_uint_def,
self.result_bool_def,
self.result_f64_def,
self.result_int_def,
self.result_uint_def,
]
@functools.cached_property
def result_array_bool_def(self) -> OpDef:
"""Report an array of boolean results.
This is the generic operation definition. For the instantiated operation, see
`result_array_bool`.
"""
return self().get_op("result_array_bool")
[docs]
def result_array_bool(self, label: str, size: int) -> ExtOp:
"""Report an array of boolean results.
Args:
label: Label for this result array.
size: Length of the array.
"""
return self.result_array_bool_def.instantiate(
[StringArg(label), BoundedNatArg(size)]
)
@functools.cached_property
def result_array_f64_def(self) -> OpDef:
"""Report an array of floating-point results.
This is the generic operation definition. For the instantiated operation, see
`result_array_f64`.
"""
return self().get_op("result_array_f64")
[docs]
def result_array_f64(self, label: str, size: int) -> ExtOp:
"""Report an array of floating-point results.
Args:
label: Label for this result array.
size: Length of the array.
"""
return self.result_array_f64_def.instantiate(
[StringArg(label), BoundedNatArg(size)]
)
@functools.cached_property
def result_array_int_def(self) -> OpDef:
"""Report an array of signed integer results.
This is the generic operation definition. For the instantiated operation, see
`result_array_int`.
"""
return self().get_op("result_array_int")
[docs]
def result_array_int(self, label: str, size: int, width: int) -> ExtOp:
"""Report an array of signed integer results.
Args:
label: Label for this result array.
size: Length of the array.
width: Bit width of the integers.
"""
return self.result_array_int_def.instantiate(
[StringArg(label), BoundedNatArg(size), BoundedNatArg(width)]
)
@functools.cached_property
def result_array_uint_def(self) -> OpDef:
"""Report an array of unsigned integer results.
This is the generic operation definition. For the instantiated operation, see
`result_array_uint`.
"""
return self().get_op("result_array_uint")
[docs]
def result_array_uint(self, label: str, size: int, width: int) -> ExtOp:
"""Report an array of unsigned integer results.
Args:
label: Label for this result array.
size: Length of the array.
width: Bit width of the integers.
"""
return self.result_array_uint_def.instantiate(
[StringArg(label), BoundedNatArg(size), BoundedNatArg(width)]
)
@functools.cached_property
def result_bool_def(self) -> OpDef:
"""Report a boolean result.
This is the generic operation definition. For the instantiated operation, see
`result_bool`.
"""
return self().get_op("result_bool")
[docs]
def result_bool(self, label: str) -> ExtOp:
"""Report a boolean result.
Args:
label: Label for this result.
"""
return self.result_bool_def.instantiate([StringArg(label)])
@functools.cached_property
def result_f64_def(self) -> OpDef:
"""Report a floating-point result.
This is the generic operation definition. For the instantiated operation, see
`result_f64`.
"""
return self().get_op("result_f64")
[docs]
def result_f64(self, label: str) -> ExtOp:
"""Report a floating-point result.
Args:
label: Label for this result.
"""
return self.result_f64_def.instantiate([StringArg(label)])
@functools.cached_property
def result_int_def(self) -> OpDef:
"""Report a signed integer result.
This is the generic operation definition. For the instantiated operation, see
`result_int`.
"""
return self().get_op("result_int")
[docs]
def result_int(self, label: str, width: int) -> ExtOp:
"""Report a signed integer result.
Args:
label: Label for this result.
width: Bit width of the integer.
"""
return self.result_int_def.instantiate([StringArg(label), BoundedNatArg(width)])
@functools.cached_property
def result_uint_def(self) -> OpDef:
"""Report an unsigned integer result.
This is the generic operation definition. For the instantiated operation, see
`result_uint`.
"""
return self().get_op("result_uint")
[docs]
def result_uint(self, label: str, width: int) -> ExtOp:
"""Report an unsigned integer result.
Args:
label: Label for this result.
width: Bit width of the integer.
"""
return self.result_uint_def.instantiate(
[StringArg(label), BoundedNatArg(width)]
)