feat: Minor improvemens to json file format

This commit is contained in:
Fabian Joswig 2021-12-02 11:14:05 +00:00
parent dbcdfacf56
commit a67e83f77b

View file

@ -1,13 +1,13 @@
import json import json
import gzip import gzip
from ..obs import Obs import numpy as np
import getpass import getpass
import socket import socket
import datetime import datetime
from .. import version as pyerrorsversion
import platform import platform
import numpy as np
import warnings import warnings
from ..obs import Obs
from .. import version as pyerrorsversion
def create_json_string(ol, description='', indent=1): def create_json_string(ol, description='', indent=1):
@ -15,13 +15,13 @@ def create_json_string(ol, description='', indent=1):
to a .json(.gz) file to a .json(.gz) file
Parameters Parameters
----------------- ----------
ol : list ol : list
List of objects that will be exported. At the moments, these objects can be List of objects that will be exported. At the moments, these objects can be
either of: Obs, list, np.ndarray either of: Obs, list, numpy.ndarray.
All Obs inside a structure have to be defined on the same set of configurations. All Obs inside a structure have to be defined on the same set of configurations.
description : str description : str
Optional string that describes the contents of the json file Optional string that describes the contents of the json file.
indent : int indent : int
Specify the indentation level of the json file. None or 0 is permissible and Specify the indentation level of the json file. None or 0 is permissible and
saves disk space. saves disk space.
@ -72,15 +72,17 @@ def create_json_string(ol, description='', indent=1):
def _assert_equal_properties(ol, otype=Obs): def _assert_equal_properties(ol, otype=Obs):
for o in ol: for o in ol:
if not isinstance(o, otype): if not isinstance(o, otype):
raise Exception('Wrong data type in list!') raise Exception("Wrong data type in list.")
for o in ol[1:]: for o in ol[1:]:
if not ol[0].is_merged == o.is_merged: if not ol[0].is_merged == o.is_merged:
raise Exception('All Obs in list have to be defined on the same set of configs!') raise Exception("All Obs in list have to be defined on the same set of configs.")
if not ol[0].reweighted == o.reweighted: if not ol[0].reweighted == o.reweighted:
raise Exception('All Obs in list have to have the same property .reweighted!') raise Exception("All Obs in list have to have the same property 'reweighted'.")
if not ol[0].e_content == o.e_content: if not ol[0].e_content == o.e_content:
raise Exception('All Obs in list have to be defined on the same set of configs!') raise Exception("All Obs in list have to be defined on the same set of configs.")
# more stringend tests --> compare idl? if not ol[0].idl == o.idl:
raise Exception("All Obs in list have to be defined on the same set of configurations.")
# TODO: more stringend tests --> compare idl?
def write_Obs_to_dict(o): def write_Obs_to_dict(o):
d = {} d = {}
@ -123,13 +125,14 @@ def create_json_string(ol, description='', indent=1):
d['value'] = [o.value for o in ol] d['value'] = [o.value for o in ol]
d['data'] = _gen_data_d_from_list(ol) d['data'] = _gen_data_d_from_list(ol)
return d return d
if not isinstance(ol, list): if not isinstance(ol, list):
ol = [ol] ol = [ol]
d = {} d = {}
d['program'] = 'pyerrors %s' % (pyerrorsversion.__version__) d['program'] = 'pyerrors %s' % (pyerrorsversion.__version__)
d['version'] = '0.1' d['version'] = '0.1'
d['who'] = getpass.getuser() d['who'] = getpass.getuser()
d['date'] = str(datetime.datetime.now())[:-7] d['date'] = datetime.datetime.now().astimezone().strftime('%Y-%m-%d %H:%M:%S %Z')
d['host'] = socket.gethostname() + ', ' + platform.platform() d['host'] = socket.gethostname() + ', ' + platform.platform()
if description: if description:
@ -167,15 +170,15 @@ def dump_to_json(ol, fname, description='', indent=1, gz=True):
"""Export a list of Obs or structures containing Obs to a .json(.gz) file """Export a list of Obs or structures containing Obs to a .json(.gz) file
Parameters Parameters
----------------- ----------
ol : list ol : list
List of objects that will be exported. At the moments, these objects can be List of objects that will be exported. At the moments, these objects can be
either of: Obs, list, np.ndarray either of: Obs, list, numpy.ndarray.
All Obs inside a structure have to be defined on the same set of configurations. All Obs inside a structure have to be defined on the same set of configurations.
fname : str fname : str
Filename of the output file Filename of the output file.
description : str description : str
Optional string that describes the contents of the json file Optional string that describes the contents of the json file.
indent : int indent : int
Specify the indentation level of the json file. None or 0 is permissible and Specify the indentation level of the json file. None or 0 is permissible and
saves disk space. saves disk space.
@ -202,13 +205,13 @@ def dump_to_json(ol, fname, description='', indent=1, gz=True):
def load_json(fname, verbose=True, gz=True, full_output=False): def load_json(fname, verbose=True, gz=True, full_output=False):
"""Import a list of Obs or structures containing Obs from a .json.gz file. """Import a list of Obs or structures containing Obs from a .json.gz file.
The following structures are supported: Obs, list, np.ndarray The following structures are supported: Obs, list, numpy.ndarray
If the list contains only one element, it is unpacked from the list. If the list contains only one element, it is unpacked from the list.
Parameters Parameters
----------------- ----------
fname : str fname : str
Filename of the input file Filename of the input file.
verbose : bool verbose : bool
Print additional information that was written to the file. Print additional information that was written to the file.
gz : bool gz : bool