Source code for matcal.core.serializer_wrapper

from builtins import ImportError
import numpy as np

try:
    import pickle as pickle_serializer
except ImportError as e:
    raise e("MatCal requires pickle")

try:
    import json as json_serializer
except ImportError as e:
    raise e("MatCal requires json")

try:
    import joblib as joblib_serializer
except ImportError as e:
    raise e("MatCal requires joblib")

serial_file_ext = '.serialized'

def _get_extension(filename):
    extension = filename.split('.')[-1]
    return extension

def _dump_json(filename, object_to_be_saved):
    with open(filename, 'w') as f:
        json_serializer.dump(object_to_be_saved, f)

def _load_json(filename):
    info = None
    with open(filename, 'r') as f:
        info = json_serializer.load(f)
    return info

def _dump_joblib(filename, object_to_be_saved):
    joblib_serializer.dump(object_to_be_saved, filename)

def _load_joblib(filename):
    return joblib_serializer.load(filename)

def _dump_pickle(filename, object_to_be_saved):
    with open(filename, 'wb') as f:
        pickle_serializer.dump(object_to_be_saved, f)

def _load_pickle(filename):
    info = None
    with open(filename, 'rb') as f:
        info = pickle_serializer.load(f)
    return info


serializer_lookup = {'serialized':(_dump_json, _load_json), 'json':(_dump_json, _load_json), 'joblib':(_dump_joblib, _load_joblib),
                     'pcl':(_dump_pickle, _load_pickle), 'pickle':(_dump_pickle, _load_pickle)}

[docs] def matcal_save(filename, object_to_dump): """ Store an object generated in MatCal to a file. It is recommended that filenames of .joblib or .json are used. Note that using different filename extensions will call different savers which allow for storing different levels of complex objects. :param filename: Name of file to store object. Must have an extension of (.serialized, .json, .joblib, .pcl, .pickle) :type filename: str :param object_to_dump: The object to be store. """ extension = _get_extension(filename) dumper = serializer_lookup[extension][0] dumper(filename, object_to_dump)
[docs] def matcal_load(filename): """ Load a previously stored object. :param filename: Name of file to load object from. Must have an extension of (.serialized, .json, .joblib, .pcl, .pickle) :type filename: str """ extension = _get_extension(filename) loader = serializer_lookup[extension][1] return loader(filename)
def _format_serial(potential_array): if not isinstance(potential_array, np.ndarray): return potential_array else: return potential_array.tolist()