LexiMind / src /training /utils.py
OliverPerrin
Full training run, code cleanup, mypy/ruff fixes
a47e5cf
"""
Training utilities for LexiMind.
Provides reproducibility helpers including seed management for stdlib, PyTorch,
and NumPy random number generators with thread-safe spawning support.
Author: Oliver Perrin
Date: December 2025
"""
from __future__ import annotations
import random
import threading
from typing import Optional
import numpy as np
import torch
_seed_sequence: Optional[np.random.SeedSequence] = None
_seed_lock = threading.Lock()
_spawn_counter = 0
_thread_local = threading.local()
def set_seed(seed: int) -> np.random.Generator:
"""Seed stdlib/Torch RNGs and initialise this thread's NumPy generator."""
random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
base_seq = np.random.SeedSequence(seed)
child = base_seq.spawn(1)[0]
rng = np.random.default_rng(child)
global _seed_sequence, _spawn_counter
with _seed_lock:
_seed_sequence = base_seq
_spawn_counter = 1
_thread_local.rng = rng
return rng