stouputils.typing package#
This module provides utilities for typing enhancements:
JsonMap,JsonMutMap- Read-only and mutable mapping aliases for JSON dataIterAny,CallableAny- Type aliases for iterables and callablesClassInfo- Type alias for whatisinstanceacceptsis_generic_instance()- Runtime equivalent of isinstance() for generic type hints likedict[str, int]is_sequence()- Check if an object supports O(1)__len__and__getitem__convert_to_serializable()- Recursively convert objects (dataclasses, defaultdicts, …) to JSON-serializable forms@inheritable- Mark a class as meant to be subclassed@overridable- Mark a member as a default implementation that subclasses may replace@hook- Mark a method as a hook the base class calls at a fixed point of its flow
from collections import defaultdict
from dataclasses import dataclass
import stouputils as stp
# isinstance() cannot look inside a dict, is_generic_instance() can
stp.info(stp.is_generic_instance({"lr": 0.1}, dict[str, float]))
stp.info(stp.is_generic_instance({"lr": "high"}, dict[str, float]))
# A list can be indexed, an iterator cannot
stp.info(stp.is_sequence([1, 2]), stp.is_sequence(iter([1, 2])))
# Turn a dataclass holding a defaultdict into plain JSON
@dataclass
class Run:
name: str
scores: defaultdict[str, float]
run = Run("baseline", defaultdict(float, accuracy=0.93))
stp.info(stp.json_dump(stp.convert_to_serializable(run)))