Source code for sim_panel.generators.rng
from __future__ import annotations
import hashlib
from typing import Any, Dict
import numpy as np
[docs]
def make_rng(seed: int) -> np.random.Generator:
return np.random.default_rng(seed)
[docs]
def stable_event_id(namespace: str, payload: Dict[str, Any]) -> str:
"""
Deterministic event id from a namespace + canonicalized payload.
"""
items = []
for k in sorted(payload.keys()):
items.append(f"{k}={_stable_repr(payload[k])}")
msg = (namespace + "|" + "|".join(items)).encode("utf-8")
return hashlib.blake2b(msg, digest_size=16).hexdigest()
def _stable_repr(x: Any) -> str:
if x is None:
return "null"
if isinstance(x, (str, int, float, bool)):
return repr(x)
if isinstance(x, list):
return "[" + ",".join(_stable_repr(v) for v in x) + "]"
if isinstance(x, dict):
return "{" + ",".join(f"{k}:{_stable_repr(x[k])}" for k in sorted(x.keys())) + "}"
return f"<{type(x).__name__}:{repr(x)}>"