Source code for qualia_codegen_core.graph.ActivationsRange

from __future__ import annotations

from qualia_codegen_core.typing import TYPE_CHECKING

from .ActivationRange import ActivationRange
from .RoundMode import RoundMode

if TYPE_CHECKING:
    from pathlib import Path

[docs] class ActivationsRange(dict[str, ActivationRange]): def __int_or_none(self, s: str) -> int | None: if s == 'None': return None return int(s) def __roundmode_or_none(self, s: str) -> RoundMode | None: if s == 'None': return None return RoundMode(s)
[docs] def load(self, path: Path, input_layer_name: str) -> ActivationsRange: first_input_bits: int | None = None first_input_q: int | None = None first_input_round_mode: RoundMode | None = None with path.open() as f: for line in f: r = line.strip().split(',') self[r[0]] = ActivationRange(self.__int_or_none(r[1]), # input_bits self.__int_or_none(r[2]), # activation_bits self.__int_or_none(r[3]), # weights_bits self.__int_or_none(r[4]), # bias_bits self.__int_or_none(r[5]), # input_q self.__int_or_none(r[6]), # activation_q self.__int_or_none(r[7]), # weights_q self.__int_or_none(r[8]), # bias_q self.__roundmode_or_none(r[9]), # input_round_mode self.__roundmode_or_none(r[10]), # activation_round_mode self.__roundmode_or_none(r[11])) # weights_round_mode if first_input_bits is None: first_input_bits = self.__int_or_none(r[1]) if first_input_q is None: first_input_q = self.__int_or_none(r[5]) if first_input_round_mode is None: first_input_round_mode = self[r[0]].input_round_mode # Model input range self[input_layer_name] = ActivationRange(first_input_bits, # input_bits first_input_bits, # activation_bits 0, # weights_bits None, # bias_bits first_input_q, # input_q first_input_q, # activation_q 0, # weights_q None, # bias_q first_input_round_mode, # input_round_mode first_input_round_mode, # activation_round_mode None) # weights_round_mode return self