From a67e83f77b30f068b902f31b2516cc9b22237947 Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Thu, 2 Dec 2021 11:14:05 +0000 Subject: [PATCH 1/2] feat: Minor improvemens to json file format --- pyerrors/input/json.py | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/pyerrors/input/json.py b/pyerrors/input/json.py index 4ca0e47b..0cb8eae9 100644 --- a/pyerrors/input/json.py +++ b/pyerrors/input/json.py @@ -1,13 +1,13 @@ import json import gzip -from ..obs import Obs +import numpy as np import getpass import socket import datetime -from .. import version as pyerrorsversion import platform -import numpy as np import warnings +from ..obs import Obs +from .. import version as pyerrorsversion 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 Parameters - ----------------- + ---------- ol : list 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. description : str - Optional string that describes the contents of the json file + Optional string that describes the contents of the json file. indent : int Specify the indentation level of the json file. None or 0 is permissible and saves disk space. @@ -72,15 +72,17 @@ def create_json_string(ol, description='', indent=1): def _assert_equal_properties(ol, otype=Obs): for o in ol: if not isinstance(o, otype): - raise Exception('Wrong data type in list!') + raise Exception("Wrong data type in list.") for o in ol[1:]: 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: - 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: - raise Exception('All Obs in list have to be defined on the same set of configs!') - # more stringend tests --> compare idl? + raise Exception("All Obs in list have to be defined on the same set of configs.") + 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): d = {} @@ -123,13 +125,14 @@ def create_json_string(ol, description='', indent=1): d['value'] = [o.value for o in ol] d['data'] = _gen_data_d_from_list(ol) return d + if not isinstance(ol, list): ol = [ol] d = {} d['program'] = 'pyerrors %s' % (pyerrorsversion.__version__) d['version'] = '0.1' 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() 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 Parameters - ----------------- + ---------- ol : list 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. fname : str - Filename of the output file + Filename of the output file. description : str - Optional string that describes the contents of the json file + Optional string that describes the contents of the json file. indent : int Specify the indentation level of the json file. None or 0 is permissible and 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): """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. Parameters - ----------------- + ---------- fname : str - Filename of the input file + Filename of the input file. verbose : bool Print additional information that was written to the file. gz : bool From d837e477774d117826e2a99c3ad66ae14644865c Mon Sep 17 00:00:00 2001 From: Fabian Joswig Date: Thu, 2 Dec 2021 11:32:28 +0000 Subject: [PATCH 2/2] refactor: formatting improvements --- pyerrors/input/json.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pyerrors/input/json.py b/pyerrors/input/json.py index 0cb8eae9..ce2e2fed 100644 --- a/pyerrors/input/json.py +++ b/pyerrors/input/json.py @@ -33,7 +33,7 @@ def create_json_string(ol, description='', indent=1): _default.default = json.JSONEncoder().default my_encoder.default = _default - class deltalist: + class Deltalist: def __init__(self, li): self.cnfg = li[0] self.deltas = li[1:] @@ -64,7 +64,7 @@ def create_json_string(ol, description='', indent=1): rd['deltas'].append([ol[0].idl[r_name][i]]) for o in ol: rd['deltas'][-1].append(o.deltas[r_name][i]) - rd['deltas'][-1] = deltalist(rd['deltas'][-1]) + rd['deltas'][-1] = Deltalist(rd['deltas'][-1]) ed['replica'].append(rd) dl.append(ed) return dl @@ -82,7 +82,6 @@ def create_json_string(ol, description='', indent=1): raise Exception("All Obs in list have to be defined on the same set of configs.") 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): d = {} @@ -108,7 +107,6 @@ def create_json_string(ol, description='', indent=1): d['reweighted'] = ol[0].reweighted d['value'] = [o.value for o in ol] d['data'] = _gen_data_d_from_list(ol) - return d def write_Array_to_dict(oa): @@ -128,6 +126,7 @@ def create_json_string(ol, description='', indent=1): if not isinstance(ol, list): ol = [ol] + d = {} d['program'] = 'pyerrors %s' % (pyerrorsversion.__version__) d['version'] = '0.1' @@ -148,9 +147,10 @@ def create_json_string(ol, description='', indent=1): jsonstring = json.dumps(d, indent=indent, cls=my_encoder, ensure_ascii=False) - # workaround for un-quoting of delta lists, adds 5% of work - # but is save, compared to a simple replace that could destroy the structure def remove_quotationmarks(s): + """Workaround for un-quoting of delta lists, adds 5% of work + but is save, compared to a simple replace that could destroy the structure + """ deltas = False split = s.split('\n') for i in range(len(split)): @@ -205,6 +205,7 @@ def dump_to_json(ol, fname, description='', indent=1, gz=True): 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. + The following structures are supported: Obs, list, numpy.ndarray If the list contains only one element, it is unpacked from the list.