From cfb58735874db66ad11672b8efe855becce231f9 Mon Sep 17 00:00:00 2001 From: Lisa Hamada Date: Wed, 13 May 2026 12:11:58 +0900 Subject: [PATCH 1/7] Clean up code --- models/tdims/src/tdims/sparse_transformers.py | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/models/tdims/src/tdims/sparse_transformers.py b/models/tdims/src/tdims/sparse_transformers.py index 29449ec..561e4c9 100644 --- a/models/tdims/src/tdims/sparse_transformers.py +++ b/models/tdims/src/tdims/sparse_transformers.py @@ -12,16 +12,6 @@ class SparseFeatureFilterVCSR(BaseEstimator, TransformerMixin): - """ - 非ゼロサンプル数が少ない特徴量を除去(dense/sparse 両対応) - - Parameters - ---------- - min_samples : int - 各特徴量が非ゼロとなるサンプル数が min_samples 未満なら除去 - verbose : bool - fit時に特徴量数の変化をprintするか - """ def __init__(self, min_samples: int = 30, verbose: bool = True): self.min_samples = min_samples self.verbose = verbose @@ -52,9 +42,6 @@ def get_support(self, indices: bool = False): class ToCSR(BaseEstimator, TransformerMixin): - """ - 入力を CSR sparse matrix に変換(すでに sparse なら .tocsr()) - """ def fit(self, X, y=None): return self @@ -64,7 +51,6 @@ def transform(self, X): return csr_matrix(X) class ClipGreaterThanOneToZero(BaseEstimator, TransformerMixin): - """CSR(疎行列)を想定し、値が threshold より大きい要素を 0 にする。""" def __init__(self, threshold: float = 1.0): self.threshold = threshold @@ -74,7 +60,7 @@ def fit(self, X, y=None): def transform(self, X): # sparse if issparse(X): - X = X.tocsr(copy=True) # 元を壊さない + X = X.tocsr(copy=True) if X.nnz == 0: return X mask = X.data > self.threshold @@ -82,8 +68,6 @@ def transform(self, X): X.data[mask] = 0.0 X.eliminate_zeros() return X - - # denseが来た場合の保険(通常ここには来ない想定) X = np.array(X, copy=True) X[X > self.threshold] = 0.0 return csr_matrix(X) From c5bc932571669dddea3f56c60b2c7126abf52bbb Mon Sep 17 00:00:00 2001 From: Lisa Hamada Date: Wed, 16 Sep 2026 17:34:49 +0900 Subject: [PATCH 2/7] Add notebook requirements file --- models/tdims/requirements-notebook.txt | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 models/tdims/requirements-notebook.txt diff --git a/models/tdims/requirements-notebook.txt b/models/tdims/requirements-notebook.txt new file mode 100644 index 0000000..de7879b --- /dev/null +++ b/models/tdims/requirements-notebook.txt @@ -0,0 +1,27 @@ +# Notebook dependencies for examples/example_notebook.ipynb +# +# This file EXTENDS requirements.txt (installed via the -r line below), +# so you do not need to install requirements.txt separately. +# +# Recommended setup (see README.md): +# conda create -n NCS python=3.10 -y +# conda activate NCS +# conda install -c conda-forge numba llvmlite shap +# pip install -r requirements-notebook.txt +# +# Installing shap from conda-forge first avoids numba / llvmlite build +# failures on some platforms. If shap is already present, pip keeps the +# existing (conda) build instead of rebuilding it. + +-r requirements.txt + +# Jupyter environment +jupyterlab>=4.0,<5.0 +notebook>=7.0,<8.0 +ipykernel>=6.20,<7.0 +ipywidgets>=8.0,<9.0 + +# Feature importance analysis (SHAP section of the notebook) +shap>=0.44,<0.46 +numba>=0.57,<0.61 +llvmlite>=0.40,<0.44 From 952b9c505e55f5c2f794b78e3f6853ab1e9bbfc4 Mon Sep 17 00:00:00 2001 From: Lisa Hamada Date: Wed, 16 Sep 2026 18:05:03 +0900 Subject: [PATCH 3/7] update example notebook --- models/tdims/examples/example_notebook.ipynb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/models/tdims/examples/example_notebook.ipynb b/models/tdims/examples/example_notebook.ipynb index 640b825..58cf328 100644 --- a/models/tdims/examples/example_notebook.ipynb +++ b/models/tdims/examples/example_notebook.ipynb @@ -879,16 +879,19 @@ "metadata": {}, "outputs": [], "source": [ - "from experiment_sample import main\n", + "exp_path = (Path.cwd().resolve().parent / \"experiments\").resolve()\n", + "if str(exp_path) not in sys.path:\n", + " sys.path.insert(0, str(exp_path))\n", + "from run_nested_cv_experiment import main\n", "\n", "main(\n", - " database=\"./data/cmpCl3_200.csv\",\n", + " database=\"../data/cmpCl3_200.csv\",\n", " prop=\"def_EmAbs\",\n", " desc_name=\"TDiMS\",\n", " outer_random_state=0,\n", " outer_n_repeats=1,\n", " n_jobs=-1,\n", - " out_dir_sub=\"experimentcode\",\n", + " out_dir=\"result\",\n", " etc=\"notebook_example\",\n", " save_cv_results=True,\n", " save_joblib=False,\n", @@ -900,9 +903,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python (TDiMS_Nature_v6)", + "display_name": "Python 3", "language": "python", - "name": "tdims_nature_v6" + "name": "python3" }, "language_info": { "codemirror_mode": { From 9de0f8a345e9b695308989ea5f5419423fd18015 Mon Sep 17 00:00:00 2001 From: Lisa Hamada Date: Wed, 16 Sep 2026 18:08:19 +0900 Subject: [PATCH 4/7] Rename TDiMS feature names and support custom fragment sets --- models/tdims/src/tdims/load.py | 96 +++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/models/tdims/src/tdims/load.py b/models/tdims/src/tdims/load.py index 885a3ac..4de731b 100644 --- a/models/tdims/src/tdims/load.py +++ b/models/tdims/src/tdims/load.py @@ -32,7 +32,10 @@ def __init__(self, sm_list, radius=1, func_dis=-2, func_merge=sum, fragment_set= radius (int, optional): radius of finger print. Default to 1. func_dis (int, float, function, optional) : Calculation method for computing the feature value from bonds distance. Default to -2 (inverse square) func_merge (function, optional) : Calculation method for merging feature values of distance in the same set of substructures. Default to sum. - fragment_set (bool, optional) : True if you want to include this substructure type to extract the distance. Default to True. + fragment_set (bool or list, optional): + If True, use the default CEP fragment list. + If False, do not use fragment-based features. + If a list/tuple/set of SMILES is given, use those fragments instead. atom_set (bool, optional) : Types True if you want to include this substructure type to extract the distance. Default to True fingerprint_set (bool, optional) : True if you want to include this substructure type to extract the distance. Default to True """ @@ -71,7 +74,7 @@ def mfp_subset(self, mol): return mfp_set def extract_mol_features(self, sm): - + topological_distance = dict() mol = Chem.MolFromSmiles(sm) @@ -83,40 +86,56 @@ def extract_mol_features(self, sm): mol_distance_matrix = Chem.rdmolops.GetDistanceMatrix(mol) eps = 1.0e-10 - # atom index of Fragment - if self.fragment_set: - sm_list = ['C1C=CC=C1', - 'S1N=C2C=CN=CC2=N1', - 'S1N=C2C=CC=CC2=N1', - 'O1C=CC2=CSC=C12', - 'C1=CC=NC=C1', - 'C1=NC=NC=N1', - 'O1C=CC=C1', - '[SiH2]1C=CC=C1', - '[SiH2]1C=C2C=CC=CC2=C1', - 'N1C=CC2=CSC=C12', - 'C1=CC2=CC=CC=C2C=C1', - 'S1C=CC=C1', - 'S1C=C2SC=CC2=C1', - 'O1C=C2C=CC=CC2=C1', - '[Se]1C=CC=C1', - 'N1C=C2C=CC=CC2=C1', - 'N1C=CC=C1', - 'S1C=C2C(=C1)C1=CC=CC=C1C1=CC=CC=C21', - 'C1=CC=CC=C1', - 'S1C=C2N=CC=NC2=C1', - 'S1C=CN=C1', - '[SiH2]1C=CC2=CSC=C12', - 'S1C=C2C=CC=CC2=C1', - 'S1C=C2[Se]C=CC2=C1', - 'C1C=C2C=CC=CC2=C1', - 'C1C=CC2=CSC=C12'] - + # atom index of Fragment + cep_fragment_smiles = [ + 'C1C=CC=C1', + 'S1N=C2C=CN=CC2=N1', + 'S1N=C2C=CC=CC2=N1', + 'O1C=CC2=CSC=C12', + 'C1=CC=NC=C1', + 'C1=NC=NC=N1', + 'O1C=CC=C1', + '[SiH2]1C=CC=C1', + '[SiH2]1C=C2C=CC=CC2=C1', + 'N1C=CC2=CSC=C12', + 'C1=CC2=CC=CC=C2C=C1', + 'S1C=CC=C1', + 'S1C=C2SC=CC2=C1', + 'O1C=C2C=CC=CC2=C1', + '[Se]1C=CC=C1', + 'N1C=C2C=CC=CC2=C1', + 'N1C=CC=C1', + 'S1C=C2C(=C1)C1=CC=CC=C1C1=CC=CC=C21', + 'C1=CC=CC=C1', + 'S1C=C2N=CC=NC2=C1', + 'S1C=CN=C1', + '[SiH2]1C=CC2=CSC=C12', + 'S1C=C2C=CC=CC2=C1', + 'S1C=C2[Se]C=CC2=C1', + 'C1C=C2C=CC=CC2=C1', + 'C1C=CC2=CSC=C12' + ] + + fragment_smiles_list = None + if self.fragment_set is True: + fragment_smiles_list = cep_fragment_smiles + elif isinstance(self.fragment_set, (list, tuple, set)): + fragment_smiles_list = list(self.fragment_set) + + if fragment_smiles_list: fragment_atomidx_dic = defaultdict(list) - for smiles in sm_list: - atm_set=mol.GetSubstructMatches(Chem.MolFromSmiles(smiles)) + for frag_smiles in fragment_smiles_list: + frag_mol = Chem.MolFromSmiles(frag_smiles) + if frag_mol is None: + logger.warning(f"Invalid fragment SMILES was skipped: {frag_smiles}") + continue + + atm_set = mol.GetSubstructMatches(frag_mol) if atm_set != (): - fragment_atomidx_dic[f'{smiles}_CEPfrag']=[list(atm_idx) for atm_idx in atm_set] + suffix = "CEPfrag" if self.fragment_set is True else "frag" + fragment_atomidx_dic[f"{frag_smiles}_{suffix}"] = [ + list(atm_idx) for atm_idx in atm_set + ] all_dic.update(fragment_atomidx_dic) # atom index of HeavyAtom @@ -170,11 +189,11 @@ def extract_mol_features(self, sm): all_dic.update(sub_atomidx_dic_slc) - dis_dic = defaultdict(list) for (sm1, sm2) in itertools.combinations_with_replacement(sorted(all_dic.keys(), key=len, reverse=True), 2): - sub_pair = f'{sm1} & {sm2}' + + sub_pair = f"tdims_{sm1}__{sm2}" # collect each pair of substracture distance target1 = all_dic[sm1] @@ -190,7 +209,6 @@ def extract_mol_features(self, sm): if isinstance(self.func_dis, types.FunctionType): calc_dis = self.func_dis(av_dis) - else: calc_dis = av_dis**self.func_dis @@ -207,22 +225,18 @@ def extract_mol_features(self, sm): if isinstance(self.func_dis,types.FunctionType): calc_dis = self.func_dis(av_dis) - else: calc_dis = av_dis ** self.func_dis dis_dic[sub_pair].append(calc_dis) - if dis_dic[sub_pair] == []: distance_final = 0 else: distance_final = self.func_merge(dis_dic[sub_pair]) - if distance_final-eps > 0: topological_distance[sub_pair] = distance_final - elif distance_final < 0: logger.error(f'Minus feature for mol:{Chem.MolToSmiles(mol)} feature:{sub_pair}') From 4e8b9fcc7abf12514b5ccbd9127ea9d7d26a7462 Mon Sep 17 00:00:00 2001 From: Lisa Hamada Date: Wed, 16 Sep 2026 18:14:57 +0900 Subject: [PATCH 5/7] Add TDiMS to supported models and validate model input --- README.md | 1 + models/tdims/src/tdims/tdims_ext.py | 3 +++ 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 6639153..629d539 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ Each folder represents a different chemical representation and architecture type | 3DGrid-VQGAN [\[HuggingFace\]](https://huggingface.co/ibm-research/materials.3dgrid_vqgan) | 3DGrid-VQGAN is an encoder-decoder chemical foundation model for representing 3D electron density grids that efficiently encodes high-dimensional data into compact latent representations. This approach could significantly reduce reliance on computationally intensive quantum chemical simulations, offering simulation-grade data derived directly from learned representations.| | SMILESDFT-CLIP [\[HuggingFace\]](https://huggingface.co/ibm-research/materials.smilesdft-clip) | SMILESDFT-CLIP is a multimodal foundation model that jointly train a continuous 3D-field encoder, based on a vector-quantized generative adversarial network (VQGAN), and a SMILES-based transformer encoder on a dataset of 855,000 molecules, each represented by a DFT-computed electron density grid and a corresponding canonical SMILES string.| | STR-Bamba [\[HuggingFace\]](https://huggingface.co/ibm-research/materials.str-bamba) | STR-Bamba is an encoder-decoder chemical foundation model based on the IBM Bamba architecture, a hybrid of Transformers and Mamba-2 layers, designed to support multi-representational molecular string inputs.| +| TDiMS [\[Code\]](models/tdims) | TDiMS (Topological Distance of intraMolecular Substructures) is a molecular descriptor that captures non-local intramolecular interactions by summarizing enumerated pairwise topological distances between molecular substructures. Unlike the pre-trained models above, TDiMS is computed directly from SMILES and requires no pre-training, making it lightweight and interpretable for small-data property prediction.| diff --git a/models/tdims/src/tdims/tdims_ext.py b/models/tdims/src/tdims/tdims_ext.py index 1a82321..1f94717 100644 --- a/models/tdims/src/tdims/tdims_ext.py +++ b/models/tdims/src/tdims/tdims_ext.py @@ -51,6 +51,9 @@ def get_representation_with_fs_selection(sm_list, y, model="tdims", radius=1, fu return x_slc, list(key_slc), key_all + else: + raise ValueError("Invalid model input") + def run_tdims_regression_cv( From 1f27e2e562d14d083b50f55f0cf3cead1a97828e Mon Sep 17 00:00:00 2001 From: Lisa Hamada Date: Wed, 16 Sep 2026 23:12:37 +0900 Subject: [PATCH 6/7] Restore original feature name format and improve input handling --- models/tdims/src/tdims/load.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/models/tdims/src/tdims/load.py b/models/tdims/src/tdims/load.py index 4de731b..03ff781 100644 --- a/models/tdims/src/tdims/load.py +++ b/models/tdims/src/tdims/load.py @@ -48,6 +48,7 @@ def __init__(self, sm_list, radius=1, func_dis=-2, func_merge=sum, fragment_set= self.atom_set = atom_set self.fingerprint_set = fingerprint_set self.nBit = nBit + self.failed_smiles = [] def mfp_subset(self, mol): @@ -79,7 +80,8 @@ def extract_mol_features(self, sm): mol = Chem.MolFromSmiles(sm) if mol is None: - print(f"RDKit failed to read SMILES: {sm}") + logger.debug(f"RDKit failed to read SMILES: {sm}") + self.failed_smiles.append(sm) return topological_distance all_dic = dict() @@ -193,7 +195,7 @@ def extract_mol_features(self, sm): for (sm1, sm2) in itertools.combinations_with_replacement(sorted(all_dic.keys(), key=len, reverse=True), 2): - sub_pair = f"tdims_{sm1}__{sm2}" + sub_pair = f'{sm1} & {sm2}' # collect each pair of substracture distance target1 = all_dic[sm1] @@ -207,7 +209,7 @@ def extract_mol_features(self, sm): distance_tmp.append(mol_distance_matrix[x][y]) av_dis = sum(distance_tmp)/len(distance_tmp) - if isinstance(self.func_dis, types.FunctionType): + if callable(self.func_dis): calc_dis = self.func_dis(av_dis) else: calc_dis = av_dis**self.func_dis @@ -223,7 +225,7 @@ def extract_mol_features(self, sm): distance_tmp.append(mol_distance_matrix[x][y]) av_dis = sum(distance_tmp) / len(distance_tmp) - if isinstance(self.func_dis,types.FunctionType): + if callable(self.func_dis): calc_dis = self.func_dis(av_dis) else: calc_dis = av_dis ** self.func_dis @@ -246,11 +248,18 @@ def feature_extraction(self): key_all={} dic_all=[] + self.failed_smiles = [] for sm in self.sm_list: tdims_dic = self.extract_mol_features(sm) dic_all.append(tdims_dic) key_all = {**key_all, **tdims_dic} - + + if self.failed_smiles: + logger.warning( + f"{len(self.failed_smiles)} of {len(dic_all)} SMILES could not be parsed by RDKit " + f"and produced all-zero feature rows. See TDiMS.failed_smiles for the list." + ) + X=[] for dic in dic_all: x = [dic.get(key, 0) for key in key_all] From 9002c7e48056caa055bda26ee0275ea948841f7f Mon Sep 17 00:00:00 2001 From: Lisa Hamada Date: Wed, 16 Sep 2026 23:20:59 +0900 Subject: [PATCH 7/7] clean up imports --- data/.DS_Store | Bin 6148 -> 0 bytes models/.DS_Store | Bin 10244 -> 0 bytes models/mhg_model/.DS_Store | Bin 10244 -> 0 bytes models/mhg_model/graph_grammar/.DS_Store | Bin 8196 -> 0 bytes models/mhg_model/pickles/.DS_Store | Bin 6148 -> 0 bytes models/selfies_ted/.DS_Store | Bin 6148 -> 0 bytes models/tdims/src/tdims/load.py | 1 - 7 files changed, 1 deletion(-) delete mode 100644 data/.DS_Store delete mode 100644 models/.DS_Store delete mode 100644 models/mhg_model/.DS_Store delete mode 100644 models/mhg_model/graph_grammar/.DS_Store delete mode 100644 models/mhg_model/pickles/.DS_Store delete mode 100644 models/selfies_ted/.DS_Store diff --git a/data/.DS_Store b/data/.DS_Store deleted file mode 100644 index c6de59d5a1b8385bca48ac4ddcddbe1b9b7f5363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOG?B*5Uq+?1l-J0aMK$PFiV+D9OBM}Fc;9w1YJzXfC#!Whw%X3LGTz}K)i#m zx=JUF!KKJp1>LW@K3&O!bf<`j=eMgV(S(Q!3_%uUM8rJm$}Cu%EPJf4ri*3QZbmlw zt0sB&oNBtHB{j+O&mJF!zP78XdfnBq6-Re(_pi;%N$Owy=-*rqxS2g66?GfBp^nx` z-R$^z=o{8OJbT~PwcNJb)*bUFb+dD+>*5SJ1I~am@V^)hEb zSkc8N69Z9+i80E94~n8b5u?GMClGz`LGcGQKKMY?7f}wF5O$|ywe?l_ECK}O+X^zdX z4io_b0RjO60RjO60Rp!I0{ENFF0q=+pbZcR5C{;MLV&FgD&9;+d|BYqTRO1uwg4zA zQSDv$jQar3NA+dImjy08SB%Mb58%6kzr_IVj^ipbM;Y;DflKaAfV&g$-wgf^1-!ST zpX!+th;SLS0RjO6GZA2WcM13H<7A8^O84(A@wA=EdJc6Rr><|6v1756X{T^hq^6wR zHh!^lHcRbaT4u*f-n^iI;Yc;1>`Z|iA_hu|dAcYybF9RY{I+v;%hEjiUp5>+&spMT z?7wsUXX~priMX3| zb2OTC_Oaf8ZJVj$b27Ep&?geg!YUVTDK9si2T*jgar7oQ`(>XKg>Yb(;Hy+VZS4-25ZJPZyHCULD zVOKxmvauOM!=u!8+%7LzLQ!&5-=kwJBd^CWA{{pHmCSMB)O`5^NN?3FS-x`hx()Yq zY>jU3>API3)YZ%KqQygbgBmGQA4$@*ZfS-!HaKBu?)WI8Z@I=HLw6)eIWu4-Gy3KF zI;D2$ZK2R`E@eENGu)#}gDCP)p|C26%IWfR=b%B4{{o^;P17|t?>ePEv^x|RmCw*eF|53Splg^Lz1QCV5FZ;4K^kMp%i(NgMrY%gPh z$9Au}rV|wlZP{{pMR*X)K|eCRK8tm$%w@zEFEi_vazj|D!h+%5JLNTDWeye#@2(Fw zg%ts7ly{rM8)c;eD^T)$TfJFEhjPjUQXhC z+_6mCVt)rP+LzEfPhHbJn$>sV??!oypcfzzAP^uBAP^uBAaLUlsNkVhcK+Wz`~Uwp zE`cC&fIxu2O-BGKWARuN(|8*SK!if!G@VIy>}ds9d;bQ#@7{h l>})*Z>k3?Y?x^?NQS#IL8~$fNu>Zd)=V`(I|JK?6{{@50^-%x- diff --git a/models/mhg_model/.DS_Store b/models/mhg_model/.DS_Store deleted file mode 100644 index 954019917e182b7e3befe57ea0e23dec751a997a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMU2GIp6h3F@&+HUrD5VtF#f3rzT1x*w{@MOOArwLS&tKW?4DHz2nPq3U1xihy z3@Ap8O8kjF`G*h05Q8K>h{g~fOpHhfXyS`L7~-3MFD82K+?jS~TM8&B4|6wj&)j>@ zx%b>}&bjxVy8wUzZok4u zz(>GGz(>GGz(?SIK!Emamc#;1{oF^uN5Ds53<0)2gy~^4;?Pk}?WKb1K?$&c_nEW~HjCuA(q4CpRx&6vYB@ ze`~)v)S8N>(pEz>xtEpNOjD1!@6lL?rVjPUMUAGBifV?Mv;{OpC6;}inxU9O4QAR< zEL*mfH;92iphqqq9$r~f5ni)$q#``LrlyKsYgUbn1jIR|E7tAq8PMZ~d4f*~on?XM z;!P*1IK})Ft5=VazD#HeHodR9wbzU%?7nlF&fS9B8f@gCO)GXmyXJxxkP3nwoljvH2wJgYaV_onq|O0Cy*#%y(^)FUbOw#PD) zsYaWzN0!r;x?3eaZBT6@ZW1kIJ?%`SG}Ev;)TBkUG*V?x00L*H&j~FoE3aC)c2ncl zmR(n7JTOz1q}fHCgPNtqbhSHb^{R%V8GY?Tnv&|@L!ZS+X@@j583@cmz0HWm)hlxG z+>&_@27{buT*mFCD;?7gr?u2kxl|PS7{Ty@fGEGYPa!3Dm)`AD?93ta&B(`i9MfJ>#*Xx=5obLHUfV4EmkCK*{X1~qaQ`W)PA#L~zz{#9&H z14Xi&c`q=z(u&2jI|1@u@>ua18%|yHjwGI z;A6NGAIIIe7x$Cl9>gd>4GK5jj!dS$W@)Xf?=8p5oWq^SdFDkcFQq)1mq`n-3OZPs zCkIc1XL2Z6*@Br9SvOMSPQ=qkrqVa#@hHf{oB+XVLW&fO5jA1JtL7xl9%VuNkd&Q- zD^ulPn#Zu8lylr-rsnjh&x5{PNRag=Nd2TouiUk4hs$LaGJ$_FT^3r`Z!dupxW>W1IhW@HK$r&09xZEmV;p|+ z5%3YXO9)Kk{e;>5|K^+j|9_W8^Skj8@DaEl5x|_L)+QE{yT^!ZCD~njn4W|5u*CRA zIkiP7V=S!RzK*8?yN+Mt)H%0Kc6-FB8|Bm%CplZ3D8J3W=YIzL+xs&={`cd5H|m%o SKFd5&jd=j)=n`8JBY~WXbBgSNNGg#j1`%`| z*O@tDOJXEY(18d#5V5{PH|Gmh|b} zcBA}L_%!GG^w5i=#?$M5XX~EFH3ztMh+jA?dF_LbJp*Sl45b1eozQcKqiXdl$*twj zoIR&$T2Xs!?$L=kvPa`#+a7GOy9bndPJC@U58d9xDqXlkgOTk9y#Xh<-5#23KXQXE zowVsV=ngs86a!kJP_Rl@rqhjjv!WaIdUICMr$*IiRP+s_F`E^%i&wATyl*}6{D8h< zo4}({9-+9Oba{=p8GB5rP2T>_wodB*et09+KV$yn6Ztzv>KWy9wwsLkpPGZfqd_07 zm;yO)7bED+wYWd&{lTSq^l(nn&&9EnNAL-!!*v1(67lij#N*>K#z%7<$nE)2{%@cg#*3{fvJYF1pNeZ5`_lR#uo@ pB#=|E;psRcPsb7Ge;DGmj;4&$k{AiZ9xUoZ0GB~EN`Vtq;1B1-E@}V( diff --git a/models/mhg_model/pickles/.DS_Store b/models/mhg_model/pickles/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0B&oLq|5LHpYE zLn&oPz73{&6)d8~vKmG6*Hn9+8&4kHz5nES_&%Q%`jb^v z;0I{zro%0K#zMmjCewZ=p@Z-(a?T2{0=o(v*lL&d|7Xqj|J@+2u>!2Xf2DwEkAv|DU&-yQdoM?O vt-|yU6B+Spi{C@AV76l9(pG#2lQHxwDj@m}Ym4YXafiqU%uPX2jkxYB3 diff --git a/models/tdims/src/tdims/load.py b/models/tdims/src/tdims/load.py index 03ff781..b9d7d0c 100644 --- a/models/tdims/src/tdims/load.py +++ b/models/tdims/src/tdims/load.py @@ -12,7 +12,6 @@ import pandas as pd from collections import defaultdict -import types import warnings warnings.simplefilter('ignore')