From b014ad81ae00c029c8f71da07668a8933a6df56c Mon Sep 17 00:00:00 2001 From: QG-phy Date: Thu, 27 Jul 2023 21:16:16 +0800 Subject: [PATCH 01/63] update hBN example --- README.md | 2 +- examples/hBN/input_short.json | 59 +++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 examples/hBN/input_short.json diff --git a/README.md b/README.md index d236d5db..27559351 100644 --- a/README.md +++ b/README.md @@ -242,7 +242,7 @@ The ```onsitemode``` is set to ```none``` which means we do not use onsite corre using the command to train the first model: ```bash -cd deeptb/examples/hBN/run +cd deeptb/examples/hBN dptb train -sk input_short.json -o ./first ``` Here ``-sk`` indicate to fit the sk parameters, and ``-o`` indicate the output directory. During the fitting procedure, we can see the loss curve of hBN is decrease consistently. When finished, we get the fitting results in folders ```first```: diff --git a/examples/hBN/input_short.json b/examples/hBN/input_short.json new file mode 100644 index 00000000..1da14980 --- /dev/null +++ b/examples/hBN/input_short.json @@ -0,0 +1,59 @@ +{ + "common_options": { + "onsitemode": "none", + "onsite_cutoff": 1.6, + "bond_cutoff": 1.6, + "env_cutoff": 3.5, + "atomtype": [ + "N", + "B" + ], + "proj_atom_neles": { + "N": 5, + "B": 3 + }, + "proj_atom_anglr_m": { + "N": [ + "2s", + "2p" + ], + "B": [ + "2s", + "2p" + ] + } + }, + "train_options": { + "seed":120478, + "num_epoch": 200, + "optimizer": {"lr":1e-2} + }, + "data_options": { + "use_reference": true, + "train": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_sparse" + }, + "validation": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_sparse" + }, + "reference": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_sparse" + } + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1 + }, + "skfunction": { + "sk_cutoff": 1.6, + "sk_decay_w": 0.3 + } + } +} From 24f2571e3aa2a4e618079626442644a205778566 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Thu, 27 Jul 2023 21:19:06 +0800 Subject: [PATCH 02/63] add the xdat.traj in hbn sparse data. --- examples/hBN/data/kpath_sparse.0/xdat.traj | Bin 0 -> 383 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/hBN/data/kpath_sparse.0/xdat.traj diff --git a/examples/hBN/data/kpath_sparse.0/xdat.traj b/examples/hBN/data/kpath_sparse.0/xdat.traj new file mode 100644 index 0000000000000000000000000000000000000000..56e0742960e937fb81fb705c4d7be9feda039774 GIT binary patch literal 383 zcmdN@$WK!U&B=8PcGV3jO3X@4F3B&dR8U}MfB;4)Z2+Y!pfo#_W`)v1lA+7Lh=}d` zz2oEhHpTDu5MezBmxWq9h8$n)v+MJF+7zF|#s5R~RV$UH78Pga=P6k!80sh}B^IZ~ zBSe&p^^A=543Z3$fKmlX$v{QXB}JvFItmCf7ATchnwtbPMh_@ot(2FNSX7i)2~rzv z1d`3nD={+xnqX=cTMIHLzc{l5Xd^b|Its=h9celFi4Z;JMqoY3sW~|i1NBS|j4gq{ z#KKfZ!9dRdOaS#n>l*4AnHqwm%uS4S6pZu?%`8lf%uUVAAPPZhVCsR^0GY9|wE){M BU1 Date: Thu, 27 Jul 2023 21:44:30 +0800 Subject: [PATCH 03/63] doc: change and add some comments --- dptb/dataprocess/processor.py | 5 ++--- dptb/nnsktb/onsiteFunc.py | 3 +-- dptb/structure/structure.py | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/dptb/dataprocess/processor.py b/dptb/dataprocess/processor.py index fa71135e..e4b196c8 100644 --- a/dptb/dataprocess/processor.py +++ b/dptb/dataprocess/processor.py @@ -5,7 +5,6 @@ from dptb.structure.abstract_stracture import AbstractStructure class Processor(object): - # TODO: 现在strain的env 是通过get_env 获得,但是在dptb中的env是有另外的含义。是否已经考虑。 def __init__(self, structure_list: List[AbstractStructure], kpoint, eigen_list, batchsize: int, wannier_list = None, env_cutoff: float = 3.0, onsitemode=None, onsite_cutoff=None, sorted_bond=None, sorted_onsite=None, sorted_env=None, bandinfo=None, device='cpu', dtype=torch.float32, if_shuffle=True): super(Processor, self).__init__() @@ -141,7 +140,7 @@ def get_onsitenv(self, cutoff=None, sorted=None): if cutoff is None: cutoff = self.onsite_cutoff else: - assert isinstance(cutoff, float) + assert isinstance(cutoff, float), "The cutoff should be a float number." if sorted is None: batch_env = [] @@ -267,7 +266,7 @@ def __next__(self): self.shuffle() bond, bond_onsite = self.get_bond(self.sorted_bond) - if not self.onsitemode == 'strain': + if not self.onsitemode in ['strain','NRL']: # for NRL - TB we also need the onsite env. data = (bond, bond_onsite, self.get_env(sorted=self.sorted_env), None, self.__struct_workspace__, self.kpoint, self.eigen_list[self.__struct_idx_workspace__].astype(float), self.wannier_list[self.__struct_idx_workspace__]) else: diff --git a/dptb/nnsktb/onsiteFunc.py b/dptb/nnsktb/onsiteFunc.py index 946fede8..9b8b71ee 100644 --- a/dptb/nnsktb/onsiteFunc.py +++ b/dptb/nnsktb/onsiteFunc.py @@ -67,8 +67,7 @@ def onsiteFunc(batch_bonds_onsite, onsite_db: dict, nn_onsiteE: dict=None): e.g.: {f: [tensor[es,ep], tensor[es,ep]]} or {f: [tensor[es,ep1,ep2,ep3], tensor[es,ep1,ep2,ep3]]}. """ batch_onsiteEs = {} - # TODO: change this part back to the original one, see the qgonsite branch. - for kf in list(batch_bonds_onsite.keys()): + for kf in list(batch_bonds_onsite.keys()): # kf is the index of frame number. bonds_onsite = batch_bonds_onsite[kf][:,1:] ia_list = map(lambda x: atomic_num_dict_r[int(x)], bonds_onsite[:,0]) # itype if nn_onsiteE is not None: diff --git a/dptb/structure/structure.py b/dptb/structure/structure.py index 0b196c08..ba23226a 100644 --- a/dptb/structure/structure.py +++ b/dptb/structure/structure.py @@ -185,6 +185,7 @@ def get_onsitenv(self, onsite_cutoff=None, sorted='iatom'): logging.error("onsite_cutoff:ValueError, onsite_cutoff for bond is not positive'") raise ValueError else: + # note: the onsite env is not smoothed. norm is |rij| not 1/|rij| or s(|rij|). self.__onsitenv__ = self.cal_env(env_cutoff=onsite_cutoff, sorted=sorted) self.onsite_cutoff = onsite_cutoff self.if_onsitenv_ready = True From c71b5eac823152b5a4521d85b7f9dbd247cdebd7 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 8 Aug 2023 11:26:12 +0800 Subject: [PATCH 04/63] refactor(onsite energy): make the onsite energy more general. update 12 files and create 1 file 1. add onsite formula 2. modify the onsitefunc to be the same style of sk hoping integralfunc 3. use the onsite formula to get onsite orbital energy 4. the strain mode is special still treat in the sk hopping style. --- dptb/nnops/NN2HRK.py | 4 +- dptb/nnops/apihost.py | 1 - dptb/nnops/tester_dptb.py | 2 +- dptb/nnops/tester_nnsk.py | 2 +- dptb/nnops/train_dptb.py | 2 +- dptb/nnops/train_nnsk.py | 2 +- dptb/nnsktb/integralFunc.py | 1 + dptb/nnsktb/onsiteFunc.py | 55 +++++++++++++------ dptb/nnsktb/onsite_formula.py | 66 +++++++++++++++++++++++ dptb/plugins/init_data.py | 1 - dptb/plugins/init_dptb.py | 7 ++- dptb/plugins/init_nnsk.py | 18 +++++-- dptb/tests/data/hBN/data/set.0/xdat.traj | Bin 383 -> 381 bytes 13 files changed, 130 insertions(+), 31 deletions(-) create mode 100644 dptb/nnsktb/onsite_formula.py diff --git a/dptb/nnops/NN2HRK.py b/dptb/nnops/NN2HRK.py index c8e79fd5..51c70f64 100644 --- a/dptb/nnops/NN2HRK.py +++ b/dptb/nnops/NN2HRK.py @@ -92,7 +92,7 @@ def _get_nnsk_HR(self): coeffdict = self.apihost.model(mode='hopping') batch_hoppings = self.apihost.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.apihost.model_config['skfunction']['sk_cutoff'], w=self.apihost.model_config['skfunction']['sk_decay_w']) nn_onsiteE, onsite_coeffdict = self.apihost.model(mode='onsite') - batch_onsiteEs = self.apihost.onsite_fun(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.apihost.onsite_db, nn_onsiteE=nn_onsiteE) + batch_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.apihost.onsite_db, nn_onsiteE=nn_onsiteE) if self.apihost.model_config['soc']: nn_soc_lambdas, _ = self.apihost.model(mode='soc') @@ -140,7 +140,7 @@ def _get_dptb_HR(self): batch_nnsk_hoppings = self.apihost.hops_fun.get_skhops( batch_bond_hoppings, coeffdict, rcut=self.apihost.model_config["skfunction"]["sk_cutoff"], w=self.apihost.model_config["skfunction"]["sk_decay_w"]) nnsk_onsiteE, onsite_coeffdict = self.apihost.sknet(mode='onsite') - batch_nnsk_onsiteEs = self.apihost.onsite_fun(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.apihost.onsite_db, nn_onsiteE=nnsk_onsiteE) + batch_nnsk_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.apihost.onsite_db, nn_onsiteE=nnsk_onsiteE) if self.apihost.model_config["soc"]: nnsk_soc_lambdas, _ = self.apihost.sknet(mode="soc") batch_nnsk_soc_lambdas = self.apihost.soc_fun(batch_bonds_onsite=batch_bond_onsites, soc_db=self.apihost.soc_db, nn_soc=nnsk_soc_lambdas) diff --git a/dptb/nnops/apihost.py b/dptb/nnops/apihost.py index ae44724d..3f648b98 100644 --- a/dptb/nnops/apihost.py +++ b/dptb/nnops/apihost.py @@ -5,7 +5,6 @@ from dptb.nnsktb.integralFunc import SKintHops from dptb.utils.argcheck import normalize, host_normalize from dptb.utils.constants import dtype_dict -from dptb.nnsktb.onsiteFunc import onsiteFunc, loadOnsite from dptb.plugins.base_plugin import PluginUser log = logging.getLogger(__name__) diff --git a/dptb/nnops/tester_dptb.py b/dptb/nnops/tester_dptb.py index 5f1d50f4..49c15c3f 100644 --- a/dptb/nnops/tester_dptb.py +++ b/dptb/nnops/tester_dptb.py @@ -70,7 +70,7 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc batch_bond_hoppings, coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) nnsk_onsiteE, onsite_coeffdict = self.sknet(mode='onsite') - batch_nnsk_onsiteEs = self.onsite_fun(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nnsk_onsiteE) + batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nnsk_onsiteE) if self.onsitemode == "strain": batch_nnsk_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) diff --git a/dptb/nnops/tester_nnsk.py b/dptb/nnops/tester_nnsk.py index 236560d1..a8d67a28 100644 --- a/dptb/nnops/tester_nnsk.py +++ b/dptb/nnops/tester_nnsk.py @@ -63,7 +63,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) nn_onsiteE, onsite_coeffdict = self.model(mode='onsite') - batch_onsiteEs = self.onsite_fun(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nn_onsiteE) + batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nn_onsiteE) if self.onsitemode == 'strain': batch_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) else: diff --git a/dptb/nnops/train_dptb.py b/dptb/nnops/train_dptb.py index fc912a5a..c45af236 100644 --- a/dptb/nnops/train_dptb.py +++ b/dptb/nnops/train_dptb.py @@ -149,7 +149,7 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc batch_bond_hoppings, coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) - batch_nnsk_onsiteEs = self.onsite_fun(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nnsk_onsiteE) + batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nnsk_onsiteE) if self.onsitemode == "strain": batch_nnsk_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) diff --git a/dptb/nnops/train_nnsk.py b/dptb/nnops/train_nnsk.py index 4eb1c9fc..f79a702c 100644 --- a/dptb/nnops/train_nnsk.py +++ b/dptb/nnops/train_nnsk.py @@ -124,7 +124,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str # get sk param (of each bond or onsite) batch_hoppings = self.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) - batch_onsiteEs = self.onsite_fun(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nn_onsiteE) + batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nn_onsiteE) if self.onsitemode == 'strain': batch_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) else: diff --git a/dptb/nnsktb/integralFunc.py b/dptb/nnsktb/integralFunc.py index 817ec14f..97a1bd89 100644 --- a/dptb/nnsktb/integralFunc.py +++ b/dptb/nnsktb/integralFunc.py @@ -53,6 +53,7 @@ def get_skhops(self, batch_bonds, coeff_paras: dict, rcut:th.float32 = th.tensor ibond = batch_bonds[fi][ib,1:8] rij = batch_bonds[fi][ib,8] ia, ja = atomic_num_dict_r[int(ibond[0])], atomic_num_dict_r[int(ibond[2])] + # take all the coeffient parameters for the bond type. paraArray = th.stack([coeff_paras[isk] for isk in self.bond_index_dict[f'{ia}-{ja}']]) paras = {'paraArray':paraArray,'rij':rij, 'iatomtype':ia, 'jatomtype':ja, 'rcut':rcut,'w':w} diff --git a/dptb/nnsktb/onsiteFunc.py b/dptb/nnsktb/onsiteFunc.py index 9b8b71ee..9644f988 100644 --- a/dptb/nnsktb/onsiteFunc.py +++ b/dptb/nnsktb/onsiteFunc.py @@ -4,6 +4,7 @@ from dptb.utils.constants import atomic_num_dict_r from dptb.nnsktb.onsiteDB import onsite_energy_database from dptb.nnsktb.formula import SKFormula +from dptb.nnsktb.onsite_formula import onsiteFormula import logging # define the function for output all the onsites Es for given i. @@ -50,22 +51,7 @@ def loadOnsite(onsite_map: dict, unit="Hartree"): return onsite_db def onsiteFunc(batch_bonds_onsite, onsite_db: dict, nn_onsiteE: dict=None): - """ This function is to get the onsite energies for given bonds_onsite. - - Parameters: - ----------- - batch_bonds_onsite: list - e.g.: dict(f: [[f, 7, 0, 7, 0, 0, 0, 0], - [f, 5, 1, 5, 1, 0, 0, 0]]) - onsite_db: dict from function loadOnsite - e.g.: {'N':tensor[es,ep], 'B': tensor[es,ep]} or {'N':tensor[es,ep1,ep2,ep3], 'B': tensor[es,ep1,ep2,ep3]} - - Return: - ------ - batch_onsiteEs: - dict. - e.g.: {f: [tensor[es,ep], tensor[es,ep]]} or {f: [tensor[es,ep1,ep2,ep3], tensor[es,ep1,ep2,ep3]]}. - """ +# this function is not used anymore. batch_onsiteEs = {} for kf in list(batch_bonds_onsite.keys()): # kf is the index of frame number. bonds_onsite = batch_bonds_onsite[kf][:,1:] @@ -82,6 +68,43 @@ def onsiteFunc(batch_bonds_onsite, onsite_db: dict, nn_onsiteE: dict=None): return batch_onsiteEs +class orbitalEs(onsiteFormula): + """ This calss is to get the onsite energies for given bonds_onsite. + """ + def __init__(self, functype='none') -> None: + super().__init__(functype) + + def get_onsiteEs(self,batch_bonds_onsite, onsite_db: dict, nn_onsiteE: dict=None, **kwargs): + """ + Parameters: + ----------- + batch_bonds_onsite: list + e.g.: dict(f: [[f, 7, 0, 7, 0, 0, 0, 0], + [f, 5, 1, 5, 1, 0, 0, 0]]) + onsite_db: dict from function loadOnsite + e.g.: {'N':tensor[es,ep], 'B': tensor[es,ep]} + + Return: + ------ + batch_onsiteEs: + dict. + e.g.: {f: [tensor[es,ep], tensor[es,ep]]} + """ + batch_onsiteEs = {} + for kf in list(batch_bonds_onsite.keys()): # kf is the index of frame number. + bonds_onsite = batch_bonds_onsite[kf][:,1:] + ia_list = map(lambda x: atomic_num_dict_r[int(x)], bonds_onsite[:,0]) # itype + if self.functype == 'none': + onsiteEs = map(lambda x: onsite_db[x], ia_list) + else: + onsiteEs = [] + for x in ia_list: + onsiteEs.append(self.skEs(xtype=x, onsite_db=onsite_db, nn_onsiteE=nn_onsiteE, **kwargs)) + + batch_onsiteEs[kf] = list(onsiteEs) + return batch_onsiteEs + + if __name__ == '__main__': onsite = loadOnsite({'N': {'2s': [0], '2p': [1,2,3]}, 'B': {'2s': [0], '2p': [1,2,3]}}) print(len(onsite['N'])) \ No newline at end of file diff --git a/dptb/nnsktb/onsite_formula.py b/dptb/nnsktb/onsite_formula.py new file mode 100644 index 00000000..812f38b8 --- /dev/null +++ b/dptb/nnsktb/onsite_formula.py @@ -0,0 +1,66 @@ +# define the integrals formula. +import torch as th +from abc import ABC, abstractmethod +from dptb.nnsktb.bondlengthDB import bond_length + + +class BaseOnsite(ABC): + def __init__(self) -> None: + pass + + @abstractmethod + def skEs(self, **kwargs): + '''This is a wrap function for a self-defined formula of onsite energies. one can easily modify it into whatever form they want. + + Returns + ------- + The function defined by type is called to cal onsite energies and returned. + + ''' + pass + + +class onsiteFormula(BaseOnsite): + + def __init__(self, functype='none') -> None: + super().__init__() + if functype == 'none': + self.functype = functype + self.num_paras = 0 + + elif functype == 'uniform': + self.functype = functype + self.num_paras = 1 + assert hasattr(self, 'uniform') + + elif functype == 'custom': + self.functype = functype + self.num_paras = None # defined by custom. + assert hasattr(self, 'custom') + else: + raise ValueError('No such formula') + + def skEs(self, **kwargs): + if self.functype == 'uniform': + return self.uniform(**kwargs) + + def uniform(self,xtype, onsite_db, nn_onsiteE,**kwargs): + '''This is a wrap function for a self-defined formula of onsite energies. one can easily modify it into whatever form they want. + + Returns + ------- + The function defined by functype is called to cal onsite energies and returned. + + ''' + assert xtype in onsite_db.keys(), f'{xtype} is not in the onsite_db.' + assert xtype in nn_onsiteE.keys(), f'{xtype} is not in the nn_onsiteE.' + assert onsite_db[xtype].shape == nn_onsiteE[xtype].shape, f'{xtype} onsite_db and nn_onsiteE have different shape.' + return onsite_db[xtype] + nn_onsiteE[xtype] + + + + + + + + diff --git a/dptb/plugins/init_data.py b/dptb/plugins/init_data.py index 1af3bf69..ba3c833c 100644 --- a/dptb/plugins/init_data.py +++ b/dptb/plugins/init_data.py @@ -3,7 +3,6 @@ from dptb.nnsktb.sknet import SKNet from dptb.nnsktb.skintTypes import all_skint_types, all_onsite_intgrl_types from dptb.utils.index_mapping import Index_Mapings -from dptb.nnsktb.onsiteFunc import onsiteFunc, loadOnsite from dptb.utils.tools import get_uniq_symbol from dptb.nnsktb.integralFunc import SKintHops from dptb.nnsktb.loadparas import load_paras diff --git a/dptb/plugins/init_dptb.py b/dptb/plugins/init_dptb.py index 89cc9e84..27602c15 100644 --- a/dptb/plugins/init_dptb.py +++ b/dptb/plugins/init_dptb.py @@ -5,7 +5,7 @@ import logging from dptb.nnet.nntb import NNTB from dptb.nnsktb.sknet import SKNet -from dptb.nnsktb.onsiteFunc import onsiteFunc, loadOnsite +from dptb.nnsktb.onsiteFunc import onsiteFunc, loadOnsite, orbitalEs from dptb.nnsktb.socFunc import socFunc, loadSoc from dptb.nnsktb.skintTypes import all_skint_types, all_onsite_intgrl_types, all_onsite_ene_types from dptb.utils.index_mapping import Index_Mapings @@ -219,12 +219,15 @@ def init_correction_model(self, **options): onsite_strain_index_map, onsite_strain_num, onsite_index_map, onsite_num = \ IndMap.Onsite_Ind_Mapings(onsitemode, atomtype=atomtype) - onsite_fun = onsiteFunc + # onsite_fun = onsiteFunc hops_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m) if soc: soc_fun = socFunc if onsitemode == 'strain': onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) + onsite_fun = orbitalEs(functype='none') + else: + onsite_fun = orbitalEs(functype=onsitemode) _, reducted_skint_types, _ = all_skint_types(bond_index_map) hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras} diff --git a/dptb/plugins/init_nnsk.py b/dptb/plugins/init_nnsk.py index 3b7d3037..ac04905e 100644 --- a/dptb/plugins/init_nnsk.py +++ b/dptb/plugins/init_nnsk.py @@ -3,7 +3,7 @@ from dptb.plugins.base_plugin import Plugin import logging from dptb.nnsktb.sknet import SKNet -from dptb.nnsktb.onsiteFunc import onsiteFunc, loadOnsite +from dptb.nnsktb.onsiteFunc import onsiteFunc, loadOnsite, orbitalEs from dptb.nnsktb.socFunc import socFunc, loadSoc from dptb.nnsktb.skintTypes import all_skint_types, all_onsite_intgrl_types, all_onsite_ene_types from dptb.utils.index_mapping import Index_Mapings @@ -57,17 +57,22 @@ def init_from_scratch(self, **common_and_model_options): onsite_strain_index_map, onsite_strain_num, onsite_index_map, onsite_num = \ IndMap.Onsite_Ind_Mapings(onsitemode, atomtype=atomtype) - onsite_fun = onsiteFunc + # onsite_fun = onsiteFunc hops_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m) if soc: soc_fun = socFunc if onsitemode == 'strain': onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) - + # for strain mode the onsite_fun will use none mode to add the onsite_db. + onsite_fun = orbitalEs(functype='none') + else: + onsite_fun = orbitalEs(functype=onsitemode) + _, reducted_skint_types, _ = all_skint_types(bond_index_map) _, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) hopping_neurons = {"nhidden": num_hopping_hideen, "nout": hops_fun.num_paras} +# TODO: modify onsite_neurons, to have nout for other modes. options = {"onsitemode": onsitemode} if onsitemode == 'strain': @@ -221,13 +226,16 @@ def init_from_model(self, **common_and_model_and_run_options): onsite_strain_index_map, onsite_strain_num, onsite_index_map, onsite_num = \ IndMap.Onsite_Ind_Mapings(onsitemode, atomtype=atomtype) - onsite_fun = onsiteFunc + # onsite_fun = onsiteFunc hops_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m) if soc: soc_fun = socFunc if onsitemode == 'strain': onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) - + onsite_fun = orbitalEs(functype='none') + else: + onsite_fun = orbitalEs(functype=onsitemode) + _, reducted_skint_types, _ = all_skint_types(bond_index_map) _, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras} diff --git a/dptb/tests/data/hBN/data/set.0/xdat.traj b/dptb/tests/data/hBN/data/set.0/xdat.traj index 56e0742960e937fb81fb705c4d7be9feda039774..0cf248d3872e916cfba1d4512b617577c56e1989 100644 GIT binary patch delta 17 Zcmey*^p|Nu1>@g|m6}XOdJ~u31OP^Y2dn@9 delta 19 bcmey%^q*-$1>^sTm6|NZdIm`om)ryZR9Of? From 38adf035d9e117bfb73e8c3191a404a078c72224 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 8 Aug 2023 15:29:26 +0800 Subject: [PATCH 05/63] refactor(onsiteE, init model the onsite_neurons): add nout in the onsite_neurons settings in init_dptb and init_nnsk --- dptb/nnsktb/onsiteFunc.py | 1 + dptb/nnsktb/onsite_formula.py | 1 - dptb/nnsktb/sknet.py | 6 +++--- dptb/plugins/init_dptb.py | 2 +- dptb/plugins/init_nnsk.py | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dptb/nnsktb/onsiteFunc.py b/dptb/nnsktb/onsiteFunc.py index 9644f988..b211985d 100644 --- a/dptb/nnsktb/onsiteFunc.py +++ b/dptb/nnsktb/onsiteFunc.py @@ -70,6 +70,7 @@ def onsiteFunc(batch_bonds_onsite, onsite_db: dict, nn_onsiteE: dict=None): class orbitalEs(onsiteFormula): """ This calss is to get the onsite energies for given bonds_onsite. + """ def __init__(self, functype='none') -> None: super().__init__(functype) diff --git a/dptb/nnsktb/onsite_formula.py b/dptb/nnsktb/onsite_formula.py index 812f38b8..4763f2dd 100644 --- a/dptb/nnsktb/onsite_formula.py +++ b/dptb/nnsktb/onsite_formula.py @@ -57,7 +57,6 @@ def uniform(self,xtype, onsite_db, nn_onsiteE,**kwargs): assert onsite_db[xtype].shape == nn_onsiteE[xtype].shape, f'{xtype} onsite_db and nn_onsiteE have different shape.' return onsite_db[xtype] + nn_onsiteE[xtype] - diff --git a/dptb/nnsktb/sknet.py b/dptb/nnsktb/sknet.py index e27cfb73..9d88326a 100644 --- a/dptb/nnsktb/sknet.py +++ b/dptb/nnsktb/sknet.py @@ -73,8 +73,8 @@ def __init__(self, skint_types: list, onsite_types:dict, soc_types: dict, hoppin assert onsite_types is not None, "for strain mode, the onsiteint_types can not be None!" onsite_config = { 'nin': len(self.onsite_types), - 'nhidden': hopping_neurons.get('nhidden',1), - 'nout': hopping_neurons.get('nout'), + 'nhidden': onsite_neurons.get('nhidden',1), + 'nout': onsite_neurons.get('nout'), 'ini_std':0.01} # Note: 这里onsite integral 选取和bond integral一样的公式,因此是相同的 nout. @@ -88,7 +88,7 @@ def __init__(self, skint_types: list, onsite_types:dict, soc_types: dict, hoppin onsite_config = { 'nin': len(self.onsite_types), 'nhidden': onsite_neurons.get('nhidden',1), - 'nout': 1, + 'nout': onsite_neurons.get('nout',1), 'ini_std':0.01} self.onsite_net = DirectNet(**onsite_config) diff --git a/dptb/plugins/init_dptb.py b/dptb/plugins/init_dptb.py index 27602c15..ed4fd5a0 100644 --- a/dptb/plugins/init_dptb.py +++ b/dptb/plugins/init_dptb.py @@ -238,7 +238,7 @@ def init_correction_model(self, **options): _, reducted_onsiteint_types, _ = all_onsite_intgrl_types(onsite_strain_index_map) onsite_types = reducted_onsiteint_types else: - onsite_neurons = {"nhidden":num_onsite_hidden} + onsite_neurons = {"nhidden":num_onsite_hidden,"nout":onsite_fun.num_paras} onsite_types = reduced_onsiteE_types if soc: diff --git a/dptb/plugins/init_nnsk.py b/dptb/plugins/init_nnsk.py index ac04905e..b82dfcee 100644 --- a/dptb/plugins/init_nnsk.py +++ b/dptb/plugins/init_nnsk.py @@ -80,7 +80,7 @@ def init_from_scratch(self, **common_and_model_options): _, reducted_onsiteint_types, onsite_strain_ind_dict = all_onsite_intgrl_types(onsite_strain_index_map) onsite_types = reducted_onsiteint_types else: - onsite_neurons = {"nhidden":num_onsite_hidden} + onsite_neurons = {"nhidden":num_onsite_hidden, "nout": onsite_fun.num_paras} onsite_types = reduced_onsiteE_types options.update({"onsite_types":onsite_types}) From 1d08f50c7132ed6188769c608336b91d48778e0c Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 8 Aug 2023 15:51:21 +0800 Subject: [PATCH 06/63] test: update test_sknet.py --- dptb/tests/test_sknet.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dptb/tests/test_sknet.py b/dptb/tests/test_sknet.py index b141d678..97777315 100644 --- a/dptb/tests/test_sknet.py +++ b/dptb/tests/test_sknet.py @@ -8,9 +8,9 @@ class TestSKnet: reducted_skint_types = ['N-N-2s-2s-0', 'N-B-2s-2p-0', 'B-B-2p-2p-0', 'B-B-2p-2p-1'] onsite_num = {'N':4,'B':3} bond_neurons = {'nhidden':5,'nout':4} - onsite_neurons = {'nhidden':6} - - + onsite_neurons = {'nhidden':6,'nout':1} + onsite_strian_neurons = {'nhidden':6,'nout':4} + onsite_num2 = {'N':2,'B':1} reducted_onsiteint_types = ['N-N-2s-2s-0', @@ -29,7 +29,7 @@ class TestSKnet: all_skint_types_dict, reducted_skint_types, sk_bond_ind_dict = all_skint_types(bond_index_map=bond_index_map) modelstrain = SKNet(skint_types=reducted_skint_types, onsite_types=reducted_onsiteint_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, - onsite_neurons=onsite_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='strain') + onsite_neurons=onsite_strian_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='strain') modeluniform = SKNet(skint_types=reducted_skint_types, onsite_types=reduced_onsiteE_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, onsite_neurons=onsite_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='uniform') @@ -74,8 +74,8 @@ def test_onsite_strain(self): paras = list(self.modelstrain.onsite_net.parameters()) assert len(paras) == 2 - assert paras[0].shape == torch.Size([len(self.reducted_onsiteint_types), 1, self.bond_neurons['nhidden']]) - assert paras[1].shape == torch.Size([len(self.reducted_onsiteint_types), self.bond_neurons['nout'], self.bond_neurons['nhidden']]) + assert paras[0].shape == torch.Size([len(self.reducted_onsiteint_types), 1, self.onsite_strian_neurons['nhidden']]) + assert paras[1].shape == torch.Size([len(self.reducted_onsiteint_types), self.onsite_strian_neurons['nout'], self.onsite_strian_neurons['nhidden']]) _, coeff = self.modelstrain(mode='onsite') assert len(coeff) == len(self.reducted_onsiteint_types) From dbdca274e63f935677ae83c777f3099ea97372d3 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Wed, 9 Aug 2023 13:42:34 +0800 Subject: [PATCH 07/63] [refactor] remove the onsite_db from outside. will generate it insite the onsitefunc. --- dptb/nnops/NN2HRK.py | 4 ++-- dptb/nnops/tester_dptb.py | 2 +- dptb/nnops/tester_nnsk.py | 2 +- dptb/nnops/train_dptb.py | 2 +- dptb/nnops/train_nnsk.py | 2 +- dptb/nnsktb/onsiteFunc.py | 18 +++++++++++++----- dptb/nnsktb/onsite_formula.py | 9 ++++----- dptb/plugins/init_dptb.py | 6 +++--- dptb/plugins/init_nnsk.py | 17 ++++++++++------- 9 files changed, 36 insertions(+), 26 deletions(-) diff --git a/dptb/nnops/NN2HRK.py b/dptb/nnops/NN2HRK.py index 51c70f64..0e518d08 100644 --- a/dptb/nnops/NN2HRK.py +++ b/dptb/nnops/NN2HRK.py @@ -92,7 +92,7 @@ def _get_nnsk_HR(self): coeffdict = self.apihost.model(mode='hopping') batch_hoppings = self.apihost.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.apihost.model_config['skfunction']['sk_cutoff'], w=self.apihost.model_config['skfunction']['sk_decay_w']) nn_onsiteE, onsite_coeffdict = self.apihost.model(mode='onsite') - batch_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.apihost.onsite_db, nn_onsiteE=nn_onsiteE) + batch_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nn_onsiteE) if self.apihost.model_config['soc']: nn_soc_lambdas, _ = self.apihost.model(mode='soc') @@ -140,7 +140,7 @@ def _get_dptb_HR(self): batch_nnsk_hoppings = self.apihost.hops_fun.get_skhops( batch_bond_hoppings, coeffdict, rcut=self.apihost.model_config["skfunction"]["sk_cutoff"], w=self.apihost.model_config["skfunction"]["sk_decay_w"]) nnsk_onsiteE, onsite_coeffdict = self.apihost.sknet(mode='onsite') - batch_nnsk_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.apihost.onsite_db, nn_onsiteE=nnsk_onsiteE) + batch_nnsk_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nnsk_onsiteE) if self.apihost.model_config["soc"]: nnsk_soc_lambdas, _ = self.apihost.sknet(mode="soc") batch_nnsk_soc_lambdas = self.apihost.soc_fun(batch_bonds_onsite=batch_bond_onsites, soc_db=self.apihost.soc_db, nn_soc=nnsk_soc_lambdas) diff --git a/dptb/nnops/tester_dptb.py b/dptb/nnops/tester_dptb.py index 49c15c3f..3743b1ab 100644 --- a/dptb/nnops/tester_dptb.py +++ b/dptb/nnops/tester_dptb.py @@ -70,7 +70,7 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc batch_bond_hoppings, coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) nnsk_onsiteE, onsite_coeffdict = self.sknet(mode='onsite') - batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nnsk_onsiteE) + batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nnsk_onsiteE) if self.onsitemode == "strain": batch_nnsk_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) diff --git a/dptb/nnops/tester_nnsk.py b/dptb/nnops/tester_nnsk.py index a8d67a28..792760e5 100644 --- a/dptb/nnops/tester_nnsk.py +++ b/dptb/nnops/tester_nnsk.py @@ -63,7 +63,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) nn_onsiteE, onsite_coeffdict = self.model(mode='onsite') - batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nn_onsiteE) + batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nn_onsiteE) if self.onsitemode == 'strain': batch_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) else: diff --git a/dptb/nnops/train_dptb.py b/dptb/nnops/train_dptb.py index c45af236..01d00a6d 100644 --- a/dptb/nnops/train_dptb.py +++ b/dptb/nnops/train_dptb.py @@ -149,7 +149,7 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc batch_bond_hoppings, coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) - batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nnsk_onsiteE) + batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nnsk_onsiteE) if self.onsitemode == "strain": batch_nnsk_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) diff --git a/dptb/nnops/train_nnsk.py b/dptb/nnops/train_nnsk.py index f79a702c..f1723415 100644 --- a/dptb/nnops/train_nnsk.py +++ b/dptb/nnops/train_nnsk.py @@ -124,7 +124,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str # get sk param (of each bond or onsite) batch_hoppings = self.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) - batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_db=self.onsite_db, nn_onsiteE=nn_onsiteE) + batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nn_onsiteE) if self.onsitemode == 'strain': batch_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) else: diff --git a/dptb/nnsktb/onsiteFunc.py b/dptb/nnsktb/onsiteFunc.py index b211985d..1324812c 100644 --- a/dptb/nnsktb/onsiteFunc.py +++ b/dptb/nnsktb/onsiteFunc.py @@ -4,6 +4,7 @@ from dptb.utils.constants import atomic_num_dict_r from dptb.nnsktb.onsiteDB import onsite_energy_database from dptb.nnsktb.formula import SKFormula +from dptb.utils.index_mapping import Index_Mapings from dptb.nnsktb.onsite_formula import onsiteFormula import logging @@ -72,10 +73,16 @@ class orbitalEs(onsiteFormula): """ This calss is to get the onsite energies for given bonds_onsite. """ - def __init__(self, functype='none') -> None: + def __init__(self, proj_atom_anglr_m, atomtype=None, functype='none',unit='Hartree') -> None: super().__init__(functype) + IndMap = Index_Mapings() + IndMap.update(proj_atom_anglr_m=proj_atom_anglr_m) + onsite_strain_index_map, onsite_strain_num, onsite_index_map, onsite_num = \ + IndMap.Onsite_Ind_Mapings(onsitemode=functype, atomtype=atomtype) + assert functype != 'strain', 'The onsite mode strain is not from this modula.' + self.onsite_db = loadOnsite(onsite_index_map, unit= unit) - def get_onsiteEs(self,batch_bonds_onsite, onsite_db: dict, nn_onsiteE: dict=None, **kwargs): + def get_onsiteEs(self,batch_bonds_onsite, nn_onsite_paras: dict=None, **kwargs): """ Parameters: ----------- @@ -96,12 +103,13 @@ def get_onsiteEs(self,batch_bonds_onsite, onsite_db: dict, nn_onsiteE: dict=None bonds_onsite = batch_bonds_onsite[kf][:,1:] ia_list = map(lambda x: atomic_num_dict_r[int(x)], bonds_onsite[:,0]) # itype if self.functype == 'none': - onsiteEs = map(lambda x: onsite_db[x], ia_list) + onsiteEs = map(lambda x: self.onsite_db[x], ia_list) + else: onsiteEs = [] for x in ia_list: - onsiteEs.append(self.skEs(xtype=x, onsite_db=onsite_db, nn_onsiteE=nn_onsiteE, **kwargs)) - + onsiteEs.append(self.skEs(xtype=x, onsite_db= self.onsite_db, nn_onsite_paras=nn_onsite_paras, **kwargs)) + batch_onsiteEs[kf] = list(onsiteEs) return batch_onsiteEs diff --git a/dptb/nnsktb/onsite_formula.py b/dptb/nnsktb/onsite_formula.py index 4763f2dd..4d86a1db 100644 --- a/dptb/nnsktb/onsite_formula.py +++ b/dptb/nnsktb/onsite_formula.py @@ -44,7 +44,7 @@ def skEs(self, **kwargs): if self.functype == 'uniform': return self.uniform(**kwargs) - def uniform(self,xtype, onsite_db, nn_onsiteE,**kwargs): + def uniform(self,xtype, onsite_db, nn_onsite_paras, **kwargs): '''This is a wrap function for a self-defined formula of onsite energies. one can easily modify it into whatever form they want. Returns @@ -53,10 +53,9 @@ def uniform(self,xtype, onsite_db, nn_onsiteE,**kwargs): ''' assert xtype in onsite_db.keys(), f'{xtype} is not in the onsite_db.' - assert xtype in nn_onsiteE.keys(), f'{xtype} is not in the nn_onsiteE.' - assert onsite_db[xtype].shape == nn_onsiteE[xtype].shape, f'{xtype} onsite_db and nn_onsiteE have different shape.' - return onsite_db[xtype] + nn_onsiteE[xtype] - + assert xtype in nn_onsite_paras.keys(), f'{xtype} is not in the nn_onsite_paras.' + assert onsite_db[xtype].shape == nn_onsite_paras[xtype].shape, f'{xtype} onsite_db and nn_onsite_paras have different shape.' + return onsite_db[xtype] + nn_onsite_paras[xtype] diff --git a/dptb/plugins/init_dptb.py b/dptb/plugins/init_dptb.py index ed4fd5a0..6d2533cc 100644 --- a/dptb/plugins/init_dptb.py +++ b/dptb/plugins/init_dptb.py @@ -225,9 +225,9 @@ def init_correction_model(self, **options): soc_fun = socFunc if onsitemode == 'strain': onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) - onsite_fun = orbitalEs(functype='none') + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype='none',unit=unit) else: - onsite_fun = orbitalEs(functype=onsitemode) + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit) _, reducted_skint_types, _ = all_skint_types(bond_index_map) hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras} @@ -275,7 +275,7 @@ def init_correction_model(self, **options): self.host.onsite_fun = onsite_fun self.host.hops_fun = hops_fun - self.host.onsite_db = loadOnsite(onsite_index_map, unit=unit) + # self.host.onsite_db = loadOnsite(onsite_index_map, unit=unit) if onsitemode == 'strain': self.host.onsitestrain_fun = onsitestrain_fun if soc: diff --git a/dptb/plugins/init_nnsk.py b/dptb/plugins/init_nnsk.py index b82dfcee..176cf975 100644 --- a/dptb/plugins/init_nnsk.py +++ b/dptb/plugins/init_nnsk.py @@ -49,6 +49,7 @@ def init_from_scratch(self, **common_and_model_options): onsitemode = common_and_model_options['onsitemode'] skformula = common_and_model_options['skfunction']['skformula'] soc = common_and_model_options["soc"] + unit=common_and_model_options["unit"] # ---------------------------------------------------------------------------------------------------------- IndMap = Index_Mapings() @@ -64,9 +65,10 @@ def init_from_scratch(self, **common_and_model_options): if onsitemode == 'strain': onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) # for strain mode the onsite_fun will use none mode to add the onsite_db. - onsite_fun = orbitalEs(functype='none') + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype='none',unit=unit) else: - onsite_fun = orbitalEs(functype=onsitemode) + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit) + _, reducted_skint_types, _ = all_skint_types(bond_index_map) _, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) @@ -107,8 +109,8 @@ def init_from_scratch(self, **common_and_model_options): self.host.onsite_fun = onsite_fun self.host.hops_fun = hops_fun - #self.host.onsite_index_map = onsite_index_map - self.host.onsite_db = loadOnsite(onsite_index_map, unit=common_and_model_options["unit"]) + # self.host.onsite_index_map = onsite_index_map + # self.host.onsite_db = loadOnsite(onsite_index_map, unit=common_and_model_options["unit"]) if soc: self.host.soc_fun = soc_fun self.host.soc_db = loadSoc(onsite_index_map) @@ -232,9 +234,10 @@ def init_from_model(self, **common_and_model_and_run_options): soc_fun = socFunc if onsitemode == 'strain': onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) - onsite_fun = orbitalEs(functype='none') + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype='none',unit=unit) else: - onsite_fun = orbitalEs(functype=onsitemode) + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit) + _, reducted_skint_types, _ = all_skint_types(bond_index_map) _, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) @@ -279,7 +282,7 @@ def init_from_model(self, **common_and_model_and_run_options): self.host.onsite_fun = onsite_fun self.host.hops_fun = hops_fun #self.host.onsite_index_map = onsite_index_map - self.host.onsite_db = loadOnsite(onsite_index_map, unit=unit) + #self.host.onsite_db = loadOnsite(onsite_index_map, unit=unit) if soc: self.host.soc_fun = soc_fun self.host.soc_db = loadSoc(onsite_index_map) From 0d4699df38b714b07cc375c553a7bcf0fbb46dda Mon Sep 17 00:00:00 2001 From: QG-phy Date: Wed, 9 Aug 2023 23:46:29 +0800 Subject: [PATCH 08/63] refactor(onsiteEs): add NRL TB onsite Energy formula. 1. add NRL TB onsite energy formula NRL in the onsite_formula.py 2. modify the onsite_func.py to adopt the NRL 3. modify init_nnsk init_dptb to adopt the changes in onsite_func 3. modify the test train nnsk and dptb .py to adopt the changes in onsite_func 4. add new parameters for NRL TB onsite energy in argcheck.py 5. add index_mapping NRL (temporarily using the uniform format) in the future the t2g eg orbital will be added! --- dptb/nnops/NN2HRK.py | 19 ++++++++++++---- dptb/nnops/tester_dptb.py | 2 +- dptb/nnops/tester_nnsk.py | 2 +- dptb/nnops/train_dptb.py | 2 +- dptb/nnops/train_nnsk.py | 2 +- dptb/nnsktb/onsiteFunc.py | 42 ++++++++++++++++++++++++++++++----- dptb/nnsktb/onsite_formula.py | 40 ++++++++++++++++++++++++++++++--- dptb/nnsktb/sknet.py | 30 ++++++++++++++++++++----- dptb/plugins/init_dptb.py | 10 +++++++++ dptb/plugins/init_nnsk.py | 25 +++++++++++++++++++-- dptb/utils/argcheck.py | 17 +++++++++++++- dptb/utils/index_mapping.py | 6 +++++ 12 files changed, 172 insertions(+), 25 deletions(-) diff --git a/dptb/nnops/NN2HRK.py b/dptb/nnops/NN2HRK.py index 0e518d08..e994250a 100644 --- a/dptb/nnops/NN2HRK.py +++ b/dptb/nnops/NN2HRK.py @@ -92,14 +92,19 @@ def _get_nnsk_HR(self): coeffdict = self.apihost.model(mode='hopping') batch_hoppings = self.apihost.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.apihost.model_config['skfunction']['sk_cutoff'], w=self.apihost.model_config['skfunction']['sk_decay_w']) nn_onsiteE, onsite_coeffdict = self.apihost.model(mode='onsite') - batch_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nn_onsiteE) + + if self.apihost.model_config['onsitemode'] in ['strain','NRL']: + batch_onsite_envs = predict_process.get_onsitenv(cutoff=self.apihost.model_config['onsite_cutoff'], sorted=self.sorted_onsite) + else: + batch_onsite_envs = None + + batch_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsite_envs, nn_onsite_paras=nn_onsiteE) if self.apihost.model_config['soc']: nn_soc_lambdas, _ = self.apihost.model(mode='soc') batch_soc_lambdas = self.apihost.soc_fun(batch_bonds_onsite=batch_bond_onsites, soc_db=self.apihost.soc_db, nn_soc=nn_soc_lambdas) if self.apihost.model_config['onsitemode'] == 'strain': - batch_onsite_envs = predict_process.get_onsitenv(cutoff=self.apihost.model_config['onsite_cutoff'], sorted=self.sorted_onsite) batch_onsiteVs = self.apihost.onsitestrain_fun.get_skhops(batch_bonds=batch_onsite_envs, coeff_paras=onsite_coeffdict) onsiteEs, hoppings, onsiteVs = batch_onsiteEs[0], batch_hoppings[0], batch_onsiteVs[0] onsitenvs = batch_onsite_envs[0][:,1:] @@ -140,13 +145,19 @@ def _get_dptb_HR(self): batch_nnsk_hoppings = self.apihost.hops_fun.get_skhops( batch_bond_hoppings, coeffdict, rcut=self.apihost.model_config["skfunction"]["sk_cutoff"], w=self.apihost.model_config["skfunction"]["sk_decay_w"]) nnsk_onsiteE, onsite_coeffdict = self.apihost.sknet(mode='onsite') - batch_nnsk_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nnsk_onsiteE) + + if self.apihost.model_config['onsitemode'] in ['strain','NRL']: + batch_onsite_envs = predict_process.get_onsitenv(cutoff=self.apihost.model_config['onsite_cutoff'], sorted=self.sorted_onsite) + else: + batch_onsite_envs = None + + batch_nnsk_onsiteEs = self.apihost.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsite_envs, nn_onsite_paras=nnsk_onsiteE) + if self.apihost.model_config["soc"]: nnsk_soc_lambdas, _ = self.apihost.sknet(mode="soc") batch_nnsk_soc_lambdas = self.apihost.soc_fun(batch_bonds_onsite=batch_bond_onsites, soc_db=self.apihost.soc_db, nn_soc=nnsk_soc_lambdas) if self.apihost.model_config['onsitemode'] == "strain": - batch_onsite_envs = predict_process.get_onsitenv(cutoff=self.apihost.model_config['onsite_cutoff'], sorted=self.sorted_onsite) batch_nnsk_onsiteVs = self.apihost.onsitestrain_fun.get_skhops(batch_bonds=batch_onsite_envs, coeff_paras=onsite_coeffdict) onsiteVs = batch_nnsk_onsiteVs[0] onsitenvs = batch_onsite_envs[0][:,1:] diff --git a/dptb/nnops/tester_dptb.py b/dptb/nnops/tester_dptb.py index 3743b1ab..79ede0ad 100644 --- a/dptb/nnops/tester_dptb.py +++ b/dptb/nnops/tester_dptb.py @@ -70,7 +70,7 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc batch_bond_hoppings, coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) nnsk_onsiteE, onsite_coeffdict = self.sknet(mode='onsite') - batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nnsk_onsiteE) + batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsitenvs, nn_onsite_paras=nnsk_onsiteE) if self.onsitemode == "strain": batch_nnsk_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) diff --git a/dptb/nnops/tester_nnsk.py b/dptb/nnops/tester_nnsk.py index 792760e5..59ccd95f 100644 --- a/dptb/nnops/tester_nnsk.py +++ b/dptb/nnops/tester_nnsk.py @@ -63,7 +63,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) nn_onsiteE, onsite_coeffdict = self.model(mode='onsite') - batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nn_onsiteE) + batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsitenvs, nn_onsite_paras=nn_onsiteE) if self.onsitemode == 'strain': batch_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) else: diff --git a/dptb/nnops/train_dptb.py b/dptb/nnops/train_dptb.py index 01d00a6d..a9cbd02b 100644 --- a/dptb/nnops/train_dptb.py +++ b/dptb/nnops/train_dptb.py @@ -149,7 +149,7 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc batch_bond_hoppings, coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) - batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nnsk_onsiteE) + batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsitenvs, nn_onsite_paras=nnsk_onsiteE) if self.onsitemode == "strain": batch_nnsk_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) diff --git a/dptb/nnops/train_nnsk.py b/dptb/nnops/train_nnsk.py index f1723415..c0654567 100644 --- a/dptb/nnops/train_nnsk.py +++ b/dptb/nnops/train_nnsk.py @@ -124,7 +124,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str # get sk param (of each bond or onsite) batch_hoppings = self.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) - batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, nn_onsite_paras=nn_onsiteE) + batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsitenvs, nn_onsite_paras=nn_onsiteE) if self.onsitemode == 'strain': batch_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) else: diff --git a/dptb/nnsktb/onsiteFunc.py b/dptb/nnsktb/onsiteFunc.py index 1324812c..d64c5220 100644 --- a/dptb/nnsktb/onsiteFunc.py +++ b/dptb/nnsktb/onsiteFunc.py @@ -6,6 +6,8 @@ from dptb.nnsktb.formula import SKFormula from dptb.utils.index_mapping import Index_Mapings from dptb.nnsktb.onsite_formula import onsiteFormula +from dptb.nnsktb.skintTypes import all_onsite_ene_types + import logging # define the function for output all the onsites Es for given i. @@ -73,7 +75,7 @@ class orbitalEs(onsiteFormula): """ This calss is to get the onsite energies for given bonds_onsite. """ - def __init__(self, proj_atom_anglr_m, atomtype=None, functype='none',unit='Hartree') -> None: + def __init__(self, proj_atom_anglr_m, atomtype=None, functype='none',unit='Hartree',**kwargs) -> None: super().__init__(functype) IndMap = Index_Mapings() IndMap.update(proj_atom_anglr_m=proj_atom_anglr_m) @@ -81,8 +83,14 @@ def __init__(self, proj_atom_anglr_m, atomtype=None, functype='none',unit='Hart IndMap.Onsite_Ind_Mapings(onsitemode=functype, atomtype=atomtype) assert functype != 'strain', 'The onsite mode strain is not from this modula.' self.onsite_db = loadOnsite(onsite_index_map, unit= unit) + _, _, self.onsite_index_dict = all_onsite_ene_types(onsite_index_map) + + if functype == 'NRL': + self.onsite_func_cutoff = kwargs.get('onsite_func_cutoff') + self.onsite_func_decay_w = kwargs.get('onsite_func_decay_w') + self.onsite_func_lambda = kwargs.get('onsite_func_lambda') - def get_onsiteEs(self,batch_bonds_onsite, nn_onsite_paras: dict=None, **kwargs): + def get_onsiteEs(self,batch_bonds_onsite, onsite_env: dict=None, nn_onsite_paras: dict=None, **kwargs): """ Parameters: ----------- @@ -101,16 +109,38 @@ def get_onsiteEs(self,batch_bonds_onsite, nn_onsite_paras: dict=None, **kwargs): batch_onsiteEs = {} for kf in list(batch_bonds_onsite.keys()): # kf is the index of frame number. bonds_onsite = batch_bonds_onsite[kf][:,1:] - ia_list = map(lambda x: atomic_num_dict_r[int(x)], bonds_onsite[:,0]) # itype + # ia_list = map(lambda x: atomic_num_dict_r[int(x)], bonds_onsite[:,0]) # itype + ia_list = map(lambda x: [atomic_num_dict_r[int(x[0])],int(x[1])], bonds_onsite[:,0:2]) # [itype,i_index] + if self.functype == 'none': - onsiteEs = map(lambda x: self.onsite_db[x], ia_list) + onsiteEs = map(lambda x: self.onsite_db[x[0]], ia_list) - else: + elif self.functype in ['uniform','split']: + onsiteEs = [] + for x in ia_list: + onsiteEs.append(self.skEs(xtype=x[0], onsite_db= self.onsite_db, nn_onsite_paras=nn_onsite_paras)) + elif self.functype == 'NRL': onsiteEs = [] for x in ia_list: - onsiteEs.append(self.skEs(xtype=x, onsite_db= self.onsite_db, nn_onsite_paras=nn_onsite_paras, **kwargs)) + ia = x[0] + paraArray = th.stack([nn_onsite_paras[isk] for isk in self.onsite_index_dict[f'{ia}']]) + + xind=x[1] + x_env_indlist = onsite_env[kf][:,2] == xind + x_onsite_envs = onsite_env[kf][x_env_indlist,8] # r_jis + + paras = {'x_onsite_envs':x_onsite_envs, + 'nn_onsite_paras':paraArray, + 'rcut':self.onsite_func_cutoff, + 'w':self.onsite_func_decay_w, + 'lda':self.onsite_func_lambda + } + onsiteEs.append(self.skEs(**paras)) + else: + raise ValueError(f'Invalid mode: {self.functype}') batch_onsiteEs[kf] = list(onsiteEs) + return batch_onsiteEs diff --git a/dptb/nnsktb/onsite_formula.py b/dptb/nnsktb/onsite_formula.py index 4d86a1db..0bce65f0 100644 --- a/dptb/nnsktb/onsite_formula.py +++ b/dptb/nnsktb/onsite_formula.py @@ -32,6 +32,10 @@ def __init__(self, functype='none') -> None: self.functype = functype self.num_paras = 1 assert hasattr(self, 'uniform') + elif functype == 'NRL': + self.functype = functype + self.num_paras = 4 + assert hasattr(self, 'NRL') elif functype == 'custom': self.functype = functype @@ -43,8 +47,10 @@ def __init__(self, functype='none') -> None: def skEs(self, **kwargs): if self.functype == 'uniform': return self.uniform(**kwargs) + if self.functype == 'NRL': + return self.NRL(**kwargs) - def uniform(self,xtype, onsite_db, nn_onsite_paras, **kwargs): + def uniform(self,xtype, onsite_db, nn_onsite_paras): '''This is a wrap function for a self-defined formula of onsite energies. one can easily modify it into whatever form they want. Returns @@ -58,7 +64,35 @@ def uniform(self,xtype, onsite_db, nn_onsite_paras, **kwargs): return onsite_db[xtype] + nn_onsite_paras[xtype] + def NRL(self, x_onsite_envs, nn_onsite_paras, rcut:th.float32 = th.tensor(6), w:th.float32 = 0.1, lda=1.0): + """ This is NRL-TB formula for onsite energies. + rho_i = \sum_j exp(- lda**2 r_ij) f(r_ij) + + E_il = a_l + b_l rho_i^(2/3) + c_l rho_i^(4/3) + d_l rho_i^2 - - + f(r_ij) = [1+exp((r_ij-rcut+5w)/w)]^-1; (r_ij < rcut) + = 0; (r_ij >= rcut) + Parameters + ---------- + x_onsite_envs: list + the rij list for i atom. j is the neighbor atoms of i. + nn_onsite_paras: dict + the parameters coefficient for onsite energies. + ['N-2s-0':[...] + ...] + rcut: float + the cutoff radius for onsite energies. + w: float + the decay for the cutoff smoth function. + lda: float + the decay for the calculateing rho. + """ + r_ijs = x_onsite_envs + exp_rij = th.exp(-lda**2 * r_ijs) + f_rij = 1/(1+th.exp((r_ijs-rcut+5*w)/w)) + f_rij[r_ijs>=rcut] = 0.0 + rho_i = th.sum(exp_rij * f_rij) + a_l, b_l, c_l, d_l = nn_onsite_paras[:,0], nn_onsite_paras[:,1], nn_onsite_paras[:,2], nn_onsite_paras[:,3] + E_il = a_l + b_l * rho_i**(2/3) + c_l * rho_i**(4/3) + d_l * rho_i**2 + return E_il \ No newline at end of file diff --git a/dptb/nnsktb/sknet.py b/dptb/nnsktb/sknet.py index 9d88326a..dfd575bd 100644 --- a/dptb/nnsktb/sknet.py +++ b/dptb/nnsktb/sknet.py @@ -152,22 +152,42 @@ def forward(self, mode: str): return self.soc_value, None elif mode == 'onsite': + """ two outputs, 1: for orbital enegy 2: for onsite integral. + - the onsite integral is used to calculate the onsite matrix through SK transformation. + - the orbital energy is just the onsite energy which is the diagonal elements of the onsite matrix. + - for uniform mode, the output of nn is directly used as the onsite value. + - for strain mode, the output of nn is used as the coefficient to multiply the onsite integral formula like the sk integral. + - for other modes, the output of nn is used as a coefficient to multiply the onsite energy using a formula. + """ if self.onsitemode.lower() == 'none': return None, None elif self.onsitemode.lower() == 'strain': + # in strain mode, the output of nn is used as the coefficient to multiply the onsite integral formula like the sk integral. out = self.onsite_net() self.onsite_coeffdict = dict(zip(self.onsite_types, out)) return None, self.onsite_coeffdict - else: + elif self.onsitemode.lower() in ['uniform','split']: + # the out put of nn is directly used as the onsite value. + # output format e.g.: {'N':[es,ep],'B':[es,ep]} out = self.onsite_net() - self.onsite_values = dict(zip(self.onsite_types, out)) + self.onsite_paras = dict(zip(self.onsite_types, out)) self.onsite_value_formated = {} for ia in self.onsite_index_dict: - self.onsite_value_formated[ia] = torch.stack([self.onsite_values[itag][0] for itag in self.onsite_index_dict[ia]]) - #self.onsite_value_formated[ia] = torch.reshape(out,[-1]) # {"N":[s, p, ...]} + self.onsite_value_formated[ia] = torch.stack([self.onsite_paras[itag][0] for itag in self.onsite_index_dict[ia]]) return self.onsite_value_formated, None - + else: + # the output of nn is used as a coefficient to multiply the onsite energy using a formula. + # this formula is different from the onsite integral formula. and it directly gives the onsite energy. + # the onsite integral will still need to sk transformation to be onsite matrix. + # output format e.g.: {'N-2s-0':[...], + # 'N-2s-0':[...], + # 'B-2s-0':[...], + # 'B-2p-0':[...]} + # [...] vector: means the output coefficients for the orbital energy formula. + out = self.onsite_net() + self.onsite_paras = dict(zip(self.onsite_types, out)) + return self.onsite_paras, None else: raise ValueError(f'Invalid mode: {mode}') diff --git a/dptb/plugins/init_dptb.py b/dptb/plugins/init_dptb.py index 6d2533cc..6d90b0a0 100644 --- a/dptb/plugins/init_dptb.py +++ b/dptb/plugins/init_dptb.py @@ -167,6 +167,13 @@ def init_correction_model(self, **options): else: raise NotImplementedError("Only support json and ckpt file as checkpoint") + # ------------------------------------------------------------------------------------------- + if onsitemode == 'NRL': + onsite_func_cutoff = options['onsitefuncion']['onsite_func_cutoff'] + onsite_func_decay_w = options['onsitefuncion']['onsite_func_decay_w'] + onsite_func_lambda = options['onsitefuncion']['onsite_func_lambda'] + #----------------------------------------------------------------------------------------------------------- + # ------------------------------------------------------------------------------------------- if modeltype == "ckpt": ckpt_list = [torch.load(ckpt) for ckpt in checkpoint] @@ -226,6 +233,9 @@ def init_correction_model(self, **options): if onsitemode == 'strain': onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype='none',unit=unit) + elif onsitemode == 'NRL': + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit, + onsite_func_cutoff=onsite_func_cutoff,onsite_func_decay_w=onsite_func_decay_w,onsite_func_lambda=onsite_func_lambda) else: onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit) diff --git a/dptb/plugins/init_nnsk.py b/dptb/plugins/init_nnsk.py index 176cf975..3690a97c 100644 --- a/dptb/plugins/init_nnsk.py +++ b/dptb/plugins/init_nnsk.py @@ -51,7 +51,13 @@ def init_from_scratch(self, **common_and_model_options): soc = common_and_model_options["soc"] unit=common_and_model_options["unit"] # ---------------------------------------------------------------------------------------------------------- - + # new add for NRL + + onsite_func_cutoff = common_and_model_options['onsitefuncion']['onsite_func_cutoff'] + onsite_func_decay_w = common_and_model_options['onsitefuncion']['onsite_func_decay_w'] + onsite_func_lambda = common_and_model_options['onsitefuncion']['onsite_func_lambda'] + + #----------------------------------------------------------------------------------------------------------- IndMap = Index_Mapings() IndMap.update(proj_atom_anglr_m=proj_atom_anglr_m) bond_index_map, bond_num_hops = IndMap.Bond_Ind_Mapings() @@ -66,9 +72,13 @@ def init_from_scratch(self, **common_and_model_options): onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) # for strain mode the onsite_fun will use none mode to add the onsite_db. onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype='none',unit=unit) + elif onsitemode == 'NRL': + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit, + onsite_func_cutoff=onsite_func_cutoff,onsite_func_decay_w=onsite_func_decay_w,onsite_func_lambda=onsite_func_lambda) else: onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit) + _, reducted_skint_types, _ = all_skint_types(bond_index_map) _, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) @@ -87,6 +97,7 @@ def init_from_scratch(self, **common_and_model_options): options.update({"onsite_types":onsite_types}) + # TODO: generate soc types. here temporarily use the same as onsite types. if soc: if num_soc_hidden is not None: soc_neurons = {"nhidden":num_soc_hidden} @@ -187,6 +198,12 @@ def init_from_model(self, **common_and_model_and_run_options): num_soc_hidden = common_and_model_and_run_options['sknetwork']['sk_soc_nhidden'] unit = common_and_model_and_run_options["unit"] + # ---------------------------------------------------------------------------------------------------------- + if onsitemode == 'NRL': + onsite_func_cutoff = common_and_model_and_run_options['onsitefuncion']['onsite_func_cutoff'] + onsite_func_decay_w = common_and_model_and_run_options['onsitefuncion']['onsite_func_decay_w'] + onsite_func_lambda = common_and_model_and_run_options['onsitefuncion']['onsite_func_lambda'] + #----------------------------------------------------------------------------------------------------------- if soc and num_soc_hidden is None: log.err(msg="Please specify the number of hidden layers for soc network. please set the key `sk_soc_nhidden` in `sknetwork` in `model_options`.") @@ -235,6 +252,9 @@ def init_from_model(self, **common_and_model_and_run_options): if onsitemode == 'strain': onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m, atomtype=atomtype) onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype='none',unit=unit) + elif onsitemode == 'NRL': + onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit, + onsite_func_cutoff=onsite_func_cutoff,onsite_func_decay_w=onsite_func_decay_w,onsite_func_lambda=onsite_func_lambda) else: onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit) @@ -248,7 +268,8 @@ def init_from_model(self, **common_and_model_and_run_options): _, reducted_onsiteint_types, _ = all_onsite_intgrl_types(onsite_strain_index_map) onsite_types = reducted_onsiteint_types else: - onsite_neurons = {"nhidden":num_onsite_hidden} + # onsite_neurons = {"nhidden":num_onsite_hidden} + onsite_neurons = {"nhidden":num_onsite_hidden, "nout": onsite_fun.num_paras} onsite_types = reduced_onsiteE_types if soc: diff --git a/dptb/utils/argcheck.py b/dptb/utils/argcheck.py index a04cdbc8..8845ac9d 100644 --- a/dptb/utils/argcheck.py +++ b/dptb/utils/argcheck.py @@ -282,6 +282,21 @@ def skfunction(): return Argument("skfunction", dict, optional=True, sub_fields=args, sub_variants=[], default={}, doc=doc_skfunction) +def onsitefuncion(): + doc_onsite_func_cutoff = r"The decay param controls the range of the decay defined in NRL TB." + doc_onsite_func_decay_w = r"The decay param control how smooth the decay function is defined in NRL TB." + doc_onsite_func_lambda = r"the onstie para in NRL TB." + + args = [ + Argument("onsite_func_cutoff", [float], optional=True, default=6.0, doc=doc_onsite_func_cutoff), + Argument("onsite_func_decay_w", [float], optional=True, default=0.5, doc=doc_onsite_func_decay_w), + Argument("onsite_func_lambda", [float], optional=True, default=1.0, doc=doc_onsite_func_lambda) + ] + + doc_onsitefuncion = "The parameter to define the analytic function formula of the onsite smoth function" + + return Argument("onsitefuncion", dict, optional=True, sub_fields=args, sub_variants=[], default={}, doc=doc_onsitefuncion) + def dptb(): doc_soc_env = "button that allow environmental correction for soc parameters, used only when soc is open, Default: False" doc_axis_neuron = "The axis_neuron specifies the size of the submatrix of the embedding matrix, the axis matrix as explained in the [DeepPot-SE paper](https://arxiv.org/abs/1805.09003)." @@ -328,7 +343,7 @@ def model_options(): doc_model_options = "The parameters to define the `nnsk` and `dptb` model." - return Argument("model_options", dict, sub_fields=[skfunction(), sknetwork(), dptb()], sub_variants=[], optional=False, doc=doc_model_options) + return Argument("model_options", dict, sub_fields=[skfunction(), sknetwork(), onsitefuncion(), dptb()], sub_variants=[], optional=False, doc=doc_model_options) def loss_options(): diff --git a/dptb/utils/index_mapping.py b/dptb/utils/index_mapping.py index 6601c27e..0b1f0234 100644 --- a/dptb/utils/index_mapping.py +++ b/dptb/utils/index_mapping.py @@ -209,6 +209,12 @@ def Onsite_Ind_Mapings(self, onsitemode, atomtype=None): onsite_strain_index_map, onsite_strain_num = None, None if onsitemode in ['uniform', 'none']: onsite_index_map, onsite_num = self._Onsite_Ind_Mapings() + elif onsitemode == 'NRL': + # TODO: design NRL onsite index map, + # usually NRL is the same as uniform. but in some case they treat t2g and eg orbitals as different. + # therefore, we need new _Onsite_Ind_Mapings function for NRL. + # here we just temporarily use uniform one! + onsite_index_map, onsite_num = self._Onsite_Ind_Mapings() elif onsitemode == 'split': onsite_index_map, onsite_num = self._Onsite_Ind_Mapings_OrbSplit() elif onsitemode == 'strain': From dd13725ff7d3106c39bb24b3ea82ef909af130b3 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:01:43 +0800 Subject: [PATCH 09/63] add support overlap in hamiltonian eig_sk_crt --- dptb/hamiltonian/hamil_eig_sk_crt.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dptb/hamiltonian/hamil_eig_sk_crt.py b/dptb/hamiltonian/hamil_eig_sk_crt.py index 6ca3f47d..8c7b5640 100644 --- a/dptb/hamiltonian/hamil_eig_sk_crt.py +++ b/dptb/hamiltonian/hamil_eig_sk_crt.py @@ -149,7 +149,9 @@ def get_hs_onsite(self, bonds_onsite = None, onsite_envs=None): sub_hamil_block = th.zeros([self.__struct__.proj_atomtype_norbs[iatype], self.__struct__.proj_atomtype_norbs[jatype]], dtype=self.dtype, device=self.device) if not self.use_orthogonal_basis: - sub_over_block = th.zeros([self.__struct__.proj_atomtype_norbs[iatype], self.__struct__.proj_atomtype_norbs[jatype]], dtype=self.dtype, device=self.device) + #sub_over_block = th.zeros([self.__struct__.proj_atomtype_norbs[iatype], self.__struct__.proj_atomtype_norbs[jatype]], dtype=self.dtype, device=self.device) + sub_over_block = th.eye(self.__struct__.proj_atomtype_norbs[iatype], dtype=self.dtype, device=self.device) + ist = 0 for ish in self.__struct__.proj_atom_anglr_m[iatype]: # ['s','p',..] @@ -159,8 +161,8 @@ def get_hs_onsite(self, bonds_onsite = None, onsite_envs=None): indx = self.__struct__.onsite_index_map[iatype][ish] # change onsite index map from {N:{s:}} to {N:{ss:, sp:}} sub_hamil_block[ist:ist+norbi, ist:ist+norbi] = th.eye(norbi, dtype=self.dtype, device=self.device) * self.onsiteEs[ib][indx] - if not self.use_orthogonal_basis: - sub_over_block[ist:ist+norbi, ist:ist+norbi] = th.eye(norbi, dtype=self.dtype, device=self.device) * self.onsiteSs[ib][indx] + #if not self.use_orthogonal_basis: + # sub_over_block[ist:ist+norbi, ist:ist+norbi] = th.eye(norbi, dtype=self.dtype, device=self.device) * self.onsiteSs[ib][indx] ist = ist + norbi onsiteH_blocks.append(sub_hamil_block) From c26e305b5abc0a2360d22cad562d09e615ae4290 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:02:23 +0800 Subject: [PATCH 10/63] add support overlap nrl in train and api --- dptb/nnops/NN2HRK.py | 35 ++++++++++++++++++++++++++++------- dptb/nnops/train_dptb.py | 24 ++++++++++++++++++------ dptb/nnops/train_nnsk.py | 15 +++++++++++++-- 3 files changed, 59 insertions(+), 15 deletions(-) diff --git a/dptb/nnops/NN2HRK.py b/dptb/nnops/NN2HRK.py index e994250a..30df9cc2 100644 --- a/dptb/nnops/NN2HRK.py +++ b/dptb/nnops/NN2HRK.py @@ -89,9 +89,13 @@ def _get_nnsk_HR(self): env_cutoff=self.apihost.model_config['env_cutoff'], onsitemode=self.apihost.model_config['onsitemode'], onsite_cutoff=self.apihost.model_config['onsite_cutoff'], sorted_onsite="st", sorted_bond="st", sorted_env="st") batch_bonds, batch_bond_onsites = predict_process.get_bond(sorted=self.sorted_bond) - coeffdict = self.apihost.model(mode='hopping') + coeffdict, overlap_coeffdict = self.apihost.model(mode='hopping') batch_hoppings = self.apihost.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.apihost.model_config['skfunction']['sk_cutoff'], w=self.apihost.model_config['skfunction']['sk_decay_w']) nn_onsiteE, onsite_coeffdict = self.apihost.model(mode='onsite') + if self.apihost.overlap: + assert overlap_coeffdict is not None, "The overlap_coeffdict should be provided if overlap is True." + batch_overlaps = self.apihost.overlap_fun.get_skoverlaps(batch_bonds=batch_bonds, coeff_paras=overlap_coeffdict, rcut=self.apihost.model_config['skfunction']['sk_cutoff'], w=self.apihost.model_config['skfunction']['sk_decay_w']) + if self.apihost.model_config['onsitemode'] in ['strain','NRL']: batch_onsite_envs = predict_process.get_onsitenv(cutoff=self.apihost.model_config['onsite_cutoff'], sorted=self.sorted_onsite) @@ -112,12 +116,17 @@ def _get_nnsk_HR(self): onsiteEs, hoppings, onsiteVs = batch_onsiteEs[0], batch_hoppings[0], None onsitenvs = None + if self.apihost.overlap: + overlaps = batch_overlaps[0] + else: + overlaps = None + if self.apihost.model_config["soc"]: soc_lambdas = batch_soc_lambdas[0] else: soc_lambdas = None - self.hamileig.update_hs_list(struct=self.structure, hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs, soc_lambdas=soc_lambdas) + self.hamileig.update_hs_list(struct=self.structure, hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs, overlaps=overlaps, soc_lambdas=soc_lambdas) self.hamileig.get_hs_blocks(bonds_onsite=batch_bond_onsites[0][:,1:], bonds_hoppings=batch_bonds[0][:,1:], onsite_envs=onsitenvs) @@ -141,11 +150,18 @@ def _get_dptb_HR(self): batch_bond_hoppings, batch_hoppings, batch_bond_onsites, batch_onsiteEs, batch_soc_lambdas = self.apihost.nntb.calc(batch_bonds, batch_env) if self.apihost.model_config['use_correction']: - coeffdict = self.apihost.sknet(mode='hopping') + coeffdict, overlap_coeffdict = self.apihost.sknet(mode='hopping') batch_nnsk_hoppings = self.apihost.hops_fun.get_skhops( batch_bond_hoppings, coeffdict, rcut=self.apihost.model_config["skfunction"]["sk_cutoff"], w=self.apihost.model_config["skfunction"]["sk_decay_w"]) nnsk_onsiteE, onsite_coeffdict = self.apihost.sknet(mode='onsite') + if self.apihost.overlap: + assert overlap_coeffdict is not None, "The overlap_coeffdict should be provided if overlap is True." + batch_nnsk_overlaps = self.apihost.overlap_fun.get_skoverlaps(batch_bonds=batch_bonds, coeff_paras=overlap_coeffdict, + rcut=self.apihost.model_config['skfunction']['sk_cutoff'], w=self.apihost.model_config['skfunction']['sk_decay_w']) + + + if self.apihost.model_config['onsitemode'] in ['strain','NRL']: batch_onsite_envs = predict_process.get_onsitenv(cutoff=self.apihost.model_config['onsite_cutoff'], sorted=self.sorted_onsite) else: @@ -164,6 +180,10 @@ def _get_dptb_HR(self): else: onsiteVs = None onsitenvs = None + if self.apihost.overlap: + nnsk_overlaps = batch_nnsk_overlaps[0] + else: + nnsk_overlaps = None if self.apihost.model_config["soc"] and self.apihost.model_config["dptb"]["soc_env"]: nn_soc_lambdas = batch_soc_lambdas[0] @@ -176,14 +196,15 @@ def _get_dptb_HR(self): sk_soc_lambdas = None - onsiteEs, hoppings, _, _, soc_lambdas = nnsk_correction(nn_onsiteEs=batch_onsiteEs[0], nn_hoppings=batch_hoppings[0], + onsiteEs, hoppings, onsiteSs, overlaps, soc_lambdas = nnsk_correction(nn_onsiteEs=batch_onsiteEs[0], nn_hoppings=batch_hoppings[0], sk_onsiteEs=batch_nnsk_onsiteEs[0], sk_hoppings=batch_nnsk_hoppings[0], - sk_onsiteSs=None, sk_overlaps=None, nn_soc_lambdas=nn_soc_lambdas, sk_soc_lambdas=sk_soc_lambdas) + sk_onsiteSs=None, sk_overlaps=nnsk_overlaps, nn_soc_lambdas=nn_soc_lambdas, sk_soc_lambdas=sk_soc_lambdas) else: - onsiteEs, hoppings, soc_lambdas, onsiteVs, onsitenvs = batch_onsiteEs[0], batch_hoppings[0], None, None, None + assert not self.apihost.overlap, "The overlap should be False if use_correction is False." + onsiteEs, hoppings, soc_lambdas, onsiteVs, onsitenvs, onsiteSs, overlaps = batch_onsiteEs[0], batch_hoppings[0], None, None, None, None, None - self.hamileig.update_hs_list(struct=self.structure, hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs, soc_lambdas=soc_lambdas) + self.hamileig.update_hs_list(struct=self.structure, hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs,overlaps=overlaps, soc_lambdas=soc_lambdas) self.hamileig.get_hs_blocks(bonds_onsite=batch_bond_onsites[0][:,1:], bonds_hoppings=batch_bond_hoppings[0][:,1:], onsite_envs=onsitenvs) diff --git a/dptb/nnops/train_dptb.py b/dptb/nnops/train_dptb.py index a9cbd02b..78379623 100644 --- a/dptb/nnops/train_dptb.py +++ b/dptb/nnops/train_dptb.py @@ -141,14 +141,19 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc if self.run_opt.get("use_correction", False): # get sk param (dptb-0) - coeffdict = self.sknet(mode='hopping') + coeffdict, overlap_coeffdict = self.sknet(mode='hopping') nnsk_onsiteE, onsite_coeffdict = self.sknet(mode='onsite') # get sk param (of each bond or onsite, dptb-0) batch_nnsk_hoppings = self.hops_fun.get_skhops( - batch_bond_hoppings, coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], + batch_bonds=batch_bond_hoppings, coeff_paras=coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) + if self.overlap: + batch_nnsk_overlaps = self.overlap_fun.get_skoverlaps( + batch_bonds=batch_bond_hoppings, coeff_paras=overlap_coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], + w=self.model_options["skfunction"]["sk_decay_w"]) + batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsitenvs, nn_onsite_paras=nnsk_onsiteE) if self.onsitemode == "strain": @@ -168,6 +173,10 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc if not self.run_opt.get("use_correction", False): onsiteEs, hoppings = batch_onsiteEs[ii], batch_hoppings[ii] soc_lambdas = None + overlaps = None + if self.overlap: + log.error(msg="ValueError: Overlap mode can only be used with nnsk correction.") + raise ValueError if self.soc: log.error(msg="ValueError: Soc mode can only be used with nnsk correction.") raise ValueError @@ -181,11 +190,14 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc sk_soc_lambdas = batch_nnsk_soc_lambdas[ii] else: sk_soc_lambdas = None - - onsiteEs, hoppings, _, _, soc_lambdas = nnsk_correction( + if self.overlap: + nnsk_overlaps = batch_nnsk_overlaps[ii] + else: + nnsk_overlaps = None + onsiteEs, hoppings, onsiteSs, overlaps, soc_lambdas = nnsk_correction( nn_onsiteEs=batch_onsiteEs[ii], nn_hoppings=batch_hoppings[ii], sk_onsiteEs=batch_nnsk_onsiteEs[ii], sk_hoppings=batch_nnsk_hoppings[ii], - sk_onsiteSs=None, sk_overlaps=None, + sk_onsiteSs=None, sk_overlaps=nnsk_overlaps, nn_soc_lambdas=nn_soc_lambdas, sk_soc_lambdas=sk_soc_lambdas ) @@ -198,7 +210,7 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc bond_onsites = batch_bond_onsites[ii][:,1:] bond_hoppings = batch_bond_hoppings[ii][:,1:] - self.hamileig.update_hs_list(struct=structs[ii], hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs, soc_lambdas=soc_lambdas) + self.hamileig.update_hs_list(struct=structs[ii], hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs, overlaps=overlaps, soc_lambdas=soc_lambdas) self.hamileig.get_hs_blocks(bonds_onsite=bond_onsites, bonds_hoppings=bond_hoppings, onsite_envs=onsitenvs) diff --git a/dptb/nnops/train_nnsk.py b/dptb/nnops/train_nnsk.py index c0654567..e6ba1a05 100644 --- a/dptb/nnops/train_nnsk.py +++ b/dptb/nnops/train_nnsk.py @@ -117,7 +117,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str raise ValueError # get sk param (model format) - coeffdict = self.model(mode='hopping') + coeffdict, overlap_coeffdict = self.model(mode='hopping') nn_onsiteE, onsite_coeffdict = self.model(mode='onsite') @@ -125,6 +125,12 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str batch_hoppings = self.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsitenvs, nn_onsite_paras=nn_onsiteE) + + if self.overlap: + assert overlap_coeffdict is not None, "The overlap_coeffdict should be provided if overlap is True." + batch_overlaps = self.overlap_fun.get_skoverlaps(batch_bonds=batch_bonds, coeff_paras=overlap_coeffdict, + rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) + if self.onsitemode == 'strain': batch_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) else: @@ -140,6 +146,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str # copy sk param for writing json checkpoint self.onsite_index_dict = self.model.onsite_index_dict self.hopping_coeff = coeffdict + self.overlap_coeff = overlap_coeffdict if self.onsitemode == 'strain': self.onsite_coeff = onsite_coeffdict else: @@ -164,6 +171,10 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str onsiteVs = None onsitenvs = None # call hamiltonian block + if self.overlap: + overlaps = batch_overlaps[ii] + else: + overlaps = None if self.soc: soc_lambdas = batch_soc_lambdas[ii] @@ -175,7 +186,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str bond_onsites = batch_bond_onsites[ii][:,1:] bond_hoppings = batch_bonds[ii][:,1:] - self.hamileig.update_hs_list(struct=structs[ii], hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs,soc_lambdas=soc_lambdas) + self.hamileig.update_hs_list(struct=structs[ii], hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs,overlaps=overlaps, soc_lambdas=soc_lambdas) self.hamileig.get_hs_blocks(bonds_onsite=bond_onsites, bonds_hoppings=bond_hoppings, onsite_envs=onsitenvs) From 70154943692902b4d4452652b04b58c1c4cacc54 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:02:45 +0800 Subject: [PATCH 11/63] add support NRL with overlap in formula --- dptb/nnsktb/formula.py | 83 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 77 insertions(+), 6 deletions(-) diff --git a/dptb/nnsktb/formula.py b/dptb/nnsktb/formula.py index 6ad3e685..b8e97ddd 100644 --- a/dptb/nnsktb/formula.py +++ b/dptb/nnsktb/formula.py @@ -21,9 +21,10 @@ def skhij(self, rij, **kwargs): class SKFormula(BaseSK): - def __init__(self, functype='varTang96') -> None: + def __init__(self, functype='varTang96',overlap=False) -> None: super(SKFormula, self).__init__() # one can modify this by add his own formula with the name functype to deifine num of pars. + self.overlap = overlap if functype == 'varTang96': self.functype = functype self.num_paras = 4 @@ -34,6 +35,15 @@ def __init__(self, functype='varTang96') -> None: self.num_paras = 2 assert hasattr(self, 'powerlaw') + elif functype == 'NRL': + self.functype = functype + self.num_paras = 4 + assert hasattr(self, 'NRL_HOP') + if overlap: + self.overlap_num_paras = 4 + assert hasattr(self, 'NRL_OVERLAP') + + elif functype =='custom': # the functype custom, is for user to define their own formula. # just modify custom to the name of your formula. @@ -58,9 +68,27 @@ def skhij(self, rij, **kwargs): return self.varTang96(rij=rij, **kwargs) elif self.functype == 'powerlaw': return self.powerlaw(rij=rij, **kwargs) + elif self.functype == 'NRL': + return self.NRL_HOP(rij=rij, **kwargs) + else: + raise ValueError('No such formula') + + def sksij(self,rij,**kwargs): + '''This is a wrap function for a self-defined formula of sk overlap. one can easily modify it into whatever form they want. + + Returns + ------- + The function defined by functype is called to cal sk sij and returned. + + ''' + assert self.overlap, 'overlap is False, no overlap function is defined.' + + if self.functype == 'NRL': + return self.NRL_OVERLAP(rij=rij, **kwargs) else: raise ValueError('No such formula') + def varTang96(self, rij, paraArray, rcut:th.float32 = th.tensor(6), w:th.float32 = 0.1, **kwargs): """> This function calculates the value of the variational form of Tang et al 1996. without the environment dependent @@ -93,10 +121,53 @@ def powerlaw(self, rij, paraArray, iatomtype, jatomtype, rcut:th.float32 = th.te # r0 = map(lambda x:(bond_length[iatomtype[x]]+bond_length[jatomtype[x]])/(2*1.8897259886), range(len(iatomtype))) # r0 = th.tensor(list(r0)) r0 = (bond_length[iatomtype]+bond_length[jatomtype])/(2*1.8897259886) - # print("rij", rij) - # print("ij type", iatomtype, jatomtype) - # print("factor", (r0/rij)**(1 + alpha2)) - # print("NN_h", alpha1 * (r0/rij)**(1 + alpha2)) - return alpha1 * (r0/rij)**(1 + alpha2) / (1+th.exp((rij-rcut)/w)) + def NRL_HOP(self, rij, paraArray, rcut:th.float32 = th.tensor(6), w:th.float32 = 0.1, **kwargs): + """ + This function calculates the SK integral value of the form of NRL-TB + + H_{ll'u} = (a + b R + c R^2)exp(-d^2 R) f(R) + a,b,c,d are the parameters, R is r_ij + + f(r_ij) = [1+exp((r_ij-rcut+5w)/w)]^-1; (r_ij < rcut) + = 0; (r_ij >= rcut) + + """ + if isinstance(paraArray, list): + paraArray = th.tensor(paraArray) + assert len(paraArray.shape) in {2, 1}, 'paraArray should be a 2d tensor or 1d tensor' + + paraArray = paraArray.view(-1, self.num_paras) + a, b, c, d = paraArray[:, 0], paraArray[:, 1], paraArray[:, 2], paraArray[:, 3] + + f_rij = 1/(1+th.exp((rij-rcut+5*w)/w)) + f_rij[rij>=rcut] = 0.0 + + return (a + b * rij + c * rij**2) * th.exp(-d**2 * rij)*f_rij + + def NRL_OVERLAP(self, rij, paraArray, paraconst, rcut:th.float32 = th.tensor(6), w:th.float32 = 0.1, **kwargs): + """ + This function calculates the Overlap value of the form of NRL-TB + + S_{ll'u} = (delta_ll' + a R + b R^2 + c R^3)exp(-d^2 R) f(R) + a,b,c,d are the parameters, R is r_ij + + f(r_ij) = [1+exp((r_ij-rcut+5w)/w)]^-1; (r_ij < rcut) + = 0; (r_ij >= rcut) + # delta + """ + if isinstance(paraArray, list): + paraArray = th.tensor(paraArray) + assert len(paraArray.shape) in {2, 1}, 'paraArray should be a 2d tensor or 1d tensor' + assert paraconst is not None, 'paraconst should not be None' + assert len(paraconst.shape) in {2, 1}, 'paraconst should be a 2d tensor or 1d tensor' + + paraArray = paraArray.view(-1, self.num_paras) + a, b, c, d = paraArray[:, 0], paraArray[:, 1], paraArray[:, 2], paraArray[:, 3] + delta_ll = paraconst[:,0] + + f_rij = 1/(1+th.exp((rij-rcut+5*w)/w)) + f_rij[rij>=rcut] = 0.0 + + return (delta_ll + a * rij + b * rij**2 + c * rij**3) * th.exp(-d**2 * rij)*f_rij \ No newline at end of file From 79d3025075cff24f674575f4b4fe3f0c40b25600 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:03:33 +0800 Subject: [PATCH 12/63] modify integralFunc add new input para overlap to indicate use overlap --- dptb/nnsktb/integralFunc.py | 63 +++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/dptb/nnsktb/integralFunc.py b/dptb/nnsktb/integralFunc.py index 97a1bd89..8cfc150d 100644 --- a/dptb/nnsktb/integralFunc.py +++ b/dptb/nnsktb/integralFunc.py @@ -2,21 +2,28 @@ from dptb.utils.constants import atomic_num_dict_r from dptb.nnsktb.formula import SKFormula from dptb.utils.index_mapping import Index_Mapings -from dptb.nnsktb.skintTypes import all_skint_types, all_onsite_intgrl_types +from dptb.nnsktb.skintTypes import all_skint_types, all_onsite_intgrl_types, NRL_skint_type_constants # define the function for output all the hoppongs for given i,j. class SKintHops(SKFormula): - def __init__(self, proj_atom_anglr_m, atomtype=None, mode='hopping', functype='varTang96') -> None: - super().__init__(functype=functype) + def __init__(self, proj_atom_anglr_m, atomtype=None, mode='hopping', functype='varTang96',overlap=False) -> None: + super().__init__(functype=functype,overlap=overlap) IndMap = Index_Mapings() IndMap.update(proj_atom_anglr_m=proj_atom_anglr_m) bond_index_map, _ = IndMap.Bond_Ind_Mapings() if mode == 'hopping': - _, _, sk_bond_ind_dict = all_skint_types(bond_index_map) + # _, _, sk_bond_ind_dict = all_skint_types(bond_index_map) + _, reducted_skint_types, sk_bond_ind_dict = all_skint_types(bond_index_map) self.bond_index_dict = sk_bond_ind_dict + self.para_Consts = None + + if functype == 'NRL': + self.para_Consts = NRL_skint_type_constants(reducted_skint_types) + # call to get the para constants! + elif mode == 'onsite': onsite_strain_index_map, _, _, _ = IndMap.Onsite_Ind_Mapings(onsitemode='strain', atomtype=atomtype) _, _, onsite_strain_ind_dict = all_onsite_intgrl_types(onsite_strain_index_map) @@ -42,10 +49,10 @@ def get_skhops(self, batch_bonds, coeff_paras: dict, rcut:th.float32 = th.tensor Returns ------- - a list of hopping matrices. + a list of hopping SK integrals. ''' - # TODO: Expand rij and compute then in a single time. + # TODO: 可能得优化目标:能不能一次性把所有的rij 计算出来。而不是循环计算每一个bond. batch_hoppings = {} for fi in batch_bonds.keys(): hoppings = [] @@ -62,3 +69,47 @@ def get_skhops(self, batch_bonds, coeff_paras: dict, rcut:th.float32 = th.tensor batch_hoppings.update({fi:hoppings}) return batch_hoppings + + def get_skoverlaps(self, batch_bonds, coeff_paras: dict, rcut:th.float32 = th.tensor(6), w:th.float32 = 0.1): + """ The function `get_skoverlaps` takes in a list of bonds, a dictionary of Slater-Koster coeffient parameters obtained in sknet fitting, + and a dictionary of sk_bond_ind obtained in skintType func, and returns a list of Slater-Koster hopping integrals. + + Parameters + ---------- + bonds + the bond list, with the first 7 columns being the bond information, and the 8-th column being the + bond length. + coeff_paras : dict + a dictionary of the coeffient parameters for each SK term. + bond_index_dict : dict + a dictionary that contains the of `key/name` of the dict of Slater-Koster coeffient parameters for each bond type. + + Returns + ------- + a list of overlap SK integrals. + + """ + batch_overlaps = {} + for fi in batch_bonds.keys(): + overlaps = [] + for ib in range(len(batch_bonds[fi])): + ibond = batch_bonds[fi][ib,1:8] + rij = batch_bonds[fi][ib,8] + ia, ja = atomic_num_dict_r[int(ibond[0])], atomic_num_dict_r[int(ibond[2])] + # take all the coeffient parameters for the bond type. + paraArray = th.stack([coeff_paras[isk] for isk in self.bond_index_dict[f'{ia}-{ja}']]) + + if self.para_Consts is not None: + paraconst = th.stack([self.para_Consts[isk] for isk in self.bond_index_dict[f'{ia}-{ja}']]) + else: + paraconst = None + + paras = {'paraArray':paraArray,'paraconst':paraconst, 'rij':rij, 'iatomtype':ia, 'jatomtype':ja, 'rcut':rcut,'w':w} + sij = self.sksij(**paras) + overlaps.append(sij) + batch_overlaps.update({fi:overlaps}) + + return batch_overlaps + + + \ No newline at end of file From 1390237f9b774841e1fabe658cffa5c66de67dbe Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:04:24 +0800 Subject: [PATCH 13/63] add NRL_skint_type_constants, to use atom and orbital dependent delta --- dptb/nnsktb/skintTypes.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/dptb/nnsktb/skintTypes.py b/dptb/nnsktb/skintTypes.py index a2ad2acd..758fefa2 100644 --- a/dptb/nnsktb/skintTypes.py +++ b/dptb/nnsktb/skintTypes.py @@ -1,5 +1,6 @@ import re import numpy as np +import torch from dptb.utils.constants import anglrMId, SKBondType from dptb.utils.constants import atomic_num_dict @@ -105,6 +106,32 @@ def all_skint_types(bond_index_map): return all_skint_types_dict, reducted_skint_types, sk_bond_ind_dict +def NRL_skint_type_constants(reducted_skint_types): + '''The function `NRL_skint_type_constants` calculates a dictionary of skin type constants based on a + list of reduced skin types. + + Parameters + ---------- + reducted_skint_types: list + A list of reduced skin types. e.g.: ['N-N-2s-2s-0', 'N-B-2s-2p-0', 'B-B-2p-2p-0', 'B-B-2p-2p-1'] + + Returns + ------- + sk_para_delta: dict + A dictionary of skin type constants. e.g.: {'N-N-2s-2s-0': tensor[1.0], 'N-B-2s-2p-0': tensor[0.0], 'B-B-2p-2p-0': tensor[1.0], 'B-B-2p-2p-1': tensor[1.0]} + + ''' + delta_AlAl= torch.zeros(len(reducted_skint_types),1) + for i in range(len(reducted_skint_types)): + itype = reducted_skint_types[i] + if itype.split('-')[0] == itype.split('-')[1] and itype.split('-')[2] == itype.split('-')[3] : + delta_AlAl[i] = 1.0 + else: + delta_AlAl[i] = 0.0 + sk_para_delta = dict(zip(reducted_skint_types, delta_AlAl)) + return sk_para_delta + + def all_onsite_intgrl_types(onsite_intgrl_index_map): """ This function is to get all the possible sk like onsite integra types by given the onsite_intgrl_index_map. From 996fd8a3e6750808d525e3ec228756513d78170e Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:04:50 +0800 Subject: [PATCH 14/63] update sknet to support overlap --- dptb/nnsktb/sknet.py | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/dptb/nnsktb/sknet.py b/dptb/nnsktb/sknet.py index dfd575bd..14ce0971 100644 --- a/dptb/nnsktb/sknet.py +++ b/dptb/nnsktb/sknet.py @@ -21,7 +21,7 @@ def forward(self): class SKNet(nn.Module): def __init__(self, skint_types: list, onsite_types:dict, soc_types: dict, hopping_neurons: dict, onsite_neurons: dict, soc_neurons: dict=None, - onsite_index_dict:dict=None, onsitemode:str='none', device='cpu', dtype=torch.float32, **kwargs): + onsite_index_dict:dict=None, onsitemode:str='none', overlap=False, device='cpu', dtype=torch.float32, **kwargs): ''' define the nn.parameters for fittig sktb. Paras @@ -38,7 +38,7 @@ def __init__(self, skint_types: list, onsite_types:dict, soc_types: dict, hoppin hopping_neurons: dict {'nhidden':int, 'nout':int} - # Note: nout 是拟合公式中的待定参数。比如varTang96 formula nout = 4. + # Note: nout 是拟合公式中的待定参数。比如 varTang96 formula nout = 4. onsite_neurons:dict {'nhidden':int} @@ -58,13 +58,23 @@ def __init__(self, skint_types: list, onsite_types:dict, soc_types: dict, hoppin self.onsite_types = onsite_types self.soc_types = soc_types self.onsite_index_dict = onsite_index_dict + self.overlap = overlap + self.nhop_paras = hopping_neurons.get('nout') + self.noverlap_paras = hopping_neurons.get('nout_overlap',0) - hopping_config = { - 'nin': len(self.skint_types), - 'nhidden': hopping_neurons.get('nhidden',1), - 'nout': hopping_neurons.get('nout'), - 'ini_std':0.001} + if overlap: + hopping_config = { + 'nin': len(self.skint_types), + 'nhidden': hopping_neurons.get('nhidden',1), + 'nout': self.nhop_paras + self.noverlap_paras, + 'ini_std':0.001} + else: + hopping_config = { + 'nin': len(self.skint_types), + 'nhidden': hopping_neurons.get('nhidden',1), + 'nout': hopping_neurons.get('nout'), + 'ini_std':0.001} self.hopping_net = DirectNet(device=device, dtype=dtype, **hopping_config) if self.onsitemode.lower() == 'none': @@ -138,8 +148,14 @@ def forward(self, mode: str): if mode == 'hopping': out = self.hopping_net() - self.hop_coeffdict = dict(zip(self.skint_types, out)) - return self.hop_coeffdict + if self.overlap: + self.hop_coeffdict = dict(zip(self.skint_types, out[:,:self.nhop_paras])) + self.overlap_coeffdict = dict(zip(self.skint_types, out[:,self.nhop_paras:self.nhop_paras+self.noverlap_paras])) + else: + self.hop_coeffdict = dict(zip(self.skint_types, out)) + self.overlap_coeffdict = None + return self.hop_coeffdict, self.overlap_coeffdict + elif mode == 'soc': out = self.soc_net() out = out.abs() From de4eec863b24d04919a10615b72f56b37f7fea59 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:05:26 +0800 Subject: [PATCH 15/63] update init dptb and nnsk to accept overlap for NRL mode --- dptb/plugins/init_dptb.py | 15 +++++++++++-- dptb/plugins/init_nnsk.py | 46 +++++++++++++++++++++++++++++++++------ 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/dptb/plugins/init_dptb.py b/dptb/plugins/init_dptb.py index 6d90b0a0..fbfbf292 100644 --- a/dptb/plugins/init_dptb.py +++ b/dptb/plugins/init_dptb.py @@ -172,6 +172,8 @@ def init_correction_model(self, **options): onsite_func_cutoff = options['onsitefuncion']['onsite_func_cutoff'] onsite_func_decay_w = options['onsitefuncion']['onsite_func_decay_w'] onsite_func_lambda = options['onsitefuncion']['onsite_func_lambda'] + + overlap = options['skfunction'].get('overlap',False) #----------------------------------------------------------------------------------------------------------- # ------------------------------------------------------------------------------------------- @@ -228,6 +230,8 @@ def init_correction_model(self, **options): # onsite_fun = onsiteFunc hops_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m) + if overlap: + overlap_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m,overlap=overlap) if soc: soc_fun = socFunc if onsitemode == 'strain': @@ -240,7 +244,10 @@ def init_correction_model(self, **options): onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit) _, reducted_skint_types, _ = all_skint_types(bond_index_map) - hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras} + if overlap: + hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras, "nout_overlap": overlap_fun.num_paras} + else: + hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras} _, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) if onsitemode == 'strain': @@ -268,7 +275,8 @@ def init_correction_model(self, **options): device=device, dtype=dtype, onsitemode=onsitemode, - onsite_index_dict=onsiteE_ind_dict + onsite_index_dict=onsiteE_ind_dict, + overlap=overlap ) if modeltype == 'ckpt': @@ -285,7 +293,10 @@ def init_correction_model(self, **options): self.host.onsite_fun = onsite_fun self.host.hops_fun = hops_fun + self.host.overlap = overlap # self.host.onsite_db = loadOnsite(onsite_index_map, unit=unit) + if overlap: + self.host.overlap_fun = overlap_fun if onsitemode == 'strain': self.host.onsitestrain_fun = onsitestrain_fun if soc: diff --git a/dptb/plugins/init_nnsk.py b/dptb/plugins/init_nnsk.py index 3690a97c..3ef727cd 100644 --- a/dptb/plugins/init_nnsk.py +++ b/dptb/plugins/init_nnsk.py @@ -57,6 +57,8 @@ def init_from_scratch(self, **common_and_model_options): onsite_func_decay_w = common_and_model_options['onsitefuncion']['onsite_func_decay_w'] onsite_func_lambda = common_and_model_options['onsitefuncion']['onsite_func_lambda'] + overlap = common_and_model_options['skfunction'].get('overlap',False) + #----------------------------------------------------------------------------------------------------------- IndMap = Index_Mapings() IndMap.update(proj_atom_anglr_m=proj_atom_anglr_m) @@ -66,6 +68,9 @@ def init_from_scratch(self, **common_and_model_options): # onsite_fun = onsiteFunc hops_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m) + if overlap: + overlap_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m,overlap=overlap) + if soc: soc_fun = socFunc if onsitemode == 'strain': @@ -74,7 +79,7 @@ def init_from_scratch(self, **common_and_model_options): onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype='none',unit=unit) elif onsitemode == 'NRL': onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit, - onsite_func_cutoff=onsite_func_cutoff,onsite_func_decay_w=onsite_func_decay_w,onsite_func_lambda=onsite_func_lambda) + onsite_func_cutoff=onsite_func_cutoff,onsite_func_decay_w=onsite_func_decay_w,onsite_func_lambda=onsite_func_lambda) else: onsite_fun = orbitalEs(proj_atom_anglr_m=proj_atom_anglr_m,atomtype=atomtype,functype=onsitemode,unit=unit) @@ -82,7 +87,11 @@ def init_from_scratch(self, **common_and_model_options): _, reducted_skint_types, _ = all_skint_types(bond_index_map) _, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) - hopping_neurons = {"nhidden": num_hopping_hideen, "nout": hops_fun.num_paras} + if overlap: + hopping_neurons = {"nhidden": num_hopping_hideen, "nout": hops_fun.num_paras, "nout_overlap": overlap_fun.num_paras} + else: + hopping_neurons = {"nhidden": num_hopping_hideen, "nout": hops_fun.num_paras} + # TODO: modify onsite_neurons, to have nout for other modes. @@ -116,10 +125,14 @@ def init_from_scratch(self, **common_and_model_options): device=device, dtype=dtype, onsitemode=onsitemode, - onsite_index_dict=onsiteE_ind_dict) + onsite_index_dict=onsiteE_ind_dict, + overlap=overlap) self.host.onsite_fun = onsite_fun self.host.hops_fun = hops_fun + self.host.overlap = overlap + if overlap: + self.host.overlap_fun = overlap_fun # self.host.onsite_index_map = onsite_index_map # self.host.onsite_db = loadOnsite(onsite_index_map, unit=common_and_model_options["unit"]) if soc: @@ -168,7 +181,7 @@ def init_from_model(self, **common_and_model_and_run_options): #modeltype = common_and_model_and_run_options['modeltype'] # ---------------------------------------------------------------------------------------------------------- - json_model_types = ["onsite", "hopping", "soc"] + json_model_types = ["onsite", "hopping", "overlap", "soc"] if modeltype == "ckpt": ckpt_list = [torch.load(ckpt) for ckpt in checkpoint] elif modeltype == "json": @@ -187,6 +200,12 @@ def init_from_model(self, **common_and_model_and_run_options): for itype in json_dict[ikey]: json_model_i[itype] = torch.tensor(json_dict[ikey][itype],dtype=dtype,device=device) json_model_list[ikey] = json_model_i + + assert 'onsite' in json_model_list and 'hopping' in json_model_list, "onsite and hopping must be in json_model_list" + if 'overlap' in json_model_list: + for ikey in json_model_list['hopping']: + json_model_list['hopping'][ikey] = torch.cat((json_model_list['hopping'][ikey],json_model_list['overlap'][ikey]),dim=0) + json_model_list.pop('overlap') else: raise NotImplementedError("modeltype {} not implemented".format(modeltype)) @@ -203,6 +222,10 @@ def init_from_model(self, **common_and_model_and_run_options): onsite_func_cutoff = common_and_model_and_run_options['onsitefuncion']['onsite_func_cutoff'] onsite_func_decay_w = common_and_model_and_run_options['onsitefuncion']['onsite_func_decay_w'] onsite_func_lambda = common_and_model_and_run_options['onsitefuncion']['onsite_func_lambda'] + + + overlap = common_and_model_and_run_options['skfunction'].get('overlap',False) + #----------------------------------------------------------------------------------------------------------- if soc and num_soc_hidden is None: @@ -247,6 +270,8 @@ def init_from_model(self, **common_and_model_and_run_options): # onsite_fun = onsiteFunc hops_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m) + if overlap: + overlap_fun = SKintHops(mode='hopping',functype=skformula,proj_atom_anglr_m=proj_atom_anglr_m,overlap=overlap) if soc: soc_fun = socFunc if onsitemode == 'strain': @@ -261,8 +286,10 @@ def init_from_model(self, **common_and_model_and_run_options): _, reducted_skint_types, _ = all_skint_types(bond_index_map) _, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) - hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras} - + if overlap: + hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras, "nout_overlap": overlap_fun.num_paras} + else: + hopping_neurons = {"nhidden": num_hopping_hidden, "nout": hops_fun.num_paras} if onsitemode == 'strain': onsite_neurons = {"nhidden":num_onsite_hidden,"nout":onsitestrain_fun.num_paras} _, reducted_onsiteint_types, _ = all_onsite_intgrl_types(onsite_strain_index_map) @@ -288,7 +315,8 @@ def init_from_model(self, **common_and_model_and_run_options): onsitemode=onsitemode, # Onsiteint_types is a list of onsite integral types, which is used # to determine the number of output neurons of the onsite network. - onsite_index_dict=onsiteE_ind_dict + onsite_index_dict=onsiteE_ind_dict, + overlap=overlap ) if modeltype == 'ckpt': @@ -304,6 +332,10 @@ def init_from_model(self, **common_and_model_and_run_options): self.host.hops_fun = hops_fun #self.host.onsite_index_map = onsite_index_map #self.host.onsite_db = loadOnsite(onsite_index_map, unit=unit) + self.host.overlap = overlap + + if overlap: + self.host.overlap_fun = overlap_fun if soc: self.host.soc_fun = soc_fun self.host.soc_db = loadSoc(onsite_index_map) From 9963c44b83b443c049143e1c8379d3eef0bd2dcb Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:05:51 +0800 Subject: [PATCH 16/63] add duming json checkpoint for NRL mode. in plugin.py --- dptb/plugins/plugins.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/dptb/plugins/plugins.py b/dptb/plugins/plugins.py index f7396659..96a7394d 100644 --- a/dptb/plugins/plugins.py +++ b/dptb/plugins/plugins.py @@ -66,11 +66,23 @@ def _save(self, name, model, model_config): for iikey in range(len(self.trainer.onsite_index_dict[ia])): onsitecoeff[self.trainer.onsite_index_dict[ia][iikey]] = \ [self.trainer.onsite_coeff[ia].tolist()[iikey]] - + elif self.trainer.onsitemode == 'NRL': + for i in self.trainer.onsite_coeff: + onsitecoeff[i] = self.trainer.onsite_coeff[i].tolist() + else: + raise NotImplementedError + json_data["onsite"] = onsitecoeff for i in self.trainer.hopping_coeff: hoppingcoeff[i] = self.trainer.hopping_coeff[i].tolist() json_data["hopping"] = hoppingcoeff + + if self.trainer.overlap_coeff is not None: + overlapcoeff = {} + for i in self.trainer.overlap_coeff: + overlapcoeff[i] = self.trainer.overlap_coeff[i].tolist() + json_data["overlap"] = overlapcoeff + if hasattr(self.trainer,'soc_coeff'): soccoeff = {} for ia in self.trainer.soc_coeff: From 7b9a6835635217e031af896f23901b6a277dce92 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 11:06:27 +0800 Subject: [PATCH 17/63] add new paras for overlap in argcheck --- dptb/utils/argcheck.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dptb/utils/argcheck.py b/dptb/utils/argcheck.py index 8845ac9d..1890fa66 100644 --- a/dptb/utils/argcheck.py +++ b/dptb/utils/argcheck.py @@ -271,11 +271,12 @@ def skfunction(): " doc_sk_cutoff = r"The decay param $r_c$ in $f(r)=1+exp((r_{ij}-r_c)/\omega)$, controls the range of the decay, support list input to move the boundary of devaying function from near to afar. Default: 6.0." doc_sk_decay_w = r"The decay param $\omega$ in $f(r)=1+exp((r_{ij}-r_c)/\omega)$, control how smooth the decay function is, support list input to move the decaying function from soft to hard. Default: 0.1." - + doc_overlap = r"Whether to use overlap matrix to define the SK like integrals. Default: False" args = [ Argument("skformula", str, optional=True, default="powerlaw", doc=doc_skformula), Argument("sk_cutoff", [float,int,list], optional=True, default=6.0, doc=doc_sk_cutoff), - Argument("sk_decay_w", [float, list], optional=True, default=0.1, doc=doc_sk_decay_w) + Argument("sk_decay_w", [float, list], optional=True, default=0.1, doc=doc_sk_decay_w), + Argument("overlap", bool, optional=True, default=False, doc=doc_overlap) ] doc_skfunction = "The parameter to define the analytic function formula of the SK like integrals." From d5dc58fda314e1ad37209f3e03add404a1995591 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 14:35:43 +0800 Subject: [PATCH 18/63] move overlap tag into common options. --- dptb/utils/argcheck.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dptb/utils/argcheck.py b/dptb/utils/argcheck.py index 1890fa66..de46da83 100644 --- a/dptb/utils/argcheck.py +++ b/dptb/utils/argcheck.py @@ -43,6 +43,7 @@ def common_options(): doc_time_symm = "Determine whether time symmetry is conserved, if set to be True, the eigenvalues on -k and k point is considered equal. Default: `True`" doc_soc = "Determine whether soc effect is modeled. If True, the soc network setting in model options need to be setted. Default: `False`" doc_unit = "Determine the unit of Tight-Binding parameters learned in DeePTB. Can be `eV`, `Hartree` or `Rothberg`. It will not affect the eigenvalues output form DeePTB, which is always in the unit of eV. Default: `Hartree`" + doc_overlap = r"Whether to use overlap matrix to define the SK like integrals. Default: False" args = [ Argument("onsite_cutoff", float, optional = False, doc = doc_onsite_cutoff), @@ -56,7 +57,8 @@ def common_options(): Argument("onsitemode", str, optional = True, default = "none", doc = doc_onsitemode), Argument("sk_file_path", str, optional = True, default="./", doc = doc_sk_file_path), Argument("time_symm", bool, optional = True, default=True, doc = doc_time_symm), - Argument("soc", bool, optional=True, default=False, doc=doc_soc), + Argument("soc", bool, optional=True, default=False, doc=doc_soc), + Argument("overlap", bool, optional=True, default=False, doc=doc_overlap), Argument("unit", str, optional=True, default="Hartree", doc=doc_unit) ] @@ -271,12 +273,10 @@ def skfunction(): " doc_sk_cutoff = r"The decay param $r_c$ in $f(r)=1+exp((r_{ij}-r_c)/\omega)$, controls the range of the decay, support list input to move the boundary of devaying function from near to afar. Default: 6.0." doc_sk_decay_w = r"The decay param $\omega$ in $f(r)=1+exp((r_{ij}-r_c)/\omega)$, control how smooth the decay function is, support list input to move the decaying function from soft to hard. Default: 0.1." - doc_overlap = r"Whether to use overlap matrix to define the SK like integrals. Default: False" args = [ Argument("skformula", str, optional=True, default="powerlaw", doc=doc_skformula), Argument("sk_cutoff", [float,int,list], optional=True, default=6.0, doc=doc_sk_cutoff), - Argument("sk_decay_w", [float, list], optional=True, default=0.1, doc=doc_sk_decay_w), - Argument("overlap", bool, optional=True, default=False, doc=doc_overlap) + Argument("sk_decay_w", [float, list], optional=True, default=0.1, doc=doc_sk_decay_w) ] doc_skfunction = "The parameter to define the analytic function formula of the SK like integrals." From da9e9ba9ad06209be66fa02d812261bcd708e91f Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 14:35:56 +0800 Subject: [PATCH 19/63] add self.overlap in apihost --- dptb/nnops/apihost.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dptb/nnops/apihost.py b/dptb/nnops/apihost.py index 3f648b98..6f82a45e 100644 --- a/dptb/nnops/apihost.py +++ b/dptb/nnops/apihost.py @@ -30,6 +30,7 @@ def __init_params(self, **model_config): def build(self): if not 'soc' in self.model_config.keys(): self.model_config.update({'soc':False}) + self.overlap = self.model_config.get('overlap', False) self.call_plugins(queue_name='disposable', time=0, mode='init_model', **self.model_config) self.model_config.update({'use_correction':self.use_correction}) @@ -101,6 +102,7 @@ def __init_params(self, **model_config): def build(self): if not 'soc' in self.model_config.keys(): self.model_config.update({'soc':False}) + self.overlap = self.model_config.get('overlap', False) # --------------------------- init network model ----------------------- self.call_plugins(queue_name='disposable', time=0, mode='init_model', **self.model_config) \ No newline at end of file From d41d3c60d3976acd0694416a5e40d0cb1dc6bddb Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 14:36:35 +0800 Subject: [PATCH 20/63] update tester for dptb and nnsk for overlap nrl cases. --- dptb/nnops/tester_dptb.py | 24 +++++++++++++++++++----- dptb/nnops/tester_nnsk.py | 17 +++++++++++++++-- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/dptb/nnops/tester_dptb.py b/dptb/nnops/tester_dptb.py index 79ede0ad..df938eeb 100644 --- a/dptb/nnops/tester_dptb.py +++ b/dptb/nnops/tester_dptb.py @@ -41,6 +41,7 @@ def _init_param(self, jdata): self.onsitemode = common_options.get('onsitemode','none') self.atomtype = get_uniq_symbol(common_options["atomtype"]) self.soc = common_options['soc'] + self.overlap = common_options['overlap'] self.proj_atomtype = get_uniq_symbol(list(self.proj_atom_anglr_m.keys())) self.band_min = loss_options.get('band_min', 0) @@ -65,11 +66,16 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc batch_bond_onsites, batch_onsiteEs, batch_soc_lambdas = self.nntb.calc(batch_bond, batch_env) if self.run_opt.get("use_correction", False): - coeffdict = self.sknet(mode='hopping') + coeffdict, overlap_coeffdict = self.sknet(mode='hopping') batch_nnsk_hoppings = self.hops_fun.get_skhops( - batch_bond_hoppings, coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], + batch_bonds=batch_bond_hoppings, coeff_paras=coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) nnsk_onsiteE, onsite_coeffdict = self.sknet(mode='onsite') + if self.overlap: + batch_nnsk_overlaps = self.overlap_fun.get_skoverlaps( + batch_bonds=batch_bond_hoppings, coeff_paras=overlap_coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], + w=self.model_options["skfunction"]["sk_decay_w"]) + batch_nnsk_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsitenvs, nn_onsite_paras=nnsk_onsiteE) if self.onsitemode == "strain": @@ -89,6 +95,10 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc if not self.run_opt.get("use_correction", False): onsiteEs, hoppings = batch_onsiteEs[ii], batch_hoppings[ii] soc_lambdas = None + overlaps = None + if self.overlap: + log.error(msg="ValueError: Overlap mode can only be used with nnsk correction.") + raise ValueError if self.soc: log.error(msg="ValueError: Soc mode can only be used with nnsk correction.") raise ValueError @@ -102,10 +112,14 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc sk_soc_lambdas = batch_nnsk_soc_lambdas[ii] else: sk_soc_lambdas = None + if self.overlap: + nnsk_overlaps = batch_nnsk_overlaps[ii] + else: + nnsk_overlaps = None - onsiteEs, hoppings, _, _, soc_lambdas = nnsk_correction(nn_onsiteEs=batch_onsiteEs[ii], nn_hoppings=batch_hoppings[ii], + onsiteEs, hoppings, onsiteSs, overlaps, soc_lambdas = nnsk_correction(nn_onsiteEs=batch_onsiteEs[ii], nn_hoppings=batch_hoppings[ii], sk_onsiteEs=batch_nnsk_onsiteEs[ii], sk_hoppings=batch_nnsk_hoppings[ii], - sk_onsiteSs=None, sk_overlaps=None, + sk_onsiteSs=None, sk_overlaps=nnsk_overlaps, nn_soc_lambdas=nn_soc_lambdas, sk_soc_lambdas=sk_soc_lambdas) @@ -117,7 +131,7 @@ def calc(self, batch_bond, batch_bond_onsites, batch_env, batch_onsitenvs, struc bond_onsites = batch_bond_onsites[ii][:,1:] bond_hoppings = batch_bond_hoppings[ii][:,1:] - self.hamileig.update_hs_list(struct=structs[ii], hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs, soc_lambdas=soc_lambdas) + self.hamileig.update_hs_list(struct=structs[ii], hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs, overlaps=overlaps, soc_lambdas=soc_lambdas) self.hamileig.get_hs_blocks(bonds_onsite=bond_onsites, bonds_hoppings=bond_hoppings, onsite_envs=onsitenvs) diff --git a/dptb/nnops/tester_nnsk.py b/dptb/nnops/tester_nnsk.py index 59ccd95f..33a13da9 100644 --- a/dptb/nnops/tester_nnsk.py +++ b/dptb/nnops/tester_nnsk.py @@ -36,6 +36,7 @@ def _init_param(self, jdata): self.batch_size = data_options["test"]['batch_size'] self.soc = common_options['soc'] + self.overlap = common_options['overlap'] self.proj_atom_anglr_m = common_options.get('proj_atom_anglr_m') self.proj_atom_neles = common_options.get('proj_atom_neles') self.onsitemode = common_options.get('onsitemode','none') @@ -58,12 +59,18 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str log.error(msg="The wannier_blocks from processor is None, but the losstype wannier, please check the input data, maybe the wannier.npy is not there.") raise ValueError - coeffdict = self.model(mode='hopping') + coeffdict, overlap_coeffdict = self.model(mode='hopping') batch_hoppings = self.hops_fun.get_skhops(batch_bonds=batch_bonds, coeff_paras=coeffdict, rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) nn_onsiteE, onsite_coeffdict = self.model(mode='onsite') batch_onsiteEs = self.onsite_fun.get_onsiteEs(batch_bonds_onsite=batch_bond_onsites, onsite_env=batch_onsitenvs, nn_onsite_paras=nn_onsiteE) + + if self.overlap: + assert overlap_coeffdict is not None, "The overlap_coeffdict should be provided if overlap is True." + batch_overlaps = self.overlap_fun.get_skoverlaps(batch_bonds=batch_bonds, coeff_paras=overlap_coeffdict, + rcut=self.model_options["skfunction"]["sk_cutoff"], w=self.model_options["skfunction"]["sk_decay_w"]) + if self.onsitemode == 'strain': batch_onsiteVs = self.onsitestrain_fun.get_skhops(batch_bonds=batch_onsitenvs, coeff_paras=onsite_coeffdict) else: @@ -74,9 +81,11 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str batch_soc_lambdas = self.soc_fun(batch_bonds_onsite=batch_bond_onsites, soc_db=self.soc_db, nn_soc=nn_soc_lambdas) else: batch_soc_lambdas = None + # call sktb to get the sktb hoppings and onsites self.onsite_index_dict = self.model.onsite_index_dict self.hopping_coeff = coeffdict + self.overlap_coeff = overlap_coeffdict if self.onsitemode == 'strain': self.onsite_coeff = onsite_coeffdict else: @@ -98,6 +107,10 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str onsiteVs = None onsitenvs = None # call hamiltonian block + if self.overlap: + overlaps = batch_overlaps[ii] + else: + overlaps = None if self.soc: soc_lambdas = batch_soc_lambdas[ii] @@ -107,7 +120,7 @@ def calc(self, batch_bonds, batch_bond_onsites, batch_envs, batch_onsitenvs, str bond_onsites = batch_bond_onsites[ii][:,1:] bond_hoppings = batch_bonds[ii][:,1:] - self.hamileig.update_hs_list(struct=structs[ii], hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs,soc_lambdas=soc_lambdas) + self.hamileig.update_hs_list(struct=structs[ii], hoppings=hoppings, onsiteEs=onsiteEs, onsiteVs=onsiteVs,overlaps=overlaps, soc_lambdas=soc_lambdas) self.hamileig.get_hs_blocks(bonds_onsite=bond_onsites, bonds_hoppings=bond_hoppings, onsite_envs=onsitenvs) From abec4c73267e01bc215c189db5f1095979543eec Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 14:36:54 +0800 Subject: [PATCH 21/63] add self.overlap in train dptb and nnnsk --- dptb/nnops/train_dptb.py | 1 + dptb/nnops/train_nnsk.py | 1 + 2 files changed, 2 insertions(+) diff --git a/dptb/nnops/train_dptb.py b/dptb/nnops/train_dptb.py index 78379623..e2e7d4f6 100644 --- a/dptb/nnops/train_dptb.py +++ b/dptb/nnops/train_dptb.py @@ -45,6 +45,7 @@ def _init_param(self, jdata): self.onsitemode = common_options.get('onsitemode','none') self.atomtype = get_uniq_symbol(common_options["atomtype"]) self.soc = common_options['soc'] + self.overlap = common_options['overlap'] self.proj_atomtype = get_uniq_symbol(list(self.proj_atom_anglr_m.keys())) self.band_min = loss_options.get('band_min', 0) diff --git a/dptb/nnops/train_nnsk.py b/dptb/nnops/train_nnsk.py index e6ba1a05..d07b77c7 100644 --- a/dptb/nnops/train_nnsk.py +++ b/dptb/nnops/train_nnsk.py @@ -45,6 +45,7 @@ def _init_param(self, jdata): self.proj_atomtype = get_uniq_symbol(list(self.proj_atom_anglr_m.keys())) self.soc = common_options['soc'] + self.overlap = common_options['overlap'] self.validation_loss_options = loss_options.copy() if self.use_reference: From 5e55fbc39da823de7a5055aa19752a53bb93d0dd Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 14:37:52 +0800 Subject: [PATCH 22/63] obtain overlap info from common options. previous from skfuncion options. --- dptb/plugins/init_dptb.py | 2 +- dptb/plugins/init_nnsk.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dptb/plugins/init_dptb.py b/dptb/plugins/init_dptb.py index fbfbf292..b5d1054d 100644 --- a/dptb/plugins/init_dptb.py +++ b/dptb/plugins/init_dptb.py @@ -173,7 +173,7 @@ def init_correction_model(self, **options): onsite_func_decay_w = options['onsitefuncion']['onsite_func_decay_w'] onsite_func_lambda = options['onsitefuncion']['onsite_func_lambda'] - overlap = options['skfunction'].get('overlap',False) + overlap = options.get('overlap',False) #----------------------------------------------------------------------------------------------------------- # ------------------------------------------------------------------------------------------- diff --git a/dptb/plugins/init_nnsk.py b/dptb/plugins/init_nnsk.py index 3ef727cd..8eb4d11f 100644 --- a/dptb/plugins/init_nnsk.py +++ b/dptb/plugins/init_nnsk.py @@ -57,7 +57,7 @@ def init_from_scratch(self, **common_and_model_options): onsite_func_decay_w = common_and_model_options['onsitefuncion']['onsite_func_decay_w'] onsite_func_lambda = common_and_model_options['onsitefuncion']['onsite_func_lambda'] - overlap = common_and_model_options['skfunction'].get('overlap',False) + overlap = common_and_model_options.get('overlap',False) #----------------------------------------------------------------------------------------------------------- IndMap = Index_Mapings() @@ -224,7 +224,7 @@ def init_from_model(self, **common_and_model_and_run_options): onsite_func_lambda = common_and_model_and_run_options['onsitefuncion']['onsite_func_lambda'] - overlap = common_and_model_and_run_options['skfunction'].get('overlap',False) + overlap = common_and_model_and_run_options.get('overlap',False) #----------------------------------------------------------------------------------------------------------- From dba9d4a20779014880e79c0de73444a9fd4a2e21 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 14:38:25 +0800 Subject: [PATCH 23/63] delete else raise NotImplementedError for onsite mode. since the none is also one mode. --- dptb/plugins/plugins.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/dptb/plugins/plugins.py b/dptb/plugins/plugins.py index 96a7394d..152d5ddb 100644 --- a/dptb/plugins/plugins.py +++ b/dptb/plugins/plugins.py @@ -69,8 +69,6 @@ def _save(self, name, model, model_config): elif self.trainer.onsitemode == 'NRL': for i in self.trainer.onsite_coeff: onsitecoeff[i] = self.trainer.onsite_coeff[i].tolist() - else: - raise NotImplementedError json_data["onsite"] = onsitecoeff for i in self.trainer.hopping_coeff: From 2f91b75d3931c5bb1dcb449e52dbcb2699e8cd24 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Tue, 22 Aug 2023 14:39:10 +0800 Subject: [PATCH 24/63] update test_sknet. since now hopping retures two terms, coefff and overlap coeff --- dptb/tests/test_sknet.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dptb/tests/test_sknet.py b/dptb/tests/test_sknet.py index 97777315..cf2573d9 100644 --- a/dptb/tests/test_sknet.py +++ b/dptb/tests/test_sknet.py @@ -54,9 +54,10 @@ def test_bond(self): assert paras[0].shape == torch.Size([len(self.reducted_skint_types), 1, self.bond_neurons['nhidden']]) assert paras[1].shape == torch.Size([len(self.reducted_skint_types), self.bond_neurons['nout'], self.bond_neurons['nhidden']]) - coeff = self.modeluniform(mode='hopping') + coeff, ovelap_coeff = self.modeluniform(mode='hopping') assert len(coeff) == len(self.reducted_skint_types) - + if ovelap_coeff is not None: + assert len(ovelap_coeff) == len(self.reducted_skint_types) for ikey in coeff.keys(): assert ikey in self.reducted_skint_types assert coeff[ikey].shape == torch.Size([self.bond_neurons['nout']]) From 72e3d39f4885c1b7ac1e1c83bd59335bf7f7c875 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Thu, 14 Sep 2023 14:23:19 +0800 Subject: [PATCH 25/63] fix the bug for NN2HRK when use_orthogonal_basis --- dptb/nnops/NN2HRK.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dptb/nnops/NN2HRK.py b/dptb/nnops/NN2HRK.py index 30df9cc2..0b9aeb5b 100644 --- a/dptb/nnops/NN2HRK.py +++ b/dptb/nnops/NN2HRK.py @@ -136,7 +136,7 @@ def _get_nnsk_HR(self): self.use_orthogonal_basis = self.hamileig.use_orthogonal_basis self.allbonds, self.hamil_blocks = self.hamileig.all_bonds, self.hamileig.hamil_blocks - if not self.hamileig.use_orthogonal_basis: + if self.hamileig.use_orthogonal_basis: self.overlap_blocks = None else: self.overlap_blocks = self.hamileig.overlap_blocks @@ -214,7 +214,7 @@ def _get_dptb_HR(self): self.use_orthogonal_basis = self.hamileig.use_orthogonal_basis self.allbonds, self.hamil_blocks = self.hamileig.all_bonds, self.hamileig.hamil_blocks - if not self.hamileig.use_orthogonal_basis: + if self.hamileig.use_orthogonal_basis: self.overlap_blocks = None else: self.overlap_blocks = self.hamileig.overlap_blocks From e52fc2f906fd7b7f6bc34516739cc6cdcdce041d Mon Sep 17 00:00:00 2001 From: QG-phy Date: Thu, 14 Sep 2023 23:01:57 +0800 Subject: [PATCH 26/63] fix bugs for init with json model to use dptb run --- dptb/nnops/apihost.py | 8 ++++++-- dptb/utils/argcheck.py | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/dptb/nnops/apihost.py b/dptb/nnops/apihost.py index 6f82a45e..41db7137 100644 --- a/dptb/nnops/apihost.py +++ b/dptb/nnops/apihost.py @@ -70,7 +70,8 @@ def __init__(self, checkpoint, config=None): raise RuntimeError # jdata = j_loader(checkpoint) - jdata = host_normalize(j_loader(config)) + # jdata = host_normalize(config) + jdata = config #self.call_plugins(queue_name='disposable', time=0, **self.model_options, **self.common_options, **self.data_options, **self.run_opt) common_options = j_must_have(jdata, "common_options") @@ -93,7 +94,10 @@ def __init__(self, checkpoint, config=None): else: log.error(msg="Error! the model file should be one or one list of json/pth file.") - model_config["dtype"] = dtype_dict[model_config["dtype"]] + if isinstance(model_config["dtype"], str): + model_config["dtype"] = dtype_dict[model_config["dtype"]] + else: + model_config["dtype"] = model_config["dtype"] self.__init_params(**model_config) def __init_params(self, **model_config): diff --git a/dptb/utils/argcheck.py b/dptb/utils/argcheck.py index de46da83..a7304d70 100644 --- a/dptb/utils/argcheck.py +++ b/dptb/utils/argcheck.py @@ -437,6 +437,7 @@ def normalize_run(data): doc_common_options = "" doc_structure = "" doc_use_correction = "" + doc_overlap = "" args = [ Argument("onsite_cutoff", float, optional = False, doc = doc_onsite_cutoff), @@ -451,12 +452,13 @@ def normalize_run(data): Argument("sk_file_path", str, optional = True, default="./", doc = doc_sk_file_path), Argument("time_symm", bool, optional = True, default=True, doc = doc_time_symm), Argument("soc", bool, optional=True, default=False, doc=doc_soc), + Argument("overlap", bool, optional=True, default=False, doc=doc_overlap), Argument("unit", str, optional=True, default="Hartree", doc=doc_unit) ] co = Argument("common_options", dict, optional=True, sub_fields=args, sub_variants=[], doc=doc_common_options) ini = init_model() - mo = Argument("model_options", dict, sub_fields=[skfunction(), sknetwork(), dptb()], sub_variants=[], optional=True, doc=doc_model_options) + mo = Argument("model_options", dict, sub_fields=[skfunction(), sknetwork(),onsitefuncion(), dptb()], sub_variants=[], optional=True, doc=doc_model_options) args = [ ini, From 5e38b7bfa0909b77b9376efb8388421752f6fbe9 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Thu, 14 Sep 2023 23:02:20 +0800 Subject: [PATCH 27/63] add example silicon case of NRL TB --- examples/NRL-TB/silicon/band_plot.json | 50 +++++++++ examples/NRL-TB/silicon/input_nrl.json | 61 +++++++++++ examples/NRL-TB/silicon/nrl_ckpt.json | 68 +++++++++++++ examples/NRL-TB/silicon/plotband.ipynb | 134 +++++++++++++++++++++++++ examples/NRL-TB/silicon/run.sh | 1 + examples/hBN/input_short_nrl.json | 66 ++++++++++++ 6 files changed, 380 insertions(+) create mode 100644 examples/NRL-TB/silicon/band_plot.json create mode 100644 examples/NRL-TB/silicon/input_nrl.json create mode 100644 examples/NRL-TB/silicon/nrl_ckpt.json create mode 100644 examples/NRL-TB/silicon/plotband.ipynb create mode 100644 examples/NRL-TB/silicon/run.sh create mode 100644 examples/hBN/input_short_nrl.json diff --git a/examples/NRL-TB/silicon/band_plot.json b/examples/NRL-TB/silicon/band_plot.json new file mode 100644 index 00000000..949d937d --- /dev/null +++ b/examples/NRL-TB/silicon/band_plot.json @@ -0,0 +1,50 @@ +{ + "common_options": { + "unit": "Ry", + "onsitemode": "NRL", + "onsite_cutoff": 6.61475, + "bond_cutoff": 5.0, + "env_cutoff": 4.1, + "atomtype": ["Si"], + "proj_atom_neles": {"Si": 4}, + "proj_atom_anglr_m": { + "Si": ["3s","3p"] + }, + "overlap": true + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1 + }, + "skfunction": { + "sk_cutoff": 6.61475, + "sk_decay_w": 0.26459, + "skformula": "NRL" + }, + "onsitefuncion":{ + "onsite_func_cutoff": 6.61475, + "onsite_func_decay_w": 0.26459, + "onsite_func_lambda":1.5170852322629031 + } + }, + "structure":"./silicon.vasp", + "task_options": { + "task": "band", + "kline_type":"abacus", + "kpath":[[0.0000000000, 0.0000000000, 0.0000000000, 50], + [0.5000000000, 0.0000000000, 0.5000000000, 50], + [0.6250000000, 0.2500000000, 0.6250000000, 1], + [0.3750000000, 0.3750000000, 0.7500000000, 50], + [0.0000000000, 0.0000000000, 0.0000000000, 50], + [0.5000000000, 0.5000000000, 0.5000000000, 50], + [0.5000000000, 0.2500000000, 0.7500000000, 50], + [0.5000000000, 0.0000000000, 0.5000000000, 1 ] + ], + "klabels":["G","X","X/U","K","G","L","W","X"], + "E_fermi":5.78493595123291, + "emin":-15, + "emax":10, + "ref_band": "ref_eigs.npy" + } +} diff --git a/examples/NRL-TB/silicon/input_nrl.json b/examples/NRL-TB/silicon/input_nrl.json new file mode 100644 index 00000000..65f476ef --- /dev/null +++ b/examples/NRL-TB/silicon/input_nrl.json @@ -0,0 +1,61 @@ +{ + "common_options": { + "unit": "Ry", + "onsitemode": "NRL", + "onsite_cutoff": 6.61475, + "bond_cutoff": 5.0, + "env_cutoff": 4.1, + "atomtype": [ + "Si" + ], + "proj_atom_neles": { + "Si": 4 + }, + "proj_atom_anglr_m": { + "Si": [ + "3s", + "3p" + ] + }, + "overlap": true + }, + "train_options": { + "seed":120478, + "num_epoch": 2000, + "optimizer": {"lr":1e-3} + }, + "data_options": { + "use_reference": true, + "train": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_spk" + }, + "validation": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_spk" + }, + "reference": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_spk" + } + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1 + }, + "skfunction": { + "sk_cutoff": 6.61475, + "sk_decay_w": 0.26459, + "skformula": "NRL" + }, + "onsitefuncion":{ + "onsite_func_cutoff": 6.61475, + "onsite_func_decay_w": 0.26459, + "onsite_func_lambda":1.5170852322629031 + } + } +} diff --git a/examples/NRL-TB/silicon/nrl_ckpt.json b/examples/NRL-TB/silicon/nrl_ckpt.json new file mode 100644 index 00000000..78c4d5c6 --- /dev/null +++ b/examples/NRL-TB/silicon/nrl_ckpt.json @@ -0,0 +1,68 @@ +{ + "onsite": { + "Si-3s-0": [ + -0.0532, + -0.9076, + -8.8308, + 56.5661 + ], + "Si-3p-0": [ + 0.3579, + 0.3036, + 7.0922, + -77.4786 + ] + }, + "hopping": { + "Si-Si-3s-3s-0": [ + 219.5608, + -30.638346120412717, + -55.368419367708185, + 1.7381320837923295 + ], + "Si-Si-3s-3p-0": [ + 10.1279, + -8.322121017423184, + 0.8095518623570257, + 1.2684075242922987 + ], + "Si-Si-3p-3p-0": [ + -22.959, + 3.2518235760988703, + 5.0676446752133, + 1.4178340961906113 + ], + "Si-Si-3p-3p-1": [ + 10.2654, + 8.828375977928117, + -7.9141104426803714, + 1.5276701872179814 + ] + }, + "overlap": { + "Si-Si-3s-3s-0": [ + 9.746400090706377, + 2.356877940695355, + -0.549980565032782, + 1.523271244898988 + ], + "Si-Si-3s-3p-0": [ + 16.768585358479157, + -57.99633827158351, + 34.97134088551394, + 1.7055524172422833 + ], + "Si-Si-3p-3p-0": [ + 21.26025171019313, + -4.178458906678234, + -7.14704805430944, + 1.5638239944022099 + ], + "Si-Si-3p-3p-1": [ + -1308.0316716429193, + 1414.6738457816289, + -93.2416130450424, + 2.161667748942928 + ] + } +} \ No newline at end of file diff --git a/examples/NRL-TB/silicon/plotband.ipynb b/examples/NRL-TB/silicon/plotband.ipynb new file mode 100644 index 00000000..47a9e3d5 --- /dev/null +++ b/examples/NRL-TB/silicon/plotband.ipynb @@ -0,0 +1,134 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import numpy as np\n", + "from dptb.plugins.init_nnsk import InitSKModel\n", + "from dptb.nnops.NN2HRK import NN2HRK\n", + "from dptb.nnops.apihost import NNSKHost\n", + "from ase.io import read,write\n", + "from dptb.structure.structure import BaseStruct\n", + "import matplotlib.pyplot as plt\n", + "from dptb.postprocess.bandstructure.band import bandcalc\n", + "import pickle as pickle\n", + "from dptb.dataprocess.processor import Processor\n", + "\n", + "import matplotlib as mpl\n", + "mpl.rcParams['pdf.fonttype'] = 42" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# initial rotate H or S func.\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "checkfile = './nrl_ckpt.json'\n", + "config='./input_nrl.json'\n", + "\n", + "#f = torch.load(checkfile)\n", + "# define nnskapi for tb model.\n", + "nnskapi = NNSKHost(checkpoint=checkfile, config=config)\n", + "nnskapi.register_plugin(InitSKModel())\n", + "nnskapi.build()\n", + "# define nnHrk for Hamiltonian model.\n", + "nnHrk = NN2HRK(apihost=nnskapi, mode='nnsk')\n", + "\n", + "# set the input parameters for band structure calculation.\n", + "# structure: the path of the structure file.\n", + "run_opt={\"structure\":\"./data/silicon.vasp\",\n", + " \"results_path\":\"./\"}\n", + "# jdata: the input parameters for band structure calculation.\n", + "\n", + "jdata={\"kline_type\":\"abacus\",\n", + " \"kpath\":[[0.0000000000, 0.0000000000, 0.0000000000, 50], \n", + " [0.5000000000, 0.0000000000, 0.5000000000, 50], \n", + " [0.6250000000, 0.2500000000, 0.6250000000, 1], \n", + " [0.3750000000, 0.3750000000, 0.7500000000, 50], \n", + " [0.0000000000, 0.0000000000, 0.0000000000, 50], \n", + " [0.5000000000, 0.5000000000, 0.5000000000, 50], \n", + " [0.5000000000, 0.2500000000, 0.7500000000, 50], \n", + " [0.5000000000, 0.0000000000, 0.5000000000, 1 ]\n", + " ],\n", + " \"nkpoints\":51,\n", + " \"klabels\":[\"G\",\"X\",\"X/U\",\"K\",\"G\",\"L\",\"W\",\"X\"],\n", + " \"E_fermi\":-7.5,\n", + " \"emin\":-23,\n", + " \"emax\":12\n", + " }\n", + "# call bandcalc to calculate the band structure.\n", + "bcalc = bandcalc(apiHrk=nnHrk,run_opt=run_opt,jdata=jdata)\n", + "eigenstatus = bcalc.get_bands()\n", + "\n", + "# load the DFT band data.\n", + "#band = np.loadtxt('../data/soc/BANDS_1.dat')\n", + "band = np.load(\"./data/kpath.0/eigs.npy\")[0]\n", + "# plot figures.\n", + "plt.figure(figsize=(5,5),dpi=100)\n", + "# in DFT band data, the first column is column index, the second is the kpoints, \n", + "# the 3rd column is the eigenvalues of the first band, the 4th column is the eigenvalues of the second band, and so on.\n", + "# Here, the the first 20 bands are core eletronic bands, not fitting in TB model.\n", + "plt.plot(eigenstatus['xlist'][::6], band[::6,:] - np.min(band[:,:]),'ko',ms=4)\n", + "# set the minimum eigenvalue as 0.\n", + "plt.plot(eigenstatus['xlist'], eigenstatus['eigenvalues']- np.min(eigenstatus['eigenvalues']), 'r-',lw=1)\n", + "\n", + "plt.ylim(-1,35)\n", + "for ii in eigenstatus['high_sym_kpoints']:\n", + " plt.axvline(ii,color='gray',lw=1,ls='--')\n", + "plt.tick_params(direction='in')\n", + "\n", + "plt.xlim(eigenstatus['xlist'].min(),eigenstatus['xlist'].max())\n", + "\n", + "plt.ylabel('E - E$_{min}$ (eV)',fontsize=12)\n", + "plt.yticks(fontsize=12)\n", + "plt.xticks(eigenstatus['high_sym_kpoints'], eigenstatus['labels'], fontsize=12)\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/NRL-TB/silicon/run.sh b/examples/NRL-TB/silicon/run.sh new file mode 100644 index 00000000..7d80e495 --- /dev/null +++ b/examples/NRL-TB/silicon/run.sh @@ -0,0 +1 @@ +dptb run band_plot.json -sk -i nrl_ckpt.json -o band diff --git a/examples/hBN/input_short_nrl.json b/examples/hBN/input_short_nrl.json new file mode 100644 index 00000000..56bf620c --- /dev/null +++ b/examples/hBN/input_short_nrl.json @@ -0,0 +1,66 @@ +{ + "common_options": { + "onsitemode": "NRL", + "onsite_cutoff": 1.6, + "bond_cutoff": 1.6, + "env_cutoff": 3.5, + "atomtype": [ + "N", + "B" + ], + "proj_atom_neles": { + "N": 5, + "B": 3 + }, + "proj_atom_anglr_m": { + "N": [ + "2s", + "2p" + ], + "B": [ + "2s", + "2p" + ] + }, + "overlap": true + }, + "train_options": { + "seed":120478, + "num_epoch": 200, + "optimizer": {"lr":1e-2} + }, + "data_options": { + "use_reference": true, + "train": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_sparse" + }, + "validation": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_sparse" + }, + "reference": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_sparse" + } + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1 + }, + "skfunction": { + "sk_cutoff": 1.6, + "sk_decay_w": 0.3, + "skformula": "NRL" + }, + "onsitefuncion":{ + "onsite_func_cutoff": 1.6, + "onsite_func_decay_w": 0.3, + "onsite_func_lambda":1.0 + } + } +} From 00d8f871d84769a15a92be3f29aa1075fd811201 Mon Sep 17 00:00:00 2001 From: QG-phy Date: Fri, 6 Oct 2023 21:50:11 +0800 Subject: [PATCH 28/63] update test_processor: add test_getenv test_getbond --- dptb/tests/test_processor.py | 85 +++++++++++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/dptb/tests/test_processor.py b/dptb/tests/test_processor.py index 589f6357..63921868 100644 --- a/dptb/tests/test_processor.py +++ b/dptb/tests/test_processor.py @@ -1,4 +1,5 @@ import numpy as np +import torch from dptb.dataprocess.processor import Processor from dptb.structure.structure import BaseStruct from dptb.utils.tools import get_uniq_symbol @@ -10,7 +11,49 @@ def root_directory(request): return str(request.config.rootdir) -def test_env(): +def test_getenv(root_directory): + batch_env_true = torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 6.9171357155e-01, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 6.9171363115e-01, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 6.9171363115e-01, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + -1.0000000000e+00, 0.0000000000e+00, 6.9171363115e-01, + 5.0252534578e-08, -1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 6.9171363115e-01, + -8.6602538824e-01, 5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 6.9171357155e-01, + 8.6602538824e-01, 5.0000000000e-01, 0.0000000000e+00]]) + + + filename = root_directory + filename += '/dptb/tests/data/hBN/hBN.vasp' + + proj_atom_anglr_m = {"N": ["s", "p"], "B": ["s", "p"]} + proj_atom_neles = {"N": 5, "B": 3} + CutOff = 2 + struct = BaseStruct(atom=filename, format='vasp', + cutoff=CutOff, proj_atom_anglr_m=proj_atom_anglr_m, proj_atom_neles=proj_atom_neles) + + struct_list = [struct] + kpoints_list = np.array([[0, 0, 0], [0.5, 0.5, 0.5]]) + eig_list = [np.zeros([2,10]), np.zeros([2,10])] + processor = Processor(structure_list=struct_list, kpoint=kpoints_list, eigen_list=eig_list, batchsize=1, env_cutoff=2.0) + batch_env = processor.get_env(cutoff=2.0,sorted=None) + + assert (batch_env - batch_env_true < 1e-8).all() pass @@ -52,7 +95,45 @@ def test_proj_atomtype(root_directory): assert get_uniq_symbol(processor.proj_atomtype) == get_uniq_symbol(['N', 'B', 'C']) def test_getbond(root_directory): - pass + batch_bond_onsite_true = torch.tensor([[0., 7., 0., 7., 0., 0., 0., 0.], + [0., 5., 1., 5., 1., 0., 0., 0.]]) + batch_bond_true = torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00]]) + filename = root_directory + filename += '/dptb/tests/data/hBN/hBN.vasp' + + proj_atom_anglr_m = {"N": ["s", "p"], "B": ["s", "p"]} + proj_atom_neles = {"N": 5, "B": 3} + CutOff = 2 + struct = BaseStruct(atom=filename, format='vasp', + cutoff=CutOff, proj_atom_anglr_m=proj_atom_anglr_m, proj_atom_neles=proj_atom_neles) + + struct_list = [struct] + kpoints_list = np.array([[0, 0, 0], [0.5, 0.5, 0.5]]) + eig_list = [np.zeros([2,10]), np.zeros([2,10])] + processor = Processor(structure_list=struct_list, kpoint=kpoints_list, eigen_list=eig_list, batchsize=1, env_cutoff=5) + + batch_bond, batch_bond_onsite = processor.get_bond(sorted=None) + + assert torch.equal(batch_bond_onsite, batch_bond_onsite_true) + assert (batch_bond - batch_bond_true < 1e-8).all() + + + batch_bond, batch_bond_onsite = processor.get_bond(sorted='st') + assert isinstance(batch_bond, dict) + assert isinstance(batch_bond_onsite, dict) + assert torch.equal(batch_bond_onsite[0], batch_bond_onsite_true) + assert (batch_bond[0] - batch_bond_true < 1e-8).all() def test_iter(root_directory): filename = root_directory From 268581f312ad043c1133a32bf2525ba8f2ba3cfe Mon Sep 17 00:00:00 2001 From: qqgu Date: Fri, 6 Oct 2023 22:36:13 +0800 Subject: [PATCH 29/63] update docstrings in processor. --- dptb/dataprocess/processor.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/dptb/dataprocess/processor.py b/dptb/dataprocess/processor.py index e4b196c8..0e2927db 100644 --- a/dptb/dataprocess/processor.py +++ b/dptb/dataprocess/processor.py @@ -68,10 +68,19 @@ def shuffle(self): self.__struct_unsampled__ = self.__struct_unsampled__[self.batchsize:] def get_env(self, cutoff=None, sorted=None): - # TODO: the sorted mode should be explained here, in which case, we should use. '''It takes the environment of each structure in the workspace and concatenates them into one big environment + Parameters + ---------- + cutoff float : the cutoff radius for the onsite environment. + sorted str : the sorted mode for the onsite environment. + None: not sorted, return torch tensors. + 'st': sorted by structure, return a dictionary of tensors. eg. {0: tensor, 1: tensor, ...} + 'itype-jtype': sorted by itype and jtype, return a dictionary of tensors. eg. {'C-B': tensor, ...} + + for env sorted="st". + Returns ------- A dictionary of the environment for ent type for all the strucutes in the works sapce. @@ -124,10 +133,18 @@ def get_env(self, cutoff=None, sorted=None): return batch_env # {env_type: (f, itype, i, jtype, j, jtype, Rx, Ry, Rz, s(r), rx, ry, rz)} or [(f, itype, i, jtype, j, jtype, Rx, Ry, Rz, s(r), rx, ry, rz)] def get_onsitenv(self, cutoff=None, sorted=None): - # TODO: the sorted mode should be explained here, in which case, we should use. '''It takes the environment of each structure in the workspace and concatenates them into one big environment + Parameters + ---------- + cutoff float : the cutoff radius for the onsite environment. + sorted str : the sorted mode for the onsite environment. + None: not sorted, return torch tensors. + 'st': sorted by structure, return a dictionary of tensors. eg. {0: tensor, 1: tensor, ...} + 'itype-jtype': sorted by itype and jtype, return a dictionary of tensors. eg. {'C-B': tensor, ...} + + for onsiteenv sorted_env="itype-jtype". Returns ------- A dictionary of the environment for ent type for all the strucutes in the works sapce. @@ -182,6 +199,14 @@ def get_onsitenv(self, cutoff=None, sorted=None): def get_bond(self, sorted=None): '''It takes the bonds of each structure in the workspace and concatenates them into one big dictionary. + Parameters + ---------- + sorted str : the sorted mode for the onsite environment. + None: not sorted, return torch tensors. + 'st': sorted by structure, return a dictionary of tensors. eg. {0: tensor, 1: tensor, ...} + + For bond sorted="st". + Returns ------- A Tensor of the bonds lists for bond type for all the strucutes in the works space. From d300a245bb778687f5f570015e7207435c3ac577 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 00:04:10 +0800 Subject: [PATCH 30/63] add one coments in structure.py for get env smoth --- dptb/structure/structure.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dptb/structure/structure.py b/dptb/structure/structure.py index ba23226a..ff025388 100644 --- a/dptb/structure/structure.py +++ b/dptb/structure/structure.py @@ -158,6 +158,7 @@ def get_bond(self, cutoff=None, time_symm=True): return self.__bonds__, self.__bonds_onsite__ def get_env(self, env_cutoff=None, sorted='iatom-jatom'): + # for get env the default is turn on the smooth option. if self.if_env_ready: if env_cutoff == self.env_cutoff or env_cutoff == None: return self.__projenv__ From c10256f5146da0dc4dd9a45f80174164c2424e1a Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 00:05:10 +0800 Subject: [PATCH 31/63] update test: add test for test_next test_get_onsitenv --- dptb/tests/test_processor.py | 259 +++++++++++++++++++++++++++++++---- 1 file changed, 236 insertions(+), 23 deletions(-) diff --git a/dptb/tests/test_processor.py b/dptb/tests/test_processor.py index 63921868..011c0551 100644 --- a/dptb/tests/test_processor.py +++ b/dptb/tests/test_processor.py @@ -7,12 +7,7 @@ from ase.build import graphene_nanoribbon import logging -@pytest.fixture(scope='session', autouse=True) -def root_directory(request): - return str(request.config.rootdir) - -def test_getenv(root_directory): - batch_env_true = torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, +batch_env_true = torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, 6.9171357155e-01, -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], @@ -36,7 +31,106 @@ def test_getenv(root_directory): 7.0000000000e+00, 0.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, 6.9171357155e-01, 8.6602538824e-01, 5.0000000000e-01, 0.0000000000e+00]]) - + +batch_env_itype_jtype_true = {'N-B': torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 6.9171357155e-01, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 6.9171363115e-01, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 6.9171363115e-01, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00]]), + 'B-N': torch.tensor([[ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + -1.0000000000e+00, 0.0000000000e+00, 6.9171363115e-01, + 5.0252534578e-08, -1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 6.9171363115e-01, + -8.6602538824e-01, 5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 6.9171357155e-01, + 8.6602538824e-01, 5.0000000000e-01, 0.0000000000e+00]])} + + +batch_bond_onsite_true = torch.tensor([[0., 7., 0., 7., 0., 0., 0., 0.], + [0., 5., 1., 5., 1., 0., 0., 0.]]) + +batch_bond_true = torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00]]) + + +batch_onsitenv_true = torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + -1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + 5.0252534578e-08, -1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + -8.6602538824e-01, 5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + 8.6602538824e-01, 5.0000000000e-01, 0.0000000000e+00]]) + + +batch_onsitenv_itype_jtype_true = {'N-B': torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00]]), + 'B-N': torch.tensor([[ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + -1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + 5.0252534578e-08, -1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + -8.6602538824e-01, 5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + 8.6602538824e-01, 5.0000000000e-01, 0.0000000000e+00]])} + +@pytest.fixture(scope='session', autouse=True) +def root_directory(request): + return str(request.config.rootdir) + +def test_getenv(root_directory): filename = root_directory filename += '/dptb/tests/data/hBN/hBN.vasp' @@ -55,7 +149,16 @@ def test_getenv(root_directory): assert (batch_env - batch_env_true < 1e-8).all() - pass + batch_env = processor.get_env(cutoff=2.0,sorted='st') + assert isinstance(batch_env, dict) + assert (batch_env[0] - batch_env_true < 1e-8).all() + + processor.__struct_workspace__[0].if_env_ready = False + batch_env_itype_jtype = processor.get_env(cutoff=2.0, sorted="itype-jtype") + assert isinstance(batch_env_itype_jtype, dict) + for ikey in batch_env_itype_jtype: + assert ikey in batch_env_itype_jtype_true + assert (batch_env_itype_jtype[ikey] - batch_env_itype_jtype_true[ikey] < 1e-8).all() def test_atomtype(root_directory): filename = root_directory @@ -95,20 +198,7 @@ def test_proj_atomtype(root_directory): assert get_uniq_symbol(processor.proj_atomtype) == get_uniq_symbol(['N', 'B', 'C']) def test_getbond(root_directory): - batch_bond_onsite_true = torch.tensor([[0., 7., 0., 7., 0., 0., 0., 0.], - [0., 5., 1., 5., 1., 0., 0., 0.]]) - batch_bond_true = torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, - 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, - 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, - -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], - [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, - 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, - 1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, - -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], - [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, - 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, - 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, - 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00]]) + filename = root_directory filename += '/dptb/tests/data/hBN/hBN.vasp' @@ -162,4 +252,127 @@ def test_iter(root_directory): if i > 4: raise ValueError if i != 4: - raise ValueError \ No newline at end of file + raise ValueError + +def test_get_onsitenv(root_directory): + + filename = root_directory + filename += '/dptb/tests/data/hBN/hBN.vasp' + + proj_atom_anglr_m = {"N": ["s", "p"], "B": ["s", "p"]} + proj_atom_neles = {"N": 5, "B": 3} + CutOff = 2 + struct = BaseStruct(atom=filename, format='vasp', + cutoff=CutOff, proj_atom_anglr_m=proj_atom_anglr_m, proj_atom_neles=proj_atom_neles) + + struct_list = [struct] + kpoints_list = np.array([[0, 0, 0], [0.5, 0.5, 0.5]]) + eig_list = [np.zeros([2,10]), np.zeros([2,10])] + processor = Processor(structure_list=struct_list, kpoint=kpoints_list, eigen_list=eig_list, batchsize=1, env_cutoff=2.0, onsite_cutoff=2.0) + batch_onsitenv = processor.get_onsitenv(sorted=None) + + assert (batch_onsitenv - batch_onsitenv_true < 1e-8).all() + + batch_onsitenv = processor.get_onsitenv(sorted='st') + assert isinstance(batch_onsitenv, dict) + assert (batch_onsitenv[0] - batch_onsitenv_true < 1e-8).all() + + processor.__struct_workspace__[0].if_onsitenv_ready = False + batch_onsitenv_itype_jtype = processor.get_onsitenv(sorted="itype-jtype") + assert isinstance(batch_onsitenv_itype_jtype, dict) + for ikey in batch_onsitenv_itype_jtype: + assert ikey in batch_onsitenv_itype_jtype_true + assert (batch_onsitenv_itype_jtype[ikey] - batch_onsitenv_itype_jtype_true[ikey] < 1e-8).all() + + +def test_next(root_directory): + + filename = root_directory + filename += '/dptb/tests/data/hBN/hBN.vasp' + + proj_atom_anglr_m = {"N": ["s", "p"], "B": ["s", "p"]} + proj_atom_neles = {"N": 5, "B": 3} + CutOff = 2 + struct = BaseStruct(atom=filename, format='vasp', + cutoff=CutOff, proj_atom_anglr_m=proj_atom_anglr_m, proj_atom_neles=proj_atom_neles) + + struct_list = [struct] + kpoints_list = np.array([[0, 0, 0], [0.5, 0.5, 0.5]]) + eig_list = np.zeros([1, 2,10]) + + processor = Processor(structure_list=struct_list, batchsize=1, kpoint=kpoints_list, eigen_list=eig_list, wannier_list=[None for _ in range(len(struct_list))], + env_cutoff=2.0,onsite_cutoff=2.0, sorted_onsite="st", sorted_bond="st", sorted_env="itype-jtype") + + for data in processor: + assert len(data) == 8 + assert isinstance(data[0], dict) + assert isinstance(data[1], dict) + assert torch.equal(data[1][0], batch_bond_onsite_true) + assert (data[0][0] - batch_bond_true < 1e-8).all() + + assert isinstance(data[2], dict) + for ikey in data[2]: + assert ikey in batch_env_itype_jtype_true + assert (data[2][ikey] - batch_env_itype_jtype_true[ikey] < 1e-8).all() + + assert processor.onsitemode is None + assert data[3] is None + + assert len(data[4]) == 1 + assert isinstance(data[4][0],BaseStruct) + + assert (data[5] - kpoints_list < 1e-8).all() + assert (data[6] - eig_list < 1e-8).all() + + processor = Processor(structure_list=struct_list, batchsize=1, kpoint=kpoints_list, eigen_list=eig_list, wannier_list=[None for _ in range(len(struct_list))], + env_cutoff=2.0,onsite_cutoff=2.0, sorted_onsite="st", sorted_bond="st", sorted_env="itype-jtype") + processor.onsitemode = 'strain' + + for data in processor: + assert len(data) == 8 + assert isinstance(data[0], dict) + assert isinstance(data[1], dict) + assert torch.equal(data[1][0], batch_bond_onsite_true) + assert (data[0][0] - batch_bond_true < 1e-8).all() + + assert isinstance(data[2], dict) + for ikey in data[2]: + assert ikey in batch_env_itype_jtype_true + assert (data[2][ikey] - batch_env_itype_jtype_true[ikey] < 1e-8).all() + + assert processor.onsitemode is 'strain' + assert isinstance(data[3], dict) + assert (data[3][0] - batch_onsitenv_true < 1e-8).all() + + assert len(data[4]) == 1 + assert isinstance(data[4][0],BaseStruct) + + assert (data[5] - kpoints_list < 1e-8).all() + assert (data[6] - eig_list < 1e-8).all() + + + processor = Processor(structure_list=struct_list, batchsize=1, kpoint=kpoints_list, eigen_list=eig_list, wannier_list=[None for _ in range(len(struct_list))], + env_cutoff=2.0,onsite_cutoff=2.0, sorted_onsite="st", sorted_bond="st", sorted_env="itype-jtype") + processor.onsitemode = 'NRL' + + for data in processor: + assert len(data) == 8 + assert isinstance(data[0], dict) + assert isinstance(data[1], dict) + assert torch.equal(data[1][0], batch_bond_onsite_true) + assert (data[0][0] - batch_bond_true < 1e-8).all() + + assert isinstance(data[2], dict) + for ikey in data[2]: + assert ikey in batch_env_itype_jtype_true + assert (data[2][ikey] - batch_env_itype_jtype_true[ikey] < 1e-8).all() + + assert processor.onsitemode is 'NRL' + assert isinstance(data[3], dict) + assert (data[3][0] - batch_onsitenv_true < 1e-8).all() + + assert len(data[4]) == 1 + assert isinstance(data[4][0],BaseStruct) + + assert (data[5] - kpoints_list < 1e-8).all() + assert (data[6] - eig_list < 1e-8).all() \ No newline at end of file From ac75502be9908b79c1a595cfcfb3775a31e29955 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 10:50:07 +0800 Subject: [PATCH 32/63] update hamil_eig_sk_crt.py: add comments about the onsite overlap matrix --- dptb/hamiltonian/hamil_eig_sk_crt.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dptb/hamiltonian/hamil_eig_sk_crt.py b/dptb/hamiltonian/hamil_eig_sk_crt.py index 8c7b5640..fef3ff84 100644 --- a/dptb/hamiltonian/hamil_eig_sk_crt.py +++ b/dptb/hamiltonian/hamil_eig_sk_crt.py @@ -149,7 +149,8 @@ def get_hs_onsite(self, bonds_onsite = None, onsite_envs=None): sub_hamil_block = th.zeros([self.__struct__.proj_atomtype_norbs[iatype], self.__struct__.proj_atomtype_norbs[jatype]], dtype=self.dtype, device=self.device) if not self.use_orthogonal_basis: - #sub_over_block = th.zeros([self.__struct__.proj_atomtype_norbs[iatype], self.__struct__.proj_atomtype_norbs[jatype]], dtype=self.dtype, device=self.device) + # For non - orthogonal basis, the overlap matrix is needed. + # but for the onsite, the overlap matrix is identity. sub_over_block = th.eye(self.__struct__.proj_atomtype_norbs[iatype], dtype=self.dtype, device=self.device) @@ -161,6 +162,7 @@ def get_hs_onsite(self, bonds_onsite = None, onsite_envs=None): indx = self.__struct__.onsite_index_map[iatype][ish] # change onsite index map from {N:{s:}} to {N:{ss:, sp:}} sub_hamil_block[ist:ist+norbi, ist:ist+norbi] = th.eye(norbi, dtype=self.dtype, device=self.device) * self.onsiteEs[ib][indx] + # For non - orthogonal basis, the onsite overlap is identity, we don't need to calculate it. #if not self.use_orthogonal_basis: # sub_over_block[ist:ist+norbi, ist:ist+norbi] = th.eye(norbi, dtype=self.dtype, device=self.device) * self.onsiteSs[ib][indx] ist = ist + norbi From ffca168201285533f96543c572bd4ca725f7ed3d Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 15:13:57 +0800 Subject: [PATCH 33/63] update hamil_eig_sk_crt.py add log.info for onsiteS not None. --- dptb/hamiltonian/hamil_eig_sk_crt.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dptb/hamiltonian/hamil_eig_sk_crt.py b/dptb/hamiltonian/hamil_eig_sk_crt.py index fef3ff84..1508a63b 100644 --- a/dptb/hamiltonian/hamil_eig_sk_crt.py +++ b/dptb/hamiltonian/hamil_eig_sk_crt.py @@ -56,6 +56,10 @@ def update_hs_list(self, struct, hoppings, onsiteEs, onsiteVs=None, overlaps=Non self.onsiteSs = onsiteSs self.use_orthogonal_basis = False + if onsiteSs is not None: + log.info(msg='The onsiteSs is not None, But envn for non-orthogonal basis, the onsite S matrix part is still identity.') + log.info(msg='Therefor the onsiteSs will not be used !!') + if soc_lambdas is None: self.soc = False else: From d94443ba1a1475370b2ecfebb2448447eeed3805 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 15:15:30 +0800 Subject: [PATCH 34/63] [test] copy test_hamil_eig_sk to test_hamil_eig_sk_skfiles, and add new test which doesnot depend on the skfiles. --- dptb/tests/test_hamil_eig_sk_crt.py | 421 ++++++++++++++++++ ...eig_sk.py => test_hamil_eig_sk_skfiles.py} | 0 2 files changed, 421 insertions(+) create mode 100644 dptb/tests/test_hamil_eig_sk_crt.py rename dptb/tests/{test_hamil_eig_sk.py => test_hamil_eig_sk_skfiles.py} (100%) diff --git a/dptb/tests/test_hamil_eig_sk_crt.py b/dptb/tests/test_hamil_eig_sk_crt.py new file mode 100644 index 00000000..bdfc2c88 --- /dev/null +++ b/dptb/tests/test_hamil_eig_sk_crt.py @@ -0,0 +1,421 @@ +import pytest +import logging +import pickle +import numpy as np +import torch +from dptb.sktb.struct_skhs import SKHSLists +from dptb.sktb.skIntegrals import SKIntegrals +from dptb.structure.structure import BaseStruct +from dptb.hamiltonian.hamil_eig_sk_crt import HamilEig +@pytest.fixture(scope='session', autouse=True) +def root_directory(request): + return str(request.config.rootdir) + +all_bonds = torch.tensor([[ 7, 0, 7, 0, 0, 0, 0], + [ 5, 1, 5, 1, 0, 0, 0], + [ 7, 0, 5, 1, -2, 0, 0], + [ 7, 0, 7, 0, -1, 0, 0], + [ 7, 0, 5, 1, -1, 0, 0], + [ 7, 0, 5, 1, 1, 0, 0], + [ 7, 0, 5, 1, -1, 1, 0], + [ 7, 0, 7, 0, 0, 1, 0], + [ 7, 0, 5, 1, 0, 1, 0], + [ 7, 0, 7, 0, 1, 1, 0], + [ 7, 0, 5, 1, 1, 1, 0], + [ 7, 0, 5, 1, 0, 2, 0], + [ 7, 0, 5, 1, 1, 2, 0], + [ 7, 0, 5, 1, 0, 0, 0], + [ 7, 0, 5, 1, -1, -1, 0], + [ 7, 0, 5, 1, -2, -1, 0], + [ 7, 0, 5, 1, 0, -1, 0], + [ 5, 1, 5, 1, 1, 1, 0], + [ 5, 1, 5, 1, 0, -1, 0], + [ 5, 1, 5, 1, -1, 0, 0]]) + +hoppings = [torch.tensor([-0.0005011521, -0.0007864405, 0.0008899120, -0.0014341624, + 0.0001137365]), + torch.tensor([-0.0179990474, 0.0277148001, 0.0379232541, -0.0057391352]), + torch.tensor([-0.2856900394, -0.3409822285, 0.2457398921, -0.2667809427, + 0.1184284016]), + torch.tensor([-0.0005011525, -0.0007864412, 0.0008899128, -0.0014341637, + 0.0001137366]), + torch.tensor([-0.0100385901, -0.0150612434, 0.0152519383, -0.0215374213, + 0.0027239092]), + torch.tensor([-0.0179990474, 0.0277148001, 0.0379232541, -0.0057391352]), + torch.tensor([-0.2856901884, -0.3409823477, 0.2457399666, -0.2667810321, + 0.1184284687]), + torch.tensor([-0.0179990474, 0.0277148001, 0.0379232541, -0.0057391352]), + torch.tensor([-0.0100385901, -0.0150612434, 0.0152519383, -0.0215374213, + 0.0027239092]), + torch.tensor([-0.0005011525, -0.0007864412, 0.0008899128, -0.0014341637, + 0.0001137366]), + torch.tensor([-0.0005011525, -0.0007864412, 0.0008899128, -0.0014341637, + 0.0001137366]), + torch.tensor([-0.2856900990, -0.3409822881, 0.2457399368, -0.2667809725, + 0.1184284315]), + torch.tensor([-0.0100385901, -0.0150612434, 0.0152519383, -0.0215374213, + 0.0027239092]), + torch.tensor([-0.0005011521, -0.0007864405, 0.0008899120, -0.0014341624, + 0.0001137365]), + torch.tensor([-0.0005011525, -0.0007864412, 0.0008899128, -0.0014341637, + 0.0001137366]), + torch.tensor([-0.0406202637, -0.0519169979, 0.0632600486, -0.0118351942]), + torch.tensor([-0.0406202637, -0.0519169979, 0.0632600486, -0.0118351942]), + torch.tensor([-0.0406202637, -0.0519169979, 0.0632600486, -0.0118351942])] + +onsiteEs = [torch.tensor([-0.6713629961, -0.2612220049]), + torch.tensor([-0.3398109972, -0.1319029927])] + + +overlaps = [torch.tensor([ 3.5307926009e-04, 4.4562449330e-04, -5.0999177620e-04, + 7.0796912769e-04, -8.7806904048e-05]), + torch.tensor([ 0.0115950583, -0.0208761506, -0.0355637968, 0.0046228860]), + torch.tensor([ 0.2665879726, 0.3365865350, -0.2903072834, 0.3249941170, + -0.1442578882]), + torch.tensor([ 3.5307943472e-04, 4.4562481344e-04, -5.0999218365e-04, + 7.0796982618e-04, -8.7806962256e-05]), + torch.tensor([ 0.0067287856, 0.0108762654, -0.0123427259, 0.0193682071, + -0.0020751357]), + torch.tensor([ 0.0115950583, -0.0208761506, -0.0355637968, 0.0046228860]), + torch.tensor([ 0.2665880620, 0.3365866542, -0.2903073728, 0.3249941766, + -0.1442579776]), + torch.tensor([ 0.0115950583, -0.0208761506, -0.0355637968, 0.0046228860]), + torch.tensor([ 0.0067287856, 0.0108762654, -0.0123427259, 0.0193682071, + -0.0020751357]), + torch.tensor([ 3.5307943472e-04, 4.4562481344e-04, -5.0999218365e-04, + 7.0796982618e-04, -8.7806962256e-05]), + torch.tensor([ 3.5307943472e-04, 4.4562481344e-04, -5.0999218365e-04, + 7.0796982618e-04, -8.7806962256e-05]), + torch.tensor([ 0.2665880322, 0.3365865946, -0.2903073430, 0.3249941468, + -0.1442579329]), + torch.tensor([ 0.0067287856, 0.0108762654, -0.0123427259, 0.0193682071, + -0.0020751357]), + torch.tensor([ 3.5307926009e-04, 4.4562449330e-04, -5.0999177620e-04, + 7.0796912769e-04, -8.7806904048e-05]), + torch.tensor([ 3.5307943472e-04, 4.4562481344e-04, -5.0999218365e-04, + 7.0796982618e-04, -8.7806962256e-05]), + torch.tensor([ 0.0399276651, 0.0585683137, -0.0838758051, 0.0126880677]), + torch.tensor([ 0.0399276651, 0.0585683137, -0.0838758051, 0.0126880677]), + torch.tensor([ 0.0399276651, 0.0585683137, -0.0838758051, 0.0126880677])] + +hamil_blocks=[torch.tensor([[-0.671363, 0. , 0. , 0. ], + [ 0. , -0.261222, -0. , -0. ], + [ 0. , -0. , -0.261222, -0. ], + [ 0. , -0. , -0. , -0.261222]]), + torch.tensor([[-0.339811, 0. , 0. , 0. ], + [ 0. , -0.131903, -0. , -0. ], + [ 0. , -0. , -0.131903, -0. ], + [ 0. , -0. , -0. , -0.131903]]), + torch.tensor([[-5.01152195e-04, -1.48623340e-04, -0.00000000e+00, + -7.72269451e-04], + [-1.68177624e-04, 5.84544432e-05, 0.00000000e+00, + -2.87254353e-04], + [ 0.00000000e+00, 0.00000000e+00, 1.13736575e-04, + 0.00000000e+00], + [-8.73876477e-04, -2.87254353e-04, 0.00000000e+00, + -1.37888068e-03]]), + torch.tensor([[-0.01799905, -0. , -0. , 0.02771481], + [ 0. , -0.00573914, 0. , 0. ], + [ 0. , 0. , -0.00573914, 0. ], + [-0.02771481, 0. , 0. , 0.03792326]]), + torch.tensor([[-0.28569007, -0.17049112, -0. , -0.29529927], + [-0.12286996, 0.02212606, 0. , -0.16680055], + [ 0. , 0. , 0.11842841, 0. ], + [-0.212817 , -0.16680055, 0. , -0.17047861]]), + torch.tensor([[-5.01152426e-04, -1.48623419e-04, -0.00000000e+00, + 7.72269831e-04], + [-1.68177714e-04, 5.84544698e-05, 0.00000000e+00, + 2.87254505e-04], + [ 0.00000000e+00, 0.00000000e+00, 1.13736633e-04, + 0.00000000e+00], + [ 8.73876911e-04, 2.87254505e-04, 0.00000000e+00, + -1.37888135e-03]]), + torch.tensor([[-0.01003859, 0.00753062, -0. , -0.01304342], + [ 0.00762597, -0.00334142, 0. , 0.01050546], + [ 0. , 0. , 0.00272391, 0. ], + [-0.01320857, 0.01050546, 0. , -0.01547209]]), + torch.tensor([[-0.01799905, -0.02400173, -0. , 0.0138574 ], + [ 0.02400173, 0.02700766, 0. , -0.01890637], + [ 0. , 0. , -0.00573914, 0. ], + [-0.0138574 , -0.01890637, 0. , 0.00517646]]), + torch.tensor([[-2.85690159e-01, 3.40982328e-01, -0.00000000e+00, + -1.71352259e-08], + [ 2.45739961e-01, -2.66781012e-01, 0.00000000e+00, + 1.93577519e-08], + [ 0.00000000e+00, 0.00000000e+00, 1.18428459e-01, + 0.00000000e+00], + [-1.23490557e-08, 1.93577519e-08, 0.00000000e+00, + 1.18428459e-01]]), + torch.tensor([[-0.01799905, -0.02400173, -0. , -0.0138574 ], + [ 0.02400173, 0.02700766, 0. , 0.01890637], + [ 0. , 0. , -0.00573914, 0. ], + [ 0.0138574 , 0.01890637, 0. , 0.00517646]]), + torch.tensor([[-0.01003859, 0.00753062, -0. , 0.01304342], + [ 0.00762597, -0.00334142, 0. , -0.01050547], + [ 0. , 0. , 0.00272391, 0. ], + [ 0.01320857, -0.01050547, 0. , -0.01547209]]), + torch.tensor([[-5.01152433e-04, 7.43117001e-04, -0.00000000e+00, + -2.57423302e-04], + [ 8.40888461e-04, -1.26831706e-03, 0.00000000e+00, + 4.78757485e-04], + [ 0.00000000e+00, 0.00000000e+00, 1.13736635e-04, + 0.00000000e+00], + [-2.91292332e-04, 4.78757485e-04, 0.00000000e+00, + -5.21098364e-05]]), + torch.tensor([[-5.01152510e-04, 7.43117133e-04, -0.00000000e+00, + 2.57423317e-04], + [ 8.40888611e-04, -1.26831731e-03, 0.00000000e+00, + -4.78757520e-04], + [ 0.00000000e+00, 0.00000000e+00, 1.13736654e-04, + 0.00000000e+00], + [ 2.91292350e-04, -4.78757520e-04, 0.00000000e+00, + -5.21098099e-05]]), + torch.tensor([[-0.28569013, -0.17049117, -0. , 0.29529931], + [-0.12286999, 0.02212606, 0. , 0.16680059], + [ 0. , 0. , 0.11842844, 0. ], + [ 0.21281702, 0.16680059, 0. , -0.17047861]]), + torch.tensor([[-1.00385882e-02, -1.50612405e-02, -0.00000000e+00, + -3.77911810e-10], + [-1.52519358e-02, -2.15374184e-02, 0.00000000e+00, + -6.08757424e-10], + [ 0.00000000e+00, 0.00000000e+00, 2.72390854e-03, + 0.00000000e+00], + [-3.82696675e-10, -6.08757424e-10, 0.00000000e+00, + 2.72390854e-03]]), + torch.tensor([[-0.00050115, -0.00059449, -0. , -0.00051485], + [-0.00067271, -0.00077078, 0. , -0.00076601], + [ 0. , 0. , 0.00011374, 0. ], + [-0.00058258, -0.00076601, 0. , -0.00054965]]), + torch.tensor([[-0.00050115, -0.00059449, -0. , 0.00051485], + [-0.00067271, -0.00077078, 0. , 0.00076601], + [ 0. , 0. , 0.00011374, 0. ], + [ 0.00058258, 0.00076601, 0. , -0.00054965]]), + torch.tensor([[-0.04062027, 0.04496145, -0. , 0.02595851], + [-0.04496145, 0.04448625, 0. , 0.0325172 ], + [ 0. , 0. , -0.0118352 , 0. ], + [-0.02595851, 0.0325172 , 0. , 0.00693862]]), + torch.tensor([[-0.04062027, -0.04496145, -0. , 0.02595851], + [ 0.04496145, 0.04448625, 0. , -0.0325172 ], + [ 0. , 0. , -0.0118352 , 0. ], + [-0.02595851, -0.0325172 , 0. , 0.00693862]]), + torch.tensor([[-0.04062027, -0. , -0. , -0.05191701], + [ 0. , -0.0118352 , 0. , 0. ], + [ 0. , 0. , -0.0118352 , 0. ], + [ 0.05191701, 0. , 0. , 0.06326006]])] + + +overlap_blocks=[torch.tensor([[1., 0., 0., 0.], + [0., 1., 0., 0.], + [0., 0., 1., 0.], + [0., 0., 0., 1.]]), + torch.tensor([[1., 0., 0., 0.], + [0., 1., 0., 0.], + [0., 0., 1., 0.], + [0., 0., 0., 1.]]), + torch.tensor([[ 3.53079307e-04, 8.42151409e-05, -0.00000000e+00, + 4.37594663e-04], + [ 9.63794173e-05, -5.93863356e-05, 0.00000000e+00, + 1.47677688e-04], + [ 0.00000000e+00, 0.00000000e+00, -8.78069229e-05, + 0.00000000e+00], + [ 5.00802091e-04, 1.47677688e-04, 0.00000000e+00, + 6.79548777e-04]]), + torch.tensor([[ 0.01159506, -0. , -0. , -0.02087616], + [ 0. , 0.00462289, 0. , 0. ], + [ 0. , 0. , 0.00462289, 0. ], + [ 0.02087616, 0. , 0. , -0.03556381]]), + torch.tensor([[ 0.26658797, 0.16829329, -0. , 0.29149251], + [ 0.14515366, -0.02694488, 0. , 0.20319209], + [ 0. , 0. , -0.1442579 , 0. ], + [ 0.2514135 , 0.20319209, 0. , 0.20768111]]), + torch.tensor([[ 3.53079412e-04, 8.42151801e-05, -0.00000000e+00, + -4.37594850e-04], + [ 9.63794633e-05, -5.93863482e-05, 0.00000000e+00, + -1.47677772e-04], + [ 0.00000000e+00, 0.00000000e+00, -8.78069527e-05, + 0.00000000e+00], + [-5.00802311e-04, -1.47677772e-04, 0.00000000e+00, + 6.79549152e-04]]), + torch.tensor([[ 0.00672879, -0.00543813, -0. , 0.00941912], + [-0.00617136, 0.0032857 , 0. , -0.00928524], + [ 0. , 0. , -0.00207514, 0. ], + [ 0.01068911, -0.00928524, 0. , 0.01400737]]), + torch.tensor([[ 0.01159506, 0.01807928, -0. , -0.01043808], + [-0.01807928, -0.02551713, 0. , 0.01740135], + [ 0. , 0. , 0.00462289, 0. ], + [ 0.01043808, 0.01740135, 0. , -0.00542379]]), + torch.tensor([[ 2.66588063e-01, -3.36586654e-01, -0.00000000e+00, + 1.69143321e-08], + [-2.90307367e-01, 3.24994165e-01, 0.00000000e+00, + -2.35811084e-08], + [ 0.00000000e+00, 0.00000000e+00, -1.44257963e-01, + 0.00000000e+00], + [ 1.45886807e-08, -2.35811084e-08, 0.00000000e+00, + -1.44257963e-01]]), + torch.tensor([[ 0.01159506, 0.01807928, -0. , 0.01043808], + [-0.01807928, -0.02551713, 0. , -0.01740135], + [ 0. , 0. , 0.00462289, 0. ], + [-0.01043808, -0.01740135, 0. , -0.00542379]]), + torch.tensor([[ 0.00672879, -0.00543813, -0. , -0.00941913], + [-0.00617137, 0.0032857 , 0. , 0.00928524], + [ 0. , 0. , -0.00207514, 0. ], + [-0.01068912, 0.00928524, 0. , 0.01400738]]), + torch.tensor([[ 3.53079416e-04, -4.21075845e-04, -0.00000000e+00, + 1.45864964e-04], + [-4.81897254e-04, 6.22707966e-04, 0.00000000e+00, + -2.46129608e-04], + [ 0.00000000e+00, 0.00000000e+00, -8.78069537e-05, + 0.00000000e+00], + [ 1.66934119e-04, -2.46129608e-04, 0.00000000e+00, + -2.54514930e-06]]), + torch.tensor([[ 3.53079451e-04, -4.21075911e-04, -0.00000000e+00, + -1.45864969e-04], + [-4.81897331e-04, 6.22708099e-04, 0.00000000e+00, + 2.46129629e-04], + [ 0.00000000e+00, 0.00000000e+00, -8.78069636e-05, + 0.00000000e+00], + [-1.66934127e-04, 2.46129629e-04, 0.00000000e+00, + -2.54516183e-06]]), + torch.tensor([[ 0.26658803, 0.16829333, -0. , -0.29149255], + [ 0.14515369, -0.02694489, 0. , -0.20319213], + [ 0. , 0. , -0.14425794, 0. ], + [-0.25141352, -0.20319213, 0. , 0.2076811 ]]), + torch.tensor([[ 6.72878376e-03, 1.08762626e-02, -0.00000000e+00, + 2.72903688e-10], + [ 1.23427235e-02, 1.93682024e-02, 0.00000000e+00, + 5.38049339e-10], + [ 0.00000000e+00, 0.00000000e+00, -2.07513517e-03, + 0.00000000e+00], + [ 3.09699655e-10, 5.38049339e-10, 0.00000000e+00, + -2.07513517e-03]]), + torch.tensor([[ 3.53079287e-04, 3.36860504e-04, -0.00000000e+00, + 2.91729753e-04], + [ 3.85517600e-04, 3.66922346e-04, 0.00000000e+00, + 3.93807093e-04], + [ 0.00000000e+00, 0.00000000e+00, -8.78069174e-05, + 0.00000000e+00], + [ 3.33868035e-04, 3.93807093e-04, 0.00000000e+00, + 2.53240029e-04]]), + torch.tensor([[ 3.53079358e-04, 3.36860608e-04, -0.00000000e+00, + -2.91729827e-04], + [ 3.85517723e-04, 3.66922509e-04, 0.00000000e+00, + -3.93807229e-04], + [ 0.00000000e+00, 0.00000000e+00, -8.78069372e-05, + 0.00000000e+00], + [-3.33868122e-04, -3.93807229e-04, 0.00000000e+00, + 2.53240107e-04]]), + torch.tensor([[ 0.03992768, -0.05072166, -0. , -0.02928417], + [ 0.05072166, -0.05973485, 0. , -0.0418134 ], + [ 0. , 0. , 0.01268807, 0. ], + [ 0.02928417, -0.0418134 , 0. , -0.0114529 ]]), + torch.tensor([[ 0.03992768, 0.05072166, -0. , -0.02928417], + [-0.05072166, -0.05973485, 0. , 0.0418134 ], + [ 0. , 0. , 0.01268807, 0. ], + [ 0.02928417, 0.0418134 , 0. , -0.0114529 ]]), + torch.tensor([[ 0.03992768, -0. , -0. , 0.05856833], + [ 0. , 0.01268807, 0. , 0. ], + [ 0. , 0. , 0.01268807, 0. ], + [-0.05856833, 0. , 0. , -0.08387583]])] + +eigenvalues = torch.tensor([[-22.440512 , -11.348884 , -8.129092 , -8.129089 , + 5.1896396 , 10.006596 , 10.006611 , 17.140886 ], + [-21.972958 , -10.731246 , -9.714745 , -8.937796 , + 3.765793 , 11.801703 , 13.207671 , 18.52124 ], + [-20.74841 , -12.636986 , -10.125626 , -9.059458 , + 0.57406265, 13.655142 , 19.648283 , 22.865177 ], + [-19.816086 , -14.25755 , -10.590711 , -7.695636 , + -1.5068989 , 14.108515 , 23.002007 , 25.57123 ], + [-19.349743 , -13.186199 , -13.180571 , -6.7330685 , + -2.7268982 , 16.73102 , 22.523712 , 27.84579 ], + [-19.706665 , -13.371643 , -12.195641 , -7.433054 , + -1.8351332 , 16.277023 , 21.591076 , 26.85312 ], + [-20.61971 , -12.335531 , -10.980624 , -8.864242 , + 0.26381382, 15.247766 , 18.609734 , 23.863556 ], + [-21.564024 , -10.643907 , -10.181778 , -9.682335 , + 2.6233954 , 13.470726 , 14.835367 , 20.100906 ], + [-22.213211 , -11.049823 , -8.931181 , -8.5839405 , + 4.4804573 , 11.079862 , 11.544977 , 17.76801 ], + [-22.440512 , -11.348884 , -8.129092 , -8.129089 , + 5.1896396 , 10.006596 , 10.006611 , 17.140886 ]], + dtype=torch.float32) + +def test_HamilRSK(root_directory): + structname = root_directory + '/dptb/tests/data/hBN/hBN.vasp' + proj_atom_anglr_m = {"N":["s","p"],"B":["s","p"]} + proj_atom_neles = {"N":5,"B":3} + CutOff = 4 + struct = BaseStruct(atom=structname,format='vasp', + cutoff=CutOff,proj_atom_anglr_m=proj_atom_anglr_m,proj_atom_neles=proj_atom_neles) + _, _ = struct.get_bond() + hrsk = HamilEig() + hrsk.update_hs_list(struct=struct,hoppings=hoppings,onsiteEs=onsiteEs,overlaps=overlaps,onsiteSs=None) + hrsk.get_hs_blocks() + assert len(all_bonds) == len(hrsk.all_bonds) + assert (all_bonds - hrsk.all_bonds < 1e-6).all() + assert len(hamil_blocks) == len(hrsk.hamil_blocks) + assert len(overlap_blocks) == len(hrsk.overlap_blocks) + assert len(hrsk.hamil_blocks) == len(hrsk.overlap_blocks) + + for i in range(len(hamil_blocks)): + assert (np.abs(hamil_blocks[i] - hrsk.hamil_blocks[i].numpy()) < 1e-6).all() + assert (np.abs(overlap_blocks[i] - hrsk.overlap_blocks[i].numpy()) < 1e-6).all() + + snapase = struct.struct + lat = snapase.cell.get_bravais_lattice() + special_kp = lat.get_special_points() + kpath=snapase.cell.bandpath('GMKG', npoints=120) + xlist, high_sym_kpoints, labels = kpath.get_linear_kpoint_axis() + klist = kpath.kpts + + HK = hrsk.hs_block_R2k(kpoints=klist, HorS='H', time_symm=True) + SK = hrsk.hs_block_R2k(kpoints=klist, HorS='S', time_symm=True) + + hkfile = root_directory + '/dptb/tests/data/hBN_HK.pickle' + skfile = root_directory + '/dptb/tests/data/hBN_SK.pickle' + + with open(hkfile, 'rb') as f: + hk = pickle.load(f) + with open(skfile, 'rb') as f: + sk = pickle.load(f) + + assert HK.shape == SK.shape + assert HK.shape == hk.shape + assert SK.shape == sk.shape + + assert (np.abs(HK.numpy() - hk) < 1e-6).all() + assert (np.abs(SK.numpy() - sk) < 1e-6).all() + + + kpath=snapase.cell.bandpath('GMKG', npoints=10) + klist = kpath.kpts + + eigks,_ = hrsk.Eigenvalues(kpoints = klist) + + assert (np.abs(eigks - eigenvalues) < 1e-4).all() + + +def test_HamilRSK_SplitOnsite(root_directory): + structname = root_directory + '/dptb/tests/data/hBN/hBN.vasp' + proj_atom_anglr_m = {"N":["s","p"],"B":["s","p"]} + proj_atom_neles = {"N":5,"B":3} + CutOff = 4 + struct = BaseStruct(atom=structname,format='vasp', + cutoff=CutOff,proj_atom_anglr_m=proj_atom_anglr_m,proj_atom_neles=proj_atom_neles) + hrsk = HamilEig() + onsiteEs_split = [torch.tensor([-0.671363, -0.261222,-0.261222,-0.261222]), torch.tensor([-0.339811, -0.131903,-0.131903,-0.131903])] + hrsk.update_hs_list(struct=struct,hoppings=hoppings,onsiteEs=onsiteEs_split,overlaps=overlaps,onsiteSs=None) + hrsk.get_hs_blocks() + assert len(all_bonds) == len(hrsk.all_bonds) + assert (all_bonds - hrsk.all_bonds < 1e-6).all() + assert len(hamil_blocks) == len(hrsk.hamil_blocks) + assert len(overlap_blocks) == len(hrsk.overlap_blocks) + assert len(hrsk.hamil_blocks) == len(hrsk.overlap_blocks) + + for i in range(len(hamil_blocks)): + assert (np.abs(hamil_blocks[i] - hrsk.hamil_blocks[i].numpy()) < 1e-6).all() + assert (np.abs(overlap_blocks[i] - hrsk.overlap_blocks[i].numpy()) < 1e-6).all() + + +def test_HamilRSK_Strain(root_directory): + #TODO: to be added! + pass \ No newline at end of file diff --git a/dptb/tests/test_hamil_eig_sk.py b/dptb/tests/test_hamil_eig_sk_skfiles.py similarity index 100% rename from dptb/tests/test_hamil_eig_sk.py rename to dptb/tests/test_hamil_eig_sk_skfiles.py From 2adc019b5e604de57e3da530f7f9ed0b332a1c1a Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 15:17:05 +0800 Subject: [PATCH 35/63] test: update test_hamil_eig_sk_crt.py --- dptb/tests/test_hamil_eig_sk_crt.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dptb/tests/test_hamil_eig_sk_crt.py b/dptb/tests/test_hamil_eig_sk_crt.py index bdfc2c88..d19089f0 100644 --- a/dptb/tests/test_hamil_eig_sk_crt.py +++ b/dptb/tests/test_hamil_eig_sk_crt.py @@ -417,5 +417,9 @@ def test_HamilRSK_SplitOnsite(root_directory): def test_HamilRSK_Strain(root_directory): - #TODO: to be added! + #TODO: add test for HamilRSK for strain onsite mode. + pass + +def test_HamilRSK_Strain(root_directory): + #TODO: add test for HamilRSK for SOC case. pass \ No newline at end of file From 07d80625be2e9db75d4ca5b2ff1356a209e2e560 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 15:17:37 +0800 Subject: [PATCH 36/63] test: update test_hamil_eig_sk_crt.py --- dptb/tests/test_hamil_eig_sk_crt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dptb/tests/test_hamil_eig_sk_crt.py b/dptb/tests/test_hamil_eig_sk_crt.py index d19089f0..f730a205 100644 --- a/dptb/tests/test_hamil_eig_sk_crt.py +++ b/dptb/tests/test_hamil_eig_sk_crt.py @@ -420,6 +420,6 @@ def test_HamilRSK_Strain(root_directory): #TODO: add test for HamilRSK for strain onsite mode. pass -def test_HamilRSK_Strain(root_directory): +def test_HamilRSK_SOC(root_directory): #TODO: add test for HamilRSK for SOC case. pass \ No newline at end of file From edab7f826321dde1536161ab8d5c072f693cb0ab Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 17:15:37 +0800 Subject: [PATCH 37/63] example: updata NRL-TB example. --- .../{band_plot.json => band_jsonckpt.json} | 4 +- examples/NRL-TB/silicon/band_pthckpt.json | 21 ++++ .../NRL-TB/silicon/ckpt/band_jsonckpt.png | Bin 0 -> 265914 bytes examples/NRL-TB/silicon/ckpt/band_pthckpt.png | Bin 0 -> 277017 bytes .../NRL-TB/silicon/{ => ckpt}/nrl_ckpt.json | 0 examples/NRL-TB/silicon/ckpt/nrl_ckpt.pth | Bin 0 -> 9010 bytes examples/NRL-TB/silicon/data/POSCAR | 10 ++ .../NRL-TB/silicon/data/kpath.0/bandinfo.json | 6 + examples/NRL-TB/silicon/data/kpath.0/eigs.npy | Bin 0 -> 33952 bytes .../NRL-TB/silicon/data/kpath.0/kpoints.npy | Bin 0 -> 3752 bytes .../NRL-TB/silicon/data/kpath.0/xdat.traj | Bin 0 -> 408 bytes .../silicon/data/kpath_spk.0/bandinfo.json | 6 + .../NRL-TB/silicon/data/kpath_spk.0/eigs.npy | Bin 0 -> 6960 bytes .../silicon/data/kpath_spk.0/kpoints.npy | Bin 0 -> 860 bytes .../NRL-TB/silicon/data/kpath_spk.0/xdat.traj | Bin 0 -> 408 bytes examples/NRL-TB/silicon/data/silicon.vasp | 10 ++ examples/NRL-TB/silicon/plotband.ipynb | 103 +++++++++++++++++- examples/NRL-TB/silicon/run.sh | 10 +- 18 files changed, 162 insertions(+), 8 deletions(-) rename examples/NRL-TB/silicon/{band_plot.json => band_jsonckpt.json} (95%) create mode 100644 examples/NRL-TB/silicon/band_pthckpt.json create mode 100644 examples/NRL-TB/silicon/ckpt/band_jsonckpt.png create mode 100644 examples/NRL-TB/silicon/ckpt/band_pthckpt.png rename examples/NRL-TB/silicon/{ => ckpt}/nrl_ckpt.json (100%) create mode 100644 examples/NRL-TB/silicon/ckpt/nrl_ckpt.pth create mode 100644 examples/NRL-TB/silicon/data/POSCAR create mode 100644 examples/NRL-TB/silicon/data/kpath.0/bandinfo.json create mode 100644 examples/NRL-TB/silicon/data/kpath.0/eigs.npy create mode 100644 examples/NRL-TB/silicon/data/kpath.0/kpoints.npy create mode 100644 examples/NRL-TB/silicon/data/kpath.0/xdat.traj create mode 100644 examples/NRL-TB/silicon/data/kpath_spk.0/bandinfo.json create mode 100644 examples/NRL-TB/silicon/data/kpath_spk.0/eigs.npy create mode 100644 examples/NRL-TB/silicon/data/kpath_spk.0/kpoints.npy create mode 100644 examples/NRL-TB/silicon/data/kpath_spk.0/xdat.traj create mode 100644 examples/NRL-TB/silicon/data/silicon.vasp diff --git a/examples/NRL-TB/silicon/band_plot.json b/examples/NRL-TB/silicon/band_jsonckpt.json similarity index 95% rename from examples/NRL-TB/silicon/band_plot.json rename to examples/NRL-TB/silicon/band_jsonckpt.json index 949d937d..ab8f90f9 100644 --- a/examples/NRL-TB/silicon/band_plot.json +++ b/examples/NRL-TB/silicon/band_jsonckpt.json @@ -28,7 +28,7 @@ "onsite_func_lambda":1.5170852322629031 } }, - "structure":"./silicon.vasp", + "structure":"./data/silicon.vasp", "task_options": { "task": "band", "kline_type":"abacus", @@ -45,6 +45,6 @@ "E_fermi":5.78493595123291, "emin":-15, "emax":10, - "ref_band": "ref_eigs.npy" + "ref_band": "./data/kpath.0/eigs.npy" } } diff --git a/examples/NRL-TB/silicon/band_pthckpt.json b/examples/NRL-TB/silicon/band_pthckpt.json new file mode 100644 index 00000000..fb3ce394 --- /dev/null +++ b/examples/NRL-TB/silicon/band_pthckpt.json @@ -0,0 +1,21 @@ +{ + "structure":"./data/silicon.vasp", + "task_options": { + "task": "band", + "kline_type":"abacus", + "kpath":[[0.0000000000, 0.0000000000, 0.0000000000, 50], + [0.5000000000, 0.0000000000, 0.5000000000, 50], + [0.6250000000, 0.2500000000, 0.6250000000, 1], + [0.3750000000, 0.3750000000, 0.7500000000, 50], + [0.0000000000, 0.0000000000, 0.0000000000, 50], + [0.5000000000, 0.5000000000, 0.5000000000, 50], + [0.5000000000, 0.2500000000, 0.7500000000, 50], + [0.5000000000, 0.0000000000, 0.5000000000, 1 ] + ], + "klabels":["G","X","X/U","K","G","L","W","X"], + "E_fermi":6.05989933013916, + "emin":-15, + "emax":10, + "ref_band": "./data/kpath.0/eigs.npy" + } +} \ No newline at end of file diff --git a/examples/NRL-TB/silicon/ckpt/band_jsonckpt.png b/examples/NRL-TB/silicon/ckpt/band_jsonckpt.png new file mode 100644 index 0000000000000000000000000000000000000000..ea581bec963fb441af4aa26d6c61e1d60a792e67 GIT binary patch literal 265914 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

))vR8W|n!4qx0x82mGEa5Ii zMMndcu2VN{r_p<#{rO0AC!>T?PsMm9(|hjNL@E`Z#08_@B#&ku2PQEF*MJQf@Q8($ z9W4OlLY|Rn2QIiIXp)~-d+5zc@ZN zR+o&L*NMg>{*5M~=dd}`;BkIDnORuKN=IR#^XFr9^mbvWXArSX*=sOF_j2v1s}lnN zq8;*1Ux)BH6@b7He&FPDV2;4fL?==K9C_r}hkzSCuajBw{V$q@c3U2Yt-2)^U2$96 z+lOGw*~B@h60L(n_}dsEw?zgB`+Gl8?DU4j zp9khz%vC$Ma5WyQnv;CXhPZAEljmpL$gPbi;U&S+fnmN$TTJ*S0hF|*HK*1vR~hNt zg01*Lw6@c*xvJH3oTK-I1Xpu&yMc(DvuDB;@VfHX5&XoDRc>dm^Ixp|r^?2|!|Uqn zGeRX{H}*6kN^Y8kwA*Q?A1y5{kZ}Fcj3e&uQ@LEh4=x?+ZxT%|jX($Suv~#Es`17@ zTX5Y^1VV-OP;jJ_rak`27wXP7+YouJF#+G}v>XY3S)w<`8~lg~J;M`3Tt%N6YwPd-0c1nXwhf~vi^@74fz z2^|0VhSG^+O-SN%I%39j(`2!b<0bm(YR_A#i zpPuEaC&v=e&Mz*`?z+J)2PFwS#fqvQ6>0mJYdg$)Ga#z{EtIDj8IU!O|L+c~|I=!s z7)C%jHKGQRW+j%C@$Dv#mAYT`YRw159lNed!u#u<9}NOiO33hG3JE4t`5Z3tLQ1A; zpk2Sev`q2MdX(!~flgv^-q){T%%01#fmVm4LrX2}%|NCLFytv;UkEo<~mU|UWKV2L8gdXIzEUP=Ss(a1{ z2o1qfiV>$_Bj(xBV9nNuWdQ)KY+d!Y_`n#>TV~V=2rB#Zt(E`^KS>r!ggC+HqZ6)+ zq)->O{tCE#Y#8&#PD2J0lP^&oPAd>P!VLx_Lz$xQ!^n~;^yHoz)yO5teg6CzIc}k8 zx$F?TOZdJa7gH5LKG43(q5Wcq;2N8R9Dvo*x=l3bj}V{e2)r)ekhnC6K3nN` zCG+?zy8dIMy4X7TY$sE};hhg0#K7;NvSwgnT33m-5?zu9-42xM--=j%XkuZt1bZEU z`Q6r#Vd$;UCNSf;PZm0B$K&>Nwy(_!&{({?cj1seti!Li6B8{Fq0lq-jJuhroUC?n zZkZ-J-Ua1WT5j%>6S+OGKn0A6(tLETC9)x18^;faRrr>#!+);El*=|7OfYc+p36{{ zmzSHj$IGkDWQ!6Mfq~UA%8Mj;u-ZUf?lwF{6NZznKP3ID(XJizh=9K^6-zUXT5mmAV)}1{RI}k#mX4gdO%mV9x%n|plyaLdN zWJjNAXpAgw8)NvA@H^$|UP)Vo+0OOkG=6~X#@EwU-82qg_j%u_vtu=BBUmq+#R9W^ zM27)k)+Z+?LB}I&P8|TUGgbZ-gRwi^@edsDNE)WmeMJv)RQ)BKjkj;YD|u{C_~aNRmO zIwK_u3kyQY8&6kd62-vF+-p+2+gP6`UdWRV=>2~nKM0)m#8SdkXE|tS{ELd%at@U^ zhy*`#3R8xopP%j5M3%r&U<{m16)wM&eAvsqPgiwiMxhGRDR6!zNrf(E8?Y}XDou07 z%FZ9Q;Iz^uQ-SG0?e3paCgPXn<%rcf9)ir)c`JW27dEP)U_ zl)WX1&BP8FhV|2S$(=OlbyINWLl7H`>kU5nM^N=r8GjwGBK-qe=icICYiPbmXJEqB z6Hs$Qp9QDJziwIYudn}Y=?EiFLciDg1jrP_eZAZtB1SI?tkOv@_fP(Gm@KNQ@J`Zt zeQQpc*6$k(JcW|~^9aFTSX^#q|6Cd?w}-*oGZsAQ8)0ZZq6kAZf!Chr{AAm8E?i1} zxkyUiE|ThtZl~!P8PYfZ=TCj>CymGFO~PllY9_&SSg19ET6U<|{I;C{j|H2LDj=>? z-sk(?hj2$h*r?sGRyx@Ml@o8)3Kcp{=&%G|cL1YjC=_mRXQh(Cj`I#azVi=-3}ftu zhK3niNgOn37J?_E&z?VzDO@NFQ_moNE|gp#wGjaK1MC0Xk9wbXC=S-}@TSZfEI`FH z1FzJK3_s!X!%mnZ*+09T@IzeR^=-r1Jzit9sts>**BUDsW_+>baR=zxGGI0y3j$zRkt4UZChgBB@*nEhf z`yPb(v0|dgMA-3=eE9hBMeD;-#ivg>y6W+e(^o(2z4(0yL4OO41k9L0M(kfN3bTZN z#yNl#D*UzwUU(5$9v~cC9ukP@!jph5hTU=HDLAkDG|lqTbv{Hs?7F|~Stw}_pk9I} zC6?cr36juEKn)^ry3-4!RpRFAJ};>B0T79^^_V4wsc-10ZA~I{gjmg%I7hk}#u1QY z`e*x)jgrugK0m^Cy}BM%A8PW*O0>)3f60S06M_?W10Zx z8N6J-Ij%kfE_#n4bV85__Ae5SEE+iAC*OR4_n3p3vFXM{mAUK{fcF56MgAKwNPqwS z9Rt6&VN=Lj^dbODaC;7jUb=oulL}pcQe(bqe_|FM%;}O*8%i3Q%vL`+cuSgOkBC<0 zngpa}h2?LGiF^GKa#r`2kn-4l>Rgl+1W_F{fP;(MH_;Hh11#CUdrh|21U%8b1Uz_w zqouUUqm>*KUaO0C0xkCF$SuiZO9m*n;sRt+s;W@ALiGjsM^9g$I0cS~s_M)p57_0; zwa_FBq{I(ofG@~)*CXsg(@ru6ZK**=_;%s*wxhtN*#Sdv6I@8~Co=&3wTNo?h#Sw+WPh7p@Hkg#_8z8SR#c zm_`-8fV4PsqWAdBCLjQyIokT?A{zZ{`e;OLY?y9m?T4D;V3ZRKF9Oocv*x1($ z!gLE;vMbb3KoF_f4#w$J|i#pV6Ck^Ig3>0y6?~CCE154WU zNjz6D^6vl*dEWz=c}MnEML0n8cPp)IZB3y>suCKEu$dq(i6fc`%C^}PC@l=!%)G-z&i{u z_B-7hL+0je678R|fN#LfjjufjQRKJ9pmC%)!-m0;;zm z0jidkt0GwHODWKPeztaB`I7mr!2ntks4iVLs`evF0Ptckw9ibLiZxBT+!Nhpdc(`a zeN13N;Gd&6b3kNZ?N zA2v;vgTY77R&HaXB$@jk*6O4Fg1se@{c&gAkrD;Z6_r!YUn(7K`O{V(0S!;!^LDO7(xmJtbKR)AKxFoQ2#+CBjYI8?v`v) zl0_(OZEM>!yNQE|#xA6gv0t}8;m&OB>Y;F(P&t$p(?^=BC(Tgqzt1A|9Fu43EB!f$ zcOU>GfMcj}xZoarjG?@!a`EJ^!F4;psRacBm9?u<$vk)6lrvI%uYDif0)$L+6qqRx zoKSi`EuUz&6p!f)?vk1E{15r)^|;k# zRd$BEUv&m&8s2w1Rw+zc{&TW7e#HvPhY~z9$t@5zz21QVG^0*T&eCM>vqPx-X|2sm zSjwRF*aXzyZrpJYluzC1O^ASuL0$574-7)-S0pXaAx; z3RqkVcv9P)MB@H;N)+JTyxhUQ!w-zD1Le1M6CkVJmxE9u7macyfb;6^Y9P-6i#&&%Q(<4!za-#YGVoRFTRK+S2m5;AVH zh~OZTM+2p7@^$`kpeiUvLoq3lbY^=f%)r2~8vP<*0TsETF7|~jM|RD=`IoyZF43*V zoQ97DbiG+oe1@Ot?>2eR1G$Z!GVGwzGqDpu8VC0=I9s|o+BNuWi-xTTbyW-`%?<3c z;VuI~XW!x2p*wTs^HG{*8`Z}>Mbwz}Kl9DA z0cJ>VPia9y3Zr>4CBbU!|6?55a3dphQl`gD6VPk}< zQeJDcPx%&B+)KyNa>{^2_%!uUW>Qk0U&-*z^G@7F2xW5we73u47 zV~#oTPb`?6SX(ch-7U^|;7~(ON!0L8vO7&lQI!Q#5ifs$BcBCxCPMs|31u#=xHVTD z*V|Y1GVfbuzKzQHj0Pv+qRY?Q@l;qpC|{qe&Uf%QKch*t&#L7_; zi{0ch_uQ2<$VftZNk*N@7?7)79%udt*~D641BNvBP(vQ{VLc~Mgw~btM-R3$43-#> z@;mHgKc&lc_L3qdiUj*o^LQ5pS>`1Ie9W!ddjD?f>%)->^@6%o8&RRNCtdz-9}Dlt z;iHS~!y31(+?4Dou`H;%3%UdmN+LI;c&pme=mF{gE(Qh$nwfZ=9U^K4!Ab7Iql?_x z+=_S;wDfXuci29yCaV*nMoIkp+rP3>0Pelhk8us{?)ZIF`!*9l6TnGAL)aZi)ADZS zeMYVN{Pu-E7Hf7&_;VG?_2&sBoFOW`b{2elWCQHcm;Cdm#p`SciZ{j}$l&_rW(cSF zv6!6fFqZ4MYS%Pdc3FYZ?=nGzZ_+(Yj%?cE(Y0b85{`0hlD1YuT`wVv#mc(HZAW4f zu2vjsrj(84N}3nKa=l^3ym`6d6gyG>dk{W)z;XoB)Ock3iH0~yGmeopW!G2RkopH` z4|2kj6b!mQZel=3`2tTW5cx@IdQyK<*$)ha+7g93HrUB0H2!#JN^x!sebCmmzN z&9Us)%HMC@PIY}vu@jVG4uUgb>-a8vD6{~fM?g_=fGuUCnSjg>{S_!ZW;awJ#RU%o z2zOA_{uezaxdz@8DIFKD3W%F*Wjrxv+(aYNQVOu3kf`>#LBSqwT-iEv>Sy(M&1&+s}aOSfj9 z@Wj8)lB{}#svf@KAX67cwaRL`Xn#lie!?wuyR&Y?OTJcIR}#NJo@D~7K+~H}e)amR z?pHk-boBV!fUx{v zJ4g3vhVJ+JPk4sStRvlBlz`W7en=3GUbsI=Q{u{=Cwxk{J{&z&er#ivCY4Fb438-6 zJC9WVX_B73>i*vj>CRQ?ke)@R!6*it>*O;d0jYkmnCQIcs_yy!a=FF_2Cb~EB?cTZ zID=o@yy=pv^q_k8ZoBs>@kpWJQpz4#DC`63m+OZ9+6jo+nG>1vp2GIYXIGYPSRU?VO{&;I!X>0@^pl3i<#j zR%SNK?%+A{kbtE}agbc;D5wySHtKx?3@ZQu*H{FYL_WE3>OVuJf2mvBG{N;Oc2f7} zuKCQNjo5K;hfhv~(BL-Y(@GbKhwxwfUbR@;mHwhki*)<%uRgg*UUinA-Gn&bsdKM{ zW1>)hFEk`?3|sypXVTT*M$x__uyEcQakY@ZLYox+q|}_kR$_j_*;l_yp$&T){58{S+QukdR-NTb>=(_1ZIc=|2c&`Pwh$?cl{wOt8oH9J5 zhucleu6TQt;@0Eb~#JO6AS+>eSI#3xuO@ z=8e9y9dE32A*pF?Aq$NTZjdN0)2bpg*QjSuV-6K|`Ag9$d@kU=zbAQiXvLo+TnkIeT7mfB_zvFa z((^46GVdD`19v}2Q$1v7-Bi(xpu#JsRCy`}+ja_VRnEs)THF8%hToeaiG8<7zgzN^ zZ}J4{Q#}ZAx+=lHFL%TAF|IUj#GyK~jGju^A1otVH?(v%FM*f#?A-&;SWxn=?><&( z@q2x_DSCh=_tmmYm7+uhExHu^iE-Vb75$NjqQlIYCi#M@{s5O6jji2k0$M|-;{*i% zLi&n_i`=reK6ga7*+Z=o?+-#Q)EjqMJdbwBghP>QMPG(H+xOv%)6xezmFH!4_YhLY zcX1gU-z1eWn=O1Ms-CW};;OQ;p$a_~hs32uIp6bLW`m6y1&<9KX>*GnYSqtQzkiIs zav5uWVJkG?ws}kI_myB11GLBOe(1=-0X3E)AQqQ_nJdy1v6sXl@FwI{%>P3>;$g|= zwX^Dn#iiK;rb9&L6M7trT}4#0+lOEI|5Tknh@p!8 z+AG>MUsqsW+=463Hajvxa0{!~rqq#9{~9KhR-9x=cB*3soia*>A7dIn$=uz8uyJ0V zob2ZEKWu+gGP}qyYJsvO=(%ZoP7V_g5|3>;uJdW^AikG)ykt_n{8#)U@(p_(|HOr~ zcNH#^2FDuJOaCVMK5QlUI9(AJ<)?^_Ku2GrWQUCvl~Jk6B5|!BtD)Jtm6`G5+(@kF z_OVG(O3!P&1i|8`&?|q~B9h2YU(kf9R~Jgniu`@v1E!1pl;UPk+~x3-6Av4xTJADw zH3JeW{4)*LcUmFBSc^SlHm*C|Q!k4?Wl%S>%8jmYL}N)mOqmO_v7~f6AW!oP9pjwt zZJJkv9_?ZC`Z`~!(8T5bx$kz_;0b?;L9@8DH3g_o{Xuk_9mxJ>nl%*OWWb=PeuEq2W`TB~EWl*L263sQv@Nhn~j;&;p5x?`cEcI3I>xB;e z9aABn<9c$*b}DO+_Z- zFOGIG+Xe&Hse?sjg(y9m2o;+vaf>Kj_4+fTrME{bJ`RDh?|6Uzpfd3O?510DXD1B_ z*6jdsz70x2s zC@}Te$t*!L_Q}b@u5T__GS+nohaHPFwR_D(R{tKc1pW`yrg=_xpICqwKFVHG!uB`i52#*O8iS7Z2PPCMQ{w7S!sr)bFa}hAV zl3)6Mj&pFj(Y>;o5+5Yrz|#D_soZ2kD1(z@YmmK@V$RNJjGI%lk0nUQbQM`bV!AN= zg~?##GqxQ`3zVc2mxQjsJL23{R3)DLOP*Qa#1=vQ@}+%qi<|<9BF6i#!3+)0_^?I~ zUI48+&Fa434wLuK&!a}WdV(k#O@pq0SX?_EcdT>C;hiRUJDW92rMU%n|8)-|8vlcgrG zma#P?=ENA?9gK88-My4`^QQ0FA$@o01XW4ZT|Sf{u$!YVa23zL zzAe9CG4+u@&(!W$uRqW8%NCQ!jBSCe3vDf5V`PM5+(U}wkt}6Z)qjK}(C~KW=^!oF zkseI*ykS<4xdUG=`5Bc)y3b3&rl&ljdx~!zDjec;@U_2~u2;g>h+qiQr?8eHIe)m$ zyD`{syLl$vlkH*QpktNVMKN}DS{!7B)BDH30(?eeR|*1-S;}dahFYiJ_w^e$#$-ep zK9@~OY0|Z z!_(7!RVL!yu(f!Ce30*}B>kTQsbX9~WOB95;X|)L_HvsnzIWMZAy=Kn@@`?CraAa? z?Ck9Y9b254Xn5@ydQ2YLewdlv#?pMjnlx(jcGN~fP4zxRl)E%wq{dq+j*L)H^I#Ch z$xsWJ^g8}Nd6>|D_t%SalwzG1sE4KFBgW;gKy~8)*yEK}ZBz-lFSSbB2kbSuZuy@Xsl9yf{MuW3pi z&VGx7+26vOm_odhKBsN$d{-dwKAywTcdB1ZLSV$A1>U8A;XTpT3K`@Ic3R5C?g z3nSfWSECv49kj9Y(9<^`AGGrbpG+6OT7)u}uQB?oZ*}HpV%&YO1y+yB`v-dK;;(08 zAws`uW?_+9UOv2HcAA3iY4%Er8ofU9&+g2RW1E+dN<1)mp49bYHN3)%>z=cYUXbOD zt>yhm)A?TkeMcUI`%w8K7Qm^D-(`?(BSl#C*|Q>xe)>xcmH@ik0W9`usLB9GV0;{b z=MF6;aeNr(P1Rl&zE$%$-KrKY&SA;WS|LaJkgXQvxhyX$lhW>2_&|nn%jLvbd{Wca zI&v<=L_Wn1UE*0+KhI$}En3(5%ajr8Ft(By1H=Ab0VEE*mviUG0es|1?C>HlweF+! zm^@|5t8ob%3K%DINSIBag+W>hC&mkCm*VaRTEYmK6A!tUVn3nq7+ds znAcMS@XvPc@$}< z>^}5Zoup(Ysmn0!Ao+L`rG>@r%HZ0>BX#}D1y6V;$|peG1ruar7*l6X-9a|bOn#6c zOGu!?@D!BWK*|#b5N>0i{l0K=c;016a>2(kk5B>!3O@|9e0`I8DR3-YaM_8PTkN+a z9b?^#z2TuwA>yWC6{VsvMuFIwqW=gZBkk5iq@zGKsmldHDCZfz}_Wk38dEH1( zDuSAd3KR1R7R`Aa%j=SkPhg4$#PwNllFH8JGoOtfx2fFsN{mWA4FV}A;XX(aQ+LCq z2w!Xrx@$T2v%0cT11(~yLVjnh)LeH@pj$5fQ?#gbRe9`Gk16_@F(D{qTWSoIG_D;@ zpw+1CtNr+Lcu{7FnLH9=sQ|PJh*(0Fhteg~mD;Yrfja;ysOhOY(8NxFYq3$vicz;L zRy6wMA+uEYo!{IxM&j=Lhnp^q^QO3;miXeRl)C%cV)Xc1A0$dxntr49uYX-XO)(^~ zhwzJ7DkbjU0_wFGlJrT!P}=^jitpi z1EJThIAUUsi*Vywh|_aXsf$G!LG{I!q`T+x;%P$g?4OW=Un9{d_f8s#ivKCSHkYBs@vv z`v~%xcYgBlbk%+3HbP1B)Bk(A;hhX#)63zMEmX5f?(5S5G)Z6A$Er`ZT46

XUJvH?m`zc;Z6`^97{jr%$;~lwse3c6(Ab>&& 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%0AR`7U{ocWO?$U*m< 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 zÁ!FJJ09&PwB)uPwA7T1X+76>^fJlrmV_q8*1PhSycEID;b!f(p^r_cC2H9qst z{p2AOj`DpO>aOz}bHjc-+7~}p<%yqsC6PK_;H(PXQja?D*Eeph{#-ZE-$1QpYE2Pg zGF3E2>LaR=??g6sD;@T{nuQt3YFTBgg;8MF7=y78-__rA-^7l^h+SMMVNrJovC&Bc z+QUQQldFsZM^Z37L^`)*kSn|h=IbsU1J#m92a+G9Ba7?a=YMML=N|1a^{M~RuMFXe zwN)bG$@k@Usulkfa8`=$bjyCQn3{9RhK(D`%bnHvPsfUeuFWJ5W9a&?1lQk|pzYL7 zx?YpnHz3a@ySe9iEvKAhhgPLyzTLL|3uB3@ZmR&qAtG4dPYP42B@viDN4x<^(gK&L z0+H8!krG9BZJbM@m@wh#muv59^RrQED%%*_inndnOy#o3h#D3vqv(C4?7Q0zhwnKB zY`eMNn)o!|Y^B4#l5>~x;oEyDo(l;E4|TbJkzt?DmF4AIj7jYwI1UcXrnjrVe09-q zY^*WEq@QAZOU9%sbCdCQ3@r`1vK#9xnW2*t2NQfPKuM{7tQ;QETbZ%Bl7RqKDlo%%yz)4;C8cQ7{} z?+=TPM$-OyKrj)4V9v|NXz;_unBho5`n8F;w69Mvo;bzwf+A6BsSd>EB8Jc2;7mR^ z`(ZqWn@8IVmcf=o0yn|!h&|Em&9b}ogstYn>`Zvzf=1ydFS_C1yloHTQifJaWxjp5 z#aJ<&h(7qmTlR#|Dygm=dmrMgDV{@@26P|4zsbPE6MN>*wn;IsfZAEj8>0dL4go}o z0!RGb7UD-DM}*S;MC{s`^CQJh?|WLlF`UVL|33a&O-wWlg@@&>nr{(eV2ZIZi@ya@S-3_;wG``};yvjXOW0qzmMtI-U#>r2PK9xzi zyT%Nm3=5PBVjalTRGz^A9-jPYJM77i2h3^v{0hJ%*v$~wd&#qN_4Yh_+SYTVq`K~1 z3!!%QiWl-SvadfX;DcOd7r-@iol{p*)Lvup;9;e7RfRQGk73lol#Gk2`Bip8D%NOD zy)TsO+M*hN!f4W(iTKo1+V>BojwUxn4bqLNit{$vWQ0MH?9{^nW3KvFM#8b;IyVe^g1?2dPJ$mKJd-2f^gp8w*3;=i&+(vBzMbkMeyV zKtcMXdR;Eq-VBV4s`Tn5U>$HW4gK(q-b|4i1qOB#y~E(O_{cTv`Cq&6Nl=hlohBk8 z0_`MCgPs+jWPwhw-jpVH?r?7nkA0Ke3_g;#q5>bp#JY#CHl}qq%>*;MQ@#x25;C2H@oO z@e{G8fHy%StnDyhICzgcl1%|$mOUBAw@D=Xt3g=eH5S=hQZ_f=1XacHyw~7G2W`orK$Q)u@!X3sJ`F5~9y(SRB=VR`mlCdT~1TU`+gUFya2 zD8Pw-0<6rQYVxH~7v_WI>m_pT)TzQMCQs+K{JDB*6*x#pRsM#+k`GZdCvQJ=JvTbT z^hoz~bUraeRi#G7U3>A!k0^9Uri6XyyOM3#t-7a;3|P>bX*X_Q@ue4k&A{INsZC>c zB6oS8&&vghlu2P z$V)8ld5~8;3!z1%X`lSuOTN}ZX``t}N%?D)sAl5*gfP0}|3r(-^}A~-L+4LI54w-2 z2WaPD7&{(4hE&LxU+kJ$B%cn3DH$Km_8Q$-9egwg*3rq$(|lBDj=s%|q2abzIf+E-zl> z)?qd_i}_>^@`PekQQMyLm$RF*b`xZGzIYl(5kEE*4`O=!_5T-?SD5h1$+7(Y{TnGP zy!PW3?cjXN`+Y(fCq)@LMwTR;?Qt#+?p5;rxWl>jB14aJI^>(TRbJx+Qwh?D1B@Zz zre&u9Fd-lQ#OIj6)B~;DP{Np!o=yn)vOghzExranNw*RC-US(=OY-c)`O(I&Ii4D^ z--MNe#xk20434dw8+feDTtn{VRGnPKUzTfk*CYzpCdgE%xq9KlbyBnZzHdbp$tfSL za{s<;T1M25Pi(%Ig@R$ViU(n}zUh{moPqwh_>UhAgM|olfU5~00OsA;Ep#Oyk;oQ^ ztNMNME<4{sZAWpo9{*nIc{zn9Q#K?v$Xl2Y{!)7SR{wkD?b21A502bC`OWbm=zJth ziuvZj-eu&oQhJkTa1ep$PbqK;+EA2z>EhzUi56+gdYt(6$?0)+@9|psH5LiBk>%w9 zVqEhmTXpo>$5lESw6CC%QC{Qn>41ZoyFFr4LmYXe5mETq1fb?4Zv@4tscpS0$C%>GbggM^m z19O%zS;&W&yT!=EqfHDhM!oe6%+Fhp zPZzOZj7;ZCclVJ(v>2Jie63xb8-Gc0-Mk9nv>eS`Bbg%M!$C>j6Zv&cC9_S|?tXN1 zTX#mB$3bDt0EcXJ+dJ*TSC$6Z+)M@EyzTdnk9v%dRd1{r^&a+7XU3(-W1C(74>AvP zUBtye+NIBNo9GOV&40)oftY#7I)34pc{jmY&6{Yc&c*Fq+~tba#I<8tJ1JEIWUkU3 zmyQWx6e^7vJazsB!7S`P%g8A3o0gZYbK3~u#V7Ep`JnbgKL|HsFj@<7I{UVszJ5Y< zG!F`b$J|^5NDiVFS`-2@3%iqF$;Ved)2KEjmGd-C$Eh46GfU6i)n+!mgKOx*-emMd z*`W@vX<2<8LP9LghWtU6o`5i8T<{}}f)JCk2p}c$X}Qa?fyZ%goGz)ThF*m7Kw2P;@8`jm=CG&*;rff)c{wsvPuUV*7AQl(I0Q0XQ|r6d zWhEod%n2IE`|mJ;cjVdOlfm?;InM?g=&o*7jiJ#@`n;HN%0}G#g1g|82jX*IAElgk z5u$f+P|n=0#QI%2@Vh1b%V^DZI~9L(Rzv+PL1H>*JO%qjr+9X%S%I$en;I9s}`v)TeoywlT;}+R^IisIq~ORvvv#jf6x4F zsW0qR)xaC)KvQ*R?$#?h9UBm-#Q>f_h{$+_q~BzK%>DO`D8th52^-9Oiwb##e4WLONgvx1>8^)jKMKHi=J5C9X!x zuzQG0FnMg1!oR=C%I*AJx;uJ$dX!M~j)o)v0`cClMoE8%Bb!obcOxogWTdC^SqN+O z$z5yi7sBqmPdjtvud1uNGcc$~+aSD{tcceemQ?dbyq_wjm|v`_yV$YO_W83Nm<3-2 zj+6djC#jcrDe~$jl6@A53E3(`->pY>FGP|nr(68Uo?7?*c2AW^h+gaMfVDr#PbN!5 z-n}=s>F>tuHRR4jy@~q!fEAU&0lVnx+}84rx936-TWXm@cu9bBYe=FzDT4;_ajcF}NsBTOni|{94HjIaQU8+&Sle?8 zS^9>SYCe{Kc)UgB)UU|2PbT_Jd|jK5k+yLB%zqVxpve!;G}l;Iqy;24ztLo_u9&+x zk+kVl<7=hn8Vk+4%Z5HPrSCHSwq%7r9l_)+Ppl8t!3nHGY^a6XYw6KT7n!q{oe-F| zRrM3Pksd{F`qGMxQ1AQ#oEP!bmmUTaNZmUv!3DW#O%`%ODETneIQFS}czE;(uK6)p z$D`FEl_y_d1Jj7%;qlT}4pDf!V$GPNII&!g6smQ=b{z<^$L2RBV z)K&z2H*aLed-^o_?oZ^4^}?St^tf}1igqt{h(#}--1;Wg%shF+h&#HqAR`7c_fl}0 z@>`swx?Yix6ci*9USkowbg4(qn|$K30GEI0`3&|uQV3->N&5X>(Fn&jd_q)AG;O#> zf!uA;u3oXIpzoIBGC>qmnw+f`rc=xNR}bFJO`1k_$;^iDX5G$xBuDo$KE6truikg- zbNxe;*(sDzWm)eRT=#u{H4!al0Aqw~N{LXmKFc9CH>{hP-p>72vctAL#cP@0Ac?d8 zCOw1zde{(PKkX$u1%%YJQ&lWQh3p zW`o z!-D{ihE7A>Lo&e6?smY4GyrOdxHg2^!_ntiU^?_Ff+$5yK6z|(htWQ{BZz+1E!X&fLF)c0427I$egLz;%O0u#{Sj&Cmgyy%yLGGC;visAN zT2PiFRc6?~ek#_;V6Hn}%J}P|a?1S(ORHjRk%Cd^jCT{)!L935_Hw#8esc2ThB zFl?NrG)q59^0GL)&wfWm)|-v7fJQ*_tik;UB$|&1?%=Cn2AxosE+qtWtL8e`wowit zlCAlEyn4q$Wm#0@9(1CZHG6`1JBev>JXJ2rv}m+U{U@XUS@)h{xuBqIT6V%TDM1q{ z!N)#FBw}%CDQZ;&7C;+`U4RahJ^xiV7m+NbL&Or*`MJp&BHmM{Y+YWcG9su3mccR( zvyhKxXT_5i(A;?Nz@XH4&54=@eFb?|5}Q7~`09r?_{=akUvtME!99V2!7_n<&lo~K z56?=lJc;zrWL=T)JPDF2WH!i7NnH8qC3RW=54?gQ3Aha?eLw*utQAvTU0p?}Q6Npm zH(73SbNt7vCnY29j0~;6kEqqT`L;do-F#RPSCC+6ZMvYoI@x+I{f>m8w1(r zDZa;&%ARuxU3lciUHdL%oh*9)hXYycfX}b^1QX^{70f}KTv^T(Pltxk_go__%65p> zVIR`%LaIIFg+Qvx1Q^|xdH0re?}M=X><_EvrcvCi6#HfsvWG2U-E=b$S&;vjy z9%*%~Qzz21JNZuWB7UK5~B%99*yd{L9YD>e27vzzr7_6%|Xud@xh~ zcwnaX>qoPhGkU+|m=L|t9jTePWxLT4ey2lSo3yDrv9te1U`fDrmtevnftO%lJib)gk^_5 znm@}>;E;XzaL!Bqs2j3||3;AB`wH;6k=X2F;FS_RU62-oB;Fgk0+X_ov^0FKfb7i2 ziS^9oBRsDgScuYcDmkAPaQD&*Ytt}1cu?|=15s=>Mw?k{J~7C}lb=b8 zqL~yl%FUJ}nA!Kgb@zuBGxXA=7EvZ!FcPlmx({y{TYV&NqRoflRp4bOy02XyAoKiGXk~D~Mg=k!%9dBE zY*fZIztGaq@Y7<~yTl-yc{aLdRDpvEm;~eU5?5J0xO)d=v&GMy=P!>P~AMBQe*=yUu`;|$Wm#Dox0HDT@+q^p$1v^pD<)`W2ADNU9t-E^aRx_5a+>8s-lzd9C5Npm+eutaugFjpiPH0l%G zbYR)MI3t==@1%1>J1pqOHJeSY@`+}4%3?ZPjMtyzP6-ARGO)C%6Y)G|8t6Ac%;jUe zjV~FGp59FU*!pz0`cw5L7Xn7TAVh+vaD7teN=q=s`MA54&A15SeDGRqC7!qQ-t~nE zi7`FR%6i;~`}~T{xkorJ-k*MO-p4g#Cdvul!J+QdWBcyhGa~9iml=iy^xFn*sig}4 zo_+Iy8Vf`Mk3RR(ovKPQA?n-nfUG0=&iM0VbfX;NU*slQH)e&V=S_bDu?La{N)y9G zwPP_7%;d*p-kkTf3A9q%KE|ZHwqiS+Cn_8<;~IX9a<%8x<)HdV$*z&wM~LGY)$Mb= zBjQBCb36BeEY3r%d%3K#)S+Bl1TCMR+y6NT^@dljM8hO0T&Ld$i{6bM!wVrU16*v( z3e574D9i-(c@`G63e8sZPXg~_gR|T(jwKs;tEfcu#Cqt#oJu_vhr-pmTa4Mj#O%>1815pQ)p5RzyJ>}}FYl9ru>&SNm083FPu9a%EBPY+v(U29}F zynVKi@C@HgJiampLp8j@eShDZH@QbfTW>zM@wy|eV3nklRBBjCeh^KDpq64S(M*c; zU%TQ2gcM0$-o>CbCj&P)!r}pYn^^7u4ADngGNh{6Z!1Tb5hD)vUy7G)ThlNzxPteK1dmyKggxV zzlh+# zImat%tbI8{{#rF(JGe*;;(iGb&ryz!gj`52N)G&;60`wRVu-ArZ)1UI^ydgZEocfQ zLH73aeEZlJj#}FCtpa)|rkaLVqiXx2N56CJ=h`u=ZGD=J_fnoclH_^p3b53*SGwelJzcWF&Xn1zkT~HCxb|(EF{-N zjd}z#AUQKKUxi0){v-+E)|JxN(UFKrSK+tH7P+GpjMTICo~-(s}DVZ!MZ`$|@(+(kT*2Iy-=TQspL}nayfhV}&V0H)y!*H-l$1_0( zE|6mf9DUNJrdM3UPdyn~Vxp$2-z|aeASt3Ht85@-;h+L^-g@~Z)%U;yE@|`g(}c6- z6tmH(&k_|}6vPO9yh;cvVv%YuS%?%HCb?Ydp-3ZR#k7Zua?9uO6L z**)jtYs5dd zzXB)9x9sWM1$V^bFrxVjzQm7Xf8^#CCW+}k5p#1ib@d`#n?1eZc-^<1IgQ{$fFe*Q z2Yj8;XJ)12p>%9otQPoGjQAmG88?Ap8O_~l;ez>LCot&$l3W^xt$1SNU#bi?OC8CW zcbu#Fxp&-IeDRRYqPPh5a?I2m5(|3bdq=9@HEtvYw|G6$3;4BDNQal@*AYRE)2F57 zq^lh&&0qAz_F{+yJyhNGlj>#fpH1c!1&@*PWpOdwr4zt)?#e9Z)8nI%Bl%ez-XhC@|ble)y>E99f4?bUsm3)(7X5$54M0!$39GAnoFjr|o%#+P$mpc%}nwIsKc~)M?OGOKfr>0^ca^M#zFsqDW@f?uEoIqJ@SD zN)Hw4p4=)bMWM33;vKDFM-J7(YELV>eJWo^K2eLxeOeaw@;OPVs|>l77{1r{C#AyK z9C-w}H{&EoNfCybVb!>4r|HrjJP=7LPY=E<*I=;Q8#?OP&Q$T^mAo)x%NNy4mo6Rn zUDcO(pbPPWc?Ba73)j8Q#~?j#owI1Uh|Vpl#8PEPoLP|T__N=Bk3#-`wo#VudrpCH z@3G)d??y!~S?8LGWKW?A-6kl=1L03kFS64v1Q`o42xKFV=hqCc;}%?B>mW8@CKsV9 zpn*{9ofIAYjT;6J`wTMskdqB`N^28%byEqGljaB!9E$=yB8O-_8cjsQH=F@n4w)%%RK1$#6xIR(hri+Xw*4v>R%PYXfw#5Mp0 z4YK)Qk=lXEvh39crnA)ev#$xGF{Qw@Jcpkp!o<{R+R6sX5P2eWZl8sS^=D}*rlc$U z#!&J(58UuVJ}7Wbg7CRuw*pRM1Oz zkQyFUt(wYX!oPN!UyY2#)XI~@IF)>2Ieg7i)w=h6ODBuEzMs zju9&^oEjv|qKtJP40ngGbx29I zT$8jtN#@>sVP@0nQ+zS~OFF{QkQPXh6SpFfvCMuGMbwS5&iCM9$ZMwZ8Jn6C-A6Aq zOn=Yake>Z~8#N3l<8PXrF`L&@1VYY43#DTGFJ-R5=J}NmSw2GxI4Bzb8Wu)$$KKXL ziln{9HzrV8@6!<@p#LIb6)$$OZ+fyuS2smbYaZA|=_hNr9e%d*4BBUlHSfA=Lh|an zk~_}ay`BSiOiF&G)0$58-*?ki1p7pPmi><1WTQ<|hp~5JJy_J(;J+X!DBi zK?di@$Ihm_U)4sXFbVlG>4&i9`_io3W^il0jWy%ByYdpCa2O7oux#X5FTQ&rX8fPm za(kXdKwFl3>*nA)_;nQOdFwynz!%TooE5({Ts7>3&i^?yopo3GZ~*~98Y&i>%=;5H z!TACw0lC;<0Szdq0b%>I(S+RRP_U0doz9HJMp%9^nhy)EqiWYXdaC0A&S3%r;>0|J z&I6LX!)H>XocS;+8mbo&P<*=Z?2f>bk`iLj5(tITiI3fT$Fs%NSng19r`^9V2aB7= zCB;f{S}!a5)2C0EAMx?zNcvdj+E{pRCt5E-$qx7n@If?`=3Bjn5!L(hg$&WI!}k`d(Jq?ELF! z`JFweO&`l=h*@)N?t{GV9Mmtxy}lV(-Wj>PcQAWG3BglbUAZaPEVz?DSN;dbn!Kk^ zNr86Od3WP=6bwx!KkN9u1uC|iqZV$Rul#JednIA=_SQm@(&wC$LxE=vUs-i?F0jKK zvlz2SYu@MI_4Yn@otFRPHFQb#V66sduq-vZ9kj(C;ko>|&>fc^E3k;YIjlZu=w48P z&fBL?pH{g{oeTIms5uUOba2;UFv^1kXjiR}F($~?V`?|?nTENeM<*E$ER1mk&@tR~ za=dW@^PlL(p(R$dVUZT(VA!u`-!W-9cA55`a>42hAm%{CSJm6wyXPo1HB~iTX{&>- z9^~5bCWn9z2t7mdolMppKq7w*qp&Q!CmgV^g+j0GlXOeKp85NkAU^{?7HFtyt`W_A(fPw(x^ue51Ind+Z{lQ%$lgxP^JifkvQ2+buBMFyDDKLlm5aU$7 zIhJ>ATz~03OPBjaahpZL4xf;Mb-3u|wd>ala&x(Ib&Cvb_kS*5Y4VkLqMwrpg9Hld z>zOy+oLqSJYUQcu2`E%_Ht5Ayv9|zo;s3vf%VL?DMwRscv9bL_Qe{Rfj zQeD`~J^76-@wAV=z`wfjYE|@P+qZ9Hk`B^j|Exl#gwp_5(`Fml@sj?9-+X*pqz#qA zz1Xtav)8-ku)pZxe2B9qU<!9dc9l8aAA4hWeE6GL)}0F;E7;sfU`*S9 zs*@~it}7p0CSTk*KH5Y-#enk$8m<5zpyzx2qAI~1?DJ9b`V`4 zs)CuEx(}rUZF1hd)3yxU898RlssPGKUU@k=>@7)-fK3%)>*l8ET_y&G`G+^3wZcpx zym#4p0QjH(ESMG`|}-t_40bEUS(k!x$zj zjL_M$C6?6qd;$VQ_toQ6^IAZ?2e_$XI0#UKVWwuTc>1&rgoHePenTVgYajkBR_bi> z+ZKmafq%lJ%TrjTSx^W~0MRsBFzZxGhwcNbz;?BR4F)1R;U;CB`RZ}vx4-I=v&m8e z*AGNt+sVY5Flteh^NHubD+8nc*_-2i*PO9uR~rvc+}yZ}oSsjuUup2<$D}_J%dige z)19ItgH7>&3(sH$u~%mljL_LXd4r9dT(IKoi5!ZtAc_|7ksgoFv#|_z>3M?C3r^M^QK9f97l7 zqo|X^C8c`!MUUTKGI;s!!BepY7kvv374IxcaOBhRL3fgk6TIh5|zHT>Xm| z^oY$>C>8(}g2qkXt(^^chJRhdtJkhw+dHwI68h5m(q(FM;(87a;&>_eSO5w1zE~cU z3UdPJ76K=Ly)ByqFqf-Ttf04ArlNw*SzNr<1f~Ijff*fu{+|pjK^7YN5sr^Gg6*M@ za7$U1eyBf)$5dxb^v8u5n<2Wyn8 zEN30b!KVP*9ZPhEdUVNjpv4jm1^?NzFo(244H(Q(2kPyxkR*^ihv3#`AXnwNtKP6j z2k`R$x_0CN;2xjUS^3z*{y>;BYJObyf-FD#h31pvy9g0KEsO1u+naN(XGb9zIV>M`WoP7(KSjS(6MJ>IznoZn}&WWX# zrSJZ7Ag>}0zA*XXmM;Qv`kvr7^D17jIdct_k3&Oon|4MmvY!?2(4QE96F7g>v^;?m z8lb=SwS$4hz)X&LaJOwRV!(d7yu{Wf4N2COh~jpcjZ_dSR1UR11MEI#A2+0 z+6tSEK(+2QM02Q=hJ%S1?fZ5g*halyNQL4U;pcZ&#}0CGd}jQPPl}6+3(Cvizj@e% zjGgvR0NB7L=ZO!B-X09^$?MPs8uMXP7Z3=n+9JSj(#p{WgTEa_i9PsE6+b^Ygbh3o zW~HE};3+7aZ-O0fTiCLJo5xWZdX_2c!Goo{$HtPTWn|dTwS>$&`G49<0FdRDtn!(U z0$aqxUinrVuqO4Z&l(T=IsL!oVVW{3O!H3`I8Vmc$9})n5Bhv^!g;(IU5fEp9 zqikhmMQ%YG_&?s}{oCsJ+M8o`E5oJ740B8UIY}^?jN9f7?C`lzGEoE~U~fLk7yg{j z`YNVH3kNO?w3;zLBFLER7JE_`^)|>p7SH7)}3IRUInP+R=YOCE%>VfZYQQ@I)OZto@Fl}K5oXVvT@+fz zdg%|qYl4Td;Pd8y{lf8{JytnBQ`{C8dQPBC&HdW|_pRwy3?SdwxwX)}1!~1MKfetg zW5NH7-xB-#ObNW5ot^sa59gnQyt8HS(GIvzWkW++U_OB^T@uuTU|!v%Qg$8DG?{X@Pcw>`hr`^j&R1p<5DWaf=pDH#VYnuWN#U>%l~ZSi z4v0fBy`qie8CShw?xT|XoN|)Y8%67&-wqi`elXZ#bKE`&$La0Vw*PQrG;$tGz5C}P(PUU91kcJZ1d5mM z-@pGG{}`73Fa8-mMI1`)mCaAA8gH&f&+_L0bw-0t1nhvNOu{x41k7e$Z+&_wMI#@t==P&&!cS1Uk@E z$nz(M+xEi`_n;d9ru)$Uj}gqBQBMDoyDDUsZa>VL-!o_I|IcIP(U$$sdi?+UVe-SV zb74Rt$QBMFv?+m?gDypm3Q}*zT!@r64D=}2Npo} z5i@a%5Rs|-B>J`J&V~Ozx%w5bSuoEu9ME_Bx;GJw`Eu0&;{id|*6*bpd*GfzXhs;X zVIOaPiUm}5fqn93E%^J6KXxcL%u--GWBM!{x&;AVBtb0208`HrubjVd^wS8@5>7(5 z*$paMc9m+cIse<=G{$Ij$O!0U&ATHIz$?FX?i73nAH_wCZQRlR0k5TbFo=u|OArtrwtHiuYPOp+WYq zi>EL@AJ?sEix8^8@Jo6iI}5ra*rpvQ6Rms0_dF=+K}&)xsL{d?K#XY>e00ay*tlb# zKL0ZylQ!uw%Z1=$0DS6eweS-NHM18(c^ zurVaLL8Vc(Yy?_VCPzj`q4Wrik)Od=YJj%Aus*Nz2l-XulauqL#GGK9v2A1?ALN#} z&YU5G78^JZndf~(tpc{xWwSrz+NX0D+I6yWp2(2rV%0w_zoT~`N0D$Z^A4cX#I!0nldhv^s7cOv7;excSF-)7(`Ao zVCmwVAXXUer0L=!0xJWOom&vc&OK}V-Uitm=uDh(l794=S#2JLrcP|U8z{1T?vGhO zTYvSEe-3^DfdL#!q(1cVBNwr1k3BdqcxMC1CBaq(mfz2xUI6)Q!I=gI)$Rjb@8pDt zf|dRSh`lrT9&UBxAi{{Kx;_@^NPz#r#+xwBd~a_dX$yiI+mquX?DKf(I*kn#5Pw2P z5Jx3NhzA||B3iKSR^YKOPyQ0>^(okM=uJSuKkF0W&_?9(qlOeXaU*s$qrnxGNS z%=giCr@L40JbC#G1=1%o{;MJgkp`t;ki^EnHQVG@qZI8ocGYJdwhRU9WqG$51(*vc zjlFSfjDvN9FtySefq3xX0W1>vxDsr?MLUBu**}&)mIii?j@WCdl6ZMBX=w%~U^*DE z&~#D-G0_q%Eakf)MMMbx>bF;F|1i^Xxzrds#vl_66&!3tEh3WOZ}Y+hbKz46S}WDy z?~@9Sw(y~iavp!9g&Az)kW7b5%UWGuBfWAN&2Ac=x4aQ-0gCkDT zhDI+zg-?06|P z|0HQ%P^)+`Glor_V6ANEyI?>TkY7WzKzfMdMQXrQ_u=pDqiz$Jq*eBtJ_@V4@YjWW z4_p4>BWQT@nFvJ&*JQ$zLyQ!G3HP} z{twmvx&M48fPF|Yu_&ubO;FPVivsM?;wQtv0}r+tX3}L>^!GwdoziixWyPXO2prIm z9e}~SR99X&(L_?5B1Bx&*Z;LqW-Qc@st`eeJqZKe{7O7Lx%??urCYprjvuln1fFQA z$Mre31CC=dNWXUvFRYas^4np&l!2ZEbm;>eW4iBM=NdKbN`=$`Lg>M}pBEsU_5GF?>#pP!G3avMRfumPnlu9J4t=`M~woa8rTF`-+x z2W6mU7!M8;VFR5K#JE7thFA~xNo3vEE#JTGiwgCj%-!yI7P_65dNJ|I{do&wAw$T) zgyP^4A`oC(gYzJxioj--0K8Et_rBYOurFV@75?BMU)9?$?JEf=yz*2C+h;#YH4?5`d_v#e)zZFp9 z<5UaV&$mTj`T9|JE}NKqh6p3U>8{{0wg>dDiylX#fCjYM!-1|0RCCD3n^zDHRM#6q z0uw%^fwlEUzu;37tcpV(Xss9vc>ufmw6Xt77=J+k!}{5Il1>K_}VQe=%ola#NE6HouDH z@Z-D?<^!&VZOz1-cO&FxflG*tg}$rf%in-U{;!YzjV?AR+Zs@#!YY(OuX1mOST`hi zi4c1mC&zBr9319n?rx}q@vs6=+;sS(cYXB!MI46}4s2J_Usr4{ye*7Y#=m#^QYbPO zie>OXfL{ll)5`w-^6?r4!FfeMK)}8O2^0NJ12!WG89_wLo0B8AfRm$N$1d1pQ65Mh zLyBjvjZ6#$-U2d!P_Q0&6C8|9BLf`b9IdoYg1Il9EA&V`_kR-^=x~+<4NL#!qD+9K z-s_VQ&_x0gaUfuzS}=(1N-oe$>Vo5t-#lQ*N5LvpGTr%PvcRy^z{F(q`!4u-VT+gK zkUd{DdGuB{B@{QUWfF4 z!SbIC{Ge+UrVo*uqo(IQ8>((E>CrPW5h-|o|MWIzLGVA&2yhwQ`3eWNZA^JXgWTw) zXs9=Lzal{mtNj}@r1Evb|M;VgK!c8l-W6;n=eetfWm!cHkaQ{~uVs4}CA8?=t>Qp;fPd0;kG`70#{s`(tb~j5JdA4q+Ij}%`HdG6|8>g)aUj%&r3}%)d zT+wBSDm7bR?601% zNN;JCjeG`-LxDV)3!}0dX60F-{M+L%{q%nwoaVGTS0a|I#=iafI;r{`${wDYmDPt9 z&#Z4wXu!R||}V@E+@=(ifx~xGfx5;)tjW z#>dC!&Sv;RC(BOH$zlJ=TsxIg{GGFZ`(E5{UaxZJklXRziM?Oip!_jdY5fNC1BREy zvr3af=1W7Q;2AWHkJnt+?{NXq3)|mv`=R;r!1cV-2`e{Te9h63=ggThi|!{t$*7a~ z+dvwDnZ+X{heqZw_!?Ti=AKp(1@;JfbF3=CQzrGM#VnUW0KP=m8o=e(w8zpJ#1`(68Tb{qc3}(KVu?wsR5mm;^eRuU6vK;o48OCx5*`lwv2`;H_&>f9bb$^$ ze4c%oBMYdMHCD~@=6)@eV2|JbHSqrrk5C+uq(^%AQQSVT5tfNCC&=}1exu|BXkeNB zzn?!^ecKZH7{EiQX&&N;^z?F^EkUCWe{uE#L&6y0*g^2qT;bcIbrB(PX0xlhc0U14 zi2@^mVDb2XC${+ViU|(528$`lw52hQ9BFBF#r+Ms4`r3Y9>G<60yI+mlD79SWrTUS zc3g{IRdFh>FMeIcIe!1Pd2?|Iw+knH-TXN+>r3pRAqrl_y&}9x0CLBVfK|l@wloWM z$qX4|KrgXYEMI;(JiN9yOG#Xh)>>Oxd7dm%qJ?_Os3s%9v;A{hQWGqJIXRJil8lvq zsVbzPgk{T;^(W5{H;OKPskoOJviH_bNc|hEo-ZUK6$(f8^g3j-P9o=Qo1W+kwOaJ| zOw@6v)XJ6S3e;qa@%oRD0BId0s>qH-Z&8S>ldxiLIJeUg znJ>G@A9=hI>cny5M&Y~BS8N}eVzhrOPa2KMg3UAPKhn`mvAhyIQIh(U2RcFD$ zRvIe7PX)KVLfP>NG|Fdhv+DjiZ#oZ)iuM#c=MQM#JCv;;lg30_7)x-QmdR_cUa0Ct zcVSV5M<3W%V&TS}0~6|oqx0Fc$3FpnNCDiG;LonE%G1aUK7uFbH~y`M(9l4RiYVKc z{@9$sU>J8v&n?mzkU@fVNce&9*(cG9hL?Jz(39D~k%-m9>wsYQMuwtHn$rf+N`#H{+FH}&Ws03dP=&y@AZ#(_1gj0T zRObF8b@|rt$0A)Vgl5)Bw&I3&mT8JXaelvD1TdB4F+j$(*-P>ue~OoiS4Rs11AWMojF=eYbi%! zSUM;I^y?NQbj3~4Oy9X@NbpB&CVl5Pv9UPHaku{DQ!bI`Nm_HGBP5T#Wkx8Q4B!)I z@wF8j2~?ZJ3gBsU#gC;oZ+>_w_3u%CA98^aun+iJ9HiY&vvUK*C^WOh+wl7FH+89p zP8JIrSsWXT)AaC-x{L%;v;^*aJMEmES5bP? zzrL#&3k^&{uYyDr_y};y;=6o#xgDZB79mL>QlG@Rel|#JYga;h&@Z*IwY6$`bn?;H zguoM!`VzfnrUjhWFk1SN#V#vEixl>9!m*sgjKLY&eBbE0&CA#w64*TpsYlTN6r&vJ zT+fPf0-p?cw1}!C%DWZhLv~j_v^Q|n5}e@<4^7YEwaNWx*JfIcd%n8lF$OR;#5K;a z1Avwi%-Zt9(=bPMvM?hu)c-@Q}jB?K9UXQ8D?ljADm3PkV zxPAV?*taj3wD(^Pnf^gjA^qSe_Zq_`cBbj%0?pfJ^GR9MuNRv1F!6Snas?Zl3nleoVQ6NOuw zzic`xTB!}y=!2;caCZ7mh8lK?Wfb>MR}@^78>K5YqRfmpR2#PHJ9?#%9L0PM1&0pc z1rWO6)nRKVHUgYY)u}2lg8P9)*%Y@Q^``J^$aBrk4hb;)qX)q=$eb6mB462(i#p`+ z(yZ`9%UKtInwYRx^^0&QmLgUQPHUCl91m)?CHsbuGxa-UY}spED+ zZu`*hwa0?T9d5j`HFIwde>7OWmTewbXIKPwYH4v1=@@0jVW)FSJ36vQh$JhU+p|-t)f|m4HONwx(Gd4W#)^~)m7`zIv)3t*xJdd zdwYMRV3zX8K_FB8+xwrQ_2@65ECqmpP4$>(b0vgbo z>nxF&qVIq4LVfa!y@R1(xrr5_p|Q~jRjaMRnkRvAX;j93gx-_0Pb835vmLunDjE>R&8l8MBUrAMQ6B83- zY(Dj|PfN{CS7}A-s$NEQJ3=8s@qUJz@h4uaj_}EQL1W%HUcQIL=zOC-;dnRQ(%(_RkrHdYnjiArF&xMTThM-v^pP)eSiY$LC}%G zN^7zd9*G6TaHtREO^svddxEAT2fjbkn#ycJI=81 zu&@uwcVasGAKAsY&j&HVOI@+U^IX|a9MQwjD6O#((^);5ECN*W;dWBA7iL(sk;Uog z!=vnK<73B~Oz{560(PIRIHov;yUIJig9@gC7^haeeq90(rE++I3!-K((Zydg;qQ_( z5+m><2m)AoVaz+n5+HxUVGsXtqKd(iqiBC276%(2=xu)Yp!KqJ2Y@xg#crL-UO6I@Dyhm~y2_wV;ViODM{Kp}~qafdINwEJbhe;DhnF(Ogx zS>W80q?+YyOzKVuR49Vu#;S6;6pzi<%6Q|)=iD_SakzonzNoDa^i0?eN~mlcDga27 zBry`D-q*Q3M8#YZZ6uBI%`>dDDkt=4SBkrqN+mR`S+@>!zNyALI2#~z)g*sp%~xbf zYq3H^d&;Rb^ofmy_M=$tE?8B?888N1J~K^RVFZGx43Y+cU)$idVUlRfUXI?0Ef%OR zz-B`N#o;r}!UM`BDG}x#+@LP`OruSga1z7Hqlw-;>za)T&!5jegCHjgRGkSez4$6> z%bCv6EY1BbWv@Z#L#lmy1fcK&qS=|dx*?*$lws9eUzixTqR^kjg7C$n8|D!nn-^TW zI4&PTH$wikS7QwQVy9m8XCwBDn7c_@(D`x6h;tY~j5#MRwbh0>?+ymmj2yEb{vOrb|_V1gey zD*mqT>Tl&!FAGy>eY093Vl<%;z9eb~d%trW-f>)2@S&2+sZ9It7=QPC70Cc=C!-LK z^PsD=3MFYZM+q?n85=bbAn_B663!4FYAhsX>|ViFpNoT0TTHm$Y{5p%AqqD z0tV_J7Rbcsw!QJ1R{B|ApQBv&=2n4zH5~Lrv-@cw!_nm2qqcyxDA9Z)?iB9O_OP;L z4Ia29y!R!avp|RSA+f$|yLC(zc{5OWTtRYbs7S&`QERY_j@J%4)q3lzMd8Pn$UFk{ zae^%}wdb_o<9C2oa0sbGjOTa<-^f_caj!tQ@u&}}p13#-R!TBSOGdkHoO*Yf_eF z>%k*OBpx)`Z_>`j=*mNC5x0F4BYuj7oGabFD&ea#H3XoLcq5U({UF^)Wa$$)W?-9C z6{U^|WNY~-trNoQZk^KeeLQ3kd$^=3p{m$Zr*!rM@m-Ss#r=#5MZ#-R5#&t-1-D$BgCt*QACxc;#p2#|%dpXC4;xe!7mlgA4!clmKGrZzK5P_wzoCJF&`jv&w&iy{SJJq0kgf@`PRp1n_?F(Lu zi);U`V5?hYmUDCNWOV)8(e>FzIw%QP5+qjLn>f_0A=Md4P)`1+z3Qv)1tagf`lV#9 z6uZ zyrF&zELk=o9-SEA!r_;6c0RA@JkWr*??Fbj8trdAeAfY|gJueUR@TvK88aBQnvcl} zaOEOqLEmIAhf~V%Wz6;!fXqydF?{k%@B^LL{AG!`N5^V-Hozn-2*Uu7!hY9nh;Lc( zm^hzT;r1Fo#%GaWd9w4Qwf)<| zP`wRHnmz_xNMe3x5NwExuzXHxyn|l^-H9gW6N5;l&;W#VEBINf9Iec7^h|rNIG(SV zWOm)A=~RV0iE;uL4Fy&!6EHEP?sV}={OwoS;#wZJpV*t5Qw9eIC*P#N(TpUAuZy>K zSpYAdAe3whWzWgcxChwAI*2)^wZZQc12`_B%PeF^KI#t(;=EbFMfP&{pD^|6F7A5* zleHZo`!(AitosPGu?=^#dPFk=s2KxfZq9ITW)=)>8oB>jWT?YlWeQC|PQb}^z6YUi zr?$5CoyPsmSk3hiPlQSvrzP3X!-J%8^^e&@=Ts>gJ;%pO#yNtsXA_CWUUWkPQ}2)h zG-0I!A$G`=q$2DCb;$F`!F#>$`Z{9C7M{`;SiNEP^DD$_AI*yS{21%=d{+(f7MEie z{>XY-T_;W3X1d9>q3`Q*@W5>iP^ecLxPB@V_yKez6Nb^%XzeKcgdF9*eBuG65?*Td zE&CL5ICo5S=y8-op`uoHMS>T)BHH^0`joVBUDhK%f0oT?D@!T_g$m3C<{z>tT z+PD3chsTlMTfVxnS-`>WNI#Gj>a9+glsUncCrj+l+S!^k?ts~ysK@HF!DYxrO)i@Y zlipmG+_k~t$-EhO9FK(oo8Qx4;&WMvhk6dF)^8+=m1nht(Rn@z3{ zpqDB;Xfosocn9MBbPZLC-0ud9@x^kuz^8qp8s8rD8hs{_{>zK2ms!1!C!F(<2{4=m z{(@wEf}Os#*hY(CA;bi8hMiH~z~l2;$pfZ~m1=Gq;_{K1+WwidNdESHi^9YS5<-6k zm{>y+5`$^-{(x>ocNn_|aAd!n;pwUFIn{L}cA#NqJZ+{3*Ckib4UrB(HQI8|sXH)+ zIczf7CQ`UCrzhrYFDYCl*uG3)HRZ2WaXZ5cB!%Xf)+JssZvbT7dX}=^IE;E53hj9T zt%*5sh>cLWo0cEYFhN2?y5_qTU0HH=9&Vg3Yh%KfYtmHv zJO@AR$wwe$o50m_Adb|))LXAHHD53_ozf&S5`d%GE~|UC4jmk#88;`t$T6R3-4 zAhB4?R9G8!$MP}E74@8Si;i=enQEEAVrTVco|Wp{hDGP{3UR&YfyW5UK-Il3x%ck3EC065zB104 z8LAtrzTG~|-pD*6_YydqCHD+dR(5GGVYuP00yk(iRXJF+%tv6QN{0tvHdjiEqP|D+ zWd<91L(Z>u8e_zl0mpB;j*Ay)DpHg|!vs75F}fg`q0}}X`d{o+=b;QMF2Y@1W)U=x zo5w(wPeL{UMeK>XEPICGijwRvH?V8?$KTAf&T5YmaxCqZa_hZ_HkFc z<=f{GvnQrkGCSEo4#(=eVbvl6Xw~=(fL?^^si<7_8xJx1u zyI|i#27mk0f{hENROf8J`ATmKgwwg0vOoRJW2F<+XV$FDOFUwgE4Y4>+pc>fn6$n9GI literal 0 HcmV?d00001 diff --git a/examples/NRL-TB/silicon/nrl_ckpt.json b/examples/NRL-TB/silicon/ckpt/nrl_ckpt.json similarity index 100% rename from examples/NRL-TB/silicon/nrl_ckpt.json rename to examples/NRL-TB/silicon/ckpt/nrl_ckpt.json diff --git a/examples/NRL-TB/silicon/ckpt/nrl_ckpt.pth b/examples/NRL-TB/silicon/ckpt/nrl_ckpt.pth new file mode 100644 index 0000000000000000000000000000000000000000..ea4ea39cd0298b96764d9f6ed0df4a34f7fdc39e GIT binary patch literal 9010 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 literal 0 HcmV?d00001 diff --git a/examples/NRL-TB/silicon/data/POSCAR b/examples/NRL-TB/silicon/data/POSCAR new file mode 100644 index 00000000..0a4387b3 --- /dev/null +++ b/examples/NRL-TB/silicon/data/POSCAR @@ -0,0 +1,10 @@ +system Si +1.0 + 3.8395895958 0.0000000000 0.0000000000 + 1.9197947979 3.3251821301 0.0000000000 + 1.9197947979 1.1083940434 3.1350117771 + Si + 2 +Direct + 0.000000000 0.000000000 0.000000000 + 0.250000000 0.250000000 0.250000000 diff --git a/examples/NRL-TB/silicon/data/kpath.0/bandinfo.json b/examples/NRL-TB/silicon/data/kpath.0/bandinfo.json new file mode 100644 index 00000000..5f5edde5 --- /dev/null +++ b/examples/NRL-TB/silicon/data/kpath.0/bandinfo.json @@ -0,0 +1,6 @@ +{ + "band_min": 0, + "band_max": 8, + "emin": null, + "emax": null +} \ No newline at end of file diff --git a/examples/NRL-TB/silicon/data/kpath.0/eigs.npy b/examples/NRL-TB/silicon/data/kpath.0/eigs.npy new file mode 100644 index 0000000000000000000000000000000000000000..da50f2e9acef5fd479cb19fa1854e55d6f19e972 GIT binary patch literal 33952 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 literal 0 HcmV?d00001 diff --git a/examples/NRL-TB/silicon/data/kpath.0/xdat.traj b/examples/NRL-TB/silicon/data/kpath.0/xdat.traj new file mode 100644 index 0000000000000000000000000000000000000000..d877e6859c4eaa84f77645e565c344d0f2603109 GIT binary patch literal 408 zcmZvXu};G<7=()$m|$XHv^=Mle>;g|mWY8T0H!EHNt#MQX^fn-qEr>)sTf$`5qOM_ zj0g$wC$&_G;^9vA-F;EU#7xOeJ-fKN9ADe)t}HrZmxLUSw&%b(cmCk~yky;3fg4K`ZSm6vQwo0*C}ij=zPy{R%MP2=low{eA#4-~dV~ HNYnK%w|ZW; literal 0 HcmV?d00001 diff --git a/examples/NRL-TB/silicon/data/kpath_spk.0/bandinfo.json b/examples/NRL-TB/silicon/data/kpath_spk.0/bandinfo.json new file mode 100644 index 00000000..5f5edde5 --- /dev/null +++ b/examples/NRL-TB/silicon/data/kpath_spk.0/bandinfo.json @@ -0,0 +1,6 @@ +{ + "band_min": 0, + "band_max": 8, + "emin": null, + "emax": null +} \ No newline at end of file diff --git a/examples/NRL-TB/silicon/data/kpath_spk.0/eigs.npy b/examples/NRL-TB/silicon/data/kpath_spk.0/eigs.npy new file mode 100644 index 0000000000000000000000000000000000000000..62abb802418e567b2bc2cbd9c73c5a0d6ae4633c GIT binary patch literal 6960 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 VPKFxan|REjquEsx=zRCT{tu?}-a7yQ literal 0 HcmV?d00001 diff --git a/examples/NRL-TB/silicon/data/kpath_spk.0/kpoints.npy b/examples/NRL-TB/silicon/data/kpath_spk.0/kpoints.npy new file mode 100644 index 0000000000000000000000000000000000000000..df905f75830cfccf030f4b7fce413ddeaedc50d5 GIT binary patch literal 860 zcmbV|F=!M~5QaC1O3t8>EWt=jRz&uW9AelILUL~wEZh`PJi$U(ki*;}C`r8YQsf8( z;ToGQwAn)oiG|f7h;a3#NVCE68k=oINU*yUR{k?@7p#5oGv9k}=FLCv?fpmh9y}f~ zwvD#EUT;2a*vpn(2^Q?KWe1y$SB=`nlg-9@ozL&qUNq}CZ$7JS)v+%w&X+BxRJL}l z|6K*+pLLY1Dc*8CN|KBd)s3cz&pF~wSjRnK!`P#46lFOPInGyMj(8`_Pbdg}3TM&f zH?dsDIpZR)!Z8TWf!7qrZZrx-=s$|HG0uUnG1QH7E#4YO?F4eB&~pN{lh`}xGs$QC z4t#N(#$5m})2Oo`_HDU?{V$|-+x@ilfwZo;g|mWY8T0H!EHNt#MQX^fn-qEr>)sTf$`5qOM_ zj0g$wC$&_G;^9vA-F;EU#7xOeJ-fKN9ADe)t}HrZmxLUSw&%b(cmCk~yky;3fg4K`ZSm6vQwo0*C}ij=zPy{R%MP2=low{eA#4-~dV~ HNYnK%w|ZW; literal 0 HcmV?d00001 diff --git a/examples/NRL-TB/silicon/data/silicon.vasp b/examples/NRL-TB/silicon/data/silicon.vasp new file mode 100644 index 00000000..c3a71b16 --- /dev/null +++ b/examples/NRL-TB/silicon/data/silicon.vasp @@ -0,0 +1,10 @@ +Primitive Cell + 1.000000 + 0.00000000000000 2.71499984016137 2.71499984016137 + 2.71499984016137 0.00000000000000 2.71499984016137 + 2.71499984016137 2.71499984016137 0.00000000000000 + Si + 2 +DIRECT + 0.0000000000000000 0.0000000000000000 0.0000000000000000 Si1 + 0.2500000000000000 0.2500000000000000 0.2500000000000000 Si2 diff --git a/examples/NRL-TB/silicon/plotband.ipynb b/examples/NRL-TB/silicon/plotband.ipynb index 47a9e3d5..b553051f 100644 --- a/examples/NRL-TB/silicon/plotband.ipynb +++ b/examples/NRL-TB/silicon/plotband.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -36,7 +36,7 @@ }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "

" ] @@ -46,7 +46,7 @@ } ], "source": [ - "checkfile = './nrl_ckpt.json'\n", + "checkfile = './ckpt/nrl_ckpt.json'\n", "config='./input_nrl.json'\n", "\n", "#f = torch.load(checkfile)\n", @@ -107,6 +107,99 @@ "plt.xticks(eigenstatus['high_sym_kpoints'], eigenstatus['labels'], fontsize=12)\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# initial rotate H or S func.\n" + ] + }, + { + "data": { + "image/png": "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k9DQUAYNGsTs2bMBbX5h5cqV7N69mx07dtjNlgULFrBw4UIKCgoYMmQIly5dslvbzRk1fhRVMXToUEwmEx999BGXL18u8yTq4eHB4MGDeeutt8jOzm4yr3Jtec1yaywjmxq9e/dm27ZtTJ48GT8/P6ZMmYLZbEZEOHv2LNu2bcPFxYWuXbs62lTdsXTpUuLj44mKisLV1bVk/cyZM/nwww959tlnGT9+fMncWmPz8ssvk5yczKZNm/D39+fcuXPccMMNdmm7uaLGT/15//332b17d4X1c+bMsduYaEyMRiO33HIL3333HR4eHgwZMqTM9qCgIF599VWg6cyH2vSaZfsQ1qZNXFyczJgxQ3x9fcVkMomnp6f07dtXpk+fLkePHnW0ebrjyJEj4urqKrNmzap0++HDh8XFxUVCQ0Mbpf3K0v5ZueeeewSQDh06SG5ubqO072yo8VN7rMkWqlouXrzoaBNtxnPPPSeABAUFVdgWFRUlgLRs2VKKioocYF1ZbH3NMoio9zAKhUKhUNQHp5kTVSgUCoXC1igRVSgUCoWinigRVSgUCoWinigRVSgUCoWinigRVSgUCoWinigRVSgUCoWinigRVSgUCoWinigRVSgUCoWinigRVSgUCoWinigRVSgUCoWinigRVSgUCoWinigRVSgUCoWinvx/EObPzBbUKJcAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "checkfile = './ckpt/nrl_ckpt.pth'\n", + "#config='./input_nrl.json'\n", + "\n", + "#f = torch.load(checkfile)\n", + "# define nnskapi for tb model.\n", + "nnskapi = NNSKHost(checkpoint=checkfile)\n", + "nnskapi.register_plugin(InitSKModel())\n", + "nnskapi.build()\n", + "# define nnHrk for Hamiltonian model.\n", + "nnHrk = NN2HRK(apihost=nnskapi, mode='nnsk')\n", + "\n", + "# set the input parameters for band structure calculation.\n", + "# structure: the path of the structure file.\n", + "run_opt={\"structure\":\"./data/silicon.vasp\",\n", + " \"results_path\":\"./\"}\n", + "# jdata: the input parameters for band structure calculation.\n", + "\n", + "jdata={\"kline_type\":\"abacus\",\n", + " \"kpath\":[[0.0000000000, 0.0000000000, 0.0000000000, 50], \n", + " [0.5000000000, 0.0000000000, 0.5000000000, 50], \n", + " [0.6250000000, 0.2500000000, 0.6250000000, 1], \n", + " [0.3750000000, 0.3750000000, 0.7500000000, 50], \n", + " [0.0000000000, 0.0000000000, 0.0000000000, 50], \n", + " [0.5000000000, 0.5000000000, 0.5000000000, 50], \n", + " [0.5000000000, 0.2500000000, 0.7500000000, 50], \n", + " [0.5000000000, 0.0000000000, 0.5000000000, 1 ]\n", + " ],\n", + " \"nkpoints\":51,\n", + " \"klabels\":[\"G\",\"X\",\"X/U\",\"K\",\"G\",\"L\",\"W\",\"X\"],\n", + " \"E_fermi\":-7.5,\n", + " \"emin\":-23,\n", + " \"emax\":12\n", + " }\n", + "# call bandcalc to calculate the band structure.\n", + "bcalc = bandcalc(apiHrk=nnHrk,run_opt=run_opt,jdata=jdata)\n", + "eigenstatus = bcalc.get_bands()\n", + "\n", + "# load the DFT band data.\n", + "#band = np.loadtxt('../data/soc/BANDS_1.dat')\n", + "band = np.load(\"./data/kpath.0/eigs.npy\")[0]\n", + "# plot figures.\n", + "plt.figure(figsize=(5,5),dpi=100)\n", + "# in DFT band data, the first column is column index, the second is the kpoints, \n", + "# the 3rd column is the eigenvalues of the first band, the 4th column is the eigenvalues of the second band, and so on.\n", + "# Here, the the first 20 bands are core eletronic bands, not fitting in TB model.\n", + "plt.plot(eigenstatus['xlist'][::6], band[::6,:] - np.min(band[:,:]),'ko',ms=4)\n", + "# set the minimum eigenvalue as 0.\n", + "plt.plot(eigenstatus['xlist'], eigenstatus['eigenvalues']- np.min(eigenstatus['eigenvalues']), 'r-',lw=1)\n", + "\n", + "plt.ylim(-1,35)\n", + "for ii in eigenstatus['high_sym_kpoints']:\n", + " plt.axvline(ii,color='gray',lw=1,ls='--')\n", + "plt.tick_params(direction='in')\n", + "\n", + "plt.xlim(eigenstatus['xlist'].min(),eigenstatus['xlist'].max())\n", + "\n", + "plt.ylabel('E - E$_{min}$ (eV)',fontsize=12)\n", + "plt.yticks(fontsize=12)\n", + "plt.xticks(eigenstatus['high_sym_kpoints'], eigenstatus['labels'], fontsize=12)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -125,7 +218,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.9.7" }, "orig_nbformat": 4 }, diff --git a/examples/NRL-TB/silicon/run.sh b/examples/NRL-TB/silicon/run.sh index 7d80e495..bff4b701 100644 --- a/examples/NRL-TB/silicon/run.sh +++ b/examples/NRL-TB/silicon/run.sh @@ -1 +1,9 @@ -dptb run band_plot.json -sk -i nrl_ckpt.json -o band + +# load json model to plot band structure +dptb run band_jsonckpt.json -sk -i ./ckpt/nrl_ckpt.json -o band + +# load json model to further train model: +#dptb train input_nrl.json -sk -i ./ckpt/nrl_ckpt.json -o ckpt + +# load the trained model to plot band structure +#dptb run band_pthckpt.json -sk -i ./ckpt/nrl_ckpt.pth -o bandpth From 5178f20a7e1948b66492905045cd54a56344c0e7 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 22:42:56 +0800 Subject: [PATCH 38/63] update apihost.py for json model read config --- dptb/nnops/apihost.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/dptb/nnops/apihost.py b/dptb/nnops/apihost.py index 41db7137..ff48ea16 100644 --- a/dptb/nnops/apihost.py +++ b/dptb/nnops/apihost.py @@ -46,7 +46,12 @@ def __init__(self, checkpoint, config=None): raise RuntimeError # jdata = j_loader(checkpoint) - jdata = host_normalize(j_loader(config)) + if isinstance(config, dict): + jdata = config + elif isinstance(config, str): + jdata = host_normalize(j_loader(config)) + else: + raise RuntimeError("config must be a dict or a str.") #self.call_plugins(queue_name='disposable', time=0, **self.model_options, **self.common_options, **self.data_options, **self.run_opt) common_options = j_must_have(jdata, "common_options") @@ -69,10 +74,12 @@ def __init__(self, checkpoint, config=None): log.error(msg="config is not set when init from json file.") raise RuntimeError - # jdata = j_loader(checkpoint) - # jdata = host_normalize(config) - jdata = config - #self.call_plugins(queue_name='disposable', time=0, **self.model_options, **self.common_options, **self.data_options, **self.run_opt) + if isinstance(config, dict): + jdata = config + elif isinstance(config, str): + jdata = host_normalize(j_loader(config)) + else: + raise RuntimeError("config must be a dict or a str.") common_options = j_must_have(jdata, "common_options") model_options = j_must_have(jdata, "model_options") From e99d9f6566b697a2541ef05cc0f97f3ca3438fd1 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sat, 7 Oct 2023 22:50:24 +0800 Subject: [PATCH 39/63] test: update test_apihost.py for nrl model --- dptb/tests/test_apihost.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dptb/tests/test_apihost.py b/dptb/tests/test_apihost.py index 38350f43..417e07b2 100644 --- a/dptb/tests/test_apihost.py +++ b/dptb/tests/test_apihost.py @@ -24,6 +24,20 @@ def test_nnskhost(root_directory): nnskapi.register_plugin(InitSKModel()) nnskapi.build() +def test_nnsk_nrl_json(root_directory): + checkfile = f'{root_directory}/examples/NRL-TB/silicon/ckpt/nrl_ckpt.json' + config=f'{root_directory}/examples/NRL-TB/silicon/input_nrl.json' + + nnskapi = NNSKHost(checkpoint=checkfile, config=config) + nnskapi.register_plugin(InitSKModel()) + nnskapi.build() + +def test_nnsk_nrl_pth(root_directory): + checkfile = f'{root_directory}/examples/NRL-TB/silicon/ckpt/nrl_ckpt.pth' + nnskapi = NNSKHost(checkpoint=checkfile) + nnskapi.register_plugin(InitSKModel()) + nnskapi.build() + def test_nnsk2HRK(root_directory): checkfile = f'{root_directory}/dptb/tests/data/hBN/checkpoint/best_nnsk.pth' From 7362661012a2f5f51a356795c5040fef88d7aa18 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sun, 8 Oct 2023 00:31:51 +0800 Subject: [PATCH 40/63] test: update test_apihost.py --- dptb/tests/test_apihost.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dptb/tests/test_apihost.py b/dptb/tests/test_apihost.py index 417e07b2..869061ba 100644 --- a/dptb/tests/test_apihost.py +++ b/dptb/tests/test_apihost.py @@ -46,6 +46,14 @@ def test_nnsk2HRK(root_directory): nnskapi.build() nnHrk = NN2HRK(apihost=nnskapi, mode='nnsk') +def test_nnsk2HRK_pth(root_directory): + checkfile = f'{root_directory}/examples/NRL-TB/silicon/ckpt/nrl_ckpt.pth' + nnskapi = NNSKHost(checkpoint=checkfile) + nnskapi.register_plugin(InitSKModel()) + nnskapi.build() + nnHrk = NN2HRK(apihost=nnskapi, mode='nnsk') + + def test_dptb2HRK(root_directory): checkfile = f'{root_directory}/dptb/tests/data/hBN/checkpoint/best_dptb.pth' use_correction = f'{root_directory}/dptb/tests/data/hBN/checkpoint/best_nnsk.pth' From b0c9ac77355bb7dc1936a1be0086130c852ea3c3 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sun, 8 Oct 2023 00:32:10 +0800 Subject: [PATCH 41/63] test: create test_NN2HRK.py for non and nrl --- dptb/tests/test_NN2HRK.py | 471 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 471 insertions(+) create mode 100644 dptb/tests/test_NN2HRK.py diff --git a/dptb/tests/test_NN2HRK.py b/dptb/tests/test_NN2HRK.py new file mode 100644 index 00000000..9f6564ad --- /dev/null +++ b/dptb/tests/test_NN2HRK.py @@ -0,0 +1,471 @@ +import pytest +from dptb.plugins.init_nnsk import InitSKModel +from dptb.plugins.init_dptb import InitDPTBModel +from dptb.nnops.NN2HRK import NN2HRK +from dptb.nnops.apihost import NNSKHost,DPTBHost +from dptb.entrypoints.run import run +from dptb.structure.structure import BaseStruct +import torch +import numpy as np + +@pytest.fixture(scope='session', autouse=True) +def root_directory(request): + return str(request.config.rootdir) + + + +def test_nnsk_nn2hrk(root_directory): + + allbonds_true = torch.tensor([[ 7, 0, 7, 0, 0, 0, 0], + [ 5, 1, 5, 1, 0, 0, 0], + [ 7, 0, 5, 1, -1, 0, 0], + [ 7, 0, 5, 1, 0, 1, 0], + [ 7, 0, 5, 1, 0, 0, 0]]) + + hamil_blocks_true = [torch.tensor([[-0.6769242287, 0.0000000000, 0.0000000000, 0.0000000000], + [ 0.0000000000, -0.2659669220, -0.0000000000, -0.0000000000], + [ 0.0000000000, -0.0000000000, -0.2659669220, -0.0000000000], + [ 0.0000000000, -0.0000000000, -0.0000000000, -0.2659669220]]), + torch.tensor([[-0.3448199928, 0.0000000000, 0.0000000000, 0.0000000000], + [ 0.0000000000, -0.1364800036, -0.0000000000, -0.0000000000], + [ 0.0000000000, -0.0000000000, -0.1364800036, -0.0000000000], + [ 0.0000000000, -0.0000000000, -0.0000000000, -0.1364800036]]), + torch.tensor([[ 0.1510433108, -0.0613395944, 0.0000000000, -0.1062432900], + [ 0.0689922199, -0.0389896892, 0.0000000000, 0.0354437865], + [-0.0000000000, 0.0000000000, -0.0594531670, 0.0000000000], + [ 0.1194980294, 0.0354437865, 0.0000000000, 0.0019372720]]), + torch.tensor([[ 1.5104332566e-01, 1.2267919630e-01, 0.0000000000e+00,-6.1649405581e-09], + [-1.3798445463e-01, 2.2400753573e-02, 0.0000000000e+00,-4.1133674245e-09], + [-0.0000000000e+00, 0.0000000000e+00, -5.9453174472e-02,0.0000000000e+00], + [ 6.9340684306e-09, -4.1133674245e-09, 0.0000000000e+00,-5.9453174472e-02]]), + torch.tensor([[ 0.1510433257, -0.0613396056, 0.0000000000, 0.1062432975], + [ 0.0689922348, -0.0389896855, 0.0000000000, -0.0354437977], + [-0.0000000000, 0.0000000000, -0.0594531745, 0.0000000000], + [-0.1194980443, -0.0354437977, 0.0000000000, 0.0019372720]])] + + + hkmat_true = torch.tensor([[[-6.7692422867e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 4.5312997699e-01+0.0000000000e+00j, + -3.7252902985e-09+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j], + [ 0.0000000000e+00+0.0000000000e+00j, + -2.6596692204e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -5.5578619242e-02+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.4901161194e-08+0.0000000000e+00j], + [ 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -2.6596692204e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.7835950851e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j], + [ 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -2.6596692204e-01+0.0000000000e+00j, + -7.4505805969e-09+0.0000000000e+00j, + -1.4901161194e-08+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -5.5578634143e-02+0.0000000000e+00j], + [ 4.5312997699e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -7.4505805969e-09+0.0000000000e+00j, + -3.4481999278e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j], + [-3.7252902985e-09+0.0000000000e+00j, + -5.5578619242e-02+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.4901161194e-08+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.3648000360e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j], + [ 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.7835950851e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.3648000360e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j], + [ 0.0000000000e+00+0.0000000000e+00j, + -1.4901161194e-08+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -5.5578634143e-02+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.3648000360e-01+0.0000000000e+00j]], + + [[-6.7692422867e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.5104332566e-01-3.3087224502e-24j, + -1.2267920375e-01-2.2535804561e-17j, + 0.0000000000e+00+0.0000000000e+00j, + 2.1248659492e-01-1.3011050591e-17j], + [ 0.0000000000e+00+0.0000000000e+00j, + -2.6596692204e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 1.3798446953e-01+2.5347333561e-17j, + -2.2400749847e-02-7.5181610423e-18j, + 0.0000000000e+00+0.0000000000e+00j, + -7.0887580514e-02+4.3406124800e-18j], + [ 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -2.6596692204e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 5.9453167021e-02+8.2718061255e-25j, + 0.0000000000e+00+0.0000000000e+00j], + [ 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -2.6596692204e-01+0.0000000000e+00j, + -2.3899608850e-01+1.4634287491e-17j, + -7.0887580514e-02+4.3406124800e-18j, + 0.0000000000e+00+0.0000000000e+00j, + 5.9453174472e-02+7.5181618694e-18j], + [-1.5104332566e-01+3.3087224502e-24j, + 1.3798446953e-01-2.5347333561e-17j, + 0.0000000000e+00+0.0000000000e+00j, + -2.3899608850e-01-1.4634287491e-17j, + -3.4481999278e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j], + [-1.2267920375e-01+2.2535804561e-17j, + -2.2400749847e-02+7.5181610423e-18j, + 0.0000000000e+00+0.0000000000e+00j, + -7.0887580514e-02-4.3406124800e-18j, + 0.0000000000e+00+0.0000000000e+00j, + -1.3648000360e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j], + [ 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 5.9453167021e-02-8.2718061255e-25j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.3648000360e-01+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j], + [ 2.1248659492e-01+1.3011050591e-17j, + -7.0887580514e-02-4.3406124800e-18j, + 0.0000000000e+00+0.0000000000e+00j, + 5.9453174472e-02-7.5181618694e-18j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + 0.0000000000e+00+0.0000000000e+00j, + -1.3648000360e-01+0.0000000000e+00j]]]) + + eigenvalues_true = np.array([[-27.033615 , -10.638821 , -7.797419 , -7.7974143, -3.1536958, + -3.1536944, -0.7693957, -0.312297 ], + [-22.924177 , -14.165403 , -7.9399633, -7.867427 , -3.712445 , + -3.0836837, -3.0111492, 2.0478976]], dtype=np.float32) + EF_true = -5.754929542541504 + + checkfile = f'{root_directory}/dptb/tests/data/hBN/checkpoint/best_nnsk.pth' + structname = f'{root_directory}/dptb/tests/data/hBN/hBN.vasp' + + proj_atom_anglr_m = {"N":["s","p"],"B":["s","p"]} + proj_atom_neles = {"N":5,"B":3} + CutOff =2 + kpoints_list = np.array([[0, 0, 0], [0.5, 0.5, 0.5]]) + + with torch.no_grad(): + nnskapi = NNSKHost(checkpoint=checkfile) + nnskapi.register_plugin(InitSKModel()) + nnskapi.build() + nhrk = NN2HRK(apihost=nnskapi, mode='nnsk') + + struct = BaseStruct(atom=structname,format='vasp', onsitemode = nnskapi.model_config['onsitemode'], + cutoff=CutOff,proj_atom_anglr_m=proj_atom_anglr_m,proj_atom_neles=proj_atom_neles) + _, _ = struct.get_bond() + + nhrk.update_struct(struct) + allbonds, hamil_blocks, overlap_blocks = nhrk.get_HR() + + assert overlap_blocks is None + assert torch.equal(allbonds, allbonds_true) + assert len(hamil_blocks) == len(hamil_blocks_true) + for i in range(len(hamil_blocks)): + assert (hamil_blocks[i] - hamil_blocks_true[i] < 1e-8).all() + + hkmat, skmat = nhrk.get_HK(kpoints = kpoints_list) + + assert (torch.abs(hkmat - hkmat_true) < 1e-8).all() + assert hkmat.shape == skmat.shape + assert hkmat.shape == (2, 8, 8) + + skmat_true = torch.eye(8, dtype=torch.complex64).unsqueeze(0).repeat(2, 1, 1) + assert (torch.abs(skmat - skmat_true) < 1e-8).all() + + eigenvalues,EF = nhrk.get_eigenvalues(kpoints = kpoints_list) + + assert (eigenvalues_true - eigenvalues < 1e-5).all() + assert (EF_true - EF < 1e-5).all() + + eigenvalues,EF, eigvecks = nhrk.get_eigenvalues(kpoints = kpoints_list,if_eigvec = True) + + assert (eigenvalues_true - eigenvalues < 1e-5).all() + assert (EF_true - EF < 1e-5).all() + assert eigvecks.shape == (2, 8, 8) + + +def test_nnsk_nn2hrk_nrl(root_directory): + allbonds_true = torch.tensor([[14, 0, 14, 0, 0, 0, 0], + [14, 1, 14, 1, 0, 0, 0], + [14, 0, 14, 1, -1, 0, 0], + [14, 0, 14, 1, 0, -1, 0], + [14, 0, 14, 1, 0, 0, 0], + [14, 0, 14, 1, 0, 0, -1]]) + + hamil_blocks_true = [torch.tensor([[-0.1307418197, 0.0000000000, 0.0000000000, 0.0000000000], + [ 0.0000000000, 0.4017920196, 0.0000000000, 0.0000000000], + [ 0.0000000000, 0.0000000000, 0.4017920196, 0.0000000000], + [ 0.0000000000, 0.0000000000, 0.0000000000, 0.4017920196]]), + torch.tensor([[-0.1307418197, 0.0000000000, 0.0000000000, 0.0000000000], + [ 0.0000000000, 0.4017920196, 0.0000000000, 0.0000000000], + [ 0.0000000000, 0.0000000000, 0.4017920196, 0.0000000000], + [ 0.0000000000, 0.0000000000, 0.0000000000, 0.4017920196]]), + torch.tensor([[-0.1368636191, -0.0580061898, -0.0580061898, 0.0580061898], + [ 0.0580061898, -0.0047929958, 0.0556640439, -0.0556640439], + [ 0.0580061898, 0.0556640439, -0.0047929958, -0.0556640439], + [-0.0580061898, -0.0556640439, -0.0556640439, -0.0047929958]]), + torch.tensor([[-0.1368636191, 0.0580061898, -0.0580061898, -0.0580061898], + [-0.0580061898, -0.0047929958, -0.0556640439, -0.0556640439], + [ 0.0580061898, -0.0556640439, -0.0047929958, 0.0556640439], + [ 0.0580061898, -0.0556640439, 0.0556640439, -0.0047929958]]), + torch.tensor([[-0.1368636191, 0.0580061898, 0.0580061898, 0.0580061898], + [-0.0580061898, -0.0047929958, 0.0556640439, 0.0556640439], + [-0.0580061898, 0.0556640439, -0.0047929958, 0.0556640439], + [-0.0580061898, 0.0556640439, 0.0556640439, -0.0047929958]]), + torch.tensor([[-0.1368636191, -0.0580061898, 0.0580061898, -0.0580061898], + [ 0.0580061898, -0.0047929958, -0.0556640439, 0.0556640439], + [-0.0580061898, -0.0556640439, -0.0047929958, -0.0556640439], + [ 0.0580061898, 0.0556640439, -0.0556640439, -0.0047929958]])] + + overlap_blocks_true = [torch.tensor([[1., 0., 0., 0.], + [0., 1., 0., 0.], + [0., 0., 1., 0.], + [0., 0., 0., 1.]]), + torch.tensor([[1., 0., 0., 0.], + [0., 1., 0., 0.], + [0., 0., 1., 0.], + [0., 0., 0., 1.]]), + torch.tensor([[ 0.1397575587, 0.1073209718, 0.1073209718, -0.1073209718], + [-0.1073209718, -0.0225201398, -0.0961020365, 0.0961020365], + [-0.1073209718, -0.0961020365, -0.0225201398, 0.0961020365], + [ 0.1073209718, 0.0961020365, 0.0961020365, -0.0225201398]]), + torch.tensor([[ 0.1397575587, -0.1073209718, 0.1073209718, 0.1073209718], + [ 0.1073209718, -0.0225201398, 0.0961020365, 0.0961020365], + [-0.1073209718, 0.0961020365, -0.0225201398, -0.0961020365], + [-0.1073209718, 0.0961020365, -0.0961020365, -0.0225201398]]), + torch.tensor([[ 0.1397575587, -0.1073209718, -0.1073209718, -0.1073209718], + [ 0.1073209718, -0.0225201398, -0.0961020365, -0.0961020365], + [ 0.1073209718, -0.0961020365, -0.0225201398, -0.0961020365], + [ 0.1073209718, -0.0961020365, -0.0961020365, -0.0225201398]]), + torch.tensor([[ 0.1397575587, 0.1073209718, -0.1073209718, 0.1073209718], + [-0.1073209718, -0.0225201398, 0.0961020365, -0.0961020365], + [ 0.1073209718, 0.0961020365, -0.0225201398, 0.0961020365], + [-0.1073209718, -0.0961020365, 0.0961020365, -0.0225201398]])] + + hkmat_true = torch.tensor([[[-0.1307418197+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.5474544764+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.4017920196+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, -0.0191719830+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.4017920196+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.0191719830+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.4017920196+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, -0.0191719830+0.0000000000e+00j], + [-0.5474544764+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.1307418197+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, -0.0191719830+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.4017920196+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.0191719830+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.4017920196+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, -0.0191719830+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.4017920196+0.0000000000e+00j]], + + [[-0.1307418197+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.2737272382-5.0282880069e-17j, 0.1160123795-7.1037096410e-18j, + 0.1160123721-7.1037096410e-18j, 0.1160123795-7.1037096410e-18j], + [ 0.0000000000+0.0000000000e+00j, 0.4017920196+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.1160123795+7.1037096410e-18j, 0.0095859915-1.7609182180e-18j, + 0.1113280877-6.8168798005e-18j, 0.1113280803-6.8168798005e-18j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.4017920196+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.1160123721+7.1037096410e-18j, 0.1113280877-6.8168798005e-18j, + 0.0095859915-1.7609182180e-18j, 0.1113280877-6.8168798005e-18j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.4017920196+0.0000000000e+00j, + -0.1160123795+7.1037096410e-18j, 0.1113280803-6.8168798005e-18j, + 0.1113280877-6.8168798005e-18j, 0.0095859915-1.7609182180e-18j], + [ 0.2737272382+5.0282880069e-17j, -0.1160123795-7.1037096410e-18j, + -0.1160123721-7.1037096410e-18j, -0.1160123795-7.1037096410e-18j, + -0.1307418197+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.1160123795+7.1037096410e-18j, 0.0095859915+1.7609182180e-18j, + 0.1113280877+6.8168798005e-18j, 0.1113280803+6.8168798005e-18j, + 0.0000000000+0.0000000000e+00j, 0.4017920196+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.1160123721+7.1037096410e-18j, 0.1113280877+6.8168798005e-18j, + 0.0095859915+1.7609182180e-18j, 0.1113280877+6.8168798005e-18j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.4017920196+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.1160123795+7.1037096410e-18j, 0.1113280803+6.8168798005e-18j, + 0.1113280877+6.8168798005e-18j, 0.0095859915+1.7609182180e-18j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.4017920196+0.0000000000e+00j]]]) + + skmat_true = torch.tensor([[[ 1.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.5590302348+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 1.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, -0.0900805593+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 1.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.0900805593+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 1.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, -0.0900805593+0.0000000000e+00j], + [ 0.5590302348+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 1.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, -0.0900805593+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 1.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.0900805593+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 1.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, -0.0900805593+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 1.0000000000+0.0000000000e+00j]], + + [[ 1.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + -0.2795151174+5.1346098324e-17j, -0.2146419436+1.3143028912e-17j, + -0.2146419585+1.3143028912e-17j, -0.2146419436+1.3143028912e-17j], + [ 0.0000000000+0.0000000000e+00j, 1.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.2146419436-1.3143028912e-17j, 0.0450402796-8.2737657164e-18j, + -0.1922040731+1.1769105903e-17j, -0.1922040880+1.1769105903e-17j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 1.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.2146419585-1.3143028912e-17j, -0.1922040731+1.1769105903e-17j, + 0.0450402796-8.2737657164e-18j, -0.1922040731+1.1769105903e-17j], + [ 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 1.0000000000+0.0000000000e+00j, + 0.2146419436-1.3143028912e-17j, -0.1922040880+1.1769105903e-17j, + -0.1922040731+1.1769105903e-17j, 0.0450402796-8.2737657164e-18j], + [-0.2795151174-5.1346098324e-17j, 0.2146419436+1.3143028912e-17j, + 0.2146419585+1.3143028912e-17j, 0.2146419436+1.3143028912e-17j, + 1.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [-0.2146419436-1.3143028912e-17j, 0.0450402796+8.2737657164e-18j, + -0.1922040731-1.1769105903e-17j, -0.1922040880-1.1769105903e-17j, + 0.0000000000+0.0000000000e+00j, 1.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [-0.2146419585-1.3143028912e-17j, -0.1922040731-1.1769105903e-17j, + 0.0450402796+8.2737657164e-18j, -0.1922040731-1.1769105903e-17j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 1.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j], + [-0.2146419436-1.3143028912e-17j, -0.1922040880-1.1769105903e-17j, + -0.1922040731-1.1769105903e-17j, 0.0450402796+8.2737657164e-18j, + 0.0000000000+0.0000000000e+00j, 0.0000000000+0.0000000000e+00j, + 0.0000000000+0.0000000000e+00j, 1.0000000000+0.0000000000e+00j]]]) + + eigenvalues_true = np.array([[-5.918621 , 5.254193 , 5.2541933 , 5.2541933 , 5.7211637 , + 5.721164 , 5.7211647 , 12.857235 ], + [-4.383606 , -0.44771674, 3.2995718 , 3.299575 , 8.068163 , + 8.981795 , 8.981799 , 17.727243 ]], dtype=np.float32) + EF_true = 5.487678527832031 + + checkfile = f'{root_directory}/examples/NRL-TB/silicon/ckpt/nrl_ckpt.pth' + proj_atom_anglr_m = {"Si":["3s","3p"]} + proj_atom_neles = {"Si":4} + CutOff = 3 + kpoints_list = np.array([[0, 0, 0], [0.5, 0.5, 0.5]]) + structname = f'{root_directory}/examples/NRL-TB/silicon/data/silicon.vasp' + struct = BaseStruct(atom=structname,format='vasp', onsitemode = 'NRL', + cutoff=CutOff,proj_atom_anglr_m=proj_atom_anglr_m,proj_atom_neles=proj_atom_neles) + _, _ = struct.get_bond() + + with torch.no_grad(): + nnskapi = NNSKHost(checkpoint=checkfile) + nnskapi.register_plugin(InitSKModel()) + nnskapi.build() + nhrk = NN2HRK(apihost=nnskapi, mode='nnsk') + nhrk.update_struct(struct) + allbonds, hamil_blocks, overlap_blocks = nhrk.get_HR() + + assert torch.equal(allbonds, allbonds_true) + assert len(hamil_blocks) == len(hamil_blocks_true) + assert len(overlap_blocks) == len(overlap_blocks_true) + assert len(hamil_blocks) == len(overlap_blocks) + for i in range(len(hamil_blocks)): + assert (hamil_blocks[i] - hamil_blocks_true[i] < 1e-8).all() + assert (overlap_blocks[i] - overlap_blocks_true[i] < 1e-8).all() + + hkmat, skmat = nhrk.get_HK(kpoints = kpoints_list) + + assert (torch.abs(hkmat - hkmat_true) < 1e-8).all() + assert (torch.abs(skmat - skmat_true) < 1e-8).all() + assert hkmat.shape == skmat.shape + assert hkmat.shape == (2, 8, 8) + + eigenvalues,EF = nhrk.get_eigenvalues(kpoints = kpoints_list) + + assert (eigenvalues_true - eigenvalues < 1e-5).all() + assert (EF_true - EF < 1e-5).all() + + eigenvalues,EF, eigvecks = nhrk.get_eigenvalues(kpoints = kpoints_list,if_eigvec = True) + + assert (eigenvalues_true - eigenvalues < 1e-5).all() + assert (EF_true - EF < 1e-5).all() + assert eigvecks.shape == (2, 8, 8) + + From e400dbeae64a7abe0563bab8bb6d05370df640d1 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sun, 8 Oct 2023 22:48:22 +0800 Subject: [PATCH 42/63] [fix] fix initinit_dptb.py For init_correction_model for NRL TB json model. --- dptb/plugins/init_dptb.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dptb/plugins/init_dptb.py b/dptb/plugins/init_dptb.py index b5d1054d..695c8d42 100644 --- a/dptb/plugins/init_dptb.py +++ b/dptb/plugins/init_dptb.py @@ -200,7 +200,7 @@ def init_correction_model(self, **options): elif modeltype == "json": # 只用一个文件包含所有的键积分参数: - json_model_types = ["onsite", "hopping","soc"] + json_model_types = ["onsite", "hopping", "overlap", "soc"] assert len(checkpoint) ==1 json_dict = j_loader(checkpoint[0]) assert 'onsite' in json_dict, "onsite paras is not in the json file, or key err, check the key onsite in json fle" @@ -216,6 +216,12 @@ def init_correction_model(self, **options): json_model_i[itype] = torch.tensor(json_dict[ikey][itype],dtype=dtype,device=device) json_model_list[ikey] = json_model_i + assert 'onsite' in json_model_list and 'hopping' in json_model_list, "onsite and hopping must be in json_model_list" + if 'overlap' in json_model_list: + for ikey in json_model_list['hopping']: + json_model_list['hopping'][ikey] = torch.cat((json_model_list['hopping'][ikey],json_model_list['overlap'][ikey]),dim=0) + json_model_list.pop('overlap') + num_hopping_hidden = 1 num_onsite_hidden = 1 num_soc_hidden = 1 From 8a6b4eb434a01710d60b4d80c393e3e02970c8bc Mon Sep 17 00:00:00 2001 From: qqgu Date: Sun, 8 Oct 2023 22:51:47 +0800 Subject: [PATCH 43/63] =?UTF-8?q?=F0=9F=A7=AA=20test(test=5Fall=20):=20add?= =?UTF-8?q?=20test=20for=20train/tester=5Fnnsk=20and=20dptb=20for=20NRL=20?= =?UTF-8?q?model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dptb/tests/data/nrl/input_nrl.json | 61 ++++++++++++ dptb/tests/data/nrl/input_nrl_test.json | 45 +++++++++ dptb/tests/test_all.py | 102 ++++++++++++++++++++ examples/NRL-TB/silicon/input_nrl_test.json | 45 +++++++++ 4 files changed, 253 insertions(+) create mode 100644 dptb/tests/data/nrl/input_nrl.json create mode 100644 dptb/tests/data/nrl/input_nrl_test.json create mode 100644 examples/NRL-TB/silicon/input_nrl_test.json diff --git a/dptb/tests/data/nrl/input_nrl.json b/dptb/tests/data/nrl/input_nrl.json new file mode 100644 index 00000000..3afd0691 --- /dev/null +++ b/dptb/tests/data/nrl/input_nrl.json @@ -0,0 +1,61 @@ +{ + "common_options": { + "unit": "Ry", + "onsitemode": "NRL", + "onsite_cutoff": 6.61475, + "bond_cutoff": 5.0, + "env_cutoff": 4.1, + "atomtype": [ + "Si" + ], + "proj_atom_neles": { + "Si": 4 + }, + "proj_atom_anglr_m": { + "Si": [ + "3s", + "3p" + ] + }, + "overlap": true + }, + "train_options": { + "seed":120478, + "num_epoch": 2, + "optimizer": {"lr":1e-3} + }, + "data_options": { + "use_reference": true, + "train": { + "batch_size": 1, + "path": "./examples/NRL-TB/silicon/data", + "prefix": "kpath_spk" + }, + "validation": { + "batch_size": 1, + "path": "./examples/NRL-TB/silicon/data", + "prefix": "kpath_spk" + }, + "reference": { + "batch_size": 1, + "path": "./examples/NRL-TB/silicon/data", + "prefix": "kpath_spk" + } + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1 + }, + "skfunction": { + "sk_cutoff": 6.61475, + "sk_decay_w": 0.26459, + "skformula": "NRL" + }, + "onsitefuncion":{ + "onsite_func_cutoff": 6.61475, + "onsite_func_decay_w": 0.26459, + "onsite_func_lambda":1.5170852322629031 + } + } +} diff --git a/dptb/tests/data/nrl/input_nrl_test.json b/dptb/tests/data/nrl/input_nrl_test.json new file mode 100644 index 00000000..4c874d33 --- /dev/null +++ b/dptb/tests/data/nrl/input_nrl_test.json @@ -0,0 +1,45 @@ +{ + "common_options": { + "unit": "Ry", + "onsitemode": "NRL", + "onsite_cutoff": 6.61475, + "bond_cutoff": 5.0, + "env_cutoff": 4.1, + "atomtype": [ + "Si" + ], + "proj_atom_neles": { + "Si": 4 + }, + "proj_atom_anglr_m": { + "Si": [ + "3s", + "3p" + ] + }, + "overlap": true + }, + "data_options": { + "test": { + "batch_size": 1, + "path": "./examples/NRL-TB/silicon/data", + "prefix": "kpath_spk" + } + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1 + }, + "skfunction": { + "sk_cutoff": 6.61475, + "sk_decay_w": 0.26459, + "skformula": "NRL" + }, + "onsitefuncion":{ + "onsite_func_cutoff": 6.61475, + "onsite_func_decay_w": 0.26459, + "onsite_func_lambda":1.5170852322629031 + } + } +} diff --git a/dptb/tests/test_all.py b/dptb/tests/test_all.py index 001fa976..7e97a019 100644 --- a/dptb/tests/test_all.py +++ b/dptb/tests/test_all.py @@ -14,6 +14,11 @@ test_data_path = os.path.join(Path(os.path.abspath(__file__)).parent, "data/") +INPUT_nnsk_nrl = os.path.join(Path(os.path.abspath(__file__)).parent, "data/nrl/input_nrl.json") +INPUT_nnsk_nrl_test = os.path.join(Path(os.path.abspath(__file__)).parent, "data/nrl/input_nrl_test.json") +ckpt_nnsk_nrl_path = os.path.join(Path(os.path.abspath(__file__)).parent, "../../examples/NRL-TB/silicon/ckpt") + + log = logging.getLogger(__name__) def test_train(): @@ -89,6 +94,35 @@ def test_train_sk_init_model(): use_correction=False, ) +def test_train_sk_init_model_nrl(): + train( + INPUT=INPUT_nnsk_nrl, + init_model=ckpt_nnsk_nrl_path+"/nrl_ckpt.pth", + restart=None, + freeze=False, + train_soc=False, + output=test_data_path+"/test_all", + log_level=2, + log_path=None, + train_sk=True, + use_correction=False, + ) + +def test_train_sk_init_model_nrl_json(): + train( + INPUT=INPUT_nnsk_nrl, + init_model=ckpt_nnsk_nrl_path+"/nrl_ckpt.json", + restart=None, + freeze=False, + train_soc=False, + output=test_data_path+"/test_all", + log_level=2, + log_path=None, + train_sk=True, + use_correction=False, + ) + + def test_train_sk_restart_model(): train( INPUT=INPUT, @@ -103,6 +137,21 @@ def test_train_sk_restart_model(): use_correction=False, ) +def test_train_sk_restart_model_nrl(): + train( + INPUT=INPUT_nnsk_nrl, + init_model=None, + restart=ckpt_nnsk_nrl_path+"/nrl_ckpt.pth", + freeze=False, + train_soc=False, + output=test_data_path+"/test_all", + log_level=2, + log_path=None, + train_sk=True, + use_correction=False, + ) + + def test_train_crt(): train( @@ -118,6 +167,37 @@ def test_train_crt(): use_correction=test_data_path+"/hBN/checkpoint/best_nnsk.pth", ) +def test_train_crt_nrl(): + + train( + INPUT=INPUT_nnsk_nrl, + init_model=None, + restart=None, + freeze=False, + train_soc=False, + output=test_data_path+"/test_all", + log_level=2, + log_path=None, + train_sk=False, + use_correction=ckpt_nnsk_nrl_path+"/nrl_ckpt.pth", + ) + +def test_train_crt_nrl_json(): + + train( + INPUT=INPUT_nnsk_nrl, + init_model=None, + restart=None, + freeze=False, + train_soc=False, + output=test_data_path+"/test_all", + log_level=2, + log_path=None, + train_sk=False, + use_correction=ckpt_nnsk_nrl_path+"/nrl_ckpt.json", + ) + + def test_train_init_model_crt(): train( INPUT=INPUT, @@ -159,6 +239,28 @@ def test_tester_nnsk(): use_correction=False, ) +def test_tester_nnsk_nrl(): + _test( + INPUT=INPUT_nnsk_nrl_test, + init_model=ckpt_nnsk_nrl_path+"/nrl_ckpt.pth", + output=test_data_path+"/test_all", + log_level=2, + log_path=None, + test_sk=True, + use_correction=False, + ) + +def test_tester_nnsk_nrl_json(): + _test( + INPUT=INPUT_nnsk_nrl_test, + init_model=ckpt_nnsk_nrl_path+"/nrl_ckpt.json", + output=test_data_path+"/test_all", + log_level=2, + log_path=None, + test_sk=True, + use_correction=False, + ) + def test_tester_dptb(): _test( INPUT=INPUT_dptb_test, diff --git a/examples/NRL-TB/silicon/input_nrl_test.json b/examples/NRL-TB/silicon/input_nrl_test.json new file mode 100644 index 00000000..1563d0dc --- /dev/null +++ b/examples/NRL-TB/silicon/input_nrl_test.json @@ -0,0 +1,45 @@ +{ + "common_options": { + "unit": "Ry", + "onsitemode": "NRL", + "onsite_cutoff": 6.61475, + "bond_cutoff": 5.0, + "env_cutoff": 4.1, + "atomtype": [ + "Si" + ], + "proj_atom_neles": { + "Si": 4 + }, + "proj_atom_anglr_m": { + "Si": [ + "3s", + "3p" + ] + }, + "overlap": true + }, + "data_options": { + "test": { + "batch_size": 1, + "path": "./data", + "prefix": "kpath_spk" + } + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1 + }, + "skfunction": { + "sk_cutoff": 6.61475, + "sk_decay_w": 0.26459, + "skformula": "NRL" + }, + "onsitefuncion":{ + "onsite_func_cutoff": 6.61475, + "onsite_func_decay_w": 0.26459, + "onsite_func_lambda":1.5170852322629031 + } + } +} From 3dfee9b194ea89ca0b76b5020e3d60e5ec4bdc57 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sun, 8 Oct 2023 23:07:02 +0800 Subject: [PATCH 44/63] =?UTF-8?q?=F0=9F=A7=AA=20test(teat=5Fapihost):=20ad?= =?UTF-8?q?d=20test=20for=20postrun=20of=20NRL=20TB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dptb/tests/data/nrl/band_jsonckpt.json | 50 ++++++++++++++++++++++++++ dptb/tests/data/nrl/band_pthckpt.json | 21 +++++++++++ dptb/tests/test_apihost.py | 27 +++++++++++++- 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 dptb/tests/data/nrl/band_jsonckpt.json create mode 100644 dptb/tests/data/nrl/band_pthckpt.json diff --git a/dptb/tests/data/nrl/band_jsonckpt.json b/dptb/tests/data/nrl/band_jsonckpt.json new file mode 100644 index 00000000..db2141bb --- /dev/null +++ b/dptb/tests/data/nrl/band_jsonckpt.json @@ -0,0 +1,50 @@ +{ + "common_options": { + "unit": "Ry", + "onsitemode": "NRL", + "onsite_cutoff": 6.61475, + "bond_cutoff": 5.0, + "env_cutoff": 4.1, + "atomtype": ["Si"], + "proj_atom_neles": {"Si": 4}, + "proj_atom_anglr_m": { + "Si": ["3s","3p"] + }, + "overlap": true + }, + "model_options": { + "sknetwork": { + "sk_hop_nhidden": 1, + "sk_onsite_nhidden": 1 + }, + "skfunction": { + "sk_cutoff": 6.61475, + "sk_decay_w": 0.26459, + "skformula": "NRL" + }, + "onsitefuncion":{ + "onsite_func_cutoff": 6.61475, + "onsite_func_decay_w": 0.26459, + "onsite_func_lambda":1.5170852322629031 + } + }, + "structure":"./examples/NRL-TB/silicon/data/silicon.vasp", + "task_options": { + "task": "band", + "kline_type":"abacus", + "kpath":[[0.0000000000, 0.0000000000, 0.0000000000, 50], + [0.5000000000, 0.0000000000, 0.5000000000, 50], + [0.6250000000, 0.2500000000, 0.6250000000, 1], + [0.3750000000, 0.3750000000, 0.7500000000, 50], + [0.0000000000, 0.0000000000, 0.0000000000, 50], + [0.5000000000, 0.5000000000, 0.5000000000, 50], + [0.5000000000, 0.2500000000, 0.7500000000, 50], + [0.5000000000, 0.0000000000, 0.5000000000, 1 ] + ], + "klabels":["G","X","X/U","K","G","L","W","X"], + "E_fermi":5.78493595123291, + "emin":-15, + "emax":10, + "ref_band": "./examples/NRL-TB/silicon/data/kpath.0/eigs.npy" + } +} diff --git a/dptb/tests/data/nrl/band_pthckpt.json b/dptb/tests/data/nrl/band_pthckpt.json new file mode 100644 index 00000000..4d0583bf --- /dev/null +++ b/dptb/tests/data/nrl/band_pthckpt.json @@ -0,0 +1,21 @@ +{ + "structure":"./examples/NRL-TB/silicon/data/silicon.vasp", + "task_options": { + "task": "band", + "kline_type":"abacus", + "kpath":[[0.0000000000, 0.0000000000, 0.0000000000, 50], + [0.5000000000, 0.0000000000, 0.5000000000, 50], + [0.6250000000, 0.2500000000, 0.6250000000, 1], + [0.3750000000, 0.3750000000, 0.7500000000, 50], + [0.0000000000, 0.0000000000, 0.0000000000, 50], + [0.5000000000, 0.5000000000, 0.5000000000, 50], + [0.5000000000, 0.2500000000, 0.7500000000, 50], + [0.5000000000, 0.0000000000, 0.5000000000, 1 ] + ], + "klabels":["G","X","X/U","K","G","L","W","X"], + "E_fermi":6.05989933013916, + "emin":-15, + "emax":10, + "ref_band": "./examples/NRL-TB/silicon/data/kpath.0/eigs.npy" + } +} \ No newline at end of file diff --git a/dptb/tests/test_apihost.py b/dptb/tests/test_apihost.py index 869061ba..001f8239 100644 --- a/dptb/tests/test_apihost.py +++ b/dptb/tests/test_apihost.py @@ -63,7 +63,6 @@ def test_dptb2HRK(root_directory): nnHrk = NN2HRK(apihost=dptbapi, mode='dptb') - def test_run_nnsk(root_directory): run( INPUT=f'{root_directory}/dptb/tests/data/post_nnsk.json', @@ -77,6 +76,32 @@ def test_run_nnsk(root_directory): use_correction=None ) +def test_run_band_nnsk_nrl(root_directory): + run( + INPUT=f'{root_directory}/dptb/tests/data/nrl/band_pthckpt.json', + model_ckpt=None, + output=f"{root_directory}/dptb/tests/data/postrun", + init_model=f"{root_directory}/examples/NRL-TB/silicon/ckpt/nrl_ckpt.pth", + run_sk=True, + structure=None, + log_level=2, + log_path=None, + use_correction=None + ) + +def test_run_band_nnsk_nrl_json(root_directory): + run( + INPUT=f'{root_directory}/dptb/tests/data/nrl/band_jsonckpt.json', + model_ckpt=None, + output=f"{root_directory}/dptb/tests/data/postrun", + init_model=f"{root_directory}/examples/NRL-TB/silicon/ckpt/nrl_ckpt.json", + run_sk=True, + structure=None, + log_level=2, + log_path=None, + use_correction=None + ) + def test_run_dptb(root_directory): run( INPUT=f'{root_directory}/dptb/tests/data/post_dptb.json', From b0b89f8ab232845085ae363b17c9cbfd13c8c305 Mon Sep 17 00:00:00 2001 From: qqgu Date: Sun, 8 Oct 2023 23:39:44 +0800 Subject: [PATCH 45/63] =?UTF-8?q?=F0=9F=A7=AA=20test:=20update=20test=5Fsk?= =?UTF-8?q?Param.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit remove the return in the test function --- dptb/tests/test_skParam.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dptb/tests/test_skParam.py b/dptb/tests/test_skParam.py index 439e1733..a8272171 100644 --- a/dptb/tests/test_skParam.py +++ b/dptb/tests/test_skParam.py @@ -21,7 +21,6 @@ def test_sk_init(root_directory): proj_atom_anglr_m = {'C':['s','p'],'H':['s']} skfiles = sk_init(proj_atom_anglr_m=proj_atom_anglr_m, sk_file_path=sk_file_path) assert len(skfiles.keys()) == 4 - return skfiles def test_read_skfiles(root_directory): sk_file_path = root_directory + '/examples/slakos' From e03b014bf3ecfc9522a6886e349fdcfc390930cf Mon Sep 17 00:00:00 2001 From: qqgu Date: Sun, 8 Oct 2023 23:41:53 +0800 Subject: [PATCH 46/63] =?UTF-8?q?=F0=9F=A6=84=20refactor:=20update=20make?= =?UTF-8?q?=5Fkpoints.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit change From rev_latt =(np.matrix(structase.cell).I.T) kdiff_cart = np.asarray(kdiff * rev_latt) To: rev_latt = np.linalg.inv(np.array(structase.cell).T) kdiff_cart = np.dot(kdiff, rev_latt) --- dptb/utils/make_kpoints.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dptb/utils/make_kpoints.py b/dptb/utils/make_kpoints.py index b91ad3a8..68019170 100644 --- a/dptb/utils/make_kpoints.py +++ b/dptb/utils/make_kpoints.py @@ -207,9 +207,11 @@ def abacus_kpath(structase, kpath): kpath_list = np.concatenate(kpath_list,axis=0) #rev_latt = 2*np.pi*np.mat(ase_struct.cell).I - rev_latt = np.mat(structase.cell).I.T + # rev_latt =(np.matrix(structase.cell).I.T) + rev_latt = np.linalg.inv(np.array(structase.cell).T) kdiff = kpoints[1:] - kpoints[:-1] - kdiff_cart = np.asarray(kdiff * rev_latt) + # kdiff_cart = np.asarray(kdiff * rev_latt) + kdiff_cart = np.dot(kdiff, rev_latt) kdist = np.linalg.norm(kdiff_cart,axis=1) kdist_list = [] @@ -231,6 +233,7 @@ def abacus_kpath(structase, kpath): return kpath_list, kdist_list, high_sym_kpoints + def ase_kpath(structase, pathstr:str, total_nkpoints:int): '''> The function `ase_kpath` takes in a structure, a string of high symmetry points, and the total number of k-points to be used in the band structure calculation. It returns a list of k-points, a From df86a35c99c16938840557788b0be17bbb3ddcb3 Mon Sep 17 00:00:00 2001 From: qqgu Date: Mon, 9 Oct 2023 00:53:52 +0800 Subject: [PATCH 47/63] update formula.py and test_skformula.py --- dptb/nnsktb/formula.py | 5 ++++ dptb/tests/test_skformula.py | 47 +++++++++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/dptb/nnsktb/formula.py b/dptb/nnsktb/formula.py index b8e97ddd..82acfbde 100644 --- a/dptb/nnsktb/formula.py +++ b/dptb/nnsktb/formula.py @@ -159,11 +159,16 @@ def NRL_OVERLAP(self, rij, paraArray, paraconst, rcut:th.float32 = th.tensor(6), """ if isinstance(paraArray, list): paraArray = th.tensor(paraArray) + if isinstance(paraconst, list): + paraconst = th.tensor(paraconst) + assert len(paraArray.shape) in {2, 1}, 'paraArray should be a 2d tensor or 1d tensor' assert paraconst is not None, 'paraconst should not be None' assert len(paraconst.shape) in {2, 1}, 'paraconst should be a 2d tensor or 1d tensor' paraArray = paraArray.view(-1, self.num_paras) + paraconst = paraconst.view(-1, 1) + a, b, c, d = paraArray[:, 0], paraArray[:, 1], paraArray[:, 2], paraArray[:, 3] delta_ll = paraconst[:,0] diff --git a/dptb/tests/test_skformula.py b/dptb/tests/test_skformula.py index f6233c5c..0b047f25 100644 --- a/dptb/tests/test_skformula.py +++ b/dptb/tests/test_skformula.py @@ -10,8 +10,53 @@ def test_default_sk(): hij = skform.skhij(rij=1.0, paraArray=[2.0, 1.0, 1.0, 1.0]) assert torch.abs(hij - torch.tensor([0.7357589])) < 1e-6 + hij = skform.skhij(rij=1.0, paraArray=[[2.0, 1.0, 1.0, 1.0],[2.0, -1.0, 1.0, 1.0],[2.0, -1.0, -1.0, 1.0],[2.0, -1.0, -1.0, -1.0],[-2.0, -1.0, -1.0, -1.0]]) + assert (torch.abs(hij - torch.tensor([0.7357589,0.7357589,0.7357589,0.7357589,-0.7357589])) < 1e-6).all() + +def test_powerlow_sk(): + mode = 'powerlaw' + skform = SKFormula(functype=mode) + assert skform.num_paras == 2 + hij = skform.skhij(rij=1.0, iatomtype='Si',jatomtype='C', paraArray=[2.0, 1.0]) + hij1 = skform.skhij(rij=1.0, iatomtype='Si',jatomtype='C', paraArray=[2.0, -1.0]) + hij2 = skform.skhij(rij=1.0, iatomtype='Si',jatomtype='C', paraArray=[-2.0, -1.0]) + + assert torch.abs(hij - torch.tensor([8.0872249603])) < 1e-8 + assert torch.abs(hij1 - torch.tensor([8.0872249603])) < 1e-8 + assert torch.abs(hij2 - torch.tensor([-8.0872249603])) < 1e-8 + + hij = skform.skhij(rij=1.0, iatomtype='Si',jatomtype='C', paraArray=[[2.0, 1.0],[2.0, -1.0], [-2.0, -1.0]]) + assert (torch.abs(hij - torch.tensor([8.0872249603, 8.0872249603,-8.0872249603])) < 1e-6).all() + + +def test_NRL_sk(): + mode = 'NRL' + skform = SKFormula(functype=mode,overlap=False) + assert skform.num_paras == 4 + with pytest.raises(AssertionError) as exception_info: + assert hasattr(skform, 'overlap_num_paras') + + hij = skform.skhij(rij=1.0, paraArray=[2.0, 1.0, 1.0, 1.0]) + assert torch.abs(hij - torch.tensor([1.4715178013])) < 1e-8 hij = skform.skhij(rij=1.0, paraArray=[[2.0, 1.0, 1.0, 1.0],[2.0, 1.0, 1.0, 1.0]]) - assert (torch.abs(hij - torch.tensor([0.7357589,0.7357589])) < 1e-6).all() + assert (torch.abs(hij - torch.tensor([1.4715178013,1.4715178013])) < 1e-8 ).all() + + skform = SKFormula(functype=mode,overlap=True) + assert skform.num_paras == 4 + + hij = skform.skhij(rij=1.0, paraArray=[2.0, 1.0, 1.0, 1.0]) + assert torch.abs(hij - torch.tensor([1.4715178013])) < 1e-8 + hij = skform.skhij(rij=1.0, paraArray=[[2.0, 1.0, 1.0, 1.0],[2.0, 1.0, 1.0, 1.0]]) + assert (torch.abs(hij - torch.tensor([1.4715178013,1.4715178013])) < 1e-8 ).all() + + + assert skform.overlap_num_paras == 4 + + sij = skform.sksij(rij=1.0, paraconst=[1.0], paraArray=[2.0, 1.0, 1.0, 1.0]) + assert torch.abs(sij - torch.tensor([1.8393971920])) < 1e-8 + + sij = skform.sksij(rij=1.0,paraconst=[[1.0],[0.0]], paraArray=[[2.0, 1.0, 1.0, 1.0],[2.0, 1.0, 1.0, 1.0]]) + assert (torch.abs(sij - torch.tensor([1.8393971920,1.4715178013])) < 1e-8 ).all() def test_custom_sk(): mode='i am not a correct name' From 2b2c513d4ceb13782bcaf0c018191ebbeeb675be Mon Sep 17 00:00:00 2001 From: qqgu Date: Mon, 9 Oct 2023 23:42:07 +0800 Subject: [PATCH 48/63] test: create test_onsite_formula.py --- dptb/tests/test_onsite_formula.py | 44 +++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 dptb/tests/test_onsite_formula.py diff --git a/dptb/tests/test_onsite_formula.py b/dptb/tests/test_onsite_formula.py new file mode 100644 index 00000000..29e96cb9 --- /dev/null +++ b/dptb/tests/test_onsite_formula.py @@ -0,0 +1,44 @@ +import pytest +import torch +from dptb.nnsktb.onsite_formula import onsiteFormula + +def test_default_sk(): + onsiteform = onsiteFormula() + assert onsiteform.num_paras == 0 + assert onsiteform.functype == 'none' + +def test_uniform(): + mode = 'uniform' + skform = onsiteFormula(functype=mode) + assert skform.num_paras == 1 + + onsite_db = {'N':torch.tensor([1.0,2.0],dtype=torch.float64), 'B': torch.tensor([3.0,4.0],dtype=torch.float64)} + nn_onsite_paras = {'N':torch.tensor([0.1,0.20],dtype=torch.float64), 'B': torch.tensor([0.3,0.4],dtype=torch.float64)} + + onsite_N = skform.skEs(xtype='N',onsite_db=onsite_db, nn_onsite_paras=nn_onsite_paras) + onsite_B = skform.skEs(xtype='B',onsite_db=onsite_db, nn_onsite_paras=nn_onsite_paras) + + assert (torch.abs(onsite_N - torch.tensor([1.1,2.2],dtype=torch.float64)) < 1e-8).all() + assert (torch.abs(onsite_B - torch.tensor([3.3,4.4],dtype=torch.float64)) < 1e-8).all() + + +def test_NRL_onsite(): + mode = 'NRL' + with pytest.raises(TypeError) as exception_info: + onsiteFormula(functype=mode,overlap=True) + skform = onsiteFormula(functype=mode) + assert skform.num_paras == 4 + x_onsite_envs = torch.tensor([1.0,2.0,3.0,4.0],dtype=torch.float64) + nn_onsite_paras= torch.tensor([[2.0, 1.0, 1.0, 1.0],[2.0, 1.0, 1.0, 1.0]]) + onsiteE = skform.skEs(x_onsite_envs=x_onsite_envs, nn_onsite_paras=nn_onsite_paras) + assert (onsiteE - torch.tensor([3.4889900684, 3.4889900684])).abs().max() < 1e-8 + + +def test_custom_sk(): + mode='i am not a correct name' + with pytest.raises(ValueError) as exception_info: + onsiteFormula(mode) + + mode ='custom' + with pytest.raises(AssertionError) as exception_info: + onsiteFormula(mode) \ No newline at end of file From 5322713a4ab625210bd324da6743c0c74cee2f3e Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 10 Oct 2023 01:26:33 +0800 Subject: [PATCH 49/63] test: update test_index_map.py add test strain mapping --- dptb/tests/test_index_map.py | 37 +++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/dptb/tests/test_index_map.py b/dptb/tests/test_index_map.py index 13ee930a..d919715e 100644 --- a/dptb/tests/test_index_map.py +++ b/dptb/tests/test_index_map.py @@ -4,27 +4,50 @@ class TestIndexMap: envtype = ['N','B'] bondtype = ['N','B'] - proj_atom_anglr_m={'N':['2s','2p'],'B':['2s','2p']} + proj_atom_anglr_m={'N':['2s','2p'],'B':['3s','3p']} indmap = Index_Mapings(proj_atom_anglr_m=proj_atom_anglr_m) + def test_default_init (self): + indmap2 = Index_Mapings() + indmap2.update(proj_atom_anglr_m=self.proj_atom_anglr_m) + assert indmap2.AnglrMID == self.indmap.AnglrMID + assert indmap2.bondtype == self.indmap.bondtype + assert indmap2.ProjAnglrM == self.indmap.ProjAnglrM + def test_bond_mapings(self): bond_map, bond_num = self.indmap.Bond_Ind_Mapings() assert bond_map == {'N-N': {'2s-2s': [0], '2s-2p': [1], '2p-2s': [1], '2p-2p': [2, 3]}, - 'N-B': {'2s-2s': [0], '2s-2p': [1], '2p-2s': [2], '2p-2p': [3, 4]}, - 'B-N': {'2s-2s': [0], '2s-2p': [2], '2p-2s': [1], '2p-2p': [3, 4]}, - 'B-B': {'2s-2s': [0], '2s-2p': [1], '2p-2s': [1], '2p-2p': [2, 3]}} + 'N-B': {'2s-3s': [0], '2s-3p': [1], '2p-3s': [2], '2p-3p': [3, 4]}, + 'B-N': {'3s-2s': [0], '3s-2p': [2], '3p-2s': [1], '3p-2p': [3, 4]}, + 'B-B': {'3s-3s': [0], '3s-3p': [1], '3p-3s': [1], '3p-3p': [2, 3]}} assert bond_num == {'N-N': 4, 'N-B': 5, 'B-N': 5, 'B-B': 4} def test_onsite_mapings(self): _, _, onsite_map, onsite_num = self.indmap.Onsite_Ind_Mapings(onsitemode="uniform") - assert onsite_map == {'N': {'2s': [0], '2p': [1]}, 'B': {'2s': [0], '2p': [1]}} + assert onsite_map == {'N': {'2s': [0], '2p': [1]}, 'B': {'3s': [0], '3p': [1]}} assert onsite_num == {'N': 2, 'B': 2} + _, _, onsite_map, onsite_num = self.indmap.Onsite_Ind_Mapings(onsitemode="none") + assert onsite_map == {'N': {'2s': [0], '2p': [1]}, 'B': {'3s': [0], '3p': [1]}} + assert onsite_num == {'N': 2, 'B': 2} def test_onsite_split_mapings(self): _, _, onsite_map, onsite_num = self.indmap.Onsite_Ind_Mapings(onsitemode="split") - assert onsite_map == {'N': {'2s': [0], '2p': [1, 2, 3]}, 'B': {'2s': [0], '2p': [1, 2, 3]}} - assert onsite_num == {'N': 4, 'B': 4} \ No newline at end of file + assert onsite_map == {'N': {'2s': [0], '2p': [1, 2, 3]}, 'B': {'3s': [0], '3p': [1, 2, 3]}} + assert onsite_num == {'N': 4, 'B': 4} + + def test_onsite_strain_mapings(self): + with pytest.raises(AssertionError) as exception_info: + self.indmap.Onsite_Ind_Mapings(onsitemode="strain") + + onsite_strain_index_map, onsite_strain_num, onsite_index_map, onsite_num = self.indmap.Onsite_Ind_Mapings(onsitemode="strain",atomtype=['N','B']) + assert onsite_strain_index_map == {'N-N': {'2s-2s': [0], '2s-2p': [1], '2p-2s': [1], '2p-2p': [2, 3]}, + 'N-B': {'2s-2s': [0], '2s-2p': [1], '2p-2s': [1], '2p-2p': [2, 3]}, + 'B-N': {'3s-3s': [0], '3s-3p': [1], '3p-3s': [1], '3p-3p': [2, 3]}, + 'B-B': {'3s-3s': [0], '3s-3p': [1], '3p-3s': [1], '3p-3p': [2, 3]}} + assert onsite_strain_num == {'N-N': 4, 'N-B': 4, 'B-N': 4, 'B-B': 4} + assert onsite_index_map == {'N': {'2s': [0], '2p': [1]}, 'B': {'3s': [0], '3p': [1]}} + assert onsite_num == {'N': 2, 'B': 2} From 9df4896049299b08d8e7ad07e001f3fded087021 Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 10 Oct 2023 01:28:27 +0800 Subject: [PATCH 50/63] test: update test_index_map.py add test_onsite_nrl_mappings --- dptb/tests/test_index_map.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dptb/tests/test_index_map.py b/dptb/tests/test_index_map.py index d919715e..af429f67 100644 --- a/dptb/tests/test_index_map.py +++ b/dptb/tests/test_index_map.py @@ -51,3 +51,10 @@ def test_onsite_strain_mapings(self): assert onsite_strain_num == {'N-N': 4, 'N-B': 4, 'B-N': 4, 'B-B': 4} assert onsite_index_map == {'N': {'2s': [0], '2p': [1]}, 'B': {'3s': [0], '3p': [1]}} assert onsite_num == {'N': 2, 'B': 2} + + def test_onsite_nrl_mappings(self): + # since for now nrl use the same as uniform and none. + _, _, onsite_map, onsite_num = self.indmap.Onsite_Ind_Mapings(onsitemode="NRL") + + assert onsite_map == {'N': {'2s': [0], '2p': [1]}, 'B': {'3s': [0], '3p': [1]}} + assert onsite_num == {'N': 2, 'B': 2} \ No newline at end of file From 84b9d5c17ba3d93c017788e050f53b98cff9516f Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 10 Oct 2023 02:43:08 +0800 Subject: [PATCH 51/63] test: update test_index_map.py --- dptb/tests/test_index_map.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dptb/tests/test_index_map.py b/dptb/tests/test_index_map.py index af429f67..d317e664 100644 --- a/dptb/tests/test_index_map.py +++ b/dptb/tests/test_index_map.py @@ -52,6 +52,11 @@ def test_onsite_strain_mapings(self): assert onsite_index_map == {'N': {'2s': [0], '2p': [1]}, 'B': {'3s': [0], '3p': [1]}} assert onsite_num == {'N': 2, 'B': 2} + _, _, onsite_index_map_unifrom, onsite_num_uniform = self.indmap.Onsite_Ind_Mapings(onsitemode="uniform") + + assert onsite_index_map_unifrom == onsite_index_map + assert onsite_num_uniform == onsite_num + def test_onsite_nrl_mappings(self): # since for now nrl use the same as uniform and none. _, _, onsite_map, onsite_num = self.indmap.Onsite_Ind_Mapings(onsitemode="NRL") From d0be5b6c497f58b4926848dfbaae191e81f5ad0b Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 10 Oct 2023 02:43:44 +0800 Subject: [PATCH 52/63] test: update test_sknet.py add update test hopping onsite and soc for uniform strain and none mode. --- dptb/tests/test_sknet.py | 123 +++++++++++++++++++-------------------- 1 file changed, 60 insertions(+), 63 deletions(-) diff --git a/dptb/tests/test_sknet.py b/dptb/tests/test_sknet.py index cf2573d9..f34454d0 100644 --- a/dptb/tests/test_sknet.py +++ b/dptb/tests/test_sknet.py @@ -2,6 +2,7 @@ from dptb.nnsktb.skintTypes import all_onsite_ene_types, all_onsite_intgrl_types, all_skint_types import torch from dptb.utils.index_mapping import Index_Mapings +import pytest class TestSKnet: @@ -9,10 +10,9 @@ class TestSKnet: onsite_num = {'N':4,'B':3} bond_neurons = {'nhidden':5,'nout':4} onsite_neurons = {'nhidden':6,'nout':1} - onsite_strian_neurons = {'nhidden':6,'nout':4} - - onsite_num2 = {'N':2,'B':1} - + onsite_strian_neurons = {'nhidden':8,'nout':5} + soc_neurons = {'nhidden':6} + reducted_onsiteint_types = ['N-N-2s-2s-0', 'N-B-2s-2s-0', 'N-B-2s-2p-0', @@ -24,7 +24,7 @@ class TestSKnet: proj_atom_anglr_m = {'B':['2s'],'N':['2s','2p']} indexmap = Index_Mapings(proj_atom_anglr_m) bond_index_map, bond_num_hops = indexmap.Bond_Ind_Mapings() - onsite_strain_index_map, onsite_strain_num, onsite_index_map, onsite_num = indexmap.Onsite_Ind_Mapings(onsitemode='uniform',atomtype=['N','B']) + _, _, onsite_index_map, onsite_num = indexmap.Onsite_Ind_Mapings(onsitemode='uniform',atomtype=['N','B']) all_onsiteE_types_dict, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) all_skint_types_dict, reducted_skint_types, sk_bond_ind_dict = all_skint_types(bond_index_map=bond_index_map) @@ -34,27 +34,26 @@ class TestSKnet: modeluniform = SKNet(skint_types=reducted_skint_types, onsite_types=reduced_onsiteE_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, onsite_neurons=onsite_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='uniform') - soc_neurons = {'nhidden':6} - modelstrainsoc = SKNet(skint_types=reducted_skint_types, onsite_types=reducted_onsiteint_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, onsite_neurons=onsite_neurons, - soc_neurons=soc_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='strain') + modelnone= SKNet(skint_types=reducted_skint_types, onsite_types=reduced_onsiteE_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, + onsite_neurons=onsite_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='none') + + + modelstrainsoc = SKNet(skint_types=reducted_skint_types, onsite_types=reducted_onsiteint_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, + onsite_neurons=onsite_strian_neurons, soc_neurons=soc_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='strain') modeluniformsoc = SKNet(skint_types=reducted_skint_types, onsite_types=reduced_onsiteE_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, onsite_neurons=onsite_neurons,soc_neurons=soc_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='uniform') - + modelnonesoc= SKNet(skint_types=reducted_skint_types, onsite_types=reduced_onsiteE_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, + onsite_neurons=onsite_neurons, soc_neurons=soc_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='none') - bond_neurons = {'nhidden':5,'nout':4} - onsite_neurons = {'nhidden':6} - - + def _test_hopping(self,model): - def test_bond(self): - - paras = list(self.modeluniform.hopping_net.parameters()) + paras = list(model.hopping_net.parameters()) assert len(paras) == 2 assert paras[0].shape == torch.Size([len(self.reducted_skint_types), 1, self.bond_neurons['nhidden']]) assert paras[1].shape == torch.Size([len(self.reducted_skint_types), self.bond_neurons['nout'], self.bond_neurons['nhidden']]) - coeff, ovelap_coeff = self.modeluniform(mode='hopping') + coeff, ovelap_coeff = model(mode='hopping') assert len(coeff) == len(self.reducted_skint_types) if ovelap_coeff is not None: assert len(ovelap_coeff) == len(self.reducted_skint_types) @@ -62,11 +61,35 @@ def test_bond(self): assert ikey in self.reducted_skint_types assert coeff[ikey].shape == torch.Size([self.bond_neurons['nout']]) + def test_hopping(self): + self._test_hopping(model = self.modeluniform) + self._test_hopping(model = self.modelnone) + self._test_hopping(model = self.modelstrain) + self._test_hopping(model = self.modeluniformsoc) + self._test_hopping(model = self.modelstrainsoc) + self._test_hopping(model = self.modelnonesoc) + + + def test_onsite_none(self): + with pytest.raises(AttributeError) as exception_info: + self.modelnone.onsite_net() + + onsite_values, coeff = self.modelnone(mode = 'onsite') + assert onsite_values is None + assert coeff is None + + def test_onsite_uniform(self): - sknet = SKNet(skint_types=self.reducted_skint_types,onsite_types=self.reduced_onsiteE_types,soc_types=self.reduced_onsiteE_types,onsite_index_dict=self.onsiteE_ind_dict, - hopping_neurons=self.bond_neurons, onsite_neurons=self.onsite_neurons, onsitemode='uniform') - onsite_values, _ = sknet(mode = 'onsite') + paras = list(self.modeluniform.onsite_net.parameters()) + assert len(paras) == 2 + assert paras[0].shape == torch.Size([len(self.reduced_onsiteE_types), 1, self.onsite_neurons['nhidden']]) + assert paras[1].shape == torch.Size([len(self.reduced_onsiteE_types), 1, self.onsite_neurons['nhidden']]) + #sknet = SKNet(skint_types=self.reducted_skint_types,onsite_types=self.reduced_onsiteE_types,soc_types=self.reduced_onsiteE_types,onsite_index_dict=self.onsiteE_ind_dict, + # hopping_neurons=self.bond_neurons, onsite_neurons=self.onsite_neurons, onsitemode='uniform') + onsite_values, _ = self.modeluniform(mode = 'onsite') + + assert isinstance(onsite_values, dict) assert onsite_values['N'].shape == torch.Size([2]) assert onsite_values['B'].shape == torch.Size([1]) @@ -83,47 +106,21 @@ def test_onsite_strain(self): for ikey in coeff.keys(): assert ikey in self.reducted_onsiteint_types - assert coeff[ikey].shape == torch.Size([self.bond_neurons['nout']]) - - # def test_onsite_uniform_soc(self): - - # paras = list(self.modeluniformsoc.onsite_net.parameters()) - # assert len(paras) == 4 - # for ia in self.onsite_num2: - # paras = list(self.modeluniformsoc.onsite_net[ia].parameters()) - # assert len(paras) == 2 - # assert paras[0].shape == torch.Size([1, self.onsite_neurons['nhidden']]) - # assert paras[1].shape == torch.Size([self.onsite_neurons['nhidden'],self.onsite_num2[ia]]) - + assert coeff[ikey].shape == torch.Size([self.onsite_strian_neurons['nout']]) - - # paras = list(self.modeluniformsoc.soc_net.parameters()) - # assert len(paras) == 4 - # for ia in self.onsite_num2: - # paras = list(self.modeluniformsoc.soc_net[ia].parameters()) - # assert len(paras) == 2 - # assert paras[0].shape == torch.Size([1, self.soc_neurons['nhidden']]) - # assert paras[1].shape == torch.Size([self.soc_neurons['nhidden'], self.onsite_num2[ia]]) - - # def test_onsite_strain_soc(self): - - # paras = list(self.modelstrainsoc.onsite_net.parameters()) - # assert len(paras) == 2 - # assert paras[0].shape == torch.Size([len(self.reducted_onsiteint_types), self.bond_neurons['nhidden']]) - # assert paras[1].shape == torch.Size([self.bond_neurons['nhidden'], self.bond_neurons['nout']]) - - # _, coeff = self.modelstrainsoc(mode='onsite') - # assert len(coeff) == len(self.reducted_onsiteint_types) - - # for ikey in coeff.keys(): - # assert ikey in self.reducted_onsiteint_types - # assert coeff[ikey].shape == torch.Size([self.bond_neurons['nout']]) - - - # paras = list(self.modelstrainsoc.soc_net.parameters()) - # assert len(paras) == 4 - # for ia in self.onsite_num2: - # paras = list(self.modelstrainsoc.soc_net[ia].parameters()) - # assert len(paras) == 2 - # assert paras[0].shape == torch.Size([1, self.soc_neurons['nhidden']]) - # assert paras[1].shape == torch.Size([self.soc_neurons['nhidden'], self.onsite_num2[ia]]) + def _test_soc(self, model): + paras = list(model.soc_net.parameters()) + assert len(paras) == 2 + assert paras[0].shape == torch.Size([len(self.reduced_onsiteE_types), 1, self.soc_neurons['nhidden']]) + assert paras[1].shape == torch.Size([len(self.reduced_onsiteE_types), 1, self.soc_neurons['nhidden']]) + + soc_value,_ = model(mode='soc') + assert isinstance(soc_value, dict) + assert soc_value['N'].shape == torch.Size([2]) + assert soc_value['B'].shape == torch.Size([1]) + + def test_soc(self): + self._test_soc(model = self.modeluniformsoc) + self._test_soc(model = self.modelstrainsoc) + self._test_soc(model = self.modelnonesoc) + \ No newline at end of file From 0506cd682e6186210a16c2da9bbc0fd017a93af0 Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 10 Oct 2023 11:20:09 +0800 Subject: [PATCH 53/63] test: update test_sknet.py --- dptb/tests/test_sknet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dptb/tests/test_sknet.py b/dptb/tests/test_sknet.py index f34454d0..d032b5d1 100644 --- a/dptb/tests/test_sknet.py +++ b/dptb/tests/test_sknet.py @@ -11,7 +11,7 @@ class TestSKnet: bond_neurons = {'nhidden':5,'nout':4} onsite_neurons = {'nhidden':6,'nout':1} onsite_strian_neurons = {'nhidden':8,'nout':5} - soc_neurons = {'nhidden':6} + soc_neurons = {'nhidden':7} reducted_onsiteint_types = ['N-N-2s-2s-0', 'N-B-2s-2s-0', From 01d3e84d5dbdb0ac0bbe2c00f8a131828c927afe Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 10 Oct 2023 15:29:35 +0800 Subject: [PATCH 54/63] update sknet.py and test_sknet.py add test for NRL mode in sknet --- dptb/nnsktb/sknet.py | 4 ++- dptb/tests/test_sknet.py | 75 ++++++++++++++++++++++++++++++++-------- 2 files changed, 64 insertions(+), 15 deletions(-) diff --git a/dptb/nnsktb/sknet.py b/dptb/nnsktb/sknet.py index 14ce0971..31304192 100644 --- a/dptb/nnsktb/sknet.py +++ b/dptb/nnsktb/sknet.py @@ -61,9 +61,11 @@ def __init__(self, skint_types: list, onsite_types:dict, soc_types: dict, hoppin self.overlap = overlap self.nhop_paras = hopping_neurons.get('nout') - self.noverlap_paras = hopping_neurons.get('nout_overlap',0) if overlap: + + self.noverlap_paras = hopping_neurons['nout_overlap'] + hopping_config = { 'nin': len(self.skint_types), 'nhidden': hopping_neurons.get('nhidden',1), diff --git a/dptb/tests/test_sknet.py b/dptb/tests/test_sknet.py index d032b5d1..413af127 100644 --- a/dptb/tests/test_sknet.py +++ b/dptb/tests/test_sknet.py @@ -6,27 +6,22 @@ class TestSKnet: - reducted_skint_types = ['N-N-2s-2s-0', 'N-B-2s-2p-0', 'B-B-2p-2p-0', 'B-B-2p-2p-1'] onsite_num = {'N':4,'B':3} bond_neurons = {'nhidden':5,'nout':4} - onsite_neurons = {'nhidden':6,'nout':1} + bond_neurons_overlap = {'nhidden':5,'nout':4,"nout_overlap":2} + onsite_neurons = {'nhidden':6,'nout':4} onsite_strian_neurons = {'nhidden':8,'nout':5} soc_neurons = {'nhidden':7} - reducted_onsiteint_types = ['N-N-2s-2s-0', - 'N-B-2s-2s-0', - 'N-B-2s-2p-0', - 'N-B-2p-2p-0', - 'N-B-2p-2p-1', - 'B-N-2s-2s-0', - 'B-B-2s-2s-0'] - - proj_atom_anglr_m = {'B':['2s'],'N':['2s','2p']} + proj_atom_anglr_m = {'B':['3s'],'N':['2s','2p']} indexmap = Index_Mapings(proj_atom_anglr_m) bond_index_map, bond_num_hops = indexmap.Bond_Ind_Mapings() _, _, onsite_index_map, onsite_num = indexmap.Onsite_Ind_Mapings(onsitemode='uniform',atomtype=['N','B']) + onsite_strain_index_map, onsite_strain_num, _, _ = indexmap.Onsite_Ind_Mapings(onsitemode='strain',atomtype=['N','B']) + all_onsiteE_types_dict, reduced_onsiteE_types, onsiteE_ind_dict = all_onsite_ene_types(onsite_index_map) all_skint_types_dict, reducted_skint_types, sk_bond_ind_dict = all_skint_types(bond_index_map=bond_index_map) + all_onsite_int_types_dict, reducted_onsiteint_types, sk_onsite_ind_dict = all_onsite_intgrl_types(onsite_strain_index_map) modelstrain = SKNet(skint_types=reducted_skint_types, onsite_types=reducted_onsiteint_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, onsite_neurons=onsite_strian_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='strain') @@ -45,7 +40,17 @@ class TestSKnet: modelnonesoc= SKNet(skint_types=reducted_skint_types, onsite_types=reduced_onsiteE_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, onsite_neurons=onsite_neurons, soc_neurons=soc_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='none') - + modelnrl = SKNet(skint_types=reducted_skint_types, onsite_types=reduced_onsiteE_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, + onsite_neurons=onsite_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='NRL', overlap=False) + modelnrl_overlap = SKNet(skint_types=reducted_skint_types, onsite_types= reduced_onsiteE_types, soc_types= reduced_onsiteE_types, hopping_neurons= bond_neurons_overlap, + onsite_neurons= onsite_neurons, onsite_index_dict= onsiteE_ind_dict, onsitemode='NRL', overlap=True) + + modelnrlsoc = SKNet(skint_types=reducted_skint_types, onsite_types=reduced_onsiteE_types, soc_types=reduced_onsiteE_types, hopping_neurons=bond_neurons, + onsite_neurons=onsite_neurons, soc_neurons=soc_neurons, onsite_index_dict=onsiteE_ind_dict, onsitemode='NRL', overlap=False) + + modelnrl_overlapsoc = SKNet(skint_types=reducted_skint_types, onsite_types= reduced_onsiteE_types, soc_types= reduced_onsiteE_types, hopping_neurons= bond_neurons_overlap, + onsite_neurons= onsite_neurons, soc_neurons= soc_neurons, onsite_index_dict= onsiteE_ind_dict, onsitemode='NRL', overlap=True) + def _test_hopping(self,model): paras = list(model.hopping_net.parameters()) @@ -68,6 +73,33 @@ def test_hopping(self): self._test_hopping(model = self.modeluniformsoc) self._test_hopping(model = self.modelstrainsoc) self._test_hopping(model = self.modelnonesoc) + self._test_hopping(model = self.modelnrl) + self._test_hopping(model = self.modelnrlsoc) + + def _test_hopping_nrl_overlap(self,model): + with pytest.raises(KeyError) as exception_info: + modelnrl_overlap = SKNet(skint_types=self.reducted_skint_types, onsite_types=self.reduced_onsiteE_types, soc_types=self.reduced_onsiteE_types, hopping_neurons=self.bond_neurons, + onsite_neurons=self.onsite_neurons, onsite_index_dict=self.onsiteE_ind_dict, onsitemode='NRL', overlap=True) + + paras = list(model.hopping_net.parameters()) + assert len(paras) == 2 + assert paras[0].shape == torch.Size([len(self.reducted_skint_types), 1, self.bond_neurons_overlap['nhidden']]) + assert paras[1].shape == torch.Size([len(self.reducted_skint_types), self.bond_neurons_overlap['nout']+self.bond_neurons_overlap['nout_overlap'], self.bond_neurons_overlap['nhidden']]) + + coeff, ovelap_coeff = model(mode='hopping') + assert len(coeff) == len(self.reducted_skint_types) + assert ovelap_coeff is not None + assert len(ovelap_coeff) == len(self.reducted_skint_types) + assert coeff.keys() == ovelap_coeff.keys() + + for ikey in coeff.keys(): + assert ikey in self.reducted_skint_types + assert coeff[ikey].shape == torch.Size([self.bond_neurons_overlap['nout']]) + assert ovelap_coeff[ikey].shape == torch.Size([self.bond_neurons_overlap['nout_overlap']]) + + def test_hopping_nrl_overlap(self): + self._test_hopping_nrl_overlap(model = self.modelnrl_overlap) + self._test_hopping_nrl_overlap(model = self.modelnrl_overlapsoc) def test_onsite_none(self): @@ -83,7 +115,7 @@ def test_onsite_uniform(self): paras = list(self.modeluniform.onsite_net.parameters()) assert len(paras) == 2 assert paras[0].shape == torch.Size([len(self.reduced_onsiteE_types), 1, self.onsite_neurons['nhidden']]) - assert paras[1].shape == torch.Size([len(self.reduced_onsiteE_types), 1, self.onsite_neurons['nhidden']]) + assert paras[1].shape == torch.Size([len(self.reduced_onsiteE_types), self.onsite_neurons['nout'], self.onsite_neurons['nhidden']]) #sknet = SKNet(skint_types=self.reducted_skint_types,onsite_types=self.reduced_onsiteE_types,soc_types=self.reduced_onsiteE_types,onsite_index_dict=self.onsiteE_ind_dict, # hopping_neurons=self.bond_neurons, onsite_neurons=self.onsite_neurons, onsitemode='uniform') @@ -108,6 +140,20 @@ def test_onsite_strain(self): assert ikey in self.reducted_onsiteint_types assert coeff[ikey].shape == torch.Size([self.onsite_strian_neurons['nout']]) + def test_onsite_nrl(self): + + paras = list(self.modelnrl_overlap.onsite_net.parameters()) + assert len(paras) == 2 + assert paras[0].shape == torch.Size([len(self.reduced_onsiteE_types), 1, self.onsite_neurons['nhidden']]) + assert paras[1].shape == torch.Size([len(self.reduced_onsiteE_types), self.onsite_neurons['nout'], self.onsite_neurons['nhidden']]) + + onsite_paras, _ = self.modelnrl_overlap(mode='onsite') + assert isinstance(onsite_paras, dict) + + for ikey in onsite_paras.keys(): + assert ikey in self.reduced_onsiteE_types + assert onsite_paras[ikey].shape == torch.Size([self.onsite_neurons['nout']]) + def _test_soc(self, model): paras = list(model.soc_net.parameters()) assert len(paras) == 2 @@ -123,4 +169,5 @@ def test_soc(self): self._test_soc(model = self.modeluniformsoc) self._test_soc(model = self.modelstrainsoc) self._test_soc(model = self.modelnonesoc) - \ No newline at end of file + self._test_soc(model = self.modelnrlsoc) + self._test_soc(model = self.modelnrl_overlapsoc) \ No newline at end of file From b25076ec55d5f00a0a8b5b0934f661974f4e23fc Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 10 Oct 2023 15:49:36 +0800 Subject: [PATCH 55/63] test: update test_skintTypes.py add test test_NRL_skint_type_constants --- dptb/tests/test_skintTypes.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/dptb/tests/test_skintTypes.py b/dptb/tests/test_skintTypes.py index 9b5f0a4e..952dde3d 100644 --- a/dptb/tests/test_skintTypes.py +++ b/dptb/tests/test_skintTypes.py @@ -1,6 +1,8 @@ from dptb.nnsktb.skintTypes import all_skint_types, all_onsite_intgrl_types, all_onsite_ene_types from dptb.utils.index_mapping import Index_Mapings - +from dptb.nnsktb.skintTypes import NRL_skint_type_constants +import pytest +import torch # add test for all_onsite_intgrl_types def test_onsite_intgrl_types(): proj_atom_anglr_m = {'B':['2s'],'N':['2s','2p']} @@ -205,4 +207,28 @@ def test_onsiteint_types(): index = onsite_intgrl_index_map[ibt][isk] for ii in range(len(index)): skbondname = f'{ibt}-{isk}-{ii}' - assert sk_onsite_ind_dict[ibt][index[ii]] == all_onsiteint_types_dict[skbondname] \ No newline at end of file + assert sk_onsite_ind_dict[ibt][index[ii]] == all_onsiteint_types_dict[skbondname] + + + +def test_NRL_skint_type_constants(): + proj_atom_anglr_m = {'B':['3s'],'N':['2s','2p']} + indexmap = Index_Mapings(proj_atom_anglr_m) + bond_index_map, bond_num_hops = indexmap.Bond_Ind_Mapings() + all_skint_types_dict, reducted_skint_types, sk_bond_ind_dict = all_skint_types(bond_index_map) + nrl_constant = NRL_skint_type_constants(reducted_skint_types) + + nrl_constant_true = {'N-N-2s-2s-0': torch.tensor([1.]), + 'N-N-2s-2p-0': torch.tensor([0.]), + 'N-N-2p-2p-0': torch.tensor([1.]), + 'N-N-2p-2p-1': torch.tensor([1.0]), + 'N-B-2s-3s-0': torch.tensor([0.]), + 'N-B-2p-3s-0': torch.tensor([0.]), + 'B-B-3s-3s-0': torch.tensor([1.])} + + assert len(nrl_constant) == len(nrl_constant_true) + assert isinstance(nrl_constant, dict) + assert len(nrl_constant) == len(reducted_skint_types) + + for ikey in nrl_constant.keys(): + assert torch.allclose(nrl_constant[ikey], nrl_constant_true[ikey]) \ No newline at end of file From e5ab1d79aaeb322d21a1373ad656cbf84313bff0 Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 10 Oct 2023 22:35:23 +0800 Subject: [PATCH 56/63] update NN2HRK.py sorted_onsite sorted_bond sorted_env input in define Processor. --- dptb/nnops/NN2HRK.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dptb/nnops/NN2HRK.py b/dptb/nnops/NN2HRK.py index 0b9aeb5b..01190e4a 100644 --- a/dptb/nnops/NN2HRK.py +++ b/dptb/nnops/NN2HRK.py @@ -86,7 +86,7 @@ def _get_nnsk_HR(self): assert self.structure.onsitemode == self.apihost.model_config['onsitemode'] # TODO: 注意检查 processor 关于 env_cutoff 和 onsite_cutoff. predict_process = Processor(structure_list=self.structure, batchsize=1, kpoint=None, eigen_list=None, device=self.device, dtype=self.dtype, - env_cutoff=self.apihost.model_config['env_cutoff'], onsitemode=self.apihost.model_config['onsitemode'], onsite_cutoff=self.apihost.model_config['onsite_cutoff'], sorted_onsite="st", sorted_bond="st", sorted_env="st") + env_cutoff=self.apihost.model_config['env_cutoff'], onsitemode=self.apihost.model_config['onsitemode'], onsite_cutoff=self.apihost.model_config['onsite_cutoff'], sorted_onsite=self.sorted_onsite, sorted_bond=self.sorted_bond, sorted_env=self.sorted_env) batch_bonds, batch_bond_onsites = predict_process.get_bond(sorted=self.sorted_bond) coeffdict, overlap_coeffdict = self.apihost.model(mode='hopping') @@ -143,7 +143,7 @@ def _get_nnsk_HR(self): def _get_dptb_HR(self): predict_process = Processor(structure_list=self.structure, batchsize=1, kpoint=None, eigen_list=None, device=self.device, dtype=self.dtype, - env_cutoff=self.apihost.model_config['env_cutoff'], onsitemode=self.apihost.model_config['onsitemode'], onsite_cutoff=self.apihost.model_config['onsite_cutoff'], sorted_onsite="st", sorted_bond="st", sorted_env="st") + env_cutoff=self.apihost.model_config['env_cutoff'], onsitemode=self.apihost.model_config['onsitemode'], onsite_cutoff=self.apihost.model_config['onsite_cutoff'], sorted_onsite=self.sorted_onsite, sorted_bond=self.sorted_bond, sorted_env=self.sorted_env) batch_bonds, batch_bond_onsites = predict_process.get_bond(sorted=self.sorted_bond) batch_env = predict_process.get_env(cutoff=self.apihost.model_config['env_cutoff'], sorted=self.sorted_env) From 42b0e13f154bce9a38436c54004943143c02b7d6 Mon Sep 17 00:00:00 2001 From: qqgu Date: Wed, 11 Oct 2023 01:25:22 +0800 Subject: [PATCH 57/63] add test_integralFunc.py for varTang96 and powerlaw mode --- dptb/nnsktb/integralFunc.py | 2 +- dptb/tests/test_integralFunc.py | 77 +++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 dptb/tests/test_integralFunc.py diff --git a/dptb/nnsktb/integralFunc.py b/dptb/nnsktb/integralFunc.py index 8cfc150d..956a8f1a 100644 --- a/dptb/nnsktb/integralFunc.py +++ b/dptb/nnsktb/integralFunc.py @@ -23,7 +23,7 @@ def __init__(self, proj_atom_anglr_m, atomtype=None, mode='hopping', functype='v if functype == 'NRL': self.para_Consts = NRL_skint_type_constants(reducted_skint_types) # call to get the para constants! - + # special onsite mode for strain, which use same sk strategy as hopping. elif mode == 'onsite': onsite_strain_index_map, _, _, _ = IndMap.Onsite_Ind_Mapings(onsitemode='strain', atomtype=atomtype) _, _, onsite_strain_ind_dict = all_onsite_intgrl_types(onsite_strain_index_map) diff --git a/dptb/tests/test_integralFunc.py b/dptb/tests/test_integralFunc.py new file mode 100644 index 00000000..d5318ea4 --- /dev/null +++ b/dptb/tests/test_integralFunc.py @@ -0,0 +1,77 @@ +import pytest +import torch +from dptb.nnsktb.integralFunc import SKintHops + +# test for hoppings: + + +class TestSKintHops: + envtype = ['N','B'] + bondtype = ['N','B'] + proj_atom_anglr_m={'B': ['2s'], 'N': ['2s', '2p']} + batch_bonds = {0: torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00]])} + + def test_skhops_varTang96(self): + coeffdict= {'N-N-2s-2s-0': torch.tensor([ 4.3461765745e-04, -3.9701518835e-04, -6.0277385637e-04, -6.9087851443e-05]), + 'N-N-2s-2p-0': torch.tensor([ 2.1683995146e-04, 1.0277298134e-04, -6.2341854209e-04, 1.4911865946e-05]), + 'N-N-2p-2p-0': torch.tensor([ 0.0008250176, -0.0005188021, -0.0002828926, 0.0006028564]), + 'N-N-2p-2p-1': torch.tensor([ 1.0799153242e-03, 4.2950130592e-05, 1.8651155187e-05, -6.6541536944e-04]), + 'N-B-2s-2s-0': torch.tensor([ 0.0003718118, -0.0001149630, -0.0010231513, -0.0002210326]), + 'N-B-2p-2s-0': torch.tensor([-0.0005409718, 0.0002763696, -0.0003420392, -0.0004326820]), + 'B-B-2s-2s-0': torch.tensor([-4.6358386498e-06, -1.4617976558e-04, 6.2484655064e-04,-8.6897460278e-04])} + + skhops = SKintHops(proj_atom_anglr_m=self.proj_atom_anglr_m, mode='hopping', functype='varTang96') + + batch_hoppings_true = {0: [torch.tensor([ 0.0003693393, -0.0005377086]), + torch.tensor([ 0.0003693393, -0.0005377086]), + torch.tensor([ 0.0003693393, -0.0005377086])]} + + batch_hoppings = skhops.get_skhops(batch_bonds=self.batch_bonds, coeff_paras=coeffdict, rcut=3.0, w=0.3) + + assert isinstance(batch_hoppings, dict) + assert len(batch_hoppings) == len(batch_hoppings_true) + assert len(batch_hoppings) == len(self.batch_bonds) + + for kf in batch_hoppings.keys(): + assert len(batch_hoppings[kf]) == len(batch_hoppings_true[kf]) + assert len(batch_hoppings[kf]) == len(self.batch_bonds[kf]) + for i in range(len(batch_hoppings[kf])): + assert torch.allclose(batch_hoppings[kf][i], batch_hoppings_true[kf][i]) + + def test_skhops_powerlaw(self): + coeffdict = {'N-N-2s-2s-0': torch.tensor([0.0002670568, 0.0001332831]), + 'N-N-2s-2p-0': torch.tensor([-0.0003154497, -0.0003884580]), + 'N-N-2p-2p-0': torch.tensor([-0.0001336335, 0.0008993127]), + 'N-N-2p-2p-1': torch.tensor([-0.0002779329, 0.0003829031]), + 'N-B-2s-2s-0': torch.tensor([0.0006050252, 0.0004113411]), + 'N-B-2p-2s-0': torch.tensor([0.0002687302, 0.0007265538]), + 'B-B-2s-2s-0': torch.tensor([-1.0157947145e-05, 3.6075818934e-04])} + + skhops = SKintHops(proj_atom_anglr_m=self.proj_atom_anglr_m, mode='hopping', functype='powerlaw') + + batch_hoppings = skhops.get_skhops(batch_bonds=self.batch_bonds, coeff_paras=coeffdict, rcut=3.0, w=0.3) + + batch_hoppings_true = {0: [torch.tensor([0.0007047649, 0.0003130466]), + torch.tensor([0.0007047650, 0.0003130467]), + torch.tensor([0.0007047650, 0.0003130467])]} + + assert isinstance(batch_hoppings, dict) + assert len(batch_hoppings) == len(batch_hoppings_true) + assert len(batch_hoppings) == len(self.batch_bonds) + + for kf in batch_hoppings.keys(): + assert len(batch_hoppings[kf]) == len(batch_hoppings_true[kf]) + assert len(batch_hoppings[kf]) == len(self.batch_bonds[kf]) + for i in range(len(batch_hoppings[kf])): + assert torch.allclose(batch_hoppings[kf][i], batch_hoppings_true[kf][i]) \ No newline at end of file From 06d3e9f19423ac2f22dbb8dcd5814ac0fca3034c Mon Sep 17 00:00:00 2001 From: qqgu Date: Wed, 11 Oct 2023 01:25:49 +0800 Subject: [PATCH 58/63] update example/hbn/run/plotband.ipynb --- examples/hBN/run/plotband.ipynb | 47 +++++++++++++-------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/examples/hBN/run/plotband.ipynb b/examples/hBN/run/plotband.ipynb index 99eab340..85f0926a 100644 --- a/examples/hBN/run/plotband.ipynb +++ b/examples/hBN/run/plotband.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -34,7 +34,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdIAAAGyCAYAAABQlEVsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACYcUlEQVR4nOydd3gU1frHP5u6IUBIQu81oW5QQC9YUVQsoCRiAwUbiu3aAHsoCoLiFVQULEhXIKtgvVdU1J8oUkRCS+g1hfRAevL+/jjZkEASkuwku5s9n+eZJ7A7e/adszPznXPOW0wiImg0Go1Go6kRHo42QKPRaDQaV0YLqUaj0Wg0dqCFVKPRaDQaO9BCqtFoNBqNHWgh1Wg0Go3GDrSQajQajUZjB1pINRqNRqOxAy2kGo1Go9HYgRZSjUaj0WjsQAupRqPRaDR24LRCunPnTkaOHEnnzp1p0KABTZs25fLLL+err74qs9/YsWMxmUznbN27d3eQ5RqNRqNxJ7wcbUBFHD58mMzMTMaMGUPr1q3JysoiKiqK4cOHM3/+fMaNG1eyr6+vLx999FGZzwcEBNS1yRqNRqNxQ0yulLS+sLCQfv36kZOTw549ewA1Il29ejWnTp1ysHUajUajcUecdmq3PDw9PWnXrh1paWnnvFdYWEhGRkbdG6XRaDQat8Zpp3ZtnD59muzsbNLT01m7di3fffcdt99+e5l9srKyaNy4MVlZWQQGBnLnnXcyc+ZMGjZsWGG7RUVFHDp0CG9vb0wmU8nrvr6++Pr61trxaDQajcZ5EBEyMzNp3bo1Hh41G1s6/dTuww8/zPz58wHw8PAgPDycBQsWEBgYCMDzzz+PiHDhhRdSVFTE999/z6JFi7jkkktYv349Xl7lPyscO3aMdu3a1dlxaDQajcZ5OXr0KG3btq3RZ51eSPfs2cOxY8c4ceIEK1euxMfHh/fff58WLVpU+Jnp06fz4osvsmLFCu64445y90lPT6dJkyb8+uuvdOrUqeR1PSLVVER8fDwLFy7k3nvvpWXLlo42x2XR/Wgca9eu5e677z7n9SVLljB8+HAHWOR67Nu3j379+pGWllZzJ1VxMa655hoZMGCAFBUVVbhPVlaWeHh4yP3331/hPunp6QLIwYMHa8FKTX0kKSlJlixZIklJSY42xemJiooSi8UiZrNZLBaLREVFlbyn+9E4LBaLmEwmAUo2k8kkYWFhjjbNZTh48KAAkp6eXuM2XMrZCODWW29l06ZNxMbGVriPn58fwcHBpKSknLe9oKAgI83T1GOCg4MZPXo0wcHBZV63Wq2EhYXh5+dHWFgYVqvVQRY6B1arlYiICKKjo8nJySE6OpqIiIiSftH9aByxsbHIWZOKIkJMTIyDLHI9jNAAlxPS7OxsQE3NVkRmZiZJSUk0a9bsvO0VFRUZZpumflDRDb2oqIjc3Nwy58z5RKMq7dZ0P2dlypQpmEymkhu8iGAymZg6dSpgfz9qzhASElLGWRLAZDIRGhrqIItcD0M0wKDRseEkJCSc81peXp5ceOGF4ufnJ5mZmZKdnS0ZGRnn7DdhwgQBxGq1Vti+bWo3JibGULs1rk1UVFTJ9Fjpv1FRUXLixAmZPHmynDhxomT/qk6tVdZuTferaOrU0ZjN5jL9YdvMZrOIiF39qClLRedLZfc+TVliYmLsntp1WiG95ZZb5KqrrpLJkyfLhx9+KNOmTZPu3bsLILNnzxYRNbfdpEkTGT9+vMyZM0fmzJkjN9xwgwAydOhQKSwsrLB9LaRncOabcl1T2Q29PAE4n2hUpd3q7ldVsbXtW5Xf1sj9zncM9vSj5lyioqIkLCxMzGazhIWFaRGtJvVaSFesWCFDhgyRFi1aiJeXlwQGBsqQIUNkzZo1JfukpqbK6NGjpWvXrtKgQQPx9fWVXr16yfTp0yUvL6/S9rWQKqpzU3YHKruh2zOSqqpQVGU/R46C7dnPdoPXI1KNM1GvhbS20UKq0DewslR3RFrVqTUjR6SOGAVXZz9bv1Q0SrKnHzXnomeU7EMLqR3YhHTQoEFufeLpKbWyVHZDL08AbJ8539RaVYWiKvs5YhRcnf3Ohz39qCmLnlGyj6ioKBk0aJAW0ppiE1IPD48anXj15SlQj0jPpaIbekFBgZw6dUoKCgoMbbe6+zliFFyd/c6Hvf2oOUNtXL/OfG8z0jbbdWTTAC2kNcAmpDU58erTU6CeUnNN6noUXJ39NHWH0TNKznxvM9q2sx9CtJDWAJuQNmnSpNonnlFPgUY8XRnVhp5SOz/JycmyfPlySU5OdrQpVcaoUXB196sMV+xHZ8XoEakzj3CNts32EGLTAC2kNcAmpC1atKj2j2HEU6ART1dGPaE581ROdanNY6lobU9TPXQ/GofRswTOPMI12jabMLdo0UILaU0pLaTVPfGMeDJyljaceSqnutT2sWgBMAbdj8Zi5IySM49wjbbNdr/QQmoHpb12q3viGfEUaMTTlRFt1Cdno9o+Fi0AxqD70Xlx5hFubazRG+W163K5do1m4cKFjBgxolqfCQ8PJyoqCovFgtlsxmKxYLVaq9WOETkyjWijPiW9rk/HotE4AiPubaUxMhew0bbZ2ly4cGGNP19CjSXYxbGNSI8fP+6Q7zfi6cqINvSItOpkZmbKhg0bJDMz05D23JW66Mf6tO7vyriCp/fx48f11G5NsQmpPZ1nL0asbdjbhiuc6FWlPh2LpubUp3X/+oCzRwUYoQVuL6Tx8fGONsXhOPuJXh1q81iysrJkx44dkpWVZVib7kht92N9mmXR1D7x8fF2C6lJ5KxFJTchIyODgIAAYmJiCAkJcbQ5GhcgLi6OBQsWMG7cOFq1auVoc1yW2u5HPz8/cnJyznndbDaX1DPWaGzExsYSGhpKeno6jRs3rlEbbu9spNFo6he62LWmrtFCqtFo6hWRkZGISImYmkwmRITIyEgHW6apr2gh1Wg0hmO1WgkLC6OR2czdXbuyY/RouP126N8fbrhB7XTrrXDllXDHHTBjBr9NnswlvXvj5+dHWFgYVqu1Rt9dG2ESGk1leDnaAEfj5eX2XaCpIl5eXrRs2VKfM+fhy88/57M77uA14Eqg4f79ZO7fz8levWg2cCBerVrREvAaOBDi4uDYMfLXruWy7Gx+BzYCX2zfzqSICIiKIjw8vNo2hIeH1+hzGvfDiOvZ7Z2N7Flg1mg0pThyBN5+m9S5cwksLOR3YA2wHvgb6BUWxrZt28r9aF+LhbzoaC4GbgSuB/yB3X5+9Hj7bbjrLmjYsC6Owu2xWq1MmTKF2NhYQkJCiIyMrNcPJUZogZ7a1TgNtulAe6f2NHVMfDw88QR06waLF7MI6AFcCrwBbAIKoNIMUzF797Ib+BQYCTQDRgD7cnNh/Hho00Z9x5EjtXww7o3VaiUiIoLo6GhycnKIjo4mIiJCX4vnwe2FND4+3tEmaHCNCzguLo5XX32VuLg4R5viHOTmwtSp0LkzLF4Mr7wChw6xsFcvYirxmi2vH8/2tM0G1phMvNynDxw8CI8/DsuXQ9euMG6cek1jOFOmTClxzgJKnLamTp3qYMtqDyM0wO2FVOMcuMoFXFhY6GgTHIpt1uAqX1/2BwRQNHWqGikePAgvvggNG1bJa/bsfqz0M+3bw6uvwqFDMH06rFmjRr/jx0NCQp0ed32fLdH5qmuGFlKNU6AvYOfHarUyKiKCB7dv56e8PE7m5hJWWIj1oosgMLBkv5p4zVbpMw0bwrPPKtF+/XX47DM1Qp02DU6frtXjdvbZEqPQMbg1pMY5kVwcW4rAmJgYR5uiEddI6+bu5b+Gh4TINpAskMdBPGr4GxnWj8nJIk8/LeLtLdK+vcjatSVvGZm03hXOTaNwx3zVMTExuoyau1Nfppx0EL2Ts2gRy2Nj8QYuAt4BinDwrEFQEMyeDbt3Q48eMHw4jBjBd/PnGzqCdKfZEh2DW0OM0XTXwzYiTUpKcrQpNaa+Vblw9uT5eXl5kpCQIHl5eY42pe7IyxN59FERkC8CA8X/rALNNRmZ1Uo/FhWJrFwp0qqVnPbwkGdAvAwaQbrTiNQdSUpK0knra0p9iCMNCwsjOjq6zNOyyWTCYrFUGK+n0VSZlBS47Tb45Rd4912szZoRERFRMltg++tUI5aMDN4LCuLhwkJ2Ag8DfxS/VdOk9bY1Uqc+bk2N0XGkBpCWluZoE2qMO005OQNpaWmsXbvWpc+ZKhMbCxdfDNu2wbp18NBDhk371Wo/Nm7Mgl69uAjIBTYA/wEaQI0dZvR0Z/3GiPPQ7YW0vHJLroL2sKtbsrOz+fvvv+t/Ka5Nm+CSS8DHR/37iitK3goPD2fbtm1kZ2ezbdu2GolJbfdjZGQkW4GBwJPAQ8A2YM5tt9W4TSOOW+OcGKEBbi+krox20NEYzv/+B4MHQ0gI/PYbdOrkaIuqjW0E2TssjPlmM7d3705QaChXvPSSCp+p7w9CmjpHC6kLo6ecNEZhtVqZ1L49edddx68eHqx57DHlFeuilB5Brt29m+CdO2HWLHj3XbjgAvjzT4faV1+87TUKLaQujrNMOekbg+titVpZHxHBzKNHWQ4Myczklrvuql+/oaenGo1u2wYBAWrqetIkcMDSjjsleHAb7HUddlVs4S9Hjx51tCkuT30Lw6mI9PR0+eGHH+xyk3dG5rZoIQLyeh2Fdzi8H/PzRV5/XcTHR6RHD5G//qrTr9fhNM7F0aNHdfhLTakP4S/Ogg7DcWGmTYNXXuEl4LWz3qppuIjLsHMnjBmjRqmTJqmk+76+tf61fn5+5Tq41Pv+dlJ0+IsB5ObmOtoEl8ddwnByc3M5dOhQ/Tlnpk6FV17hnRYtmF6H3t9O04+9esEff8DkyfDGGzBgAPz9d61/rbt52zv7so8R56HbC2lqaqqjTXB53OXGkJKSwqJFi0hJSXG0KfYzZQpERsJrr9Fm3rw69f52qn709oaXXlJhPh4ecNFFqm/y82vtK93J294V1oON0AC3F1KN/bjTjaFeMHmy2qZPhxde0N7fAGFh8Ndf8Pzzarr7X/+CHTtK3jZyVOVO/e0q5RHtxr5lWtdFV38xFmfPk2sE9aL6S2SkCIjMmOEwE5y+HzdtEunZUzkjTZ8u1pUrndqZzshKN0ZjNpvLOFXZNrPZ7GjTStDVX1wcZ187qA7OEoajqQARNZU7ZQrMmAHPPedoi5yX/v1hyxZ46il46SW6jB1Ld3DKUZWzT526y7KP2wuph4djusCZLoD6JOi1iYeHB40aNXLYOVNjbCI6daoqiO1gEXWJfjSbVV/93/9hzs5mK/AUZ26Y4iTOdM4+deoKyz6GnIdGDI1dEdvUrqNi2ZwllsxdYkDdlajVq2V+8+YiIG+1bKl/1xpwUe/e8hZIIcivIF2cKO7TFaZOnX3ZxwgtcFoh3bFjh9x6663SqVMn8fPzk+DgYLnssstk7dq15+y7a9cuue6668Tf318CAwNl9OjRkpiYWGn7jhZSZ7kAnEXQNcYTtXq1TFPjUXlWPyTVGNvD5uUg+0BOgTwKYl292tGm6evXAIzQAqedWzl8+DCZmZmMGTOGOXPm8PLLLwMwfPhwFixYULLfsWPHuPzyy9m3bx/Tp0/n2Wef5ZtvvuGaa64hLy/vvN+TmJhYa8dQGc6yduAuMaBGkJCQwFtvvUVCQoKjTTk/IiQ/8ggvAc8Cb+I8034u1Y+c8bJNDwvjYl9fvg4O5l1gxHvvwYEDDrXNFaZOnR1DNMAYTa8bCgoKJCwsTEJDQ0teGz9+vPj5+cnhw4dLXvvhhx8EkPnz51fYlqO9diuaUq3raQ/9RFt1nN7b1EZRkcgLL4iAPO0Esx5n4zL9WBk//CDSoYOIn5/Im2+KFBQ4zBRnnzp1dtzOa9fT05N27dqVKcQaFRXFTTfdRPv27UteGzJkCCEhIaxcudIBVlYNZ4kl00+09QwRePFFmD6dN1u14j9OMOtRLxkyRMWZjhsHEybAwIGwfbtDTDHaY147H1YfpxfS06dPk5SUxP79+/nPf/7Dd999x9VXXw3A8ePHSUxMpH///ud87qKLLuLvOkj3ZQ9GXAD2nvTOIugaAxBRHrkzZsDs2XR+9139kFSbNGwIb78Nv/8Op09Dv37w8svg6NSHduBM0QQuhUGj41rjoYceKpmS8vDwkFtvvVVSUlJERGTTpk0CyOLFi8/53IQJEwSQnJycctu1Te1u3bpV0tPTS7aK9ndGtMdt3eLUU5JFRSJPPaWSLfznPyUvO+O0n1P3Y03JyVHJLry9Rbp3F/ntN0dbVCPccanHiKldpxfS3bt3yw8//CCLFi2SG2+8UUaMGCHx8fEiIvLrr78KIJ9//vk5n3v55ZcFkNTU1HLbtQmpt7d3mZMmMjKyFo/GWNzxpHckOTk5cvDgQed72CoqEnn8cSWi777raGvOi9P2oxFER4tcfLH6Le6/XyQpydEWVQtniSaoiNrI4pSYmFj/hfRsrrnmGhkwYIAUFRUZMiI9evRojUakzpCWy9lPek0dUFgo8vDD6sZdiXOdpg4pKBB5/32RgACR4GCRTz5RDzsuQG08nBt1r6ytGbh6HUdaEfPnzxdA9uzZI8eOHRNAZs6cec5+o0ePlqCgoArbsaewt1E/qL0nmB6R1i0OL0h9NoWFIg88IGIyiXz8saOtqTJO14+1RXy8yOjR6iHnsstEduxwtEXnxehoAiPFr7bud0YU9nY5IX377bcFkI0bN4qISLNmzWTkyJHn7BcSEiJXXXVVhe3YE/5ixA9qxAnmLCE07oIzre1FrVwpXwYGSgHIC+3audS6uDP1Y53w448iISEiXl4ikyaJZGY6xYxWRRi5rm6k+NXWDFy9XiNNSEg457W8vDy58MILxc/PTzIzM0VE5OGHHxY/Pz85cuRIyX7r1q0TQN5///0K27cJabt27WTChAnVss2IH9SoE8wZnUnqK84iANbPP5clIAUgd7qgk5mz9GOdkpMjMnWqiK+vZAUFqd+t1HXvSr9fdTBS/Dp06FBuWx07dqyxfRMmTJB27drVXyG95ZZb5KqrrpLJkyfLhx9+KNOmTZPu3bsLILNnzy7Z78iRIxIcHCxdunSRuXPnyvTp0yUwMFD69OlT6XqnTUhbtGghQLXE1IgfVK9vuh5OIQCnT8svjRpJLshIF53Sd4p+dBQHDsgPjRuLoPL29nXB3686GDkiNVpIbX40Ng2olwkZbr/9djw8PHj//fcZP348b731Fm3btmXNmjU8/fTTJfu1a9eOX375hS5duvDcc88xa9YsbrjhBn744Qd8fX2r/H3vvPNObRxGhThLikCNC5GaCtdcw4WZmdwErCr1lui0jq5Bp04My8vjaiAQ2ALMB4Lr6e9nZMKXilJKxsfH18g2Q+/5NZZgF8c2Im3cuHHJk01VMWI0qdc3XY/U1FRZs2ZNhSFVtcqxYyK9eokEB8tdXbu6tJOZQ/vRCbCN0rxAHgdJAUkFmdW6tUhurqPNMxyjlp+MdjaytWHTgHo5tVvb2IS0JiKo1zc1dcqePSLt24u0ayeye7d+CHNxzv79moF8AFLk4SHSpYvIypUuEy5Tlxh93p89INJCWgNsQurp6SmATJw4scqf1Tcy9yQvL08SEhIkLy+v7r70l19ULGLPniKlQrVc+SHMIf3oZJT7+0VHi9xwgwqXGThQ5PffHW2m02HkeW9bI7VpgBbSGlDaa7c6ImrDlW9kmppR504yCxeqlHNXXSWSnFw331kHuLWzUVVYt06kb18lqOHhIrGxjrao3mKU167TOhvVFevWrWPmzJnV/pzRFRc0GhvWVatY2Lw53Hsvqxs14ouHHoKgIEebpakrrr4atmyBRYvgr7+gZ0945BE4ccLRltU7Zs2axbp16+xux+2FVKNxJr7+9FMa3nYb95w8ydPAbSkphN9+u66+4W54eMA990BsLLz2Gnz2GXTpokq2JSU52jrNWWgh1WichY0b6TduHH2Ba4H/oLwgTCYTU6dOdahpGgfh5wcTJ8LBg+rvBx9A584QGQnp6Y62TlOMFlKNphp4enoa32hREbz1Flx2GUcKCrgQ+KnU21IPYwxrpR/rMwEBMGWKEtSHHoJZs5SgzpwJmZmOts7tMYmIONoIR5CRkUFAQADp6ek0btzY0eZo3JXDh2HsWFi/Hp5+mn7/+x9/79xJ6cvSZDJhsVjYtm2bo6zUOBsnTsCrr8JHH5Hr68sCf39eTUujZWgokZGRhIeHO9pCl8EILdAjUo3GERQVwccfg8UC+/fDTz/B7Nm8OGWKYZlgNPWY1q1h3jy+e/ddPjx1igcTEtiTm0vE9u08EBGh19TrGLcX0iS9cK+pIidPnmT+/PmcPHmyRp+3Wq2EhYVxsa8vfzdqBA88ALfcAtu3w+DBgPIGj4qKwmKxYDabsVgsWK3WeuUVbm8/as7w3Hvv8YTJRGfgU+BZ4BCQOn486P6tEkZogNsLaUFBgaNN0LgIBQUFxMfH1+icsVqtjI+I4MHt29mQl4dPVhZXAtabb4YmTcrsW99Dq+zpR01ZYmNjERHigKeBTsAHwO2JidC+vQqb2b/fsUY6OUach24vpBpNrZOYSMZDD3EQGA1MAvoCv2pvXI2dnF38IhF4zmTixl694IUXYNUqCAmB226DzZsdZ2g9RwupRmMntilbPz8/wsLCzqxPbdkCDz4InToRnpTEm6gRw2yggPrpjaupWyqqrvLktGnw8stw5Ai8+y5s3QoDBsBVV8F336k1eo1haCHV1CsqFLVaasNqtRIREUF0dDQ5OTnkbd/O/0VEkNq1K/TvD99/DxMnclPPnkw2mUgr9VldNk9jL+ddU/fzg/HjISZGjU4zM+GGG1S2pPfe06EzBuH24S/x8fG0aNHC0ea4NkVFyrHhxAlITlZ1M0tv6emQna22nJwz/z5rbSI5JYVjx46Rk52N2c+Ptm3bEtyyJfj6qs3H58y/y9miY2NZsGQJeUA2lPyd+NJLXHL11Wo/s7niv15eJcJoe7K3/Y2KiuL666/nwIEDdO7cGT9PT0hJ4f5LLsH/wAH6AFcBXYq/88/GjRm8dClcf32l7dY3R6KqkJ2dfaYf/fwcbY57IQK//w5z54LVCv7+cN998NhjKnOSG5KQkEDLli3tCn9xeyHVcaRVoLAQjh6FvXth3z7198gROH5cbXFx54iimEyYmjSBwEAVTN6ggXo6NpvP/PXyguIpqUOHDvHjTz9hojibT3E7Qy6/nPbNm0Nurtry8s78+6wtIykJ76Iianxr9vAgV4RCEQqBouKtEPDw8iIoOFjdiDIy1ANBMbnALuAP4BvgZ0DMZrKzs8s0b7VamTp1KjExMYQWx/u5m4hqnIgjR+D992HBAvXAe+ON8OijWDMzmfLqq8TGxhISElLv41KN0AK3F9LjTZvSuqjozGinQQOVIDw4uOzWujV07Ki21q2VCNQ3RODQIRWOYdt27lRef3l5ah8vL+jUSfVDmzbQpg3bEhOJ/PBD4oCTQBqQDqyOiqryBRgWFkZ0dLRdiQj8/PzIKRY4b8AM+AJNfH3Zu2OHEr/cXPW39L9LvfbUE09QVFCAB2rdw7P4r4+XFxNffplooE/jxjQMDIQmTRgxcSJfx8ZS+jFCJ1ConFOnThEdHU2fPn1o2LCho83RZGfD8uVqlLp9O4eAj4BPgPhSMzJOL6YZGepedewYJCaeuyUlqWO1PXwXX/snPD1pk5mphbQm2IQ0Zto0Qry9lVDk5cHp02p6MjlZdbzt36mpZz7s6Qnt2ikx6dEDeveGXr3U3+Bghx1TtbCJ5saN7F22jMyffqJrVhYlp1FQEISFqeMKCYFu3dTWocM5DxFGi2BpzOWM7CrCCDsqa+O7775jwYIFjBs3jlatWgHoKdsaEBcXd04/apwAEUZ368bV+/dzO+ADfAV8CMRbLGz95x/H2gdqdiw2Fv75R82O2WbI9u1TYlma4GBo3vzM1rSpmg0rvaTj60tsXh6hkybZJaT1cFhVTW67TQnF+Th9Wk2FHD6stkOHVN7L//s/+OgjyM9X+7VoobLV/OtfcPHFamvatFYPoUrk5cGmTSoV3R9/qPJMxQHbnsBe4HMgGvgHeGfBAsIjIqrUtC2WrTTV9UgNCQkpV8Cq44wTGRlZrqhVJytQdduwOXvoKVuNy2MyEXX8OMuAp4C7gIeAb4Ej27fDSy/B3XdDXTnIFRTA7t3K+33rVrVt26buxaDuq127qu266878u107aNas6rOGsbEwaZJ9tta4kqmLYyvsHRMTY39jeXkiO3eKfP65yMsvi9x4o0jTpqowL4h07SoyerTIBx+I7NsnUlQkIqo4uMViEbPZLBaLRaKiouy3xUZursjvv4u89prINdeINGigbGnUSOTaa5WdX38tV/bsKSaTSVBLkwKIyWSSsLCwKn+VxWKxu42oqKiSz5X+W92C6UYUXK+oDV2Q2hh0Pzov5V3LF4GsDgoSCQhQ95CLLhJ5912Rkyer1GaV73N5eSIbNohMn67uUf7+Z+6hISEid9wh2++5Rx7o3Fla+foads+MiYmxu7C32wvpoEGDavRjnPfkKCoS2b9fZNkykSeeEBkwQMTTU50UHTrIwauvljtAWpQSHqDatkyYMEHMZrN4gVzh4yPfXnaZOglLC+cNN4jMmiWyaZNIfn6Zz5vN5jIXjW0zm83V6gtnEcHaRAuAMeh+dF4qvZazs0VWrhQZNkzEy0ttN9+sBhCZmdVqLyoqSt0jt2w5VzgbNhS5/nqR118X+eUXkWKBq7QtO4530KBBWkhrik1IAwMDq/1j1PgHTU8XWbtW5N//llizueRpazPINJBBIBdYLFUzIi9P3hk1SiaBfA+SWdxWOsiuzp2VcP711znCeTZGjCZFnF8EjSA5OVmWL18uycnJjjbFpdH96NxU6VpOTBSZO1ekf391H/PzEwkPF1m+vET4RM69v5hBbgJZGRws0qZNWeGcOVNk48YK71lG3atKH2dpDdBCWgNsQuqoqUyz2SwtQO4CWQJyslgIk0HkjjtEFi8WSUg484G8PJE//hCZMUPkuutKnt4yQL4BmQAyAMTTQaNJjUZTP6j2ktP+/erB/aKLlDD6+ooMHy4yf77c5+kpD4I8DbIG5HTxfW4viDz5pMiPP6p7WxUwYvasNGffx7WQ1gCbkNo6sjo/hhE/aIcOHcp81gPkYpC3AwLOPOWZTCKhoeoEbdjwzNPb0KEiM2eWCGd5tlQHdxhNGkFBQYGcOnVKCgoKHG2KS6P70Xmxe/r00CGRt946I6oghSDZIJtAngUJBTH7+lbbNqNHpLb7uK1Ne4TU7VMENm/evNreoWcnigb7072ZgQZAocmkkhg0bqxOw5gY5WHr5QVjxsCGDSpX5sSJRJvNFJbXltlcre+u79VGjCIxMZE333yTxLPd7DXVQvej8zJlypQST3WgxHO9SsUVcnOVh+1vvynv2mI8UPe3/sAzwMvAqIICFe9ZDWx5hUsjdtTqtd3HmzdvXqPPl8bthRSq/2PY/YOKYI6L4zZUAvM/UUkMfgLGpqWp+KaJE+HLL5Vr9m+/qTCdL79UoTUXXQTvvsvEBx4ot/knnniiysei0Wg0NmoUyrZzJzz1lErQEhGhwgRnzoQjR/hX7940ABqhUmguBEKBBYWFKkyle3d49FFYtgwOHFCDh2pytr1Vpbz7eI2p8VjWxbFN7bZr104mTpxYrc/apj/O3sqd/igqEjl4UDkZRUaqRfXg4JJpj4PFa6QPgfQG6VuZs1F2tsiqVWe85nx9ZXPPnnKVj0/J1HJ1j8V2PLUWhlOP0N6mxqD70Xmp8vRpZqbIRx+J/Otf6l7WrJnIs8+K7NpVZreKpoq/XrRIeQCPGyfSrduZMJfmzdX66owZIuvXi2RkVN+2ajBhwgRp166dXiOtKTYhbdGiRbW9dsv7QT1BhvboIbJunYqxeughkYEDVfiJ7SRp2lSFokRGyv+98II0tcfJJyFBebl16aLa7tlTZM4ckZSUavVDbbiU11e0ABiD7kfn5bzOh//8I/Lgg8pXw2RS/hqrV6u49UraPK8PRlKSyNdfi7z4oshVV53xCUGFC8pNN8lMT0+5s3jA4W2As5HtWG0aoIW0BpQW0vM+1RQViaSlqaetH3+Usd7eMgHkbZC1ILtAcmw/Ooh4e4tYLCKjRqlYqG++ETl6tCQRgw1DnHwKC0V++EHk1lvVKNXPT53oO3ZU6eO18ZRXX9ECYAy6H52bs+9LX6xaJWK1ilxxhbq/tWkjMnmyyOHDtWdEQYES7cWLRSZMEBk6VOK9vUvusfnFs3k/g6wNDBR55RWRTz4R+eknkT17VLKI8ziz2e59Rgip2+fanQkEAGZPT8bceadKapyerra0tDN/bUnbi0kDTgAHgH3AfqCwUyfm/e9/Kh+tt3edHg8A8fEqXeG8eaoiy5Ah8O9/q/qDHuUvhxuR49ZdKCoqIj8/H29vbzwq6E/N+dH96CKkpMDHH6u6pYcPw6WXwhNPwC23OOT+ZrVauT8igj5AD6Aj0AG4LjSU4IwMdc8rjc1x01Z4JChI5dr18QEfHz5aupTswkLSUQ5QOml9DbAJ6f+hKoR4N2hAWL9+Kplxkyaq9FdAwJl/N2+uqr60asWav/7illGjnDdReV4erF4Nb7+t8ut27aoE9b77VHWbUhiR6F2j0TgOq9XKlClTjCt7tn8/zJ4Nn36qksTfeacS0AsvNMzmmlJpKcKcHOXoFB9/btGR5GT1YFCqHOOOrVspzM4mHxiAfULq9lO7tqwW9S2dnYioqeQNG0Ruv13Ew0Ot0U6bVmYdVSdkqDpJSUmyZMkSSUpKcrQpLo3uR+Mw1Mdh69Yz94pmzUSmTi2bFKaeoTMbGUDpXLtuIRr794s88ojKOtKwofKwO35cRFzkocAJ0Gt7xqD70Tjs9nEoKlIOktdco9YfO3USee89kaysWrXbWTAq167bl1FbuHAhIVUpo+bqdO6s1jpeeQXmzFH/njsXxowhfOJEwvU0rkbjctS4hKEIfPUVvPqqWv7p2xdWrIBbb616+bF6QHh4OL1797YrmQ7ohAzuR4sWMH26WkuYNg3WrlX1BW+/HaKjHW2dRqOpBtXOsiaiErv06wc336x8Qr7/XtX6vOMOtxJRI9FC6q4EBKjsSYcOKS/fTZtU1qSRI2HHjmo3Z7VaCQsLw8/Pj7CwMKxWq/E2azSaMtiy89jEtMJC9EVFYLXCBRfAiBHq+v/5Z/j1V1UU+ywx1lQTg6aaXQ7bGqlepykmL0/k449FOnZUgda33aaKlVcBd0nqcOrUKdm4caOcOnXK0aa4NLofjaVSH4eiIhUDarGoNdCrrlI1PjUlnDhxQseR1hRb+ItdLs/1kfx8WLRIrZ0cOaKmfF95BXr0qPAjOoRGo3FCfv9dzTpt2ABXXw2TJ6tYUE0ZjNACt5/a1UkHzsLbGx54QCXL/+ADdRH26gV33QV79pT7kRo7PLgY2dnZbN++XZ8zdqL7sZaJiYHwcCWa2dnwww+wbp0W0Qow4jx0eyFNT093tAnOiY8PjBunBHXePFWBplcvldThyJEyu9ZGWTlnJC0tjS+++IK0tDRHm+LS6H6sJRIS4JFH1HW6dSssXQqbN6sMZ5oKMUIDnFZIN23axGOPPUavXr3w9/enffv23HbbbcTGxpbZb+zYsZhMpnO27t27O8jyeoavLzz8MOzbB//5D3z9NXTrBk8+CcX1JKvs8KDRaIzn1CmYMgW6dIHPPlMlzPbsgVGjKkwNqjEWp/V1njlzJr///jsjR47EYrEQHx/Pu+++y4UXXsiff/5J7969S/b19fXlo48+KvP5gICAuja5fuPrq9KE3XefSj34xhsqD+dTTxH+zDNERUVVnLpLo9EYT0GBugYjI1U+8CeegOefV/llNXWLEV5PtcHvv/8uuWeV5omNjRVfX18ZNWpUyWtjxowRf3//ardv89qNiYmx21a3JClJVWUwm0WCgkTefLPeZ0PRGXmMQfejnTWAi4pEvvxSpHt35WF/990ihw7VnrH1nJiYGLu9dp123D9o0CB8fHzKvNatWzd69erF7t27z9m/sLCQjIyMan+PtyOqtNQHgoNh1iw15TtyJEyapKZ8P/xQPSnXQ7y9vWnbtq0+Z+zE3fvRarUSERFBdHQ0OTk5REdHExERUbXY6z//hMsvVxVY2rWDLVtg8WJVcUpTI4w4D51WSMtDREhISKBp06ZlXs/KyqJx48YEBAQQFBTEo48+yqlTp6rUpre3NxkZGSVbbm5ubZhef2nTRnn37t6tLvBx46BnT/j8cxUEXo9o2rQp999//znnn6Z6uHs/TpkypcSPACjxL5g6dWrFH9q7Vz2wDhwImZnw3//C//6nEixo7CI4ONjuNlxKSJctW8bx48e5/fbbS15r1aoVEydOZOHChaxYsYLhw4czb948hg4dSkEVRkbt2rUjICCgZJsxY0ZtHkL9pVs3WL4ctm2DkBCVbqxfP/juO5WWTKPRANUMF0tMhMceUw+nGzeqGO8tW+Daa+vIWk2VMGaWufbZvXu3NG7cWAYOHCgF56l8/tprrwkgK1asqHAf2xrp1q1bJT09vWTLyckx2nT35LffRC69VGVTuewykV9/dbRFdqPX9ozB3fuxShVbTp1SJQ8bNhQJCBCZNUskO9tRJtdr6vUaaWni4+O58cYbCQgIYPXq1Xh6ela6/1NPPYWHhwfr1q07b9v+/v40bty4ZPP19TXKbPfm0ktVHs9vvlFTUZdfDtdfr56mNRo3ptJwsYIC5WfQrZsqKjFunCq0PWGCSjCvcUqcXkjT09O5/vrrSUtL4/vvv6d169bn/Yyfnx/BwcGkpKTUgYWaCjGZ4IYblHiuXAkHD0L//qpU065d5+yuE99r3IHw8HCioqKwWCyYzWYsFgvWqChGeHmpwhHjxsFVV6kMRbNnK8c+jVPj1EKak5PDsGHDiI2N5euvv6Znz55V+lxmZiZJSUk0a9asli3UVAkPjzNVZRYuVNlW+vSBMWOUuGKnJ6NG42KEh4ezbds2srOz2bZgASPmzIHhw6FVK3V9LF0KHTs62kxNFXFaIS0sLOT222/njz/+YNWqVQwcOPCcfXJycsjMzDzn9WnTpiEiDB06tC5M1VQVLy8YO1Y9ac+dq7wOQ0PhkUeY99JL1fdk1Ghcmf37VVGIiy+G1FTlmLdunXLS07gUTlv95cknn2TOnDkMGzaM22677Zz3R48ezaFDh7jgggu48847S1IC/ve//+Xbb79l6NChfPPNN3hUkCLLlvE/OTmZoKCgWj0WTQVkZcG778Lrr5Odmsq7wEwgudQuZrPZaZKbFxQUkJGRQePGjfHSBZBrjNv348mTqrrS++9DixZqLfTuu+E8vh+a2iElJYXg4GC7qr84rZBeeeWV/PLLLxW+LyKkpaXx+OOP8+eff3LixAkKCwvp2rUro0aN4tlnn6000FaXUXMi0tP5ICSEUYmJCDAX+A+QqkuxaeoTWVkqvebrryv/gRdeUGn9/PwcbZlbY4QWOO3j4Pr168+7T5MmTViyZIld35OamqqF1NEEBND8/ffpHBHBJOAp4N/AeyL0efJJx9pWitTUVH7++WcGDx5MoM5nWmPcrh8LC1X858svq9Hoo4/Ciy+CmyakcDZSU1PtbsNp10jrCp3JyDkIDw9nflQUS8PC6O7ry8rmzXnGbObGRx+FZ5+F+HhHm1jiBJWTk+NoU1wat+lHEfj2WwgLg/vvVyFge/aoKkpaRJ0GIzTA7YVU4zzYPBmP5uRwf0IC3seOwdNPq7i6jh3hoYdUfVSNpo6pdmjW5s0qhOXGG6FZM/jrL1ixAjp3rhuDNXWKFlKN8xIcrBwxDh1S02Jr1kD37jBiBPz+u6Ot07gJ1QrN2rdPpcccMEBN437zDfz0k/q/pt6ihVTj/AQGqjWlQ4dgwQKVIP/SS2HQIFi1CvLzHW2hph5TpSTzJ07Aww9Djx7qIe+jj+Cff1RCkuIMRpr6i9sLqb+/v6NN0FQVsxkeeEBlRVq7VsWl3nYbtG9/RmhrkYYNG3LFFVfQsGHDWv2e+o6r9WOlSeZTU+G556BrV/VQ9/rravnh/vt1OIuLYIQGOG34S22jw1/qCdHRMH8+LFkCmZnEX3AB05OTWRgfT+fQUCIjIwkPD3e0lRoXJiwsjOjo6DJi6g9Mb9mSJ7KzVX7cp55STnEBAY4zVFMjjNACtx+Raq9dF6dPH5XU4cQJtjz8MEe2bmXu4cMczM3l0e3beS8igi9WrTLkq3Jzc9m3b58+Z+zE1fqxdJJ5L2A8sBd4LCkJ7rlHZSiaNk2LqIuivXYNwIgYIo0T4O/Pfb//zr9MJvoCHwFDgB+By++6Cx55BNavt2s9NSUlhWXLluliCHbiav0YHh6OdeVKnmvXjj0mE+8C+VdcgUdsrEp12aKFo03U2IGOI9VoSmFby/oHeB7oAgwAlojA11/D4MHKE3jECJg3T00LFxU51miNc1NQAJ9+yogXXmD6kSN0uekmPLZvp/369dCpk6Ot0zgJTpvZSKOpLiEhIeesZW0xmcjv3Zsnt26FrVvhv/+F77+Hf/9b3SSbNIGLLoK+fdXWvTt06QJ63dy9yc+HxYth+nQ4cABuuQU+/xwuvNDRlmmcEC2kmnpDZGQkERERJaEKZQome3ioWqj9+ysP36wsFST/228qeP6zz2DWrDONBQerklbNmqksNP7+0LCh+vc774Cvr/Ii9vNTfyvamjRRbTRposMgXIGcnDMCevgwRERAVJR6yNJoKsDthdRTu6jXG2wFk6dOnUpMTAyhxV67I0aMOHfnBg3gyivVZiM1VYUu7N+vRiEJCSqoPikJjh/H09ubwP798fzpJ/VeTo7asrNVOrjK8PJSgmrbWrSAtm1V6E7pzQ0E19PTk8DAwFq99qxWK1OmTCE2NpaQkJDze2+fPKmqsbz3nvr3yJFqOaB371qzUeMcGHEe6vAXHf6iOYtq34RF1FSgTVhLC2xqqroxn73Fx8PRo3DsWFkHKH9/lUauWzcICVF/bf9u3rzei6wR2DIRnT0zERUVde7vGBOjct8uWqT6duxYePJJ1d8at8AQLRA3JT09XQBJT093tCkaJyIqKkoAMZlMZf5GRUVV+hmLxSJms1ksFkuF+5a7X2GhyIkTIn/+KbJqlcibb8q+oUNlQ8OGcgikUMm02ho3Fhk4UGTcOPn7/vvlvs6dpY2vb/W/s55jsVhKfjfbZjKZJCwsTO1QWCiybp3IsGGqX1u0EJk2TeTkSYfarXEMRmiB2wvp3r17HW2Kxomo7CYcHx8vs2bNkvj4+JL9qyq8Nd3PDNIT5I+JE0VmzBAZNUpSO3aUnFICewLkfyCxN90ksmiRyI4dIvn51XooqEvBLa8fjcRsNpf5/WxbZ19fkVdfFenUSfVdr14iH38skpNTK3ZoXIO9e/dqIa0pNiGNiYlxtCkaJ6Kim7DZbJYTJ07I5MmT5cSJEyX7n3f0Uwv7WSwW8QbpDjISZAqIFeSwj8+Z0aufn2xr0EDeBbkXJAzEq4LvrA3BrWy/8vqxOm2fj9J96AUyHGQtSAGINGggMnasyP/9n0hRUY3a19QvYmJitJDWFC2kmvKoTMjKE4DKhLc0Ru5X6T5paSI//ywye7Ys9/CQXaWmh3NA/gL50NNTZP58kU2bRLKzqyzyRo2+y+vHmkypV0TUqlUyCGQuSFzxsW8E2frQQ6p/NJpSaCG1Ay2kmvKo6IZutVqdakRanbb8QQaBPAayECTGbBbx9FQjVy8v+cdkkoUgT4BcBtK4ApE36hjs6ccKyc4W+f57kcceE2nbVgQk3ttb5np6ysiQELFarVVrR+N2aCG1Ay2kmoqIioqSsLAwMZvNEhYWVnITrs5I6uwbt5H7GdJWVpZycHrvPVkVFCR/gWRzZt11H8j/AgLUmuLXX4scPy5mX19DRtX2jOxLKCwU+ftvkbfeUk5D/v7K9g4dRB5/XOS339Q+Gs150EJqBzYhPak99TRVJDc3V44cOSK5ubllXq9IeM/GyP2MbgsQb5DeIHeDzAZJ7N1bJCCgRFzTPT1lA8gnIBNBhoGEgPSzWMq0d77RZXn9WOlnCgtFDhwQWbNG5KWXRK69ViQwUNnl6ysyeLDI9Oki0dF63VNTbU6ePGm3kOo4Uh1HqtFgtVrLT2Qhouq8btvGjqgotixbRnegB2C7asTDA1Pr1tCuHbRvT2x2Nh+sXUsqkAIlf2d/8AHX3XQT+PioTFP5+ZCXB7m5/PzFF8yYNIkgoBXQHmgLXNOpE03i41VMLqhEFgMGqO3yy+Ff/1IZpDSaGmKEFri9kB49epS2bds62hyNC5CRkcEff/zBwIED3fbhq0Rw9+zh0i5deOX227msZUuVXOLIEbUdPUrBsWN4VVCeKqNxY/4YOJCBf/xB44yMc97PAhJ8ffEPDaX5xRdDz57Qowf06gVt2uikFBpDOXbsGO3atbNLSN0+RWBWVpajTdC4CKdPn+bPP//EYrG4rZCGh4dXqVC6F6jRZmqq2lJS4PRpyM/ndHo6f8bGYrnvPhoHBKgRapMmEBgIgYE0aNyYTlosNXWEERrg9kKq0WhqCR8fNRV7dr3OuDiV0/iyy1RhAI3GxdH1SDUajUajsQMtpBqNRqPR2IHbC6mfn5+jTdC4CA0aNKB///40aNDA0aa4NLofNc6EERrg9l67OvxFo9Fo3BcjtMDtR6T5pWtBajSVkJ+fT1xcnD5n7ET3o8aZMOI8NExIc3JyyK0gbsyZSU5OdrQJGhchKSmJBQsWkJSU5GhTXBrdjxpnwggNqHH4y/r161mzZg2///47u3btIrs480iDBg3o0aMHgwYN4pZbbuHKK6+020iNRqPRaJyVaglpfn4+8+fP56233uLQoUMEBQVx4YUXMnr0aAIDAxERUlNTOXjwIEuXLmXu3Ll06NCBZ555hoceeghvb+/aOg6NRqPRaBxCtYS0a9eu5OXlMWbMGG677TYuvPDCSvffsmULq1atYvr06bz55pscOnTIHls1Go1Go3E6qiWkL7zwAmPHjsXX17dK+/fr149+/foxdepUFi5cWCMDaxuTTkWmqSImkwkfHx99ztiJ7keNM2HEeVjt8JfU1FQCAwPt/mJHo8NfNBqNRuOQ8JeWLVsyYsQIVq9e7ZJeuhqNRqPRGEm1hfTWW29l3bp13H777bRo0YL77ruPH3/8EVfN66Bd8DVV5eTJk8ybN4+TJ0862hSXRvejxpkwQgOqLaTLli0jMTGRpUuXctlll7Fs2TKuvfZa2rRpwzPPPMOWLVvsNqouKSgocLQJGhehoKCAkydP6nPGTnQ/apwJI87DGiVk8PPz48477+Srr74iPj6eefPm0a1bN95++20uuugiunfvzquvvsqBAwfsNlCj0Wg0GmfG7sxGgYGBPPTQQ/zyyy8cOXKE119/nQYNGvDKK6/QrVs3Bg0aVKN2N23axGOPPUavXr3w9/enffv23HbbbcTGxp6z7+7duxk6dCgNGzYkKCiIu+++W08baTQajaZOMDTXbps2bZgwYQKLFi3i5ptvRkTYuHFjjdqaOXMmUVFRXH311cyZM4dx48bx66+/cuGFF7Jjx46S/Y4dO8bll1/Ovn37mD59Os8++yzffPMN11xzDXl5eUYdmkaj0Wg05SMGcfjwYZkxY4ZYLBbx8PAQk8kkl1xyicybN69G7f3++++Sm5tb5rXY2Fjx9fWVUaNGlbw2fvx48fPzk8OHD5e89sMPPwgg8+fPr7D99PR0ASQhIaFG9mncj+zsbNmzZ49kZ2c72hSXRvejxplISEgQQNLT02vchl1l1JKSkli5ciXLly/njz/+QETo3r07o0aNYtSoUXTs2NEovS+hX79+ACVOTS1atOCKK65g5cqVZfYLDQ2lXbt2rFu3rtx2dBypRqPRaIzQgmonrT99+jRffPEFy5cv58cffyQ/P59WrVrx5JNPMmrUqPOmDbQHESEhIYFevXoBcPz4cRITE+nfv/85+1500UV8++23523z1KlTWkg1VeLUqVP8/fffXHDBBTRs2NDR5rgsuh81zsSpU6fsbqPaQtq8eXNycnJo2LAhd911F6NGjeKqq67Cw6P2S5suW7aM48ePM3XqVADi4uIAaNWq1Tn7tmrVipSUFHJzcytNaZiQkFDmYvb19a1yCkSNe5GZmclPP/1E165dtQDYge5HjTNhhJBWW/2GDBnCihUrSEhIYOHChQwZMqRORHTPnj08+uijDBw4kDFjxgCUlG4rT/jMZnOZfSri+uuvJyAgoGSbMWOGwZZrNBqNpj5T7RHpmjVrasOOSomPj+fGG28kICCA1atX4+npCah4VqDcVIU5OTll9qmI7777ji5dupT8X49GNRqNRlMdalzYuzS5ubls3bqVxMRELrnkEpo2bWpEswCkp6dz/fXXk5aWxm+//Ubr1q1L3rNN6dqmeEsTFxdHUFDQeYXR399fr5FqNBqNpsbYPSc7d+5cWrVqxaWXXkp4eDjbt28HlEdv06ZN+eSTT2rcdk5ODsOGDSM2Npavv/6anj17lnm/TZs2NGvWjM2bN5/z2b/++ou+ffue9zv0CFRTVcxmMz179ixZNtDUDN2PGmfCCA2wS0gXLlzIk08+ydChQ/n444/LJK5v2rQpV111FZ999lmN2i4sLOT222/njz/+YNWqVQwcOLDc/SIiIvj66685evRoyWs//vgjsbGxjBw58rzfUx9KwmnqhsDAQEaOHKnPGTvR/ahxJow4D+2a2p09ezY333wzy5cvJzk5+Zz3+/Xrx9y5c2vU9jPPPMPatWsZNmwYKSkpLF26tMz7o0ePBlSx8VWrVjF48GD+/e9/c+rUKd544w369OnDvffee97vKSwsrJF9GvejsLCQ06dP4+/vX7JOr6k+uh81zoQRGmCXkO7bt48nnniiwveDgoLKFdiqsG3bNgC++uorvvrqq3Petwlpu3bt+OWXX3j66ad57rnn8PHx4cYbb2T27NlVGrKfPHlSPxlrqkRiYiILFixg3Lhx5YZcaaqG7keNM2FEXna7hLRJkyaV1nLbtWsXLVu2rFHb69evr/K+vXr14r///W+Nvkej0Wg0Gnuwa430hhtuYMGCBaSlpZ3z3s6dO/nwww8ZPny4PV+h0Wg0Go1TY5eQvvrqqxQWFtK7d29eeuklTCYTixYtYvTo0fTv35/mzZvzyiuvGGWrRqPRaDROh11C2rp1a7Zs2cLQoUP5/PPPERGWLFnCV199xZ133smff/5paEypRqPRaDTOhl3VX87m5MmTFBUV0axZszpJG2gPtoz/aWlpBAQEONocjQsgIhQWFuLp6YnJZHK0OS6L7keNM5Genk6TJk3qtvpLZTRr1szI5uoEfSFrqorJZMLLy9BLxi3R/ahxJozQgGoNG3v27MnixYvJy8ur8mdyc3NZuHDhOVmJnIWUlBRHm6BxEZKTk/n0009rHNKlUeh+1DgTRmhAtR4Lx44dy9NPP82///1vhg8fzpAhQ7jwwgvp1KkTDRo0AFS90oMHD7J582bWrVvHV199hY+PDxMmTLDb2NqgOg8FGvcmLy+Pw4cP63PGTnQ/apwJI87DagnpxIkTGT9+PB9//DGffvopS5YsKRkW26ZqCgoKALUO0rt3b6ZMmcJ9992nE8NrNBqNpl5S7YWKRo0a8eSTT/Lkk09y6NAhNmzYwJ49e0qmaYKDg+nevTsDBw6kU6dOhhus0Wg0Go0zYdeKf8eOHenYsaNBpmg0Go1G43o4d4xKHaCnnDVVJSAggGHDhulwKTvR/ahxJozQAEPjSF0JWxypPbFDGo1Go3FtjNACtx+RZmVlOdoEjYuQlZXF1q1b9TljJ7ofNc6EEeeh2wtpRkaGo03QuAjp6el89dVXpKenO9oUp8dqtRIWFoafnx9hYWFYrdaS9yrqx8o+o9HUFkZogNsLqUajqTpVETur1UpERATR0dHk5uRwZPt2no2IYN1//gNbt0J0tNpx1y745x/Ys4dvP/6Yu4o/k5OTQ3R0NBEREVpMNS6BztOl0WiqhE0gTSYTIkLs9u28EhFBq0mTGNimDRw9CkeP0mntWvYCQSI0odTT+tNPq7+tWsFDD8Hdd0NcHAA3ADlAlgjxwFERjgHJ48dDdjb06AHdu0Nx4heNxpmoFSE9ePAgn3zyCSJC9+7dsVgs9OzZU+fX1GicFKvVypQpU4iNjSUkJITIyEjCw8PVmxkZsH070U88wWwgRITuQCfAE2DmTPDxgXbtoF07duXkcAxIAVJLbQU+PqzfsAFOn4aff4Zly8DfH3JyiBgyBP/8fAKB1kA7oD3QNTERRo9Wdnh4QM+e0L8/XHQRXHaZ+r+TF8jQ1H9qRdmGDRtGr1696NatG1FRUURGRnL8+HFCQ0P5559/auMra4yPj4+jTdC4CD4+PnTo0KHenTMlI02gFdB++3a2RkRw8b/+RZvERDhwAICXgAPAHuCL4r8xwDFfXw5lZZUI2qywMKKjoykdEGAymbD06AH9+uGTnEyHAwfwsVggOBiAfT16lP8Zi4Vt69fDnj2wYwds2qS2pUuhoACaNoUrr4QhQ+DGG6Ft21rvL039wpDrWWqBgIAAKSoqKvNaZmam/PHHH7XxdTUiPT1dAElPT3e0KRpNrREVFSUWi0XMZrNYLBaJiopSbxQUiOzeLbJsmXzSrJn8DyQRRIq3ZJCNDRuKPP20yOLFIv/8I/169xaTySRAyWYymSQsLOyc77S9V/qv1Wqt1M5qfeb0aZF160Reeklk0CART09le1iYyMsvyw+zZ4ulT59zj1ujOQsjtKBWhPTuu++WTZs21UbThmHrvLS0NEebonERioqKJD8//5yHREdQoUCetQ8g3iAWkHtB5oIkhYaK+PuXiOZBk0msIK+ADANpVyySZrO53PaqInZRUVESFhYmZrNZwsLCyuxTUT9W9pnzkpIismKFyKhRklt8bLtBpoB0KT4eLaaa8khLS3NOIb3jjjukQ4cO8umnn0p8fHxtfIXd2IQ0JibG0aZoXIQTJ07I5MmT5cSJEw61oyJBi4qKEsnKEtm4UeT992VVUJBsAskpFsxCkF0g3zZpIvLGGyI//iiSnCwWi6VKI03bd9dY7Iqp7X68sHdvuQHkE5DU4mP/CeT59u3VSFajKUVMTIzdQlorq/QDBgxg8ODBvPPOO3Tq1IlWrVoxdOhQJk2aVBtfp9HUK84XYjJlyhQ8gE4iDAeeF2E5YBk1Cho1gosvhscfJyQ1lWjgWeASoDHQEwjPyYFnn4WrroKgICIjIxGRkkpONq/cyMjIc2wLDw9n27ZtZGdns23bNkaMGFGrfVETdu3bx7fAfag131Gop4PpR45A69Ywfjxs3qwkVqMxAMOE9NSpUyX/fvrpp1m4cCGbN2/m1KlT/PLLLzz44IP4+fkZ9XUajdNQ1UQC1Y3BzMnJYc/27bwQEcGG55+H2bPh3nv5JDqaDGA/sAYllG2An/LzYd485YyTmcndffpwv8nEu8AG4DRKJENDQ8t8Z3h4OFFRUVgsFsxmMxaLBavV6pQiWRVCQkJKHgpygOXAEJOJm7p3h8ceg6++ggEDoF8/5bSk66Jq7MWo4XHLli1L/v3AAw/I3LlzZf369ZKammrUVxiKntrVVERF64/lTUlWOs16Vpvl7rdqlciJEyJ//imyapXMatVK3gX5HmQ/SEEpByBp0EBkwAD5IjBQnga5BqSVwU4/dUFtT+2e97gLCkS+/lrkuutUv7ZuLTJ9ukhycq3Yo3FujJjaNUxIc3NzS/49Z84cuf/++2XAgAHi7+8vbdq0keuvv14mTZpk1NfZjRZSTXlUJozlCYDFYhEPEDNIE5CWIJ1AbgkNFdmyRXmWfvaZTG/dWqaAvAeyEmR9sVDmmUxnhBLkFEg0iBVkJsgDIFeAdPb1FSl2zjHK6cdR1MVac5WPe8cOkQceEPH1VQ8qjzwiou8JboURQlrr1V9EhH379rF9+3aio6OZPHlybX5dlbFl/E9JSSEwMNDR5micgYQExl5yCezfT0egJdAMCAaCGzSgZ7dunAb809PxzMqCnBxyMzLwrULTecDJUlsicBSI8/JijtUK7dtDu3aEXXkl0Tt2lB9PuW1byWtWq5WpU6cSExNDaGgokZGRLjMVW1hYyOnTp/H398fT09PR5igSE+GDD+C99+DkSYiIgBdfhL59HW2ZppZJTU0lKCjIruovuoyaLqPmnqSmwh9/wO+/K8eTf/6BhISSt+OKt5NAEpDj6cn9jzwCZnOZ7bXZszlw4gTZqPW4HCAXaNe1K59+9hk0aQLNmhF26aVVFsjSafhsf115zdKlyMmBJUvg9ddVIophw+Dll9WaqqZeYogW2D8wPpe4uDiZNWuWzJgxQ6xWq+zbt682vsYubFO7hw4dcrQpmrqgsFBk82aRyZNF+vcXsU2pNm8uMmyYyMsvi6xeLSNCQqRBqTAQSq0/pqSkyMqVKyUlJaWk2apOs7r6dKyRlNePTkd+vsiiRSKhoSIg8X37yj1duugED/WQQ4cOOc8aaWnCwsLkuuuukyeeeEKGDh0qrVu3loYNG8rFF19cG19XI/Qaaf2ktKNQv969ZcOkSSL33y/SqpUSzoAAkdtuE/nkE5G9e0vWHUt/viLBq2htr6rCV98Fsqo4SzxulSgokD+fflq2F69hrwP5l07wUK9wKmej0gQGBkphYWGZ15KSkuTnn3+uja+rETYhbdeunUyYMMHR5mgMwCaC/wKZh0pzJyAZrVuLPPOMyM8/i+TlVamd8gTPpQTAiXG1frQ5lN0C8k/xOfUlyK0hIY42TWMnEyZMkHbt2jlnQoa77rqLX3/9tcxrwcHBXHnllbXxdXaRl5fHG2+8wcSJE6v1OV2E2Mk4epTjjzzCHuAP4CbgA1QCgsuaNYM331TJzb29z9uUKyQd0NQdsbGxFAFfAn2Bu4BewOexsTBqFOzb50DrNDVl4sSJvPHGG+QZEEdcK0L68ssv8/jjj/Paa6+xdetWQwytLVqjPDPnz51b5UwnZwfN6yLEDkJEleMKD4eOHbkvIYGNwNVAR+BFYDcQExPjSCs1Lk7pBA8CrEA9oL3Wti388ouqk/rQQ3DsmCPNdAsMGcAUFUFWFp/PmUMXoIsBdtWK1+6ll17K6dOn6dSpE7t37+bQoUN06dKFsLAwli1bZvTX1Qibp9Zxf39anz595g2TCXx9oWFDCAyEli1VWrEWLaBNG2jdmgciI/ntwAGOo7LFqI+d64GpqSVOn1YZad59V5XW6tULHnuMge++y8Zdu87rGVtTTp06xd9//80FF1xAw4YN7W7PXXG1fqzUk3roUHj/fZg+HU6dgkcfheeeg2bNHG12vaOi3+HLZcu4uW9fOHRIbfHxkJysvPCPHFF/U1NVgfjCwnMGTCf8/Wlz+rTzhb80btyYkydP4uurIuxycnLYuXMn0dHRjB071uivqxE2IZ2MihNs6uHBHUOHqhiyhARISoKsLLWzp6cKdygsVO7xpYgH9gF7gYMeHkxdsQJCQ9VTqm9VIgw1VSY+Ht5+G+bPV8Wmhw+Hxx+HwYPBZNKhI5pa47xxuxkZ6tx88011o37mGbU1auQwm+sVBQXc3KsXPrGx9AZ6oGadOgLNS+9nu1cXFSnhtNGkiRoUBQdDUBAEBfHe0qWcKiwkFZgJzhf+cuedd8rWrVtro2nDsDkb+fr6CiATJ048d6ekJJEffhB5/XUVIhEQoJxXQH4sdmh5DWQJyJ8gSaXTuXl5ifTuLXLXXSIzZ4p8951IQkKZ5qtSCksjyrv2oYdU9plGjUSefVbk4MFyd61Nz9js7GzZs2ePZGdnG9amO1Kv+zEpSZ2fvr4izZqJvPOOSKmsb5oqkJ0t8vvvIm++KXL33SJ9+6r+LL63xhfffz8EeQtklcmk7rW2kLaQEJGxY0XmzxfZulVVRCqHCRMmlNEAp/PajYiIkPbt28uiRYsk4SzxcBZKe+2WK6LlUVAgsnmzTPbwkL+Kf9Ts4pRvN4P4eXmpfJ3/938i8+aJPPywKjrcsOEZge3YUeT22+WfsWNlIIhfqVhFtEt9WbZuFbn9dhEPDxXvOWOGiANzN7uat6mz4hb9ePiwupmbTCJduoh89pmKZdacy9GjIitXijz1lMjFF4v4+Kh7pZ+fyL/+pVI4zpkj13l7SzOQFiDPgGwqvqdmgsiIESILFqi2qoFRXru1IqRn59pt2bKlXHfddVUXrDrAnjhSi8UigLQt/kG3Fv+giV5eIi++KHJ2kofCQpF9+9TF9NRTIoMGSXbx01MuyO8g00GGggzs3dugI3Rhtm0TGT5cXUydO4u8/36FT5V1iVsIQB3gVv24fbvITTepc7lfP5V72c04e+ZtzZIlIl9+qfIad+1adpBx550ic+eq5CmlQ9UKC2Wop6esAskrHsCsBrkVpLGXl132OW0caWmKiookNjZWVq9eLZGRkbX9dVXGHiEtL2i/D8j+oUPV1KOHhxpJbdpUYRsNfX3lQpBHQT4vnq4QkHwQGTBAZOJEVXg5J8eew3Qp/jdnjnxfPH1+yMdH/nriCZVhxklwKwGoRdyyH9evV6MtUFVn/v7b0RbVCVFRUWICGQDyEsivtnuc7SH54YdFbBWQyiM7W400izNM7QB5HFUgguKtvAL01cEhQrpx40ZJrmK5oYMHD8qiRYuqbVRdYG9mowrX4jIzRd57T03ngMjgweoiOguLxVIixLatO8jUtm3VU1mLFmdKZ910k1pr2bvXnkN2XvbulUNXXCEFIIdA7gXxcsLsMW4pALWA2/ZjUZFIVJRawwP5ukkTCfHxqZ/+EQUFIj//LMuCg+VIsXCmgUSBPAxyY/fulX8+PV3ktdfUko7JJDJihKyfNq1WygI6REg9PDxk2bJlJf9PTk4WPz8/WV+OWCxdulQ8PDxqbFxtYhPS/fv3184XFBSIrF6tFspB5Mor1dppMefNvVpYqJ5aX39dibG395mnuEceEVmzRuTUqdqxva44dEitf3h6SoKXlzwC4sO5OW6dhcTERHnvvfckMTHR0aa4NO7ej9bPP5dxICdAckD+AxLsZA+NNSI3VzlVPvCAcrQCOQryNqoUoGepa9tsNpffRmamqg0bFKTWSh96qExZu9pwJty/f3/dC6nJZCojpElJSWIymeTHH388Z197hDQzM1NeeeUVue666yQwMFAAWbhw4Tn7jRkzpsyozraFhoZW2r5NSO3pvCpRVKTWA8LClBCOHCly4ICIVPOkyMgQWbtWiWjnzqots1lO9OsnkW3bSjtfX9d5sj1+XOTRR9XDQbNmIm+9JU2KPefO3iq84DQaF8U2G9UA5AWQ9OLR2jstW7rew3FRkVrCeuwxkeBgdV/q2lVk0iSRjRslrE+fc2beyn1Azs1Va6NNm6r7wiOPVNtxqKYYoQVeNQuaqX2SkpKYOnUq7du3JywsjPXr11e4r6+vLx999FGZ1wICAmrZwipiMsHNN6tyTEuWwAsvqBjTJ5/Eq3fvkuQBoh5qKm6nUSPVxrBh6v9797L9tddIW7SIl4FXgD+2b2dNRAQN33mHax97rNYPrdokJsLMmTBvHvj5wdSp8Nhj0LAh7T/9lPTo6HOSKYSGhjrQYI3GeGJjYxERsoDpwAJUFq5H4uOhWzeYPBnuuw+8nPb2DEePwrJlsHgx7N4NrVopm0eNAotF3feAVyZPLje2OzIyUrUjAl98AZMmwf79cO+9EBmp6vO6EtVV3roakebk5EhcXJyIiGzatKnSEam/v3+127c9hcTGxtbIvhpz6pRIZKTk+/hIQvF6gQc1C3+xPdk2BRkL8gXIadtCfvfuIs89J7JlyzkVTuqc5GSR558X8fcXadxYlTJLSyuzS3XKjDmKuLg4mT59esl5qakZ7t6P5flHmEwmub57d5FRo9T1Gxqq1lMdfe2WJi9POQYNGaLWLf38lL3//a9ayqqACmfedu9Wy1YgMnSo8nB2ALGxsc6ZtN4IfH19admyZZX3LywsJCMjo9rfI3Vd19zfHyZP5vouXfgWeB/YAPQqflqbOnVqlZuyPdkmAZ8CI4CmwEhvbxg4EBYsgH79oGtXlbZsa3GgTl2Rng5TpkCnTjBnDjzxBBw8qJ44z5oxCA8PJyoqCovFgtlsxmKxOF1GIhEhLy+v7s+Zeoa792NkZGTJ6AwoGaU9OH26Sn25dSt06AARETBoEPz2m2MNPnYMXnlF2TRypMoY9PHHKtPY0qVw7bUqo1AlSKmZN4+cHHjxRTVyPXIEvv0WvvsO+vSpi6Op0DZ7qNHcwaFDh9i6dSug0ioB7N27lyZNmpTZ7+DBg/ZZV0WysrJo3LgxWVlZBAYGcueddzJz5swq5fE8ffp0GQH29fUtSW1Ym/zfwYOsQ03rfARsBV4XYfaePVVuIyQkhOizpkNzTCb29uwJn3wC+fmwfj2sXAkffaSmVTt3VhfDyJFw4YUlUzCGcvo0vPMOzJqlLrpHHlFTN82bV/qx8PBwwsPDjbdHo3EibA+NFaYcvOAC+O9/Yd06dd1cfjncdBPMmAG9e9eNkUVF6vvffx+++kotxdx9N4wfXy3BOzttZ7vt27HcdReFXl54vvCCesD386vFA6kjqjuENZlM4uHhUWYr77XSr9tLZVO7zz33nEyaNEk+//xzWbFiRYnz0SWXXCL5lcQg2qZ2W7RoUWaKpa5iXUtP7/iAvIJKzrDf11fkt9+q1Ea1pkPz8kT+9z+RBx884xTQubPIpEny46xZYunTx65UhVFRUTKgd2+Z4OUlyZ6eUujlpRyKjh+vdlvOituGbRiM7sdqUFgosmKFulY9PETuvVfkyJHa+76sLNny0ENyoDglX4zZLFsffFA5O9YA232ubXHoi4D8F2TY+cJf6hAjwl+qPSJduHChYSJuBDNmzCjz/zvuuIOQkBBefPFFVq9ezR133FHp57/77ju6dDlTSKcuRqOgpndsT2p5IkwzmVgtwm8dOsBll6lR3KxZaiq4As77ZFsab2+45hq1vfeeGqmuWkXuvHlclZmJFVgFrN6+nYiICKKioqo8Ovzy889Zd8cdfAG0QE0zTwP+c9VVhLduXd2u0Wg0Njw84I47VKnABQuUg97y5WqZ5PnnVYUqIzh5EubNI+ett+ibkcEXwD3A7zk5yIcfEjV0aI1mi2JjYnhQhDeBTOB2YCVgPnTIGLudBQOFvdaobERaHllZWeLh4SH3339/hfvYRqRJSUkGWVl9yl2ELyhQbuB+fipwu5LsSEZwQZ8+MgRkPsjJ4ifGfSAfN2umct1W5uyQlyfy0UdyzNtbCkEWg3Rx0hhQI8jLy5MTJ05IXunUZZpqo/vRDjIyRF55RTnuNWkiMmuWyv5TU2JiVKym2SzSoIGsCA6WrmeFoNX4Wj5yRH4vzjM+H6SRk94bkpKSnD9FoBFUV0hFRJo1ayYjRoyo8P06iyOtKXv2qNycXl4ir75aqVecPZjN5pILxhPk6rNEVbp1U/mDt28/I6oFBSJLlpTkyVzt4SE9dAyoRlN3xMWpWEsvL5F27UQWLqzePWLbNhXTbjKpLGqvviqSlFTmflDja7moSNkTECBZQUFynZN74xuhBU7rtWsPmZmZJCUl0awKxXVtzlJOR2gobNgAEyfCyy/DlVeqorUGExISUuI9WAj8CDxsMjHUYoHvv1fTzO+9pzzsAgKgQQPw8VGOBz17wrZtTO3dmz1nOS3VxxjQ9PR0vvnmG+c9Z1wE3Y8G0LKlui537eJY27Zw773s9Pbm8U6dsEZFVfy5v/5SdXz79oXNm+GDD9R95cUXITi4zP3ARrWu5bg4FTd/771w88347dvHOCf3xjfkPDRQ2GuNikak2dnZklHOIritzlxlTz325tqtU379VaRDB5UQv1QMrxFUyWEpO1vkhRdUMv1OnZQdHTuqkeqWLRK1enW5T7HO9NRpBNpJxhh0PxqH7fq9COSn4lmk9SA/zZhRdlnm119Frr32TIzq4sXlFoSwK5575UqV2q95c5XNzUVwieov9vDOO+/ItGnTZPz48QJIeHi4TJs2TaZNmyZpaWly8OBBadKkiYwfP17mzJkjc+bMkRtuuEEAGTp0qBRWUv/PpYRURCUwuPNOdSGMG2ffushZVBgwXVioLo4+fdT3hoWpAOzJk1WtxcBAEZBTzZvLmyCDQEylhNQl0hVWAy0AxqD70TjOTu4wFOQf27KMh4daSy2+TqVPH5HPPz/vFHC189meOiVy//3qO269VeTkSQOPsPap90LaoUOHckc6gBw8eFBSU1Nl9OjR0rVrV2nQoIH4+vpKr169ZPr06ed1ZHA5IRVRT5gLFqhq8X371l41mIIC5XLfs6e6OK65pvyQnLw8kR9+kM+DgiSu+OI9AfJe8VprP4ulduxzEFoAjEH3o3GUt6bpAfJvLy+RJ55QAnfHHap6VG0UFv/7bzXCbdBA5KOPnCsTUxWp90Jam7ikkNr4+2/l6NOokfz5zDNliubWNAbUYrGIv6+vPN+unWS0bq0E9PrrRTZsOO/nzWazeBSPSGeDHCwW1SRQI9e1a0VOn67BgToXWgCMQfejcZw9Ig0D+co2Ij17Gz5c5K+/jPnioiKRt99WFVrCwlS6PxfF6YS0sLBQDh8+LLm5uUY2WyvYhPRoHVUYMJz0dDk6aJAIyDuopA41ydcbFRUlXiBjQGKKL7i1ID/NnFnlNsrLHdoP5MPmzUsK8oqvr8qn+c47JdVvXI309HT5/vvvndfT20XQ/WgctjXNbiDLi6/fGJC/nnpKlSlMSBBJTRVZtKikDqpcd12Vk76US2KiyI03qrb+/W9Dl5kcwdGjR51LSOPj48XDw6PcBPbOhtOHv1QBS58+8giqpuEGkNZUM0YrI0PeaNWqpPDuFyAXVLcNqYKDwp49Im+9JXL11WfqqnbvLvLMMyI//qhKKMmZkbE9o2uNxq04elT+tFgkH+QIyMNeXvLcM8+Uv29Bgchnn4n07q2uwSuuEFm3rnrTsT/8INKypSp39vXXhhyCozFCCwwX0ooqwTgbts476WIL46WxrY8MKL6I4kAurUrMV1ycqsYSECB5IAtBemFfDGiVHRTS01VVi/vvF2nVSl3QjRrJ8QED5DGQnlBGjJ1JTHNzc+XIkSMuMePizOh+NICUFJFnn5UCb29JBHkKxLeq101hocgXX4hceKG6/vr1UwJbSUpVyctTNUZNJlX9pR5Ny588edL5hNTVRqQuuUZaTOkp1WYgP4PkgbzeunX5T5l79qhcuz4+KoTlmWdkSPfuVSu8WxsUFqoyb9OmySZ/f8ktHhkfB1kCci/ITd27V+uJuTZHtXptzxh0P9pBTo7I7NnKE9ffX95r0aIkY1C1r9+iIpHvv1fCCCqkbc4ceeHf/y55SDf7+sq8O+5QoW9eXiIzZ9aO05IDcbo1UlcckbqykJ49peoF8qbNsWD0aOXgc/SoGgGOGKGeJlu2FHn9dbVuUk4bjso8YjabpQHItSAzQTaBFNqOpUULkfBwdQP588+SqeCzqehYjBJTLQDGoPuxBhQVqVFjp04inp4qrV9cnDGZiERUOtC77pICk0mSQaaBPAISXXwNxgUHG+eo5GQ4nZDm5eXJ+vXrJe2sos3OSH0QUpEKplRXrFDu6GbzGY+9Hj2Ue3pOTtXaqGPKc1hqAvJIp04qGcQVV5w5Hl9fkYsuEhk/Xh3T33+L5OVVWDC5uqPrika1FQmAXtutHlpIq8kvv6gRIYgMGyaya1fJW0ad8zZCfH1lNkgGSD7IapCrikem9RWnE1JXoj4Jaemb+HfvvScycaJKaA0qm8k//zjazPNSpZFxbq4akb79tsjdd6s4V5OpRFy3mkyyBOR5kJuLPRk9q/l0XtmotjwBqO1RcH1EC2kV2b1bhayASP/+IuvXn7OL0TNKgISCbC9+AM8G2Q/yPxD59FORrCx7j8rp0EJqBzYh3VtbSQ3qANtF5AUyHOTb4unQXH9/kSefFHnjDSWoTZqIfPCB0wdL12hknJmpXPnffltWBQXJbyAptlE4qsbrYR8ftQ70wAMqOffSpeopf/dukeTkMms+lT3hx8fHy6xZsyQ+Pr5K+2vKp7x+1JQiPl7k4YfVFG7HjiLLl1e6LmnkjNJ93t5yCmQXyGiQx0FeB/nJw0NdU02aqEQPO3fW+Ducjb1792ohrSn1IfzlptBQeRVKwlf+LHbQubhPnzM7JSaeSd81dqzLx3xVRsnTOUiL4impR0Bib75ZpS7r31+57ZcSWgF1w2rZUqRPH/k/k0m+K57SWgQyr3jdeZanpypfNW2aWmN+6y2Rd9+Ve7y9ZTDK27i000d5o2A9BayplFOnRKZOFWnYUAnWm2+WuxRTK2RmiowZI4Ly4vc/a8114sSJKpPaxIkizZqp6+bSS1UVKBcfpTpd+Isr4bJCmp6u1gUvuUQEJBXkfZALz+dosHixWlu8+GKR48fr3u46okpP55mZajT666/KEev990WmTBF59FFZ26SJrAb5DuRXkC0gu0GO+viItG2rEnIHBqqbnS0mttQWB/ILyOqgIDULsHmzSG6ungLWVExBgbqmW7dWHvVPP61mSuqKrVtVsgZ/f5FPP5UJEyac8do1m5WIliY3V+Xsveoqdd43bqwe1n/+2SU9erWQ2oGt8/bt2+doU85PTo7ImjUid92lCn6bTCLXXisT27cXP6rh+v7XXyJt2qj4zT/+qNNDcBUqW3NKSEiQOXPmSEJCgtq5qEjWLF0qnVHpEe8EmQyyDCStQwc10gURHx/5y99fXkHF+Xq5+RTwOf3orhQViXz77ZkECXfcUbdZv0qn+bvgAlXku7rExqqZms6d1TG0ayfy3HMiO3aU7OLsMzH79u2reyHduHGjJFfxaenAgQOyaNGiahtVFziDs1GlJ1hursoccs896okP1AX32msqpEVq6GgQFycyaJC6eD75pJaP0DWpaFRbmdduuaPgrCz1wPKf/8haD4+StdvUYrG9HaR5Od6Qzn7jsRftbCSy7o035I+GDUVANvn7VyslpyGcnebP3inkoiKR339Xa7u2ajN9+8qOO++UnpypCuWMMzEOcTby8PCQZaVqYiYnJ4ufn5+sL8ejbOnSpeLh4VFj42oTRwtpeSLYGOTPp59WMaA2r9vu3UUiIytc3K+Ro0FOjnK8AZEnnhDr55/X6xu3UdgjABaLRTxROYgji6eMBSTbZBK57TaRr74SyctziylgtxbSw4fl0BVXSGGxQ8+wUiJTZ7/xTz+pWammTdV5ZzS5uaoe6W23yaliJ6WYYqeli1HVaZxpJsYhQmoymcoIaVJSUoVJGLSQVozFYhETKkTjSZAfUVmJhOK6ny+9JLJ9e+152hYVibz3nhR6eso6kGAnfmJ0FuwRgPIEsh1I9D33nJnaa9ZMlgUHS9/qTNe7IG4ppGlpKsWer68keXnJw6jQrDr9jfPz1X3FZBIZPLhOfCUCfH3lBpAPQRKK72/HQD7y9FS1jpOSqtVebczWaCG1A3uFtMY/6OHDIp9+Kks8POSwbVQC8jXIwyDd6jjw+b7OnSURFSvWp57euI3CXgGocPagqEgllXj6aTlRfE78CjKy1HpqtTPVODFuJaS5uSJz5ogEB6skKS+/LE19fcs8KNU4G1F1OHRILel4eqrlofMU9zaK0uFhHiCXgfwHZL+vr3p4NJmUN/1zz6kCFpVMMdfWbI0WUjuwCWlYWFi1f4gq/6D5+eoG+cEHIvfeK9KlS4l3526zWWaD3AjSwIECZjabpT3I3yCnQCLq4Y3bKHJycmTv3r2SU4shCRf06SO3gqwvPk+OgrwEckWvXrX2nXVNXfSjwykqUp6tXbqIeHgor9biEWCdxx6vWqWWijp0UOuYdUilfhxHj4osXKicKJs3V/dGs1mF1Tz7rMjq1SLHjpW0VRv9Znu41UJaQ2xCatuqI6bl/aANQO7o1k3V/Xv6aRWe4ud3Jk6xb1+RRx5R4RZJSU6T49Z2LA1APiu+eU8D6Wux1KkdGkXp86JP8ZTYaZB8X1+VZKOUo5le13ZSfv75TEq/G28UiY4u83adXftpacpZEVQcdXF+7bqmSn4chYUqA9tbbymfgfbtz4SVtWkjEhEhL3l5yU0gnYtHt/aO5G2/g22rcyF97bXXZMuWLbJlyxb56aefxGQyyQcffFDymm2bNm2a0wupv79/1Z9qMjNFduyQm7295SGQGSBrQPZRKsE6xVUUbrtNJVn/7TcVaF0OzpDj9uyL+vniYzkxYICKWdWUkJGRIT///LNkZGTU6vecfV58vWiRCjFo0kTE21sODBkiXWphiquuqKt+rHOio0VuuEHdAwYMUIJaAUZe++U+VP3yixqBNmqkHu6dPKtZuZw4ocq9TZokcvnlkmHLrlT8cLkFVSVqbsuWIsuWqbjwAwcqLGpxNrZBhL+/v91CahIRoRp4eHhgMpnKvCYi57xW+vXCwsLqfEWdkJGRQUBAAHe2aIF3QgL+Xl7Me/ttOH0aUlIgOVlttn8fPw6pqSWfLwCOAbuBncAuIK9rV5Zu3QqNGjnkmGqK1Wpl6tSpxMTEEBoayrwbb2TQu+9CmzawZg106+ZoE52CuLg4FixYwLhx42jVqlXdG5CRAR98QPKLL9KkoIAlwBTgEGAymbBYLGzbtq3u7aomDu9Hozl2DF55BRYtgk6dYPp0GDkSyrknGo3VaiUiIgKTyYSI4Is6JyaaTJguvRQWL4aOHWvdjrrAGhXF47feSi+gJ9AL6AFc1LAhPqdOld25RQto2xZatYKAAGjcWG2l/j36/vvJzs+HFi2wJiSQnp5O48aNa2SbV3U/sHDhwhp9kbMyGQgBKCiAZ54BPz8ICoLgYLW1aQN9+kDr1tChA7Rvz3e7dnHTQw8hxSev7SS2zprlciIKEB4eTnh4eNkX774bbr4ZLroIPvsMrrvOMcZpztC4MUycSNdXXmF0QQEvAncBC4DXRIiJiXGwgW5GWhrMnAlvvw0NG6q/Dz0EPj51ZsKUKVNK7j+9gKUokZnTsiVP/vwzeHrWmS21TXhEBERFMXXqVH4rfuiPjIzEZ8QIyMxUDzS27ehR9Tc+Xv3NyFBberra8vNZWtxuLGC117gaj2VdHNvUbocWLcQTxFoDhyNHT8vWOqmpaqrKw0Nk1izXnB4yEGfxNi29rj0RJLl4quuTZs1EUlIcaltVcJZ+rDE5OWotLyhIeeK+9JLDlkHMZrN4gDxb7P0fDRKmnQXPT06OrFm6VJqAhLRoYffUroe9QuzqtOnShVVWKyPOHpGdh/DwcLZt20Z2djbbtm1jxIgRtWShA2nSBNauhUmTYOJEGD0asrMdbZXbExkZiYiQbTIxC+gCzAbuzsyErl1hzhzIy3OwlfULq9VKX4uFsT4+HG/UCHn2WYiIgL17Ydo0NVvgAIa2b88GYCbwLtAf2G4yERoa6hB7XAZfX4aPGsXHUVE07dLF/vaMk3jXwjYiPXTokKNNcQ1WrFBeyP36iRw54mhrHEJKSopERUVJihOM+sqdEYmLE3nwQTWD0K2byJdfStTq1U7n3etM/VgVolavlutBthY7unwB0t3Rzl35+SIzZkiBl5fsBhlI2YQq9XKGrJY4dOhQ3Xvt1hdctvqLI9m6VbmlN2+uvJE1zsn27SLXXCMC8jNnKgO5mnevU7B+vWxt0EAEVdXnEgfGfJcQHa2SGHh4iEycKF8sX17/l5lqEV39xQ5snVfVBPyaYhITRS6/XJUQmz/f0dbUKfn5+ZKcnCz5+fmONuX8FBXJ+I4dZWdxONNCkFaOFoBiXKIfN20SufZaEZAtJpNcSx1nIiqP3FxVD9fHR6RHD5E//6zb76+nJCcn6zVSe0lKSnK0Ca5Fs2awbh08+KDyUBw/3m3W406ePMk777zDyZMnHW3K+TGZWBgfjwV4FLgJ5Z04SYRDe/Y41DSn7sedOyE8HAYMUJ6fq1dzb+/e/HBWKIuprtchf/sN+vaFyZPh6adh61a4+OK6+/56jBEa4PZCqqkB3t7w3nuwYAF8/DEMHsy3H35IWFgYfn5+hIWFYbXa7VCusZOQkBCKTCY+ALoBHwJTgR0iYLWqFT+N4sABuOceFer2998qJjQ6GiIiiJw8uUysvC3cJDIysvbtSklRD62XX64cmrZuhRkzwGyu/e/WVBktpJqa8+CD8MsvZO/ZQ/9x42i2fTs5OTlER0cTERGhxdTB2Lx7TSYTacAzJhN9AK/evZXH6dVXw/btgPJKdcsHoYMHYdw4CA1VMy3vvgsxMUpUi2Mww8PDiYqKwmKxYDabsVgsWK3W2vXUF4GlS6F7d1i1Ct5/HzZsAIul9r5TU3OMmmd2NRxdRq0+cUXPnvI/kAKQF1D1FZ1hLc5oXDH+scJ452++EQkNFfHwkP3XXivBdZhy0Cn6cd8+kfvuE/HyUs5zb7whcvq04+wpzZ49IldfrdLh3X67SpWnqTWMqP6iR6Qau9l44ABDgdeKt7VAgM604xRUGO98ww1qNPrmmzRdt469wOMieHEmtefUqVMdaXrtEBsLY8eqEei338KsWWpU+uyz0KCBY23LyIAJE6B3b9i/X9n32WcqzZ3GuTFM1l0MHf5iHKWr4QwFSQI5YKuGo3F62vr6yvvF3r27QK5zlFeqgZydyP2/c+aIjBqlQkZat1Y1QrOynMK+sD59ZNOjj4q0aKEyJU2b5lDb3A0d/mIHWkiN4+wKMh1B/gIp8PJSITJunlrQ2bE9CIUVx50KyFcgw7p3d7RpNaL0+dgDZHnxQ8Lp4GCRd98Vyc52GvsGgPxZ3OdHLrnEbZOdOBIjtMDtp3aTk5MdbYLLc7YzRkBYGCc+/xzPBx5QITJjx8LZ1RlckKSkJD7++ON6FzJlc0rabjIxGLgVVVnjy717VSGHtLSSfY1wSqrtfpwyeTKXAlYRdgCDgEeAK1q3hkcfdbjH65QpU2gLfCLCX4AvcAUw7NQpaNfOoba5I4ZogHG67lpoZ6M6YskSEX9/kZAQlRnJhXEKJ5la4mynpC9XrBB59VX12zVrJrJggUStXFluQerqOiXVWj8WFIhERcmfJpMIyE6Qe0G8nWmqOjVV3vD0lCyQBJCHOFOk2insc0O0s5HG+Rk9GrZsAX9/+Ne/VKkpHb/odJztlHTzHXfAiy+qUJChQ2HcOHrecw+Xo5yRwImckrKz4YMPoEcPiIjAs0EDhgG9gYVAPg5IoHA2ubnw1lvQpQuPFhXxJtAVmA8UOYN9GrvQQqqpfUJD4Y8/1LTaU0/BTTeBM2a10ZxLmzaqOPSff5KRm8svwOdAp+K3xZHe2bGxauq5bVt1boWFwcaNHFm8mK+hpLB2nSZQOJuiIhUPGhqqKiiNHMnPH37IK8ApZ7BPYwhaSDV1g6+veiL/5hvYtEkFlv/4o6Ot0lSViy9mXO/e3ANcAsQAHwGdodyRVE3WUqv0mfx8WL1aJZMIDVUZiO67T4nqqlVw0UWOSaBwNkVFsHKlOs/vvhsuvFClH/zgA264/37H26cxFmNmmV0P2xppfHy8o01xP06cUAHnJpPIpEkieXmOtqhKZGVlyT///CNZbhqaYPM2bQDyJEgcSD7IocGDy6x/n+3FffZaann9eL7PSEyMyIsvirRsqRIVXHqpyNKlDvfAPYeCApHPPhPp1UvZed11Ihs2ONoqTSXEx8fr8JeaosNfHExhocjrr6vMMhddpDLNaJye0k5JF/fpI//ce69Iu3ZKNC67TOTzz2VA794lQmjbzpfpqnQssm3rBvKfVq1ELrhAtd+4scijj6oycc6GTUB79tQC6mLU6zjSzMxMeeWVV+S6666TwMBAAWThwoXl7rtr1y657rrrxN/fXwIDA2X06NGSmJhYafu2zquPHpguxcaNIp07i/j7y9Zx48TSp49TFaEuzalTp2Tjxo1y6tQpR5viXOTni6xercrrgWSCfA5yG0jTcsqOldeP/r6+EgoyEmQeyP7i2MosEBk5UiQqyjmTFGRni3z4oUj37kpAhw4V+eMPR1ulqQYnTpyov0J68OBBAaR9+/Zy5ZVXViikR48elaZNm0qXLl1kzpw58tprr0lgYKCEhYVJbm5uhe3r8BcnIiND9hfXfvwepE0d5HutCfU5/MUw9uyROS1byuZiIRSQgyDrQL5r0kRkzBg5MXas6sdbbhG55BKR3r0lpzhkRUBiQd4BGQbyr969HX1EInJupqSvPvlEZMoUlafXZBIZPlwLqItiRPiLV92sxFafVq1aERcXR8uWLdm8eTMDBgwod7/p06dz+vRptmzZQvv27QG46KKLuOaaa/j0008ZN25cXZqtqQmNGjEiPp7WKAeWHai8r8uAqVOnEh4e7lj7NFUnNJS2771H/4gI2gMDgQuBjsCV7drB3r0QHAwdO0KjRhAQAA0bsvvii3nq44/ZBSRyxpPV6ujQGpQTVEREBCaTiRARHt2+navvu48CHx+87r8fnnwSQkIcbabGgTit166vry8tW7Y8735RUVHcdNNNJSIKMGTIEEJCQli5cmVtmqgxkNjYWL5Hxf59BSwBooB0Bxeh1lQfm9dsYFgYa8xmloeF4W210nz7dvj9d5g/X+04cyZ8+im8+y59P/qIx6OiaBUW5nSerNMjI7kN+E6EPcBwYDowpFs3mDdPi6gGpx2RVoXjx4+TmJhI//79z3nvoosu4ttvv3WAVZqaEBISQnR0NGki3AN8AXwAbM/PVwXEH3gAPJz2uU9zFuHh4dWeSajJZ2qV7dvh44/5744dBAMbgLHACiAPMO/f70jrNE6ES9+Z4uLiADUNfDatWrUiJSWF3NzcStvIy8sjIyOjZDvf/praoXQRaoAvTSa6A8mDB6t8vVdeCQ4enfr4+NClSxd8fHwcaoer49T9ePKkKqI9YIBK8PDZZ3zVtCk9UfGzi1AiqjMR1R+MOA9dWkizs7MBNQ18NubixNS2fSqiT58+BAQElGwzZsww3lDNeSkviP5jq5WO69bBTz9BXJy6sU2ZotKtOYDg4GBGjx5NcHCwQ77flagsuUJF/WhEQvwatXX8uEoxePXV0LIlPPaY+vvFF3DsGI3nz2c3lDzk6UxE9YugoCD7GzHK86k22bRpU7leu7bXFy9efM5nJkyYIIDk5OSU26bNa/fw4cOSnp5eslW0v8bBZGWpgHwvL5HQUJFvvqlzEwoLCyUnJ0cKCwvr/LtdifMlVyivH8+bkMHA75dTp0TWrVPJQCwW5S3s6SlyzTWq7F85oXNnJ/W3Wq016xyN05Gamlp/w19KU5GQHjt2TACZOXPmOZ8ZPXq0BAUFVdimDn9xUaKjRQYPPhOzt2tXnX21Dn85NwykPKE7O7mCD0hrkOt79BA5dkxO7Nih+nHvXhWHWVBQbkKG8yVxqIjSbXmB9Aa5G2Rx06Yq+YeXlzp/mjcXuecekRUrRJKTDegdjStSr8NfqkKbNm1o1qwZmzdvPue9v/76i759+9a9UZrapXdvlaP3yy/h2WehTx+VsDwyEoyYotFUSOkwEBEhOjqaiIgIoqKiCL/lFti9GzZtYszOnYSI0ANoATS0NbB7t0ow36qVWve+/HI1ZQ/8DqQXb2m2f4uQuWMHTJqkwmSaNFF/bZuIyr2bnw8ZGZCcDElJPLJzJ+1F6IxKrm9bATuYnAzXXKPq415+uaoWox3YNAbg0kIKEBERwaJFizh69Cjtiovi/vjjj8TGxvLUU0852DpNrWAywYgRcMMNqizbq6+qChsvvMCa1q155fXXiY2NJSQkhMjISOfyBHVSrFYrU6ZMqbTfpkyZUiKiAcBAEQYBrcaMUYKUkQHAbT4+bCssxAqcAJKBVKBN58588M47kJ6uksxPnw6enpCXx/svv0xWXBwBULI1Byw+PhAVpYqLp6dDQUHFB+HpCcHBDPb2ZmdhIV8DB4DtQDTQ0WJh2/LlhvabRgM49xrpO++8I9OmTZPx48cLIOHh4TJt2jSZNm2apKWliYjIkSNHJDg4WLp06SJz586V6dOnS2BgoPTp06fS9U49tVuPiIsTefBBKfTwkHiQZ4sTqxudHam+Tu2ed02xqEjk4EEZ6+0t80D+ASkszkKUCPK1h4fIa6+J/PijSEZGhe3Z1hXL68fzfabEjtOnRY4fF9m9WyWyP3BA5OhRkbQ09X5V29JoijFiatephbRDhw5l1kxKbwcPHizZb8eOHXLttddKgwYNpEmTJjJq1KjzVnXRQlr/uL57d/kQJA8koVhQ/aFG62zl4YpCWpM1TU+QC0BmtG4tctttIm3alKTv2wWyAGQMSFcQUwX9W5lzTkX9aKRDj3YO0lQVI4TUJFJc7t7NyMjIICAggJSUFAIDAx1tjsYA/Pz8yMnJoQPwAnAvar3tQ09PXjhyBFq3tqv9wsJCcnJyMJvNeHp62m9wLXP2mqbtb1RU1Jlp26Iiwvz86J2XR3+gHyqlX0MgF/AdNAguvRQuuYSvU1IYdu+957RX3QxErtaPmvpNamoqQUFBpKen07hx4xq14fYr7fpCrj+EhIRgMpk4DDwEdANWAv8WgQ4d4I474IcfoLCwRu17enri7+/vFOdMVeIkS69pAjQR4TJg57//DU88oZJcNGnCP3l5LAOGodY0pwCXAZf16aNS+s2cCcOHc9PYsYYUpHamftRoDDkPDRgZuyS2qd3SU8Qa16aitbG1S5aIzJlzptRVmzYqhnDjRlUXtYokJyfL8uXLJbmWQyXONx1b6ZpmerrItm0iX3whE7285J3iyitxpaqx5IPqi5EjRWbOlF8jI6VJHa4p1lU/ajRVwVZprN6ukdYmeo20flLp2lhRkRLP8eNFmjY9I6oPPiiyfLlyYpGKhayytb3zrUNWdb+KRPKLzz4TOXFCZOtWeaRjR7kf5EWQd0FWg/wFkuLpWSKWApJlMskOkFUgk1G1PnuD9OvTp3r9ZjCuuNasqb/oNVI7sK2RxsTEEKKrN7gfBQVq2vKLL9R0765dAGQ1bcqPSUlsB/YDx4FjwOx58wgbNIgFX37JuLvuolXLllBQwNdr1nD/vffiBXii4sk8gHlz53LtVVepaeSCAtZ//z2vvvgiDQA/oAFgBsaPGYOla1fIyoLTp/lq8WJISyMQaAIEFm8NyjmERCAOiC+28YiXF1MWLYLOnaFTJ6z/939E3Hqr3WuaRhMXF8eCBQsYN25cuXmyNZq6JDY2ltDQULvWSF0+jlSjqRFeXnDFFWoDSEiAX3/l80cfpSWqykeb0vs/8ghxtkQCV1xRkkjgJiChvPafeKLMf68s3kqTD+QsWQLNmoGfH/j7E5SeTgoq/jG11Hba25uPoqKgZUuuueceftmzh/xSbZlMJiy9ejHlrrtKXgsvTpYwdepUYmJiCA0NJTIy0ilKk2k09QktpBoNQIsWMHIkj9xzDznFL3mjxLQ10Njbm0/mzoWdO5XzjY8PeHlx2513kp2fTwFQWGrz8vFh3fr1KkmAlxd9Bw4kLS+PbCALyC7ez+zjQ3Z8fIkZj4SFER0dTemJIpPJhKVnTxg2DIDxr73GunK8cctLou50pck0mvqIEXPMrohtjfR48bqYRiNybkwlpXK+ZmZmyoYNGyQzM7NK+1e13dJUNZmAK8dJltePGo2jOH78uHY2qik2IbWn8zT1j+pmxamO8FW1XVcWSY3G1TBCC9xeSM+XAUnjflQkZFlZWbJjxw7Jysqq0v5VbdfdqKgfNRpHEB8fr712a4r22tVUF+1tagy6HzXOhBFeu26f2Uij0Wg0GnvQQqrRaDQajR1oIdVoNBqNxg7cXki9vHQoraZqeHl50bJlS33O2InuR40zYcR56PbORvYsMGs0Go3GtTFCC9x+RKrRaDQajT24vZDGl0rPptFURlxcHK+++ipxxXl2NTVD96PGmTBCA9xeSDWa6lBYw6LgmrLoftTUJ7SQajQajUZjB1pINRqNRqOxAy2kGo1Go9HYgduHvyQlJREcHOxoczQuQH5+PqmpqQQGBuLt7e1oc1wW3Y8aZyI5OZmmTZvaFf7i9hHR+kLWVBVvb2+aN2/uaDNcHt2PGmfCCA1w+6ndtLQ0R5ugcRHS0tJYu3atPmfsRPejxpkw4jx0eyHNyclxtAkaFyE7O5u///6b7OxsR5vi0uh+1DgTRmiA2wupRqPRaDT2oIVUo9FoNBo70EKq0Wg0Go0duL2QNmjQwNEmaFwEf39/LrnkEvz9/R1tikuj+1HjTBihAW4fR6rLqGk0Go37osuoGUBubq6jTdC4CLm5uRw6dEifM3ai+1HjTBhxHrq9kKampjraBI2LkJKSwqJFi0hJSXG0KS6N7keNM2GEBri9kGo0Go1GYw9aSDUajUajsQMtpBqNRqPR2IHbC6mHh9t3gaaKeHh40KhRI33O2InuR40zYcR5qMNfdPiLRqPRuC06/EWj0Wg0Ggfj9kKamJjoaBM0LkJCQgJvvfUWCQkJjjbFpdH9qHEmjNAAtxfSoqIiR5ugcRGKiorIzMzU54yd6H7UOBNGnIcuL6Tr16/HZDKVu/3555+ONk+j0Wg09RwvRxtgFE888QQDBgwo81rXrl0dZI1Go9Fo3IV6I6SXXXYZt956q6PN0Gg0Go2b4fJTu6XJzMykoKCgWp8JDAysJWs09Y2goCDGjBlDUFCQo01xaXQ/apwJIzSg3gjpvffeS+PGjTGbzQwePJjNmzdX6XO5ublkZGSUbLoihaYifH196dixI76+vo42xaXR/ahxJow4D11eSH18fIiIiGDOnDmsWbOGV199lejoaC677DL+/vvv836+R48eBAQElGwzZsyoA6s1rkhGRgbr1q0jIyPD0aa4NLofNc6EEeehy6+RDho0iEGDBpX8f/jw4dx6661YLBaef/55vv/++0o//+uvv9KlS5eS/+unZE1FnD59mt9//51evXrpbFh2oPtR40xkZWXZ3YbLC2l5dO3alZtvvhmr1UphYSGenp4V7uvv768vZo1Go9HUGJef2q2Idu3akZeXx+nTpx1tikaj0WjqMfVWSA8cOIDZbKZhw4aONkWj0Wg09RiXF9KTJ0+e89o///zD2rVrufbaa89bIsdsNteWaZp6hp+fHxdccAF+fn6ONsWl0f2ocSaM0ACXL6N21VVX4efnx6BBg2jevDm7du1iwYIFeHt788cff9CjR49yP6fLqGk0Go1Gl1EDbrnlFpKSknjrrbd45JFH+PzzzwkPD2fz5s0Vimhp8vPz68BKTX0gPz+fxMREfc7Yie5HjTNhxHno8kL6xBNPsHHjRpKTk8nPz+fEiRMsWbKkynl2k5OTa9lCTX0hKSmJ999/n6SkJEeb4tLoftQ4E0ZogMsLqUaj0Wg0jkQLqUaj0Wg0dqCFVKPRGI7VaiUsLAw/Pz/CwsKwWq218hmNxhnQQqrRVIPKsmS5A1URO6vVSkREBNHR0eTk5BAdHc3IiAjWrFgBaWmQman6MTsbcnIgP7/cz0RERGgx1bgELh/+UlN0+ItGcwar1cqUKVOIjY0lJCSEyMhIwsPDz9knIiICD6Al0BnoADw3ahS9W7WC5GRISuLvH3/ELyuLYKAB4Mv5c5HmmUxkiJAJnAQSirf8Fi0Y/+ab0LUrdOsGwcEGH7nG3TFCC7SQaiHV1GOqI5AmkwkRwQQ0Az6bMYPBHTvCoUNw8CB/LF9O8KlTdECJo40MT08ad+oETZtCcDBLv/uOxKIikoEsIAfIBcTbm4XLlqkPFRVBYaH6W1DAUw8+iLmggMZAU5RQtwTaAy1KG9uqFVgsahswAAYOhLZta3TcGg0YpAXipqSnpwsg+/fvd7QpGhchMTFRPvjgA0lMTHS0KRIVFSUWi0XMZrNYLBaJiooqdx9ATCZTmb9Rq1eLJCeLbN4ssnq1vNmqlbwL8jXITpDTIFJ6a9JE5IIL5EsPD3kT5FGQG0F6gviDmM3mMt9rsVhKvsu2mUwmCQsLE5Hy+7HSz2RkiGzbJvL55yIvvSQyfLhI+/Zn7GvbVmTUKJFFi0ROnKj4uMvpI41m//79Akh6enqN23B7IY2JiXG0KRoX4cSJEzJ58mQ5ceJErX7P+UTyvEJRVCSSnCwju3WTm0GeAPkPyBcg20AyPDzKCGUmyHaQNSBzQJ4EuRnkIh8fkdTUku89n0Cezz6r1Soi5ffj+T5TLidOiFitIhMmiFx4Ycnx7DGb5Q2QISDmSuzUaEREYmJitJDWFC2kmupSkZBWZXRY1f2qMpoa0Lu3dAK5DGQUyPMg80F+a9RIpGdPkYYNywhlFsgukG9B3gN5wctLZOVKkU2bRE6eFEufPoYI5Nn7hoWFidlslrCwsDL7VNaPFX2mSiQmiixfLos9POR48bGfBlkNcjtIsK9v9drTuAVaSO1AC6mmIioSvOqMpKo1iszOVqOrHTtkTJcuMhxkLMik4pHkCpBN/v4iISEijRuXnXYFSQTZDLLGw0PkiSdE3nxTZNUquatrV2kFYqojgawqtT2yt1gsYgLpDTIR5K/ifso2mURuuUVk2TIRO26amvqFEUJaLwt7azQ1xeZ44wsEAUXbt/NWRATNX3mFLr16qZ2++w5MJsjNZe+0aUwEfETwBXxFMANFDz4Ia9dCbi7k5tJ03Tp+KH7fF/ATIRAIvvVWdZsv5tNStiQD8UAcsDc7m/7DhkHLlrwwdy6bjx7lCHAU5dBjMpmw9OnD8DlzSj4f4eHB8mInIkRKnIkiIyPLHHN4eDhRUVFMnTqVmJgYQkNDiYyMZMSIEef0T3h4uNM77URGRhIREcFOk4kdIrxhMtFehK/uvps+MTEwahT4+MANN8Ddd8ONN4Kv7/kb1mgqwjhddy1sI9L4+HhHm6JxFAUFIrGxIlFRIlOmiIwcKTv8/CThbGcb2xSp2Sw7evaULLNZvebpKadAkkFOgBwE2QPyD8hmk0nkkktErrpK5PrrZY2Hh6wA+bR4GnYOyGSQZ7y8RBYvFvn6a5ENG2R4SIg0B/GqZBRZ1yNIo8nKypIdO3ZIVlZWrX1Hpcd9+LDI7Nki/fqp3zEwUGT8eJENG9T6ssatiI+P11O7NcUmpPZ0nsb5qHQd8uhRkeXL1U2zXz8RP78zQhkcLHLllfKRp6e8BDIG5AaQf4F0Bwnx8VHTr8nJIqdOieTni0jVHXCMctQpvZ+zCaRLsnOnyHPPKc9fEOnaVWTqVJEDB8rsVtV1cI3rYYQWuL2QHj9+3NGmaAzibBFqC3IfyKErrxTp1OmMaIaEiIwZo0Yl//ufSFxcyUikMsHLzMyUDRs2SGZmZoXfWZnwufIo0kjK60eHU1Agsm6dOi/8/dV5ctllIgsWyJrFi3U4TT3m+PHjWkhrinY2qn9c2KePXAkyExXOISAFILv8/ET+/W+R1atFzjOVX5ng2ettWt8FsqrUVRhRjTl1SmTJEpFrrxXx8JBsk0lWgAwF8axkNkHjmmhnI43m1Cn4+muIiuLn6Ggaoxx0vgemAT8AOSJkv/12lZqrzPEmLi6uws9UxQHHFRx1NIC/P4werbbjx5nWsSN3FRTwHcrxaxmwSISYmBgHG6pxFrSQalyPjAwlnqtWwfffq8Tn/fuzuEULFiYk8Ddq2ADF3qyhodVqXguepoQ2bfi6Z09mbN/OBcA9wBjgWWAPwNtvw513QosWlTSiqe/o6i8a1yAtDZYsgeHDoVkzFcIQFwfTpsHBg7BpE63nzWMrqNAUqDDcQ6OpDpGRkQjwt8nEk0BbYDjQqG9fmDgR2rSBYcNg9Wr1UKdxO9xeSH18fBxtgqaYs0t0fbV4MXz6Kdx0EzRvDvfcoyqMvP46HD4Mf/4Jzz4LHTsCZ6ZlLRYLZrMZi8WC1WotNx6yJvj6+hISEoKvjjm0C1frx7PPqx5hYdxrtdLmjz/Uw9zcuZCYCCNHqqT648fD77+rhPwap8cIDdDVX3T1F6fAlgghGLgZuBUYAniZTJguuUTdpMLDy630odE4BXv2wOLFaubk2DFo3x5uv11N/fbtWzJTAro6jTOhy6jZga3zUlJSCAwMdLQ57s3Jk0y54AIGHj/OVahpkl+B1UBMz578sHOnY+0rprCwkJycHMxms9sX+LaHet+PRUXwf/8HK1aodfzkZAgNhTvugDvuwLprV9mydcV/o6KitJg6gNTUVIKCguwSUref2j158qSjTXBPEhLggw/g6quhZUteOn4cT+AxoDUwGHgP+L8DBxxqZmkSExN58803SUxMdLQpLk2970cPD7j8cnj/fTX1+913cPHF8NZb0KMHPUeNYhLQrngMYxPTqVOnOtZuN8UIDXB7IdXUIXFx8N57MHgwtG4Njz0Gnp7w/vtc3bMn15hMzAcSinc3mUyEVtPjVqNxKry9YehQWLRIraNGRbEzL49I4DDwJzAR6KzDaVwaLaSa2uX4ceWMcfnlyrvxySfBbIYFC9So9H//g3HjeGLatJInc9Aet5p6iNkM4eFM7d2bFsAo4DgQCewD/gGYMgWio8sUMtA4P1pINYZQ2uN2aI8ebL/3XrjkEuUc9Oyz0KgRfPKJEs/vvoP774fg4JLP17bHrUbjLERGRpIJrDCZiACaA+GA34ABavrXYlFrqs89B3/9pUXVBdAJGTR2Y7VaeT4iggjgY6D/nj3k7tlDXP/+tFq8WMXYNWly3nZ0IgSNO3B29qyuoaHcHRlJuxEjVNm9n36CqCj4+GOYORPatVPx08OGwZVX6pJvTojbe+2mpqbSpAo3ec1ZiMA//4DVyv5Zs+iSm8sp4FvACnwHdAoLY9u2bQ4100iKiorIz8/H29sbDw89mVNTdD9WkYIC5f1rtaratocPQ8OGcN11SlhvuAGaNnW0lS5PWloagYGBOvylJug40hpQVAQbN6oL22qFAwegSROWZmSwqqiI/wGl87qYzWays7MdZa1GU38QgR07lKB+9ZW6Dj08YNAgojt14qWNG/nf4cOEFOeG1jM7VccILXD7x8GUlBRHm+DcFBSoqabHHlNTTIMGqaDzIUPgv/+FhATe6N2br0ymMiJaHz1uk5OTWbp0KcnJyY42xaXR/VgDTCbo0wdefFFl9IqLgwULOJGbS5clS1gTG8v23FzGbt/O3IgIvli50tEWuwxGaIDbC2leXp6jTXA+Tp2CL76Ae++Fli1VrOfatSq70K+/wokTMH8+XHst+PioXKRu4HGbl5fH/v379TljJ7ofDaBlS7j/fq7PzaUpcCPwE3A7sB64+q67VAKIxYtV2I2mQow4D91eSDXKWWhIz5486u3Nr40bUxgUpNLx/fUXPPig+nv4sKp0cdllKvazFNrjVqNxDLGxsWSjfBMeRiXU7w+8A7B/P4wZoyrTDBgAkZFqSriw0IEW10+01667UrzmsnPGDNquWME6oBD4LTOTCcB1777LdY8+WuXmtMetRlP3hISEEB0djc3VRYCtJhMFvXvz4qZNKtzsv/+Fb79V8dxTpyoHpeuuU85K111XJgxNUzP0iNSdyM2FH39USRG6dAGLhY6ff85hYDQqnm0w8LbJxKQPP3SoqRqN5vycd1mlRQtVNemzz+DkSeUFPG4c7NqlShE2bw4DB6pyhFu26Io1NcTthbRRo0aONqF2OXxY5bS9+Wb15DlkiKqbOHQofP89rb29uQ1YBtiW3EWnKyuXxo0bc/3112svbzvR/Wgc1VpW8fJSSVJeew22blVZxz78UCVNefNN6N8fWrXi8ODBTOjQgVZmM2FhYVit1ro/sDrECA3Q4S/1LfwlNxd++01lD/ruO9i9W61pXnIJXH+92iyWkpJOYWFhZaaGQD3VWiyWehUDqtFoKiE/HzZsIObtt8n98kssqKWezcAPwOVTp3L5pElQD+s36/AXA3D1OEer1cr1PXrwhLc36xs3pqBJE7jmGjWVM2iQGn0mJ8Mvv6iUY2FhZeoiuovHrRFkZ2ezfft2lz9nHI3uRyfE2xuuuILbDhygr8lEO2AccBDlxHT5K69AUBDceKNyOty5s96kLjTiPHR7IU1PT3e0CdUnIQE++4yD11xDWEQE3+3Zw1sFBZgyM3kpJ4d1s2erwsIffQQRERAQUGFT2uO26qSlpfHFF1+QlpbmaFNcGt2PzktsbCwiwjHgE+BOlO/EQB8fePllNeM1aRL07q2mhMeMUZVtDh1yqN32YIQGaK9dVyAtDdavV4kRfvpJPQ0CRb6+fAf8iIohy0CNKL9fvJhtTz9d5ea1x61Go4FzvYABMJnI7tFDCeikSZCVpZaPfvhBbYsXq/3at1dVni6/HK64Arp1KzP7VZ/RQupsiCgHod9/hw0b1LZ9u/Km69QJrrpKZTcZPJjenTqVySakPq4dhTQaTc2IjIwkIiKiZImn3KWeBg1U2Mx116n/Jycrb+BfflEJW5YvV/erli3h8svZ1rgx0379le8OH6ZbPU1hWC+mdnNzc5k0aRKtW7fGz8+Piy++mB9++MHRZp0Xq9VK/z59uMLXlzdbt+b4wIGqZmenTjB6tApVueACVbvzwAG1ffQR3HkntGxJSEhIydqmjfqYmk+j0dQNNVrqCQ5WUQFvvQWbN0NqqopbHTuW5H/+oddHHxEVG0tcbi6zt29nd0QEfzz/PMTH192B1TZSD7jjjjvEy8tLnn32WZk/f74MHDhQvLy85LfffqvwM+np6QLIgQMH6s7Q06dF/vhDZN48OTBkiGwCyVFjUDkN8jPInvBwka++Ejl58rzNRUVFCSAmk6nMX6vVWgcH436cPHlSPvroIzlZhd9GUzG6H90Hi8Ui/iCDQZ4H+RIkrvieJyDSvr1IRITItGkia9aIHDokUlRUYXtRUVFisVjEbDaLxWKRqKgou208cOCAAJKenl7jNlxeSDdu3CiAvPHGGyWvZWdnS5cuXWTgwIEVfs4mpL169arRj1HpD5qdLbJtm8jy5SIvvSQSHi7SvbuIh4c6eby8ZLfZLJ+APAbSH8SrWAjDwsKqbUdYWJiYzWYJCwvTIqrRaJwGs9ksqIRLZbZuvr4iK1eKPPusyJVXigQGnhHXJk1ELr9c5PHHRd5/X+THH0WOHJGoVavKHTjYI6ZRUVHSq1cvu4XU5eNIJ06cyFtvvUVKSkqZGKAZM2bwwgsvcOTIEdr9f3v3GxJVuscB/HtEczT/rSHtTIndzIncFmEDpSUqMmvMsiwttReSbBEU0oUUohdXWrYl3YgblGhQ0Z/xgjn6Yihv0guhoH+3Zi2WXDW91Krjv5o/7mhmc1+cxs2mzOtxPB7P9wMH7Tkc+3k4zpfznOd5TnS013GeuUMe1dXVE+63r62sxN9zc6EDsAjAYgB/A7Dlm28Q5XCII2Y9K4RotUB8vLh9+y3w3XfA8uUIiojA4ODHTzj56jEimj0mPE/d7RY/N3/9dezW2jq6NrBLENDsduN3AC0AXgDoABAUFwdjQ4O4StNH64CPx2QyYceOHaP/ljKPVPGDjR4/fgy9Xu91AhITEwEAFovlk0HqsXX+fAhWK+4cOgTDq1cIGBlBwJ9/AjabuNnt4teeHrFPv6sL22w2bPvgZ/QAeA7gP3/8AcP+/eLye/HxwLJlwFdfffL//dToOD7fnNk6OztRUVGBffv2QavVyl2OYvE8qseEBi8B4uje6Ghx27z5r/bhYaCtDWhuxj+2bcOit2+hh/iWmwUA5gBAczOg04krN+l0YqBGRIifvR9uERFAYKC4qERAABoKC5EKAPPn44bVKun3VHyQdnZ2fvKP0dPW0dEx7vElAPQA8OIF8MMPYuPcuUBYmDj/Mjxc/H7BAmDFCuDrr7Hn6FG8GB5GF4D/AnC+/1mawUG4fv55QnVP+AIjIlIoz+ClY8eOoampCUvfj9qd8Dz1gABArwf0evw7Pn7MzYcAcY7r2rg4/OuXX8Q72pcvgd5eccBTf784QPPVK3Gz2casJfzP919/B3BD4u+p+CB1uVwIDAz0atdoNKP7x5MB8Y5yybJlqLt1C4FhYQicO3fcYx5duSL5blLyBUZEpABTNU/945sPCAKsbjd2nTgBpKd/+Qe43WI38fAw8OYN1n7/PZp/+w1RkiubBdNfgoKCMDQ05NXuef4YFBQ07vF9EIO08KefEKbVfjFEgalbVm/79u2wWCxwuVywWCwMUSKiz5C8CpsgiN2/QUFAeDgKfvwRHQCmYhKO4oNUq9Wis7PTq93TptPpxj0+Njb2/14Sj8vqERFNv6m8+fB8jsfGxkquS/GjdgsLC3Hq1CmvUbvHjx/H0aNHvzhqt6+vD5GRkdNZMinU27dvYbfbERYWBn9/xT8VkQ3PI80k/f39mDdvnrrf/pKZmYmRkRFUVFSMtg0NDeHChQtISkoad8QuAP4h04T5+/sjMjKS14xEPI80k0zFdaj4IE1KSkJWVhaOHDmCoqIiVFRUYN26dWhvb0dJSclnj/M8V+3u7p6uUknhrFYriouLYZU4VF7teB5pJvFkwKfG2kyU4oMUAC5duoRDhw7h8uXLKCgowPDwMMxmM1avXv3ZYzwnzeFwTFeZpHB2ux2CIMBut8tdiqLxPNJM4skAKUE6K/pWNBoNSktLUVpaKncpRESkMrPijpSIiEgus+KOdDI8g5WdTie7mGhCnE4nBgcHec1IxPNIM4nTKa5NJ2UCi+Knv0zW8+fPp2T+EBERKV9raysWL148qWNVG6Tv3r1DR0cHQkNDvV6OTURE6uB2u+FwOKDT6eDnN7mnnaoNUiIioqnAwUZEREQSMEiJiIgkYJASERFJwCAlIiKSQHVB2tbWhoMHD0Kv1yM4OBjBwcGIj4/HgQMH0NjYKHd5NINcvHgRgiBAEATcvn3ba7/b7UZ0dDQEQcDmzZtlqFA5POfy4cOHY9ptNhsSExOh0WhQV1cnU3WkRlOZBapakMFsNmPXrl3w9/fH7t27kZCQAD8/Pzx79gwmkwllZWVoa2tDTEyM3KXSDKLRaGA0GrFq1aox7Q0NDXj58iUCAwNlqkzZ7HY7NmzYgMbGRtTU1MBgMMhdEqnEVGeBaoK0tbUV2dnZiImJwa1bt6DVasfsP3HiBM6ePTvpeUQ0e23atAlVVVU4ffr0mFcuGY1GrFixAr29vTJWp0wOhwMbN26ExWKByWRCamqq3CWRSvgiC1STGiUlJRgYGMCFCxe8ThwgvpOuoKDgi+8vJfXJyclBX18f6uvrR9vevHmDa9euITc3V8bKlMnpdMJgMODRo0eorq5GWlqa3CWRivgiC1QTpGazGUuWLEFSUpLcpZDCLFq0CCtXrkRlZeVo240bN2Cz2ZCdnS1jZcozMDCA1NRUPHjwAFVVVXy2TNPOF1mgiiC12+3o6OjA8uXLvfa9fv0avb29o5vL5ZKhQprpcnNzUVtbO3p9XL16FWvWrIFOp5O5MmXJy8vDvXv3UFVVhfT0dLnLIZXxVRaoJkgBICQkxGvf2rVrERUVNbqdOXNmussjBdi5cydcLhfMZjMcDgfMZjO7dSfBarVCo9HwEQrJwldZoIogDQ0NBfDX63I+VF5ejvr6ely5cmW6yyIFiYqKwvr162E0GmEymTAyMoLMzEy5y1Kc8vJyzJkzBwaDAU1NTXKXQyrjqyxQxajd8PBwaLVaPH361Gufp5+8vb19mqsipcnNzcXevXvR1dWF1NRUREREyF2S4sTHx+P69etITk5GSkoK7ty5w7tTmja+ygJV3JECQFpaGlpaWnD//n25SyGFysjIgJ+fH+7evctuXQkSExNRW1uL7u5upKSkoKenR+6SSEV8kQWqCdKioiIEBwcjPz8fVqvVaz/fJkdfEhISgrKyMhQXF2PLli1yl6NoycnJqKysREtLCwwGw+izKyJf80UWqKJrFwDi4uJgNBqRk5ODpUuXjq5m4Xa70dbWBqPRCD8/PyxcuFDuUmkGy8vLk7uEWSMjIwPnzp1Dfn4+0tPTUVdXB41GI3dZNMv5IgtUE6QAsHXrVjx58gQnT57EzZs3cf78eQiCgJiYGKSlpWH//v1ISEiQu0wi1dizZw/6+/tx+PBhZGVloaamZszqUUS+MNVZILjZp0lERDRpqnlGSkRE5AsMUiIiIgkYpERERBIwSImIiCRgkBIREUnAICUiIpKAQUpERCQBg5SIiEgCBikREZEEDFIiIiIJGKREREQSMEiJiIgk+B9Bkfzw/0hkcAAAAABJRU5ErkJggg==", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdIAAAGyCAYAAABQlEVsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAACZPklEQVR4nOydd3xT1fvH3+lMKVBaNliGYMtMFUQFnAiCC6V1IShOFLc/Bf26ylAQN+ICREQQFElUcIOKE5EhUFbL3gXa0kH3eH5/nKa00J2bJmnO+/W6r0B678mTk3vv555znmESEUGj0Wg0Gk2t8HG1ARqNRqPReDJaSDUajUajcQAtpBqNRqPROIAWUo1Go9FoHEALqUaj0Wg0DqCFVKPRaDQaB9BCqtFoNBqNA2gh1Wg0Go3GAbSQajQajUbjAFpINRqNRqNxALcV0s2bN3PjjTdy5pln0qBBA5o1a8bFF1/M0qVLy+x3xx13YDKZTtu6dOniIss1Go1G4034udqAiti7dy8ZGRmMGjWKNm3akJWVhdVqZejQocyYMYPRo0eX7BsYGMiHH35Y5viQkJC6Nlmj0Wg0XojJk5LWFxYW0rt3b3Jycti2bRugRqSLFy/mxIkTLrZOo9FoNN6I207tloevry/h4eGkpqae9rfCwkLS09Pr3iiNRqPReDVuO7VrJzMzk+zsbNLS0liyZAnff/89N998c5l9srKyaNy4MVlZWYSGhjJ8+HCmTp1Kw4YNK2y3qKiIPXv24O/vj8lkKnk/MDCQwMBAp30fjUaj0bgPIkJGRgZt2rTBx6d2Y0u3n9q9//77mTFjBgA+Pj5ER0czc+ZMQkNDAfjf//6HiNCrVy+Kior44YcfmDt3Lv3792fFihX4+ZX/rHDgwAHCw8Pr7HtoNBqNxn3Zv38/Z5xxRq2OdXsh3bZtGwcOHODQoUMsWrSIgIAA3n//fVq2bFnhMZMnT+bZZ59l4cKF3HLLLeXuk5aWRpMmTfj999/p2LFjyft6RKqpiMTERObMmcOdd95Jq1atXG2Ox6L70TiWLFnCbbfddtr78+bNY+jQoS6wyPPYsWMHvXv3JjU1tfZOquJhDBo0SPr06SNFRUUV7pOVlSU+Pj5y9913V7hPWlqaALJ7924nWKmpjyQlJcm8efMkKSnJ1aa4PVarVSwWi5jNZrFYLGK1Wkv+pvvROCwWi5hMJgFKNpPJJFFRUa42zWPYvXu3AJKWllbrNjzK2QjghhtuYPXq1SQkJFS4T1BQEE2bNiUlJaXK9sLCwow0T1OPadq0KSNHjqRp06Zl3rfZbERFRREUFERUVBQ2m81FFroHNpuNmJgY4uLiyMnJIS4ujpiYmJJ+0f1oHAkJCcgpk4oiQnx8vIss8jyM0ACPE9Ls7GxATc1WREZGBklJSTRv3rzK9oqKigyzTVM/qOiGXlRURG5ubplzpirRqE67td3PXZkwYQImk6nkBi8imEwmJk6cCDjej5qTRERElHGWBDCZTERGRrrIIs/DEA0waHRsOEeOHDntvby8POnVq5cEBQVJRkaGZGdnS3p6+mn7jR07VgCx2WwVtm+f2o2PjzfUbo1nY7VaS6bHSr9arVY5dOiQjB8/Xg4dOlSyf3Wn1iprt7b7VTR16mrMZnOZ/rBvZrNZRMShftSUpaLzpbJ7n6Ys8fHxDk/tuq2QXn/99TJgwAAZP368zJo1SyZNmiRdunQRQF5//XURUXPbTZo0kTFjxsi0adNk2rRpctVVVwkgQ4YMkcLCwgrb10J6Ene+Kdc1ld3QyxOAqkSjOu3WdL/qiq193+r8tkbuV9V3cKQfNadjtVolKipKzGazREVFaRGtIfVaSBcuXCgDBw6Uli1bip+fn4SGhsrAgQPl66+/Ltnn+PHjMnLkSOncubM0aNBAAgMDpXv37jJ58mTJy8urtH0tpIqa3JS9gcpu6I6MpKorFNXZz5WjYEf2s9/g9YhU407UayF1NlpIFfoGVpaajkirO7Vm5IjUFaPgmuxn75eKRkmO9KPmdPSMkmNoIXUAu5D269fPq088PaVWlspu6OUJgP2YqqbWqisU1dnPFaPgmuxXFY70o6YsekbJMaxWq/Tr108LaW2xC6mPj0+tTrz68hSoR6SnU9ENvaCgQE6cOCEFBQWGtlvT/VwxCq7JflXhaD9qTuKM69ed721G2ma/juwaoIW0FtiFtDYnXn16CtRTap5JXY+Ca7Kfpu4wekbJne9tRtt26kOIFtJaYBfSJk2a1PjEM+op0IinK6Pa0FNqVZOcnCwLFiyQ5ORkV5tSbYwaBdd0v8rwxH50V4wekbrzCNdo2+wPIXYN0EJaC+xC2rJlyxr/GEY8BRrxdGXUE5o7T+XUFGd+l4rW9jQ1Q/ejcRg9S+DOI1yjbbMLc8uWLbWQ1pbSQlrTE8+IJyN3acOdp3JqirO/ixYAY9D9aCxGzii58wjXaNvs9wstpA5Q2mu3pieeEU+BRjxdGdFGfXI2cvZ30QJgDLof3Rd3HuE6Y43eKK9dj8u1azRz5sxh2LBhNTomOjoaq9WKxWLBbDZjsViw2Ww1aseIHJlGtFGfkl7Xp++i0bgCI+5tpTEyF7DRttnbnDNnTq2PL6HWEuzh2EekBw8edMnnG/F0ZUQbekRafTIyMuTvv/+WjIwMQ9rzVuqiH+vTur8n4wme3gcPHtRTu7XFLqSOdJ6jGLG24WgbnnCiV5f69F00tac+rfvXB9w9KsAILfB6IU1MTHS1KS7H3U/0muDM75KVlSWbNm2SrKwsw9r0Rpzdj/VplkXjfBITEx0WUpPIKYtKXkJ6ejohISHEx8cTERHhanM0HsDhw4eZOXMmo0ePpnXr1q42x2Nxdj8GBQWRk5Nz2vtms7mknrFGYychIYHIyEjS0tJo3LhxrdrwemcjjUZTv9DFrjV1jRZSjUZTr4iNjUVESsTUZDIhIsTGxrrYMk19RQupRqMxHJvNRlRUFEFBQfTu2ZNfXn0V5s2DiRNh6lS10/Tp8OabsGABbNqE7YsvSo6JiorCZrPV6rOdESah0VSGn6sNcDV+fl7fBZpq4ufnR6tWrfQ5UwU2m40HY2K4DpgCDNi0CfO4ceqPLVvi16kTrc4/H79ffoEdOyAzE4ArgGbAz8BXGzcSExOD1WolOjq6xjZER0fX6jiN92HE9ez1zkaOLDBrNJpSFBXBDz/wz803c8GJExQAvwPfAP8A0qMHK+PiTj8uLY27e/Wi6a5dnAcMAkKAncCKFi24e+VKOPPMuvseXo7NZmPChAkkJCQQERFBbGxsvX4oMUIL9NSuxm0oPR3oyNSepo4pLIQ5c6BHD7j6avwyM7kDaAFcDrwJrATW79hR/vEhISw4dIhXgRuB5sBgYDkQffQodO4MV14JS5YosdY4DZvNRkxMDHFxceTk5BAXF0dMTIy+FqvA64U0MTHR1SZo8IwL+PDhw7z44oscPnzY1aa4D7/+Cr16wV13QWQk/PEHd/fowScmE8dL7Vbaa7a8fiztaZsP/ASMMZm4smdPmD0bkpPhuusgKgo++0yJt8ZwJkyYUOKcBZQ4bU2cONHFljkPIzTA64VU4x54ygVc6OU3cPusQSezmV9CQmDAAAgOhlWr4Msv4cILiR0/vkqv2VP7sSJP26cmTIA774R//4U//4S2bWH4cOjWDRYtgjpamfKW2RKdr7p2aCHVuAX6AnZ/7LMGlo0bWZObS5f0dIYDtieegPPOK9mvNl6z1Tqmf3/44Qclqp07w803Q9++SmCdiCfMlhiFjsGtJbXOieTh2FMExsfHu9oUjXhGWjdvL/91cbdusliNAWU+SGgtfyPD+vGXX0R69RIBkRtuENm/v+RPRiat94Rz0yi8MV91fHy8LqPm7dSXKScdRO/mrF7NvC1buAS4ARgJHMfFswaXXQarV6v41D/+gK5d4c03+fKLLwwdQXrTbImOwa0lxmi652EfkSYlJbnalFpT36pcuHvy/Ly8PDly5Ijk5eW52pS6o6hIZMYMkYAA2dCggYSfUqC5NiMzp/Tj8eMiDz4oYjLJVrNZLjDATjveNCL1RpKSknT1l9riDmXUHEVf4Bqnkpcncs89aur0gQfky88+c/9pv3//lTUmkxSCvA/SpNS1YTaba9WkN053ehNGaIHXT+2mpqa62oRa401TTu5AamoqS5Ys8ehzptqkpqrYzblzVYzou+9y/c03GzLt59R+7NOHe3r04FFgOBAPxOCYw4ye7qzfGHEeen2us/LKLXkKERERxMXFlRFT7WHnPLKzs/nvv//o06cPTZo0cbU5zmP3brj6akhMhGXL4JJLSv5kROo9Z/fj8+PHq/SCwHRgMfCZCI0ef7zWbeqUg/UXIzTA60eknox20NEYzvr1cMEFkJcHK1eWEVFPwT6CbBEVxcjAQJ5q147ohg25etw48FBnPI17o4XUg9FTThqjsNlsjOrcmdRzzmFzRgbfPPusylTkoURHR7N+/Xqyc3KYuncvAdu3q5jTmBi49VaVKcmF1Bdve41CC6mHU3LDyM5m/fr1LhNRfWPwXGw2GzNjYnh/507WA/2ys7n2rrvq12/YqpXKvDR/vkrq0L07fP21S0zxpgQPXoMxfk+eh91Ta3+pIG5N7ahvYTgVkZaWJsuWLfNoT+/yeKJdO8kFWQJirgPvb5f346FDItdeq7yRR4wQSU6u04/X3vbuxf79+x322tVl1HQZNYeJiooq1+nJYrGwfv161xmmqZrZsym85x4+A+4ACkr9yWw2k52d7Rq7nI2IGp0+8giYzTBzJlx7bZ18dFBQULkOLvW6v90YXUbNAHJzc11tgsfjLWE4ubm57Nmzp/6cMzNnwj33YA0L43bKiqgzvb/doh9NJrjtNti8GXr3hqFD4Y47VNiPk/G2fLbuvuxjxHno9UJ6/PjxqnfSVIq33BhSUlKYO3cuKSkprjbFcWbOhPvug4cewm/mTIqgzry/3aof27SBpUtVrOyXX6qaqj/84NSP9CZve09YDzZCA7xeSDWO4003hnrBrFlKRB98EN5+m+iYGO/2/jaZ1Gh00yblhHTllXDvvZCeXrKLkaMqb/K295TyiA7j4Dqtx6KrvxiLu+fJNYJ6Uf1l1izlZPPggyqPrgtw634sKhKZOVOkYUORdu1Eli93e2c6IyvdGI3ZbC7jVGXfapuu0Rno6i8ejruvHdQEdwnD0VTC7NlqpPXAAzB9uhqJacpiMqk+iouDTp1g4EDyR4+mIbjlqMrdp069ZdnH64XUx8c1XeBOF0B9EnRn4uPjQ6NGjVx2zjjE7Nlwzz0wZgy8845LRdQj+rFDB1i+HN55h2uSk9kAXFzqz+ImznTuPnXqCcs+hpyHRgyNPRFXV39xl1gyd5+20jiG1WqVF844QwpBPg8LE+sXX7jaJI/jqshI+a24oPmbIEFuFPfpCVOn7r7sY4QWuK2Qbtq0SW644Qbp2LGjBAUFSdOmTeWiiy6SJUuWnLbvli1bZPDgwRIcHCyhoaEycuRIOXr0aKXtu1pI3eUCcBdB1xiP1WqVO6CkpJhP8e+rH5JqhtVqFRPI4yBZIPEgfd2kjJq+fh2nXpdR27t3LxkZGYwaNYpp06bx/PPPAzB06FBmzpxZst+BAwe4+OKL2bFjB5MnT+bJJ5/k22+/ZdCgQeTl5VX5OUePHnXad6gMd1k78JYYUCM4cuQIb7zxBkeOHHG1KdXiv0cfZTYwC3gASkJcXD3t52n9GB0dzWKrlV+iojg/IIDsBg34y2Ri2N9/g4sTKHjC1Km7Y4gGGCTqdUJBQYFERUVJZGRkyXtjxoyRoKAg2bt3b8l7y5YtE0BmzJhRYVuu9tp1l2LB+om2+ri1t+mpfPyxFIJ8AGJys2k/j+rH8igoEJk6VSQwUKRzZ5Fff3WpOe4+derueJ3Xrq+vL+Hh4WUKsVqtVq655hratWtX8t7AgQOJiIhg0aJFLrCyerhLLJl+oq2HzJ0Ld96JLSyMB1Dqaac+ekzWOb6+MG4cbNigkuFfdhmMHl0nWZHKw2iPee18WHPcXkgzMzNJSkpi586dvPnmm3z//fdcfvnlABw8eJCjR49y7rnnnnbceeedx3///VfX5tYIIy4AR096dxF0jUF88gnceSfcfTc+M2bUacYiryMyEn77Dd57Dz77DLp1U9mRPBh3iibwKIwaHjuL++67r2RKysfHR2644QZJSUkREZHVq1cLIJ988slpx40dO1YAycnJKbdd+9TuunXrJC0trWSraH93RHvc1i1uPyU5e7aIySRyzz0ihYUi4p7Tfm7fj7Vh/36Ra65RyS5iYlSFGQ/EG5d6jJjadXsh3bp1qyxbtkzmzp0rV199tQwbNkwSExNFROT3338XQD7//PPTjnv++ecFkOPHj5fbrl1I/f39y5w0sbGxTvw2xuKNJ70rycnJkd27d7vnw9aMGeomfv/9JSLqrrh1PzpCUZHIZ5+JNG8uEhIi8s47aj3Vg3CXaIKKcEYWp6NHj9Z/IT2VQYMGSZ8+faSoqMiQEen+/ftrNSJ1h7Rc7n7Sa+qI995TIvrQQy5L+6cpRXKyyL33qt/k3HNFVq92tUXVxhkP50bdK501A1ev40grYsaMGQLItm3b5MCBAwLI1KlTT9tv5MiREhYWVmE7jhT2NuoHdfQE0yPSusXlBanL4+231Q370Uc9RkTdsh+dwd9/i1gsarr9wQdFUlNdbVGVGB1NYKT4Oet+Z0Rhb48T0rfeeksAWbVqlYiING/eXG688cbT9ouIiJABAwZU2I4j4S9G/KBGnGDuEkLjLbjT2p7VapVXWrcWAfm4WTOxLl7sapOqjTv1o9PJzxd54w2VBL9lS5FPPxUpKnKLGa2KMHJd3Ujxc9YMXL1eIz1y5Mhp7+Xl5UmvXr0kKChIMjIyRETk/vvvl6CgINm3b1/JfsuXLxdA3n///QrbtwtpeHi4jB07tka2GfGDGnWCuaMzSX3FXQTAarXKk6iUdVNKxYm60824MtylH+uU/fuVExLI0W7dJMpLnASNFL/27duX21aHDh1qbd/YsWMlPDy8/grp9ddfLwMGDJDx48fLrFmzZNKkSdKlSxcB5PXXXy/Zb9++fdK0aVPp1KmTvP322zJ58mQJDQ2Vnj17VrreaRfSli1bClAjMTXiB9Xrm56HWwhAUZHMat5cBGSih07pu0U/uooff5SdgYFSAPIeSFMP/P1qgpEjUqOF1O5HY9eAeimkCxculIEDB0rLli3Fz89PQkNDZeDAgfL111+ftu+mTZvkiiuukAYNGkiTJk1kxIgRJZ69FXGqkNZEwIz4QfX6pufhcgEoKChxYvk/D34Ic3k/upiGgYHyKMhxkBSQh0B8Pej3qwlGLj8ZPfiwt1evhdTZ2IW0cePGJT9IdTHiB9Xrm57H8ePH5euvv64wpMqpZGeLREeL+PrKs2ec4dEPYS7tRzfA/hDdHGQGqqhAHMjoM890tWlOwajlJ6MHH/Y27BqghbQW2IVUr29q3J60NJHLLhMxm0WWLNEPYR7Oqb9fL5A/ite8ZcgQkY0bXW2iW2L0eX/qgEgLaS2wC6mvr68AMm7cuGofq29k3kleXp4cOXJE8vLy6u5DDxwQOeccFeD/xx8lb3vyQ5hL+tHNOO33s1pFFi9WSfB9fETuukv99poyGHne29dI7RqghbQWlPbarYmI2vHkG5mmdtT52t7atSJt2oiEh4ts2FA3n1kHePsaaaXk5qrY4GbNRIKCRJ57TiQ93dVW1VuM8tp1+6T1zmb58uVMnTq1xscZXXFBo7Fjs9l4rEMHMnv3Ju74cb6NjQWLxdVmaeqCgAB4+GHYsQMeewxeew06d4a334bcXFdbV+945ZVXWL58ucPteL2QajTuhO2LL4iLieGNvXv5Fjg/O5tr7rlHV9/wNkJCYPJkSEiAq6+Gxx+Hs86CDz+E/HxXW6c5BS2kGo27kJxMy7vu4nngeeAWIBtV/mzixImutU3jGsLD4aOPYMsW6NcP7r1XlWtbsAAKC11tnaYYLaQaTQ3w9fV1TsP//AO9ehF54gSDgclQUpBbRIiPj3fO57oIp/VjfSUyUtU8Xb8eunaFESMgKgpsNigqcrV1Xo9JRKTq3eof6enphISEkJaWRuPGjV1tjsZbyc+HSZPgpZegTx8Gp6WxLD6e0pelyWTCYrGwfv1619mpcS9WrYLnnoPly0lr147JwDtHjtA5MpLY2Fiio6NdbaHHYIQW6BGpRuMqtm1T03WTJ8P48fDnn9z30kuICCaTCVAiKiLExsa61laNe3H++bBsGSteeomV+/Yxdd8+1ubmcvbGjdwUE6PX1OsYrxfSpKQkV5ug8RCOHTvGjBkzOHbsWK2Ot9lsREVFEWY2M6tlS4p69oT0dFi5Ep5/Hvz8iI6Oxmq1YrFYMJvNWCwWbDZbvfIKd7QfNSd59PPPucpk4jwgAZgLxANxjz4KeXmuNc5DMEID/Ayww6MpKChwtQkaD6GgoIDExMRanTM2m42YmBiuA74GWh09ykTg7PHjub5PnzL7RkdH1+upOUf6UVOWhIQERITVwHVAFPAcEHvgAHTsCI8+Cvfdp7yANeVixHno9SNSjcbpiPDTk0+yEvgK2Ab0ACaaTIyvRQyzRmMnIiKiZBkAYANwk8lEdGQkDBmi1lHDw2HsWDhwwHWG1nO0kGo0DmKfsg0KCiIqKurk+lR+PixeDBddxAe7dyPAQOBKYCf10xtXU7fExsaWu6Z+25QpMHs27NkDDzwAs2apEeqoURAX51qj6yFaSDX1igpFzUlt2Kds4+LiyMnJIW7jRp6LiWHbDTdAu3Zw440gwoMdOtAf+LnUsSaTicjIyJp/SY2mmCrX1Nu0gZdfhn37YOpU+OUXlSVrwAD48ksdi2oQXh/+kpiYSMuWLV1tjmcjAsePw+HD6jU1teyWng45OSrFWemtsBB8fMBkAh8fDhw6xOYtW0jPyCC4cWN6WCy0O+ssMJshKEi9lv73Ka+/r17N2BdeIAfIAnKLX2fPn891t9wC1YhdtAuj/cne/mq1WrnyyivZtWsXZ555JkFBQQCcbbFwIi6OnsDlwNVAR+CEjw8Nx4xR61M9e1bYbn1zJKoO2dnZp/Wjpo7IzwerVaUcXLkS2rdXI9Z77oGwMFdb5xKOHDlCq1atHAp/8XohTTtyhMbNmqkbuqZ8CgvVE+2OHSe3/fvh0KGTW3l5QAMCIDQUGjVSghcYWHbz9bUXj+LI4cOsX78eH8BUvPkCPSMiaBoUBNnZSoxLv9bUScDf/6TwlhbhUv/+5c8/OZ6eThFQWLwVASGhoQwdNkzZm56uHhBSUjjx3380LG5+D/At8A3wT2Agx3Nyyny8zWZj4sSJxMfHE1kc7+dtIqpxI9auhenTYeFCdf8bORIeeADb7t1MmDCBhIQEIiIi6m9camEh5OaSfuwYIR06aCGtDXYhPdigAW2ystRNPTAQGjRQT2ZNm5bd2rSBDh3U1r69eq/UIn+9oLAQdu5UaygbN6rXzZth9+6T+T39/NRaS7t20LYttG7NhmPHmPTRRxwBkoA0IAVYYLVW+wKMiooiLi6uZokICgqUqBYLa8/OnTHl5REEBAHm4tfG/v7M/eCDsiJcwb+/X7oUiorwRQm5T/Grv8lEz4suIq5NG3pmZNCwQQNo0oTXv/mGnw4fZiOQWF27vZwTJ04QFxdHz549adiwYdUHaJzL0aNqDfX99+HgQdYAHwILgBOlZmTcWkwLCk4+7B84oL7TqVtSkrrW7TNixQ/ihxo0oG1WlhbS2mAX0vjp04kIClIxV3l5kJkJycmnbwcPqr/ZCQ5Wotq1K/TocXLr1EmJjbtTVKQSYv/7LzsXLiTrt9/olJ1NA/vfW7RQayndu0NEhKpA0bmzEtBTvl+tRPAUgoKCyDllBAdgNpvJzs6uVhtG2FFZG99//z0zZ85k9OjRtG7dGqh4Ktgbp2yry+HDh0/rR40bUFDAI507M2jvXq5C5Xn+DCWqORYL6zdscK19oGaD1q+HDRtOzo5t364e9kvPUIWFqXtY8+bqtUULaNbs5OxTYGDJa0JmJpH33eeQkHrAHd/JXHGFEoqqEFGCunev8oTbuxd27VLJpN95Rz3tgPqBunWDCy5Q2UcuuEBVbXD11HFWlloTWbFCva5erU5KIA/4D5gDxAEbgffff7/aT6D2WLbS1NQjNSIiolwBq4kzTmxsbLmiVpOsQDVtw+7soadsNR6Pnx+zjhxhOtAWuAu4G7gHiIuLUyXdbr1Vzc7VBampsG6dmoJet05tCQnqbwEBatDSuTNcc426x9of9s84Qy3jVBd7m45Q60qmHo69sHd8fLwxDR45IvLzz6oo7x13iHTtWrz6h0hoqMiQISIvviiycqVIfr6IqOLgFotFzGazWCwWsVqtxtgiIpKZKbJsmcizz4pceKGIv7+ypVkzkeuuE5k8WWT5cunXvbuYTCZB5UgXQEwmk0RFRVX7oywWi8NtWK3WkuNKv9a0YLoRBdcrakMXpDYG3Y/uy6nXsg/IlSA/hYSIBAaK+PiIDBokMneuSEZGtdqs9n0uJUXk669FHn9c5JxzREwmdc9q0ECkf3+Rhx+W1Q89JNFnnSUNAwMNu2fGx8c7XNjb64W0X79+tfoxqnVyHD8u8tNPIpMmiVx1lUjjxurEaNxYDvbpIw+DdCslPECNbRk7dqyYzWZpAHKlv78sv+ACddKVFs4bbhB55x2RTZtEiorKHG82m8sIoH0zm8016gt3EUFnogXAGHQ/ui+VXsvHj4vMmiVy8cUnBW7ECJFvvhHJyalRe1arVR3zww+nC2d4uMhtt4l8+KHIli0iBQVVt+XA9+3Xr58W0tpiF9LQ0NAa/xi1/kHz89WI9MUXZVVwsOQUj1j3grwPci3I+T16VM+IEydk5o03yosgf4LkFbd1BGR9ZKTIu++KbN58mnCeihGjSRH3F0EjSE5OlgULFkhycrKrTfFodD+6N9W6lnfvFnnpJZEuXUoGB3LrrSJWq5oNK+bU+0sLkDtBloeEiAQHq2PPOEPk9ttFPvpIZNeuCu9ZRt2rSn/P0hqghbQW2IXUVVOZZrNZgkAGgbwJklAshDkgcsUVItOmiWzffvKAjAyRH38UeeYZkX79RPz8REASQT4DGQPS1YWjSY1GUz+o0ZJTUZFIXJzI+PEiPXueHKnGxIh8+KHc6+sr/wcyGWQlSGHx9rfJpIR448YqH/btGDF7VppT7+NaSGuBXUjtHVmTH8OIH7R9+/anHd8ZZHxYmFqDCAhQJ2Xr1iIRESXCKS1aiNx0k8h770mXcmywbzXBG0aTRlBQUCAnTpyQguKpJk3t0P3ovjg8fZqQIDJliojFUuIjkgWSBPITyB0gzWspfkaPSO33cXubWkhrgV1IW7Zs6ZIR6alC2hIkGuTDxo1Fzj1XxNf3pLMSiJjNIjfeKPL77yVPcEY/oWkqR6/tGYPuR/fFoXtberrInDkil15act8qKH0PK156WgAy2tdXTePWALvIn7rV9sHf/l1btmzpsJDqdD5QqxAJKSfco9pt5OYSfvgwD6BCThJQwfxW4PKMDOjSBaZNg99/VyE327bBE0/Av//CxRcrF+/YWF647bZym3/kkUeq/V00Go3GTo1D2QoLYdkyuO02aNUK7rpLhfrNnQsZGfSyWPABGgIDgFmoFJrvFRbCmWeq7Z57VIL9TZtqlfv3VHurS3n38VpTawn2cOwj0vDwcBk3blyNjq3oyajc6Y+MDJF//lHebmPGqNFmsUdtLshqkGkgN4K0hcqf/AoLRVasELnrLpFGjURMJtnWoYPc5O8vfsUj0Zp+F/v3cVoYTj1Cj6SMQfej+1LtEenhwyoaITxcjTYjI1VI3d69ZXaraKp46bx5Il99JfLww2oa2MdHtdOokciAAcoX5OuvRfbvL5mBM3pqV0RFPYSHh+up3dpSemq3QhGsgPJ+0JYgt3furOKrnn1WZOhQkY4dT05r+Pio2NJRo0TeeUd+efllCXTEyefECeXldv75J9dSn31WZM+eGvWDM1zK6ytaAIxB96P7UqnzYVGRyK+/Kh8NPz+RoCCRu+9WA4VKHIaq5YORkaHanjJFxbm3bHny3tm4sUi/fvKhr688DDIApJUBS1n272rE1K4W0srWSIuKRLKy1NPXhg0q5mnOHHnez0/eBrGC/AeSfso6gLRurTxvn3hCrRmsWaPaOQXDnHzWrxd54AF1wplM6kT89ddqecM54ymvvqIFwBh0P7o3p96Xlsyfr6II7ElmIiNF3npLxZU6i6IiNShYskSNdEeMkK1ms2SXus9mgWwD+bthQ5F77lEj5E8+UYlo1q1To+OMjCrDaYwQUq/Ptfs50AQI9PHhkr59VVLjtLSTmz1ZeymO+/pyoLCQQ8BuYAewC/CNiOCLtWvBVYm4MzPh00/V+uqWLSpX7qOPqrReZnO5hxiR49ZbKCoqIj8/H39/f3xcnfLRg9H96CHs26fKrc2apVKMDhsGY8bApZe6pGCHzWbjppgYOgORqLXWdsDNF1xA2/x8lbbVnqq1NAEBKvduWJi6DwYEQEAAy//8k5yiIo4Dt4POtesIBahqJQ0bN1a5G81mCAmBJk3Uq31r3lzlmGzZkl+//bb8ROUvv+w6EQWVSH/0aLj3Xvj5ZyWo99wDTz2lLoCHH1bfoxRG5Lj1Fnx8fAgMDHS1GR6P7kdjsdlsxpY9W7MGXn8dvvhClUC03zvatjXO6FoQHR3NouK81j+VymvdtnRe68xMOHIEUlJOFhyx//v4cVX1pbhASWGjRuSnpWFIRdxaj2U9nFMzG9W3dHYlbN+uFvQbNFBrGg8/XGYdVSdkqD5JSUkyb948SUpKcrUpHo3uR+MwzMehsFBNo9rT/3XsqPKGVzOfrieiMxsZQOlcu14hGklJKvtIWJhyFLj9dpV7VzzoocDF6LU9Y9D9aBwO+zgUFIgsXHgyK1HfviKLF5fkt63vGJVr1+sXKObMmeMdJa+aNoXYWLXu8dpr8Msvqn7qddcR3bo169evJzs7m/Xr13tHf2g09YBalzDMy4OPPlL1lIcPV8tWv/8Of/8NMTHg6+tEq92H6Oho5syZ43A7Xi+kXkdwsHJA2rkT5sxRtfj69YNLLoHly5U/nEaj8QgiIiIwneL4U6mPQ04OvPuuqt95993QvbuqTfzDD3DRRXVgcf1EC6m3EhAAd9wBmzfDl18qr7xBg1TmpF9+qbGg2mw2oqKiCAoKIioqCpvN5hy7NRpNCfbsPHYxrbAQfV4evP++yor2yCNw4YUQF6eu/XPPdYHl9QyDppo9DvsaqV6nKaaoSNUVPPdctVZy8cUqFrUaeEtShxMnTsiqVavkxIkTrjbFo9H9aCyV+jjk56vELR06qBjzESNUYnlNCYcOHdJxpLXFHkfqSOxQvUQEvv1WraeuW6dixsaPV1O/FRAVFVVuCI3FYmH9+vVON1mj0ZxCYSF8/rm6drdvhxtuUP/u3t3VlrkdRmiB10/t6qQDp2AywTXXqFiyr79WSSkuvRQGDIA//yz3kFo7PHgY2dnZbNy4UZ8zDqL70YmIgM0GUVEwYgRERqoH4i++0CJaAUach14vpGlpaa42wT0xmWDoUFi7Vq2jpKQoZ4SrroL//iuza40dHjyU1NRUvvzyS1JTU11tikej+9EJ2GeSevdWXrdt2sA//8DSpXDOOa62zq0xQgPcVkhXr17NQw89RPfu3QkODqZdu3bcdNNNJCQklNnvjjvuwGQynbZ16dLFRZbXM0wmuP569VS7aJHy9u3VC265RXn8UgOHB41GYzyrVqmll2uuUZnVfvsNfvoJzj/f1ZZ5DW6bInDq1Kn89ddf3HjjjVgsFhITE3nnnXfo1asX//zzDz169CjZNzAwkA8//LDM8SEhIXVtcv3GxwduvFHl25w7V623dOsGd95J9AsvYC1O3RVfKnWXjkfVaJzI9u3wzDOweLHKq/399zB4sEvy4Ho7biuk//d//8eCBQsICAgoee/mm2+mZ8+evPzyy8yfP7/kfT8/P0aOHOkKM70PPz8VfzZihHKnnzwZ5s0j+oEHiF627LRcvhqN5nQcyo979ChMnAgzZkDr1urBdsQIr0mi4I647dRuv379yogowFlnnUX37t3ZunXrafsXFhaSnp5e48/x9/evtY1ejdkMjz8Ou3app+IPP1TV7sePh1r8Dp6Av78/Z5xxhj5nHMTb+9FmsxETE0NcXBw5OTnExcURExNTdex1ZiZMmqSKa8yfrx5i4+Ph9tu1iDqAIeehEXE4dUVRUZG0bdtWrrjiipL3Ro0aJSaTSRo0aFCSgPiBBx6QjCqSLdvjSPfv3y9paWklW05OjrO/Rv3k2DFVfzUwUKRpU5HXXy+3BqtG4+3UOD9ufr7IjBmqznFAgLrOkpPr1Ob6jF0LvCbX7qeffsrBgwe5+eabS95r3bo148aNY86cOSxcuJChQ4fy3nvvMWTIEAoKCqpsMzw8nJCQkJJtypQpzvwK9ZdmzVQO3x07lNfguHEqDdmsWVCN30Gj8RaqHS4mAkuWQM+ecN99KgQtPl5dZ2FhdWixpkoMk3Uns3XrVmncuLH07dtXCqqoTPDSSy8JIAsXLqxwH/tTyLp16/SI1BkkJIjccovKknTWWSILFqhSTR6MrlpiDN7ej9Uakf7zj8hFF6nr5/LLRdaudZm99Z34+HjvGJEmJiZy9dVXExISwuLFi/GtYj3g8ccfx8fHh+XLl1fZdnBwMI0bNy7ZdMFhgzjrLFi4UMWcRkTArbfC2WerJ2zvTKal0QBVhIvt3Ak33QQXXKCSofzwAyxbpkLONG6L2wtpWloaV155Jampqfzwww+0adOmymOCgoJo2rQpKSkpdWChplLOPhu++Qb++ktN/153nbpJlFNpRie+13gD0dHRWK1WLBYLZrMZi8XC0rlzGfbHH6qs2d9/w8cfq9htHc7iEbi1kObk5HDttdeSkJDAN998Q7du3ap1XEZGBklJSTTXoRjuQ79+qqrM8uXqxjBokFrz+ftvwAFPRo3GA4mOjlY1gFNTWX/bbVzz6KPKn2D8eJXoZNQo7YnrQbitkBYWFnLzzTezcuVKvvjiC/r27XvaPjk5OWRkZJz2/qRJkxARhgwZUhemamrC5ZfDypVqijclBfr3h2uu4bOnny6Z4gJKpr4mTpzoYoM1GicgopLKd+0KTz2limvv2KFCyRo0cLV1mhrittVfHnvsMaZNm8a1117LTTfddNrfR44cyZ49ezjnnHMYPnx4SUrAH3/8ke+++44hQ4bw7bff4uNT/rOCPeN/cnIyYdoDzjUUFalk2i+8AAkJLAJeAEr7LprNZrdJbl5QUEB6ejqNGzfGz89tc5m4PV7fj3/+CU8+qVL7XXstTJ2qBFXjElJSUmjatKlD1V/cVkgvvfRSfvvttwr/LiKkpqby8MMP888//3Do0CEKCwvp3LkzI0aM4Mknn6w00FaXUXMjCgqI7diRuw4c4AxgIfASEK9LsWnqE9u3w9NPq+osvXqpMJbLLnO1VV6PEVrgto+DK1asqHKfJk2aMG/ePIc+5/jx41pIXY2fH1HTphERE8M9wNPArcAXIjS74w7X2laK48eP8+uvv3LZZZcRGhrqanM8Fq/rx6QkldLv/fdVSr9585QXewWzZZq65fjx4w634fW/ZG5urqtN0KCcLxZarfwVFUWPwEBeOuMMrmnRgssff1wlyl+3ztUmljhB5eTkuNoUj8Zr+jEnB155RaX0+/hjld4vPh5GjtQi6kYYoQH619S4DXZPxrScHJ7fv5/gAwfgo49g0yZVZ3HgQPjxRx2HqqlzahSaVVQECxaootrPPAO33abiQ59+GoKC6s5oTZ2hhVTjvvj7w513wtatKrlDaioMGQJRUariRV6eqy3UeAHVDs0SUXVAzztPVWPp1Qs2b4Z33tFVkeo5Wkg17o+fnyokvno1rFgB7dvDHXdAx46qAkZioqst1NRjJkyYUHVo1j//qLjowYMhIEAV1/7ySzUq1dR7vF5Ig4ODXW2CprqYTHDJJbB0KWzZAldeCS++COHhquj48uVqWs1JNGzYkEsuuYSGDRs67TO8AU/rx0qTzG/aBNdfD337Kqeir79WWbwuvtg1xmpqjBEa4PVC2qhRI1eboKkNXbuqGqiHDsEbb6jp30GDONG2LW+2bs2ZZrPhaQYbNWrEpZdeqs8ZB/G0foyIiCjJi2unI7AoKAgsFti4UXnirl8PQ4fqlH4ehhHnodcLqfba9XCaNIGHH4a4OH578UW+TExkTGIiO3Jzmb5xIz/HxPDt7NmGfFRubi47duzQ54yDeFo/lk4y3wKYDmwDBomo9c9t25Qnrk7p55For10DMCKGSOMGmEw8smgRo0wmWgF3AhnAW8CV99yjAt/few927671R6SkpPDpp5/qYggO4mn9GB0dzdKPPmJW8+bsBG739WX7yJGYDxyABx5Qa6Iaj8UIDXDbhAwaTU2xr2WlAZ8Ub6HAjX5+zAgMhEcegcJCVdZt0CC48EKV6zc83LWGa9yXxER47TWuef99Ffv5v//B2LF094ZEEppqo4VUU2+IiIggLi6ujGNIqsnEqu7dVV3HtDRVgebHH1WYwrvvqp3atFEhNWefDV26qAD6M8+EFi30dJ23cuCASqYwaxYEBsITT8Bjj4HOy60pBy2kmnpDbGwsMTExJaEKZQomA4SEqCxJw4ap/x89qjws16yBDRvgk0/g4MGTDfr4qBtns2aqIkfz5so785FHlHew2Vz11qSJOs6+NW2qxdmd2b5dOa999BEEB6uECg8/rH5HjaYCvF5IffVNrd5gL5g8ceJE4uPjiYyMJDY2lmF24TyVFi3KCitAZqZaR921C44cgWPHVFhDdja+hYWE5uXh6+enkkOkpKg0cJVtp2IyKXFu0UJNKYeHQ7t2aiv978BAp/SRO+Dr60toaKhTrz2bzcaECRNISEggIiKC2NhYoqOjy99ZBP74QwnokiXqwWnCBLX+qfNw13uMOA/dtvqLs9HVXzQVUaObcGUUFanp5GPHTt+OHIH9+9W2b58aHdvx8VFietZZZbeICDXlrB/+KsWeiejUmQmr1Vr2d8zPV2X83ngD1q6Fbt3g//5PZSUym133BTR1iiFaIF5KWlqaAJKWluZqUzRuhNVqFUBMJlOZV6vVWukxFotFzGazWCyWCvetdL/sbJHt20V+/lnWjhkjHzVvLl/5+EiC2SwFAQEiatwkYjaLnHOO7LnkEnmjVSsZ6u8vg7p0EevixQ7ZVp+wWCwlv5t9M5lMEhUVpXY4cEDkpZdE2rZVfXrFFSI//CBSVORSuzWuwQgt8Hoh3b59u6tN0bgRld2EExMT5ZVXXpHExMSS/asrvI7sZwL5bsYMkWXLRN56S3YNHCh/g6TbxRUkFSQpMlLkgQdEPvxQZN06sX32WbUfCupScMvrRyMxm81lfj9A/EBu8vcXufpqER8fkaAgkbvuEomLc4oNGs9h+/btWkhri11I4+PjXW2Kxo0o7yYMiNlslkOHDsn48ePl0KFDJftXOfpxwn72fUwg7UCuBnka5NsmTUS6dlVCAZJnMslakFkgY0DOB2kAp31mTUbhRoy+y+vHmrRdFaX7sAvIKyCJ9oeOPn1EPvhAJDW1Vm1r6h/x8fFaSGuLFlJNeVQmZOUJQGXCWxoj96tynxMnRP7+Wx7185MPQdaC5BYLSQHIZpNJZORIkTfeEFmxQvp1714tkTdq9F1eP9ZmSr0ifpg+Xf4Hsq74OyeBvAmy/M03a9yWpv5jhJB6fWYjjaY0pdPBAaeH0JxCeXlYTSYTkadU/TByvyr3CQ6Gvn35tVs37jWZ6A00AnoB9wObwsJgxw549lm49FL+2ryZHSJYgeeBa4EzRIjftq3MZ1SrCkoN9nP0mBIKCpTX7dNPQ8+eDH74YSYGBnI0JITh/v4M6dmT9jYblz/2WNVtaTS1wQBB90j0iFRTEVarVaKiosRsNktUVJTYbDYRqdlIyn6MM/YzrK38fJFNm+Tp8HB5FWQZyLHS666+viKXXSby+OMic+dKv4AAaWjAqNqRkb2IiOTmiqxeLfLaayLXXCPSuLGyuXlzkVGjRBYvFsnMrN6PrfF69NSuA9iF9NixY642ReMh5Obmyr59+yQ3N7fM+xUJ76kYuZ/RbZUW2jOK1103Dx8uEh0tcuaZJ72GQQ6ALAd5B+QRkAc6dhTZtEmk+EZU1Tpvef1Y7jEgl3XrJvLrryLvvaccqc47TyQwUNkSFCQycKDIiy+K/POPSGFhuX2g0VTGsWPHHBZSHUeq40g1Gmw2W+WJLNLT+fWDD5j91FN0BSKLtwigTOqIxo1JCwnh3/37SQGOA6lACnDrvfdydp8+4O+vYmXz89WWm8uWlSv56fPPCQXaAOHAGUBJxVJfXxVLe+650KeP2nr31gnjNQ5jhBZ4vZDu37+fM844w9XmaDyA9PR0Vq5cSd++fb324es0wX3uOYb16XMyuUTxdmDtWg7ExRGQmUkLf39a+PsTkJcH+fmkN27Myr596btyJY0zM5UYNmlCuq8vO1NS2JOTQ2ZYGFFXX03PoUNV7dlOnbRoapzCgQMHCA8Pd0hIvT5FYFZWlqtN0HgImZmZ/PPPP1gsFq8V0ujo6PKzPLVvX+a/ZxRvpyFC5oED/PPRR1hmz6Zx27Ylf2oMnFO8aTR1hREaoL12NRpN3WEygV/x87uPvv1o6gf6TNZoNBqNxgG0kGo0Go1G4wBeL6RBQUGuNkHjITRo0IBzzz2XBg0auNoUj0b3o8adMEIDvN5rV4e/aDQajfdihBZ4/Yg0Pz/f1SZoPIT8/HwOHz6szxkH0f2ocSeMOA8NE9KcnBxyc3ONaq7OSE5OdrUJGg8hKSmJmTNnkpSU5GpTPBrdjxp3wggNqHUc6YoVK/j666/566+/2LJlC9nZ2YBa/+jatSv9+vXj+uuv59JLL3XYSI1Go9Fo3JUaCWl+fj4zZszgjTfeYM+ePYSFhdGrVy9GjhxJaGgoIsLx48fZvXs38+fP5+2336Z9+/Y88cQT3Hffffj7+zvre2g0Go1G4xJqJKSdO3cmLy+PUaNGcdNNN9GrV69K91+7di1ffPEFkydP5rXXXmPPnj2O2KrRaDQajdtRIyF95plnuOOOOwgMDKx6Z6B379707t2biRMnMmfOnFoZ6GxOreuo0VSEyWQiICBAnzMOovtR404YcR7WOPzl+PHjhIaGOvzBrkaHv2g0Go3GJeEvrVq1YtiwYSxevNgjvXQ1Go1GozGSGgvpDTfcwPLly7n55ptp2bIld911Fz///DOemtdBu+BrqsuxY8d47733OHbsmKtN8Wh0P2rcCSM0oMZC+umnn3L06FHmz5/PRRddxKeffsoVV1xB27ZteeKJJ1i7dq3DRtUlBQUFrjZB4yEUFBRw7Ngxfc44iO5HjTthxHlYq4QMQUFBDB8+nKVLl5KYmMh7773HWWedxVtvvcV5551Hly5dePHFF9m1a5fDBmo0Go1G4844nNkoNDSU++67j99++419+/bx8ssv06BBA1544QXOOuss+vXrV6t2V69ezUMPPUT37t0JDg6mXbt23HTTTSQkJJy279atWxkyZAgNGzYkLCyM2267TU8baTQajaZOMDTXbtu2bRk7dixz587luuuuQ0RYtWpVrdqaOnUqVquVyy+/nGnTpjF69Gh+//13evXqxaZNm0r2O3DgABdffDE7duxg8uTJPPnkk3z77bcMGjSIvLw8o76aRqPRaDTlIwaxd+9emTJlilgsFvHx8RGTyST9+/eX9957r1bt/fXXX5Kbm1vmvYSEBAkMDJQRI0aUvDdmzBgJCgqSvXv3lry3bNkyAWTGjBkVtp+WliaAHDlypFb2abyP7Oxs2bZtm2RnZ7vaFI9G96PGnThy5IgAkpaWVus2HCqjlpSUxKJFi1iwYAErV65EROjSpQsjRoxgxIgRdOjQwSi9L6F3794AJU5NLVu25JJLLmHRokVl9ouMjCQ8PJzly5eX246OI9VoNBqNEVpQ46T1mZmZfPnllyxYsICff/6Z/Px8WrduzWOPPcaIESOqTBvoCCLCkSNH6N69OwAHDx7k6NGjnHvuuafte9555/Hdd99V2eaJEye0kGqqxYkTJ/jvv/8455xzaNiwoavN8Vh0P2rciRMnTjjcRo2FtEWLFuTk5NCwYUNuvfVWRowYwYABA/DxcX5p008//ZSDBw8yceJEAA4fPgxA69atT9u3devWpKSkkJubW2lKwyNHjpS5mAMDA6udAlHjXWRkZPDLL7/QuXNnLQAOoPtR404YIaQ1Vr+BAweycOFCjhw5wpw5cxg4cGCdiOi2bdt48MEH6du3L6NGjQIoKd1WnvCZzeYy+1TElVdeSUhISMk2ZcoUgy3XaDQaTX2mxiPSr7/+2hl2VEpiYiJXX301ISEhLF68GF9fX0DFswLlpirMyckps09FfP/993Tq1Knk/3o0qtFoNJqaUOvC3qXJzc1l3bp1HD16lP79+9OsWTMjmgUgLS2NK6+8ktTUVP744w/atGlT8jf7lK59irc0hw8fJiwsrEphDA4O1mukGo1Go6k1Ds/Jvv3227Ru3ZoLL7yQ6OhoNm7cCCiP3mbNmvHRRx/Vuu2cnByuvfZaEhIS+Oabb+jWrVuZv7dt25bmzZuzZs2a0479999/Ofvss6v8DD0C1VQXs9lMt27dSpYNNLVD96PGnTBCAxwS0jlz5vDYY48xZMgQZs+eXSZxfbNmzRgwYACfffZZrdouLCzk5ptvZuXKlXzxxRf07du33P1iYmL45ptv2L9/f8l7P//8MwkJCdx4441Vfk59KAmnqRtCQ0O58cYb9TnjILofNe6EEeehQ1O7r7/+Otdddx0LFiwgOTn5tL/37t2bt99+u1ZtP/HEEyxZsoRrr72WlJQU5s+fX+bvI0eOBFSx8S+++ILLLruMRx99lBMnTvDqq6/Ss2dP7rzzzio/p7CwsFb2abyPwsJCMjMzCQ4OLlmn19Qc3Y8ad8IIDXBISHfs2MEjjzxS4d/DwsLKFdjqsH79egCWLl3K0qVLT/u7XUjDw8P57bff+L//+z+efvppAgICuPrqq3n99derNWQ/duyYfjLWVIujR48yc+ZMRo8eXW7IlaZ66H7UuBNG5GV3SEibNGlSaS23LVu20KpVq1q1vWLFimrv2717d3788cdafY5Go9FoNI7g0BrpVVddxcyZM0lNTT3tb5s3b2bWrFkMHTrUkY/QaDQajcatcUhIX3zxRQoLC+nRowfPPfccJpOJuXPnMnLkSM4991xatGjBCy+8YJStGo1Go9G4HQ4JaZs2bVi7di1Dhgzh888/R0SYN28eS5cuZfjw4fzzzz+GxpRqNBqNRuNuOFT95VSOHTtGUVERzZs3r5O0gY5gz/ifmppKSEiIq83ReAAiQmFhIb6+vphMJleb47HoftS4E2lpaTRp0qRuq79URvPmzY1srk7QF7KmuphMJvz8DL1kvBLdjxp3wggNqNGwsVu3bnzyySfk5eVV+5jc3FzmzJlzWlYidyElJcXVJmg8hOTkZD7++ONah3RpFLofNe6EERpQo8fCO+64g//7v//j0UcfZejQoQwcOJBevXrRsWNHGjRoAKh6pbt372bNmjUsX76cpUuXEhAQwNixYx021hnU5KFA493k5eWxd+9efc44iO5HjTthxHlYIyEdN24cY8aMYfbs2Xz88cfMmzevZFhsn6opKCgA1DpIjx49mDBhAnfddZdODK/RaDSaekmNFyoaNWrEY489xmOPPcaePXv4+++/2bZtW8k0TdOmTenSpQt9+/alY8eOhhus0Wg0Go074dCKf4cOHejQoYNBpmg0Go1G43m4d4xKHaCnnDXVJSQkhGuvvVaHSzmI7keNO2GEBhgaR+pJ2ONIHYkd0mg0Go1nY4QWeP2INCsry9UmaDyErKws1q1bp88ZB9H9qHEnjDgPvV5I09PTXW2CxkNIS0tj6dKlpKWludoUt8dmsxEVFUVQUBBRUVHYbLaSv1XUj5Udo9E4CyM0wOuFVKPRVJ/qiJ3NZiMmJoa4uDhycnKIi4sjJiamUmGszTEajbug83RpNJpqYRc7k8mEiJSI3ZJPPuHanj1h927Yt4/kyZOZCTQToQUQJoIZCL75ZmjUCEJC4I47oH9/SEmBwEB6p6byD3BchETggAgHgGVPPkn0uefCGWeAm+fv1ngvThHS3bt389FHHyEidOnSBYvFQrdu3XR+TY3GTbHZbEyYMIGEhAQiIiKIjY0lOjq6zD7Tnn+ey4EoEaKAHiKcCTS5/faTO5nNDM7J4QhwDNgBpABZQCHwwtNPg68vnDgBDz4IRUWQm4tt/HgaAaFABDAAaAP47d4N7dtDgwbQtSv07g3nngt9+kDPnqotjcbFOMVrt0ePHnTv3p2zzjqLzZs3s3HjRg4ePEhkZCQbNmww+uNqhd1Ta/fu3ToWVlMtkpOTWbp0Kddeey1NmzZ1tTmGcepI0xc4C5j7+OOcFxgIGzao7dAhADKBOGAjsBM46O/P/D//hA4doHlzos4+m7i4OErfWkwmExaLhfXr15fbj1FRUacd4wtc0aUL373+OmzdCps2wdq1sHmzEuDGjeGii+CSS2DgQDj7bNBFKDQ1ZM+ePXTs2NGxCA5xAiEhIVJUVFTmvYyMDFm5cqUzPq5WpKWlCSBpaWmuNkWjcRpWq1UsFouYzWaxWCxitVrL7pCaKqM6dZKHQGaCrALJBBH7dsYZIldfLfLMM/Jku3YSCeIDQvFmMpkkKirqtM+0/630q81mq9TOah9z4oTIH3+IvPSSyKBBIg0aKFvbtBG5+26Rr76SLxcsqPx7azTFGKEFThHS2267TVavXu2Mpg3D3nmpqamuNkXjIRQVFUl+fv5pD4muoEqBlLLiZAI5E+R6kC033SRy3XUiHTqUCGYuyDqQOSCPgVwG0iYwsML2qhI7q9UqUVFRYjabJSoqqsw+FfVjZcdUSm6uyC+/iDzxhEiXLiIg6SALQIaBBBaLvhZTTXmkpqa6p5Decsst0r59e/n4448lMTHRGR/hMHYhjY+Pd7UpGg/h0KFDMn78eDl06JBL7ahI0EqEIjNTZNUqGd+2rbwL8gdIWqlRZrKfn8jAgUp4PvlEos86S/xLjTIrGmnaP7tWYlcKZ/fjtRER8izIf8XfNwnkbZCbIiKc8nkazyY+Pt5hIXWKG1yfPn247LLLmD59Oh07dqR169YMGTKEp556yhkfp9HUK6oKMZkwYQImkwmTCGcBw0QYDzS+6y6IiFCeseefz3MHD3IpsB94CRgCtAba+vrCsmXw2mtw222MePll8jlZ4Ni+VhobG3uabdHR0axfv57s7GzWr1/PsGHDnNgTtWPZvn28BJwDdAU+BG4EPk9IgF694J13lLewRmMQhgnpiRMnSv79f//3f8yZM4c1a9Zw4sQJfvvtN+69916CgoKM+jiNxm2obiKB2sZg3hoTw7K33oIvv4RXXuGJzZv5V4QMIAGwAmMA34wMuOoqmDkTVq+mb48e9DCZuBV4BfgROGIyEdmlS5nPjI6Oxmq1YrFYMJvNWCwWbDabW4pkdYiIiCh5KNgGPA20Ax7p0EF5AD/+OLRuDSNGwOrVLrRUU28wanjcqlWrkn/fc8898vbbb8uKFSvk+PHjRn2EoeipXU1FVLT+WN6UZJXTrNXZr6hI5NgxkXXr5OH27eUxkHdBfgLZDVJY2vmnUSOJCwqS2cVrmZeDtDDQ6acucPbUbpXf+8gRkddeE+nYUfVp//4iixeLFBQ4xR6Ne2PE1K5hQpqbm1vy72nTpsndd98tffr0keDgYGnbtq1ceeWV8tRTTxn1cQ6jhVRTHpUJXnkCYLFYSvaxbyaQPj17iqSkiOzaJbJqlTzYoYOMAnkC5GWQj0CWgewODBQJCjoplMVesxtAvgCZDHInyICAAJHERJGiIsOcflxFXaw1V+t7FxSIfPmlyMUXq77v0EHkjTdEtCe/V2GEkDq9+ouIsGPHDjZu3EhcXBzjx4935sdVG3scaUpKCqGhoa42R+MOFBYyuEcP8rZtowPQCmgGNAVah4Qw8NJLySwsJDgjA9/sbMjJISEujsDizD1mILD4tSLSgCTgKHAAOOTry6OvvQbh4RAezoA77uC3rVspKnVM6RhMOzabjYkTJxIfH09kZCSxsbEeMxVbWFhIZmYmwcHB+LpLQoV16+Ctt+Czz8BshjFj4P/+D1q2dLVlGidz/PhxwsLCHIoj1WXUdBk176SoSAX2//WXCvLfsEEF/Gdnl+ySjMrOkwxk+/gw8Oqr1U02MFC9ms18/NlnHEhKIhvIKd5ygRbt2jH59dehSRNo3pxBw4fzx9at5JYyoSKBLJ0cwf7qyWuWHsWhQzB9Orz7LuTnw+jRMHasSlGoqZcYogVGDI1P5fDhw/LKK6/IlClTxGazyY4dO5zxMQ5hn9rds2ePq03R1BWHDol8+KHIsGEiTZqo6TxfX5GoKJFRo0TeeEPGdOggkaViDym1/piSkiKLFi2SlJSUkiarO83q6dOxRlJeP7odKSkiEyaIhIWJ+PvLrkGD5MrISJ3goR6yZ88e91kjLU1UVJQMHjxYHnnkERkyZIi0adNGGjZsKOeff74zPq5W6DXS+kkZR6GePeWXqVNFXnhBpHdvJZw+PiL9+olMnKiC+E+cOO34igSvorW96gpffRfI6uIu8bjVIj1dNt52mySC5BcnrOioEzzUK9zK2ag0oaGhUlhYWOa9pKQk+fXXX53xcbXCLqTh4eEyduxYV5ujMQC7CHYEeQ4kwZ61JzhY5JZbRObNU96x1WinPMHzKAFwYzytHy0WiwSBPAxyqDgL1HsgA7t1c7VpGgcZO3ashIeHu2dChltvvZXff/+9zHtNmzbl0ksvdcbHOUReXh6vvvoq48aNq9Fxugixm5GWxsZHH2UFsAt4CvgLGAj07dQJFi6EkSOhWbMqm/KEpAOauiMhIYFsYDrQCXgWuAlYsmULPPkkJCW51D5N7Rg3bhyvvvoqeXl5DrflFCF9/vnnefjhh3nppZdYt26dIYY6i7ZAc2Dm228rB5RqoIsQuxGbNsH990ObNrxw4AC5wEigJXAn8DOwJSHBpSZqPJvSCR6ygdeAM4G5LVuq5BcdO0JsLKSludJMr8CQAUxhIWRm8sW0aUSgyvY5ilO8di+88EIyMzPp2LEjW7duZc+ePXTq1ImoqCg+/fRToz+uVtg9tQ4GB9MmM/PkH0wm5ZXZoAGEhir397ZtT762acO948fz5+7dHABOlBx2ugemxkkUFMCSJcq7csUKaNUK7r+fQZ99xs/x8RWW73KUEydO8N9//3HOOefQsGFDh9vzVjytHyv1pL7oInjlFXUuBgXBU0/BQw9BcLCrza53VPQ7fD1/PkOjomDPHrUlJkJysnrdtw+OHoXUVOWRX1h4WruHgoNpm5npfl67jRo1kpycnJL/Z2dny5o1a2TOnDnO+LhaYV8jfQHkLZD5Pj4i11wjcv75Iu3biwQHnwyS9/FRpZrM5jKB8wJyBOQvkI9BYn18RBYuFFm3TiQ729Vfsf6Rliby6qsi4eGq//v1U/1dnAzEXTP5aDyfKh3FDh4UeeABEX9/kZYtRd55p+S81BhAXp4Mi4iQm0EmgSwGWVNckKDMPdnXV927T71Xh4WJdOsmctFFIkOHitx5p0z39ZXJIOOKncfcztlo+PDhsm7dOmc0bRh2IQ0MDBRAxo0bd/pOKSnKs/O111TIRNOmJZln/kDVb5wMMhfkb5Cjp/6g3bopJ5fJk0W++Ubk8OEyzVenFJZGVEaf//1PJCRE3ahGjRJZu7bcXZ3pGZudnS3btm2TbP2Q5BD1uh937VLnp8kk0qmTetA7xfFSUwVZWSK//y4ydarIrbeK9Oyprvvie+vB4vSZM0CmgXxpMolERJy89/boIXLvvSKzZ4ts3ChSalBXmrFjx5bRALcT0piYGGnXrp3MnTtXjhw54oyPcJjSXrvlimh5FBaKbNwoT/v4yG8gBSB5IN+A3ArSyM9Pie/ff4vMmCHy4IMiF14o0rjxyR85PFzkxhtlw6hR0h+kQalYRbRLfVm2bxe57z6RwECRhg1V2a/9+11mjqd5m7orXtGPcXEi116rrvlevUSWLXO1Re5JUZHInj0iCxaIPPywyLnnivj5qX5r2FDdP++/X+Sdd+TygAAJK/bKjwXZWnxPTQaRESOUV34Ny3Ya5bXrFCE9Ndduq1atZPDgwdUXrDrAkThSi8UigDQDGVM8OhWQVF9fkUcfFdm8uewBRUUiu3eLfPGFyJNPilx0kWSZTCLFQrwSlX/1KpB+PXoY8v08mh07RG6/XU2pN28u8tJL6gHFxXiFANQBXtWPv/8u0revEoaBA0XWrHG1RXXOqTNvS+bOVUUCRo8uU1xeOndW1/3774usX1+2iEBurtzs6ys/Fu+bVrycdiVIAz8/h+xz2zjS0hQVFUlCQoIsXrxYYmNjnf1x1cYRIS1vLa4TSPywYSItWqiTYvBg9RRaVFRuG8GBgRIFcj/IguLpCike5Urv3mr09dNPXrXW+t3778visDDJBznq5yf/3X23muZxE7xKAJyI1/VjUZHIV1+JdO2q7g233KIeFr0Aq9UqPiD9QSYWDxoK7MIZGalGoV99JXL0aPkNpKSIvPyySJs2IiB/gtwOEsTJzGPlFaCvCS4R0lWrVklycnK19t29e7fMnTu3xkbVBY5mNqpwLS43V00xnH22OlnOOUfEZjttnaS8qiFngYw/4wyRkSNLThwJChK58kqRt94S2batQmH2aA4ckB1Dhkhu8Trz/5Wa8nanqW6vEwAn4bX9mJ+vUlS2bSuFvr6ysGlTaRcYWD/9I3JzRX78URaFhcnhYuFMAlkIcjfI4K5dKz/+0CGRxx9XjkMBASJ33SXL3njDKc6ELhFSHx8f+fTTT0v+n5ycLEFBQbJixYrT9p0/f774+PjU2jhnYhfSnTt3OucDiopEfv5ZZMAAJYgWi3ryKhbCKj1Mi4rUOsurr6opoYAA1U779mrd0GYTSU93ju11RWKiyGOPiQQGSqqvr/wPJJjTc9y6C0ePHpV3331Xjlb09KypFt7ej18tWCDjQFJAMkAmgDR0s4fGWpGVpcrS3XZbSS7rXSaTvALSF8Sn1LVtNpvLb+PQIXVPMJuVc+Fzz5Vx0nSGM+HOnTvrXkhNJlMZIU1KShKTySQ///zzafs6IqQZGRnywgsvyODBgyU0NFSAcsNnRo0aVWZUZ98iIyMrbd8upI50XrX544+TgnrJJSUepzU6KU6cEPn2WzUVYvdQCwiQw+ecIxPatpUOnvRkm5QkMm6cCilq3Fhk/HhpUew5d+pW4QWn0Xgo9tmoUJCpINmoMLopbdp4XshMUZFaB77nnpNOld27izz/vMj69WLp2fP0er3lPSCnpoo884yagQsJERk/XuT48Tr5CkZogV/tok+dT1JSEhMnTqRdu3ZERUWxYsWKCvcNDAzkww8/LPNeSEiIky2sARdeCMuXww8/wBNPwLnnwu23Y+7fvyR5gKiHmorbCA6Gq65SG8CuXWx48UVS5szhGeAFYOXGjXwdE0PDadO44pFHnP61akxqKrzxBrz5pprseewx1R9hYbSy2TgWF3daMoXIyEiXmavROIOEhAREhOOoVJbTgfHA2EOHoGtXePFFuPlm8HFK4jlj2LED5s1T2+7d0L49PPIIjBgBXbqU7BY7fny5SRRiY2PVDnl5MGMGTJwImZnw+OOqbF2TJq75XrWlpspbVyPSnJwcOVw8pF+9enWlI9Lg4OAat29/CklISKiVfbUmP1/kvfcku3FjOQEyvnjhvDbhL/Yn2zCQ21BByifsC/kREWrUt3q169dV09NFJk1S0z1BQcpz+ZRpPU9IpnD48GGZPHlyyXmpqR3e3o/l+UeYTCaJjoxUyQLsvhU//uj6a7c02dkin3wi0r+/srFRI5G77hJZsaLSWNkKZ95+/VU5YPn4iNx9t8iBA3XzPU4hISHB4RGp2z7yBAYG0qpVq2rvX1hYSHp6eo0/R+q6rrmfH4wZw+Xh4UxHPZFuBC4rflqbOHFitZuyP9mmAPOAG4BmQLS/P1x8MXz0EfTpA2eeCePGwZo1SmbrisxMlT6tY0eYNAluvx127oRXX4XmzcvsGh0djdVqxWKxYDabsVgsblfMWkTIy8ur+3OmnuHt/RgbG1syOgNKRmkjp0yBr7+GP/9U6QYHD4ZBg9R160p27jxZ3Pz221VR+wULVAq+2bPhkkuqHD1LqZm3gJQUuO02uOwylYZ13Tr48EOVgtUFGHEe1kpI9+zZw7p161i3bh0bN24EYPv27SXv2bfdu3c7bGB1yMrKonHjxoSEhBAWFsaDDz7IiRMnqj4QyMzMJD09vWTLzc11srWKdTt38j/AAhxAJVf/UISj27ZVu43SybTt5JpM7OrWDWbNgsOH1ZTy4MEwZ07diWpODrz1lvqsZ5+FG25QU0HTpkHr1hUepquuaLyBKh8a+/dXYvr11+oa7tNHTfVu3153RhYUqM8fMgQ6d1aCefvtEB+v7inDh6t85FVQusBHXk4OF2/cSP977iH3669Vm3/8AVFRdfCFnExNh7Amk0l8fHzKbOW9V/p9R6lsavfpp5+Wp556Sj7//HNZuHBhifNR//79JT8/v8I27VO7LVu2LDPFUlexrqWnd0zFLuHHQZL8/FRasWpM6dRoOjQ/X2T5cuXx26yZmprp0EFk7Fj5eepUsfTs6VCqQqvVKr179JBH/PzkiJ+fFPr4iNx5p0qZVk/w2rANg9H9WAPy81WquzPOUBl/xow5LdWooaSny/o775QDxSn5NgYFyeoHH6x1PLf9PtcHlRu3EJXa7+Lu3Q02vPYYEf5SY2ejOXPmGCbiRjBlypQy/7/llluIiIjg2WefZfHixdxyyy2VHv/999/TqVOnkv8HBgY6xc5TiY2NLbMI/5HJxLcirOnTRz3tffqpGlVWMr1tf7KdOHEi8fHxREZGEhsbW/5Izs8PLr9cbe+8A7/9Bl98Qe6MGQxIT+cr4Avgi40biYmJwWq1Eh0dXa3v8uWiRXx3881YgXBgATABmHrNNUR37FjjvtFoNMX4+cFdd6l7wjvvwOTJMHeuctJ78kmobbWSUzl4EKZPJ2/6dLplZfEZ8BbwX04O8u67WAcMqPb9oDR74+N5WYQngA1AP2AVYN650xi73QXjdN15VDYiLY+srCzx8fGRu+++u8J97CPSpKQkg6ysORUuwn/5paog0ayZij11Iuf07CmXg7zPyaT7O0E+at5chelUNjIuKBCZO1f2Fse4fg7S1U1jQI0gLy9PDh06JHl5ea42xaPR/egAKSkiTz2l4iybNVOJWipIyl4t1q9XcZ9+fiKNG8tHzZvLGaeEoNX6Wv73X9kRGCg5IGNBfN303pCUlOT+KQKNoKZCKiLSvHlzGTZsWIV/r9M40tpw5MhJD7577xXJyHDKx5jN5pILxhdkAMgHIMfs3r+dO6v4rvXrT4pqYaHIZ5+pFF8gS3x8xKJjQDWaumP/fuXp6uOjlmjmzatZlZmVK0Wuvlpd4+3aibzxhkhaWpn7Qa2v5Zwcdc/w9ZWUTp2km5t74xuhBW7rtesIGRkZJCUl0fwUz9DySHPXqvYtWsBXX8HMmWqa95xzYNUqwz+mtMNSIfALMMZkYojFAj/+qDzy3n8fzj4bQkJUPKvZDLfcopyJVq/muR49iDvF6ak+xoCmpaXx7bffuu854yHofjSAM85Qnq5xcRxq3hxuu40Nfn6MOfNMbFZrxcf99pvyBO7bF3btUnGgO3eq+M3Gjct1YKzRtbxunXKOevVVGD+e0K1bmeTm3vhGnIceLaQ5OTlkZGSc9v6kSZMQEYYMGVJlG9nZ2c4wzRhMJrj3Xli/XrmJ9+8PL70ERUWGfURFrvjPjh8PV1yhLtbDh+H556FbN7VmGxioArDPOQdMJmJfeOE0F3IpHXRdT8jKymLNmjVkZWW52hSPRvejcdi2baPt6tX0B9JFeH/3bkJvuIFfp049uZMI/PSTCom79FI4dgy++AI2bYKRI9U6bDEV3Q+qvJYLC1UiifPPB19fWL0annsO/P3d3hvfEA0wYmjsLKZPny6TJk2SMWPGCCDR0dEyadIkmTRpkqSmpsru3bulSZMmMmbMGJk2bZpMmzZNrrrqKgFkyJAhUljJVIejSevrnLw8lXfSZBK54oqKqyXUggrXagsLVbmjqKiTBXOHD1fpu+68U1WdBznRvLm8DtKv2AMZ3C/hvBFob1Nj0P1oHKcmd7gGJM6+LOPjo2r5Nmig/t+nj8iSJVVGBNQ4n+2+fSr1qY+Pukd5WJpDjyij5gjt27cvd74ekN27d8vx48dl5MiR0rlzZ2nQoIEEBgZK9+7dZfLkyVU6MnickNr56SdVo7NNG5Xj0hkUFKg10O7d1QV4+eUqe8mp5OWJLF8unzVtKoeKL95DIO+CDATpbbE4xz4XoQXAGHQ/Gkd5a5o+IE/5+Yk88IBaR73tNpFZs5yTJclmEwkNVeE5v/1mfPt1QL0XUmfisUIqInLwoMjFF4v4+krciBESZUAMqMVikeDAQHk6PFzS2rY9WVP1zz+rPN5sNoupeET6GshuTpZNkjvuUE/BmZm1+aZuhRYAY9D9aBynjkj7gCyzj0hP3a67TuTff4354MxMFZMOItHRItUsremOuJ2QFhYWyt69eyXXA4b2diHdv3+/q02pHfn5sjUmRgTkW5Awapev12q1ih/IKJD44gtuCcgvL79c7TbKyx3aC2RWixYlnr1iNqu6qtOne2yShrS0NPnhhx/c19PbQ9D9aBz2pCzdQWzF128cyMpx41TihqQkVUXl449PVo0aPFhVpKotGzaIdOum8mZ/8IF75QOuBfv373cvIU1MTBQfH59yE9i7G24f/lINLBaLDC4OVdkFcnZNY7TS0+XV1q1lX/EF+GWxANY0zqvKDEvbtom8/roqJefnpy7mrl1V8vpff1VTxHJyZOzI6Fqj8Sp27ZI13bpJISr++05/f3nqySfL39e+ZNOjx8mSjsuWVV8Ii4pE3n5brbv27CmyebNhX8OVGKEFhgtpRZVg3A175x07dszVptQa+/pIO5DVIFmoKjBVxnwdOiTy9NMiISGSCzKn+Im29IiypjGg1XZQSEsTsVpV1YhWrdQFHRIiB84/Xx4A6QJlxNidxDQ3N1f27dvnETMu7ozuRwM4dkzk4Yel0M9PDoE8AOJf3eumsFAlfendW11/vXqJLFig0hFWxNGjItdco/Z/+GFVCaaecOzYMfcTUk8bkXrkGmkxpadUA0FmF48sFzZtWr7n3NatyvkgIECVQHrySRnYpUv1Cu86g8JCkTVrRCZOlDXBwZJbbP8BkLnF081XdelSo6kjZ45q9dqeMeh+dICsLJGXX1ZFtBs3lrdatZLgUx6Cq339FhWpUm0DByqBbN9e5M035blHHy15SG8cGCiLBg8Wad1aZVJautTZ37DOcbs1Uk8ckXqykJ42pQpyH0ihn5+qGbhzp8i6dSKffqocDUBdEFOnqor05bXhoswjZrNZGoAMBnkFZC0qwXWJzTfcoNKhrV5d4ZNzRd/FKDHVAmAMuh9rQWGhqgUaHq6WRx5+WOToUWMyEYmI/PefyMiRUuDjIykgk0HGgRwsvgY3nnWWcnKsh7idkObl5cmKFSsktfgm7c7UByEVqWBK9e+/lfiU9tjr3l1VkSgnL2eN48acQHkOS2EgD3XsqKahL7xQrc2AcnLo21fkoYeUE0VcnEh+foUFk2s6uq5oVFuRAOi13ZqhhbSG/PyzKvRt95BNSCj5k1HnvJ3OgYHyKkg6SB7IJyCRtRFmD8LthNSTqE9CWvom/sP06SL/938iTZqoC2/gQPW06eZUa2SckyPy11/KcenWW096IYJIgway2mSSOagE2VeDdCwepdfkJlDZqLY8AXD2KLg+ooW0mmzaJHLVVer8vuCCckPRjJ5RAmQIpXJto8LYfgH1IH7ihKPfyu3QQuoAdiHdvn27q02pNfaLyB8kGuSn4hM/p2FD5RH7zjsibduqqaAnnijxjnVXajUyTktTySJee02+DA2VlSBppW4CWSA7AwNFhgwRuf9+tb702WdKkLdvV8eXWoOt7Ak/MTFRXnnlFUlMTKzW/pryKa8fNaU4dEgVqvDxETnzTJFFiyr1EzBsRikvT17z9RUB+QYVkxoD8gzIjz4+Kqta48Yq0cOGDbX8cu7H9u3btZDWlvoQ/nJdRIS8XGod40+U126fnj1P7pSVJTJ5soi/v0ricOSI6wx2MiVP5yBtQa4AeQRk+zXXiFx/vcjZZ4uEhJweqB4YqNaeevWSX318ZAnIQpAPQaaBTAF5yddXZNIkJcSvv67iYWfMkOH+/nIhyFkgQVWsUekpYE2lZGSo9JvBwSr95ptvOlYirSbs3i1ywQVS4OMjT1A21Scg48aNU/s8++xJb/sLLhD56COPH6W6XfiLJ+GxQpqSIvLeeyLnnVcy7TIdypQxK3cq848/RFq0UCWT1q2re7vriGo9nR8/rtZVf/lFjU7fflvk+edF7rtPvm3SRL4GWQ6yEmQjyA6Qw/7+qkZsaKhIw4ZKfE2m00R5H8jPIJ81bapuMhs3iuTn6ylgTcXk54vMnKkEKiBAZOxYdZ3XFYsWqQfMDh1EVq6UsWPHljgxmc1mJaKlyctTqQEHD1bXQHCwSkP4008qVtXD0ELqAPbO27Fjh6tNqZrMTHWyx8SoG7ivr8g118jj7dtLIDVwfd+3T8WOBQWpuDHNaVS25nTkyBGZNm2aHLGP6ouKZMnHH0sXkEtR4TqTQRaBpLdte1JoGzSQvxs2lP+BnI/7FjiuK07rR2+lqEjk229P5rS+9VY16qsrMjPVFDKI3HSTesCsKbt2qZkau79C69bKR2PdupLpaHefidmxY0fdC+mqVaskuZp5FXft2iVz586tsVF1gTs4G1V6gmVlqae+m28+Wb2hd2+RV19Vqb+klo4GWVkiI0eq9saN88gnSGdT0ai2Mq/dckfB6ekqkffUqfK9j4+kF49aj4F8DDIMpGlgYLmf7843HkfRzkYiy199VVY2bCgC8m9wsPw8dWrdGrBx48k0f0YktC8qUqFpjz6qZr5ApFs32XLDDSrjGu6baMUlzkY+Pj7y6aeflvw/OTlZgoKCZEU51UHmz58vPj4+tTbOmbhaSMsTwaYgqx9+WOTGG9X0IagSZpMnK8eYCtqpsaNBUZHIa68pZ4YhQ2TJ3Ln1+sZtFI4IgMViEX+QviAvcbLUVZaPj3qw+fFHkYICr5gC9moh3bdP9lxyiRSCbEGVPbOLTJ38xkVFamnIbFapAp2R5i8/X+S770Ruu03Sip2XdoO8CXIxiB+41UyMS4TUZDKVEdKkpKQKkzBoIa0Yi8UiJpAeIE8XOwqVJCA47zw1XbJtm3ON+OknyW3YUOJBurrxE6O74IgAlCeQnUA2lQ7jad1aPm7WTLrVZLreA/FKIU1NVfHQZrMk+fnJ/aWm+OvsN05JUXGoIDJmjJqdcjINAwPlcpB3UBnLBOQoyHwfH5VgoobngDNma4wQUh80tcJmsxEVFUVQUBBRUVHYbLaqDxKBhASYMYPnN23iMBAHPAscAe4BOgQGwqpVqrp8ZKRTvwODBjGsbVvygH+AawARwWQyMXHiROd+tpcRHR2N1WrFYrFgNpuxWCy8arPR/dNPYds29ZvHxHBVUhKbgeXAdYAP6jeJj4937RfQ1I78fHjnHejcGaZNgyefpIuvLx8AhaV2c/pv/OefEBUFv/wCViu89x4EBTnv84o5MzKSX0wmHgLCgfOBj4BzAwLg9tuhTRvo0QMefxy+/RZOnKiwLZvNRkxMDHFxceTk5BAXF0dMTEz17r3OpqbKW99GpFFRUTV+qqn29Ft2tsoy9NZbIsOHq5hOEPH1lfUNGshkVAHsQBeOPMxmszRElWAqBHmWmicx8BZycnJk+/btkuPEkIRePXrIcJC/ip/ed6NStV3UvbvTPrOuqYt+dDlFRSJffCFy1lnK6eyuu0QOHBCROo49zs8XmThRLeP07y+yZ4/xn1EJlfpxHDminB7vukuFn4GKee/dW+TBB0XmzVNLWsXrt87oN/vSGHpqt3bYhdS+1URMK0pnN6pTJ1Wfb8wYdTLYS4YFBqqUdk88obz00tPdJset/buYQF4ovnl/AXJBjx51aodGUfq86IWqzJMNkmc2q7CIUo5mel3bTfn9dxVjCaoG7ynJC+rs2t+xQ913fHxEnnuu8uouTqRafhxFRSLx8Wr99vbby2Yta9pU5Kqr5EVfX7kJVakqgCrC/appV+l7eJ0L6UsvvSRr166VtWvXyi+//CImk0k++OCDkvfs26RJk9xeSIODg6v3VFNUpJ6g/v1Xhvv7y+OoYP1lIIfsP3jxaFO6dhUZNUqdFGvWlF+JRdwjx+2pF/X1qDybqe3bq6T3mhLS09Pl119/lfT0dKd+zqnnxTcffSTyv/+prDKBgbJjyBBp78EOSXXVj3XOli0ni0P06qVy5FaAkdf+aQ9VixeLfPihcljs2FFl8fJEkpNFvv9eJakYMkSO2QcmIPkgW0GsIDNbtFCexz/8oNIqVlMQ7YOI4OBgh4XUJCJSk6lgHx8fTCbTqdPDp71X+v3CwsLT/uZq0tPTCQkJ4a6WLQk8coRgPz9efeklyMyElBS1JSeffD10CHJySo7PBPYCW4HNxa/5EREs3rgRAgNd86Vqic1mY+LEicTHxxMZGclrd97JwOnT4fhxWLQILr/c1Sa6BYcPH2bmzJmMHj2a1q1b170Bqanw7rscj42lYWEhHwMTgIOAyWTCYrGwfv36urerhri8H43m8GEYPx4+/BDatYPJk+Hmm8HH+S4o9nVDk8mEiNAcmAEMA7jrLnjrLWjUyOl21AU2m417Y2LoBnQFuhe/XhQWRtDx40pi7TRqBGecAa1bQ0gING6stlL/vvehh8gpKKCwZUsWHjlCWloajRs3rpVtfjU9YM6cObX6IHflKaADUFBUBC+/rBbgw8KgaVO1hYer/7dpA+3bQ7t2fBMXx7V33FFy8tpfbS+/7HEiCsoRJjo6uuybt90Gw4fD4MHw2mvw6KNQzsOSpg5p0gSefZbOkyZxR2EhTwO3Ae8CU7RDUt2TkQGvvgqvvw5ms3odM6ZO7wETJkwouf9ciXLk8QMe79CBN2fPrjM76oLo6GiwWpk4cSLzih/6Y2NjCRo2TDl1HToEBw6obf9+9ZqYCOnpcPSoek1LU6/p6cwqKgIgAVjoqHG1Hst6OPap3ZYtW9ZqfcIdpmWdTn6+Sn4Pat0iO9vVFrkUdwnbsE9JNSpe104r3t5r2VIlgXBz3KUfa01enioI0by5isd8+unaZQUyALPZLI1AZhRPeX4H0ko7C1ZNUZFYFy2SAJD2xRqgw18coFOnTthsNoYNG1aj46Kjo1m/fj3Z2dmsX7++xsd7BH5+6ol7/nw1xXvxxXDwoKut8npiY2MREU6YTEwEOgGzgNEpKXDmmWo6Ly/PtUbWM2w2G1EWC8MDAtjbsCHy8MNwzTUqnG3KFDVb4ALuaN2aTcBw4H7gKuCIyUSks0PnPB2Tiegbb2Sh1UrbTp0cb884ifcs7CPSPXXsDu6xrFkjcsYZKrG2pzovOEhKSopYrVZJqcuE4hVQ7ozIvn0i99yjvDQ7dxb5+muxLl7sdt697tSP1cFqtcoAkH+KR33fgvR0tXNXaqrI3XeLoMontqdsQpV6OUPmJPbs2VP3Xrv1BY+t/uJKEhNFLrxQlWSbNcvV1mgqIi5OFXQvvsn2RGetqjV//y2rgoNFQP4GucyFMd8lfP+9eqht1Ehk5kyxLl5c/5eZnIiu/uIA9s6rbgJ+TTG5uapANqgCv25eLNxI8vPzJTk5WfJdFI9XI4qK5KEOHWQbSAHIeyDNXC0AxXhEP27YIHLttSIgG00muYayaRtxxTpkcrLInXeqa2/QIJG9e+v28+spycnJeo3UUZKSklxtgmcREADvvw8zZsCsWTBwoPKI8wKOHTvG9OnTOXbsmKtNqRqTiQ8TE+kJPAHcAmwHHhNh17ZtLjXNrfsxIUF5q0dFwdatsGABt/XowbeneKyb6nIdUkT5KXTpAjYbzJwJP/6oQm00DmOEBni9kGpqyejRKm/ntm3Qpw8/v/ZazXMPa5xKREQEBSYT04CzgE+BV4FNIrB0adm4O29n/364917o1g3++EOJ1ZYtMHw4L4wfXyZW3h5uEhsb63y7duyAK65Q4WgDBqjr7d57dSiam6GFVFN7LrwQ1qzhuL8/fceOpdvGje6XTNqLsXv3mkwmkoGHTSaiAHOXLjB0KFx5pboxU8siDPWBAwfg4YdVUvmvvlIx0zt2KLHy9wfKLzhQG0//GpGXBy+9pBK6b98O330Hn30GrVo57zM1tceoeWZPw9Vl1OoTfXr0kE+KPRpfB/F3k7U4o/HE+MdyvXuLikS++krkzDNF/Pwk4ZprJKQOUw66RT/u2aPW+gMCRMLCRF580X1icFesEOneXaUbHTdO5MQJV1tUr9Fl1DRuQdyOHdwOPAo8DKwA2upMO25BufHOJhNcdx1s3gwTJ9L2u+9IAO4WKSnbVm9L6e3apUabnTvD4sUwcSLs2QPPPuv6VHr798Mtt8Cll0LDhrB2LUydCsHBrrVLUzXG6bpnocNfjKN0NZzzQfaAHAN5oGNHV5umqQYdAwNlbvGMwlqQ/q7ySjWQUxO5/zB9usgdd6hRXosWIq++KpKR4Rb2ndujh2waPlwkKEikZUuRuXNFCgtdZpu3ocNfHEALqXGcWkGmKcg39mo4zz7rsvJNmuphfxC6AOTf4t9tAcgVXbu62rRaUfp8jACZWxwClN2kicibb4pkZrqHfSDXgewEyQOJHzq02pVLNMZhhBZ4/dRucnKyq03weE51xjgjKoq8xYtV6rQpU2DQIFUhw8NJSkpi9uzZ9S5kyu6UtMpk4nzgLuAy4Ntdu2DSJMjOLtnXCKckZ/fjhAkTuABYJMJW4HLgceCS8HB47DFo0MApn1sT+84GfgS+QiVNtwA37d2rKpNo6hRDNMA4XfcstLNRHbFihUjr1mrK6pdfXG2NQ7iFk4yTONUpacn8+aqQuL+/SPv2Il98IdbFi8stSF1TpySn9WNhochXX8mfJpMISDzIaJBAd5qq3rNHPvXxkUKQbSDXujLBg0ZEtLORxhO45BL47z/lxj9wILz4IrhhfVpv51SnpGtHjIBXXoFNm9Rvd+ONnHn77VyCckYCN3JKyslRcZ9du8L119MgKIhhQBdgJpBLHSdQKI/jx2HsWIiI4AofHx4EegBLi//scvs0DqGFVON8WrZUmVieew5eeEEVCt+/39VWaapDRAR88w38+CNF2dmsAL4Dzi7+s7jSO3v7diVOZ5wB99+vBP/vv9k9bx5fQUnSgjpNoHAqOTkqNvXMM1VGsGee4a+PP+YDoNAd7NMYghZSTd3g6wsTJsCvv8LOnSoFm7cE/dcHrriCu3r04CbgTOA/VDHknlDuSKo2a6nVOiY/H6xWte4eEQGzZ8OoURAfr97v29c1CRROJScHpk+HTp3g6adV2sGdOyE2lutGjHC9fRpjMWaW2fOwr5EmJia62hTvIzlZJDpaefXee6/HBJxnZWXJhg0bJCsry9WmuAS7t6kfyN0ge4s9fA/37i3yxx+n7VfRWmp5/VjVMRIfrzzAW7VS502/fiKffCLibr9FdrbI22+LtGmjytndfrtIQoKrrdJUQmJiog5/qS06/MXFFBWJzJypYue6dBFZu9bVFmmqQWmnpN49e8qahx8W6dZNids554i8847079atRAjtW1WZrkrHItu3TiBvtG4t0quXar9xY5EHHxTZuLHuvnB10QLqsdTrONKMjAx54YUXZPDgwRIaGiqAzJkzp9x9t2zZIoMHD5bg4GAJDQ2VkSNHytGjRytt39559dED06PYskUkKkrEz08233KLnNOzp1sVoS7NiRMnZNWqVXLCQ0bQdUZhocjSpSJDh4r4+ko2yCKQ20DOKMcrtbx+bBAYKJ1BYkDeBdlRPNrNApEbbhBZvNj9Rp8iIikpIlOmKM90LaAeyaFDh+qvkO7evVsAadeunVx66aUVCun+/fulWbNm0qlTJ5k2bZq89NJLEhoaKlFRUZKbm1th+zr8xY3IzZWtMTFSALIKpEsd5HutDfU5/MUwDh+WN1q1kn/sCTlADoL8CvJdkyYi99wjh+69V/XjjTeKXHaZSK9eklUcsiLFIvpucbKCvj16uPobiUg5mZLefVfkoYdEGjQQCQwUueceLaAeihHhL351tBRbY1q3bs3hw4dp1aoVa9asoU+fPuXuN3nyZDIzM1m7di3tiuvznXfeeQwaNIiPP/6Y0aNH16XZmtoQEMDN27cTBMwF1gHPiPA2MHHiRKKjo11rn6b6tGpF+3ff5YKYGFoAfYFzgc7A5WecARs2QNOm0LatckBr1Qo6d2Z7z548MXcum4BETnqy2lwdWoNygoqJicFkMnG+CE9s3MjABx8kt3FjAp98Eh54QHmma7wWt/XaDQwMpFU1SgZZrVauueaaEhEFGDhwIBERESxatMiZJmoMJCEhgVXAOcAM4E3gZyB/61aX2qWpOXav2dZRUfxoNrM4KopAm43mcXHw77/w0UdqxzfegAULYOZMLB9/zBirlZZRUW7nyfr6Cy9wP/CvCCtRnsoPAhe3b6880bWIej1uOyKtDgcPHuTo0aOce+65p/3tvPPO47vvvnOBVZraEBERQVxcHNkiPA58DXwErM3PV2kGn3yypD6kxv2Jjo6u8UxCbY5xGiLw++8wezbLNm8mABU/e03xqwDm7dtdaqLGfXDbEWl1OFycv7V169an/a1169akpKSQm5tbaRt5eXmkp6eXbFXtr3EOpYtQA/xmMtED2HfddfD889C7N6xa5VIbAwIC6NSpEwEBAS61w9Nx637ctUs9uEVEqHJmK1cyq1Ur2gPXAd+iRFRnIqo/GHEeerSQZhcn0w4MDDztb2azucw+FdGzZ09CQkJKtilTphhvqKZKyguin2+zEfHll7B6tRqN9u0LjzwCGRkusbFp06aMHDmSpk2buuTzPYnKkitU1I9GJMSvcVsisHUrvPyyeljr1Ekl6u/bF1asgIQEwt99l0NQ8pCnMxHVL8LCwhxvxCjPJ2eyevXqcr127e9/8sknpx0zduxYASQnJ6fcNu1eu3v37pW0tLSSraL9NS4mP1/k9deVl2SbNiLz5tV5zcbCwkLJycmRQl0rslKqSq5QXj9WmZDBwM+XpCSRr74SeeABkQ4dlLdwUJAKs/n883IThJya1N9ms9WuczRux/Hjx+tv+EtpKhLSAwcOCCBTp0497ZiRI0dKWFhYhW3q8BcPZfdukZgYdfM7/3yRf/6ps4/W4S+nh4GUJ3SnJlcwgYSBDOzWTeTIETm0davqx127RHJyRAoKyk3IUFUSh4oo3ZYZpE9xFZhFTZuK9OhREmYjHTuqEJbvvnPPGFVNnVCvw1+qQ9u2bWnevDlr1qw57W///vsvZ599dt0bpXEuHTrA4sVq2u2xx+CCC2DkSDU117ati42r35QOAxER4uLiiImJwWq1KiehQ4dgzRqu27KFcSJ0BdoAzSj2atyyRXm4tm4N990H/fuX1Kn9C0gr3lLtryKc2LRJ5aoNCYEmTdRrSIiq2ykCeXlqS0uDpCRISuLRzZtpL0InIBzwBQqA+JQUGDYMxo2Diy+G9u3ruAc19RWPFlKAmJgY5s6dy/79+wkPDwfg559/JiEhgccff9zF1mmcxqWXwtq1MGcOPPusSoD/+ON8c9ZZPPvGGyQkJBAREUFsbKz7eIK6MTabjQkTJlTabxMmTCgR0QCglwh9geC77oLHH4d9+wB40teXjcBaVOHqY0AS0KpjR6a/9ZZa496xA156Cfz8IC+P955/nqzDhwkBQoAmQAsgKiBAPTilpiqxLCio+EsEBEDz5lwQEMCm7Gz+BXYCG4DNQITFwvpZswzrM42mBKOGx85g+vTpMmnSJBkzZowAEh0dLZMmTZJJkyZJamqqiIjs27dPmjZtKp06dZK3335bJk+eLKGhodKzZ89K1zv11G49Ii1N5OmnJT8wUNJBJoM0dUJ2pPo6tVut9cnERLnR319eAfkTJKd4ejQT5A+TSRUBt1pF9u+vsAC4fV2xvH6syIYya5FFRWr98uBBlVoyPl5N9R84IJKerv5e3bY0mmKMmNp1ayFt3759mTWT0tvu3btL9tu0aZNcccUV0qBBA2nSpImMGDGiyqouWkjrH5d06yYvg2RAiaA2g1qts5WHJwppbdc0e4BMPOMMlTu2U6eSdcW9IAtBHgLpDeJfQf9W5pxTUT8a6dCjnYM01cUIITWJFJe79zLS09MJCQkhJSWF0NBQV5ujMYCgoCBycnJoCjwBPISK75rv68t9cXHQtatD7RcWFpKTk4PZbMbX19cAi53LqWua9teSNU2AwkKiGjSge14evYFexVsIal3Rr3dv6NcP+vfn+7Q0rrrvvtPaq2kGIk/rR0395vjx44SFhZGWlkbjxo1r1YZHx5Eagb6Q6w8RERGYTCaSgWeAjsBrQIzJBN26wcCBKiVdVlat2vf19SU4ONgtzpnqxEmWXtMEaCnCACD+kUfgwQfhoougSRM25OWxABgGJAMvAwOAi3r0gDVr4O234eabuXL0aEMKUrtTP2o0hpyHRgyNPRH71G7pKWKNZ1PR2tiXn38uMn++yIUXnqxredddIt98o+pIVpPk5GRZsGCBJCcnO/FbVD0dW+Ga5uLFIocOifz1l8inn8oLfn7yYfGaZkqpaiy5INK9u8jNN4tMnSq/x8ZKaB2uKdZVP2o01cFeaazerpE6E71GWj+pcm1s+3aR558XOessJSwNG4pcf73ItGkiGzaIFBZWKGSVre1VtQ5Z3f3KE8kAkG9mz1YONr/8IuPCw+VxkKkgc0F+BNkCkl2qFJmApPj6yr8gn4D8r7gsWSRIL4ul5v1mIJ641qypv+g1Ugewr5HGx8cTERHhanM0dY09NdyXX8KyZbByJeTlURAYyJrcXOJQoRMHgQPAC1Om0OX885n5+++MHjyY1s2aQUEBy374gScefxw/1DqJ/XXKxIlccuGFUFgIBQWs/PVX3n7lFYIBM9Cg+HXEsGFEtmsH2dmQmcnvS5bgm5FBEyAUFQbSoBzzTwCHUSXHEu12+vnxmtUKHTtChw7Yli0rd43U1VVVDh8+zMyZMxk9enS5ebI1mrokISGByMhIh9ZIPT6OVKOpFfZ1027dVBxqdjasWsW0W2+l+eHDnAvEACVZOP/3Pw7bEwlER5ckEhgEbCyv/RdeKPPfvsUbQC6QXbwVfvstdO4MQUEQHExaZibJwHFUYgL7a6a/P9aff4ZWrbhg2DD+3bKF0s/AJpMJS/fuMHRoyXv2/MUTJ04kPj6eyMhIYmNj3aI0mUZTn9BCqtGAErJLL+W548fJKfV2MNAaCAkIYOn8+fDHHzBrFjRoAH5+XDZwIFl5eRRCyVYA+AUEsHHzZlW82s+P8LPO4nhuLtlAUan2zT4+ZG/eXPL/56KiiIuLO10ku3VTzkHAuIkTyx1plpdE3a1Kk2k09RSv99pt2LChq03QuBF2z187mcBOk4mCrl1pdN55XHHFFTS65BK47DK46CJSunRhtcnEWmA9EAdsM5nw6dpVjTQ7doTwcMIiI8kymcqIaHmluE4tJ1eeSJZXKcfV07U1oVGjRqofGzVytSkajTEa4PBKrYdidzZyZIFZU/+oaVac6u5fk3Z1MgGNpu4wQgu8XkiryoCk8T4qErKsrCzZtGmTZJ1SKaS6wqcFUlFRP2o0riAxMVF77dYW7bWrqSna29QYdD9q3AkjvHa9fo1Uo9FoNBpH0EKq0Wg0Go0DaCHVaDQajcYBvF5I/fx0KK2mevj5+dGqVSt9zjiI7keNO2HEeej1zkaOLDBrNBqNxrMxQgu8fkSq0Wg0Go0jeL2QJiYmutoEjYdw+PBhXnzxRQ4X59nV1A7djxp3wggN8Hoh1WhqQmFhoatNqBfoftTUJ7SQajQajUbjAFpINRqNRqNxAC2kGo1Go9E4gNeHvyQlJdG0aVNXm6PxAPLz8zl+/DihoaH4+/u72hyPRfejxp1ITk6mWbNmDoW/eH1EtL6QNdXF39+fFi1auNoMj0f3o8adMEIDvH5qNzU11dUmaDyE1NRUlixZos8ZB9H9qHEnjDgPvV5Ic3JyXG2CxkPIzs7mv//+Izs729WmeDS6HzXuhBEa4PVCqtFoNBqNI2gh1Wg0Go3GAbSQajQajUbjAF4vpA0aNHC1CRoPITg4mP79+xMcHOxqUzwa3Y8ad8IIDfD6OFJdRk2j0Wi8F11GzQByc3NdbYLGQ8jNzWXPnj36nHEQ3Y8ad8KI89DrhfT48eOuNkHjIaSkpDB37lxSUlJcbYpHo/tR404YoQFeL6QajUaj0TiCFlKNRqPRaBxAC6lGo9FoNA7g9ULq4+P1XaCpJj4+PjRq1EifMw6i+1HjThhxHurwFx3+otFoNF6LDn/RaDQajcbFeL2QHj161NUmaDyEI0eO8MYbb3DkyBFXm+LR6H7UuBNGaIDXC2lRUZGrTdB4CEVFRWRkZOhzxkF0P2rcCSPOQ48X0hUrVmAymcrd/vnnH1ebp9FoNJp6jp+rDTCKRx55hD59+pR5r3Pnzi6yRqPRaDTeQr0R0osuuogbbrjB1WZoNBqNxsvw+Knd0mRkZFBQUFCjY0JDQ51kjaa+ERYWxqhRowgLC3O1KR6N7keNO2GEBtQbIb3zzjtp3LgxZrOZyy67jDVr1lTruNzcXNLT00s2XZFCUxGBgYF06NCBwMBAV5vi0eh+1LgTRpyHHi+kAQEBxMTEMG3aNL7++mtefPFF4uLiuOiii/jvv/+qPL5r166EhISUbFOmTKkDqzWeSHp6OsuXLyc9Pd3Vpng0uh817oQR56HHr5H269ePfv36lfx/6NCh3HDDDVgsFv73v//xww8/VHr877//TqdOnUr+r5+SNRWRmZnJX3/9Rffu3XU2LAfQ/ahxJ7Kyshxuw+OFtDw6d+7Mddddh81mo7CwEF9f3wr3DQ4O1hezRqPRaGqNx0/tVkR4eDh5eXlkZma62hSNRqPR1GPqrZDu2rULs9lMw4YNXW2KRqPRaOoxHi+kx44dO+29DRs2sGTJEq644ooqS+SYzWZnmaapZwQFBXHOOecQFBTkalM8Gt2PGnfCCA3w+DJqAwYMICgoiH79+tGiRQu2bNnCzJkz8ff3Z+XKlXTt2rXc43QZNY1Go9HoMmrA9ddfT1JSEm+88QYPPPAAn3/+OdHR0axZs6ZCES1Nfn5+HVipqQ/k5+dz9OhRfc44iO5HjTthxHno8UL6yCOPsGrVKpKTk8nPz+fQoUPMmzev2nl2k5OTnWyhpr6QlJTE+++/T1JSkqtN8Wh0P2rcCSM0wOOFVKPRaDQaV6KFVKPRaDQaB9BCqtFoDMdmsxEVFUVQUBBRUVHYbDanHKPRuANaSDWaGlBZlixvoDpiZ7PZiImJIS4ujrycHHZs3Mg9MTF89+GHsHs3HDyIr48PHDkChw/D0aN8vXBhyTE5OTnExcURExOjxVTjEXh8+Ett0eEvGs1JbDYbEyZMICEhgYiICGJjY4mOjj5tn5iYGExAc+BMoD3w3IgR9AgOhqNHISWFHatW0SA3lzCgJhF6BUAGcAxIBA4Duc2bc/uECdCpE5x1FrRvD1XEhms0NcEILdBCqoVUU4+pkUCaTIgIJqAJsPiVVxjQsSPs2QO7d/P7vHk0y8igA9Cg1PFpvr6E9OwJrVtDWBjvfvYZRwsLSQEygZzircjfn6++/14dVFgIRUXqtaCAO2+8EXN+Po1RIt2qeOtgMtHZ1xfsdYYbNQKLRW3nnQd9+0JEBJhMNf7eGg0YpAXipaSlpQkgO3fudLUpGg/h6NGj8sEHH8jRo0ddbYpYrVaxWCxiNpvFYrGI1Wotdx9ATCZTmVer1SqSliayYYPIV1/J1Nat5S2Qr0DWg6SBSOmtYUORnj1lqY+PvAXyGMh1IFEgjUHMZnOZz7VYLCWfZd9MJpNERUWJSPn9WOkx+fkiO3eKfPedyMsvi9x6q0i3biImk7IvLEzk+utF3ntPZOfOyr+3RnMKO3fuFEDS0tJq3YbXC2l8fLyrTdF4CIcOHZLx48fLoUOHnPo5VYlktYQiPV2iIyLkapAHQF4F+QJkDchxX98yQpkFsgXkW5B3QZ4EuQGkX0CAyLFjIkVFIlK1QFZln81mq7AfqzqmXFJTRX78UWT8eJGLLhLx8xMB2RMQIO+CXAvSsBI7NRoRkfj4eC2ktUULqaamVCSk1RkdVne/6ohkr549pS3I+SA3FQvfOyC/Nm4sYrGINGlSRihzQRJAfgKZAfK8n5/IggUif/8tcviwWHr2NEQgT903KipKzGazREVFldmnsn6s6JhqkZYm8tVX8oGvr+wo9d2/ARkF0iowsGbtabwCLaQOoIVUUxEVCV5NRlI1GkUWFIgkJ4ts3y63du4sg0GGF0+hTgWZC/J38fSqNG8uhadMvaaBbAT5zsdHZMwYkSlTRBYskNs7dZJwEJ86Esjq4uyRvX3kfCbIwyC/gRSC5JlMIldeKTJ7tupvjUaMEdJ6Wdhbo6ktdscbXyAEyN64kSkxMTSdOJGIHj3UTj//rDxHc3PZ8vzzPAoEiBAIBIpgBnLuuw9+/BFycyE3l5DvvuOb4r8HAkEihALNb7pJOd0U+/x9WsqWTJTnaiKQmJUFF18MrVsz8YMPWHvgAPuAvUAaYDKZsPTsyZXvvVdy/HWBgXxS7ESESIkzUWxsbJnvHB0djdVqZeLEicTHxxMZGUlsbCzDhg07rX+io6Pd3mknNjaWmJgYdptMTBfhHZOJViJ8d889nJ2QAPfcA/fdB4MGwe23w3XXga5Eo3EE43Tds7CPSBMTE11tisZVFBWJ7N0r8s03yoll5EhZ16CB7APJP9XhBiTLbJZN3bpJltlc8l4+yAmQZJBDILtBtoFsNJlEzj1XpH9/kQED5HsfH7GBLAT5GOQDkCkgz/j5icyaJbJ4scgvv8gNZ50l7UCCKxlF1vUI0miysrJk06ZNkpWV5bTPqPR7Hz4s8u676rcBkcaNRe66S2TFCpHCQqfZpHFPEhMT9dRubbELqSOdp3E/Kl2HPHJECdajj4r07SvSqNFJoWzcWKRvX5nn4yOTQEaDDAO5BOWd2jMgQGT3bpFDh9S04IkTIvn51XbAMcpRp/R+7iaQHsn27SKxsSIdO6rzoH17kWefFdm2rcxu1V0H13geRmiB1wvpwYMHXW2KxiBOFaFWILeB7L78cpGIiJOi2bGjCqF4+WWRb79Vo9JqeKZmZGTI33//LRkZGRV+ZmXC58mjSCMprx9dTlGRyB9/iIweLRISos6T888XeecdWfrxxzqcph5z8OBBLaS1RTsb1T/O6dlTLgJ5CWRdqSnZeLNZ5IEHRBYuFDlwoNI2KhM8R71N67tAVpe6CiOqNdnZIosWiVxzjYivr+SZTGIFGQriX8lsgsYz0c5GGk1mJnz/PSxezC9xcTRBpZj7EXgN+Ak4AWS/+261mqvM8ebw4cMVHlMdBxxPcNTRAGYz3Hij2o4e5Zm2bRleUMDXqHNrITBXhC3btrnYUI27oIVU43mcOAHffgtffAHffQfZ2XDOOSxo2ZK5R46wBigq3tVkMmGJjKxR81rwNCW0aMFP3brxelwc3UW4HRgJPALsMJnglVdg5Eho08bFhmpcic7+rPEM0tNhwQIYNgyaN4dbboG9eyE2FnbsgHXraPXee/wLSHHe1YrCPTSamhAbG4uIsNlkYhzQDrgSCDz3XHX+hYfDkCHq/MzKcrG1Glfg9UIaEBDgahM0xZxaomvpvHkwb56K82vRAkaMUGW3Jk2CXbtg9Wp46ilVGYST07IWiwWz2YzFYsFms5UbD1kbAgMDiYiIIDAw0JD2vBVP68dTz6vuUVGMttkI/+MPSEyEGTPUEsOIEdCqlYpTXbFCJeTXuD1GaICu/qKrv7gF9kQIocBQ4AbgCiAAVIWPG2+EmBho186VZmo0FbNzp3rw++QTVXe1TRu46SYYPhz69ClToUZXp3EfdBk1B7B3XkpKCqGhoa42x7tJTmb82Wdz/oEDDAR8gb+AxcDWrl35acsW19pXTGFhITk5OZjNZq8v8O0I9b4fReCff+Czz2DRIjVqPfNMtRwxfDi2hISyZeuKX61WqxZTF3D8+HHCwsIcElKvn9o9duyYq03wTo4dg1mz4IoroGVLXjhwgCDgMeAM4GLgbeCP3btdaWUZjh49ymuvvcbRo0ddbYpHU+/70WRSsyjTpsGBAyql5IAB8P770LMnlltv5VmgY/EYxi6mEydOdK3dXooRGuD1QqqpQ44cgQ8+gIEDVRHo++9X60jTpzOwa1cGmEy8h8ovC8pZKLKGHrcajVvh66tEdNYsNTJdupQ1+fk8DewE1gDPABEixMfHu9ZWTa3RQqpxLocPw7vvwmWXqTWjhx5SCd/fe0/dWH7+GcaM4aEXXyx5MgftcauphwQEwDXXMKVHD1oCNwE7gP8B24BNIvD887B+fUkRA41noIVUYwilPW4Hde3KhrvvVtVK2raFxx5TQe4zZyrx/OknGD1ahbEU42yPW43GXYiNjSULWGwycQvQAuVg59evn3roPOcc6NwZxo6FlStVdSCNW6MTMmgcxmazMS4mhhhgBnDBtm3kbdtGYq9etProIxg6FMLCqmxHJ0LQeAOnZs+KiIzkzthY2g8bBvn5KnTGalXev6+9pmZyhg5V22WXqYdSjVvh9V67x48fp0mTJq42x/MQgc2bwWol/uWXiczJIQv4AbAC3wHto6JYv369S800kqKiIvLz8/H398fHR0/m1Bbdj9WksBD+/htsNliyRMVOBwcrB72hQ+Hqq8vM6mhqR2pqKqGhoTr8pTboONJaIAJr1qgL22qF7duhUSM+y8zki6IifgBK53Uxm81kZ2e7ylqNpv4gAlu3KkFdskSF1wD07cumM8/kuX//5ce9e4kozg2tZ3aqjxFa4PWPgykpKa42wb0pLITff1frnO3bw3nnKQ/Eiy5S+W6PHWNKjx58aTKVEdH66HGbnJzM/PnzSU5OdrUpHo3ux1pgMkG3bvD002qUmpgIs2dzqKCAjvPn81VCAnG5udyxcSNvx8Tw5aJFrrbYYzBCA7xeSPPy8lxtgvuRnQ3ffAP33qvWZy65RAWWDx2qvGyLL2KuugoCA0tykdZ3j9u8vDx27typzxkH0f1oAC1awJ13cmVODs2Bq4DlKE/gFcDlt96qMirNmwf1NV7XIIw4D71eSDXKWeiy7t0Z7e/PLyEhFDRpAtdeq5webrsN/vpLBZa/846KifMr66OmPW41GteQkJBANvA9MAYIB84FpoMq5nD77Sr/73nnwfjx8O+/2gvYCWivXW8mPp64l16ixbx5/Fz81sr0dJ4FLp82jSsefrhMftDK0B63Gk3dExERQVxcHHZXFwHWmUwU9OjBs6tXqyQoP/6oyg1OmwYTJigHpcGD1YzSFVdA06au/RL1AD0i9SYKCuCPP2DcOIiMhC5d6Dx/PknAPUBr4ELgVZOJcR99VG0R1Wg0rqHKZZWWLdWo9LPPVFrOP/5Q1Wk2bYJbb1VTxP37w0svwbp1erRaS7xeSBs1auRqE5zLoUPw0UeqekqzZipJwiefqNclS2gbEMAwYA5gX0kRna6sXBo3bsyVV16pvbwdRPejcdRoWcXPDy68ECZPhv/+U8s1M2eqqd+pU6F3b2jblj2XX84T7dvTymwmKioKm81W91+sDjFCA3T4S30Lf8nPV9lQvv9ebRs2qJHl+efDlVeqrXdvlaYPiIqKKjM1BOqp1mKx1KsYUI1GUwl5efD33yS89RZ5X39ND6AQ+BdYBlwyaRKXPPUU+Pu71k4noMNfDMDT4xxtNhuDunXjfn9/ljVpQn6TJsrLdvZssFhgwQI1pbNyJbzwgqqLWCoI3ls8bo0gOzubjRs3evw542p0P7ohAQFw6aXcuHs3FpOJ9sD9wH7gQeCS559X2cmGDoXp02HbtnqTD9iI89DrhTQtLc3VJtSc5GSwWtl55ZV0jYlh2datvFdQQMO0NCZlZfHL1KkqROWTT5QLfCXOBNrjtvqkpqby5Zdfkpqa6mpTPBrdj+5LQkICIsI+4EPgZlQu4P4BAfDMM3DiBDz5JHTtCu3awV13wfz5sH+/aw13ACM0QHvtegIZGcpJ4Jdf1FZcHcIvIICfgfGoGLIU1IhyyYIFrB83rtrNa49bjUYDp3sBA4jJRGbXrvC//6ktM1MlaVm2TG1z5qgdO3RQs2GXXKJ8MM4802scFrWQuiMHDqjsJfZt3TqVYahtW7j8cnj0UbjsMrpERpJzyqHaUUij0dSW2NhYYmJiSpZ4yl3qCQ4+6W8Baunozz/ht9+UwH7yiZr2bdsWLr6Y/xo1YsKKFfy0dy9n1dMUhvViajc3N5ennnqKNm3aEBQUxPnnn8+yZctcbVaV2Gw2elssXBgYyNS2bTnQvz+Eh6vt5pth6VIVpvLOO5CQoKZP5s6FUaOgXTsiIiJK1jbt1MfUfBqNpm6o1VJP8+YwbBi89ZZ66E9JUZnRRowgZc0aes6cyVcJCRzMzeWVjRvZFBPD3888U78yLkk94JZbbhE/Pz958sknZcaMGdK3b1/x8/OTP/74o8Jj0tLSBJBdu3bVnaHZ2SL//isyY4bsvOIK+QckSz27STbIHyDx110n8uWXIomJVTZntVoFEJPJVObVZrM5/at4I8eOHZMPP/xQjh075mpTPBrdj96DxWKRhiCXgzwLsgTkSPE9T0CkQweRG28UeeklkaVLRfbtE/n/9u41JopzDwP4s4gwEG7ScOxytBiRNYK6iU0gNkY9XhepWKw36AcjqbZJG45plERtUmJTDVA1x0StmFRj69KELvJho6TGJjY1qZe2WzSNergdNcAqoHuxy0V8z4dxUbqCyLAMwzy/ZLL4DrP5OzvwMDPv+86TJ/2+n81mE7NnzxaSJInZs2cLm82muMb6+noBQLhcriG/h+aD9NKlSwKAKC0t7W3z+XwiOTlZzJ07t9/t/EGalpY2pA9jwA+0o0OImhohvvtOiM8+kw+UtDQhxo2TD55x48QtSRInAPFvQGQAIuxpEJrN5leuw2w2C0mShNlsZogS0aghSZKAPOFSn8UUFib/fvzkEyHmzxciNvZZuE6YIMSCBUIUFAjx1VdC/PijEHfuCFtFxQtPHJSEqc1mE2lpaYqDVPPjSAsLC7F//360t7f3GQO0d+9e7Ny5E7dv38bkyZMDtvOPHfKz2WyDvm5fVV6OrXl5SAQwBcDUp6/ZM2fiH14vcPv2sxlCJk6Ue7ilpgKzZgFz5gCzZiEiPh4dHX+/w8lHjxHR2DHocepCyLeu/vij71JfL/cPAeAzGHBLCNwCUAt5aE4TgIiUFJT/9JM8S9MrPN+2srIS7777bu+/lYwj1Xxno99//x0mkylgB6SnpwMAHA7HC4PUb9XEiTA4nbi4dSssDx5gfE8Pxv/1F+ByyYvbLb/evy8PKWlpwTsuF9557j1aATQAcNy5g2UffAAkJ8vBOWNGv0NPXtQ7jvc3R7fm5maUlZVhy5YtMBqNapejWdyP+jGozkuA3Lv3jTfkZeXKZ+1dXUBjI3DrFopycjDl8WOYAOQC+CeA8YD8XGSjUZ4sIjFRDtS4OGDCBHnxfx0XB4SHy2Nmx4/Hhe3bkQkAEyfirNOp6P+p+SBtbm5+4Q+jv62pqWnA7UsAmAD5r6H335cbIyOBmBggNlZeYmLkD2jOHOD115H/6ae4092NFgD/A+B5+l5SZyd8xcWDqnvQBxgRkUb5Oy/t3r0bN2/exPSnvXYHPU49LAwwmQCTCdWpqX1OPgyQx7j+KyUF5V9+KY92uHsXaG0FHjyQx9vX1clfP3ggnxA9N5fwf56+3oL89BwlNB+kPp8P4eHhAe2SJPWuH0gOgPsAps2Ygerz5xEeHY3wqKgBt/n11CnFZ5OKDzAiIg0YrnHqfz/5gMEApxBYV1wsz7j0MkLIl4m7u4GuLix86y38988/kaC4sjEw/CUiIgKdnZ0B7f77jxEREQNu3wY5SLd/8QVijMaXhigwfNPqrV69Gg6HAz6fDw6HgyFKRNQPxbOwGQzyxP0REUBsLAo+/xxNAFqGoTbNB6nRaERzc3NAu78tMTFxwO2Tk5NfeUo8TqtHRDTyhvPkw/97PDk5WXFdmu+1u337dhw4cCCg1+6ePXuwa9eul/babWtrQ3x8/EiWTBr1+PFjuN1uxMTEIDRU83dFVMP9SKNJe3s7XnvtNX0//WXNmjXo6elBWVlZb1tnZyeOHz+OjIyMAXvsAuAPMg1aaGgo4uPjecwoxP1Io8lwHIeaD9KMjAysXbsWO3bsQGFhIcrKyrBo0SI0NjaipKSk3+3891XvjaVpqiionE4nioqK4FTYVV7vuB9pNPFnwIv62gyW5oMUAE6ePImtW7fim2++QUFBAbq7u2G32zF//vx+t/HvNI/H0+/3ED3P7XbDYDDA7XarXYqmcT/SaOLPACVBOiaurUiShNLSUpSWlqpdChER6cyYOCMlIiJSy5g4Ix0Kf2dlr9fLS0w0KF6vFx0dHTxmFOJ+pNHE6/UCAJQMYNH88Jehqq+vH5bxQ0REpH11dXWYOnXqkLbVbZA+efIETU1NiI6ODng4NhER6YMQAh6PB4mJiQh5hafHPE+3QUpERDQc2NmIiIhIAQYpERGRAgxSIiIiBRikRERECuguSBsaGvDxxx/DZDIhMjISkZGRSE1NxUcffYSamhq1y6NR5MSJEzAYDDAYDPj5558D1gshMHnyZBgMBrz99tsqVKgd/n159erVPu0ulwvp6emQJAnV1dUqVUd6NJxZoKsJGex2O9avX4/Q0FC89957MJvNCAkJwY0bN1BZWYkjR46goaEBSUlJapdKo4gkSbBarZg3b16f9gsXLuDu3bsIDw9XqTJtc7vdWLZsGWpqanD69GlYLBa1SyKdGO4s0E2Q1tXVYcOGDUhKSsL58+dhNBr7rC8uLsbhw4eHPI6Ixq4VK1agoqICBw8e7PPIJavVijfffBOtra0qVqdNHo8Hy5cvh8PhQGVlJTIzM9UuiXQiGFmgm9QoKSnBo0ePcPz48YAdB8jPpCsoKHjp80tJf3Jzc9HW1oZz5871tnV1deH7779HXl6eipVpk9frhcViwW+//QabzYasrCy1SyIdCUYW6CZI7XY7pk2bhoyMDLVLIY2ZMmUK5s6di/Ly8t62s2fPwuVyYcOGDSpWpj2PHj1CZmYmrly5goqKCt5bphEXjCzQRZC63W40NTVh5syZAesePnyI1tbW3sXn86lQIY12eXl5qKqq6j0+Tp06hQULFiAxMVHlyrRl48aNuHTpEioqKpCdna12OaQzwcoC3QQpAERFRQWsW7hwIRISEnqXQ4cOjXR5pAHr1q2Dz+eD3W6Hx+OB3W7nZd0hcDqdkCSJt1BIFcHKAl0EaXR0NIBnj8t53tGjR3Hu3Dl8++23I10WaUhCQgKWLFkCq9WKyspK9PT0YM2aNWqXpTlHjx5FWFgYLBYLbt68qXY5pDPBygJd9NqNjY2F0WjE9evXA9b5r5M3NjaOcFWkNXl5edi8eTNaWlqQmZmJuLg4tUvSnNTUVJw5cwaLFy/G0qVLcfHiRZ6d0ogJVhbo4owUALKyslBbW4vLly+rXQppVE5ODkJCQvDLL7/wsq4C6enpqKqqwr1797B06VLcv39f7ZJIR4KRBboJ0sLCQkRGRiI/Px9OpzNgPZ8mRy8TFRWFI0eOoKioCCtXrlS7HE1bvHgxysvLUVtbC4vF0nvviijYgpEFuri0CwApKSmwWq3Izc3F9OnTe2ezEEKgoaEBVqsVISEhmDRpktql0ii2ceNGtUsYM3JycnDs2DHk5+cjOzsb1dXVkCRJ7bJojAtGFugmSAFg1apVuHbtGvbt24cffvgBX3/9NQwGA5KSkpCVlYUPP/wQZrNZ7TKJdGPTpk1ob2/Htm3bsHbtWpw+fbrP7FFEwTDcWWAQvKZJREQ0ZLq5R0pERBQMDFIiIiIFGKREREQKMEiJiIgUYJASEREpwCAlIiJSgEFKRESkAIOUiIhIAQYpERGRAgxSIiIiBRikRERECjBIiYiIFPg/G5nwtVuY9VkAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -46,9 +46,9 @@ "source": [ "# load model in pth format\n", "checkfile = './ext/checkpoint/latest_nnsk_b3.600_c3.599_w0.300.pth'\n", - "checkfile = './spds/checkpoint/latest_nnsk_b3.600_c3.600_w0.300.pth'\n", - "checkfile = './long/checkpoint/latest_nnsk_b3.600_c3.600_w0.300.pth'\n", - "\n", + "#checkfile = './spds/checkpoint/latest_nnsk_b3.600_c3.600_w0.300.pth'\n", + "#checkfile = './long/checkpoint/latest_nnsk_b3.600_c3.600_w0.300.pth'\n", + "checkfile = '../reference/4.longtrain/checkpoint/best_nnsk_b3.600_c3.600_w0.300.pth'\n", "f = torch.load(checkfile)\n", "# define nnskapi for tb model.\n", "nnskapi = NNSKHost(checkpoint=checkfile)\n", @@ -59,7 +59,7 @@ "\n", "# set the input parameters for band structure calculation.\n", "# structure: the path of the structure file.\n", - "run_opt={\"structure\":\"./data/struct.vasp\",\n", + "run_opt={\"structure\":\"../data/struct.vasp\",\n", " \"results_path\":\"./\"}\n", "# jdata: the input parameters for band structure calculation.\n", "\n", @@ -82,7 +82,7 @@ "\n", "# load the DFT band data.\n", "#band = np.loadtxt('../data/soc/BANDS_1.dat')\n", - "band = np.load(\"./data/kpath.0/eigs.npy\")[0]\n", + "band = np.load(\"../data/kpath.0/eigs.npy\")[0]\n", "# plot figures.\n", "plt.figure(figsize=(5,5),dpi=100)\n", "# in DFT band data, the first column is column index, the second is the kpoints, \n", @@ -107,31 +107,22 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "30" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [] + "outputs": [], + "source": [ + "# eig = np.load('./data/kpath.0/eigs.npy')\n", + "# kps = np.load('./data/kpath.0/kpoints.npy')\n", + "# np.save('./data/kpath_sparse.0/eigs.npy',eig[:,::6])\n", + "# np.save('./data/kpath_sparse.0/kpoints.npy',kps[::6])" + ] }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 7, "metadata": {}, "outputs": [], - "source": [ - "eig = np.load('./data/kpath.0/eigs.npy')\n", - "kps = np.load('./data/kpath.0/kpoints.npy')" - ] + "source": [] }, { "cell_type": "code", @@ -139,8 +130,6 @@ "metadata": {}, "outputs": [], "source": [ - "np.save('./data/kpath_sparse.0/eigs.npy',eig[:,::6])\n", - "np.save('./data/kpath_sparse.0/kpoints.npy',kps[::6])\n", "\n" ] }, @@ -168,7 +157,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.9.7" }, "orig_nbformat": 4, "vscode": { From 4e8b9523dec592a5c546d10929c0ec2fc7ce20e4 Mon Sep 17 00:00:00 2001 From: qqgu Date: Wed, 11 Oct 2023 01:43:46 +0800 Subject: [PATCH 59/63] test: update test_integralFunc.py add test for NRL TB --- dptb/tests/test_integralFunc.py | 68 ++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/dptb/tests/test_integralFunc.py b/dptb/tests/test_integralFunc.py index d5318ea4..88733f41 100644 --- a/dptb/tests/test_integralFunc.py +++ b/dptb/tests/test_integralFunc.py @@ -74,4 +74,70 @@ def test_skhops_powerlaw(self): assert len(batch_hoppings[kf]) == len(batch_hoppings_true[kf]) assert len(batch_hoppings[kf]) == len(self.batch_bonds[kf]) for i in range(len(batch_hoppings[kf])): - assert torch.allclose(batch_hoppings[kf][i], batch_hoppings_true[kf][i]) \ No newline at end of file + assert torch.allclose(batch_hoppings[kf][i], batch_hoppings_true[kf][i]) + + def test_skhops_NRL(self): + coeffdict = {'N-N-2s-2s-0': torch.tensor([-0.0004987070, -0.0002041683, 0.0001014816, 0.0006219005]), + 'N-N-2s-2p-0': torch.tensor([-5.9940444771e-04, 1.9214327040e-04, 6.0049378590e-06,5.0979648950e-04]), + 'N-N-2p-2p-0': torch.tensor([ 0.0001927754, 0.0009208557, -0.0001234336, -0.0003449220]), + 'N-N-2p-2p-1': torch.tensor([-2.1193656721e-04, 4.3876632844e-05, 2.7689227136e-04,8.9270688477e-05]), + 'N-B-2s-2s-0': torch.tensor([-0.0004778731, 0.0005070638, 0.0005157407, 0.0002885270]), + 'N-B-2p-2s-0': torch.tensor([-9.8684613477e-05, 2.5365813053e-04, -7.5873947935e-04,-3.9372156607e-04]), + 'B-B-2s-2s-0': torch.tensor([ 3.7772103678e-04, 1.5700524091e-04, -6.5438426100e-04,-9.9891236459e-05])} + + skhops = SKintHops(proj_atom_anglr_m=self.proj_atom_anglr_m, mode='hopping', functype='NRL') + batch_hoppings = skhops.get_skhops(batch_bonds=self.batch_bonds, coeff_paras=coeffdict, rcut=3.0, w=0.3) + + with pytest.raises(AssertionError): + skhops.get_skoverlaps(batch_bonds=self.batch_bonds, coeff_paras=coeffdict, rcut=3.0, w=0.3) + + + batch_hoppings_true = {0: [torch.tensor([ 0.0007267155, -0.0007183540]), + torch.tensor([ 0.0007267154, -0.0007183540]), + torch.tensor([ 0.0007267154, -0.0007183540])]} + + assert isinstance(batch_hoppings, dict) + assert len(batch_hoppings) == len(batch_hoppings_true) + assert len(batch_hoppings) == len(self.batch_bonds) + + for kf in batch_hoppings.keys(): + assert len(batch_hoppings[kf]) == len(batch_hoppings_true[kf]) + assert len(batch_hoppings[kf]) == len(self.batch_bonds[kf]) + for i in range(len(batch_hoppings[kf])): + assert torch.allclose(batch_hoppings[kf][i], batch_hoppings_true[kf][i]) + + skhops_overlap = SKintHops(proj_atom_anglr_m=self.proj_atom_anglr_m, mode='hopping', functype='NRL',overlap=True) + batch_hoppings_2 = skhops_overlap.get_skhops(batch_bonds=self.batch_bonds, coeff_paras=coeffdict, rcut=3.0, w=0.3) + + assert isinstance(batch_hoppings_2, dict) + assert len(batch_hoppings_2) == len(batch_hoppings_true) + assert len(batch_hoppings_2) == len(self.batch_bonds) + + for kf in batch_hoppings_2.keys(): + assert len(batch_hoppings_2[kf]) == len(batch_hoppings_true[kf]) + assert len(batch_hoppings_2[kf]) == len(self.batch_bonds[kf]) + for i in range(len(batch_hoppings_2[kf])): + assert torch.allclose(batch_hoppings_2[kf][i], batch_hoppings_true[kf][i]) + + ovelap_coeff = {'N-N-2s-2s-0': torch.tensor([ 6.8039429607e-04, -2.9353532591e-04, 9.1240115580e-05,5.6466460228e-04]), + 'N-N-2s-2p-0': torch.tensor([ 0.0001735075, -0.0001214135, 0.0007363217, -0.0003242571]), + 'N-N-2p-2p-0': torch.tensor([ 6.4402131829e-04, -9.6975814085e-04, 5.1726761740e-05,-4.8777154007e-05]), + 'N-N-2p-2p-1': torch.tensor([-8.8375571067e-05, -6.9440639345e-04, 1.8161005573e-04,2.6911683381e-04]), + 'N-B-2s-2s-0': torch.tensor([-0.0002793419, 0.0005194946, -0.0003238156, -0.0003712704]), + 'N-B-2p-2s-0': torch.tensor([ 0.0001708491, 0.0004076761, 0.0005067488, -0.0004027870]), + 'B-B-2s-2s-0': torch.tensor([-3.0960296863e-04, -2.4765444687e-04, 1.2461096333e-07,-2.1604154608e-04])} + + overlap_true = {0: [torch.tensor([-0.0001616334, 0.0014338114]), + torch.tensor([-0.0001616333, 0.0014338112]), + torch.tensor([-0.0001616333, 0.0014338113])]} + + overlap = skhops_overlap.get_skoverlaps(batch_bonds=self.batch_bonds, coeff_paras=ovelap_coeff, rcut=3.0, w=0.3) + assert isinstance(overlap, dict) + assert len(overlap) == len(overlap_true) + assert len(overlap) == len(self.batch_bonds) + + for kf in overlap.keys(): + assert len(overlap[kf]) == len(overlap_true[kf]) + assert len(overlap[kf]) == len(self.batch_bonds[kf]) + for i in range(len(overlap[kf])): + assert torch.allclose(overlap[kf][i], overlap_true[kf][i]) \ No newline at end of file From 759e83fb112de771eb0a3cc847fb39dfacd6cc38 Mon Sep 17 00:00:00 2001 From: qqgu Date: Wed, 11 Oct 2023 17:21:20 +0800 Subject: [PATCH 60/63] test: update test_onsiteFunc.py add test onsite mode uniform and none --- dptb/tests/test_onsiteFunc.py | 74 ++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/dptb/tests/test_onsiteFunc.py b/dptb/tests/test_onsiteFunc.py index 3d9553a1..32cb3763 100644 --- a/dptb/tests/test_onsiteFunc.py +++ b/dptb/tests/test_onsiteFunc.py @@ -1,8 +1,9 @@ import pytest import torch as th +import torch import numpy as np from dptb.nnsktb.onsiteFunc import loadOnsite, onsiteFunc - +from dptb.nnsktb.onsiteFunc import orbitalEs class TestOnsiteUniform: batch_bonds_onsite= {0: np.array([[0, 7, 0, 7, 0, 0, 0, 0], @@ -78,4 +79,73 @@ def test_onsiteFunc_with_NN(self): onsitesEdict = onsiteFunc(self.batch_bonds_onsite, onsitedb, nn_onsiteE=nn_onsiteE) assert (th.abs(onsitesEdict[0][0] - th.tensor([-0.6582242 , -0.17576692, -0.12046692, -0.11136693])) < 1e-6).all() - assert (th.abs(onsitesEdict[0][1] - th.tensor([-0.27451998, 0.08331999, -0.13108 , -0.17748001])) < 1e-6).all() \ No newline at end of file + assert (th.abs(onsitesEdict[0][1] - th.tensor([-0.27451998, 0.08331999, -0.13108 , -0.17748001])) < 1e-6).all() + + + +class TestorbitalEs: + envtype = ['N','B'] + bondtype = ['N','B'] + proj_atom_anglr_m={'B': ['2s'], 'N': ['2s', '2p']} + batch_bond_onsites = {0: torch.tensor([[0., 7., 0., 7., 0., 0., 0., 0.], + [0., 5., 1., 5., 1., 0., 0., 0.]])} + + def test_onsite_none(self): + nn_onsiteE, onsite_coeffdict = None, None + onsitfunc = orbitalEs(proj_atom_anglr_m=self.proj_atom_anglr_m,atomtype=None, functype='none') + + batch_onsite_true = {0: [torch.tensor([-0.6769242287, -0.2659669220]), torch.tensor([-0.3448199928])]} + + with torch.no_grad(): + batch_onsite = onsitfunc.get_onsiteEs(batch_bonds_onsite=self.batch_bond_onsites, nn_onsite_paras=nn_onsiteE) + + assert isinstance(batch_onsite, dict) + assert len(batch_onsite) == len(batch_onsite_true) + assert len(batch_onsite) == len(self.batch_bond_onsites) + + for kf in batch_onsite.keys(): + assert len(batch_onsite[kf]) == len(batch_onsite_true[kf]) + assert len(batch_onsite[kf]) == len(self.batch_bond_onsites[kf]) + for i in range(len(batch_onsite[kf])): + assert torch.allclose(batch_onsite[kf][i], batch_onsite_true[kf][i]) + + + assert isinstance(onsitfunc.onsite_db, dict) + assert len(onsitfunc.onsite_db) == 2 + assert len(onsitfunc.onsite_db['N']) == 2 + assert len(onsitfunc.onsite_db['B']) == 1 + assert th.allclose(onsitfunc.onsite_db['N'], batch_onsite_true[0][0]) + assert th.allclose(onsitfunc.onsite_db['B'], batch_onsite_true[0][1]) + + + nn_onsiteE2 = {'N': torch.tensor([0.0019521093, 0.0031471925]), 'B': torch.tensor([0.0053026341])} + + with torch.no_grad(): + batch_onsite2 = onsitfunc.get_onsiteEs(batch_bonds_onsite=self.batch_bond_onsites, nn_onsite_paras=nn_onsiteE2) + + for kf in batch_onsite2.keys(): + assert len(batch_onsite2[kf]) == len(batch_onsite_true[kf]) + assert len(batch_onsite[kf]) == len(self.batch_bond_onsites[kf]) + for i in range(len(batch_onsite2[kf])): + assert torch.allclose(batch_onsite2[kf][i], batch_onsite_true[kf][i]) + + def test_onsite_uniform(self): + nn_onsiteE = {'N': torch.tensor([0.0019521093, 0.0031471925]), 'B': torch.tensor([0.0053026341])} + onsitfunc = orbitalEs(proj_atom_anglr_m=self.proj_atom_anglr_m,atomtype=None, functype='uniform') + + batch_onsite_true = {0: [torch.tensor([-0.6749721169, -0.2628197372]), torch.tensor([-0.3395173550])]} + with torch.no_grad(): + batch_onsite = onsitfunc.get_onsiteEs(batch_bonds_onsite=self.batch_bond_onsites, nn_onsite_paras=nn_onsiteE) + + assert isinstance(batch_onsite, dict) + assert len(batch_onsite) == len(batch_onsite_true) + assert len(batch_onsite) == len(self.batch_bond_onsites) + + for kf in batch_onsite.keys(): + assert len(batch_onsite[kf]) == len(batch_onsite_true[kf]) + assert len(batch_onsite[kf]) == len(self.batch_bond_onsites[kf]) + for i in range(len(batch_onsite[kf])): + assert torch.allclose(batch_onsite[kf][i], batch_onsite_true[kf][i]) + +# def test_onsite_nrl(self): + \ No newline at end of file From 8d733a80d6871c0f4e101b4e221c4999469eb5ae Mon Sep 17 00:00:00 2001 From: qqgu Date: Thu, 12 Oct 2023 00:03:58 +0800 Subject: [PATCH 61/63] test: update test_integralFunc.py add test for onsite for strain mode --- dptb/tests/test_integralFunc.py | 90 ++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/dptb/tests/test_integralFunc.py b/dptb/tests/test_integralFunc.py index 88733f41..383ed769 100644 --- a/dptb/tests/test_integralFunc.py +++ b/dptb/tests/test_integralFunc.py @@ -140,4 +140,92 @@ def test_skhops_NRL(self): assert len(overlap[kf]) == len(overlap_true[kf]) assert len(overlap[kf]) == len(self.batch_bonds[kf]) for i in range(len(overlap[kf])): - assert torch.allclose(overlap[kf][i], overlap_true[kf][i]) \ No newline at end of file + assert torch.allclose(overlap[kf][i], overlap_true[kf][i]) + + def test_strain_func(self): + batch_onsite_envs = {0: torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + -1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + 5.0252534578e-08, -1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + -8.6602538824e-01, 5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + 8.6602538824e-01, 5.0000000000e-01, 0.0000000000e+00]])} + onsite_coeffdict = {'N-N-2s-2s-0': torch.tensor([ 0.0025671565, -0.0027151953, -0.0072337165, -0.0036522869]), + 'N-N-2s-2p-0': torch.tensor([-0.0026088906, 0.0074979444, -0.0018805307, 0.0049024108]), + 'N-N-2p-2p-0': torch.tensor([-0.0021992344, 0.0005415757, 0.0074515659, 0.0005947181]), + 'N-N-2p-2p-1': torch.tensor([ 0.0006261438, 0.0040115905, 0.0030314110, -0.0021249305]), + 'N-B-2s-2s-0': torch.tensor([ 0.0014238179, -0.0051248297, -0.0042115971, 0.0004388580]), + 'N-B-2s-2p-0': torch.tensor([-8.0363824964e-05, -2.5551870931e-03, 4.3248436414e-03,-3.4857757855e-03]), + 'N-B-2p-2p-0': torch.tensor([0.0041363067, 0.0031877954, 0.0045313733, 0.0014461600]), + 'N-B-2p-2p-1': torch.tensor([-0.0005239337, 0.0010525688, 0.0015451497, -0.0023277309]), + 'B-N-2s-2s-0': torch.tensor([-0.0049433187, 0.0042366427, -0.0033636224, -0.0009209875]), + 'B-B-2s-2s-0': torch.tensor([-1.0215900838e-03, -2.8351407964e-03, -2.7579604648e-05,2.8069603723e-03])} + + skformula='varTang96' + onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=self.proj_atom_anglr_m, atomtype=['N','B']) + with torch.no_grad(): + batch_onsiteVs =onsitestrain_fun.get_skhops(batch_bonds=batch_onsite_envs, coeff_paras=onsite_coeffdict) + + batch_onsiteVs_true = {0: [torch.tensor([ 1.4151573414e-03, -7.9941251897e-05, 4.1127605364e-03, -5.2292115288e-04]), + torch.tensor([ 1.4151573414e-03, -7.9941251897e-05, 4.1127605364e-03,-5.2292115288e-04]), + torch.tensor([ 1.4151573414e-03, -7.9941251897e-05, 4.1127605364e-03,-5.2292115288e-04]), + torch.tensor([-0.0049190260]), + torch.tensor([-0.0049190260]), + torch.tensor([-0.0049190260])]} + + assert isinstance(batch_onsiteVs, dict) + assert len(batch_onsiteVs) == len(batch_onsiteVs_true) + + for kf in batch_onsiteVs.keys(): + assert len(batch_onsiteVs[kf]) == len(batch_onsiteVs_true[kf]) + assert len(batch_onsiteVs[kf]) == len(batch_onsite_envs[kf]) + for i in range(len(batch_onsiteVs[kf])): + assert torch.allclose(batch_onsiteVs[kf][i], batch_onsiteVs_true[kf][i]) + + onsite_coeffdict2 = {'N-N-2s-2s-0': torch.tensor([ 0.0001323542, -0.0032066212]), + 'N-N-2s-2p-0': torch.tensor([-0.0028324928, -0.0036035071]), + 'N-N-2p-2p-0': torch.tensor([0.0047816746, 0.0008005045]), + 'N-N-2p-2p-1': torch.tensor([-0.0028289773, -0.0045819557]), + 'N-B-2s-2s-0': torch.tensor([0.0018732958, 0.0017035947]), + 'N-B-2s-2p-0': torch.tensor([ 0.0033274870, -0.0047116517]), + 'N-B-2p-2p-0': torch.tensor([ 0.0029182180, -0.0006305461]), + 'N-B-2p-2p-1': torch.tensor([0.0076054428, 0.0004497740]), + 'B-N-2s-2s-0': torch.tensor([-0.0049679796, -0.0019069859]), + 'B-B-2s-2s-0': torch.tensor([-0.0006824296, -0.0017509166])} + + skformula='powerlaw' + onsitestrain_fun = SKintHops(mode='onsite', functype=skformula,proj_atom_anglr_m=self.proj_atom_anglr_m, atomtype=['N','B']) + with torch.no_grad(): + batch_onsiteVs2 =onsitestrain_fun.get_skhops(batch_bonds=batch_onsite_envs, coeff_paras=onsite_coeffdict2) + batch_onsiteVs_true2 = {0: [torch.tensor([0.0021948295, 0.0039004742, 0.0034185229, 0.0089090792]), + torch.tensor([0.0021948298, 0.0039004746, 0.0034185234, 0.0089090802]), + torch.tensor([0.0021948298, 0.0039004746, 0.0034185234, 0.0089090802]), + torch.tensor([-0.0058208751]), + torch.tensor([-0.0058208751]), + torch.tensor([-0.0058208746])]} + + assert isinstance(batch_onsiteVs2, dict) + assert len(batch_onsiteVs2) == len(batch_onsiteVs_true2) + + for kf in batch_onsiteVs2.keys(): + assert len(batch_onsiteVs2[kf]) == len(batch_onsiteVs_true2[kf]) + assert len(batch_onsiteVs2[kf]) == len(batch_onsiteVs_true2[kf]) + for i in range(len(batch_onsiteVs2[kf])): + assert torch.allclose(batch_onsiteVs2[kf][i], batch_onsiteVs_true2[kf][i]) \ No newline at end of file From e2fd0d48bf873dbb472d5b20ba4735fdd732b9ed Mon Sep 17 00:00:00 2001 From: qqgu Date: Thu, 12 Oct 2023 00:28:10 +0800 Subject: [PATCH 62/63] test: update test_onsiteFunc.py add test nrl --- dptb/tests/test_onsiteFunc.py | 47 +++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/dptb/tests/test_onsiteFunc.py b/dptb/tests/test_onsiteFunc.py index 32cb3763..2954a6ee 100644 --- a/dptb/tests/test_onsiteFunc.py +++ b/dptb/tests/test_onsiteFunc.py @@ -147,5 +147,48 @@ def test_onsite_uniform(self): for i in range(len(batch_onsite[kf])): assert torch.allclose(batch_onsite[kf][i], batch_onsite_true[kf][i]) -# def test_onsite_nrl(self): - \ No newline at end of file + def test_onsite_nrl(self): + batch_onsite_envs = {0: torch.tensor([[ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, -1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + -8.6602538824e-01, -5.0000000000e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + -5.0252534578e-08, 1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 7.0000000000e+00, 0.0000000000e+00, + 5.0000000000e+00, 1.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + 8.6602538824e-01, -5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + -1.0000000000e+00, 0.0000000000e+00, 1.4456849098e+00, + 5.0252534578e-08, -1.0000000000e+00, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 0.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456850290e+00, + -8.6602538824e-01, 5.0000005960e-01, 0.0000000000e+00], + [ 0.0000000000e+00, 5.0000000000e+00, 1.0000000000e+00, + 7.0000000000e+00, 0.0000000000e+00, 1.0000000000e+00, + 0.0000000000e+00, 0.0000000000e+00, 1.4456851482e+00, + 8.6602538824e-01, 5.0000000000e-01, 0.0000000000e+00]])} + + nn_onsiteE = {'N-2s-0': torch.tensor([ 0.0039564464, -0.0055190362, 0.0041887821, -0.0018826023]), + 'N-2p-0': torch.tensor([-0.0001931502, -0.0003207834, 0.0007209170, -0.0004175970]), + 'B-2s-0': torch.tensor([-0.0040726629, 0.0048060226, 0.0017231141, 0.0074217431])} + + onsite_fun = orbitalEs(proj_atom_anglr_m=self.proj_atom_anglr_m, atomtype=['N','B'], functype='NRL', unit='Hartree', + onsite_func_cutoff=3.0, onsite_func_decay_w=0.3, onsite_func_lambda=1.0) + + batch_nnsk_onsiteEs = onsite_fun.get_onsiteEs(batch_bonds_onsite=self.batch_bond_onsites, onsite_env=batch_onsite_envs, nn_onsite_paras=nn_onsiteE) + + batch_nnsk_onsiteEs_true = {0: [torch.tensor([ 0.0019290929, -0.0002228779]), torch.tensor([5.6795310229e-05])]} + + assert isinstance(batch_nnsk_onsiteEs,dict) + assert len(batch_nnsk_onsiteEs) == len(batch_nnsk_onsiteEs_true) + + for kf in batch_nnsk_onsiteEs.keys(): + assert len(batch_nnsk_onsiteEs[kf]) == len(batch_nnsk_onsiteEs_true[kf]) + assert len(batch_nnsk_onsiteEs[kf]) == len(self.batch_bond_onsites[kf]) + for i in range(len(batch_nnsk_onsiteEs[kf])): + assert torch.allclose(batch_nnsk_onsiteEs[kf][i], batch_nnsk_onsiteEs_true[kf][i]) \ No newline at end of file From a5956edce4071586af0e11438a35bcb828bd3cc9 Mon Sep 17 00:00:00 2001 From: qqgu Date: Tue, 17 Oct 2023 19:47:29 +0800 Subject: [PATCH 63/63] update log.info in hamil_eig_sk_crt.py --- dptb/hamiltonian/hamil_eig_sk_crt.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dptb/hamiltonian/hamil_eig_sk_crt.py b/dptb/hamiltonian/hamil_eig_sk_crt.py index 1508a63b..e3e6bd0a 100644 --- a/dptb/hamiltonian/hamil_eig_sk_crt.py +++ b/dptb/hamiltonian/hamil_eig_sk_crt.py @@ -57,8 +57,8 @@ def update_hs_list(self, struct, hoppings, onsiteEs, onsiteVs=None, overlaps=Non self.use_orthogonal_basis = False if onsiteSs is not None: - log.info(msg='The onsiteSs is not None, But envn for non-orthogonal basis, the onsite S matrix part is still identity.') - log.info(msg='Therefor the onsiteSs will not be used !!') + log.info(msg='The onsiteSs is not None, But even for non-orthogonal basis, the onsite S matrix part is still identity.') + log.info(msg='Therefore the onsiteSs will not be used !!') if soc_lambdas is None: self.soc = False

VX(?|#_2^eDj8g~ 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¨YpTqUKCQ-suH2f-XC0 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 literal 0 HcmV?d00001 diff --git a/examples/NRL-TB/silicon/ckpt/band_pthckpt.png b/examples/NRL-TB/silicon/ckpt/band_pthckpt.png new file mode 100644 index 0000000000000000000000000000000000000000..09769130a32fdffea92484b7c9697f5ad6357572 GIT binary patch literal 277017 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⪻6Az>Um+Fq*%6s+7kk>M;pkt!w@mO{F_~~WE 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