mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-14 19:43:41 +02:00
[Fix] Further type fixes in fits and sfcf
This commit is contained in:
parent
9c960ae24c
commit
5376a8ad44
2 changed files with 41 additions and 44 deletions
|
@ -55,12 +55,12 @@ class Fit_result(Sequence):
|
||||||
|
|
||||||
def __getitem__(self, idx: int) -> Obs:
|
def __getitem__(self, idx: int) -> Obs:
|
||||||
if self.fit_parameters is None:
|
if self.fit_parameters is None:
|
||||||
raise ValueError('No fit parameters available.')
|
raise TypeError('No fit parameters available.')
|
||||||
return self.fit_parameters[idx]
|
return self.fit_parameters[idx]
|
||||||
|
|
||||||
def __len__(self) -> int:
|
def __len__(self) -> int:
|
||||||
if self.fit_parameters is None:
|
if self.fit_parameters is None:
|
||||||
raise ValueError('No fit parameters available.')
|
raise TypeError('No fit parameters available.')
|
||||||
return len(self.fit_parameters)
|
return len(self.fit_parameters)
|
||||||
|
|
||||||
def gamma_method(self, **kwargs):
|
def gamma_method(self, **kwargs):
|
||||||
|
@ -71,19 +71,19 @@ class Fit_result(Sequence):
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
my_str = 'Goodness of fit:\n'
|
my_str = 'Goodness of fit:\n'
|
||||||
if hasattr(self, 'chisquare_by_dof'):
|
if self.chisquare_by_dof is not None:
|
||||||
my_str += '\u03C7\u00b2/d.o.f. = ' + f'{self.chisquare_by_dof:2.6f}' + '\n'
|
my_str += '\u03C7\u00b2/d.o.f. = ' + f'{self.chisquare_by_dof:2.6f}' + '\n'
|
||||||
elif hasattr(self, 'residual_variance'):
|
elif self.residual_variance is not None:
|
||||||
my_str += 'residual variance = ' + f'{self.residual_variance:2.6f}' + '\n'
|
my_str += 'residual variance = ' + f'{self.residual_variance:2.6f}' + '\n'
|
||||||
if hasattr(self, 'chisquare_by_expected_chisquare'):
|
if self.chisquare_by_expected_chisquare is not None:
|
||||||
my_str += '\u03C7\u00b2/\u03C7\u00b2exp = ' + f'{self.chisquare_by_expected_chisquare:2.6f}' + '\n'
|
my_str += '\u03C7\u00b2/\u03C7\u00b2exp = ' + f'{self.chisquare_by_expected_chisquare:2.6f}' + '\n'
|
||||||
if hasattr(self, 'p_value'):
|
if self.p_value is not None:
|
||||||
my_str += 'p-value = ' + f'{self.p_value:2.4f}' + '\n'
|
my_str += 'p-value = ' + f'{self.p_value:2.4f}' + '\n'
|
||||||
if hasattr(self, 't2_p_value'):
|
if self.t2_p_value is not None:
|
||||||
my_str += 't\u00B2p-value = ' + f'{self.t2_p_value:2.4f}' + '\n'
|
my_str += 't\u00B2p-value = ' + f'{self.t2_p_value:2.4f}' + '\n'
|
||||||
my_str += 'Fit parameters:\n'
|
my_str += 'Fit parameters:\n'
|
||||||
if self.fit_parameters is None:
|
if self.fit_parameters is None:
|
||||||
raise ValueError('No fit parameters available.')
|
raise TypeError('No fit parameters available.')
|
||||||
for i_par, par in enumerate(self.fit_parameters):
|
for i_par, par in enumerate(self.fit_parameters):
|
||||||
my_str += str(i_par) + '\t' + ' ' * int(par >= 0) + str(par).rjust(int(par < 0.0)) + '\n'
|
my_str += str(i_par) + '\t' + ' ' * int(par >= 0) + str(par).rjust(int(par < 0.0)) + '\n'
|
||||||
return my_str
|
return my_str
|
||||||
|
|
|
@ -7,7 +7,7 @@ from ..obs import Obs
|
||||||
from .utils import sort_names, check_idl
|
from .utils import sort_names, check_idl
|
||||||
import itertools
|
import itertools
|
||||||
from numpy import ndarray
|
from numpy import ndarray
|
||||||
from typing import Union, Optional
|
from typing import Any, Union, Optional
|
||||||
|
|
||||||
|
|
||||||
sep = "/"
|
sep = "/"
|
||||||
|
@ -164,10 +164,9 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
else:
|
else:
|
||||||
compact = False
|
compact = False
|
||||||
appended = False
|
appended = False
|
||||||
ls = []
|
ls = kwargs.get("replica")
|
||||||
if "replica" in kwargs:
|
if ls is None:
|
||||||
ls = kwargs.get("replica")
|
ls = []
|
||||||
else:
|
|
||||||
for (dirpath, dirnames, filenames) in os.walk(path):
|
for (dirpath, dirnames, filenames) in os.walk(path):
|
||||||
if not appended:
|
if not appended:
|
||||||
ls.extend(dirnames)
|
ls.extend(dirnames)
|
||||||
|
@ -192,13 +191,12 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
if not silent:
|
if not silent:
|
||||||
print('Read', part, 'part of', name_list, 'from', prefix[:-1], ',', replica, 'replica')
|
print('Read', part, 'part of', name_list, 'from', prefix[:-1], ',', replica, 'replica')
|
||||||
|
|
||||||
if 'names' in kwargs:
|
new_names = kwargs.get('names')
|
||||||
new_names = kwargs.get('names')
|
if new_names is not None:
|
||||||
if len(new_names) != len(set(new_names)):
|
if len(new_names) != len(set(new_names)):
|
||||||
raise Exception("names are not unique!")
|
raise Exception("names are not unique!")
|
||||||
if len(new_names) != replica:
|
if len(new_names) != replica:
|
||||||
raise Exception('names should have the length', replica)
|
raise Exception('names should have the length', replica)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
ens_name = kwargs.get("ens_name")
|
ens_name = kwargs.get("ens_name")
|
||||||
if not appended:
|
if not appended:
|
||||||
|
@ -207,14 +205,14 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
new_names = _get_appended_rep_names(ls, prefix, name_list[0], ens_name)
|
new_names = _get_appended_rep_names(ls, prefix, name_list[0], ens_name)
|
||||||
new_names = sort_names(new_names)
|
new_names = sort_names(new_names)
|
||||||
|
|
||||||
idl = []
|
idl: list[list[int]] = []
|
||||||
|
|
||||||
noffset_list = [str(x) for x in noffset_list]
|
noffset_strings: list[str] = [str(x) for x in noffset_list]
|
||||||
wf_list = [str(x) for x in wf_list]
|
wf_strings: list[str] = [str(x) for x in wf_list]
|
||||||
wf2_list = [str(x) for x in wf2_list]
|
wf2_strings: list[str] = [str(x) for x in wf2_list]
|
||||||
|
|
||||||
# setup dict structures
|
# setup dict structures
|
||||||
intern = {}
|
intern: dict[str, Any] = {}
|
||||||
for name, corr_type in zip(name_list, corr_type_list):
|
for name, corr_type in zip(name_list, corr_type_list):
|
||||||
intern[name] = {}
|
intern[name] = {}
|
||||||
b2b, single = _extract_corr_type(corr_type)
|
b2b, single = _extract_corr_type(corr_type)
|
||||||
|
@ -223,26 +221,26 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
intern[name]["spec"] = {}
|
intern[name]["spec"] = {}
|
||||||
for quarks in quarks_list:
|
for quarks in quarks_list:
|
||||||
intern[name]["spec"][quarks] = {}
|
intern[name]["spec"][quarks] = {}
|
||||||
for off in noffset_list:
|
for off in noffset_strings:
|
||||||
intern[name]["spec"][quarks][off] = {}
|
intern[name]["spec"][quarks][off] = {}
|
||||||
for w in wf_list:
|
for w in wf_strings:
|
||||||
intern[name]["spec"][quarks][off][w] = {}
|
intern[name]["spec"][quarks][off][w] = {}
|
||||||
if b2b:
|
if b2b:
|
||||||
for w2 in wf2_list:
|
for w2 in wf2_strings:
|
||||||
intern[name]["spec"][quarks][off][w][w2] = {}
|
intern[name]["spec"][quarks][off][w][w2] = {}
|
||||||
intern[name]["spec"][quarks][off][w][w2]["pattern"] = _make_pattern(version, name, off, w, w2, intern[name]['b2b'], quarks)
|
intern[name]["spec"][quarks][off][w][w2]["pattern"] = _make_pattern(version, name, off, w, w2, intern[name]['b2b'], quarks)
|
||||||
else:
|
else:
|
||||||
intern[name]["spec"][quarks][off][w]["0"] = {}
|
intern[name]["spec"][quarks][off][w]["0"] = {}
|
||||||
intern[name]["spec"][quarks][off][w]["0"]["pattern"] = _make_pattern(version, name, off, w, 0, intern[name]['b2b'], quarks)
|
intern[name]["spec"][quarks][off][w]["0"]["pattern"] = _make_pattern(version, name, off, w, 0, intern[name]['b2b'], quarks)
|
||||||
|
|
||||||
internal_ret_dict = {}
|
internal_ret_dict: dict[str, list] = {}
|
||||||
needed_keys = []
|
needed_keys = []
|
||||||
for name, corr_type in zip(name_list, corr_type_list):
|
for name, corr_type in zip(name_list, corr_type_list):
|
||||||
b2b, single = _extract_corr_type(corr_type)
|
b2b, single = _extract_corr_type(corr_type)
|
||||||
if b2b:
|
if b2b:
|
||||||
needed_keys.extend(_lists2key([name], quarks_list, noffset_list, wf_list, wf2_list))
|
needed_keys.extend(_lists2key([name], quarks_list, noffset_strings, wf_strings, wf2_strings))
|
||||||
else:
|
else:
|
||||||
needed_keys.extend(_lists2key([name], quarks_list, noffset_list, wf_list, ["0"]))
|
needed_keys.extend(_lists2key([name], quarks_list, noffset_strings, wf_strings, ["0"]))
|
||||||
|
|
||||||
for key in needed_keys:
|
for key in needed_keys:
|
||||||
internal_ret_dict[key] = []
|
internal_ret_dict[key] = []
|
||||||
|
@ -288,9 +286,9 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
if version == "0.0" or not compact:
|
if version == "0.0" or not compact:
|
||||||
file = path + '/' + item + '/' + sub_ls[0] + '/' + name
|
file = path + '/' + item + '/' + sub_ls[0] + '/' + name
|
||||||
if corr_type_list[name_index] == 'bi':
|
if corr_type_list[name_index] == 'bi':
|
||||||
name_keys = _lists2key(quarks_list, noffset_list, wf_list, ["0"])
|
name_keys = _lists2key(quarks_list, noffset_strings, wf_strings, ["0"])
|
||||||
else:
|
else:
|
||||||
name_keys = _lists2key(quarks_list, noffset_list, wf_list, wf2_list)
|
name_keys = _lists2key(quarks_list, noffset_strings, wf_strings, wf2_strings)
|
||||||
for key in name_keys:
|
for key in name_keys:
|
||||||
specs = _key2specs(key)
|
specs = _key2specs(key)
|
||||||
quarks = specs[0]
|
quarks = specs[0]
|
||||||
|
@ -306,7 +304,7 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
intern[name]["T"] = T
|
intern[name]["T"] = T
|
||||||
# preparing the datastructure
|
# preparing the datastructure
|
||||||
# the correlators get parsed into...
|
# the correlators get parsed into...
|
||||||
deltas = []
|
deltas: list[list] = []
|
||||||
for j in range(intern[name]["T"]):
|
for j in range(intern[name]["T"]):
|
||||||
deltas.append([])
|
deltas.append([])
|
||||||
internal_ret_dict[sep.join([name, key])] = deltas
|
internal_ret_dict[sep.join([name, key])] = deltas
|
||||||
|
@ -327,8 +325,8 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
rep_data.append(file_data)
|
rep_data.append(file_data)
|
||||||
for t in range(intern[name]["T"]):
|
for t in range(intern[name]["T"]):
|
||||||
internal_ret_dict[key][t].append([])
|
internal_ret_dict[key][t].append([])
|
||||||
for cfg in range(no_cfg):
|
for cfg_number in range(no_cfg):
|
||||||
internal_ret_dict[key][t][i].append(rep_data[cfg][key][t])
|
internal_ret_dict[key][t][i].append(rep_data[cfg_number][key][t])
|
||||||
else:
|
else:
|
||||||
for key in needed_keys:
|
for key in needed_keys:
|
||||||
specs = _key2specs(key)
|
specs = _key2specs(key)
|
||||||
|
@ -337,10 +335,9 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
off = specs[2]
|
off = specs[2]
|
||||||
w = specs[3]
|
w = specs[3]
|
||||||
w2 = specs[4]
|
w2 = specs[4]
|
||||||
if "files" in kwargs:
|
name_ls = kwargs.get("files")
|
||||||
if isinstance(kwargs.get("files"), list) and all(isinstance(f, str) for f in kwargs.get("files")):
|
if name_ls is not None:
|
||||||
name_ls = kwargs.get("files")
|
if not (isinstance(name_ls, list) and all(isinstance(f, str) for f in name_ls)):
|
||||||
else:
|
|
||||||
raise TypeError("In append mode, files has to be of type list[str]!")
|
raise TypeError("In append mode, files has to be of type list[str]!")
|
||||||
else:
|
else:
|
||||||
name_ls = ls
|
name_ls = ls
|
||||||
|
@ -377,7 +374,7 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
if not silent:
|
if not silent:
|
||||||
print("Done")
|
print("Done")
|
||||||
|
|
||||||
result_dict = {}
|
result_dict: dict[str, Any] = {}
|
||||||
if keyed_out:
|
if keyed_out:
|
||||||
for key in needed_keys:
|
for key in needed_keys:
|
||||||
name = _key2specs(key)[0]
|
name = _key2specs(key)[0]
|
||||||
|
@ -390,12 +387,12 @@ def read_sfcf_multi(path: str, prefix: str, name_list: list[str], quarks_list: l
|
||||||
result_dict[name] = {}
|
result_dict[name] = {}
|
||||||
for quarks in quarks_list:
|
for quarks in quarks_list:
|
||||||
result_dict[name][quarks] = {}
|
result_dict[name][quarks] = {}
|
||||||
for off in noffset_list:
|
for off in noffset_strings:
|
||||||
result_dict[name][quarks][off] = {}
|
result_dict[name][quarks][off] = {}
|
||||||
for w in wf_list:
|
for w in wf_strings:
|
||||||
result_dict[name][quarks][off][w] = {}
|
result_dict[name][quarks][off][w] = {}
|
||||||
if corr_type != 'bi':
|
if corr_type != 'bi':
|
||||||
for w2 in wf2_list:
|
for w2 in wf2_strings:
|
||||||
key = _specs2key(name, quarks, off, w, w2)
|
key = _specs2key(name, quarks, off, w, w2)
|
||||||
result = []
|
result = []
|
||||||
for t in range(intern[name]["T"]):
|
for t in range(intern[name]["T"]):
|
||||||
|
@ -642,13 +639,13 @@ def _read_append_rep(filename: str, pattern: str, b2b: bool, cfg_separator: str,
|
||||||
rep_idl.append(idl)
|
rep_idl.append(idl)
|
||||||
rep_data.append(data)
|
rep_data.append(data)
|
||||||
|
|
||||||
data = []
|
final_data: list[list[float]] = []
|
||||||
|
|
||||||
for t in range(T):
|
for t in range(T):
|
||||||
data.append([])
|
final_data.append([])
|
||||||
for c in range(len(rep_data)):
|
for c in range(len(rep_data)):
|
||||||
data[t].append(rep_data[c][t])
|
final_data[t].append(rep_data[c][t])
|
||||||
return T, rep_idl, data
|
return T, rep_idl, final_data
|
||||||
|
|
||||||
|
|
||||||
def _get_rep_names(ls: list[str], ens_name: None=None) -> list[str]:
|
def _get_rep_names(ls: list[str], ens_name: None=None) -> list[str]:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue