mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-03-15 23:00:25 +01:00
refactor!: if clause in Obs.__init__ eliminated, empty observables need
to be initialized with means=[] from now on.
This commit is contained in:
parent
42df254288
commit
498a251072
3 changed files with 38 additions and 39 deletions
|
@ -358,7 +358,7 @@ def _parse_json_dict(json_dict, verbose=True, full_output=False):
|
||||||
ret = Obs([[ddi[0] + values[0] for ddi in di] for di in od['deltas']], od['names'], idl=od['idl'])
|
ret = Obs([[ddi[0] + values[0] for ddi in di] for di in od['deltas']], od['names'], idl=od['idl'])
|
||||||
ret.is_merged = od['is_merged']
|
ret.is_merged = od['is_merged']
|
||||||
else:
|
else:
|
||||||
ret = Obs([], [])
|
ret = Obs([], [], means=[])
|
||||||
ret._value = values[0]
|
ret._value = values[0]
|
||||||
for name in cd:
|
for name in cd:
|
||||||
co = cd[name][0]
|
co = cd[name][0]
|
||||||
|
@ -383,7 +383,7 @@ def _parse_json_dict(json_dict, verbose=True, full_output=False):
|
||||||
ret.append(Obs([list(di[:, i] + values[i]) for di in od['deltas']], od['names'], idl=od['idl']))
|
ret.append(Obs([list(di[:, i] + values[i]) for di in od['deltas']], od['names'], idl=od['idl']))
|
||||||
ret[-1].is_merged = od['is_merged']
|
ret[-1].is_merged = od['is_merged']
|
||||||
else:
|
else:
|
||||||
ret.append(Obs([], []))
|
ret.append(Obs([], [], means=[]))
|
||||||
ret[-1]._value = values[i]
|
ret[-1]._value = values[i]
|
||||||
print('Created Obs with means= ', values[i])
|
print('Created Obs with means= ', values[i])
|
||||||
for name in cd:
|
for name in cd:
|
||||||
|
@ -410,7 +410,7 @@ def _parse_json_dict(json_dict, verbose=True, full_output=False):
|
||||||
ret.append(Obs([di[:, i] + values[i] for di in od['deltas']], od['names'], idl=od['idl']))
|
ret.append(Obs([di[:, i] + values[i] for di in od['deltas']], od['names'], idl=od['idl']))
|
||||||
ret[-1].is_merged = od['is_merged']
|
ret[-1].is_merged = od['is_merged']
|
||||||
else:
|
else:
|
||||||
ret.append(Obs([], []))
|
ret.append(Obs([], [], means=[]))
|
||||||
ret[-1]._value = values[i]
|
ret[-1]._value = values[i]
|
||||||
for name in cd:
|
for name in cd:
|
||||||
co = cd[name][i]
|
co = cd[name][i]
|
||||||
|
|
|
@ -94,41 +94,40 @@ class Obs:
|
||||||
self.N = 0
|
self.N = 0
|
||||||
self.is_merged = {}
|
self.is_merged = {}
|
||||||
self.idl = {}
|
self.idl = {}
|
||||||
if len(samples):
|
if idl is not None:
|
||||||
if idl is not None:
|
for name, idx in sorted(zip(names, idl)):
|
||||||
for name, idx in sorted(zip(names, idl)):
|
if isinstance(idx, range):
|
||||||
if isinstance(idx, range):
|
self.idl[name] = idx
|
||||||
self.idl[name] = idx
|
elif isinstance(idx, (list, np.ndarray)):
|
||||||
elif isinstance(idx, (list, np.ndarray)):
|
dc = np.unique(np.diff(idx))
|
||||||
dc = np.unique(np.diff(idx))
|
if np.any(dc < 0):
|
||||||
if np.any(dc < 0):
|
raise Exception("Unsorted idx for idl[%s]" % (name))
|
||||||
raise Exception("Unsorted idx for idl[%s]" % (name))
|
if len(dc) == 1:
|
||||||
if len(dc) == 1:
|
self.idl[name] = range(idx[0], idx[-1] + dc[0], dc[0])
|
||||||
self.idl[name] = range(idx[0], idx[-1] + dc[0], dc[0])
|
|
||||||
else:
|
|
||||||
self.idl[name] = list(idx)
|
|
||||||
else:
|
else:
|
||||||
raise Exception('incompatible type for idl[%s].' % (name))
|
self.idl[name] = list(idx)
|
||||||
else:
|
else:
|
||||||
for name, sample in sorted(zip(names, samples)):
|
raise Exception('incompatible type for idl[%s].' % (name))
|
||||||
self.idl[name] = range(1, len(sample) + 1)
|
else:
|
||||||
|
for name, sample in sorted(zip(names, samples)):
|
||||||
|
self.idl[name] = range(1, len(sample) + 1)
|
||||||
|
|
||||||
if kwargs.get("means") is not None:
|
if kwargs.get("means") is not None:
|
||||||
for name, sample, mean in sorted(zip(names, samples, kwargs.get("means"))):
|
for name, sample, mean in sorted(zip(names, samples, kwargs.get("means"))):
|
||||||
self.shape[name] = len(self.idl[name])
|
self.shape[name] = len(self.idl[name])
|
||||||
self.N += self.shape[name]
|
self.N += self.shape[name]
|
||||||
self.r_values[name] = mean
|
self.r_values[name] = mean
|
||||||
self.deltas[name] = sample
|
self.deltas[name] = sample
|
||||||
else:
|
else:
|
||||||
for name, sample in sorted(zip(names, samples)):
|
for name, sample in sorted(zip(names, samples)):
|
||||||
self.shape[name] = len(self.idl[name])
|
self.shape[name] = len(self.idl[name])
|
||||||
self.N += self.shape[name]
|
self.N += self.shape[name]
|
||||||
if len(sample) != self.shape[name]:
|
if len(sample) != self.shape[name]:
|
||||||
raise Exception('Incompatible samples and idx for %s: %d vs. %d' % (name, len(sample), self.shape[name]))
|
raise Exception('Incompatible samples and idx for %s: %d vs. %d' % (name, len(sample), self.shape[name]))
|
||||||
self.r_values[name] = np.mean(sample)
|
self.r_values[name] = np.mean(sample)
|
||||||
self.deltas[name] = sample - self.r_values[name]
|
self.deltas[name] = sample - self.r_values[name]
|
||||||
self._value += self.shape[name] * self.r_values[name]
|
self._value += self.shape[name] * self.r_values[name]
|
||||||
self._value /= self.N
|
self._value /= self.N
|
||||||
|
|
||||||
self._dvalue = 0.0
|
self._dvalue = 0.0
|
||||||
self.ddvalue = 0.0
|
self.ddvalue = 0.0
|
||||||
|
@ -1522,7 +1521,7 @@ def cov_Obs(means, cov, name, grad=None):
|
||||||
co : Covobs
|
co : Covobs
|
||||||
Covobs to be embedded into the Obs
|
Covobs to be embedded into the Obs
|
||||||
"""
|
"""
|
||||||
o = Obs([], [])
|
o = Obs([], [], means=[])
|
||||||
o._value = co.value
|
o._value = co.value
|
||||||
o.names.append(co.name)
|
o.names.append(co.name)
|
||||||
o._covobs[co.name] = co
|
o._covobs[co.name] = co
|
||||||
|
|
|
@ -653,7 +653,7 @@ def test_covariance_symmetry():
|
||||||
|
|
||||||
def test_empty_obs():
|
def test_empty_obs():
|
||||||
o = pe.Obs([np.random.rand(100)], ['test'])
|
o = pe.Obs([np.random.rand(100)], ['test'])
|
||||||
q = o + pe.Obs([], [])
|
q = o + pe.Obs([], [], means=[])
|
||||||
assert q == o
|
assert q == o
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue