def get_smallest_possible(vals): """Returns smallest (fewest bits) possible DataType that can represent value. Prefers unsigned integers where possible.""" vals = np.array(vals) for v in vals: assert int(v) == v, "Error float value" for k in DataType.get_accumulator_dt_cands(): dt = DataType[k] if dt in [DataType["BIPOLAR"], DataType["TERNARY"], DataType["FLOAT32"]]: # not currently supported continue if (dt.min() <= vals).all() and (vals <= dt.max()).all(): return dt warnings.warn( """InferChannelwiseLinearLayer: Output values may not be representable with supported data types. Setting maximum width data type available. This will lead to errors if there are no constrains on the input """ ) if (0 <= vals).all(): return DataType["UINT64"] else: return DataType["INT64"]
def get_smallest_possible(self, vals): """Returns smallest (fewest bits) possible DataType that can represent value. Prefers unsigned integers where possible.""" vals = np.array(vals) for v in vals: assert int(v) == v, "Error float value" cands = DataType.get_accumulator_dt_cands() for k in cands: dt = DataType[k] if (dt.min() <= vals).all() and (vals <= dt.max()).all(): return dt