diff --git a/src/eyetrax/__init__.py b/src/eyetrax/__init__.py index f48dc01..00d2a41 100644 --- a/src/eyetrax/__init__.py +++ b/src/eyetrax/__init__.py @@ -1,20 +1,34 @@ -from ._version import __version__ -from .gaze import GazeEstimator -from .filters import make_kalman +from importlib import metadata as _md -from .calibration import ( - run_9_point_calibration, - run_5_point_calibration, - run_lissajous_calibration, - fine_tune_kalman_filter, -) +__version__: str = _md.version(__name__) -__all__ = [ - "__version__", - "GazeEstimator", - "make_kalman", - "run_9_point_calibration", - "run_5_point_calibration", - "run_lissajous_calibration", - "fine_tune_kalman_filter", -] +_lazy_map = { + "GazeEstimator": ("eyetrax.gaze", "GazeEstimator"), + "make_kalman": ("eyetrax.filters", "make_kalman"), + "run_9_point_calibration": ("eyetrax.calibration", "run_9_point_calibration"), + "run_5_point_calibration": ("eyetrax.calibration", "run_5_point_calibration"), + "run_lissajous_calibration": ("eyetrax.calibration", "run_lissajous_calibration"), + "fine_tune_kalman_filter": ("eyetrax.calibration", "fine_tune_kalman_filter"), +} + + +def __getattr__(name: str): + try: + module_name, symbol = _lazy_map[name] + except KeyError: + raise AttributeError(name) from None + + import importlib + + module = importlib.import_module(module_name) + value = getattr(module, symbol) + globals()[name] = value + return value + + +def __dir__(): + std_attrs = set(globals()) | {"__getattr__", "__dir__"} + return sorted(std_attrs | _lazy_map.keys()) + + +__all__ = list(_lazy_map) + ["__version__"]