Files
ray-project--ray/python/ray/air/_internal/json.py
T
2026-07-13 13:17:40 +08:00

32 lines
908 B
Python

import json
import numbers
import numpy as np
class SafeFallbackEncoder(json.JSONEncoder):
def __init__(self, nan_str="null", **kwargs):
super(SafeFallbackEncoder, self).__init__(**kwargs)
self.nan_str = nan_str
def default(self, value):
try:
if type(value).__module__ == np.__name__ and isinstance(value, np.ndarray):
return value.tolist()
if isinstance(value, np.bool_):
return bool(value)
if np.isnan(value):
return self.nan_str
if issubclass(type(value), numbers.Integral):
return int(value)
if issubclass(type(value), numbers.Number):
return float(value)
return super(SafeFallbackEncoder, self).default(value)
except Exception:
return str(value) # give up, just stringify it (ok for logs)