From 2a046116ce9cbbf1a55f65bfaffe1ad33d35529e Mon Sep 17 00:00:00 2001 From: Kristian Hartikainen Date: Mon, 18 Mar 2019 16:34:56 -0700 Subject: [PATCH] [tune] Fix _SafeFallbackEncoder type checks (#4238) * Fix numpy type checks for _SafeFallbackEncoder * Format changes * Fix usage of nan_str in _SafeFallbackEncoder --- python/ray/tune/logger.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/python/ray/tune/logger.py b/python/ray/tune/logger.py index 2aa30ceb5..6095cfb4d 100644 --- a/python/ray/tune/logger.py +++ b/python/ray/tune/logger.py @@ -5,10 +5,12 @@ from __future__ import print_function import csv import json import logging -import numpy as np import os import yaml import distutils.version +import numbers + +import numpy as np import ray.cloudpickle as cloudpickle from ray.tune.log_sync import get_syncer @@ -255,11 +257,19 @@ class _SafeFallbackEncoder(json.JSONEncoder): def default(self, value): try: if np.isnan(value): - return None - if np.issubdtype(value, float): - return float(value) - if np.issubdtype(value, int): + return self.nan_str + + if (type(value).__module__ == np.__name__ + and isinstance(value, np.ndarray)): + return value.tolist() + + 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)