Merge branch 'develop' into documentation

This commit is contained in:
s-kuberski 2021-12-02 11:46:30 +00:00
commit c0cce90702
2 changed files with 43 additions and 25 deletions

View file

@ -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.
@ -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
@ -72,15 +72,16 @@ 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.")
def write_Obs_to_dict(o):
d = {}
@ -106,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):
@ -123,13 +123,15 @@ 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:
@ -145,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)):
@ -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,14 @@ 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

View file

@ -584,6 +584,20 @@ def test_covobs():
def test_covobs_overloading():
covobs = pe.cov_Obs([0.5, 0.5], np.array([[0.02, 0.02], [0.02, 0.02]]), 'Zfactor')
covobs = pe.cov_Obs([0.5, 0.5], np.array([[0.02, 0.02], [0.02, 0.02]]), 'test')
assert (covobs[0] / covobs[1]) == 1
assert (covobs[0] - covobs[1]) == 0
my_obs = pe.pseudo_Obs(2.3, 0.2, 'obs')
assert (my_obs * covobs[0] / covobs[1]) == my_obs
covobs = pe.cov_Obs(0.0, 0.3, 'test')
assert not covobs.is_zero()
def test_covobs_name_collision():
covobs = pe.cov_Obs(0.5, 0.002, 'test')
my_obs = pe.pseudo_Obs(2.3, 0.2, 'test')
with pytest.raises(Exception):
summed_obs = my_obs + covobs