Source code for oasislmf.cli.warmup
from .command import OasisBaseCommand
import os
from pathlib import Path
[docs]
class WarmupCmd(OasisBaseCommand):
"""
Pre-compiles all Numba JIT functions to eliminate cold-start overhead.
"""
[docs]
def action(self, args):
"""
Runs the JIT warmup in parallel across all pytools modules.
:param args: The arguments from the command line
:type args: Namespace
"""
from oasislmf.warmup import warmup, _DATA_DIR
if os.environ.get("NUMBA_DISABLE_JIT") == "1":
self.logger.info("NUMBA_DISABLE_JIT=1 — skipping JIT warmup.")
return
from oasislmf.warmup import ALL_SILENT_TASKS
self.logger.info(
f"Warming Numba JIT cache ({len(ALL_SILENT_TASKS)} tasks, "
f"max_workers={os.cpu_count()}) ..."
)
errors = warmup()
if errors:
for name, err in errors.items():
self.logger.error(f" {name}: {err}")
self.logger.error(f"FAILED — {len(errors)} task(s)")
return 1
else:
pkg_root = Path(_DATA_DIR).resolve().parents[1]
cache_count = sum(1 for _ in pkg_root.rglob("*.nbi"))
self.logger.info(f"Done — {cache_count} Numba cache files written.")