import math from decimal import Decimal from typing import Any def clean_nans(obj: Any) -> Any: """ Recursive utility to replace NaN, Infinity, and -Infinity with None to ensure JSON compatibility. Standards Moez Elbey: Missing data => null/None. """ if isinstance(obj, float): if math.isnan(obj) or math.isinf(obj): return None return obj elif isinstance(obj, Decimal): return float(obj) elif isinstance(obj, dict): return {k: clean_nans(v) for k, v in obj.items()} elif isinstance(obj, list): return [clean_nans(v) for v in obj] return obj