from __future__ import annotations import os from typing import Any, Dict def _flag(name: str) -> bool: val = os.getenv(name, "0").lower() return val in ("1", "true", "yes") def debug_enabled() -> bool: return _flag("NSA_DEBUG_LOG") _COUNTS: Dict[str, int] = {} def log(tag: str, **fields: Any) -> None: if not debug_enabled(): return limit_env = os.getenv("NSA_LOG_LIMIT") if limit_env is not None: try: limit = int(limit_env) except Exception: limit = 0 if limit > 0: cnt = _COUNTS.get(tag, 0) if cnt >= limit: return _COUNTS[tag] = cnt + 1 parts = [f"{k}={_safe(v)}" for k, v in fields.items()] print(f"NSA-LOG {tag} " + " ".join(parts)) def _safe(v: Any) -> str: try: if isinstance(v, int | float | str): return str(v) if hasattr(v, "shape"): return str(tuple(int(x) for x in v.shape)) return str(v) except Exception: return ""