Source code for base_attentive.keras_runtime

"""Public Keras runtime helpers for Base-Attentive.

This module is the public entry point for backend-aware Keras runtime
access. Internal bootstrap details remain private in ``_bootstrap``.
"""

from __future__ import annotations

import importlib
from typing import Any

__all__ = [
    "get_layer_class",
    "get_model_class",
    "register_keras_serializable",
    "resolve_keras_dep",
]


for _cached_name in (
    "KERAS_BACKEND",
    "KERAS_DEPS",
    "dependency_message",
):
    globals().pop(_cached_name, None)


def _bootstrap_module():
    return importlib.import_module(
        "base_attentive._bootstrap"
    )


def _internal_runtime_module():
    return importlib.import_module(
        "base_attentive._keras_runtime"
    )


def __getattr__(name: str) -> Any:
    if name in {
        "KERAS_BACKEND",
        "KERAS_DEPS",
        "dependency_message",
    }:
        value = getattr(_bootstrap_module(), name)
        globals()[name] = value
        return value
    raise AttributeError(
        f"module {__name__!r} has no attribute {name!r}"
    )


[docs] def get_layer_class(): return _internal_runtime_module().get_layer_class()
[docs] def get_model_class(): return _internal_runtime_module().get_model_class()
[docs] def register_keras_serializable( package="Custom", name=None, ): return _internal_runtime_module().register_keras_serializable( package=package, name=name, )
[docs] def resolve_keras_dep(name: str, fallback: Any = None) -> Any: runtime = _internal_runtime_module() if fallback is None: return runtime.resolve_keras_dep(name) return runtime.resolve_keras_dep(name, fallback=fallback)
def __dir__() -> list[str]: return sorted(set(globals()) | set(__all__))