from pathlib import Path import json import pandas as pd def ensure_dir(p): p = Path(p) p.mkdir(parents=True, exist_ok=True) return p def json_safe(obj): from pathlib import Path import numpy as np import pandas as pd if isinstance(obj, Path): return str(obj) if isinstance(obj, (str, int, float, bool)) or obj is None: return obj if isinstance(obj, dict): return {str(k): json_safe(v) for k, v in obj.items()} if isinstance(obj, (list, tuple)): return [json_safe(v) for v in obj] if isinstance(obj, pd.DataFrame): return obj.to_dict(orient="records") if isinstance(obj, np.ndarray): return obj.tolist() return obj # fallback