Source code for exosim.output.utils

import astropy.units as u
import h5py
import numpy as np
from astropy.table import QTable, Table

import exosim.models.signal as signal


[docs]def recursively_save_dict_contents_to_output(output, dic): """ Will recursive write a dictionary into output. Parameters ---------- :class:`~exosim.output.output.Output` : Group (or root) in output file to write to dic : :obj:`dict` Dictionary we want to write """ for key, item in dic.items(): try: store_thing(output, key, item) except TypeError: raise ValueError("Cannot write %s type" % type(item)) return
[docs]def store_thing(output, key, item): """ It stores one thing into the :class:`~exosim.output.output.Output` Parameters ---------- :class:`~exosim.output.output.Output`: Group (or root) in output file to write to key: str name for the stored item item: obj item to store """ if isinstance(item, u.Quantity): output.write_quantity(key, item) elif isinstance( item, ( float, int, np.int64, np.float64, ), ): output.write_scalar(key, item) elif isinstance(item, np.ndarray): if True in [isinstance(x, str) for x in item]: output.write_string_array(key, item) else: output.write_array(key, item) elif isinstance(item, (str,)): output.write_string(key, item) elif isinstance(item, (Table, QTable)): output.write_table(key, item) elif isinstance(item, signal.Signal): item.write(output, key) # group = output.create_group(key) # recursively_save_dict_contents_to_output(group, item.to_dict()) elif isinstance( item, ( list, tuple, ), ): if isinstance(item, tuple): item = list(item) if True in [isinstance(x, str) for x in item]: output.write_string_array(key, np.array(item)) else: try: output.write_array(key, np.array(item)) except (TypeError, ValueError): for idx, val in enumerate(item): new_key = "{}{}".format(key, idx) store_thing(output, new_key, val) elif isinstance(item, dict): group = output.create_group(key) recursively_save_dict_contents_to_output(group, item) elif item is None: pass else: raise TypeError return