From c0e15c0760d37975efcefed3fba4f3e2a9eb3be5 Mon Sep 17 00:00:00 2001 From: Maxim Gonchar <maxim.mg.gonchar@gmail.com> Date: Wed, 26 Apr 2023 13:00:15 +0300 Subject: [PATCH] chore: move ParametersStorage (prev. ParametersWrapper) to a module --- model_tools/__init__.py | 0 model_tools/parameters_storage.py | 111 ++++++++++++++++++++++++++++++ models/dayabay_v0.py | 111 +----------------------------- models/dayabay_v1.py | 111 +----------------------------- 4 files changed, 115 insertions(+), 218 deletions(-) create mode 100644 model_tools/__init__.py create mode 100644 model_tools/parameters_storage.py diff --git a/model_tools/__init__.py b/model_tools/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/model_tools/parameters_storage.py b/model_tools/parameters_storage.py new file mode 100644 index 0000000..28a5e26 --- /dev/null +++ b/model_tools/parameters_storage.py @@ -0,0 +1,111 @@ +from multikeydict.nestedmkdict import NestedMKDict +from multikeydict.visitor import NestedMKDictVisitor + +from typing import Union, Tuple, List, Optional + +from tabulate import tabulate +from pandas import DataFrame + +import pandas as pd +pd.set_option('display.max_rows', None) +pd.set_option('display.max_colwidth', 100) + +class ParametersStorage(NestedMKDict): + def to_dict(self, **kwargs) -> list: + return self.visit(ParametersVisitor(kwargs)).data + + def to_df(self, *, columns: Optional[List[str]]=None, **kwargs) -> DataFrame: + dct = self.to_dict(**kwargs) + if columns is None: + columns = ['path', 'value', 'central', 'sigma', 'label'] + df = DataFrame(dct, columns=columns) + for key in ('central', 'sigma'): + if df[key].isna().all(): + del df[key] + else: + df[key].fillna('-', inplace=True) + + df['value'].fillna('-', inplace=True) + df['label'].fillna('', inplace=True) + return df + + def to_string(self, **kwargs) -> str: + df = self.to_df() + return df.to_string(**kwargs) + + def to_table(self, *, df_kwargs: dict={}, **kwargs) -> str: + df = self.to_df(**df_kwargs) + kwargs.setdefault('headers', df.columns) + ret = tabulate(df, **kwargs) + + return ret + + def to_latex(self, *, return_df: bool=False, **kwargs) -> Union[str, Tuple[str, DataFrame]]: + df = self.to_df(label_from='latex', **kwargs) + tex = df.to_latex(escape=False) + + if return_df: + return tex, df + + return tex + +class ParametersVisitor(NestedMKDictVisitor): + __slots__ = ('_kwargs', '_data', '_localdata', '_path') + _kwargs: dict + _data: List[dict] + _localdata: List[dict] + _paths: List[Tuple[str, ...]] + _path: Tuple[str, ...] + # _npars: List[int] + + def __init__(self, kwargs: dict): + self._kwargs = kwargs + # self._npars = [] + + @property + def data(self): + return self._data + + def start(self, dct): + self._data = [] + self._path = () + self._paths = [] + self._localdata = [] + + def enterdict(self, k, v): + if self._localdata: + self.exitdict(self._path, None) + self._path = k + self._paths.append(self._path) + self._localdata = [] + + def visit(self, key, value): + try: + dct = value.to_dict(**self._kwargs) + except AttributeError: + return + + subkey = key[len(self._path):] + subkeystr = '.'.join(subkey) + + if self._path: + dct['path'] = f'.. {subkeystr}' + else: + dct['path'] = subkeystr + + self._localdata.append(dct) + + def exitdict(self, k, v): + if self._localdata: + self._data.append({ + 'path': f"group: {'.'.join(self._path)} [{len(self._localdata)}]" + }) + self._data.extend(self._localdata) + self._localdata = [] + if self._paths: + del self._paths[-1] + + self._path = self._paths[-1] if self._paths else () + + def stop(self, dct): + pass diff --git a/models/dayabay_v0.py b/models/dayabay_v0.py index 84493f1..94097c4 100644 --- a/models/dayabay_v0.py +++ b/models/dayabay_v0.py @@ -1,14 +1,5 @@ from dagflow.bundles.load_parameters import load_parameters -from multikeydict.nestedmkdict import NestedMKDict -from multikeydict.visitor import NestedMKDictVisitor from pathlib import Path -from tabulate import tabulate - -from typing import Union, Tuple, List, Optional -import pandas as pd -from pandas import DataFrame -pd.set_option('display.max_rows', None) -pd.set_option('display.max_colwidth', 100) from dagflow.graph import Graph from dagflow.graphviz import savegraph @@ -16,108 +7,10 @@ from dagflow.lib.Sum import Sum from gindex import GNIndex -class ParametersVisitor(NestedMKDictVisitor): - __slots__ = ('_kwargs', '_data', '_localdata', '_path') - _kwargs: dict - _data: List[dict] - _localdata: List[dict] - _paths: List[Tuple[str, ...]] - _path: Tuple[str, ...] - # _npars: List[int] - - def __init__(self, kwargs: dict): - self._kwargs = kwargs - # self._npars = [] - - @property - def data(self): - return self._data - - def start(self, dct): - self._data = [] - self._path = () - self._paths = [] - self._localdata = [] - - def enterdict(self, k, v): - if self._localdata: - self.exitdict(self._path, None) - self._path = k - self._paths.append(self._path) - self._localdata = [] - - def visit(self, key, value): - try: - dct = value.to_dict(**self._kwargs) - except AttributeError: - return - - subkey = key[len(self._path):] - subkeystr = '.'.join(subkey) - - if self._path: - dct['path'] = f'.. {subkeystr}' - else: - dct['path'] = subkeystr - - self._localdata.append(dct) - - def exitdict(self, k, v): - if self._localdata: - self._data.append({ - 'path': f"group: {'.'.join(self._path)} [{len(self._localdata)}]" - }) - self._data.extend(self._localdata) - self._localdata = [] - if self._paths: - del self._paths[-1] - - self._path = self._paths[-1] if self._paths else () - - def stop(self, dct): - pass - -class ParametersWrapper(NestedMKDict): - def to_dict(self, **kwargs) -> list: - return self.visit(ParametersVisitor(kwargs)).data - - def to_df(self, *, columns: Optional[List[str]]=None, **kwargs) -> DataFrame: - dct = self.to_dict(**kwargs) - if columns is None: - columns = ['path', 'value', 'central', 'sigma', 'label'] - df = DataFrame(dct, columns=columns) - for key in ('central', 'sigma'): - if df[key].isna().all(): - del df[key] - else: - df[key].fillna('-', inplace=True) - - df['value'].fillna('-', inplace=True) - df['label'].fillna('', inplace=True) - return df - - def to_string(self, **kwargs) -> str: - df = self.to_df() - return df.to_string(**kwargs) - - def to_table(self, *, df_kwargs: dict={}, **kwargs) -> str: - df = self.to_df(**df_kwargs) - kwargs.setdefault('headers', df.columns) - ret = tabulate(df, **kwargs) - - return ret - - def to_latex(self, *, return_df: bool=False, **kwargs) -> Union[str, Tuple[str, DataFrame]]: - df = self.to_df(label_from='latex', **kwargs) - tex = df.to_latex(escape=False) - - if return_df: - return tex, df - - return tex +from model_tools.parameters_storage import ParametersStorage def model_dayabay_v0(): - storage = ParametersWrapper({}, sep='.') + storage = ParametersStorage({}, sep='.') datasource = Path('data/dayabay-v0') index = GNIndex.from_dict({ diff --git a/models/dayabay_v1.py b/models/dayabay_v1.py index 266db4f..bbe1a97 100644 --- a/models/dayabay_v1.py +++ b/models/dayabay_v1.py @@ -1,14 +1,5 @@ from dagflow.bundles.load_parameters import load_parameters -from multikeydict.nestedmkdict import NestedMKDict -from multikeydict.visitor import NestedMKDictVisitor from pathlib import Path -from tabulate import tabulate - -from typing import Union, Tuple, List, Optional -import pandas as pd -from pandas import DataFrame -pd.set_option('display.max_rows', None) -pd.set_option('display.max_colwidth', 100) from dagflow.graph import Graph from dagflow.graphviz import savegraph @@ -16,108 +7,10 @@ from dagflow.lib.Sum import Sum from gindex import GNIndex -class ParametersVisitor(NestedMKDictVisitor): - __slots__ = ('_kwargs', '_data', '_localdata', '_path') - _kwargs: dict - _data: List[dict] - _localdata: List[dict] - _paths: List[Tuple[str, ...]] - _path: Tuple[str, ...] - # _npars: List[int] - - def __init__(self, kwargs: dict): - self._kwargs = kwargs - # self._npars = [] - - @property - def data(self): - return self._data - - def start(self, dct): - self._data = [] - self._path = () - self._paths = [] - self._localdata = [] - - def enterdict(self, k, v): - if self._localdata: - self.exitdict(self._path, None) - self._path = k - self._paths.append(self._path) - self._localdata = [] - - def visit(self, key, value): - try: - dct = value.to_dict(**self._kwargs) - except AttributeError: - return - - subkey = key[len(self._path):] - subkeystr = '.'.join(subkey) - - if self._path: - dct['path'] = f'.. {subkeystr}' - else: - dct['path'] = subkeystr - - self._localdata.append(dct) - - def exitdict(self, k, v): - if self._localdata: - self._data.append({ - 'path': f"group: {'.'.join(self._path)} [{len(self._localdata)}]" - }) - self._data.extend(self._localdata) - self._localdata = [] - if self._paths: - del self._paths[-1] - - self._path = self._paths[-1] if self._paths else () - - def stop(self, dct): - pass - -class ParametersWrapper(NestedMKDict): - def to_dict(self, **kwargs) -> list: - return self.visit(ParametersVisitor(kwargs)).data - - def to_df(self, *, columns: Optional[List[str]]=None, **kwargs) -> DataFrame: - dct = self.to_dict(**kwargs) - if columns is None: - columns = ['path', 'value', 'central', 'sigma', 'label'] - df = DataFrame(dct, columns=columns) - for key in ('central', 'sigma'): - if df[key].isna().all(): - del df[key] - else: - df[key].fillna('-', inplace=True) - - df['value'].fillna('-', inplace=True) - df['label'].fillna('', inplace=True) - return df - - def to_string(self, **kwargs) -> str: - df = self.to_df() - return df.to_string(**kwargs) - - def to_table(self, *, df_kwargs: dict={}, **kwargs) -> str: - df = self.to_df(**df_kwargs) - kwargs.setdefault('headers', df.columns) - ret = tabulate(df, **kwargs) - - return ret - - def to_latex(self, *, return_df: bool=False, **kwargs) -> Union[str, Tuple[str, DataFrame]]: - df = self.to_df(label_from='latex', **kwargs) - tex = df.to_latex(escape=False) - - if return_df: - return tex, df - - return tex +from model_tools.parameters_storage import ParametersStorage def model_dayabay_v1(): - storage = ParametersWrapper({}, sep='.') + storage = ParametersStorage({}, sep='.') datasource = Path('data/dayabay-v1') index = GNIndex.from_dict({ -- GitLab