Source code for elasticai.creator.nn.fixed_point.number_converter
import dataclasses
from .number_conversion import (
bits_to_integer,
bits_to_rational,
convert_rational_to_bit_pattern,
integer_to_bits,
max_integer,
max_natural,
max_rational,
min_integer,
min_natural,
min_rational,
)
[docs]
@dataclasses.dataclass
class FXPParams:
total_bits: int
frac_bits: int
[docs]
class NumberConverter:
def __init__(self, fxp_params: FXPParams):
self._fxp_params = fxp_params
[docs]
def bits_to_integer(self, pattern: str) -> int:
return bits_to_integer(pattern)
[docs]
def bits_to_rational(self, pattern: str) -> float:
return bits_to_rational(pattern, frac_bits=self._fxp_params.frac_bits)
[docs]
def rational_to_bits(self, rational: float) -> str:
return convert_rational_to_bit_pattern(
rational=rational,
total_bits=self._fxp_params.total_bits,
frac_bits=self._fxp_params.frac_bits,
)
[docs]
def bits_to_natural(self, pattern: str) -> int:
return bits_to_rational(pattern, frac_bits=self._fxp_params.frac_bits)
[docs]
def integer_to_bits(self, number: int) -> str:
return integer_to_bits(number, total_bits=self._fxp_params.total_bits)
@property
def max_rational(self) -> float:
return max_rational(
total_bits=self._fxp_params.total_bits, frac_bits=self._fxp_params.frac_bits
)
@property
def max_integer(self) -> int:
return max_integer(total_bits=self._fxp_params.total_bits)
@property
def min_rational(self) -> float:
return min_rational(
total_bits=self._fxp_params.total_bits, frac_bits=self._fxp_params.frac_bits
)
@property
def min_integer(self) -> int:
return min_integer(total_bits=self._fxp_params.total_bits)
@property
def max_natural(self) -> int:
return max_natural(total_bits=self._fxp_params.total_bits)
@property
def min_natural(self) -> int:
return min_natural(total_bits=self._fxp_params.total_bits)