asadi / evaluation /utils /json_helpers.py
smjfas's picture
initial commit
16a0f31
raw
history blame
1.57 kB
# -----------------------------------------------------------------------------
# Do Not Alter This File!
# -----------------------------------------------------------------------------
# The following code is part of the logic used for loading and evaluating your
# output scores. Please DO NOT modify this section, as upon your submission,
# the whole evaluation logic will be overwritten by the original code.
# -----------------------------------------------------------------------------
import json
import numpy as np
class NumpyEncoder(json.JSONEncoder):
"""Special json encoder for numpy types"""
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return {
"__ndarray__": obj.tolist(),
"dtype": str(obj.dtype),
"shape": obj.shape,
}
else:
return super(NumpyEncoder, self).default(obj)
def dict_to_json(dct, filename):
"""Save a dictionary to a JSON file"""
with open(filename, "w") as f:
json.dump(dct, f, cls=NumpyEncoder)
def json_to_dict(filename):
"""Load a JSON file and convert it back to a dictionary of NumPy arrays"""
with open(filename, "r") as f:
dct = json.load(f)
for k, v in dct.items():
if isinstance(v, dict) and "__ndarray__" in v:
dct[k] = np.array(v["__ndarray__"], dtype=v["dtype"]).reshape(v["shape"])
return dct