From 7d111583c30fcdd3e6a6ab1fbf56ba38a657c8b2 Mon Sep 17 00:00:00 2001 From: Xiaochen Du Date: Thu, 19 Sep 2024 22:54:09 -0400 Subject: [PATCH 01/66] BUG & MAINT: fix `lr_decay` and set default model units --- scripts/train_nff.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/train_nff.py b/scripts/train_nff.py index e446a67e..de7f5d82 100644 --- a/scripts/train_nff.py +++ b/scripts/train_nff.py @@ -93,6 +93,12 @@ def build_default_arg_parser() -> argparse.ArgumentParser: type=int, default=25, ) + parser.add_argument( + "--lr_decay", + help="Factor to reduce learning rate by at each step. lr = lr * lr_decay", + type=float, + default=0.5, + ) parser.add_argument( "--weight_decay", help="Fraction to reduce weights by at each step", @@ -137,6 +143,7 @@ def main( min_lr: float = 1e-6, max_num_epochs: int = 200, patience: int = 25, + lr_decay: float = 0.5, weight_decay: float = 0.0, num_workers: int = 1, pin_memory: bool = True, @@ -227,8 +234,9 @@ def main( sum([p.numel() for p in model.parameters() if p.requires_grad]), ) - train.to_units(model.units) - val.to_units(model.units) + model_units = model.units if hasattr(model, "units") else "kcal/mol" + train.to_units(model_units) + val.to_units(model_units) # define loss loss_fn = loss.build_general_loss( @@ -270,7 +278,7 @@ def main( hooks.ReduceLROnPlateauHook( optimizer=optimizer, patience=patience, - factor=lr, + factor=lr_decay, min_lr=min_lr, window_length=1, stop_after_min=True, @@ -315,6 +323,7 @@ def main( min_lr=args.min_lr, max_num_epochs=args.max_num_epochs, patience=args.patience, + lr_decay=args.lr_decay, weight_decay=args.weight_decay, num_workers=args.num_workers, pin_memory=args.pin_memory, From a466f3952676f3ce5a7607b80b9b8486280241e6 Mon Sep 17 00:00:00 2001 From: Xiaochen Du Date: Thu, 19 Sep 2024 22:54:19 -0400 Subject: [PATCH 02/66] BUG: chgnet latest version fix import --- nff/nn/models/chgnet.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nff/nn/models/chgnet.py b/nff/nn/models/chgnet.py index 9a17bf67..7161d915 100644 --- a/nff/nn/models/chgnet.py +++ b/nff/nn/models/chgnet.py @@ -9,7 +9,11 @@ import torch from chgnet.data.dataset import collate_graphs from chgnet.graph import CrystalGraph -from chgnet.graph.crystalgraph import datatype + +try: + from chgnet.graph.crystalgraph import datatype +except ImportError: + datatype = torch.float32 from chgnet.model import CHGNet from torch import Tensor, nn From 427427e60c4dacb81a8e67a52114f730cdc05733 Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar <52538949+sauradeep93@users.noreply.github.com> Date: Thu, 21 Nov 2024 09:36:03 -0500 Subject: [PATCH 03/66] Update stress calculation for MACE MACE requires the stress to be computed directly rather than through the 'stress volume' --- nff/io/ase_calcs.py | 52 +++++++++++++++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index fe2b81ad..fb1246e9 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -32,6 +32,7 @@ from nff.utils.cuda import batch_detach, batch_to from nff.utils.geom import batch_compute_distance, compute_distances from nff.utils.scatter import compute_grad +from nff.nn.models.mace import NffScaleMACE HARTREE_TO_EV = HARTREE_TO_KCAL_MOL / EV_TO_KCAL_MOL @@ -85,6 +86,18 @@ def __init__( self.model_units = model_units self.prediction_units = prediction_units + print("Requested properties:", self.properties) + + # Unit conversion factors + self.energy_units_to_eV = 1.0 # assuming default model outputs energy in eV + self.length_units_to_A = 1.0 # assuming default model uses A**3 for length + + # Adjust conversion factors if the model uses different units + if self.model_units == "kcal/mol": + self.energy_units_to_eV = 0.0433641 # kcal/mol -> eV + if self.prediction_units == "nm": + self.length_units_to_A = 10.0 # nm -> AA*3 + def to(self, device): self.device = device self.model.to(device) @@ -146,10 +159,8 @@ def calculate( batch[grad_key] = [] kwargs = {} - requires_stress = "stress" in self.properties requires_embedding = "embedding" in self.properties - if requires_embedding: kwargs["requires_embedding"] = True if requires_stress: @@ -158,6 +169,8 @@ def calculate( if getattr(self, "model_kwargs", None) is not None: kwargs.update(self.model_kwargs) + + prediction = self.model(batch, **kwargs) # print(prediction.keys()) @@ -197,15 +210,27 @@ def calculate( self.results["embedding"] = embedding if requires_stress: - stress = prediction["stress_volume"].detach().cpu().numpy() * ( - 1 / const.EV_TO_KCAL_MOL - # TODO change to more general prediction - ) - self.results["stress"] = stress * (1 / atoms.get_volume()) + if isinstance(self.model, NffScaleMACE):#the implementation of stress calculation in MACE is a bit different and hence this is needed (ASE_suit: mace/mace/calculators/mace.py) + # print(f"Original stress shape: {prediction['stress'].shape}") + if prediction["stress"].ndim==1: + try: + prediction["stress"] = prediction["stress"].reshape(3, 3) + # print("Reshaped stress to 3*3:", prediction["stress"]) + except ValueError as e: + raise ValueError(f"Error reshaping stress tensor: {e}, shape: {prediction['stress'].shape}") + + # print("The current dimensions of the stress tensor is:", prediction["stress"].ndim) + + self.results["stress"] = full_3x3_to_voigt_6_stress( + torch.mean(prediction["stress"], dim=0).cpu().numpy()*self.energy_units_to_eV/1.0)#1.0 as volume is in A**3, but conversion for energy is needed + else: #for other models + stress = prediction["stress_volume"].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) # TODO change to more general prediction + self.results["stress"] = stress * (1 / atoms.get_volume()) if "stress_disp" in prediction: self.results["stress"] = self.results["stress"] + prediction["stress_disp"] - self.results["stress"] = full_3x3_to_voigt_6_stress(self.results["stress"]) + #self.results["stress"] = full_3x3_to_voigt_6_stress(self.results["stress"])#for mace model, this line is already implemented above, for other models uncomment this line atoms.results = self.results.copy() + #print("Final stress tensor:", self.results["stress"]) def get_embedding(self, atoms=None): return self.get_property("embedding", atoms) @@ -257,7 +282,6 @@ def __init__( self.to(device) self.jobdir = jobdir self.offset_data = {} - self.offset_units = kwargs.get("offset_units", "atomic") self.properties = properties self.model_kwargs = model_kwargs self.model_units = model_units @@ -283,10 +307,8 @@ def offset_energy(self, atoms, energy: Union[float, np.ndarray]): for ele, num in ads_count.items(): ref_en += num * stoidict.get(ele, 0.0) ref_en += stoidict.get("offset", 0.0) - if self.offset_units == "atomic": - energy += ref_en * HARTREE_TO_EV - else: - energy += ref_en + + energy += ref_en * HARTREE_TO_EV return energy def log_ensemble(self, jobdir, log_filename, props): @@ -454,13 +476,11 @@ def set(self, **kwargs): The special keyword 'parameters' can be used to read parameters from a file.""" - changed_params = Calculator.set(self, **kwargs) + Calculator.set(self, **kwargs) if "offset_data" in self.parameters.keys(): self.offset_data = self.parameters["offset_data"] print(f"offset data: {self.offset_data} is set from parameters") - return changed_params - @classmethod def from_files(cls, model_paths: list, device="cuda", **kwargs): models = [load_model(path, device=device, **kwargs) for path in model_paths] From d1ee75b6ed9f65cc62f07c8cfa5b1fc4423117ad Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar Date: Thu, 21 Nov 2024 20:09:46 -0500 Subject: [PATCH 04/66] Update ase_calcs.py Incorporated suggestions from @ajhoffman1229 and @swagataroy123 --- nff/io/ase_calcs.py | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index fb1246e9..36591de8 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -36,6 +36,12 @@ HARTREE_TO_EV = HARTREE_TO_KCAL_MOL / EV_TO_KCAL_MOL +# Unit conversion factors + +self.energy_units_to_eV = 1.0 # if model units is in eV +if self.model_units == "kcal/mol": + self.energy_units_to_eV = 0.0433641 # kcal/mol -> eV + UNDIRECTED = [SchNet, SchNetDiabat, HybridGraphConv, SchNetFeatures, OnlyBondUpdateCP3D] @@ -86,17 +92,7 @@ def __init__( self.model_units = model_units self.prediction_units = prediction_units - print("Requested properties:", self.properties) - - # Unit conversion factors - self.energy_units_to_eV = 1.0 # assuming default model outputs energy in eV - self.length_units_to_A = 1.0 # assuming default model uses A**3 for length - - # Adjust conversion factors if the model uses different units - if self.model_units == "kcal/mol": - self.energy_units_to_eV = 0.0433641 # kcal/mol -> eV - if self.prediction_units == "nm": - self.length_units_to_A = 10.0 # nm -> AA*3 + print("Requested properties:", self.properties) def to(self, device): self.device = device @@ -211,26 +207,21 @@ def calculate( if requires_stress: if isinstance(self.model, NffScaleMACE):#the implementation of stress calculation in MACE is a bit different and hence this is needed (ASE_suit: mace/mace/calculators/mace.py) - # print(f"Original stress shape: {prediction['stress'].shape}") + if prediction["stress"].ndim==1: try: prediction["stress"] = prediction["stress"].reshape(3, 3) - # print("Reshaped stress to 3*3:", prediction["stress"]) except ValueError as e: raise ValueError(f"Error reshaping stress tensor: {e}, shape: {prediction['stress'].shape}") - - # print("The current dimensions of the stress tensor is:", prediction["stress"].ndim) - - self.results["stress"] = full_3x3_to_voigt_6_stress( - torch.mean(prediction["stress"], dim=0).cpu().numpy()*self.energy_units_to_eV/1.0)#1.0 as volume is in A**3, but conversion for energy is needed + self.results["stress"] = + torch.mean(prediction["stress"], dim=0).cpu().numpy()*self.energy_units_to_eV #converting to eV/Angstrom^3 else: #for other models stress = prediction["stress_volume"].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) # TODO change to more general prediction self.results["stress"] = stress * (1 / atoms.get_volume()) if "stress_disp" in prediction: self.results["stress"] = self.results["stress"] + prediction["stress_disp"] - #self.results["stress"] = full_3x3_to_voigt_6_stress(self.results["stress"])#for mace model, this line is already implemented above, for other models uncomment this line + self.results["stress"] = full_3x3_to_voigt_6_stress(self.results["stress"]) atoms.results = self.results.copy() - #print("Final stress tensor:", self.results["stress"]) def get_embedding(self, atoms=None): return self.get_property("embedding", atoms) From 814e9f7f7cb7106dd14f8d9206978f6c24a45588 Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar Date: Thu, 21 Nov 2024 20:43:33 -0500 Subject: [PATCH 05/66] Updated and tested ase_calcs.py Suggestions from @ajhoffman1229 and @swagataroy123 incorporated --- nff/io/ase_calcs.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 36591de8..542d6a05 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -36,11 +36,6 @@ HARTREE_TO_EV = HARTREE_TO_KCAL_MOL / EV_TO_KCAL_MOL -# Unit conversion factors - -self.energy_units_to_eV = 1.0 # if model units is in eV -if self.model_units == "kcal/mol": - self.energy_units_to_eV = 0.0433641 # kcal/mol -> eV UNDIRECTED = [SchNet, SchNetDiabat, HybridGraphConv, SchNetFeatures, OnlyBondUpdateCP3D] @@ -92,6 +87,11 @@ def __init__( self.model_units = model_units self.prediction_units = prediction_units + # Unit conversion factors + self.energy_units_to_eV = 1.0 # if model units is in eV + if self.model_units == "kcal/mol": + self.energy_units_to_eV = 0.0433641 # kcal/mol -> eV + print("Requested properties:", self.properties) def to(self, device): @@ -206,15 +206,16 @@ def calculate( self.results["embedding"] = embedding if requires_stress: - if isinstance(self.model, NffScaleMACE):#the implementation of stress calculation in MACE is a bit different and hence this is needed (ASE_suit: mace/mace/calculators/mace.py) + if isinstance(self.model, NffScaleMACE):#the implementation of stress calculation in MACE is a bit different + #and hence this is required (ASE_suit: mace/mace/calculators/mace.py) if prediction["stress"].ndim==1: try: prediction["stress"] = prediction["stress"].reshape(3, 3) except ValueError as e: raise ValueError(f"Error reshaping stress tensor: {e}, shape: {prediction['stress'].shape}") - self.results["stress"] = - torch.mean(prediction["stress"], dim=0).cpu().numpy()*self.energy_units_to_eV #converting to eV/Angstrom^3 + self.results["stress"] =( + torch.mean(prediction["stress"], dim=0).cpu().numpy()*self.energy_units_to_eV) #converting to eV/Angstrom^3 else: #for other models stress = prediction["stress_volume"].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) # TODO change to more general prediction self.results["stress"] = stress * (1 / atoms.get_volume()) From 54dded8a7f866b8b206d8b8a9f9616b34370bc3f Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar Date: Fri, 22 Nov 2024 16:59:50 -0500 Subject: [PATCH 06/66] Further updated and tested Based on the thread discussions with @swagata123 and @ajhoffman1229 --- nff/io/ase_calcs.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 542d6a05..2e983bfd 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -87,11 +87,6 @@ def __init__( self.model_units = model_units self.prediction_units = prediction_units - # Unit conversion factors - self.energy_units_to_eV = 1.0 # if model units is in eV - if self.model_units == "kcal/mol": - self.energy_units_to_eV = 0.0433641 # kcal/mol -> eV - print("Requested properties:", self.properties) def to(self, device): @@ -209,19 +204,15 @@ def calculate( if isinstance(self.model, NffScaleMACE):#the implementation of stress calculation in MACE is a bit different #and hence this is required (ASE_suit: mace/mace/calculators/mace.py) - if prediction["stress"].ndim==1: - try: - prediction["stress"] = prediction["stress"].reshape(3, 3) - except ValueError as e: - raise ValueError(f"Error reshaping stress tensor: {e}, shape: {prediction['stress'].shape}") self.results["stress"] =( - torch.mean(prediction["stress"], dim=0).cpu().numpy()*self.energy_units_to_eV) #converting to eV/Angstrom^3 + torch.mean(prediction["stress"], dim=0).cpu().numpy()) #converting to eV/Angstrom^3 else: #for other models - stress = prediction["stress_volume"].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) # TODO change to more general prediction + stress = prediction["stress_volume"].detach().cpu().numpy() self.results["stress"] = stress * (1 / atoms.get_volume()) if "stress_disp" in prediction: self.results["stress"] = self.results["stress"] + prediction["stress_disp"] self.results["stress"] = full_3x3_to_voigt_6_stress(self.results["stress"]) + print(self.results["stress"]) atoms.results = self.results.copy() def get_embedding(self, atoms=None): From 071d6922bc59c6b47314d20a7733da459902e8f7 Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar Date: Fri, 22 Nov 2024 17:01:08 -0500 Subject: [PATCH 07/66] Generalizing for stress calculation --- nff/utils/constants.py | 51 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/nff/utils/constants.py b/nff/utils/constants.py index 12402f9c..62a93a20 100644 --- a/nff/utils/constants.py +++ b/nff/utils/constants.py @@ -61,6 +61,57 @@ "_grad": 1.0, } + +AU_TO_KCAL = { + "energy": HARTREE_TO_KCAL_MOL, + "_grad": 1.0 / BOHR_RADIUS, + "stress": HARTREE_TO_KCAL_MOL*((1.0/BOHR_RADIUS)**3), + "_volume": 1/((1.0/BOHR_RADIUS)**3), +} + + +AU_TO_EV = { + "energy": HARTREE_TO_EV, + "_grad": 1.0 / BOHR_RADIUS, + "stress": HARTREE_TO_EV*((1.0/BOHR_RADIUS)**3), + "_volume": 1/((1.0/BOHR_RADIUS)**3), +} + + +EV_TO_AU = { + "energy": 1.0 / HARTREE_TO_EV, + "_grad": BOHR_RADIUS, + "stress": (1.0/HARTREE_TO_EV)*(BOHR_RADIUS**3), + "_volume": 1/(BOHR_RADIUS**3), +} + + +EV_TO_KCAL = { + "energy": EV_TO_KCAL_MOL, + "_grad": 1.0, + "stress": EV_TO_KCAL_MOL*(1.0**3), + "_volume": 1/(1.0**3), +} + + +KCAL_TO_AU = { + "energy": 1.0 / HARTREE_TO_KCAL_MOL, + "_grad": BOHR_RADIUS, + "stress": (1.0/HARTREE_TO_KCAL_MOL)*(BOHR_RADIUS**3), + "_volume": 1/(BOHR_RADIUS**3), +} + + +KCAL_TO_EV = { + "energy": 1.0 / EV_TO_KCAL_MOL, + "_grad": 1.0, + "stress": (1.0/EV_TO_KCAL_MOL)*(1.0**3), + "_volume": 1/(1.0**3), +} + + + + DEFAULT = { "energy": 1.0, "_grad": 1.0, From 1f4b38d09179432d54f23fb9009d2b90bc1490a1 Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar Date: Fri, 22 Nov 2024 17:22:29 -0500 Subject: [PATCH 08/66] removed extra print statements Also made unit conversion consistent --- nff/io/ase_calcs.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 2e983bfd..8bd11225 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -212,7 +212,7 @@ def calculate( if "stress_disp" in prediction: self.results["stress"] = self.results["stress"] + prediction["stress_disp"] self.results["stress"] = full_3x3_to_voigt_6_stress(self.results["stress"]) - print(self.results["stress"]) + atoms.results = self.results.copy() def get_embedding(self, atoms=None): @@ -408,7 +408,6 @@ def calculate( # TODO: implement unit conversion for stress with prediction_numpy stresses.append( prediction["stress_volume"].detach().cpu().numpy() - * (1 / const.EV_TO_KCAL_MOL) * (1 / atoms.get_volume()) ) From 32fe9957e0d2b8c7d0b675e257558c9303b5575a Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar Date: Fri, 22 Nov 2024 17:34:05 -0500 Subject: [PATCH 09/66] reverted unintentional changes maybe version mismatch? --- nff/io/ase_calcs.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 8bd11225..254484ca 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -265,6 +265,7 @@ def __init__( self.to(device) self.jobdir = jobdir self.offset_data = {} + self.offset_units = kwargs.get("offset_units", "atomic") self.properties = properties self.model_kwargs = model_kwargs self.model_units = model_units @@ -291,7 +292,10 @@ def offset_energy(self, atoms, energy: Union[float, np.ndarray]): ref_en += num * stoidict.get(ele, 0.0) ref_en += stoidict.get("offset", 0.0) - energy += ref_en * HARTREE_TO_EV + if self.offset_units == "atomic": + energy += ref_en * HARTREE_TO_EV + else: + energy += ref_en return energy def log_ensemble(self, jobdir, log_filename, props): @@ -458,10 +462,12 @@ def set(self, **kwargs): The special keyword 'parameters' can be used to read parameters from a file.""" - Calculator.set(self, **kwargs) + changed_params = Calculator.set(self, **kwargs) if "offset_data" in self.parameters.keys(): self.offset_data = self.parameters["offset_data"] print(f"offset data: {self.offset_data} is set from parameters") + + return changed_params @classmethod def from_files(cls, model_paths: list, device="cuda", **kwargs): From f2c50549471d78d019c63795b3f525348da57efc Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar Date: Sat, 23 Nov 2024 14:16:26 -0500 Subject: [PATCH 10/66] Update constants.py merged additional keys --- nff/utils/constants.py | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/nff/utils/constants.py b/nff/utils/constants.py index 62a93a20..cdefcb54 100644 --- a/nff/utils/constants.py +++ b/nff/utils/constants.py @@ -31,36 +31,6 @@ 16: 32.06, } -AU_TO_KCAL = { - "energy": HARTREE_TO_KCAL_MOL, - "_grad": 1.0 / BOHR_RADIUS, -} - -AU_TO_EV = { - "energy": HARTREE_TO_EV, - "_grad": 1.0 / BOHR_RADIUS, -} - -EV_TO_AU = { - "energy": 1.0 / HARTREE_TO_EV, - "_grad": BOHR_RADIUS, -} - -EV_TO_KCAL = { - "energy": EV_TO_KCAL_MOL, - "_grad": 1.0, -} - -KCAL_TO_AU = { - "energy": 1.0 / HARTREE_TO_KCAL_MOL, - "_grad": BOHR_RADIUS, -} - -KCAL_TO_EV = { - "energy": 1.0 / EV_TO_KCAL_MOL, - "_grad": 1.0, -} - AU_TO_KCAL = { "energy": HARTREE_TO_KCAL_MOL, From 32840f884824d58b7d69681ca7cacc94d277b949 Mon Sep 17 00:00:00 2001 From: Sauradeep Majumdar Date: Sat, 23 Nov 2024 14:20:44 -0500 Subject: [PATCH 11/66] Update ase_calcs.py indentation fixed --- nff/io/ase_calcs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 254484ca..bb114d00 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -293,7 +293,7 @@ def offset_energy(self, atoms, energy: Union[float, np.ndarray]): ref_en += stoidict.get("offset", 0.0) if self.offset_units == "atomic": - energy += ref_en * HARTREE_TO_EV + energy += ref_en * HARTREE_TO_EV else: energy += ref_en return energy From a9cb5ada28d780ad1d442c6e598424631b4e9e93 Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 16 Dec 2024 11:49:38 -0500 Subject: [PATCH 12/66] autopep --- .gitignore | 8 + nff/analysis/attribution.py | 4 +- nff/analysis/attribution_deprecate.py | 4 +- nff/analysis/loss_plot.py | 5 +- nff/analysis/mpl_settings.py | 2 +- nff/analysis/roce.py | 2 +- nff/data/crystals.py | 1 - nff/data/features/graph.py | 36 +- nff/data/loader.py | 3 +- nff/data/parallel.py | 20 +- nff/data/sampling.py | 4 - nff/io/ase_ax.py | 6 +- nff/io/ase_calcs.py | 23 +- nff/io/cprop.py | 6 +- nff/io/mace.py | 35 +- nff/io/openmm_calculators.py | 392 +++++---- nff/md/aims/calcs/basis.py | 8 +- nff/md/ci/opt.py | 70 +- nff/md/colvars.py | 756 +++++++++--------- nff/md/nms.py | 36 +- nff/md/nvt.py | 12 +- nff/md/nvt_ax.py | 23 +- nff/md/special_thermostats.py | 26 +- nff/md/tully/step.py | 8 +- nff/md/tully_multiplicity/dynamics.py | 314 ++++---- nff/md/tully_multiplicity/io.py | 25 +- nff/md/tully_multiplicity/step.py | 14 +- nff/md/utils.py | 2 +- nff/md/utils_ax.py | 16 +- nff/md/zhu_nakamura/dynamics.py | 2 +- nff/md/zhu_nakamura/dynamics_test.py | 106 +-- nff/nn/__init__.py | 1 - nff/nn/glue.py | 2 +- nff/nn/graphop.py | 2 +- nff/nn/models/__init__.py | 2 +- nff/nn/models/conformers.py | 20 +- nff/nn/models/cp3d.py | 8 +- nff/nn/models/graphconvintegration.py | 29 +- nff/nn/models/hybridgraph.py | 49 +- nff/nn/models/mace.py | 7 +- nff/nn/models/painn.py | 60 +- nff/nn/models/schnet.py | 4 +- nff/nn/models/spooky_net_source/functional.py | 3 +- .../modules/sinc_functions.py | 2 +- nff/nn/models/spooky_net_source/spookynet.py | 16 +- .../spooky_net_source/spookynet_calculator.py | 1 + nff/nn/modules/diabat.py | 2 +- nff/nn/modules/painn.py | 72 +- nff/nn/modules/schnet.py | 4 +- nff/nn/modules/spooky.py | 4 +- nff/nn/modules/spooky_fast.py | 4 +- nff/nn/modules/spooky_painn.py | 4 +- nff/nn/modules/torchmd_net.py | 2 +- nff/nn/tensorgrad.py | 11 +- nff/opt/algos.py | 13 +- nff/reactive_tools/nms.py | 87 +- nff/reactive_tools/reactive_langevin.py | 75 +- nff/train/chgnet.py | 13 +- nff/train/hooks/base_hook.py | 1 + nff/train/metrics.py | 8 +- nff/utils/confgen.py | 12 +- nff/utils/confs.py | 34 +- nff/utils/constants.py | 26 +- nff/utils/dispersion.py | 139 ++-- nff/utils/functions.py | 52 +- nff/utils/misc.py | 2 +- nff/utils/scatter.py | 4 +- nff/utils/script_utils/loaders.py | 6 +- nff/utils/script_utils/parsers.py | 8 +- nff/utils/tools.py | 13 +- nff/utils/xyz2mol.py | 22 +- pyproject.toml | 9 + 72 files changed, 1370 insertions(+), 1432 deletions(-) diff --git a/.gitignore b/.gitignore index 6181965e..d3e00c03 100644 --- a/.gitignore +++ b/.gitignore @@ -66,5 +66,13 @@ dist/ sandbox_excited/ build/ +# Editor files +# vim +*.swp +*.swo + +# pycharm +.idea/ + # required exceptions !tutorials/models/ammonia/Ammonia.xyz diff --git a/nff/analysis/attribution.py b/nff/analysis/attribution.py index f8c6631f..ef4f7475 100644 --- a/nff/analysis/attribution.py +++ b/nff/analysis/attribution.py @@ -50,7 +50,7 @@ def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond" oxy_neighbors = [] if mode == "bond": for t in types: - if bond_length.get("%s-%s" % (ty, t)) != None: + if bond_length.get("%s-%s" % (ty, t)) is not None: oxy_neighbors.extend( list( np.where(atom.numbers == t)[0][ @@ -111,7 +111,7 @@ def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: mol_xyz = sys_xyz[idx] if any(atomsobject.pbc): center = mol_xyz.shape[0] // 2 - if centre != None: + if centre is not None: center = centre # changes the central atom to atom in focus intra_dmat = (mol_xyz[None, :, ...] - mol_xyz[:, None, ...])[center] if np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) != 0: diff --git a/nff/analysis/attribution_deprecate.py b/nff/analysis/attribution_deprecate.py index f8c6631f..ef4f7475 100644 --- a/nff/analysis/attribution_deprecate.py +++ b/nff/analysis/attribution_deprecate.py @@ -50,7 +50,7 @@ def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond" oxy_neighbors = [] if mode == "bond": for t in types: - if bond_length.get("%s-%s" % (ty, t)) != None: + if bond_length.get("%s-%s" % (ty, t)) is not None: oxy_neighbors.extend( list( np.where(atom.numbers == t)[0][ @@ -111,7 +111,7 @@ def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: mol_xyz = sys_xyz[idx] if any(atomsobject.pbc): center = mol_xyz.shape[0] // 2 - if centre != None: + if centre is not None: center = centre # changes the central atom to atom in focus intra_dmat = (mol_xyz[None, :, ...] - mol_xyz[:, None, ...])[center] if np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) != 0: diff --git a/nff/analysis/loss_plot.py b/nff/analysis/loss_plot.py index 50a5984a..4340ff0b 100644 --- a/nff/analysis/loss_plot.py +++ b/nff/analysis/loss_plot.py @@ -10,11 +10,11 @@ def plot_loss(energy_history, forces_history, figname, train_key='train', val_ke energy_history (dict): energy loss history of the model for training and validation forces_history (dict): forces loss history of the model for training and validation figname (str): name of the figure - + Returns: None """ - epochs = np.arange(1, len(energy_history[train_key])+1) + epochs = np.arange(1, len(energy_history[train_key]) + 1) fig, ax_fig = plt.subplots(1, 2, figsize=(12, 6), dpi=mpl_settings.DPI) ax_fig[0].semilogy(epochs, energy_history[train_key], label='train', color=mpl_settings.colors[1]) ax_fig[0].semilogy(epochs, energy_history[val_key], label='val', color=mpl_settings.colors[2]) @@ -31,4 +31,3 @@ def plot_loss(energy_history, forces_history, figname, train_key='train', val_ke plt.tight_layout() plt.savefig(f"{figname}.png") plt.show() - \ No newline at end of file diff --git a/nff/analysis/mpl_settings.py b/nff/analysis/mpl_settings.py index e30b7b1e..960dde95 100644 --- a/nff/analysis/mpl_settings.py +++ b/nff/analysis/mpl_settings.py @@ -65,7 +65,7 @@ def hex_to_rgb(value: str) -> tuple: value = value.strip("#") # removes hash symbol if present lv = len(value) - return tuple(int(value[i : i + lv // 3], 16) for i in range(0, lv, lv // 3)) + return tuple(int(value[i: i + lv // 3], 16) for i in range(0, lv, lv // 3)) def rgb_to_dec(value: list): diff --git a/nff/analysis/roce.py b/nff/analysis/roce.py index 54d2fc05..0a9062aa 100644 --- a/nff/analysis/roce.py +++ b/nff/analysis/roce.py @@ -709,7 +709,7 @@ def decorate_plot(labels, """ max_x = len(labels) - x_range = np.arange(-0.5, max_x, max_x/100) + x_range = np.arange(-0.5, max_x, max_x / 100) plt.plot(x_range, [0] * len(x_range), '-', color='black', diff --git a/nff/data/crystals.py b/nff/data/crystals.py index f98ca8fe..1bf52abc 100644 --- a/nff/data/crystals.py +++ b/nff/data/crystals.py @@ -30,4 +30,3 @@ def get_crystal_graph(crystal, cutoff): pbc = torch.LongTensor(pbc) return nxyz, pbc - diff --git a/nff/data/features/graph.py b/nff/data/features/graph.py index c409af6d..2b2e701c 100644 --- a/nff/data/features/graph.py +++ b/nff/data/features/graph.py @@ -167,11 +167,11 @@ def smiles_from_mol(mol): """ Get the canonical smiles from an rdkit mol. Args: - mol (rdkit.Chem.rdchem.Mol): rdkit Mol + mol (rdkit.Chem.rdchem.Mol): rdkit Mol Returns: new_smiles (str): canonicial smiles new_mol (rdkit.Chem.rdchem.Mol): rdkit Mol created - from the canonical smiles. + from the canonical smiles. """ new_smiles = Chem.MolToSmiles(mol) @@ -184,11 +184,11 @@ def smiles_from_mol(mol): def get_undirected_bonds(mol): """ Get an undirected bond list from an RDKit mol. This - means that bonds between atoms 1 and 0 are stored as + means that bonds between atoms 1 and 0 are stored as [0, 1], whereas in a directed list they would be stored as both [0, 1] and [1, 0]. Args: - mol (rdkit.Chem.rdchem.Mol): rdkit Mol + mol (rdkit.Chem.rdchem.Mol): rdkit Mol Returns: bond_list (list): undirected bond list """ @@ -213,7 +213,7 @@ def undirected_bond_atoms(mol): Get a list of the atomic numbers comprising a bond in each bond of an undirected bond list. Args: - mol (rdkit.Chem.rdchem.Mol): rdkit Mol + mol (rdkit.Chem.rdchem.Mol): rdkit Mol Returns: atom_num_list (list): list of the form [[num__00, num_01], [num_10, num_11], [num_20, num_21], ...], where the `num_ij` @@ -239,8 +239,8 @@ def check_connectivity(mol_0, mol_1): """ Check if the atom connectivity in two mol objects is the same. Args: - mol_0 (rdkit.Chem.rdchem.Mol): first rdkit Mol - mol_1 (rdkit.Chem.rdchem.Mol): second rdkit Mol + mol_0 (rdkit.Chem.rdchem.Mol): first rdkit Mol + mol_1 (rdkit.Chem.rdchem.Mol): second rdkit Mol Returns: same (bool): whether or not the connectivity is the same """ @@ -257,7 +257,7 @@ def verify_smiles(rd_mol, smiles): Verify that an RDKit mol has the same smiles as the original smiles that made it. Args: - rd_mol (rdkit.Chem.rdchem.Mol): rdkit Mol + rd_mol (rdkit.Chem.rdchem.Mol): rdkit Mol smiles (str): claimed smiles Returns: None @@ -307,7 +307,7 @@ def verify_smiles(rd_mol, smiles): def log_failure(bad_idx, i): """ - Log how many smiles have conformers that you've successfully converted + Log how many smiles have conformers that you've successfully converted to RDKit mols. Args: bad_idx (list[int]): indices to get rid of in the dataset @@ -502,7 +502,7 @@ def bond_feat_to_vec(feat_type, feat): feat_type (int): what type of feature it is feat (Union[floa, int]): feaure value Returns: - one_hot (torch.Tensor): one-hot encoding of + one_hot (torch.Tensor): one-hot encoding of the feature. """ @@ -599,7 +599,7 @@ def atom_feat_to_vec(feat_type, feat): feat_type (int): what type of feature it is feat (Union[floa, int]): feaure value Returns: - one_hot (torch.Tensor): one-hot encoding of + one_hot (torch.Tensor): one-hot encoding of the feature. """ @@ -718,7 +718,7 @@ def get_all_bond_feats(bond, feat_types): bond (rdkit.Chem.rdchem.Bond): bond object feat_types (list[str]): list of feature types Returns: - feat_dic (dict): dictionary of the form + feat_dic (dict): dictionary of the form {feat_type: bond_feat_vector} for all feature types. """ @@ -740,7 +740,7 @@ def get_all_atom_feats(atom, feat_types): atom (rdkit.Chem.rdchem.Atom): atom object feat_types (list[str]): list of feature types Returns: - feat_dic (dict): dictionary of the form + feat_dic (dict): dictionary of the form {feat_type: atom_feat_vector} for all feature types. """ @@ -923,7 +923,7 @@ def decode_atomic(features, meta_data=META_DATA): Args: features (torch.Tensor): feature vector meta_data (dict): dictionary that tells you the - atom and bond feature types + atom and bond feature types Returns: dic (dict): dictionary of feature values """ @@ -963,7 +963,7 @@ def decode_bond(features, meta_data=META_DATA): Args: features (torch.Tensor): feature vector meta_data (dict): dictionary that tells you the - atom and bond feature types + atom and bond feature types Returns: dic (dict): dictionary of feature values """ @@ -996,7 +996,7 @@ def featurize_dataset(dataset, bond_feats=BOND_FEAT_TYPES, atom_feats=ATOM_FEAT_TYPES): """ - Add RDKit mols, atomic features and bond features to + Add RDKit mols, atomic features and bond features to a dataset. Note that this has been superseded by the parallel version in data/parallel.py. Args: @@ -1028,8 +1028,8 @@ def featurize_dataset(dataset, def add_morgan(dataset, vec_length): """ Add Morgan fingerprints to the dataset. Note that this uses - the smiles of each species to get one fingerprint per species, - as opposed to getting the graph of each conformer and its + the smiles of each species to get one fingerprint per species, + as opposed to getting the graph of each conformer and its fingerprint. Args: diff --git a/nff/data/loader.py b/nff/data/loader.py index 702b018c..1de2cdba 100644 --- a/nff/data/loader.py +++ b/nff/data/loader.py @@ -60,13 +60,12 @@ def collate_dicts(dicts): for i, d in enumerate(dicts): d[key] += i - # batching the data batch = {} for key, val in dicts[0].items(): if key in IGNORE_KEYS: continue - if type(val) == str: + if isinstance(val, str): batch[key] = [data[key] for data in dicts] elif hasattr(val, 'shape') and len(val.shape) > 0: batch[key] = torch.cat([ diff --git a/nff/data/parallel.py b/nff/data/parallel.py index 30b556be..3c0697a0 100644 --- a/nff/data/parallel.py +++ b/nff/data/parallel.py @@ -110,9 +110,9 @@ def rd_parallel(datasets, check_smiles=False): Args: datasets (list): list of smaller datasets check_smiles (bool): exclude any species whose - SMILES strings aren't the same as the + SMILES strings aren't the same as the Returns: - results_dsets (list): list of datasets with + results_dsets (list): list of datasets with RDKit mols. """ @@ -127,14 +127,14 @@ def rd_parallel(datasets, check_smiles=False): def bonds_parallel(datasets, feat_types): """ - Generate bond lists and bond features for the dataset + Generate bond lists and bond features for the dataset in parallel. Args: datasets (list): list of smaller datasets feat_types (list[str]): types of bond features to - use + use Returns: - results_dsets (list): list of datasets with + results_dsets (list): list of datasets with bond lists and features. """ @@ -148,14 +148,14 @@ def bonds_parallel(datasets, feat_types): def atoms_parallel(datasets, feat_types): """ - Generate atom features for the dataset + Generate atom features for the dataset in parallel. Args: datasets (list): list of smaller datasets feat_types (list[str]): types of atom features to - use + use Returns: - results_dsets (list): list of datasets with + results_dsets (list): list of datasets with atom features. """ @@ -175,7 +175,7 @@ def e3fp_parallel(datasets, fp_length): datasets (list): list of smaller datasets fp_length (int): fingerprint length Returns: - results_dsets (list): list of datasets with + results_dsets (list): list of datasets with E3FP fingerprints. """ kwargs_list = [{"rd_dataset": dataset, "fp_length": fp_length} for @@ -229,7 +229,7 @@ def featurize_parallel(dataset, bond_feats=BOND_FEAT_TYPES, atom_feats=ATOM_FEAT_TYPES): """ - Add RDKit mols, atom features and bond features to a dataset in + Add RDKit mols, atom features and bond features to a dataset in parallel. Args: dataset (nff.data.dataset): NFF dataset diff --git a/nff/data/sampling.py b/nff/data/sampling.py index 7a7cba50..82bfa5b1 100644 --- a/nff/data/sampling.py +++ b/nff/data/sampling.py @@ -224,7 +224,6 @@ def assign_clusters(ref_idx, # to that cluster min_rmsds[torch.isnan(min_rmsds)] = float("inf") - clusters = min_rmsds.argmin(-1) if extra_category: @@ -238,8 +237,6 @@ def assign_clusters(ref_idx, for spec_idx, cluster in enumerate(clusters): cluster_dic[cluster.item()].append(spec_idx) - - return cluster_dic, min_rmsds @@ -320,7 +317,6 @@ def per_spec_config_weights(spec_nxyz, # return normalized weights geom_weights /= geom_weights.sum() - return geom_weights, cluster_rmsds, cluster_dic diff --git a/nff/io/ase_ax.py b/nff/io/ase_ax.py index bd0d9532..da52b944 100644 --- a/nff/io/ase_ax.py +++ b/nff/io/ase_ax.py @@ -19,7 +19,7 @@ DEFAULT_SKIN = 1.0 DEFAULT_DIRECTED = False CONVERSION_DIC = {"ev": 1 / const.EV_TO_KCAL_MOL, - "au": const.KCAL_TO_AU["energy"]} + "au": const.KCAL_TO_AU["energy"]} UNDIRECTED = [SchNet, SchNetDiabat, @@ -213,11 +213,11 @@ def __init__( Args: model (TYPE): Description - device (str): device on which the calculations will be performed + device (str): device on which the calculations will be performed **kwargs: Description model (one of nff.nn.models) output_keys (list): values outputted by neural network (not including gradients) - conversion (str): conversion of output energies and forces from kcal/mol + conversion (str): conversion of output energies and forces from kcal/mol dataset_props (dict): dataset.props from an initial dataset """ diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index bb114d00..3a56b2c7 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -37,7 +37,6 @@ HARTREE_TO_EV = HARTREE_TO_KCAL_MOL / EV_TO_KCAL_MOL - UNDIRECTED = [SchNet, SchNetDiabat, HybridGraphConv, SchNetFeatures, OnlyBondUpdateCP3D] @@ -87,7 +86,7 @@ def __init__( self.model_units = model_units self.prediction_units = prediction_units - print("Requested properties:", self.properties) + print("Requested properties:", self.properties) def to(self, device): self.device = device @@ -160,8 +159,6 @@ def calculate( if getattr(self, "model_kwargs", None) is not None: kwargs.update(self.model_kwargs) - - prediction = self.model(batch, **kwargs) # print(prediction.keys()) @@ -201,18 +198,18 @@ def calculate( self.results["embedding"] = embedding if requires_stress: - if isinstance(self.model, NffScaleMACE):#the implementation of stress calculation in MACE is a bit different - #and hence this is required (ASE_suit: mace/mace/calculators/mace.py) - - self.results["stress"] =( - torch.mean(prediction["stress"], dim=0).cpu().numpy()) #converting to eV/Angstrom^3 - else: #for other models - stress = prediction["stress_volume"].detach().cpu().numpy() + if isinstance(self.model, NffScaleMACE): # the implementation of stress calculation in MACE is a bit different + # and hence this is required (ASE_suit: mace/mace/calculators/mace.py) + + self.results["stress"] = ( + torch.mean(prediction["stress"], dim=0).cpu().numpy()) # converting to eV/Angstrom^3 + else: # for other models + stress = prediction["stress_volume"].detach().cpu().numpy() self.results["stress"] = stress * (1 / atoms.get_volume()) if "stress_disp" in prediction: self.results["stress"] = self.results["stress"] + prediction["stress_disp"] self.results["stress"] = full_3x3_to_voigt_6_stress(self.results["stress"]) - + atoms.results = self.results.copy() def get_embedding(self, atoms=None): @@ -466,7 +463,7 @@ def set(self, **kwargs): if "offset_data" in self.parameters.keys(): self.offset_data = self.parameters["offset_data"] print(f"offset data: {self.offset_data} is set from parameters") - + return changed_params @classmethod diff --git a/nff/io/cprop.py b/nff/io/cprop.py index 99710dd2..439e3a66 100644 --- a/nff/io/cprop.py +++ b/nff/io/cprop.py @@ -44,7 +44,7 @@ def cp_hyperopt(cp_folder, `hyp_folder` already exists and has the completion file `best_params.json`. Returns: - best_params (dict): best parameters from hyperparameter + best_params (dict): best parameters from hyperparameter optimization """ @@ -243,7 +243,7 @@ def get_smiles(smiles_folder, name): smiles_folder (str): folder with the csvs name (str): csv file name Returns: - smiles_list (list[str]): SMILES strings + smiles_list (list[str]): SMILES strings """ path = os.path.join(smiles_folder, name) @@ -345,7 +345,7 @@ def save_hyperopt(feat_folder, metric (str): metric with which you're evaluating the model performance smiles_folder (str): folder with the csvs cp_save_folder (str): folder in which you're saving features for chemprop use - dset_size (int, optional): maximum size of the entire dataset to use in hyperparameter + dset_size (int, optional): maximum size of the entire dataset to use in hyperparameter optimization. Returns: hyp_np_path (str): path of npz features file for hyperparameter optimization diff --git a/nff/io/mace.py b/nff/io/mace.py index b376da1f..1c588ade 100644 --- a/nff/io/mace.py +++ b/nff/io/mace.py @@ -41,6 +41,7 @@ def _check_non_zero(std): std = 1.0 return std + def get_mace_mp_model_path(model: str = None) -> str: """Get the default MACE MP model. Replicated from the MACE codebase, Copyright (c) 2022 ACEsuit/mace and licensed under the MIT license. @@ -98,7 +99,7 @@ def get_init_kwargs_from_model(model: Union[ScaleShiftMACE, MACE]) -> dict: radial_type = "bessel" elif isinstance(model.radial_embedding.bessel_fn, GaussianBasis): radial_type = "gaussian" - + init_kwargs = { "r_max": model.r_max.item(), "num_bessel": model.radial_embedding.out_dim, @@ -121,7 +122,8 @@ def get_init_kwargs_from_model(model: Union[ScaleShiftMACE, MACE]) -> dict: "radial_type": radial_type } if isinstance(model, ScaleShiftMACE): - init_kwargs.update({"atomic_inter_scale":model.scale_shift.scale, "atomic_inter_shift": model.scale_shift.shift}) + init_kwargs.update({"atomic_inter_scale": model.scale_shift.scale, + "atomic_inter_shift": model.scale_shift.shift}) return init_kwargs @@ -140,6 +142,7 @@ def get_atomic_number_table_from_zs(zs: Iterable[int]) -> AtomicNumberTable: z_set.add(z) return AtomicNumberTable(sorted(z_set)) + def compute_average_E0s( train_dset: Dataset, z_table: AtomicNumberTable, desired_units: str = "eV" ) -> Dict[int, float]: @@ -177,10 +180,11 @@ def compute_average_E0s( atomic_energies_dict = {} for i, z in enumerate(z_table.zs): atomic_energies_dict[z] = 0.0 - + train_dset.to_units(original_units) return atomic_energies_dict + def compute_mean_rms_energy_forces( data_loader: torch.utils.data.DataLoader, atomic_energies: np.ndarray, @@ -209,7 +213,7 @@ def compute_mean_rms_energy_forces( one_hot_zs[i, z_table.z_to_index(z)] = 1 # compute atomic energies node_e0 = atomic_energies_fn(one_hot_zs) - graph_sizes = batch['num_atoms'] # list of num atoms + graph_sizes = batch['num_atoms'] # list of num atoms # given graph_sizes, transform to list of indices # index starts from 0, denoting the first graph @@ -219,7 +223,7 @@ def compute_mean_rms_energy_forces( for i, size in enumerate(graph_sizes): batch_indices[counter:counter + size] = i counter += size - + # get the graph energy graph_e0s = scatter_sum( src=node_e0, index=batch_indices, dim=-1, dim_size=len(graph_sizes) @@ -237,6 +241,7 @@ def compute_mean_rms_energy_forces( rms = _check_non_zero(rms) return mean, rms + def compute_avg_num_neighbors(data_loader: torch.utils.data.DataLoader) -> float: """Compute the average number of neighbors in a dataset. @@ -249,7 +254,7 @@ def compute_avg_num_neighbors(data_loader: torch.utils.data.DataLoader) -> float num_neighbors = [] for batch in data_loader: - unique_neighbors_list = torch.unique(batch['nbr_list'], dim=0) # remove repeated neighbors + unique_neighbors_list = torch.unique(batch['nbr_list'], dim=0) # remove repeated neighbors receivers = unique_neighbors_list[:, 1] _, counts = torch.unique(receivers, return_counts=True) @@ -261,7 +266,15 @@ def compute_avg_num_neighbors(data_loader: torch.utils.data.DataLoader) -> float return detach(avg_num_neighbors, to_numpy=True).item() -def update_mace_init_params(train: Dataset, val: Dataset, train_loader: torch.utils.data.DataLoader, model_params: Dict, logger: logging.Logger = None) -> Dict[str, Union[int, float, np.ndarray, List[int]]]: +def update_mace_init_params(train: Dataset, + val: Dataset, + train_loader: torch.utils.data.DataLoader, + model_params: Dict, + logger: logging.Logger = None) -> Dict[str, + Union[int, + float, + np.ndarray, + List[int]]]: """Update the MACE model initialization parameters based values obtained from training and validation datasets. Args: @@ -276,9 +289,10 @@ def update_mace_init_params(train: Dataset, val: Dataset, train_loader: torch.ut """ if not logger: logger = logging.getLogger(__name__) - + # z_table - z_table = get_atomic_number_table_from_zs([int(z) for data_split in (train, val) for data in data_split for z in detach(data["nxyz"][:, 0], to_numpy=True)]) + z_table = get_atomic_number_table_from_zs([int(z) for data_split in (train, val) + for data in data_split for z in detach(data["nxyz"][:, 0], to_numpy=True)]) logger.info("Z Table %s", z_table.zs) # avg_num_neighbors @@ -291,7 +305,7 @@ def update_mace_init_params(train: Dataset, val: Dataset, train_loader: torch.ut # {8: -4.930998234144857, 38: -5.8572783662579795, 77: -8.316066722236071} atomic_energies_dict = compute_average_E0s(train, z_table) atomic_energies: np.ndarray = np.array( - [atomic_energies_dict[z] for z in z_table.zs] + [atomic_energies_dict[z] for z in z_table.zs] ) logger.info("Atomic energies: %s", atomic_energies.tolist()) @@ -309,6 +323,7 @@ def update_mace_init_params(train: Dataset, val: Dataset, train_loader: torch.ut return model_params + class NffBatch(Batch): def __init__(self, batch=None, ptr=None, **kwargs): super().__init__(batch=batch, ptr=ptr, **kwargs) diff --git a/nff/io/openmm_calculators.py b/nff/io/openmm_calculators.py index a7b8caac..9edb9db1 100644 --- a/nff/io/openmm_calculators.py +++ b/nff/io/openmm_calculators.py @@ -15,44 +15,40 @@ import parmed as pmd import nff.utils.constants as const -from nff.md.colvars import ColVar - +from nff.md.colvars import ColVar nonbondedMethod = { - 'NonPeriodic': app.CutoffNonPeriodic, - } - - - + 'NonPeriodic': app.CutoffNonPeriodic, +} class BiasBase(Calculator): """Basic Calculator class with neural force field - + Args: model: the deural force field model cv_def: lsit of Collective Variable (CV) definitions [["cv_type", [atom_indices], np.array([minimum, maximum]), bin_width], [possible second dimension]] equil_temp: float temperature of the simulation (important for extended system dynamics) """ - + implemented_properties = ['energy', 'forces', - 'energy_unbiased', 'forces_unbiased', - 'cv_vals', 'ext_pos', 'cv_invmass', - 'grad_length', 'cv_grad_lengths', + 'energy_unbiased', 'forces_unbiased', + 'cv_vals', 'ext_pos', 'cv_invmass', + 'grad_length', 'cv_grad_lengths', 'cv_dot_PES', 'const_vals'] - + def __init__(self, mmparms, cv_defs: list[dict], equil_temp: float = 300.0, extra_constraints: list[dict] = None, **kwargs): - + Calculator.__init__(self, **kwargs) - - ## OpenMM setup + + # OpenMM setup if 'prmtop' in mmparms.keys(): parm = pmd.load_file(mmparms['prmtop']) elif 'parm7' in mmparms.keys(): @@ -62,117 +58,114 @@ def __init__(self, raise NotImplemented # in case we need PBC, the pdb contains the box values pdb = app.PDBFile(mmparms['pdb']) - + system = parm.createSystem(nonbondedMethod=nonbondedMethod[mmparms['nonbonded']], - nonbondedCutoff=mmparms['nonbonded_cutoff'] * unit.nanometers, - ) + nonbondedCutoff=mmparms['nonbonded_cutoff'] * unit.nanometers, + ) platform = omm.Platform.getPlatformByName(mmparms['platform']) # this will not be used integrator = omm.LangevinIntegrator( 0.0 * unit.kelvin, 1.0 / unit.picoseconds, 0.1 * unit.picoseconds ) self.context = omm.Context(system, integrator, platform) - - ## BiasBase setup + + # BiasBase setup self.cv_defs = cv_defs self.num_cv = len(cv_defs) self.the_cv = [] for cv_def in self.cv_defs: self.the_cv.append(ColVar(cv_def["definition"])) - + self.equil_temp = equil_temp - - self.ext_coords = np.zeros(shape=(self.num_cv,1)) - self.ext_masses = np.zeros(shape=(self.num_cv,1)) - self.ext_forces = np.zeros(shape=(self.num_cv,1)) - self.ext_vel = np.zeros(shape=(self.num_cv,1)) - self.ext_binwidth = np.zeros(shape=(self.num_cv,1)) - self.ext_k = np.zeros(shape=(self.num_cv,)) + + self.ext_coords = np.zeros(shape=(self.num_cv, 1)) + self.ext_masses = np.zeros(shape=(self.num_cv, 1)) + self.ext_forces = np.zeros(shape=(self.num_cv, 1)) + self.ext_vel = np.zeros(shape=(self.num_cv, 1)) + self.ext_binwidth = np.zeros(shape=(self.num_cv, 1)) + self.ext_k = np.zeros(shape=(self.num_cv,)) self.ext_dt = 0.0 - - self.ranges = np.zeros(shape=(self.num_cv,2)) - self.margins = np.zeros(shape=(self.num_cv,1)) - self.conf_k = np.zeros(shape=(self.num_cv,1)) - + + self.ranges = np.zeros(shape=(self.num_cv, 2)) + self.margins = np.zeros(shape=(self.num_cv, 1)) + self.conf_k = np.zeros(shape=(self.num_cv, 1)) + for ii, cv in enumerate(self.cv_defs): if 'range' in cv.keys(): self.ext_coords[ii] = cv['range'][0] self.ranges[ii] = cv['range'] else: raise PropertyNotPresent('range') - + if 'margin' in cv.keys(): self.margins[ii] = cv['margin'] - + if 'conf_k' in cv.keys(): self.conf_k[ii] = cv['conf_k'] - + if 'ext_k' in cv.keys(): self.ext_k[ii] = cv['ext_k'] elif 'ext_sigma' in cv.keys(): self.ext_k[ii] = (units.kB * self.equil_temp) / ( - cv['ext_sigma'] * cv['ext_sigma']) + cv['ext_sigma'] * cv['ext_sigma']) else: raise PropertyNotPresent('ext_k/ext_sigma') - if 'type' not in cv.keys(): self.cv_defs[ii]['type'] = 'not_angle' else: self.cv_defs[ii]['type'] = cv['type'] - + self.constraints = None self.num_const = 0 - if extra_constraints != None: + if extra_constraints is not None: self.constraints = [] for cv in extra_constraints: self.constraints.append({}) - + self.constraints[-1]['func'] = CV(cv["definition"]) - + self.constraints[-1]['pos'] = cv['pos'] if 'k' in cv.keys(): self.constraints[-1]['k'] = cv['k'] elif 'sigma' in cv.keys(): self.constraints[-1]['k'] = (units.kB * self.equil_temp) / ( - cv['sigma'] * cv['sigma']) + cv['sigma'] * cv['sigma']) else: raise PropertyNotPresent('k/sigma') - + if 'type' not in cv.keys(): self.constraints[-1]['type'] = 'not_angle' else: self.constraints[-1]['type'] = cv['type'] - + self.num_const = len(self.constraints) - - - self.cvs = np.zeros(shape=(self.num_cv,1)) - self.cv_grads = np.zeros(shape=(self.num_cv, - atoms.get_positions().shape[0], - atoms.get_positions().shape[1])) - self.cv_grad_lens = np.zeros(shape=(self.num_cv,1)) - self.cv_invmass = np.zeros(shape=(self.num_cv,1)) - self.cv_dot_PES = np.zeros(shape=(self.num_cv,1)) - - + + self.cvs = np.zeros(shape=(self.num_cv, 1)) + self.cv_grads = np.zeros(shape=(self.num_cv, + atoms.get_positions().shape[0], + atoms.get_positions().shape[1])) + self.cv_grad_lens = np.zeros(shape=(self.num_cv, 1)) + self.cv_invmass = np.zeros(shape=(self.num_cv, 1)) + self.cv_dot_PES = np.zeros(shape=(self.num_cv, 1)) + def _update_bias(self, xi: np.ndarray): pass - + def _propagate_ext(self): pass - + def _up_extvel(self): pass - + def _check_boundaries(self, xi: np.ndarray): - in_bounds = ((xi <= self.ranges[:,1]).all() and - (xi >= self.ranges[:,0]).all()) + in_bounds = ((xi <= self.ranges[:, 1]).all() and + (xi >= self.ranges[:, 0]).all()) return in_bounds - - def diff(self, - a: Union[np.ndarray, float], - b: Union[np.ndarray, float], + + def diff(self, + a: Union[np.ndarray, float], + b: Union[np.ndarray, float], cv_type: str ) -> Union[np.ndarray, float]: """get difference of elements of numbers or arrays @@ -199,27 +192,27 @@ def diff(self, diff -= 2 * np.pi return diff - - def step_bias(self, - xi: np.ndarray, - grad_xi: np.ndarray, - ) -> Tuple[np.ndarray, np.ndarray]: + + def step_bias(self, + xi: np.ndarray, + grad_xi: np.ndarray, + ) -> Tuple[np.ndarray, np.ndarray]: """energy and gradient of bias - + Args: curr_cv: current value of the cv cv_index: for multidimensional FES - + Returns: bias_ener: bias energy bias_grad: gradiant of the bias in CV space, needs to be dotted with the cv_gradient """ - + self._propagate_ext() - + bias_grad = np.zeros_like(grad_xi[0]) - bias_ener = 0.0 - + bias_ener = 0.0 + for i in range(self.num_cv): # harmonic coupling of extended coordinate to reaction coordinate dxi = self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]['type']) @@ -235,47 +228,44 @@ def step_bias(self, elif self.ext_coords[i] < (self.ranges[i][0] - self.margins[i]): r = self.diff(self.ranges[i][0] - self.margins[i], self.ext_coords[i], self.cv_defs[i]['type']) self.ext_forces[i] += self.conf_k[i] * r - + self._update_bias(xi) - self._up_extvel() - + self._up_extvel() + return bias_ener, bias_grad - - + def harmonic_constraint(self, xi: np.ndarray, grad_xi: np.ndarray, - ) -> Tuple[np.ndarray, np.ndarray]: + ) -> Tuple[np.ndarray, np.ndarray]: """energy and gradient of additional harmonic constraint - + Args: xi: current value of constraint "CV" grad_xi: Cartesian gradient of these CVs - + Returns: constr_ener: constraint energy constr_grad: gradient of the constraint energy - + """ - + constr_grad = np.zeros_like(grad_xi[0]) - constr_ener = 0.0 - + constr_ener = 0.0 + for i in range(self.num_const): dxi = self.diff(xi[i], self.constraints[i]['pos'], self.constraints[i]['type']) constr_grad += self.constraints[i]['k'] * dxi * grad_xi[i] constr_ener += 0.5 * self.constraints[i]['k'] * dxi**2 - + return constr_ener, constr_grad - - def calculate( self, atoms=None, - properties=['energy', 'forces', - 'energy_unbiased', 'forces_unbiased', - 'cv_vals', 'cv_invmass', + properties=['energy', 'forces', + 'energy_unbiased', 'forces_unbiased', + 'cv_vals', 'cv_invmass', 'grad_length', 'cv_grad_lengths', 'cv_dot_PES', 'const_vals'], system_changes=all_changes, ): @@ -288,50 +278,50 @@ def calculate( properties: list of keywords that can be present in self.results system_changes (default from ase) """ - + # for backwards compatability if getattr(self, "properties", None) is None: self.properties = properties Calculator.calculate(self, atoms, self.properties, system_changes) - + # run OpenMM - numpy_pos = 0.1 * atoms.get_positions() # A to nm - new_positions = ([omm.Vec3(*xyz.tolist()) for xyz in numpy_pos])*unit.nanometers + numpy_pos = 0.1 * atoms.get_positions() # A to nm + new_positions = ([omm.Vec3(*xyz.tolist()) for xyz in numpy_pos]) * unit.nanometers self.context.setPositions(new_positions) state = self.context.getState(getForces=True, getEnergy=True) model_energy = (state.getPotentialEnergy().value_in_unit( - unit.kilocalories/unit.moles) / const.EV_TO_KCAL_MOL) + unit.kilocalories / unit.moles) / const.EV_TO_KCAL_MOL) model_forces = (state.getForces(asNumpy=True).value_in_unit( - unit.kilocalories/(unit.moles*unit.angstroms)) / const.EV_TO_KCAL_MOL) - + unit.kilocalories / (unit.moles * unit.angstroms)) / const.EV_TO_KCAL_MOL) + inv_masses = 1. / atoms.get_masses() - M_inv = np.diag(np.repeat(inv_masses, 3).flatten()) - + M_inv = np.diag(np.repeat(inv_masses, 3).flatten()) + for ii, cv_def in enumerate(self.cv_defs): - xi, xi_grad = self.the_cv[ii](atoms) - self.cvs[ii] = xi - self.cv_grads[ii] = xi_grad + xi, xi_grad = self.the_cv[ii](atoms) + self.cvs[ii] = xi + self.cv_grads[ii] = xi_grad self.cv_grad_lens[ii] = np.linalg.norm(xi_grad) - self.cv_invmass[ii] = np.matmul(xi_grad.flatten(), np.matmul(M_inv, xi_grad.flatten())) - self.cv_dot_PES[ii] = np.dot(xi_grad.flatten(), model_forces.flatten()) - + self.cv_invmass[ii] = np.matmul(xi_grad.flatten(), np.matmul(M_inv, xi_grad.flatten())) + self.cv_dot_PES[ii] = np.dot(xi_grad.flatten(), model_forces.flatten()) + bias_ener, bias_grad = self.step_bias(self.cvs, self.cv_grads) energy = model_energy + bias_ener forces = model_forces - bias_grad - + if self.constraints: - consts = np.zeros(shape=(self.num_const,1)) - const_grads = np.zeros(shape=(self.num_const, - atoms.get_positions().shape[0], - atoms.get_positions().shape[1])) + consts = np.zeros(shape=(self.num_const, 1)) + const_grads = np.zeros(shape=(self.num_const, + atoms.get_positions().shape[0], + atoms.get_positions().shape[1])) for ii, const_dict in enumerate(self.constraints): consts[ii], const_grads[ii] = const_dict['func'](atoms) - + const_ener, const_grad = self.harmonic_constraint(consts, const_grads) energy += const_ener forces -= const_grad - + self.results = { 'energy': energy.reshape(-1), 'forces': forces.reshape(-1, 3), @@ -344,15 +334,15 @@ def calculate( 'cv_dot_PES': self.cv_dot_PES, 'ext_pos': self.ext_coords, } - + if self.constraints: self.results['const_vals'] = consts - + class eABF(BiasBase): - """extended-system Adaptive Biasing Force Calculator + """extended-system Adaptive Biasing Force Calculator class with neural force field - + Args: model: the neural force field model cv_def: lsit of Collective Variable (CV) definitions @@ -378,10 +368,9 @@ def __init__(self, equil_temp=equil_temp, **kwargs) - self.ext_dt = dt * units.fs - self.nfull = nfull - + self.nfull = nfull + for ii, cv in enumerate(self.cv_defs): if 'bin_width' in cv.keys(): self.ext_binwidth[ii] = cv['bin_width'] @@ -389,39 +378,37 @@ def __init__(self, self.ext_binwidth[ii] = cv['ext_sigma'] else: raise PropertyNotPresent('bin_width') - + if 'ext_pos' in cv.keys(): # set initial position self.ext_coords[ii] = cv['ext_pos'] else: raise PropertyNotPresent('ext_pos') - - + if 'ext_mass' in cv.keys(): self.ext_masses[ii] = cv['ext_mass'] else: raise PropertyNotPresent('ext_mass') - + # initialize extended system at target temp of MD simulation for i in range(self.num_cv): - self.ext_vel[i] = (np.random.randn() * - np.sqrt(self.equil_temp * units.kB / + self.ext_vel[i] = (np.random.randn() * + np.sqrt(self.equil_temp * units.kB / self.ext_masses[i])) - - self.friction = friction_per_ps * 1.0e-3 / units.fs - self.rand_push = np.sqrt(self.equil_temp * self.friction * + + self.friction = friction_per_ps * 1.0e-3 / units.fs + self.rand_push = np.sqrt(self.equil_temp * self.friction * self.ext_dt * units.kB / (2.0e0 * self.ext_masses)) - self.prefac1 = 2.0 / (2.0 + self.friction * self.ext_dt) - self.prefac2 = ((2.0e0 - self.friction * self.ext_dt) / - (2.0e0 + self.friction * self.ext_dt)) - + self.prefac1 = 2.0 / (2.0 + self.friction * self.ext_dt) + self.prefac2 = ((2.0e0 - self.friction * self.ext_dt) / + (2.0e0 + self.friction * self.ext_dt)) # set up all grid accumulators for ABF self.nbins_per_dim = np.array([1 for i in range(self.num_cv)]) self.grid = [] for i in range(self.num_cv): self.nbins_per_dim[i] = ( - int(np.ceil(np.abs(self.ranges[i,1] - self.ranges[i,0]) / + int(np.ceil(np.abs(self.ranges[i, 1] - self.ranges[i, 0]) / self.ext_binwidth[i])) ) self.grid.append( @@ -439,7 +426,7 @@ def __init__(self, ) self.var_force = np.zeros_like(self.bias) self.m2_force = np.zeros_like(self.bias) - + self.cv_crit = np.copy(self.bias) self.histogram = np.zeros( @@ -447,8 +434,6 @@ def __init__(self, ) self.ext_hist = np.zeros_like(self.histogram) - - def get_index(self, xi: np.ndarray) -> tuple: """get list of bin indices for current position of CVs or extended variables Args: @@ -458,18 +443,17 @@ def get_index(self, xi: np.ndarray) -> tuple: """ bin_x = np.zeros(shape=xi.shape, dtype=np.int64) for i in range(self.num_cv): - bin_x[i] = int(np.floor(np.abs(xi[i] - self.ranges[i,0]) / + bin_x[i] = int(np.floor(np.abs(xi[i] - self.ranges[i, 0]) / self.ext_binwidth[i])) return tuple(bin_x.reshape(1, -1)[0]) - - + def _update_bias(self, xi: np.ndarray): if self._check_boundaries(self.ext_coords): bink = self.get_index(self.ext_coords) self.ext_hist[bink] += 1 - + # linear ramp function ramp = ( 1.0 @@ -488,55 +472,53 @@ def _update_bias(self, self.ext_hist[bink], self.bias[i][bink], self.m2_force[i][bink], - self.ext_k[i] * + self.ext_k[i] * self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]['type']), ) - self.ext_forces[i] -= ramp * self.bias[i][bink] + self.ext_forces[i] -= ramp * self.bias[i][bink] - """ + """ Not sure how this can be dumped/printed to work with the rest # xi-conditioned accumulators for CZAR - if (xi <= self.ranges[:,1]).all() and + if (xi <= self.ranges[:,1]).all() and (xi >= self.ranges[:,0]).all(): bink = self.get_index(xi) self.histogram[bink] += 1 for i in range(self.num_cv): - dx = diff(self.ext_coords[i], self.grid[i][bink[i]], + dx = diff(self.ext_coords[i], self.grid[i][bink[i]], self.cv_defs[i]['type']) self.correction_czar[i][bink] += self.ext_k[i] * dx """ - - + def _propagate_ext(self): - self.ext_rand_gauss = np.random.randn(len(self.ext_vel),1) - + self.ext_rand_gauss = np.random.randn(len(self.ext_vel), 1) + self.ext_vel += self.rand_push * self.ext_rand_gauss self.ext_vel += 0.5e0 * self.ext_dt * self.ext_forces / self.ext_masses - self.ext_coords += self.prefac1 * self.ext_dt * self.ext_vel - + self.ext_coords += self.prefac1 * self.ext_dt * self.ext_vel + # wrap to range(-pi,pi) for angle for ii in range(self.num_cv): if self.cv_defs[ii]['type'] == 'angle': if self.ext_coords[ii] > np.pi: - self.ext_coords[ii] -= 2*np.pi + self.ext_coords[ii] -= 2 * np.pi elif self.ext_coords[ii] < -np.pi: - self.ext_coords[ii] += 2*np.pi - - + self.ext_coords[ii] += 2 * np.pi + def _up_extvel(self): - + self.ext_vel *= self.prefac2 - self.ext_vel += self.rand_push * self.ext_rand_gauss + self.ext_vel += self.rand_push * self.ext_rand_gauss self.ext_vel += 0.5e0 * self.ext_dt * self.ext_forces / self.ext_masses class WTMeABF(eABF): - """Well tempered MetaD extended-system Adaptive Biasing Force Calculator + """Well tempered MetaD extended-system Adaptive Biasing Force Calculator based on eABF class - + Args: model: the neural force field model cv_def: lsit of Collective Variable (CV) definitions @@ -571,38 +553,36 @@ def __init__(self, nfull=nfull, **kwargs) - self.hill_height = hill_height - self.hill_drop_freq = hill_drop_freq - self.hill_std = np.zeros(shape=(self.num_cv)) - self.hill_var = np.zeros(shape=(self.num_cv)) + self.hill_height = hill_height + self.hill_drop_freq = hill_drop_freq + self.hill_std = np.zeros(shape=(self.num_cv)) + self.hill_var = np.zeros(shape=(self.num_cv)) self.well_tempered_temp = well_tempered_temp - self.call_count = 0 - self.center = [] - + self.call_count = 0 + self.center = [] + for ii, cv in enumerate(self.cv_defs): if 'hill_std' in cv.keys(): self.hill_std[ii] = cv['hill_std'] - self.hill_var[ii] = cv['hill_std']*cv['hill_std'] + self.hill_var[ii] = cv['hill_std'] * cv['hill_std'] else: raise PropertyNotPresent('hill_std') - # set up all grid for MetaD potential self.metapot = np.zeros_like(self.histogram) - self.metaforce = np.zeros_like(self.bias) - - + self.metaforce = np.zeros_like(self.bias) + def _update_bias(self, xi: np.ndarray): - + mtd_forces = self.get_wtm_force(self.ext_coords) self.call_count += 1 - + if self._check_boundaries(self.ext_coords): bink = self.get_index(self.ext_coords) self.ext_hist[bink] += 1 - + # linear ramp function ramp = ( 1.0 @@ -621,12 +601,11 @@ def _update_bias(self, self.ext_hist[bink], self.bias[i][bink], self.m2_force[i][bink], - self.ext_k[i] * + self.ext_k[i] * self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]['type']), ) self.ext_forces[i] -= ramp * self.bias[i][bink] + mtd_forces[i] - def get_wtm_force(self, xi: np.ndarray) -> np.ndarray: """compute well-tempered metadynamics bias force from superposition of gaussian hills Args: @@ -634,18 +613,18 @@ def get_wtm_force(self, xi: np.ndarray) -> np.ndarray: Returns: bias_force: bias force from metadynamics """ - + is_in_bounds = self._check_boundaries(xi) - + if (self.call_count % self.hill_drop_freq == 0) and is_in_bounds: - self.center.append(np.copy(xi.reshape(-1))) - + self.center.append(np.copy(xi.reshape(-1))) + if is_in_bounds and self.num_cv == 1: bias_force, _ = self._accumulate_wtm_force(xi) else: bias_force, _ = self._analytic_wtm_force(xi) - - return bias_force + + return bias_force def _accumulate_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: @@ -672,7 +651,6 @@ def _accumulate_wtm_force(self, return self.metaforce[:, bink], self.metapot[bink] - def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: """compute analytic WTM bias force from sum of gaussians hills Args: @@ -688,45 +666,39 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: if len(self.center) == 0: print(" >>> Warning: no metadynamics hills stored") return bias_force - + ind = np.ma.indices((len(self.center),))[0] ind = np.ma.masked_array(ind) - + dist_to_centers = [] for ii in range(self.num_cv): - dist_to_centers.append(self.diff(xi[ii], np.asarray(self.center)[:,ii], self.cv_defs[ii]['type'])) - + dist_to_centers.append(self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]['type'])) + dist_to_centers = np.asarray(dist_to_centers) - + if self.num_cv > 1: - ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1,1)).all(axis=0)] = np.ma.masked + ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0)] = np.ma.masked else: - ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1,1)).all(axis=0)] = np.ma.masked - + ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0)] = np.ma.masked + # can get slow in long run, so only iterate over significant elements for i in np.nditer(ind.compressed(), flags=["zerosize_ok"]): w = self.hill_height * np.exp( -local_pot / (units.kB * self.well_tempered_temp) ) - - epot = w * np.exp(-np.power(dist_to_centers[:,i]/self.hill_std, 2).sum() / 2.0) - local_pot += epot - bias_force -= epot * dist_to_centers[:,i] / self.hill_var - - return bias_force.reshape(-1,1), local_pot - - - - + epot = w * np.exp(-np.power(dist_to_centers[:, i] / self.hill_std, 2).sum() / 2.0) + local_pot += epot + bias_force -= epot * dist_to_centers[:, i] / self.hill_var + return bias_force.reshape(-1, 1), local_pot def welford_var( - count: float, - mean: float, - M2: float, - newValue: float) -> Tuple[float, float, float]: + count: float, + mean: float, + M2: float, + newValue: float) -> Tuple[float, float, float]: """On-the-fly estimate of sample variance by Welford's online algorithm Args: count: current number of samples (with new one) diff --git a/nff/md/aims/calcs/basis.py b/nff/md/aims/calcs/basis.py index 41c32366..aba71820 100644 --- a/nff/md/aims/calcs/basis.py +++ b/nff/md/aims/calcs/basis.py @@ -553,7 +553,7 @@ def nuc_ke(r_j, prefactor = ((2) ** 0.5 * (expand_alpha_i * expand_alpha_j) ** 0.25 * (-hbar ** 2) / (2 * expand_mj)) - main_term = (1 / (4 * F ** (5/2)) + main_term = (1 / (4 * F ** (5 / 2)) * np.exp(D + E ** 2 / (4 * F)) * (C * E ** 2 + 2 * (C + B * E) * F + 4 * A * F ** 2)) @@ -627,7 +627,7 @@ def construct_ham(r_list, max_basis, max_basis).numpy() h_ad = torch.zeros(num_states, num_states, - max_basis, max_basis).numpy() + max_basis, max_basis).numpy() for key, sub_dic in couple_dic.items(): @@ -731,7 +731,7 @@ def diabat_spawn_criterion(states, Returns: thresh_dic (dict): dictionary with keys for each state, the value of which is a subdictionary. The subdictionary - contains keys for each other state. Say we're looking at + contains keys for each other state. Say we're looking at main key i and subdictionary key j. Then thresh_dic[i][j] is a boolean tensor of dimension N_I. For each Gaussian basis function in state i, it tells you whether you should @@ -785,7 +785,7 @@ def adiabat_spawn_criterion(states, Returns: thresh_dic (dict): dictionary with keys for each state, the value of which is a subdictionary. The subdictionary - contains keys for each other state. Say we're looking at + contains keys for each other state. Say we're looking at main key i and subdictionary key j. Then thresh_dic[i][j] is a boolean tensor of dimension N_I. For each Gaussian basis function in state i, it tells you whether you should diff --git a/nff/md/ci/opt.py b/nff/md/ci/opt.py index cc7ee352..4791923b 100644 --- a/nff/md/ci/opt.py +++ b/nff/md/ci/opt.py @@ -1,32 +1,11 @@ -import sys - -sys.path.append("/home/saxelrod/htvs-ax/htvs") - -import os - -import django - -os.environ["DJANGO_SETTINGS_MODULE"] = "djangochem.settings.orgel" -django.setup() - -# Shell Plus Model Imports - - -import copy -import json -import pdb -import random - -import numpy as np -from ase import Atoms, optimize, units -from ase.calculators.calculator import Calculator -from ase.io.trajectory import Trajectory as AseTrajectory -from ase.md.verlet import VelocityVerlet -from django.contrib.auth.models import Group -from django.contrib.contenttypes.models import ContentType -from django.utils import timezone -from jobs.models import Job, JobConfig -from neuralnet.utils import vib +from nff.utils.cuda import batch_to +from nff.utils import constants as const +from nff.train import load_model +from nff.nn.tensorgrad import get_schnet_hessians +from nff.io.ase_ax import AtomsBatch, NeuralFF +from nff.data import Dataset, collate_dicts +from torch.utils.data import DataLoader +from rdkit import Chem from pgmols.models import ( AtomBasis, Geom, @@ -50,17 +29,34 @@ Stoichiometry, Trajectory, ) -from rdkit import Chem -from torch.utils.data import DataLoader +from neuralnet.utils import vib +from jobs.models import Job, JobConfig +from django.utils import timezone +from django.contrib.contenttypes.models import ContentType +from django.contrib.auth.models import Group +from ase.md.verlet import VelocityVerlet +from ase.io.trajectory import Trajectory as AseTrajectory +from ase.calculators.calculator import Calculator +from ase import Atoms, optimize, units +import numpy as np +import random +import pdb +import json +import copy +import django +import os +import sys + +sys.path.append("/home/saxelrod/htvs-ax/htvs") + + +os.environ["DJANGO_SETTINGS_MODULE"] = "djangochem.settings.orgel" +django.setup() + +# Shell Plus Model Imports -from nff.data import Dataset, collate_dicts # from nff.nn.models import PostProcessModel -from nff.io.ase_ax import AtomsBatch, NeuralFF -from nff.nn.tensorgrad import get_schnet_hessians -from nff.train import load_model -from nff.utils import constants as const -from nff.utils.cuda import batch_to KT = 0.000944853 FS_TO_AU = 41.341374575751 diff --git a/nff/md/colvars.py b/nff/md/colvars.py index c48fb8e3..4c216b5d 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -1,3 +1,6 @@ +from torch import nn +from itertools import repeat +from torch.nn import ModuleDict from typing import Union, Tuple import itertools as itertools import os @@ -13,22 +16,22 @@ class ColVar(torch.nn.Module): """collective variable class - + computes cv and its Cartesian gradient """ - + implemented_cvs = ['distance', 'angle', 'dihedral', 'coordination_number', 'coordination', 'minimal_distance', - 'projecting_centroidvec', + 'projecting_centroidvec', 'projecting_veconplane', 'projecting_veconplanenormal', 'projection_channelnormal', 'Sp', 'Sd', 'adjecencey_matrix', 'energy_gap' - ] - + ] + def __init__(self, info_dict: dict): """initialization of many class variables to avoid recurrent assignment with every forward call @@ -38,77 +41,74 @@ def __init__(self, info_dict: dict): all other keys are specific to each CV """ super(ColVar, self).__init__() - self.info_dict=info_dict - + self.info_dict = info_dict + if 'name' not in info_dict.keys(): raise TypeError("CV definition is missing the key \"name\"!") - + if self.info_dict['name'] not in self.implemented_cvs: raise NotImplementedError(f"The CV {self.info_dict['name']} is not implemented!") - + if self.info_dict['name'] == 'Sp': - self.Oacid = torch.tensor(self.info_dict['x']) - self.Owater = torch.tensor(self.info_dict['y']) - self.H = torch.tensor(self.info_dict['z']) - self.Box = torch.tensor(self.info_dict.get('box',None)) - self.O = torch.cat((Oacid,Owater)) - self.do = self.info_dict['dcv1'] - self.d = self.info_dict['dcv2'] - self.ro = self.info_dict['acidhyd'] - self.r1 = self.info_dict['waterhyd'] - + self.Oacid = torch.tensor(self.info_dict['x']) + self.Owater = torch.tensor(self.info_dict['y']) + self.H = torch.tensor(self.info_dict['z']) + self.Box = torch.tensor(self.info_dict.get('box', None)) + self.O = torch.cat((Oacid, Owater)) + self.do = self.info_dict['dcv1'] + self.d = self.info_dict['dcv2'] + self.ro = self.info_dict['acidhyd'] + self.r1 = self.info_dict['waterhyd'] + elif self.info_dict['name'] == 'Sd': - self.Oacid = torch.tensor(self.info_dict['x']) - self.Owater = torch.tensor(self.info_dict['y']) - self.H = torch.tensor(self.info_dict['z']) - self.Box = torch.tensor(self.info_dict.get('box',None)) - self.O = torch.cat((Oacid,Owater)) - self.do = self.info_dict['dcv1'] - self.d = self.info_dict['dcv2'] - self.ro = self.info_dict['acidhyd'] - self.r1 = self.info_dict['waterhyd'] - - elif self.info_dict['name'] == 'adjecencey_matrix': - self.model = self.info_dict['model'] - self.device = self.info_dict['device'] - self.bond_length = self.info_dict['bond_length'] - self.cell = self.info_dict.get('box',None) + self.Oacid = torch.tensor(self.info_dict['x']) + self.Owater = torch.tensor(self.info_dict['y']) + self.H = torch.tensor(self.info_dict['z']) + self.Box = torch.tensor(self.info_dict.get('box', None)) + self.O = torch.cat((Oacid, Owater)) + self.do = self.info_dict['dcv1'] + self.d = self.info_dict['dcv2'] + self.ro = self.info_dict['acidhyd'] + self.r1 = self.info_dict['waterhyd'] + + elif self.info_dict['name'] == 'adjecencey_matrix': + self.model = self.info_dict['model'] + self.device = self.info_dict['device'] + self.bond_length = self.info_dict['bond_length'] + self.cell = self.info_dict.get('box', None) self.atom_numbers = torch.tensor(self.info_dict['atom_numbers']) - self.target = self.info_dict['target'] - self.model = self.model.to(self.device) + self.target = self.info_dict['target'] + self.model = self.model.to(self.device) self.model.eval() - + elif self.info_dict['name'] == 'projecting_centroidvec': - self.vector_inds = self.info_dict['vector'] - self.mol_inds = torch.LongTensor(self.info_dict['indices']) + self.vector_inds = self.info_dict['vector'] + self.mol_inds = torch.LongTensor(self.info_dict['indices']) self.reference_inds = self.info_dict['reference'] - + elif self.info_dict['name'] == 'projecting_veconplane': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) + self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) self.ring_inds = torch.LongTensor(self.info_dict['ring_inds']) - + elif self.info_dict['name'] == 'projecting_veconplanenormal': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) + self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) self.ring_inds = torch.LongTensor(self.info_dict['ring_inds']) - + elif self.info_dict['name'] == 'projection_channelnormal': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) - self.g1_inds = torch.LongTensor(self.info_dict['g1_inds']) - self.g2_inds = torch.LongTensor(self.info_dict['g2_inds']) - + self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) + self.g1_inds = torch.LongTensor(self.info_dict['g1_inds']) + self.g2_inds = torch.LongTensor(self.info_dict['g2_inds']) + elif self.info_dict['name'] == 'energy_gap': self.device = self.info_dict['device'] - path = self.info_dict['path'] - model_type = self.info_dict['model_type'] - self.model = load_model(path, - model_type=model_type, - device=self.device) - self.model = self.model.to(self.device) + path = self.info_dict['path'] + model_type = self.info_dict['model_type'] + self.model = load_model(path, + model_type=model_type, + device=self.device) + self.model = self.model.to(self.device) self.model.eval() - - - def _get_com(self, indices: Union[int, list]) -> torch.tensor: """get center of mass (com) of group of atoms Args: @@ -117,12 +117,12 @@ def _get_com(self, indices: Union[int, list]) -> torch.tensor: com (torch.tensor): Center of Mass """ masses = torch.from_numpy(self.atoms.get_masses()) - + if hasattr(indices, "__len__"): # compute center of mass for group of atoms center = torch.matmul(self.xyz[indices].T, masses[indices]) - m_tot = masses[indices].sum() - com = center / m_tot + m_tot = masses[indices].sum() + com = center / m_tot else: # only one atom @@ -130,9 +130,9 @@ def _get_com(self, indices: Union[int, list]) -> torch.tensor: com = self.xyz[atom] return com - + def distance(self, - index_list: list[Union[int, list]]) -> torch.tensor: + index_list: list[Union[int, list]]) -> torch.tensor: """distance between two mass centers in range(0, inf) Args: distance beteen atoms: [ind0, ind1] @@ -153,9 +153,9 @@ def distance(self, cv = torch.linalg.norm(r12) return cv - + def angle(self, - index_list: list[Union[int, list]]) -> torch.tensor: + index_list: list[Union[int, list]]) -> torch.tensor: """get angle between three mass centers in range(-pi,pi) Args: index_list @@ -186,9 +186,9 @@ def angle(self, cv = torch.arccos(torch.dot(-q12_u, q23_u)) return cv - + def dihedral(self, - index_list: list[Union[int, list]]) -> torch.tensor: + index_list: list[Union[int, list]]) -> torch.tensor: """torsion angle between four mass centers in range(-pi,pi) Params: self.info_dict['index_list'] @@ -221,9 +221,9 @@ def dihedral(self, n2 = q34 - torch.dot(q34, q23_u) * q23_u cv = torch.atan2(torch.dot(torch.cross(q23_u, n1), n2), torch.dot(n1, n2)) - + return cv - + def coordination_number(self, index_list: list[int], switch_distance: float) -> torch.tensor: @@ -244,9 +244,9 @@ def coordination_number(self, cv = (1. - scaled_distance.pow(6)) / ((1. - scaled_distance.pow(12))) return cv - + def coordination(self, - index_list: list[list[int]], + index_list: list[list[int]], switch_distance: float) -> torch.tensor: """sum of coordination numbers between two sets of atoms in range(0, 1) Args: @@ -261,14 +261,14 @@ def coordination(self, ) cv = torch.tensor(0.0) - + for idx1, idx2 in itertools.product(index_list[0], index_list[1]): cv = cv + self.coordination_number([idx1, idx2], switch_distance) - + return cv - + def minimal_distance(self, - index_list: list[list[int]]) -> torch.tensor: + index_list: list[list[int]]) -> torch.tensor: """minimal distance between two sets of atoms Args: distance between atoms: [[ind00, ind01, ...], [ind10, ind11, ...]] @@ -281,18 +281,18 @@ def minimal_distance(self, ) distances = torch.zeros(len(index_list[0]) * len(index_list[1])) - + for ii, (idx1, idx2) in enumerate(itertools.product(index_list[0], index_list[1])): distances[ii] = self.distance([idx1, idx2]) - + return distances.min() - + def projecting_centroidvec(self): """ Projection of a position vector onto a reference vector Atomic indices are used to determine the coordiantes of the vectors. Params - ------ + ------ vector: list of int List of the indices of atoms that define the vector on which the position vector is projected indices: list if int @@ -300,22 +300,22 @@ def projecting_centroidvec(self): reference: list of int List of atomic indices that are used as reference for the position vector """ - vector_pos = self.xyz[self.vector_inds] - vector = vector_pos[1] - vector_pos[0] - vector = vector / torch.linalg.norm(vector) - mol_pos = self.xyz[self.mol_inds] + vector_pos = self.xyz[self.vector_inds] + vector = vector_pos[1] - vector_pos[0] + vector = vector / torch.linalg.norm(vector) + mol_pos = self.xyz[self.mol_inds] reference_pos = self.xyz[self.reference_inds] - mol_centroid = mol_pos.mean(axis=0) # mol center - - reference_centroid = reference_pos.mean(axis=0) # centroid of the whole structure - + mol_centroid = mol_pos.mean(axis=0) # mol center + + reference_centroid = reference_pos.mean(axis=0) # centroid of the whole structure + # position vector with respect to the structure centroid - rel_mol_pos = mol_centroid - reference_centroid - + rel_mol_pos = mol_centroid - reference_centroid + # projection cv = torch.dot(rel_mol_pos, vector) return cv - + def projecting_veconplane(self): """ Projection of a position vector onto a the average plane @@ -328,24 +328,24 @@ def projecting_veconplane(self): ring_inds: list of int List of atomic indices of the ring for which the average plane is calculated. """ - mol_coors = self.xyz[self.mol_inds] + mol_coors = self.xyz[self.mol_inds] ring_coors = self.xyz[self.ring_inds] - - mol_cm = mol_coors.mean(axis=0) # mol center - ring_cm = ring_coors.mean(axis=0) # ring center + + mol_cm = mol_coors.mean(axis=0) # mol center + ring_cm = ring_coors.mean(axis=0) # ring center # ring atoms to center ring_coors = ring_coors - ring_cm r1 = torch.zeros(3, device=ring_coors.device) - N = len(ring_coors) # number of atoms in the ring + N = len(ring_coors) # number of atoms in the ring for i, rl0 in enumerate(ring_coors): r1 = r1 + rl0 * np.sin(2 * np.pi * i / N) - r1 = r1/N + r1 = r1 / N r2 = torch.zeros(3, device=ring_coors.device) for i, rl0 in enumerate(ring_coors): r2 = r2 + rl0 * np.cos(2 * np.pi * i / N) - r2 = r2/N + r2 = r2 / N plane_vec = torch.cross(r1, r2) plane_vec = plane_vec / torch.linalg.norm(plane_vec) @@ -353,7 +353,7 @@ def projecting_veconplane(self): cv = torch.dot(pos_vec, plane_vec) return cv - + def projecting_veconplanenormal(self): """ Projection of a position vector onto the average plane @@ -366,26 +366,26 @@ def projecting_veconplanenormal(self): ring_inds: list of int List of atomic indices of the ring for which the average plane is calculated. """ - - mol_coors = self.xyz[self.mol_inds] + + mol_coors = self.xyz[self.mol_inds] ring_coors = self.xyz[self.ring_inds] - - mol_cm = mol_coors.mean(axis=0) # mol center + + mol_cm = mol_coors.mean(axis=0) # mol center # mol_cm = self._get_com(self.mol_inds) - ring_cm = ring_coors.mean(axis=0) # ring center + ring_cm = ring_coors.mean(axis=0) # ring center # ring atoms to center, center of geometry! ring_coors = ring_coors - ring_cm r1 = torch.zeros(3, device=ring_coors.device) - N = len(ring_coors) # number of atoms in the ring + N = len(ring_coors) # number of atoms in the ring for i, rl0 in enumerate(ring_coors): r1 = r1 + rl0 * np.sin(2 * np.pi * i / N) - r1 = r1/N + r1 = r1 / N r2 = torch.zeros(3, device=ring_coors.device) for i, rl0 in enumerate(ring_coors): r2 = r2 + rl0 * np.cos(2 * np.pi * i / N) - r2 = r2/N + r2 = r2 / N # normalize r1 and r2 r1 = r1 / torch.linalg.norm(r1) @@ -396,7 +396,7 @@ def projecting_veconplanenormal(self): proj2 = torch.dot(pos_vec, r2) cv = proj1 + proj2 return torch.abs(cv) - + def projection_channelnormal(self): """ Projection of a position vector onto the vector @@ -411,298 +411,281 @@ def projection_channelnormal(self): g2_inds: list of int List of atomic indices denoting "end" of channel """ - - mol_coors = self.xyz[self.mol_inds] - g1_coors = self.xyz[self.g1_inds] - g2_coors = self.xyz[self.g2_inds] - - mol_cm = self._get_com(self.mol_inds) - center_g1 = g1_coors.mean(axis=0) - center_g2 = g2_coors.mean(axis=0) - center = (center_g1 + center_g2)/2 - - normal_vec = (center_g2 - center_g1)/torch.linalg.norm(center_g2 - center_g1) - rel_pos = mol_cm - center + + mol_coors = self.xyz[self.mol_inds] + g1_coors = self.xyz[self.g1_inds] + g2_coors = self.xyz[self.g2_inds] + + mol_cm = self._get_com(self.mol_inds) + center_g1 = g1_coors.mean(axis=0) + center_g2 = g2_coors.mean(axis=0) + center = (center_g1 + center_g2) / 2 + + normal_vec = (center_g2 - center_g1) / torch.linalg.norm(center_g2 - center_g1) + rel_pos = mol_cm - center cv = torch.dot(rel_pos, normal_vec) return cv - + def adjacency_matrix_cv(self): """Docstring """ - edges, atomslist, Natoms, adjacency_matrix = get_adjacency_matrix(self.xyz, - self.atom_numbers, - self.bond_length, + edges, atomslist, Natoms, adjacency_matrix = get_adjacency_matrix(self.xyz, + self.atom_numbers, + self.bond_length, cell=self.cell, device=self.device) - - pred = self.model(atomslist, edges, Natoms, adjacency_matrix)[0] - rmsd = (pred-self.target).norm() - cv = rmsd.to('cpu').view(-1,1) - + + pred = self.model(atomslist, edges, Natoms, adjacency_matrix)[0] + rmsd = (pred - self.target).norm() + cv = rmsd.to('cpu').view(-1, 1) + return cv - + def deproton1(self): """ Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 https://www.pnas.org/doi/10.1073/pnas.1819771116 - + Sp describes the proton exchange between acid-base pairs """ - + dis_mat = self.xyz[None, :, :] - self.xyz[:, None, :] - + if Box is not None: cell_dim = Box.to(dis_mat.device) - shift = torch.round(torch.divide(dis_mat,cell_dim)) - offsets = -shift - dis_mat = dis_mat+offsets*cell_dim - + shift = torch.round(torch.divide(dis_mat, cell_dim)) + offsets = -shift + dis_mat = dis_mat + offsets * cell_dim + dis_sq = torch.linalg.norm(dis_mat, dim=-1) - dis = dis_sq[self.O,:][:,self.H] + dis = dis_sq[self.O, :][:, self.H] - dis1 = dis_sq[self.Oacid,:][:,self.Owater] - cvmatrix = torch.exp(-self.do * dis) - cvmatrix = cvmatrix / cvmatrix.sum(0) + dis1 = dis_sq[self.Oacid, :][:, self.Owater] + cvmatrix = torch.exp(-self.do * dis) + cvmatrix = cvmatrix / cvmatrix.sum(0) cvmatrixw = cvmatrix[self.Oacid.shape[0]:].sum(-1) - self.r1 - cvmatrix = cvmatrix[:self.Oacid.shape[0]].sum(-1) - self.ro - cv1 = 2 * cvmatrix.sum() + cvmatrixw.sum() - + cvmatrix = cvmatrix[:self.Oacid.shape[0]].sum(-1) - self.ro + cv1 = 2 * cvmatrix.sum() + cvmatrixw.sum() + return cv1 - + def deproton2(self): """ Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 https://www.pnas.org/doi/10.1073/pnas.1819771116 - + Sd describes tge distance between acid-base pairs """ - + dis_mat = self.xyz[None, :, :] - self.xyz[:, None, :] - + if Box is not None: cell_dim = Box.to(dis_mat.device) - shift = torch.round(torch.divide(dis_mat,cell_dim)) - offsets = -shift - dis_mat = dis_mat + offsets * cell_dim - - dis_sq = torch.linalg.norm(dis_mat,dim=-1) - dis = dis_sq[self.O,:][:,self.H] - dis1 = dis_sq[self.Oacid,:][:,self.Owater] - cvmatrix = torch.exp(-self.do * dis) - cvmatrix = cvmatrix / cvmatrix.sum(0) + shift = torch.round(torch.divide(dis_mat, cell_dim)) + offsets = -shift + dis_mat = dis_mat + offsets * cell_dim + + dis_sq = torch.linalg.norm(dis_mat, dim=-1) + dis = dis_sq[self.O, :][:, self.H] + dis1 = dis_sq[self.Oacid, :][:, self.Owater] + cvmatrix = torch.exp(-self.do * dis) + cvmatrix = cvmatrix / cvmatrix.sum(0) cvmatrixx = torch.exp(-self.d * dis) cvmatrixx = cvmatrixx / cvmatrixx.sum(0) cvmatrixw = cvmatrixx[self.Oacid.shape[0]:].sum(-1) - self.r1 - cvmatrix = cvmatrixx[:self.Oacid.shape[0]].sum(-1) - self.ro - cvmatrix1 = torch.cat((cvmatrix,cvmatrixw)) - cvmatrix2 = torch.matmul(cvmatrix.view(1,-1).t(),cvmatrixw.view(1,-1)) + cvmatrix = cvmatrixx[:self.Oacid.shape[0]].sum(-1) - self.ro + cvmatrix1 = torch.cat((cvmatrix, cvmatrixw)) + cvmatrix2 = torch.matmul(cvmatrix.view(1, -1).t(), cvmatrixw.view(1, -1)) cvmatrix2 = -cvmatrix2 * dis1 - cv2 = cvmatrix2.sum() - + cv2 = cvmatrix2.sum() + return cv2 - - - def energy_gap(self, enkey1, enkey2) : + + def energy_gap(self, enkey1, enkey2): """get energy gap betweentwo adiabatic PES Args: enkey1 (str): key of one adiabatic PES enkey2 (str): key of the other PES - + Returns: - cv (torch.tensor): computed energy gap + cv (torch.tensor): computed energy gap """ - batch = batch_to(self.atoms.get_batch(), self.device) - pred = self.model(batch, device=self.device) + batch = batch_to(self.atoms.get_batch(), self.device) + pred = self.model(batch, device=self.device) energy_1 = pred[enkey1] energy_2 = pred[enkey2] - e_diff = energy_2 - energy_1 - - cv = torch.abs(e_diff) - cv_grad = pred[enkey2+'_grad'] - pred[enkey1+'_grad'] + e_diff = energy_2 - energy_1 + + cv = torch.abs(e_diff) + cv_grad = pred[enkey2 + '_grad'] - pred[enkey1 + '_grad'] if e_diff < 0: cv_grad *= -1.0 - + return cv, cv_grad - def forward(self, atoms): """switch function to call the right CV-func """ - + self.xyz = torch.from_numpy(atoms.get_positions()) - self.xyz.requires_grad=True - + self.xyz.requires_grad = True + self.atoms = atoms - - if self.info_dict['name'] == 'distance': + + if self.info_dict['name'] == 'distance': cv = self.distance(self.info_dict['index_list']) cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'angle': cv = self.angle(self.info_dict['index_list']) cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'dihedral': cv = self.dihedral(self.info_dict['index_list']) cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'coordination_number': cv = self.coordination_number(self.info_dict['index_list'], self.info_dict['switching_dist']) cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'coordination': cv = self.coordination(self.info_dict['index_list'], self.info_dict['switching_dist']) cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'minimal_distance': cv = self.minimal_distance(self.info_dict['index_list']) cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'projecting_centroidvec': - cv = self.projecting_centroidvec() + cv = self.projecting_centroidvec() cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'projecting_veconplane': - cv = self.projecting_veconplane() + cv = self.projecting_veconplane() cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'projecting_veconplanenormal': - cv = self.projecting_veconplanenormal() + cv = self.projecting_veconplanenormal() cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'projection_channelnormal': - cv = self.projection_channelnormal() + cv = self.projection_channelnormal() cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'Sp': cv = self.deproton1() cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'Sd': cv = self.deproton2() cv_grad = compute_grad(inputs=self.xyz, output=cv) - + elif self.info_dict['name'] == 'energy_gap': cv, cv_grad = self.energy_gap(self.info_dict['enkey_1'], self.info_dict['enkey_2']) - + return cv.detach().cpu().numpy(), cv_grad.detach().cpu().numpy() - - - - - - - - - - - - - - - - - - - - - -# implement SMILES to graph function + + +# implement SMILES to graph function def smiles2graph(smiles): ''' Transfrom smiles into a list nodes (atomic number) - - Args: + + Args: smiles (str): SMILES strings - - return: - z(np.array), A (np.array): list of atomic numbers, adjancency matrix + + return: + z(np.array), A (np.array): list of atomic numbers, adjancency matrix ''' - - mol = Chem.MolFromSmiles( smiles ) # no hydrogen - z = np.array( [atom.GetAtomicNum() for atom in mol.GetAtoms()] ) + + mol = Chem.MolFromSmiles(smiles) # no hydrogen + z = np.array([atom.GetAtomicNum() for atom in mol.GetAtoms()]) A = np.stack(Chem.GetAdjacencyMatrix(mol)) - #np.fill_diagonal(A,1) + # np.fill_diagonal(A,1) return z, A + + class GraphDataset(torch.utils.data.Dataset): def __init__(self, - AtomicNum_list, - Edge_list, + AtomicNum_list, + Edge_list, Natom_list, Adjacency_matrix_list ): - ''' GraphDataset object - - Args: + + Args: z_list (list of torch.LongTensor) a_list (list of torch.LongTensor) N_list (list of int) - + ''' - self.AtomicNum_list = AtomicNum_list # atomic number - self.Edge_list = Edge_list # edge list - self.Natom_list = Natom_list # Number of atoms - self.Adjacency_matrix_list=Adjacency_matrix_list + self.AtomicNum_list = AtomicNum_list # atomic number + self.Edge_list = Edge_list # edge list + self.Natom_list = Natom_list # Number of atoms + self.Adjacency_matrix_list = Adjacency_matrix_list + def __len__(self): return len(self.Natom_list) def __getitem__(self, idx): - + AtomicNum = torch.LongTensor(self.AtomicNum_list[idx]) Edge = torch.LongTensor(self.Edge_list[idx]) Natom = self.Natom_list[idx] Adjacency_matrix = self.Adjacency_matrix_list[idx] - - return AtomicNum, Edge, Natom,Adjacency_matrix + + return AtomicNum, Edge, Natom, Adjacency_matrix + + def collate_graphs(batch): '''Batch multiple graphs into one batched graph - + Args: - - batch (tuple): tuples of AtomicNum, Edge, Natom obtained from GraphDataset.__getitem__() - - Return + + batch (tuple): tuples of AtomicNum, Edge, Natom obtained from GraphDataset.__getitem__() + + Return (tuple): Batched AtomicNum, Edge, Natom - + ''' - + AtomicNum_batch = [] Edge_batch = [] Natom_batch = [] - Adjacency_matrix_batch=[] + Adjacency_matrix_batch = [] cumulative_atoms = np.cumsum([0] + [b[2] for b in batch])[:-1] - + for i in range(len(batch)): - z, a, N,A = batch[i] + z, a, N, A = batch[i] index_shift = cumulative_atoms[i] a = a + index_shift - AtomicNum_batch.append(z) + AtomicNum_batch.append(z) Edge_batch.append(a) Natom_batch.append(N) Adjacency_matrix_batch.append(A) - + AtomicNum_batch = torch.cat(AtomicNum_batch) Edge_batch = torch.cat(Edge_batch, dim=1) Natom_batch = Natom_batch - #Adjacency_matrix_batch=torch.block_diag(*Adjacency_matrix_batch) - Adjacency_matrix_batch=torch.cat(Adjacency_matrix_batch,dim=0).view(-1,1) - - return AtomicNum_batch, Edge_batch, Natom_batch,Adjacency_matrix_batch -from itertools import repeat + # Adjacency_matrix_batch=torch.block_diag(*Adjacency_matrix_batch) + Adjacency_matrix_batch = torch.cat(Adjacency_matrix_batch, dim=0).view(-1, 1) + + return AtomicNum_batch, Edge_batch, Natom_batch, Adjacency_matrix_batch + + def scatter_add(src, index, dim_size, dim=-1, fill_value=0): - ''' - Sums all values from the src tensor into out at the indices specified in the index - tensor along a given axis dim. + Sums all values from the src tensor into out at the indices specified in the index + tensor along a given axis dim. ''' - + index_size = list(repeat(1, src.dim())) index_size[dim] = src.size(dim) index = index.view(index_size).expand_as(src) - + dim = range(src.dim())[dim] out_size = list(src.size()) out_size[dim] = dim_size @@ -710,172 +693,185 @@ def scatter_add(src, index, dim_size, dim=-1, fill_value=0): out = src.new_full(out_size, fill_value) return out.scatter_add_(dim, index, src) -from torch import nn -from torch.nn import ModuleDict + class GNN(torch.nn.Module): ''' - A GNN model + A GNN model ''' + def __init__(self, n_convs=3, n_embed=64): super(GNN, self).__init__() self.atom_embed = nn.Embedding(100, n_embed) # Declare MLPs in a ModuleList self.convolutions = nn.ModuleList( - [ + [ ModuleDict({ - 'update_mlp': nn.Sequential(nn.Linear(n_embed, n_embed), - nn.ReLU(), + 'update_mlp': nn.Sequential(nn.Linear(n_embed, n_embed), + nn.ReLU(), nn.Linear(n_embed, n_embed)), - 'message_mlp': nn.Sequential(nn.Linear(n_embed, n_embed), - nn.ReLU(), - nn.Linear(n_embed, n_embed)) + 'message_mlp': nn.Sequential(nn.Linear(n_embed, n_embed), + nn.ReLU(), + nn.Linear(n_embed, n_embed)) }) for _ in range(n_convs) ] - ) + ) # Declare readout layers - #self.readout = nn.Sequential(nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, 1)) - - def forward(self, AtomicNum, Edge, Natom,adjacency_matrix): + # self.readout = nn.Sequential(nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, 1)) + + def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): ################ Code ################# - - # Parametrize embedding - h = self.atom_embed(AtomicNum) #eqn. 1 + + # Parametrize embedding + h = self.atom_embed(AtomicNum) # eqn. 1 for conv in self.convolutions: - messagei2j=conv.message_mlp(h[Edge[0]]*h[Edge[1]]) - messagei2j=messagei2j*adjacency_matrix - node_message=scatter_add(src=messagei2j, index=Edge[1], dim=0, dim_size=len(AtomicNum)) #+ scatter_add(src=messagei2j, index=Edge[0], dim=0, dim_size=len(AtomicNum)) - h=h+conv.update_mlp(node_message) - output=[split.sum(0) for split in torch.split(h, Natom)] - - - + messagei2j = conv.message_mlp(h[Edge[0]] * h[Edge[1]]) + messagei2j = messagei2j * adjacency_matrix + # + scatter_add(src=messagei2j, index=Edge[0], dim=0, dim_size=len(AtomicNum)) + node_message = scatter_add(src=messagei2j, index=Edge[1], dim=0, dim_size=len(AtomicNum)) + h = h + conv.update_mlp(node_message) + output = [split.sum(0) for split in torch.split(h, Natom)] + ################ Code ################# return output -def adjfunc(x,m,s): - return 4/((torch.exp(s * (x-m)) + 1) * (torch.exp((-s) * (x-m))+1)) -def gauss(x,m,s,a,b): - #return torch.exp(-abs((x-m)/2*s)**p) - G=(1+(2**(a/b)-1)*abs((x-m)/s)**a)**(-b/a) - G[torch.where(x=0)]) - adjacency_matrix=adjacency_matrix[torch.where(adjacency_matrix>=0)[0],torch.where(adjacency_matrix>=0)[1]].view(-1,1) - atomslist=torch.tensor([14 for i in torch.where(atom_numbers==14)[0]]).view(-1) - #molecules,edge_list,atom_list=get_molecules(xyz=xyz.detach(),atom_numbers=atom_numbers,bond_length=bond_length,periodic=False) - #adjacency_matrix_list=[] - #print(compute_grad(xyz,dis_sq[0,1])) - #for i,m in enumerate(molecules): + + dis_mat = dis_mat + offsets * cell_dim + dis_sq = dis_mat.norm(dim=-1) + bondlen = torch.ones(dis_sq.shape) + bondlen[torch.where(atom_numbers == 8)[0], torch.where(atom_numbers == 14)[0].view(-1, 1)] = bond_length['8-14'] + bondlen[torch.where(atom_numbers == 14)[0], torch.where(atom_numbers == 8)[0].view(-1, 1)] = bond_length['14-8'] + bondlen[torch.where(atom_numbers == 8)[0], torch.where(atom_numbers == 1)[0].view(-1, 1)] = bond_length['8-1'] + bondlen[torch.where(atom_numbers == 1)[0], torch.where(atom_numbers == 8)[0].view(-1, 1)] = bond_length['1-8'] + # adjacency=dis_sq-bondlen + # adjacency=(dis_sq-0.0001)/bondlen + # adjacency_matrix=torch.exp(-((torch.abs(adjacency)/d)**p)) + # adjacency_matrix=(1-adjacency**m)/(1-adjacency**n) + # adjacency_matrix=adjacency_matrix-torch.eye(adjacency_matrix.shape[0]) + adjacency_matrix = gauss(dis_sq, bondlen, 0.5, 2, 2) + adjacency_matrix = adjacency_matrix[torch.where( + atom_numbers == 14)[0].view(-1, 1), torch.where(atom_numbers == 8)[0][oxygeninvolved]] + adjacency_matrix = torch.matmul(adjacency_matrix, adjacency_matrix.t()) + adjacency_matrix = adjacency_matrix.fill_diagonal_(0) + edges = torch.stack([i for i in torch.where(adjacency_matrix >= 0)]) + adjacency_matrix = adjacency_matrix[torch.where(adjacency_matrix >= 0)[ + 0], torch.where(adjacency_matrix >= 0)[1]].view(-1, 1) + atomslist = torch.tensor([14 for i in torch.where(atom_numbers == 14)[0]]).view(-1) + # molecules,edge_list,atom_list=get_molecules(xyz=xyz.detach(),atom_numbers=atom_numbers,bond_length=bond_length,periodic=False) + # adjacency_matrix_list=[] + # print(compute_grad(xyz,dis_sq[0,1])) + # for i,m in enumerate(molecules): # n=torch.tensor(m) # adjacency_matrix_list.append(adjacency_matrix[edge_list[i][0],edge_list[i][1]].view(-1,1)) - return torch.LongTensor(edges).to(device),torch.LongTensor(atomslist).to(device),[(len(atomslist))],adjacency_matrix.float().to(device) + return torch.LongTensor(edges).to(device), torch.LongTensor(atomslist).to( + device), [(len(atomslist))], adjacency_matrix.float().to(device) + -def get_molecules(atom,bond_length,mode='bond',periodic=True): - types=list(set(atom.numbers)) - xyz=atom.positions - #A=np.lexsort((xyz[:,2],xyz[:,1],xyz[:,0])) +def get_molecules(atom, bond_length, mode='bond', periodic=True): + types = list(set(atom.numbers)) + xyz = atom.positions + # A=np.lexsort((xyz[:,2],xyz[:,1],xyz[:,0])) dis_mat = xyz[None, :, :] - xyz[:, None, :] - if periodic==True: + if periodic: cell_dim = np.diag(np.array(atom.get_cell())) - shift = np.round(np.divide(dis_mat,cell_dim)) + shift = np.round(np.divide(dis_mat, cell_dim)) offsets = -shift - dis_mat=dis_mat+offsets*cell_dim + dis_mat = dis_mat + offsets * cell_dim dis_sq = torch.tensor(dis_mat).pow(2).sum(-1).numpy() - dis_sq=dis_sq**0.5 - clusters=np.array([0 for i in range(xyz.shape[0])]) + dis_sq = dis_sq**0.5 + clusters = np.array([0 for i in range(xyz.shape[0])]) for i in range(xyz.shape[0]): - mm=max(clusters) - ty=atom.numbers[i] - oxy_neighbors=[] - if mode=='bond': + mm = max(clusters) + ty = atom.numbers[i] + oxy_neighbors = [] + if mode == 'bond': for t in types: - if bond_length.get('%s-%s'%(ty,t))!=None: - oxy_neighbors.extend(list(np.where(atom.numbers==t)[0][np.where(dis_sq[i,np.where(atom.numbers==t)[0]]<=bond_length['%s-%s'%(ty,t)])[0]])) - elif mode=='cutoff': - oxy_neighbors.extend(list(np.where(dis_sq[i]<=6)[0])) - oxy_neighbors=np.array(oxy_neighbors) - if len(oxy_neighbors)==0: - clusters[i]=mm+1 + if bond_length.get('%s-%s' % (ty, t)) is not None: + oxy_neighbors.extend(list(np.where(atom.numbers == t)[0][np.where( + dis_sq[i, np.where(atom.numbers == t)[0]] <= bond_length['%s-%s' % (ty, t)])[0]])) + elif mode == 'cutoff': + oxy_neighbors.extend(list(np.where(dis_sq[i] <= 6)[0])) + oxy_neighbors = np.array(oxy_neighbors) + if len(oxy_neighbors) == 0: + clusters[i] = mm + 1 continue - if (clusters[oxy_neighbors]==0).all() and clusters[i]!=0: - clusters[oxy_neighbors]=clusters[i] - elif (clusters[oxy_neighbors]==0).all() and clusters[i]==0: - clusters[oxy_neighbors]=mm+1 - clusters[i]=mm+1 - elif (clusters[oxy_neighbors]==0).all() == False and clusters[i]==0: - clusters[i]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) - clusters[oxy_neighbors]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) - elif (clusters[oxy_neighbors]==0).all() == False and clusters[i]!=0: - tmp=clusters[oxy_neighbors][clusters[oxy_neighbors]!=0][clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]!=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0])] - clusters[i]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) - clusters[oxy_neighbors]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) + if (clusters[oxy_neighbors] == 0).all() and clusters[i] != 0: + clusters[oxy_neighbors] = clusters[i] + elif (clusters[oxy_neighbors] == 0).all() and clusters[i] == 0: + clusters[oxy_neighbors] = mm + 1 + clusters[i] = mm + 1 + elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] == 0: + clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] != 0: + tmp = clusters[oxy_neighbors][clusters[oxy_neighbors] != 0][clusters[oxy_neighbors][ + clusters[oxy_neighbors] != 0] != min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0])] + clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) for tr in tmp: - clusters[np.where(clusters==tr)[0]]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) - - molecules=[] - for i in range(1,max(clusters)+1): - if np.size(np.where(clusters==i)[0])==0: + clusters[np.where(clusters == tr)[0]] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + + molecules = [] + for i in range(1, max(clusters) + 1): + if np.size(np.where(clusters == i)[0]) == 0: continue - molecules.append(np.where(clusters==i)[0]) + molecules.append(np.where(clusters == i)[0]) + + return molecules + - return molecules -def reconstruct_atoms(atomsobject, mol_idx,centre=None): +def reconstruct_atoms(atomsobject, mol_idx, centre=None): sys_xyz = torch.Tensor(atomsobject.get_positions(wrap=True)) box_len = torch.Tensor(atomsobject.get_cell_lengths_and_angles()[:3]) print(box_len) for idx in mol_idx: mol_xyz = sys_xyz[idx] - center = mol_xyz.shape[0]//2 - if centre!=None: - center=centre - intra_dmat = (mol_xyz[None, :,...] - mol_xyz[:, None, ...])[center] - if np.count_nonzero(atomsobject.cell.T-np.diag(np.diagonal(atomsobject.cell.T)))!=0: - M,N=intra_dmat.shape[0],intra_dmat.shape[1] - f=torch.linalg.solve(torch.Tensor(atomsobject.cell.T),(intra_dmat.view(-1,3).T)).T - g=f-torch.floor(f+0.5) - intra_dmat=torch.matmul(g,torch.Tensor(atomsobject.cell)) - intra_dmat=intra_dmat.view(M,3) - offsets=-torch.floor(f+0.5).view(M,3) - traj_unwrap = mol_xyz+torch.matmul(offsets,torch.Tensor(atomsobject.cell)) + center = mol_xyz.shape[0] // 2 + if centre is not None: + center = centre + intra_dmat = (mol_xyz[None, :, ...] - mol_xyz[:, None, ...])[center] + if np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) != 0: + M, N = intra_dmat.shape[0], intra_dmat.shape[1] + f = torch.linalg.solve(torch.Tensor(atomsobject.cell.T), (intra_dmat.view(-1, 3).T)).T + g = f - torch.floor(f + 0.5) + intra_dmat = torch.matmul(g, torch.Tensor(atomsobject.cell)) + intra_dmat = intra_dmat.view(M, 3) + offsets = -torch.floor(f + 0.5).view(M, 3) + traj_unwrap = mol_xyz + torch.matmul(offsets, torch.Tensor(atomsobject.cell)) else: sub = (intra_dmat > 0.5 * box_len).to(torch.float) * box_len add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len - shift=torch.round(torch.divide(intra_dmat,box_len)) - offsets=-shift - traj_unwrap = mol_xyz+offsets*box_len - #traj_unwrap=mol_xyz+add-sub + shift = torch.round(torch.divide(intra_dmat, box_len)) + offsets = -shift + traj_unwrap = mol_xyz + offsets * box_len + # traj_unwrap=mol_xyz+add-sub sys_xyz[idx] = traj_unwrap new_pos = sys_xyz.numpy() - return new_pos \ No newline at end of file + return new_pos diff --git a/nff/md/nms.py b/nff/md/nms.py index dd31feaa..2bc0f0bd 100644 --- a/nff/md/nms.py +++ b/nff/md/nms.py @@ -88,7 +88,7 @@ def init_calculator(atoms, params): params (dict): dictionary of parameters Returns: model (nn.Module): nnpotential model - en_key (str): energy key + en_key (str): energy key """ opt_state = params.get("iroot", 0) @@ -378,7 +378,7 @@ def get_opt_and_modes(params): def get_orca_form(cc_mat, cc_freqs, n_atoms): - """ Converts cclib version of Orca's (almost orthogonalizing) matrix + """ Converts cclib version of Orca's (almost orthogonalizing) matrix and mode frequencies back into the original Orca forms. Also converts frequencies from cm^{-1} into atomic units (Hartree).""" @@ -386,12 +386,12 @@ def get_orca_form(cc_mat, cc_freqs, n_atoms): pure_matrix = np.asarray(cc_mat) pure_freqs = np.asarray(cc_freqs) n_modes = len(pure_matrix[:, 0]) - n_inactive = n_atoms*3 - len(pure_matrix[:, 0]) + n_inactive = n_atoms * 3 - len(pure_matrix[:, 0]) n_tot = n_modes + n_inactive for i in range(len(pure_matrix)): - new_col = pure_matrix[i].reshape(3*len(pure_matrix[i])) + new_col = pure_matrix[i].reshape(3 * len(pure_matrix[i])) if i == 1: new_mat = np.column_stack((old_col, new_col)) elif i > 1: @@ -400,7 +400,7 @@ def get_orca_form(cc_mat, cc_freqs, n_atoms): matrix = np.asarray(new_mat[:]).reshape(n_tot, n_modes) - zero_col = np.asarray([[0]]*len(matrix)) + zero_col = np.asarray([[0]] * len(matrix)) for i in range(0, n_inactive): matrix = np.insert(matrix, [0], zero_col, axis=1) freqs = np.asarray(pure_freqs[:]) @@ -411,12 +411,12 @@ def get_orca_form(cc_mat, cc_freqs, n_atoms): def get_orth(mass_vec, matrix): - """Makes orthogonalizing matrix given the outputted - (non-orthogonal) matrix from Orca. The mass_vec variable + """Makes orthogonalizing matrix given the outputted + (non-orthogonal) matrix from Orca. The mass_vec variable is a list of the masses of the atoms in the molecule (must be) in the order given to Orca when it calculated normal modes). Note that this acts directly on the matrix outputted from Orca, - not on the cclib version that divides columns into sets of + not on the cclib version that divides columns into sets of three entries for each atom.""" m = np.array([[mass] for mass in mass_vec]) @@ -449,7 +449,7 @@ def get_n_in(matrix): def get_disp(mass_vec, matrix, freqs, q, p, hb=1): - """Makes position and momentum displacements from + """Makes position and momentum displacements from unitless harmonic oscillator displacements and unitless momenta. Uses atomic units (hbar = 1). For different units change the value of hbar.""" @@ -472,18 +472,18 @@ def get_disp(mass_vec, matrix, freqs, q, p, hb=1): def wigner_sample(w, kt=25.7 / 1000 / 27.2, hb=1): - """ Sample unitless x and unitless p from a Wigner distribution. + """ Sample unitless x and unitless p from a Wigner distribution. Takes frequency and temperature in au as inputs. Default temperature is 300 K.""" - sigma = (1/np.tanh((hb*w)/(2*kt)))**0.5/2**0.5 + sigma = (1 / np.tanh((hb * w) / (2 * kt)))**0.5 / 2**0.5 cov = [[sigma**2, 0], [0, sigma**2]] mean = (0, 0) x, p = np.random.multivariate_normal(mean, cov) return x, p -def classical_sample(w, kt=25.7 / 1000 / 27.2, hb=1): +def classical_sample(w, kt=25.7 / 1000 / 27.2, hb=1): sigma = (kt / (hb * w)) ** 0.5 cov = [[sigma**2, 0], [0, sigma**2]] mean = (0, 0) @@ -535,9 +535,9 @@ def make_dx_dp(mass_vec, def split_convert_xyz(xyz): """ Splits xyz into Z, coordinates in au, and masses in au """ - coords = [(np.array(element[1:])*ANGS_2_AU).tolist() for element in xyz] + coords = [(np.array(element[1:]) * ANGS_2_AU).tolist() for element in xyz] mass_vec = [PERIODICTABLE.GetAtomicWeight( - int(element[0]))*AMU_2_AU for element in xyz] + int(element[0])) * AMU_2_AU for element in xyz] Z = [element[0] for element in xyz] return Z, coords, mass_vec @@ -558,11 +558,11 @@ def make_wigner_init(init_atoms, kt=25.7 / 1000 / 27.2, hb=1, classical=False): - """Generates Wigner-sampled coordinates and velocities. + """Generates Wigner-sampled coordinates and velocities. xyz is the xyz array at the optimized - geometry. xyz is in Angstrom, so xyz is first converted to + geometry. xyz is in Angstrom, so xyz is first converted to au, added to Wigner dx, and then - converted back to Angstrom. Velocity is in au. + converted back to Angstrom. Velocity is in au. vibdisps and vibfreqs are the CClib quantities found in the database.""" @@ -578,7 +578,7 @@ def make_wigner_init(init_atoms, Z, opt_coords, mass_vec = split_convert_xyz(xyz) dx, dp = make_dx_dp(mass_vec, vibdisps, vibfreqs, kt, hb, classical=classical) - wigner_coords = ((np.asarray(opt_coords) + dx)/ANGS_2_AU).tolist() + wigner_coords = ((np.asarray(opt_coords) + dx) / ANGS_2_AU).tolist() nxyz = np.array(join_xyz(Z, wigner_coords)) velocity = (dp / np.array([[m] for m in mass_vec])).tolist() diff --git a/nff/md/nvt.py b/nff/md/nvt.py index 0a7e37e3..d8cfb0ca 100644 --- a/nff/md/nvt.py +++ b/nff/md/nvt.py @@ -341,7 +341,7 @@ def __init__( **kwargs, ): # Random Number Generator - if random_seed == None: + if random_seed is None: random_seed = np.random.randint(2147483647) if type(random_seed) is int: np.random.seed(random_seed) @@ -349,7 +349,7 @@ def __init__( else: try: np.random.set_state(random_seed) - except: + except BaseException: raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") if os.path.isfile(str(trajectory)): @@ -499,7 +499,7 @@ def __init__( os.remove(trajectory) # Random Number Generator - if random_seed == None: + if random_seed is None: random_seed = np.random.randint(2147483647) if type(random_seed) is int: np.random.seed(radnom_seed) @@ -507,7 +507,7 @@ def __init__( else: try: np.random.set_state(random_seed) - except: + except BaseException: raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") MolecularDynamics.__init__( @@ -687,7 +687,7 @@ def __init__( **kwargs, ): # Random Number Generator - if random_seed == None: + if random_seed is None: random_seed = np.random.randint(2147483647) if type(random_seed) is int: np.random.seed(random_seed) @@ -695,7 +695,7 @@ def __init__( else: try: np.random.set_state(random_seed) - except: + except BaseException: raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") if os.path.isfile(str(trajectory)): diff --git a/nff/md/nvt_ax.py b/nff/md/nvt_ax.py index 8a4c323f..92ac392a 100644 --- a/nff/md/nvt_ax.py +++ b/nff/md/nvt_ax.py @@ -90,11 +90,11 @@ def step(self): # make a half step in self.zeta self.zeta = self.zeta + 0.5 * self.dt * \ - (1/self.Q) * (KE_0 - self.targeEkin) + (1 / self.Q) * (KE_0 - self.targeEkin) # make another halfstep in self.zeta self.zeta = self.zeta + 0.5 * self.dt * \ - (1/self.Q) * (self.atoms.get_kinetic_energy() - self.targeEkin) + (1 / self.Q) * (self.atoms.get_kinetic_energy() - self.targeEkin) # make another half step in velocity vel = (self.atoms.get_velocities() + 0.5 * self.dt * accel) / \ @@ -120,6 +120,7 @@ def run(self, steps=None): Dynamics.run(self) self.atoms.update_nbr_list() + class NoseHooverChain(MolecularDynamics): def __init__(self, atoms, @@ -152,13 +153,13 @@ def __init__(self, # in units of fs: self.ttime = ttime self.Q = 2 * np.array([self.N_dof * self.T * (self.ttime * self.dt)**2, - *[self.T * (self.ttime * self.dt)**2]*(num_chains-1)]) + *[self.T * (self.ttime * self.dt)**2] * (num_chains - 1)]) # no rotation or translation, so target kinetic energy is 3/2 N kT - 6 - self.targeEkin = 1/2 * self.N_dof * self.T + self.targeEkin = 1 / 2 * self.N_dof * self.T # self.zeta = np.array([0.0]*num_chains) - self.p_zeta = np.array([0.0]*num_chains) + self.p_zeta = np.array([0.0] * num_chains) self.num_steps = max_steps self.n_steps = 0 self.max_steps = 0 @@ -174,9 +175,9 @@ def __init__(self, def get_zeta_accel(self): p0_dot = 2 * (self.atoms.get_kinetic_energy() - self.targeEkin) - \ - self.p_zeta[0]*self.p_zeta[1] / self.Q[1] + self.p_zeta[0] * self.p_zeta[1] / self.Q[1] p_middle_dot = self.p_zeta[:-2]**2 / self.Q[:-2] - \ - self.T - self.p_zeta[1:-1] * self.p_zeta[2:]/self.Q[2:] + self.T - self.p_zeta[1:-1] * self.p_zeta[2:] / self.Q[2:] p_last_dot = self.p_zeta[-2]**2 / self.Q[-2] - self.T p_dot = np.array([p0_dot, *p_middle_dot, p_last_dot]) @@ -186,7 +187,7 @@ def half_step_v_zeta(self): v = self.p_zeta / self.Q accel = self.get_zeta_accel() - v_half = v + 1/2 * accel * self.dt + v_half = v + 1 / 2 * accel * self.dt return v_half def half_step_v_system(self): @@ -194,14 +195,14 @@ def half_step_v_system(self): v = self.atoms.get_velocities() accel = self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1) accel -= v * self.p_zeta[0] / self.Q[0] - v_half = v + 1/2 * accel * self.dt + v_half = v + 1 / 2 * accel * self.dt return v_half def full_step_positions(self): accel = self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1) new_positions = self.atoms.get_positions() + self.atoms.get_velocities() * self.dt + \ - (accel - self.p_zeta[0] / self.Q[0])*(self.dt)**2 + (accel - self.p_zeta[0] / self.Q[0]) * (self.dt)**2 return new_positions def step(self): @@ -217,7 +218,7 @@ def step(self): v_full_zeta = self.half_step_v_zeta() accel = self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1) - v_full_system = (v_half_system + 1/2 * accel * self.dt) / \ + v_full_system = (v_half_system + 1 / 2 * accel * self.dt) / \ (1 + 0.5 * self.dt * v_full_zeta[0]) self.atoms.set_velocities(v_full_system) diff --git a/nff/md/special_thermostats.py b/nff/md/special_thermostats.py index 662fa71a..92f77579 100644 --- a/nff/md/special_thermostats.py +++ b/nff/md/special_thermostats.py @@ -45,7 +45,7 @@ def __init__(self, self.dt = timestep * units.fs self.Natom = len(atoms) - + if self.atoms.pbc: self.activeDoF = (3 * self.Natom) - len(self.atoms.constraints) else: @@ -66,14 +66,14 @@ def __init__(self, self.start_temp = maxwell_temp else: self.start_temp = (2 * self.atoms.get_kinetic_energy()) / (units.kB * self.activeDoF) - + self.num_epochs = int(np.ceil(self.num_steps / self.nbr_update_period)) - self.ramp_targets = np.linspace(self.start_temp, target_temp, - num = self.num_epochs + 1, endpoint=True)[1:] + self.ramp_targets = np.linspace(self.start_temp, target_temp, + num=self.num_epochs + 1, endpoint=True)[1:] self.max_steps = 0 print(f"Info: Temperature is adjusted {self.num_epochs} times" "in {self.ramp_targets[1] - self.ramp_targets[0]}K increments.") - + self.remove_constrained_vel(atoms) Stationary(self.atoms) ZeroRotation(self.atoms) @@ -112,12 +112,12 @@ def step(self): accel = (self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1)) vel = self.atoms.get_velocities() - + # make half a step in velocity vel_half = vel + 0.5 * self.dt * accel # make full step in position - x = self.atoms.get_positions() + vel_half * self.dt + x = self.atoms.get_positions() + vel_half * self.dt self.atoms.set_positions(x) # new accelerations @@ -125,7 +125,7 @@ def step(self): accel = f / self.atoms.get_masses().reshape(-1, 1) # make another half step in velocity - vel = vel_half + 0.5 * self.dt * accel + vel = vel_half + 0.5 * self.dt * accel self.atoms.set_velocities(vel) self.remove_constrained_vel(self.atoms) @@ -139,12 +139,12 @@ def run(self): for ii in tqdm(range(self.num_epochs)): self.max_steps += self.nbr_update_period Dynamics.run(self) - - curr_temp = (2.*self.atoms.get_kinetic_energy() / + + curr_temp = (2. * self.atoms.get_kinetic_energy() / (units.kB * self.activeDoF)) curr_target = self.ramp_targets[ii] - rescale_fac = np.sqrt(curr_target/curr_temp) + rescale_fac = np.sqrt(curr_target / curr_temp) new_vel = rescale_fac * self.atom.get_velocities() self.atoms.set_velocities(new_vel) - - self.atoms.update_nbr_list() \ No newline at end of file + + self.atoms.update_nbr_list() diff --git a/nff/md/tully/step.py b/nff/md/tully/step.py index a631e150..78209640 100644 --- a/nff/md/tully/step.py +++ b/nff/md/tully/step.py @@ -295,8 +295,8 @@ def rescale(energy, """ Velocity re-scaling, from: - Landry, B.R. and Subotnik, J.E., 2012. How to recover Marcus theory with - fewest switches surface hopping: Add just a touch of decoherence. The + Landry, B.R. and Subotnik, J.E., 2012. How to recover Marcus theory with + fewest switches surface hopping: Add just a touch of decoherence. The Journal of chemical physics, 137(22), p.22A513. If no NACV is available, the KE is simply rescaled to conserve energy. @@ -1077,8 +1077,8 @@ def add_decoherence(c, forces, mass): """ - Landry, B.R. and Subotnik, J.E., 2012. How to recover Marcus theory with - fewest switches surface hopping: Add just a touch of decoherence. The + Landry, B.R. and Subotnik, J.E., 2012. How to recover Marcus theory with + fewest switches surface hopping: Add just a touch of decoherence. The Journal of chemical physics, 137(22), p.22A513. """ diff --git a/nff/md/tully_multiplicity/dynamics.py b/nff/md/tully_multiplicity/dynamics.py index 496dd420..01eca5b5 100644 --- a/nff/md/tully_multiplicity/dynamics.py +++ b/nff/md/tully_multiplicity/dynamics.py @@ -31,11 +31,11 @@ from nff.md.utils_ax import atoms_to_nxyz from nff.md.tully_multiplicity.io import get_results, load_json, get_atoms from nff.md.tully_multiplicity.step import (try_hop, - verlet_step_1, verlet_step_2, - truhlar_decoherence, - adiabatic_c, - compute_T, - get_p_hop) + verlet_step_1, verlet_step_2, + truhlar_decoherence, + adiabatic_c, + compute_T, + get_p_hop) from nff.md.nvt_ax import NoseHoover, NoseHooverChain @@ -55,7 +55,6 @@ "en_keys_for_grad": ["energy_0"]} - class NeuralTully: def __init__(self, atoms_list, @@ -82,13 +81,13 @@ def __init__(self, self.atoms_list = atoms_list self.vel = self.get_vel() - + self.device = device self.models = [self.load_model(model_path).to(device) for model_path in model_paths] - + self.T = None self.U_old = None - + self.t = 0 self.props = {} self.num_atoms = len(self.atoms_list[0]) @@ -100,60 +99,60 @@ def __init__(self, self.spinadiabatic_keys = [] for key in adiabatic_keys: if 'S' in key: - new_key = key+"_ms+0" + new_key = key + "_ms+0" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key elif 'D' in key: - new_key = key+"_ms-1/2" + new_key = key + "_ms-1/2" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - new_key = key+"_ms+1/2" + new_key = key + "_ms+1/2" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key elif 'T' in key: - new_key = key+"_ms-1" + new_key = key + "_ms-1" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - new_key = key+"_ms+0" + new_key = key + "_ms+0" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - new_key = key+"_ms+1" + new_key = key + "_ms+1" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key elif 'Q' in key: - new_key = key+"_ms-3/2" + new_key = key + "_ms-3/2" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - new_key = key+"_ms-1/2" + new_key = key + "_ms-1/2" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - new_key = key+"_ms+1/2" + new_key = key + "_ms+1/2" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - new_key = key+"_ms+3/2" + new_key = key + "_ms+3/2" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - + self.num_spinadibat = len(self.spinadiabatic_keys) self.num_states = len(self.spinadiabatic_keys) self.initial_surf_num = self.spinadiabatic_to_statenum[initial_surf] @@ -186,11 +185,11 @@ def __init__(self, self.surfs = np.ones(self.num_samples, dtype=np.int) * self.initial_surf_num self.c_hmc = self.init_c() - + self.update_props(needs_nbrs=True) self.c_diag = self.get_c_diag() - - #sanity check + + # sanity check if not (self.surfs == np.argmax(np.abs(self.c_diag), axis=1)).all(): print("The states in the diagonal basis got reordered! Adjusting surfs!") self.surfs = np.argmax(np.abs(self.c_diag), axis=1) @@ -204,7 +203,6 @@ def __init__(self, if os.path.isfile(TULLY_SAVE_FILE): self.restart() - def setup_save(self): if os.path.isfile(self.save_file): @@ -231,7 +229,7 @@ def load_model(self, model_path): model = load_model(model_path, params, params['model_type']) return model - + @property def mass(self): _mass = (self.atoms_list[0].get_masses() @@ -250,7 +248,7 @@ def nxyz(self): def nxyz(self, _nxyz): for atoms, this_nxyz in zip(self.atoms_list, _nxyz): atoms.set_positions(this_nxyz[:, 1:]) - + @property def xyz(self): _xyz = self.nxyz[..., 1:] @@ -275,25 +273,25 @@ def init_c(self): dtype='complex128') c[:, self.surfs[0]] = 1 return c - + def get_c_hmc(self): """ state coefficients in the HMC basis """ - c_hmc = np.einsum('ijk,ik->ij', - self.U, + c_hmc = np.einsum('ijk,ik->ij', + self.U, self.c_diag) - + return c_hmc - + def get_c_diag(self): """ state coefficients in the diagonal basis """ - c_diag = np.einsum('ijk,ik->ij', - self.U.conj().transpose(0,2,1), + c_diag = np.einsum('ijk,ik->ij', + self.U.conj().transpose(0, 2, 1), self.c_hmc) - + return c_diag def get_forces(self): @@ -323,19 +321,19 @@ def get_nacv(self): splits = state1.split("_") adiabat1 = splits[0] spin_ms1 = splits[1] - + for state_n2 in range(self.num_states): state2 = self.statenum_to_spinadiabatic[state_n2] splits = state2.split("_") adiabat2 = splits[0] spin_ms2 = splits[1] - + if adiabat1 == adiabat2: continue elif adiabat1[0] != adiabat2[0]: # checks for the same degeneracy continue - + key = f'NACV_{adiabat1}_to_{adiabat2}_grad' if key not in self.props: continue @@ -393,36 +391,36 @@ def get_pot_V(self): ) return V - + def get_SOC_mat(self): """ Matrix with SOCs in HMC basis """ - + H_soc = np.zeros((self.num_samples, self.num_states, - self.num_states), + self.num_states), dtype=np.complex128) - + for state_n1 in range(self.num_states): state1 = self.statenum_to_spinadiabatic[state_n1] splits = state1.split("_") adiabat1 = splits[0] spin_ms1 = splits[1] - + for state_n2 in range(self.num_states): state2 = self.statenum_to_spinadiabatic[state_n2] splits = state2.split("_") adiabat2 = splits[0] spin_ms2 = splits[1] - + try: a = self.props[f"SOC_{adiabat1}_to_{adiabat2}_a"] b = self.props[f"SOC_{adiabat1}_to_{adiabat2}_b"] c = self.props[f"SOC_{adiabat1}_to_{adiabat2}_c"] - except: + except BaseException: continue - + ST_soc = False TT_soc = False if 'S' in adiabat1: @@ -431,7 +429,7 @@ def get_SOC_mat(self): TT_soc = True else: raise NotImplementedError - + if ST_soc: if spin_ms2 == 'ms-1': soc_val = a + 1j * b @@ -439,9 +437,9 @@ def get_SOC_mat(self): soc_val = 0. + 1j * c elif spin_ms2 == 'ms+1': soc_val = a - 1j * b - + elif TT_soc: - if spin_ms1 == 'ms-1' and spin_ms2 == 'ms-1': + if spin_ms1 == 'ms-1' and spin_ms2 == 'ms-1': soc_val = 0. + 1j * c elif spin_ms1 == 'ms-1' and spin_ms2 == 'ms+0': soc_val = -a + 1j * b @@ -453,35 +451,35 @@ def get_SOC_mat(self): soc_val = a + 1j * b elif spin_ms1 == 'ms+1' and spin_ms2 == 'ms+1': soc_val = 0. - 1j * c - + H_soc[:, state_n1, state_n2] = soc_val H_soc[:, state_n2, state_n1] = soc_val.conj() - + return H_soc - + def get_H_hmc(self): """ Sum of potential energy matrix and SOCs """ - + V = self.pot_V.astype(np.complex128) H_hmc = V + self.SOC_mat - - return H_hmc - + + return H_hmc + def get_U(self): """ Diagonalizes H^total """ - + eVals, U = np.linalg.eigh(self.H_hmc) - + return U, eVals def get_H_plus_nacv(self): if self.nacv is None: return - #pot_V = self.pot_V + # pot_V = self.pot_V H_hmc = self.H_hmc nac_term = -1j * (self.nacv * self.vel.reshape(self.num_samples, @@ -491,16 +489,16 @@ def get_H_plus_nacv(self): 3) ).sum((-1, -2)) - #return pot_V + nac_term + # return pot_V + nac_term return H_hmc + nac_term def get_neg_G_hmc(self): - + neg_G = np.zeros((self.num_samples, self.num_states, self.num_states, self.num_atoms, - 3)) + 3)) idx = np.arange(self.num_states) np.put_along_axis( neg_G, @@ -513,53 +511,53 @@ def get_neg_G_hmc(self): axis=2 ) neg_G += self.force_nacv - + return neg_G - + def get_neg_G_diag(self): - - neg_G_diag = np.einsum('ijk,ikl...,ilm->ijm...', - self.U.conj().transpose((0,2,1)), - self.neg_G_hmc, + + neg_G_diag = np.einsum('ijk,ikl...,ilm->ijm...', + self.U.conj().transpose((0, 2, 1)), + self.neg_G_hmc, self.U) - + return neg_G_diag - + def get_diag_energy(self): - H_diag = np.einsum('ijk,ikl,ilm->ijm', - self.U.conj().transpose((0,2,1)), - self.H_hmc, - self.U) + H_diag = np.einsum('ijk,ikl,ilm->ijm', + self.U.conj().transpose((0, 2, 1)), + self.H_hmc, + self.U) idxs = np.arange(self.num_states) - _energy = np.take_along_axis(np.real(H_diag), + _energy = np.take_along_axis(np.real(H_diag), idxs.reshape(1, -1, 1), axis=2) - + return _energy.reshape(self.num_samples, self.num_states) - + def get_diag_forces(self): - - diag_forces = np.diagonal(self.neg_G_diag, - axis1=1, axis2=2).transpose((0,3,1,2)) - + + diag_forces = np.diagonal(self.neg_G_diag, + axis1=1, axis2=2).transpose((0, 3, 1, 2)) + return np.real(diag_forces) @property def state_dict(self): _state_dict = {"nxyz": self.nxyz, "nacv": self.nacv, - #"force_nacv": self.force_nacv, + # "force_nacv": self.force_nacv, "energy": self.energy, "forces": self.forces, - #"H_d": self.H_d, + # "H_d": self.H_d, "U": self.U, "t": self.t / const.FS_TO_AU, "vel": self.vel, "c_hmc": self.c_hmc, "c_diag": self.c_diag, - #"T": self.T, + # "T": self.T, "surfs": self.surfs} return _state_dict - + @state_dict.setter def state_dict(self, dic): for key, val in dic.items(): @@ -641,24 +639,24 @@ def log(self): # num_surf = (self.surfs == i).sum() # pct = num_surf / self.num_samples * 100 # pcts.append(pct) - + pcts_hmc = [] argmax = np.argmax(np.abs(self.c_hmc), axis=1) for i in range(self.num_states): num_surf = (argmax == i).sum() - pct = num_surf / self.num_samples #* 100 + pct = num_surf / self.num_samples # * 100 pcts_hmc.append(pct) - #c, p = self.clean_c_p() + # c, p = self.clean_c_p() norm_c = np.mean(np.linalg.norm(self.c_hmc, axis=1)) p_avg = np.mean(np.max(self.p_hop, axis=1)) - text = self.log_template % (time, #*pcts, + text = self.log_template % (time, # *pcts, *pcts_hmc, norm_c, p_avg) with open(self.log_file, 'a') as f: f.write("\n" + text) - + # sanity check if norm_c > 2.0: print("Norm of coefficients too large!!") @@ -719,68 +717,70 @@ def update_props(self, self.props = props self.update_selfs() - + def update_selfs(self): # simple reorganiation of NN outputs - self.energy = self.get_energy() - self.forces = self.get_forces() - self.nacv = self.get_nacv() - self.gap = self.get_gap() - self.force_nacv = self.get_force_nacv() - self.pot_V = self.get_pot_V() - + self.energy = self.get_energy() + self.forces = self.get_forces() + self.nacv = self.get_nacv() + self.gap = self.get_gap() + self.force_nacv = self.get_force_nacv() + self.pot_V = self.get_pot_V() + # assembly of complicated matrices - self.SOC_mat = self.get_SOC_mat() - self.H_hmc = self.get_H_hmc() + self.SOC_mat = self.get_SOC_mat() + self.H_hmc = self.get_H_hmc() self.H_plus_nacv = self.get_H_plus_nacv() - + # diagonalization of HMC representation - self.U, evals = self.get_U() - if type(self.U_old) != type(None): + self.U, evals = self.get_U() + + +if not isinstance(self.U_old, type(None)): # the following is an implementation of Appendix B - # from Mai, Marquetand, Gonzalez + # from Mai, Marquetand, Gonzalez # Int.J. Quant. Chem. 2015, 115, 1215-1231 - V = np.einsum('ijk,ikl->ijl', - self.U.conj().transpose((0,2,1)), - self.U_old) - + V = np.einsum('ijk,ikl->ijl', + self.U.conj().transpose((0, 2, 1)), + self.U_old) + # attempt to make V diagonally dominant for replica in range(self.num_samples): - abs_v = np.abs(V[replica]) + abs_v = np.abs(V[replica]) arg_max = np.argmax(abs_v, axis=1) # sanity check print statement # if len(np.unique(arg_max)) < len(arg_max): # print("V could not be made diagonal dominant!") - + for column in range(self.num_states): curr_col = copy.deepcopy(V[replica][:, column]) - new_col = copy.deepcopy(V[replica][:, arg_max[column]]) + new_col = copy.deepcopy(V[replica][:, arg_max[column]]) # switch columns V[replica][:, column] = new_col V[replica][:, arg_max[column]] = curr_col - - # (CV)_{ab} = V_{ab} delta(Hdiag_aa - Hdiag_bb) - # setting everything to zero where + + # (CV)_{ab} = V_{ab} delta(Hdiag_aa - Hdiag_bb) + # setting everything to zero where # the difference in diagonal elements is NOT zero # for replica, hdiag in enumerate(evals): hdiag = evals.reshape((self.num_samples, self.num_states, 1)) - diff = hdiag - hdiag.transpose((0, 2, 1)) - preserved_idxs = np.isclose(diff, np.zeros(shape=diff.shape), + diff = hdiag - hdiag.transpose((0, 2, 1)) + preserved_idxs = np.isclose(diff, np.zeros(shape=diff.shape), atol=1e-8, rtol=0.0) V[~preserved_idxs] = 0.0 - + # Loewding symmetric orthonormalization u, s, vh = np.linalg.svd(V) - Phi_adj = np.einsum('ijk, ikl->ijl', u, vh) - + Phi_adj = np.einsum('ijk, ikl->ijl', u, vh) + corrected_U = np.einsum('ijk, ikl->ijl', self.U, Phi_adj) self.U = copy.deepcopy(corrected_U) - + # check eq B11 - epsilon = 0.1 # hardcoded for now - diagonals = np.einsum('ijj->ij', np.einsum('ijk,ikl->ijl', - self.U.conj().transpose((0,2,1)), - self.U_old)) + epsilon = 0.1 # hardcoded for now + diagonals = np.einsum('ijj->ij', np.einsum('ijk,ikl->ijl', + self.U.conj().transpose((0, 2, 1)), + self.U_old)) anti_hermitian = ((1 - epsilon) < diagonals).all() # if not anti_hermitian: # print("WARNING: Time step likely too large! At least one new unitary matrix ", @@ -790,19 +790,19 @@ def update_selfs(self): # print("H_diag:\n", evals) # print(V) # print(preserved_idxs) - - self.U_old = copy.deepcopy(self.U) - - self.neg_G_hmc = self.get_neg_G_hmc() - self.neg_G_diag = self.get_neg_G_diag() + + self.U_old = copy.deepcopy(self.U) + + self.neg_G_hmc = self.get_neg_G_hmc() + self.neg_G_diag = self.get_neg_G_diag() self.diag_energy = self.get_diag_energy() self.diag_forces = self.get_diag_forces() - + def do_hop(self, old_c, new_c, P): - + self.p_hop = get_p_hop(hop_eqn=self.hop_eqn, old_c=old_c, new_c=new_c, @@ -821,28 +821,28 @@ def do_hop(self, return new_surfs, new_vel def add_decoherence(self): - + if not self.decoherence: return - + self.c_diag = self.decoherence(c=self.c_diag, surfs=self.surfs, energy=self.diag_energy, vel=self.vel, dt=self.dt, mass=self.mass) - + self.c_hmc = self.get_c_hmc() def step(self, needs_nbrs): - old_V = copy.deepcopy(self.pot_V) - old_H_hmc = copy.deepcopy(self.H_hmc) + old_V = copy.deepcopy(self.pot_V) + old_H_hmc = copy.deepcopy(self.H_hmc) old_H_plus_nacv = copy.deepcopy(self.H_plus_nacv) - old_U = copy.deepcopy(self.U) + old_U = copy.deepcopy(self.U) old_c_hmc = copy.deepcopy(self.c_hmc) - old_c_diag= copy.deepcopy(self.c_diag) + old_c_diag = copy.deepcopy(self.c_diag) # xyz converted to a.u. for the step and then # back to Angstrom after @@ -857,7 +857,7 @@ def step(self, needs_nbrs): # from here on everything is "new" self.update_props(needs_nbrs) - + new_vel = verlet_step_2(forces=self.diag_forces, surfs=self.surfs, vel=self.vel, @@ -866,34 +866,33 @@ def step(self, needs_nbrs): self.vel = new_vel self.c_hmc, self.P_hmc = adiabatic_c(c=self.c_hmc, - elec_substeps=self.elec_substeps, - old_H_plus_nacv=old_H_plus_nacv, - new_H_plus_nacv=self.H_plus_nacv, - dt=self.dt) - + elec_substeps=self.elec_substeps, + old_H_plus_nacv=old_H_plus_nacv, + new_H_plus_nacv=self.H_plus_nacv, + dt=self.dt) + # print("Norm before/after elec substeps (hop):\n", # np.linalg.norm(old_c_hmc, axis=1), # np.linalg.norm(self.c_hmc, axis=1)) - + self.c_diag = self.get_c_diag() - self.P_diag = np.einsum('ijk,ikl,ilm->ijm', - self.U.conj().transpose((0,2,1)), - self.P_hmc, - old_U) + self.P_diag = np.einsum('ijk,ikl,ilm->ijm', + self.U.conj().transpose((0, 2,1)), + self.P_hmc, + old_U) # if self.nacv is not None: # self.T, _ = compute_T(nacv=self.nacv, # vel=self.vel, # c=self.c_hmc) - + new_surfs, new_vel = self.do_hop(old_c=old_c_diag, new_c=self.c_diag, P=self.P_diag) self.just_hopped = (new_surfs != self.surfs).nonzero()[0] - #if self.just_hopped.any(): - - + # if self.just_hopped.any(): + self.surfs = new_surfs self.vel = new_vel self.t += self.dt @@ -904,7 +903,7 @@ def step(self, needs_nbrs): def run(self): steps = math.ceil((self.max_time - self.t) / self.dt) epochs = math.ceil(steps / self.nbr_update_period) - + self.save() self.log() @@ -919,23 +918,18 @@ def run(self): needs_nbrs = (i == 0) self.step(needs_nbrs=needs_nbrs) counter += 1 - + if counter % self.save_period == 0: self.save() # else: # # save any geoms that just hopped # self.save(idx=self.just_hopped) - with open(self.log_file, 'a') as f: f.write('\nNeural Tully terminated normally.') - - - - - + class CombinedNeuralTully: def __init__(self, atoms, diff --git a/nff/md/tully_multiplicity/io.py b/nff/md/tully_multiplicity/io.py index 37e21370..d382e909 100644 --- a/nff/md/tully_multiplicity/io.py +++ b/nff/md/tully_multiplicity/io.py @@ -62,9 +62,9 @@ def run_models(models: List, batch, device: Union[str, int]): """ - Gets a list of models, which contains X models that + Gets a list of models, which contains X models that collectively predict Energies/Forces, NACVs, SOCs - + Args: models (list): list of torch models batch: torch batch to do inference for @@ -72,13 +72,13 @@ def run_models(models: List, """ batch = batch_to(batch, device) - + results = {} for model in models: result = model(batch, - inference=True) + inference=True) result = batch_detach(result) - + # merge dictionaries for key in result.keys(): results[key] = result[key] @@ -107,14 +107,14 @@ def concat_and_conv(results_list, val = val.reshape(*grad_shape) elif 'energy' in key: val *= conv['energy'] - elif ('nacv' in key or 'NACV' in key) and 'grad' in key: + elif ('nacv' in key or 'NACV' in key) and 'grad' in key: val *= conv['_grad'] val = val.reshape(*grad_shape) elif 'NACP' in key and 'grad' in key: val *= conv['_grad'] val = val.reshape(*grad_shape) elif 'soc' in key or 'SOC' in key: - val *= 0.0000045563353 # cm-1 to Ha + val *= 0.0000045563353 # cm-1 to Ha # else: # msg = f"{key} has no known conversion" # raise NotImplementedError(msg) @@ -148,8 +148,8 @@ def get_results(models, results_list = [] for batch in loader: results = run_models(models=models, - batch=batch, - device=device) + batch=batch, + device=device) results_list.append(results) all_results = concat_and_conv(results_list=results_list, @@ -220,7 +220,7 @@ def add_calculator(atomsbatch, model_type, device, batched_props, - output_keys = ["energy_0"]): + output_keys=["energy_0"]): needs_angles = (model_type in ANGLE_MODELS) @@ -268,9 +268,6 @@ def get_atoms(ground_params, model_type=ground_params["model_type"], device=device, batched_props=batched_props, - output_keys = [ground_params['energy_key']]) + output_keys=[ground_params['energy_key']]) return atomsbatch - - - diff --git a/nff/md/tully_multiplicity/step.py b/nff/md/tully_multiplicity/step.py index 87bb9eac..6e7340a4 100644 --- a/nff/md/tully_multiplicity/step.py +++ b/nff/md/tully_multiplicity/step.py @@ -9,7 +9,6 @@ import torch - def verlet_step_1(forces, surfs, vel, @@ -123,7 +122,6 @@ def get_p_hop(hop_eqn='sharc', return p - def get_sharc_p(old_c, new_c, P, @@ -174,7 +172,7 @@ def get_sharc_p(old_c, num = np.real(c_alpha_dt * np.conj(P_alpha_beta) * np.conj(c_beta_t)) denom = np.power(np.abs(c_beta_t), 2) - np.real(c_beta_dt * np.conj(P_beta_beta) - * np.conj(c_beta_t)) + * np.conj(c_beta_t)) pref = 1. - np.power(np.abs(c_beta_dt), 2) / (np.power(np.abs(c_beta_t), 2) + 1.e-8) h = np.zeros((num_samples, num_states)) @@ -274,8 +272,8 @@ def rescale(energy, """ Velocity re-scaling, from: - Landry, B.R. and Subotnik, J.E., 2012. How to recover Marcus theory with - fewest switches surface hopping: Add just a touch of decoherence. The + Landry, B.R. and Subotnik, J.E., 2012. How to recover Marcus theory with + fewest switches surface hopping: Add just a touch of decoherence. The Journal of chemical physics, 137(22), p.22A513. If no NACV is available, the KE is simply rescaled to conserve energy. @@ -402,9 +400,9 @@ def truhlar_decoherence(c, num[num < 0] = 0 c_m_prime = c_m * np.sqrt( - num.reshape(-1, 1) - / np.power(np.abs(c_m), 2) - ) + num.reshape(-1, 1) + / np.power(np.abs(c_m), 2) + ) new_c = np.zeros_like(c) np.put_along_axis(new_c, diff --git a/nff/md/utils.py b/nff/md/utils.py index 26b3b46a..967b4e05 100644 --- a/nff/md/utils.py +++ b/nff/md/utils.py @@ -258,7 +258,7 @@ def write_traj(filename, frames): if atom.shape[0] == 4: try: file.write(str(int(atom[0])) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") - except: + except BaseException: file.write(str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") elif atom.shape[0] == 3: file.write("1" + " " + str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + "\n") diff --git a/nff/md/utils_ax.py b/nff/md/utils_ax.py index e94cd959..84b33373 100644 --- a/nff/md/utils_ax.py +++ b/nff/md/utils_ax.py @@ -29,7 +29,7 @@ def get_energy(atoms): # ekin = (0.5 * (vel * 1e-10 * fs * 1e15).pow(2).sum(1) * (mass * 1.66053904e-27) * 6.241509e+18).sum() # ekin = ekin.item() #* ev_to_kcal - #ekin = ekin.detach().numpy() + # ekin = ekin.detach().numpy() print(('Energy per atom: Epot = %.2fkcal/mol ' 'Ekin = %.2fkcal/mol (T=%3.0fK) ' @@ -43,7 +43,7 @@ def get_energy(atoms): def write_traj(filename, frames): ''' Write trajectory dataframes into .xyz format for VMD visualization - to do: include multiple atom types + to do: include multiple atom types example: path = "../../sim/topotools_ethane/ethane-nvt_unwrap.xyz" @@ -54,13 +54,13 @@ def write_traj(filename, frames): atom_no = frames.shape[1] for i, frame in enumerate(frames): file.write(str(atom_no) + '\n') - file.write('Atoms. Timestep: ' + str(i)+'\n') + file.write('Atoms. Timestep: ' + str(i) + '\n') for atom in frame: if atom.shape[0] == 4: try: file.write(str(int(atom[0])) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") - except: + except BaseException: file.write(str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") elif atom.shape[0] == 3: @@ -72,9 +72,9 @@ def write_traj(filename, frames): def mol_dot(vec1, vec2): - """ Say we have two vectors, each of which has the form + """ Say we have two vectors, each of which has the form [[fx1, fy1, fz1], [fx2, fy2, fz2], ...]. - mol_dot returns an array of dot products between each + mol_dot returns an array of dot products between each element of the two vectors. """ v1 = np.array(vec1) v2 = np.array(vec2) @@ -229,11 +229,11 @@ def __call__(self): epot /= self.natoms ekin /= self.natoms if self.dyn is not None: - t = self.dyn.get_time() / (1000*units.fs) + t = self.dyn.get_time() / (1000 * units.fs) dat = (t,) else: dat = () - dat += (epot+ekin, epot, ekin, temp) + dat += (epot + ekin, epot, ekin, temp) if self.stress: dat += tuple(self.atoms.get_stress() / units.GPa) self.logfile.write(self.fmt % dat) diff --git a/nff/md/zhu_nakamura/dynamics.py b/nff/md/zhu_nakamura/dynamics.py index 8ffef808..4029d68c 100644 --- a/nff/md/zhu_nakamura/dynamics.py +++ b/nff/md/zhu_nakamura/dynamics.py @@ -977,7 +977,7 @@ def update_energies_forces(self, trjs, get_new_neighbors): current_trj = i * self.batch_size - for j, trj in enumerate(trjs[current_trj : current_trj + self.batch_size]): + for j, trj in enumerate(trjs[current_trj: current_trj + self.batch_size]): energies = [] forces = [] for key in self.energy_keys: diff --git a/nff/md/zhu_nakamura/dynamics_test.py b/nff/md/zhu_nakamura/dynamics_test.py index bf391d24..25a7247c 100644 --- a/nff/md/zhu_nakamura/dynamics_test.py +++ b/nff/md/zhu_nakamura/dynamics_test.py @@ -26,20 +26,18 @@ from torch.utils.data import DataLoader - HBAR = 1 OUT_FILE = "trj.csv" LOG_FILE = "trj.log" METHOD_DIC = { - "nosehoover": NoseHoover, - "nosehooverchain": NoseHooverChain - } - + "nosehoover": NoseHoover, + "nosehooverchain": NoseHooverChain +} -class ZhuNakamuraDynamics(ZhuNakamuraLogger): +class ZhuNakamuraDynamics(ZhuNakamuraLogger): """ Class for running Zhu-Nakamura surface-hopping dynamics. This method follows the description in @@ -149,23 +147,22 @@ def __init__(self, """ self.atoms = atoms - self.dt = timestep*FS_TO_AU - self.max_time = max_time*FS_TO_AU + self.dt = timestep * FS_TO_AU + self.max_time = max_time * FS_TO_AU self.num_states = num_states self.Natom = atoms.get_number_of_atoms() self.out_file = out_file self.log_file = log_file self.setup_logging() - # everything in a.u. other than positions (which are in angstrom) self._positions = atoms.get_positions() - self._velocities = atoms.get_velocities()*EV_TO_AU/(ASE_TO_FS*FS_TO_AU) + self._velocities = atoms.get_velocities() * EV_TO_AU / (ASE_TO_FS * FS_TO_AU) self._forces = None self._energies = None self._surf = initial_surf self._in_trj = True - self._time = initial_time*FS_TO_AU + self._time = initial_time * FS_TO_AU self._hopping_probabilities = [] self.position_list = [self._positions] @@ -189,15 +186,11 @@ def __init__(self, self.ke_parallel = 0.0 self.ke = 0.0 - save_keys = ["position_list", "velocity_list", "force_list", "energy_list", "surf_list", "in_trj_list", "hopping_probability_list", "time_list"] super().__init__(save_keys=save_keys, **self.__dict__) - - - @property def positions(self): return self._positions @@ -289,7 +282,6 @@ def energies(self, value): else: self.energy_list = [value] - @surf.setter def surf(self, value): """ @@ -362,7 +354,7 @@ def get_masses(self): Returns: self.atoms.get_masses() (numpy.ndarray): masses """ - return self.atoms.get_masses()*AMU_TO_AU + return self.atoms.get_masses() * AMU_TO_AU def get_accel(self): """ @@ -374,7 +366,7 @@ def get_accel(self): # the force is force acting on the current state force = self.forces[self.surf] - accel = ( force / self.get_masses().reshape(-1, 1) ) + accel = (force / self.get_masses().reshape(-1, 1)) return accel def position_step(self): @@ -389,7 +381,7 @@ def position_step(self): # setters. self.positions = self.positions + (self.velocities * self.dt + 1 / - 2 * accel * self.dt ** 2) * BOHR_RADIUS + 2 * accel * self.dt ** 2) * BOHR_RADIUS def velocity_step(self): @@ -401,14 +393,11 @@ def velocity_step(self): self.surf = self.surf self.time = self.time + self.dt self.log("Completed step {}. Currently in state {}.".format( - int(self.time/self.dt), self.surf)) + int(self.time / self.dt), self.surf)) self.log("Relative energies are {} eV".format(", ".join( - ((self.energies - self.energies[0])*27.2).reshape(-1).astype("str").tolist()))) - + ((self.energies - self.energies[0]) * 27.2).reshape(-1).astype("str").tolist()))) def md_step(self): - - """ Take a regular molecular dynamics step on the current surface. """ @@ -419,7 +408,6 @@ def md_step(self): self.update_energies() self.velocity_step() - def check_crossing(self): """Check if we're at an avoided crossing by seeing if the energy gap was at a minimum in the last step. Args: @@ -429,7 +417,6 @@ def check_crossing(self): new_surfs (list): list of surfaces that are at an avoided crossing with the current surface. """ - new_surfs = [] at_crossing = False @@ -485,7 +472,7 @@ def update_diabatic_quants(self, lower_state, upper_state): # array of forces on the lower and upper diabatic states self.diabatic_forces = np.append([lower_diabatic_forces], [ - upper_diabatic_forces], axis=0) + upper_diabatic_forces], axis=0) # update diabatic coupling self.diabatic_coupling = ( @@ -515,7 +502,6 @@ def update_diabatic_quants(self, lower_state, upper_state): mol_norm(self.velocity_list[-2]) ** 2 / 2) def rescale_v(self, old_surf, new_surf): - """ Re-scale the velocity after a hop. Args: @@ -533,7 +519,7 @@ def rescale_v(self, old_surf, new_surf): # the scaling factor for the velocities scale_arg = (((energy[old_surf] + (self.ke_parallel)) - - energy[new_surf]) / (self.ke_parallel)) + energy[new_surf]) / (self.ke_parallel)) if scale_arg < 0: return "err" @@ -544,8 +530,6 @@ def rescale_v(self, old_surf, new_surf): (self.velocity_list[-2] - v_par_vec) def update_probabilities(self): - - """ Update the Zhu a, b and p probabilities. """ @@ -600,8 +584,7 @@ def update_probabilities(self): self.hopping_probabilities = hopping_probabilities def should_hop(self, zhu_a, zhu_b, zhu_p): - - """ + """ Decide whether or not to hop based on the zhu a, b and p parameters. Args: zhu_a (float): Zhu a parameter @@ -626,7 +609,6 @@ def should_hop(self, zhu_a, zhu_b, zhu_p): return will_hop def hop(self, new_surf): - """ Hop from the current surface to a new surface at an avoided crossing. Args: @@ -716,8 +698,7 @@ def run(self): self.save() self.log("Beginning surface hopping at {}.".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) self.log("Relative energies are {} eV".format(", ".join( - ((self.energies - self.energies[0])*27.2).reshape(-1).astype("str").tolist()))) - + ((self.energies - self.energies[0]) * 27.2).reshape(-1).astype("str").tolist()))) while self.time < self.max_time: self.step() @@ -727,9 +708,6 @@ def run(self): self.log("Surface hopping completed normally at {}.".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) - - - class BatchedZhuNakamura: """ @@ -753,7 +731,6 @@ class BatchedZhuNakamura: """ def __init__(self, atoms_list, props, batched_params, zhu_params): - """ Initialize. Args: @@ -763,14 +740,12 @@ def __init__(self, atoms_list, props, batched_params, zhu_params): zhu_params (dict): parameters related to Zhu Nakamura """ - self.num_trj = batched_params["num_trj"] self.zhu_trjs = self.make_zhu_trjs(props, atoms_list, zhu_params) self.max_time = self.zhu_trjs[0].max_time self.energy_keys = ["energy_{}".format(i) for i in range(self.zhu_trjs[0].num_states)] self.grad_keys = ["{}_grad".format(key) for key in self.energy_keys] - self.props = self.duplicate_props(props) self.nbr_update_period = batched_params["nbr_update_period"] self.device = batched_params["device"] @@ -779,9 +754,7 @@ def __init__(self, atoms_list, props, batched_params, zhu_params): self.batch_size = batched_params["batch_size"] self.cutoff = batched_params["cutoff"] - def make_zhu_trjs(self, props, atoms_list, zhu_params): - """ Instantiate the Zhu Nakamura objects. Args: @@ -810,7 +783,6 @@ def make_zhu_trjs(self, props, atoms_list, zhu_params): return zhu_trjs def duplicate_props(self, props): - """ Duplicate properties, once for each trajectory. Args: @@ -822,10 +794,10 @@ def duplicate_props(self, props): new_props = dict() for key, val in props.items(): if type(val) is list: - new_props[key] = val*self.num_trj + new_props[key] = val * self.num_trj elif hasattr(val, "tolist"): typ = type(val) - new_props[key] = typ((val.tolist())*self.num_trj) + new_props[key] = typ((val.tolist()) * self.num_trj) else: raise Exception @@ -834,9 +806,7 @@ def duplicate_props(self, props): return new_props - def update_energies_forces(self, trjs, get_new_neighbors): - """ Update the energies and forces for the molecules of each trajectory. Args: @@ -845,12 +815,11 @@ def update_energies_forces(self, trjs, get_new_neighbors): Returns: None """ - + nxyz_data = [atoms_to_nxyz(trj.atoms) for trj in trjs] self.props.update({"nxyz": nxyz_data}) dataset = Dataset(props=self.props.copy(), units='kcal/mol') - if get_new_neighbors: dataset.generate_neighbor_list(cutoff=self.cutoff) dataset.props["num_atoms"] = dataset.props["num_atoms"].long() @@ -864,17 +833,18 @@ def update_energies_forces(self, trjs, get_new_neighbors): results = self.model(batch) for key in self.grad_keys: - N = batch["num_atoms"].cpu().detach().numpy().tolist() + N = batch["num_atoms"].cpu().detach().numpy().tolist() results[key] = torch.split(results[key], N) - current_trj = i*self.batch_size + current_trj = i * self.batch_size - for j, trj in enumerate(trjs[current_trj:current_trj+self.batch_size]): + for j, trj in enumerate(trjs[current_trj:current_trj + self.batch_size]): energies = [] forces = [] for key in self.energy_keys: - energy = (results[key][j].item())*KCAL_TO_AU["energy"] - force = ((-results[key + "_grad"][j]).detach().cpu().numpy())*KCAL_TO_AU["energy"]*KCAL_TO_AU["_grad"] + energy = (results[key][j].item()) * KCAL_TO_AU["energy"] + force = ((-results[key + "_grad"][j]).detach().cpu().numpy()) * \ + KCAL_TO_AU["energy"] * KCAL_TO_AU["_grad"] energies.append(energy) forces.append(force) @@ -882,7 +852,6 @@ def update_energies_forces(self, trjs, get_new_neighbors): trj.forces = np.array(forces) def step(self, get_new_neighbors): - """ Take a step for each trajectory Args: @@ -902,7 +871,7 @@ def step(self, get_new_neighbors): # take a velocity step trj.velocity_step() # take a "full_step" with compute_internal_forces=False, - # which just amounts to checking if you're at a crossing and + # which just amounts to checking if you're at a crossing and # potentially hopping trj.full_step(compute_internal_forces=False) @@ -911,7 +880,6 @@ def step(self, get_new_neighbors): trj.save() def run(self): - """ Run all the trajectories """ @@ -936,12 +904,10 @@ def run(self): complete = all([trj.time >= self.max_time for trj in self.zhu_trjs]) - for trj in self.zhu_trjs: trj.output_to_json() - class CombinedZhuNakamura: """ @@ -959,7 +925,6 @@ class CombinedZhuNakamura: """ def __init__(self, atoms, zhu_params, batched_params, ground_params, props): - """ Initialize: atoms: ase Atoms objects @@ -976,7 +941,6 @@ def __init__(self, atoms, zhu_params, batched_params, ground_params, props): ase_ground_params["trajectory"] = ground_params["savefile"] # ase_ground_params["temperature"] = ground_params["temperature"]*KB_EV - method = METHOD_DIC[ase_ground_params["thermostat"]] self.ground_dynamics = method(atoms, **ase_ground_params) self.ground_savefile = ground_params["savefile"] @@ -995,7 +959,7 @@ def sample_ground_geoms(self): return [atoms] * self.num_trj """ - Run a ground state trajectory and extract starting geometries and velocities for each + Run a ground state trajectory and extract starting geometries and velocities for each Zhu Nakamura trajectory. Args: None @@ -1003,32 +967,26 @@ def sample_ground_geoms(self): actual_states (list): list of atoms objects extracted from the trajectories. """ - steps = int(self.ground_params["max_time"]/self.ground_params["timestep"]) - equil_steps = int(self.ground_params["equil_time"]/self.ground_params["timestep"]) + steps = int(self.ground_params["max_time"] / self.ground_params["timestep"]) + equil_steps = int(self.ground_params["equil_time"] / self.ground_params["timestep"]) self.ground_dynamics.run(steps=steps) trj = Trajectory(self.ground_savefile) possible_states = [trj[index] for index in range(equil_steps, len(trj))] - random_indices = random.sample(range(len(possible_states)), self.num_trj) + random_indices = random.sample(range(len(possible_states)), self.num_trj) actual_states = [possible_states[index] for index in random_indices] return actual_states def run(self): - """ Run a ground state trajectory followed by a set of parallel Zhu Nakamura trajectories. """ atoms_list = self.sample_ground_geoms() batched_zn = BatchedZhuNakamura(atoms_list=atoms_list, props=self.props, batched_params=self.batched_params, - zhu_params=self.zhu_params) + zhu_params=self.zhu_params) batched_zn.run() - - - - - diff --git a/nff/nn/__init__.py b/nff/nn/__init__.py index 64d1de05..12e3652c 100644 --- a/nff/nn/__init__.py +++ b/nff/nn/__init__.py @@ -3,4 +3,3 @@ from .utils import * from .models import * from .tensorgrad import * - diff --git a/nff/nn/glue.py b/nff/nn/glue.py index 484f17fb..255a265e 100644 --- a/nff/nn/glue.py +++ b/nff/nn/glue.py @@ -26,7 +26,7 @@ def forward(self, **kwargs): # run models - result_list = [self.models[key](batch, **kwargs) + result_list = [self.models[key](batch, **kwargs) for key in self.models.keys()] # perform further operations diff --git a/nff/nn/graphop.py b/nff/nn/graphop.py index f15dddc8..292ad565 100644 --- a/nff/nn/graphop.py +++ b/nff/nn/graphop.py @@ -177,7 +177,7 @@ def get_atoms_inside_cell(r, N, pbc): N = N.to(torch.long).tolist() # make N a list if it is a int - if type(N) == int: + if isinstance(N, int): N = [N] # selecting only the atoms inside the unit cell diff --git a/nff/nn/models/__init__.py b/nff/nn/models/__init__.py index b5549239..f9d1e770 100644 --- a/nff/nn/models/__init__.py +++ b/nff/nn/models/__init__.py @@ -1,2 +1,2 @@ from .schnet import * -from .dimenet import * \ No newline at end of file +from .dimenet import * diff --git a/nff/nn/models/conformers.py b/nff/nn/models/conformers.py index a7aabeea..91c31d58 100644 --- a/nff/nn/models/conformers.py +++ b/nff/nn/models/conformers.py @@ -17,7 +17,7 @@ class WeightedConformers(nn.Module): """ Model that uses a representation of a molecule in terms of different 3D - conformers to predict properties. The fingerprints of each conformer are + conformers to predict properties. The fingerprints of each conformer are generated using the SchNet model. """ @@ -209,8 +209,8 @@ def make_boltz_nn(self, boltzmann_dict): def add_features(self, batch, **kwargs): """ - Get any extra per-species features that were requested for - the dataset. + Get any extra per-species features that were requested for + the dataset. Args: batch (dict): batched sample of species Returns: @@ -355,14 +355,14 @@ def get_external_3d(self, batch, n_conf_list): """ - Get any extra 3D per-conformer features that were requested for - the dataset. + Get any extra 3D per-conformer features that were requested for + the dataset. Args: batch (dict): batched sample of species - n_conf_list (list[int]): list of number of conformers in each + n_conf_list (list[int]): list of number of conformers in each species. Returns: - split_extra (list): list of stacked per-cofnormer feature tensors + split_extra (list): list of stacked per-cofnormer feature tensors for each species. """ @@ -403,7 +403,7 @@ def get_conf_fps(self, mol_size (int): Number of atoms in the molecule batch (dict): batched sample of species split_extra (list): extra 3D fingerprints split by - species + species idx (int): index of the current species in the batch. """ @@ -571,8 +571,8 @@ def pool(self, outputs): Here, the atomic fingerprints for each geometry get converted into a molecular fingerprint. Then, the molecular fingerprints for the different conformers of a given species - get multiplied by the Boltzmann weights or learned weights of - those conformers and added together to make a final fingerprint + get multiplied by the Boltzmann weights or learned weights of + those conformers and added together to make a final fingerprint for the species. Args: diff --git a/nff/nn/models/cp3d.py b/nff/nn/models/cp3d.py index acf44902..48c88cf5 100644 --- a/nff/nn/models/cp3d.py +++ b/nff/nn/models/cp3d.py @@ -300,7 +300,7 @@ def make_h(self, bond_nbrs (torch.LongTensor): bonded neighbor list bond_idx (torch.LongTensor): indices that map an element of `bond_nbrs` to the corresponding - element in `nbr_list`. + element in `nbr_list`. """ # get the directed bond list and bond features @@ -323,7 +323,7 @@ def make_h(self, # (including bonded ones), to zero nbr_dim = nbr_list.shape[0] - h_0 = torch.zeros((nbr_dim, self.n_bond_hidden)) + h_0 = torch.zeros((nbr_dim, self.n_bond_hidden)) h_0 = h_0.to(device) # set the features of bonded edges equal to the bond @@ -392,10 +392,10 @@ def convolve_sub_batch(self, # don't use any kj_idx or ji_idx # because they are only relevant when - # you're doing updates with all neighbors, + # you're doing updates with all neighbors, # not with just the bonded neighbors like # we do here - + h_new = conv(h_0=h_0, h_new=h_new, all_nbrs=a, diff --git a/nff/nn/models/graphconvintegration.py b/nff/nn/models/graphconvintegration.py index b920d4e1..4b99cf31 100644 --- a/nff/nn/models/graphconvintegration.py +++ b/nff/nn/models/graphconvintegration.py @@ -13,7 +13,7 @@ class GraphConvIntegration(nn.Module): """SchNet with optional aggr_weight for thermodynamic intergration - + Attributes: atom_embed (torch.nn.Embedding): Convert atomic number into an embedding vector of size n_atom_basis @@ -27,10 +27,10 @@ class GraphConvIntegration(nn.Module): {name: mod_list}, where name is the name of a property object and mod_list is a ModuleList of layers to predict that property. """ - + def __init__(self, modelparams): """Constructs a SchNet model. - + Args: modelparams (TYPE): Description """ @@ -46,32 +46,31 @@ def __init__(self, modelparams): # default predict var readoutdict = modelparams.get('readoutdict', get_default_readout(n_atom_basis)) - post_readout = modelparams.get('post_readout', None) + post_readout = modelparams.get('post_readout', None) self.atom_embed = nn.Embedding(100, n_atom_basis, padding_idx=0) self.convolutions = nn.ModuleList([ SchNetConv(n_atom_basis=n_atom_basis, - n_filters=n_filters, - n_gaussians=n_gaussians, - cutoff=cutoff, - trainable_gauss=trainable_gauss) + n_filters=n_filters, + n_gaussians=n_gaussians, + cutoff=cutoff, + trainable_gauss=trainable_gauss) for _ in range(n_convolutions) ]) # ReadOut - self.atomwisereadout = NodeMultiTaskReadOut(multitaskdict=readoutdict, post_readout=post_readout) + self.atomwisereadout = NodeMultiTaskReadOut(multitaskdict=readoutdict, post_readout=post_readout) self.device = None def forward(self, batch, **kwargs): - """Summary - + Args: batch (dict): dictionary of props - + Returns: - dict: dionary of results + dict: dionary of results """ r = batch['nxyz'][:, 0] xyz = batch['nxyz'][:, 1:4] @@ -98,5 +97,5 @@ def forward(self, batch, **kwargs): r = self.atomwisereadout(r) results = batch_and_sum(r, N, list(batch.keys()), xyz) - - return results + + return results diff --git a/nff/nn/models/hybridgraph.py b/nff/nn/models/hybridgraph.py index c6cfbb67..553986cb 100644 --- a/nff/nn/models/hybridgraph.py +++ b/nff/nn/models/hybridgraph.py @@ -11,6 +11,7 @@ from nff.utils.scatter import scatter_add + class HybridGraphConv(nn.Module): def __init__(self, modelparams): @@ -24,40 +25,40 @@ def __init__(self, modelparams): mol_cutoff = modelparams['mol_cutoff'] sys_n_convolutions = modelparams['sys_n_convolutions'] sys_cutoff = modelparams['sys_cutoff'] - + self.power = modelparams["V_ex_power"] self.sigma = torch.nn.Parameter(torch.Tensor([modelparams["V_ex_sigma"]])) # default predict var readoutdict = modelparams.get('readoutdict', get_default_readout(n_atom_basis)) - post_readout = modelparams.get('post_readout', None) + post_readout = modelparams.get('post_readout', None) self.atom_embed = nn.Embedding(100, n_atom_basis, padding_idx=0) self.molecule_convolutions = nn.ModuleList([ SchNetConv(n_atom_basis=n_atom_basis, - n_filters=n_filters, - n_gaussians=n_gaussians, - cutoff=mol_cutoff, - trainable_gauss=trainable_gauss, - dropout_rate=0.0) + n_filters=n_filters, + n_gaussians=n_gaussians, + cutoff=mol_cutoff, + trainable_gauss=trainable_gauss, + dropout_rate=0.0) for _ in range(mol_n_convolutions) ]) - + self.system_convolutions = nn.ModuleList([ SchNetConv(n_atom_basis=n_atom_basis, - n_filters=n_filters, - n_gaussians=n_gaussians, - cutoff=sys_cutoff, - trainable_gauss=trainable_gauss, - dropout_rate=0.0) + n_filters=n_filters, + n_gaussians=n_gaussians, + cutoff=sys_cutoff, + trainable_gauss=trainable_gauss, + dropout_rate=0.0) for _ in range(sys_n_convolutions) ]) # ReadOut - self.atomwisereadout = NodeMultiTaskReadOut(multitaskdict=readoutdict, post_readout=post_readout) + self.atomwisereadout = NodeMultiTaskReadOut(multitaskdict=readoutdict, post_readout=post_readout) self.device = None - + def SeqConv(self, node, xyz, nbr_list, conv_module, pbc_offsets=None): if pbc_offsets is None: pbc_offsets = 0 @@ -66,12 +67,12 @@ def SeqConv(self, node, xyz, nbr_list, conv_module, pbc_offsets=None): dr = conv(r=node, e=e, a=nbr_list) node = node + dr return node - + def V_ex(self, xyz, nbr_list, pbc_offsets): dist = (xyz[nbr_list[:, 1]] - xyz[nbr_list[:, 0]] + pbc_offsets).pow(2).sum(1).sqrt() potential = ((dist.reciprocal() * self.sigma).pow(self.power)) return scatter_add(potential, nbr_list[:, 0], dim_size=xyz.shape[0])[:, None] - + def forward(self, batch, **kwargs): r = batch['nxyz'][:, 0] xyz = batch['nxyz'][:, 1:4] @@ -80,17 +81,17 @@ def forward(self, batch, **kwargs): a_sys = batch['nbr_list'] # offsets take care of periodic boundary conditions - offsets = batch.get('offsets', 0) # offsets only affect nbr_list + offsets = batch.get('offsets', 0) # offsets only affect nbr_list xyz.requires_grad = True node_input = self.atom_embed(r.long()).squeeze() - - # system convolution + + # system convolution r_sys = self.SeqConv(node_input, xyz, a_sys, self.system_convolutions, offsets) r_mol = self.SeqConv(node_input, xyz, a_mol, self.molecule_convolutions) - # Excluded Volume interactions - #r_ex = self.V_ex(xyz, a_sys, offsets) + # Excluded Volume interactions + # r_ex = self.V_ex(xyz, a_sys, offsets) results = self.atomwisereadout(r_sys + r_mol) - # add excluded volume interactions - #results['energy'] += r_ex + # add excluded volume interactions + # results['energy'] += r_ex results = batch_and_sum(results, N, list(batch.keys()), xyz) return results diff --git a/nff/nn/models/mace.py b/nff/nn/models/mace.py index 329a54f2..319d4ad1 100644 --- a/nff/nn/models/mace.py +++ b/nff/nn/models/mace.py @@ -138,9 +138,9 @@ def convert_batch_to_data(self, batch: dict) -> torch_geometric.data.Data: numbers = props.get("nxyz")[node_idx, 0].long().detach().cpu().numpy() if "cell" in props.keys(): - cell = props["cell"][3 * i : 3 * i + 3].detach().cpu().numpy() + cell = props["cell"][3 * i: 3 * i + 3].detach().cpu().numpy() elif "lattice" in props.keys(): - cell = props["lattice"][3 * i : 3 * i + 3].detach().cpu().numpy() + cell = props["lattice"][3 * i: 3 * i + 3].detach().cpu().numpy() else: raise ValueError("No cell or lattice found in batch") config = Configuration( @@ -510,7 +510,8 @@ def restore_foundations( model.interactions[i].linear.weight.clone() ) # Assuming 'model' and 'model_foundations' are instances of some torch.nn.Module - # And assuming the other variables (num_channels_foundation, num_species_foundations, etc.) are correctly defined + # And assuming the other variables (num_channels_foundation, + # num_species_foundations, etc.) are correctly defined if model.interactions[i].__class__.__name__ == "RealAgnosticResidualInteractionBlock": for k, index in enumerate(indices_weights): diff --git a/nff/nn/models/painn.py b/nff/nn/models/painn.py index 66ad8711..814e912d 100644 --- a/nff/nn/models/painn.py +++ b/nff/nn/models/painn.py @@ -214,7 +214,7 @@ def pool(self, batch, atomwise_out, xyz, r_ij, nbrs, inference=False): for key, pool_obj in self.pool_dic.items(): grad_key = f"{key}_grad" grad_keys = [grad_key] if (grad_key in self.grad_keys) else [] - if "stress" in self.grad_keys and not "stress" in all_results: + if "stress" in self.grad_keys and "stress" not in all_results: grad_keys.append("stress") results = pool_obj( batch=batch, @@ -659,7 +659,7 @@ def atomwise(self, batch, xyz=None): return results, xyz, r_ij, nbrs - + class Painn_VecOut2(Painn_VecOut): # unlike Painn_VecOut this uses 2 equivariant blocks for each output def __init__(self, @@ -678,7 +678,7 @@ def __init__(self, readout_dropout = modelparams.get("readout_dropout", 0) means = modelparams.get("means") stddevs = modelparams.get("stddevs") - + self.output_vec_keys = output_vec_keys # no skip connection in original paper self.skip_vec = modelparams.get("skip_vec_connection", @@ -689,15 +689,15 @@ def __init__(self, else 1) self.readout_vec_blocks = nn.ModuleList( [ReadoutBlock_Vec2(feat_dim=feat_dim, - output_keys=output_vec_keys, - activation=activation, - dropout=readout_dropout, - means=means, - stddevs=stddevs) + output_keys=output_vec_keys, + activation=activation, + dropout=readout_dropout, + means=means, + stddevs=stddevs) for _ in range(num_vec_readouts)] ) - - + + class Painn_NAC_OuterProd(Painn_VecOut2): # This model attempts to learn non-adiabatic coupling vectors # as suggested by Jeremy Richardson, as eigenvector @@ -711,25 +711,25 @@ def __init__(self, """ super().__init__(modelparams) - + def get_nac(self, all_results, batch, xyz): - + N = batch["num_atoms"].detach().cpu().tolist() xyz_s = torch.split(xyz, N) - + for key in self.output_vec_keys: - + mats = [] nacs = [] nu_s = torch.split(all_results[key], N) for nu, r in zip(nu_s, xyz_s): - mat = (torch.outer(r.reshape(-1), nu.reshape(-1)) - + torch.outer(nu.reshape(-1), r.reshape(-1))) + mat = (torch.outer(r.reshape(-1), nu.reshape(-1)) + + torch.outer(nu.reshape(-1), r.reshape(-1))) mats.append(mat) - + eigvals, eigvecs = torch.linalg.eigh(mat) real_vals = torch.abs(eigvals) phase = eigvals[0] / real_vals[0] @@ -738,12 +738,12 @@ def get_nac(self, max_idx = torch.argmax(real_vals) nac = real_vecs[:, max_idx] * torch.sqrt(real_vals[max_idx]) nacs.append(nac.reshape(-1, 3)) - + all_results[key] = torch.cat(nacs) - all_results[key+"_mat"] = tuple(mats) - + all_results[key + "_mat"] = tuple(mats) + return all_results, xyz - + def run(self, batch, xyz=None, @@ -752,7 +752,7 @@ def run(self, inference=False): from nff.train import batch_detach - + atomwise_out, xyz, r_ij, nbrs = self.atomwise(batch=batch, xyz=xyz) @@ -763,12 +763,12 @@ def run(self, atomwise_out[key] += r_ex pooled_results, xyz = self.pool(batch=batch, - atomwise_out=atomwise_out, - xyz=xyz, - r_ij=r_ij, - nbrs=nbrs, - inference=False) - + atomwise_out=atomwise_out, + xyz=xyz, + r_ij=r_ij, + nbrs=nbrs, + inference=False) + all_results, xyz = self.get_nac(all_results=pooled_results, batch=batch, xyz=xyz) @@ -785,7 +785,7 @@ def run(self, if getattr(self, "compute_delta", False): all_results = self.add_delta(all_results) - + if inference: batch_detach(all_results) @@ -1128,7 +1128,7 @@ def adibatic_energies( output = all_results[key] grad = compute_grad(output=output, inputs=xyz) all_results[grad_key] = grad - + return all_results, xyz def run( diff --git a/nff/nn/models/schnet.py b/nff/nn/models/schnet.py index d8d79ce2..2ab6334d 100644 --- a/nff/nn/models/schnet.py +++ b/nff/nn/models/schnet.py @@ -62,7 +62,7 @@ def __init__(self, modelparams): 'n_convolutions': 4, 'cutoff': 5.0, 'trainable_gauss': True, - 'readoutdict': readoutdict, + 'readoutdict': readoutdict, 'dropout_rate': 0.2 } @@ -142,7 +142,7 @@ def convolve(self, if xyz is None: xyz = batch["nxyz"][:, 1:4] - if xyz.requires_grad == False: + if not xyz.requires_grad: xyz.requires_grad = True r = batch["nxyz"][:, 0] diff --git a/nff/nn/models/spooky_net_source/functional.py b/nff/nn/models/spooky_net_source/functional.py index dcac75f8..0027acf1 100644 --- a/nff/nn/models/spooky_net_source/functional.py +++ b/nff/nn/models/spooky_net_source/functional.py @@ -11,6 +11,7 @@ unnecessary, but they are crucial for autograd to work properly. """ + def shifted_softplus(x: torch.Tensor) -> torch.Tensor: """ Shifted softplus activation function. """ return torch.nn.functional.softplus(x) - math.log(2) @@ -44,7 +45,7 @@ def switch_function(x: torch.Tensor, cuton: float, cutoff: float) -> torch.Tenso f(x) = 1 and for x >= cutoff, f(x) = 0. This switch function has infinitely many smooth derivatives. NOTE: The implementation with the "_switch_component" function is - numerically more stable than a simplified version, it is not recommended + numerically more stable than a simplified version, it is not recommended to change this! """ x = (x - cuton) / (cutoff - cuton) diff --git a/nff/nn/models/spooky_net_source/modules/sinc_functions.py b/nff/nn/models/spooky_net_source/modules/sinc_functions.py index 0f884904..4da731cc 100644 --- a/nff/nn/models/spooky_net_source/modules/sinc_functions.py +++ b/nff/nn/models/spooky_net_source/modules/sinc_functions.py @@ -7,7 +7,7 @@ # backwards compatibility with older versions of torch try: from torch import sinc -except: +except BaseException: def sinc(x): x = x * math.pi diff --git a/nff/nn/models/spooky_net_source/spookynet.py b/nff/nn/models/spooky_net_source/spookynet.py index 7f09e9cb..8b41c972 100644 --- a/nff/nn/models/spooky_net_source/spookynet.py +++ b/nff/nn/models/spooky_net_source/spookynet.py @@ -8,7 +8,7 @@ # backwards compatibility with old versions of pytorch try: from torch.linalg import norm -except: +except BaseException: from torch import norm @@ -36,7 +36,7 @@ class SpookyNet(nn.Module): num_modules (int): Number of modules (iterations) for constructing atomic features. num_residual_electron (int): - Number of residual blocks applied to features encoding the electronic + Number of residual blocks applied to features encoding the electronic state. num_residual_pre (int): Number of residual blocks applied to atomic features in each module @@ -45,16 +45,16 @@ class SpookyNet(nn.Module): Number of residual blocks applied to atomic features after interaction with neighbouring atoms (per module). num_residual_pre_local_x (int): - Number of residual blocks (per module) applied to atomic features in + Number of residual blocks (per module) applied to atomic features in local interaction. num_residual_pre_local_s (int): - Number of residual blocks (per module) applied to s-type interaction features + Number of residual blocks (per module) applied to s-type interaction features in local interaction. num_residual_pre_local_p (int): - Number of residual blocks (per module) applied to p-type interaction features + Number of residual blocks (per module) applied to p-type interaction features in local interaction. num_residual_pre_local_d (int): - Number of residual blocks (per module) applied to d-type interaction features + Number of residual blocks (per module) applied to d-type interaction features in local interaction. num_residual_post (int): Number of residual blocks applied to atomic features in each module @@ -969,7 +969,7 @@ def energy( Returns: energy (FloatTensor [B]): Potential energy of each molecule in the batch. - + (+ all return values of atomic_properties) """ if batch_seg is None: # assume a single batch @@ -1104,7 +1104,7 @@ def energy_and_forces_and_hessian( Hessian matrix. If more than one molecule is in the batch, the appropriate entries need to be collected from the matrix manually for each molecule. - + (+ all return values of atomic_properties) """ ( diff --git a/nff/nn/models/spooky_net_source/spookynet_calculator.py b/nff/nn/models/spooky_net_source/spookynet_calculator.py index 0175bd0c..39c49e89 100644 --- a/nff/nn/models/spooky_net_source/spookynet_calculator.py +++ b/nff/nn/models/spooky_net_source/spookynet_calculator.py @@ -7,6 +7,7 @@ from .spookynet import SpookyNet from .spookynet_ensemble import SpookyNetEnsemble + class SpookyNetCalculator(Calculator): """ This module defines an ASE interface for SpookyNet. diff --git a/nff/nn/modules/diabat.py b/nff/nn/modules/diabat.py index a59f1fdc..5e2a20f9 100644 --- a/nff/nn/modules/diabat.py +++ b/nff/nn/modules/diabat.py @@ -391,7 +391,7 @@ def add_nans(self, batch, results, nan_idx, train): for idx in nan_grad_idx: if train: continue - results[key][idx[0] : idx[1]] = results[key][idx[0] : idx[1]] * float("nan") + results[key][idx[0]: idx[1]] = results[key][idx[0]: idx[1]] * float("nan") def forward( self, diff --git a/nff/nn/modules/painn.py b/nff/nn/modules/painn.py index 8fa59783..8e6215f5 100644 --- a/nff/nn/modules/painn.py +++ b/nff/nn/modules/painn.py @@ -270,13 +270,13 @@ def __init__(self, self.v_mat = Dense(in_features=feat_dim, out_features=feat_dim, bias=False) - self.s_dense = nn.Sequential(Dense(in_features=2*feat_dim, + self.s_dense = nn.Sequential(Dense(in_features=2 * feat_dim, out_features=feat_dim, bias=True, dropout_rate=dropout, activation=to_module(activation)), Dense(in_features=feat_dim, - out_features=3*feat_dim, + out_features=3 * feat_dim, bias=True, dropout_rate=dropout)) @@ -378,36 +378,36 @@ def __init__(self, feat_dim, activation, dropout_rate): - + super().__init__() self.W1 = Dense(in_features=feat_dim, - out_features=feat_dim, - bias=False) + out_features=feat_dim, + bias=False) self.W2 = Dense(in_features=feat_dim, - out_features=feat_dim, - bias=False) - self.s_dense = nn.Sequential(Dense(in_features=2*feat_dim, + out_features=feat_dim, + bias=False) + self.s_dense = nn.Sequential(Dense(in_features=2 * feat_dim, out_features=feat_dim, bias=True, dropout_rate=dropout_rate, activation=to_module(activation)), Dense(in_features=feat_dim, - out_features=2*feat_dim, + out_features=2 * feat_dim, bias=True, dropout_rate=dropout_rate)) def forward(self, sv_tuple): - + s_i, v_i = sv_tuple v_tranpose = v_i.transpose(1, 2).reshape(-1, v_i.shape[1]) num_feats = v_i.shape[1] - + W1_v = (self.W1(v_tranpose).reshape(-1, 3, num_feats) - .transpose(1, 2)) + .transpose(1, 2)) W2_v = (self.W2(v_tranpose).reshape(-1, 3, num_feats) - .transpose(1, 2)) + .transpose(1, 2)) W2_v_norm = norm(W2_v) s_stack = torch.cat([s_i, W2_v_norm], dim=-1) @@ -422,8 +422,8 @@ def forward(self, new_s = split[:, 1, :] return (new_s, new_v) - - + + class ReadoutBlock(nn.Module): def __init__(self, feat_dim, @@ -437,11 +437,11 @@ def __init__(self, self.readoutdict = nn.ModuleDict( {key: nn.Sequential( Dense(in_features=feat_dim, - out_features=feat_dim//2, + out_features=feat_dim // 2, bias=True, dropout_rate=dropout, activation=to_module(activation)), - Dense(in_features=feat_dim//2, + Dense(in_features=feat_dim // 2, out_features=1, bias=True, dropout_rate=dropout)) @@ -464,7 +464,7 @@ def forward(self, s_i): results[key] = output return results - + class ReadoutBlock_Tuple(nn.Module): def __init__(self, @@ -475,27 +475,27 @@ def __init__(self, means=None, stddevs=None): super().__init__() - + self.output_keys = output_keys self.readoutdict = nn.ModuleDict( {key_tuple: nn.Sequential( Dense(in_features=feat_dim, - out_features=feat_dim//2, + out_features=feat_dim // 2, bias=True, dropout_rate=dropout, activation=to_module(activation)), - Dense(in_features=feat_dim//2, - out_features=feat_dim//4, + Dense(in_features=feat_dim // 2, + out_features=feat_dim // 4, bias=True, dropout_rate=dropout, activation=to_module(activation)), - Dense(in_features=feat_dim//4, - out_features=feat_dim//8, + Dense(in_features=feat_dim // 4, + out_features=feat_dim // 8, bias=True, dropout_rate=dropout, activation=to_module(activation)), - Dense(in_features=feat_dim//8, + Dense(in_features=feat_dim // 8, out_features=len(key_tuple.split("+")), bias=True, dropout_rate=dropout)) @@ -534,11 +534,11 @@ def __init__(self, self.readoutdict = nn.ModuleDict( {key: nn.Sequential( Dense(in_features=feat_dim, - out_features=feat_dim//2, + out_features=feat_dim // 2, bias=True, dropout_rate=dropout, activation=to_module(activation)), - Dense(in_features=feat_dim//2, + Dense(in_features=feat_dim // 2, out_features=2, bias=True, dropout_rate=dropout)) @@ -585,7 +585,7 @@ def __init__(self, ) self.sdense_dict = nn.ModuleDict( - {key: nn.Sequential(Dense(in_features=2*feat_dim, + {key: nn.Sequential(Dense(in_features=2 * feat_dim, out_features=feat_dim, bias=True, dropout_rate=dropout, @@ -647,7 +647,7 @@ def forward(self, new_v_i = u_v * a_vv # (num_atoms, num_feats, 3) new_v_i = new_v_i.transpose(1, 2) # (num_atoms, 3, num_feats) - output = readoutdict(new_v_i).sum(dim=2) # (num_atoms, 3, 1) -> (num_atoms, 3) + output = readoutdict(new_v_i).sum(dim=2) # (num_atoms, 3, 1) -> (num_atoms, 3) results[key] = output return results @@ -668,11 +668,11 @@ def __init__(self, self.gated_dict = nn.ModuleDict( {key: nn.Sequential(GatedEquivariantBlock(feat_dim=feat_dim, - dropout_rate=dropout, - activation=activation), + dropout_rate=dropout, + activation=activation), GatedEquivariantBlock(feat_dim=feat_dim, - dropout_rate=dropout, - activation=activation)) + dropout_rate=dropout, + activation=activation)) for key in output_keys} ) @@ -699,7 +699,7 @@ def forward(self, new_s_i, new_v_i = self.gated_dict[key]((s_i, v_i)) new_v_i = new_v_i.transpose(1, 2) # (num_atoms, 3, num_feats) - output = readoutdict(new_v_i).sum(dim=2) # (num_atoms, 3, 1) -> (num_atoms, 3) + output = readoutdict(new_v_i).sum(dim=2) # (num_atoms, 3, 1) -> (num_atoms, 3) results[key] = output return results @@ -755,8 +755,8 @@ def forward(self, # new_s_i, new_v_i = self.gated_dict[key]((s_i, v_i)) # new_v_i = new_v_i.transpose(1, 2) # (num_atoms, 3, num_feats) # nu = readoutdict(new_v_i).sum(dim=2) # (num_atoms, 3, 1) -> (num_atoms, 3) -# output = (torch.outer(r_i.reshape(-1), nu.reshape(-1)) +# output = (torch.outer(r_i.reshape(-1), nu.reshape(-1)) # + torch.outer(nu.reshape(-1), r_i.reshape(-1))) # results[key] = output -# return results \ No newline at end of file +# return results diff --git a/nff/nn/modules/schnet.py b/nff/nn/modules/schnet.py index fc5c7127..bb6d801c 100644 --- a/nff/nn/modules/schnet.py +++ b/nff/nn/modules/schnet.py @@ -48,11 +48,9 @@ def get_rij(xyz, batch, nbrs, cutoff): # to catch atoms that become neighbors between nbr # list updates) dist = (r_ij.detach() ** 2).sum(-1) ** 0.5 - - if type(cutoff) == torch.Tensor: + if isinstance(cutoff, torch.Tensor): dist = dist.to(cutoff.device) use_nbrs = dist <= cutoff - r_ij = r_ij[use_nbrs] nbrs = nbrs[use_nbrs] diff --git a/nff/nn/modules/spooky.py b/nff/nn/modules/spooky.py index 5889ed04..2baf8572 100644 --- a/nff/nn/modules/spooky.py +++ b/nff/nn/modules/spooky.py @@ -254,7 +254,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.resmlp(av) - e_psi[counter : counter + num_atoms[j]] = this_e_psi + e_psi[counter: counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi @@ -636,7 +636,7 @@ def get_charge(self, f, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = charge[counter : counter + n] + old_val = charge[counter: counter + n] new_val = old_val + correction[i] new_charges.append(new_val) diff --git a/nff/nn/modules/spooky_fast.py b/nff/nn/modules/spooky_fast.py index dfa160d8..10fe9ac7 100644 --- a/nff/nn/modules/spooky_fast.py +++ b/nff/nn/modules/spooky_fast.py @@ -101,7 +101,7 @@ def scatter_mol(atomwise, """ Add atomic contributions in a batch to their respective geometries. A simple sum is much faster than doing scatter_add - because it takes a very long time to make the indices that + because it takes a very long time to make the indices that map atom index to molecule. """ @@ -119,7 +119,7 @@ def scatter_pairwise(pairwise, nbrs): """ Add pair-wise contributions in a batch to their respective - geometries + geometries """ # mol_idx = [] diff --git a/nff/nn/modules/spooky_painn.py b/nff/nn/modules/spooky_painn.py index ac32b183..1630c39b 100644 --- a/nff/nn/modules/spooky_painn.py +++ b/nff/nn/modules/spooky_painn.py @@ -212,7 +212,7 @@ def charge_and_dip(self, xyz, s_i, v_i, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = atom_charges[counter : counter + n] + old_val = atom_charges[counter: counter + n] new_val = old_val + correction[i] new_charges.append(new_val) @@ -358,7 +358,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.dense(av) - e_psi[counter : counter + num_atoms[j]] = this_e_psi + e_psi[counter: counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi diff --git a/nff/nn/modules/torchmd_net.py b/nff/nn/modules/torchmd_net.py index 624d936a..bc0dc515 100644 --- a/nff/nn/modules/torchmd_net.py +++ b/nff/nn/modules/torchmd_net.py @@ -46,7 +46,7 @@ def __init__(self, rbf=rbf, bias=False) - self.concat_dense = Dense(in_features=2*feat_dim, + self.concat_dense = Dense(in_features=2 * feat_dim, out_features=feat_dim, dropout_rate=dropout, activation=None) diff --git a/nff/nn/tensorgrad.py b/nff/nn/tensorgrad.py index c9a5f6b1..3f55222b 100644 --- a/nff/nn/tensorgrad.py +++ b/nff/nn/tensorgrad.py @@ -12,7 +12,7 @@ def compute_jacobian(inputs, output, device): """ - Compute Jacobians + Compute Jacobians Args: inputs (torch.Tensor): size (N_in, ) @@ -88,7 +88,7 @@ def compute_hess(inputs, output, device): def get_schnet_hessians(batch, model, device=0): - """Get Hessians from schnet models + """Get Hessians from schnet models Args: batch (dict): batch of data @@ -106,9 +106,10 @@ def get_schnet_hessians(batch, model, device=0): return hess + def get_painn_hessians(batch, model, device=0): """Get Hessians from painn models. Hessian is returned in kcal/mol/A**2. - Use this method for painn models instead of hess from atoms. Tested both with + Use this method for painn models instead of hess from atoms. Tested both with molecular data (water) and periodic structures (quartz). Args: @@ -121,10 +122,10 @@ def get_painn_hessians(batch, model, device=0): xyz_reshape.requires_grad = True xyz_input = xyz_reshape.reshape(N_atom, 3) - results = model(batch,xyz=xyz_input) + results = model(batch, xyz=xyz_input) energy = results["energy"] - hess=compute_hess(xyz_reshape, energy, device=device) + hess = compute_hess(xyz_reshape, energy, device=device) return hess diff --git a/nff/opt/algos.py b/nff/opt/algos.py index ba736b20..622a43d5 100644 --- a/nff/opt/algos.py +++ b/nff/opt/algos.py @@ -6,15 +6,14 @@ from warnings import warn - class Converged(Exception): pass + class OptimizerConvergenceError(Exception): pass - class NeuralCG(SciPyFminCG): def call_fmin(self, fmax, steps): @@ -37,14 +36,14 @@ def call_fmin(self, fmax, steps): 'due to precision loss') def run(self, fmax=0.05, steps=100000000): - + if self.force_consistent is None: self.set_force_consistent() self.fmax = fmax try: # want to update the neighbor list every step self.atoms.update_nbr_list() - + # As SciPy does not log the zeroth iteration, we do that manually self.callback(None) @@ -54,11 +53,10 @@ def run(self, fmax=0.05, steps=100000000): pass - class NeuralBFGS(SciPyFminBFGS): def run(self, fmax=0.05, steps=100000000): - + if self.force_consistent is None: self.set_force_consistent() self.fmax = fmax @@ -74,7 +72,6 @@ def run(self, fmax=0.05, steps=100000000): pass - class NeuralAseBFGS(BFGS): def step(self, f=None): @@ -110,4 +107,4 @@ def step(self, f=None): atoms.set_positions(r + dr) self.r0 = r.flat.copy() self.f0 = f.copy() - self.dump((self.H, self.r0, self.f0, self.maxstep)) \ No newline at end of file + self.dump((self.H, self.r0, self.f0, self.maxstep)) diff --git a/nff/reactive_tools/nms.py b/nff/reactive_tools/nms.py index 4a6fc76f..73e40cda 100644 --- a/nff/reactive_tools/nms.py +++ b/nff/reactive_tools/nms.py @@ -1,97 +1,98 @@ import scipy import numpy as np from scipy.stats import rv_discrete -from ase.units import Bohr,Rydberg,kJ,kB,fs,Hartree,mol,kcal,second +from ase.units import Bohr, Rydberg, kJ, kB, fs, Hartree, mol, kcal, second CM_2_AU = 4.5564e-6 ANGS_2_AU = 1.8897259886 AMU_2_AU = 1822.88985136 k_B = 1.38064852e-23 -PLANCKS_CONS = 6.62607015e-34 +PLANCKS_CONS = 6.62607015e-34 HA2J = 4.359744E-18 BOHRS2ANG = 0.529177 SPEEDOFLIGHT = 2.99792458E8 -AMU2KG = 1.660538782E-27 +AMU2KG = 1.660538782E-27 + class Boltzmann_gen(rv_discrete): "Boltzmann distribution" + def _pmf(self, k, nu, temperature): - return ((np.exp(-(k * PLANCKS_CONS * nu)/(k_B * temperature))) * - (1 - np.exp(-(PLANCKS_CONS * nu)/(k_B * temperature)))) + return ((np.exp(-(k * PLANCKS_CONS * nu) / (k_B * temperature))) * + (1 - np.exp(-(PLANCKS_CONS * nu) / (k_B * temperature)))) + def reactive_normal_mode_sampling(xyz, force_constants_J_m_2, proj_vib_freq_cm_1, proj_hessian_eigvec, temperature, kick=1): - """Normal Mode Sampling for Transition States. Takes in xyz(1,N,3), force_constants(3N-6) in J/m^2, projected vibrational frequencies(3N-6) in cm^-1,mass-weighted projected hessian eigenvectors(3N-6,3N) - ,temperature in K, and scaling factor of initial velocity of the lowest imaginary mode. + ,temperature in K, and scaling factor of initial velocity of the lowest imaginary mode. Returns displaces xyz and a pair of velocities(forward and backwards)""" - - #Determine the highest level occupany of each mode + + # Determine the highest level occupany of each mode occ_vib_modes = [] boltzmann = Boltzmann_gen(a=0, b=1000000, name="boltzmann") for i, nu in enumerate(proj_vib_freq_cm_1): if nu > 50: - occ_vib_modes.append(boltzmann.rvs(nu * SPEEDOFLIGHT * 100, - temperature)) + occ_vib_modes.append(boltzmann.rvs(nu * SPEEDOFLIGHT * 100, + temperature)) elif i == 0: - occ_vib_modes.append(boltzmann.rvs(-1 * nu * SPEEDOFLIGHT * 100, + occ_vib_modes.append(boltzmann.rvs(-1 * nu * SPEEDOFLIGHT * 100, temperature)) else: occ_vib_modes.append(-1) - - #Determine maximum displacement (amplitude) of each mode - + + # Determine maximum displacement (amplitude) of each mode + amplitudes = [] freqs = [] for i, occ in enumerate(occ_vib_modes): if occ >= 0: - energy = proj_vib_freq_cm_1[i] * SPEEDOFLIGHT * 100 * PLANCKS_CONS # cm-1 to Joules - amplitudes.append(np.sqrt((0.5 * (occ + 1) * energy) / force_constants_J_m_2[i]) * 1e9) #Angstom + energy = proj_vib_freq_cm_1[i] * SPEEDOFLIGHT * 100 * PLANCKS_CONS # cm-1 to Joules + amplitudes.append(np.sqrt((0.5 * (occ + 1) * energy) / force_constants_J_m_2[i]) * 1e9) # Angstom else: amplitudes.append(0) - #Determine the actual displacements and velocities + # Determine the actual displacements and velocities displacements = [] velocities = [] - random_0_1 = [np.random.normal(0,1) for i in range(len(amplitudes))] + random_0_1 = [np.random.normal(0, 1) for i in range(len(amplitudes))] for i, amplitude in enumerate(amplitudes): - + if force_constants_J_m_2[i] > 0: - - displacements.append(amplitude - * np.cos(2 * np.pi * random_0_1[i]) + + displacements.append(amplitude + * np.cos(2 * np.pi * random_0_1[i]) * proj_hessian_eigvec[i]) - + velocities.append(-1 * proj_vib_freq_cm_1[i] * SPEEDOFLIGHT * 100 * 2 * np.pi - * amplitude - * np.sin(2 * np.pi * random_0_1[i]) - * proj_hessian_eigvec[i] / Bohr**2) - + * amplitude + * np.sin(2 * np.pi * random_0_1[i]) + * proj_hessian_eigvec[i] / Bohr**2) + elif i == 0: - + displacements.append(0) velocities.append(0) - + # Extra kick for lowest imagninary mode(s) velocities.append(-1 * proj_vib_freq_cm_1[i] * SPEEDOFLIGHT * 100 * 2 * np.pi - * amplitude - * np.sin(2 * np.pi * random_0_1[i]) - * proj_hessian_eigvec[i] / Bohr**2) - - + * amplitude + * np.sin(2 * np.pi * random_0_1[i]) + * proj_hessian_eigvec[i] / Bohr**2) + else: - + displacements.append(0) velocities.append(0) - - tot_disp = np.sum(np.array(displacements),axis=0) - #In angstroms - disp_xyz = xyz + tot_disp.reshape(1,-1,3) - #In angstroms per second - tot_vel_plus = np.sum(np.array(velocities),axis=0).reshape(1,-1,3) + + tot_disp = np.sum(np.array(displacements), axis=0) + # In angstroms + disp_xyz = xyz + tot_disp.reshape(1, -1, 3) + # In angstroms per second + tot_vel_plus = np.sum(np.array(velocities), axis=0).reshape(1, -1, 3) tot_vel_minus = -1 * tot_vel_plus - + return disp_xyz, tot_vel_plus, tot_vel_minus diff --git a/nff/reactive_tools/reactive_langevin.py b/nff/reactive_tools/reactive_langevin.py index ffecd1c7..8014a4c2 100644 --- a/nff/reactive_tools/reactive_langevin.py +++ b/nff/reactive_tools/reactive_langevin.py @@ -1,67 +1,66 @@ from ase.io import Trajectory from ase.md.langevin import * from ase import Atoms -from ase.units import Bohr,Rydberg,kJ,kB,fs,Hartree,mol,kcal,second,Ang +from ase.units import Bohr, Rydberg, kJ, kB, fs, Hartree, mol, kcal, second, Ang from nff.md.utils import NeuralMDLogger, write_traj + class Reactive_Dynamics: - - def __init__(self, - atomsbatch, - nms_vel, - mdparam, - ): - - # initialize the atoms batch system + + def __init__(self, + atomsbatch, + nms_vel, + mdparam, + ): + + # initialize the atoms batch system self.atomsbatch = atomsbatch self.mdparam = mdparam - - #initialize velocity from nms + + # initialize velocity from nms self.vel = nms_vel - + self.temperature = self.mdparam['T_init'] - + self.friction = self.mdparam['friction'] - + # todo: structure optimization before starting - - # intialize system momentum by normal mode sampling - self.atomsbatch.set_velocities(self.vel.reshape(-1,3) * Ang / second) - - # set thermostats + + # intialize system momentum by normal mode sampling + self.atomsbatch.set_velocities(self.vel.reshape(-1, 3) * Ang / second) + + # set thermostats integrator = self.mdparam['thermostat'] - - self.integrator = integrator(self.atomsbatch, + + self.integrator = integrator(self.atomsbatch, self.mdparam['time_step'] * fs, - self.temperature * kB, + self.temperature * kB, self.friction) - - # attach trajectory dump + + # attach trajectory dump self.traj = Trajectory(self.mdparam['traj_filename'], 'w', self.atomsbatch) self.integrator.attach(self.traj.write, interval=mdparam['save_frequency']) - + # attach log file - self.integrator.attach(NeuralMDLogger(self.integrator, - self.atomsbatch, - self.mdparam['thermo_filename'], + self.integrator.attach(NeuralMDLogger(self.integrator, + self.atomsbatch, + self.mdparam['thermo_filename'], mode='a'), interval=mdparam['save_frequency']) def run(self): - + self.integrator.run(self.mdparam['steps']) - #self.traj.close() - - + # self.traj.close() + def save_as_xyz(self, filename): - ''' - TODO: save time information + TODO: save time information TODO: subclass TrajectoryReader/TrajectoryReader to digest AtomsBatch instead of Atoms? - TODO: other system variables in .xyz formats + TODO: other system variables in .xyz formats ''' traj = Trajectory(self.mdparam['traj_filename'], mode='r') - + xyz = [] for snapshot in traj: @@ -69,7 +68,7 @@ def save_as_xyz(self, filename): snapshot.get_atomic_numbers().reshape(-1, 1), snapshot.get_positions().reshape(-1, 3) ], axis=1) - + xyz.append(frames) - + write_traj(filename, np.array(xyz)) diff --git a/nff/train/chgnet.py b/nff/train/chgnet.py index f24696f8..aa0c512b 100644 --- a/nff/train/chgnet.py +++ b/nff/train/chgnet.py @@ -9,6 +9,7 @@ class CombinedLossNFF(CombinedLoss): """Wrapper for the combined loss function that maps keys from NFF to CHGNet keys.""" + def __init__(self, *args, key_mappings=None, **kwargs): super().__init__(*args, **kwargs) if not key_mappings: @@ -37,11 +38,17 @@ def forward(self, targets: Dict[str, Tensor], predictions: Dict[str, Tensor], ke raise ValueError("key_style must be either 'nff' or 'chgnet'") targets = {k: self.split_props(k, v, detach(targets["num_atoms"]).tolist()) for k, v in targets.items()} - predictions = {k: self.split_props(k, v, detach(predictions["num_atoms"]).tolist()) for k, v in predictions.items()} + predictions = { + k: self.split_props( + k, + v, + detach( + predictions["num_atoms"]).tolist()) for k, + v in predictions.items()} if key_style == "nff": - targets = {self.key_mappings.get(k, k): self.negate_value(k, v) for k, v in targets.items()} - predictions = {self.key_mappings.get(k, k): self.negate_value(k, v) for k, v in predictions.items()} + targets = {self.key_mappings.get(k, k): self.negate_value(k, v) for k, v in targets.items()} + predictions = {self.key_mappings.get(k, k): self.negate_value(k, v) for k, v in predictions.items()} out = super().forward(targets, predictions) loss = out["loss"] diff --git a/nff/train/hooks/base_hook.py b/nff/train/hooks/base_hook.py index 2e9093f4..3f55745b 100644 --- a/nff/train/hooks/base_hook.py +++ b/nff/train/hooks/base_hook.py @@ -3,6 +3,7 @@ Retrieved from https://github.com/atomistic-machine-learning/schnetpack/tree/dev/src/schnetpack/train/hooks """ + class Hook: """Base class for hooks.""" diff --git a/nff/train/metrics.py b/nff/train/metrics.py index e29f00b7..a1bcc405 100644 --- a/nff/train/metrics.py +++ b/nff/train/metrics.py @@ -237,7 +237,7 @@ def aggregate(self): class FalsePositives(Classifier): """ - Percentage of claimed positives that are actually wrong for a + Percentage of claimed positives that are actually wrong for a binary classifier. """ @@ -272,7 +272,7 @@ def loss_fn(y, yp): class FalseNegatives(Classifier): """ - Percentage of claimed negatives that are actually wrong for a + Percentage of claimed negatives that are actually wrong for a binary classifier. """ @@ -306,7 +306,7 @@ def loss_fn(y, yp): class TruePositives(Classifier): """ - Percentage of claimed positives that are actually right for a + Percentage of claimed positives that are actually right for a binary classifier. """ @@ -341,7 +341,7 @@ def loss_fn(y, yp): class TrueNegatives(Classifier): """ - Percentage of claimed negatives that are actually right for a + Percentage of claimed negatives that are actually right for a binary classifier. """ diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index d35dc26d..2e7be7b7 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -401,12 +401,12 @@ def clean(molecule): molecule = re.sub('Cl', '[#17]', molecule) molecule = re.sub('C', '[#6]', molecule) molecule = re.sub('c', '[#6]', molecule) - molecule = re.sub('\[N-\]', '[#7-]', molecule) + molecule = re.sub('\\[N-\\]', '[#7-]', molecule) molecule = re.sub('N', '[#7]', molecule) molecule = re.sub('n', '[#7]', molecule) - molecule = re.sub('\[\[', '[', molecule) - molecule = re.sub('\]\]', ']', molecule) - molecule = re.sub('\]H\]', 'H]', molecule) + molecule = re.sub('\\[\\[', '[', molecule) + molecule = re.sub('\\]\\]', ']', molecule) + molecule = re.sub('\\]H\\]', 'H]', molecule) molecule = re.sub('=', '~', molecule) return molecule @@ -438,7 +438,7 @@ def minimize(output, output.write(("Minimisation complete, generated conformations " "with the following energies:\n")) output.write("\n".join([str(energy[1]) - for energy in confgen.conf_energies])+"\n") + for energy in confgen.conf_energies]) + "\n") msg = (f"Clustering structures using an energy window of " f"{e_window} and an rms tolerance of {rms_tol} and a " f"Report Energy Window of {rep_e_window}\n") @@ -683,7 +683,7 @@ def one_species_confs(molecule, smiles = copy.deepcopy(molecule) with open(log, "w") as output: output.write("The smiles strings that will be run are:\n") - output.write("\n".join([molecule])+"\n") + output.write("\n".join([molecule]) + "\n") if any([element in molecule for element in UFF_ELEMENTS]): output.write(("Switching to UFF, since MMFF94 does " diff --git a/nff/utils/confs.py b/nff/utils/confs.py index cabc6a72..15e4bc30 100644 --- a/nff/utils/confs.py +++ b/nff/utils/confs.py @@ -44,7 +44,7 @@ def get_batch_dic(batch, statistical weight will be used. num_confs (int): Number of conformers to keep Returns: - info_dic (dict): Dictionary with extra conformer + info_dic (dict): Dictionary with extra conformer information about the batch """ @@ -86,7 +86,7 @@ def to_xyz_idx(batch_dic): Get the indices of the nxyz corresponding to atoms in conformers we want to keep. Args: - batch_dic (dict): Dictionary with extra conformer + batch_dic (dict): Dictionary with extra conformer information about the batch Returns: xyz_conf_all_idx (torch.LongTensor): nxyz indices of atoms @@ -126,13 +126,13 @@ def split_nbrs(nbrs, confs_in_batch, conf_idx): """ - Get the indices of the neighbor list that correspond to conformers + Get the indices of the neighbor list that correspond to conformers we're keeping. Args: nbrs (torch.LongTensor): neighbor list mol_size (int): Number of atoms in each conformer confs_in_batch (int): Total number of conformers in the batch - conf_idx (list[int]): Indices of the conformers we're keeping + conf_idx (list[int]): Indices of the conformers we're keeping Returns: tens_idx (torch.LongTensor): nbr indices of conformers we're keeping. @@ -166,12 +166,12 @@ def to_nbr_idx(batch_dic, nbrs): """ Apply `split_nbrs` given `batch_dic` Args: - batch_dic (dict): Dictionary with extra conformer + batch_dic (dict): Dictionary with extra conformer information about the batch nbrs (torch.LongTensor): neighbor list Returns: split_nbr_idx (torch.LongTensor): nbr indices of conformers we're - keeping. + keeping. """ mol_size = batch_dic["mol_size"] @@ -190,7 +190,7 @@ def update_weights(batch, batch_dic): """ Readjust weights so they sum to 1. Args: - batch_dic (dict): Dictionary with extra conformer + batch_dic (dict): Dictionary with extra conformer information about the batch batch (dict): Batch dictionary Returns: @@ -263,7 +263,7 @@ def update_dset(batch, batch_dic, dataset, i): number of conformers, for species at index i. Args: batch (dict): Batch dictionary - batch_dic (dict): Dictionary with extra conformer + batch_dic (dict): Dictionary with extra conformer information about the batch dataset (nff.data.dataset): NFF dataset i (int): index of the species whose info we're updating @@ -330,9 +330,9 @@ def trim_confs(dataset, of the conformers you want to keep. If not specified, then the top `num_confs` conformers with the highest statistical weight will be used. - enum_func (callable, optional): a function with which to + enum_func (callable, optional): a function with which to enumerate the dataset. If not given, we use tqdm - to track progress. + to track progress. Returns: dataset (nff.data.dataset): updated NFF dataset """ @@ -367,10 +367,10 @@ def make_split_nbrs(nbr_list, confs_per_split (list[int]): number of conformers in each sub-batch. Returns: - all_grouped_nbrs (list[torch.LongTensor]): list of + all_grouped_nbrs (list[torch.LongTensor]): list of neighbor lists for each sub-batch. - nbr_masks (list(torch.BoolTensor))): masks that tell you which - indices of the combined neighbor list are being used for the + nbr_masks (list(torch.BoolTensor))): masks that tell you which + indices of the combined neighbor list are being used for the neighbor list of each sub-batch. """ @@ -429,8 +429,8 @@ def add_split_nbrs(batch, Returns: sub_batches (list[dict]): list of sub_batches updated with their neighbor lists. - nbr_masks (list(torch.BoolTensor))): masks that tell you which - indices of the combined neighbor list are being used for the + nbr_masks (list(torch.BoolTensor))): masks that tell you which + indices of the combined neighbor list are being used for the neighbor list of each sub-batch. """ @@ -496,8 +496,8 @@ def fix_nbr_idx(batch, and `ji_idx`). Args: batch (dict): batched sample of species - masks (list(torch.BoolTensor))): masks that tell you which - indices of the combined neighbor list are being used for the + masks (list(torch.BoolTensor))): masks that tell you which + indices of the combined neighbor list are being used for the neighbor list of each sub-batch. sub_batches (list[dict]): sub batches of the batch Returns: diff --git a/nff/utils/constants.py b/nff/utils/constants.py index cdefcb54..c94a7b11 100644 --- a/nff/utils/constants.py +++ b/nff/utils/constants.py @@ -35,53 +35,51 @@ AU_TO_KCAL = { "energy": HARTREE_TO_KCAL_MOL, "_grad": 1.0 / BOHR_RADIUS, - "stress": HARTREE_TO_KCAL_MOL*((1.0/BOHR_RADIUS)**3), - "_volume": 1/((1.0/BOHR_RADIUS)**3), + "stress": HARTREE_TO_KCAL_MOL * ((1.0 / BOHR_RADIUS)**3), + "_volume": 1 / ((1.0 / BOHR_RADIUS)**3), } AU_TO_EV = { "energy": HARTREE_TO_EV, "_grad": 1.0 / BOHR_RADIUS, - "stress": HARTREE_TO_EV*((1.0/BOHR_RADIUS)**3), - "_volume": 1/((1.0/BOHR_RADIUS)**3), + "stress": HARTREE_TO_EV * ((1.0 / BOHR_RADIUS)**3), + "_volume": 1 / ((1.0 / BOHR_RADIUS)**3), } EV_TO_AU = { "energy": 1.0 / HARTREE_TO_EV, "_grad": BOHR_RADIUS, - "stress": (1.0/HARTREE_TO_EV)*(BOHR_RADIUS**3), - "_volume": 1/(BOHR_RADIUS**3), + "stress": (1.0 / HARTREE_TO_EV) * (BOHR_RADIUS**3), + "_volume": 1 / (BOHR_RADIUS**3), } EV_TO_KCAL = { "energy": EV_TO_KCAL_MOL, "_grad": 1.0, - "stress": EV_TO_KCAL_MOL*(1.0**3), - "_volume": 1/(1.0**3), + "stress": EV_TO_KCAL_MOL * (1.0**3), + "_volume": 1 / (1.0**3), } KCAL_TO_AU = { "energy": 1.0 / HARTREE_TO_KCAL_MOL, "_grad": BOHR_RADIUS, - "stress": (1.0/HARTREE_TO_KCAL_MOL)*(BOHR_RADIUS**3), - "_volume": 1/(BOHR_RADIUS**3), + "stress": (1.0 / HARTREE_TO_KCAL_MOL) * (BOHR_RADIUS**3), + "_volume": 1 / (BOHR_RADIUS**3), } KCAL_TO_EV = { "energy": 1.0 / EV_TO_KCAL_MOL, "_grad": 1.0, - "stress": (1.0/EV_TO_KCAL_MOL)*(1.0**3), - "_volume": 1/(1.0**3), + "stress": (1.0 / EV_TO_KCAL_MOL) * (1.0**3), + "_volume": 1 / (1.0**3), } - - DEFAULT = { "energy": 1.0, "_grad": 1.0, diff --git a/nff/utils/dispersion.py b/nff/utils/dispersion.py index 403e107b..14cba679 100644 --- a/nff/utils/dispersion.py +++ b/nff/utils/dispersion.py @@ -83,14 +83,14 @@ def get_periodic_nbrs(batch, # cutoff specified by r_cut in Bohr (a.u.) # estimate getting close to the cutoff with supercell expansion a_mul = int(np.ceil( - (r_cut*const.BOHR_RADIUS) / np.linalg.norm(cell[0]) - )) + (r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[0]) + )) b_mul = int(np.ceil( - (r_cut*const.BOHR_RADIUS) / np.linalg.norm(cell[1]) - )) + (r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[1]) + )) c_mul = int(np.ceil( - (r_cut*const.BOHR_RADIUS) / np.linalg.norm(cell[2]) - )) + (r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[2]) + )) supercell_matrix = np.array([[a_mul, 0, 0], [0, b_mul, 0], [0, 0, c_mul]]) @@ -103,35 +103,35 @@ def get_periodic_nbrs(batch, # need to get all negative lattice translation vectors # but remove duplicate 0 vector zero_idx = np.where( - np.all(_lattice_points.__eq__(np.array([0,0,0])), - axis=1) - )[0][0] + np.all(_lattice_points.__eq__(np.array([0, 0, 0])), + axis=1) + )[0][0] _lattice_points = np.concatenate([_lattice_points[zero_idx:, :], _lattice_points[:zero_idx, :]]) - _z = nxyz[:,0].long().to(device) + _z = nxyz[:, 0].long().to(device) _N = len(_lattice_points) # perform lattice translations on positions lattice_points_T = (torch.tile( - torch.from_numpy(_lattice_points), - ( (len(_xyz),) + - (1,)*(len(_lattice_points.shape)-1) ) - ) / const.BOHR_RADIUS).to(device) + torch.from_numpy(_lattice_points), + ((len(_xyz),) + + (1,) * (len(_lattice_points.shape) - 1)) + ) / const.BOHR_RADIUS).to(device) _xyz_T = ((torch.repeat_interleave(_xyz, _N, dim=0) - / const.BOHR_RADIUS).to(device)) + / const.BOHR_RADIUS).to(device)) _xyz_T = _xyz_T + lattice_points_T # get valid indices within the cutoff num = _xyz.shape[0] idx = torch.arange(num) x, y = torch.meshgrid(idx, idx) - _nbrs = torch.cat([x.reshape(-1, 1), y.reshape(-1, 1)], - dim=1).to(device) + _nbrs = torch.cat([x.reshape(-1, 1), y.reshape(-1, 1)], + dim=1).to(device) _lattice_points = (torch.tile( - torch.from_numpy(_lattice_points).to(device), - ( (len(_nbrs),) + - (1,)*(len(_lattice_points.shape)-1) ) - ) ) + torch.from_numpy(_lattice_points).to(device), + ((len(_nbrs),) + + (1,) * (len(_lattice_points.shape) - 1)) + )) # convert everything from Angstroms to Bohr _xyz = _xyz / const.BOHR_RADIUS @@ -141,10 +141,10 @@ def get_periodic_nbrs(batch, # ensure that A != B when T=0 # since first index in _lattice_points corresponds to T=0 # get the idxs on which to apply the mask - idxs_to_apply = torch.tensor([True]*len(_nbrs_T)).to(device) + idxs_to_apply = torch.tensor([True] * len(_nbrs_T)).to(device) idxs_to_apply[::_N] = False # get the mask that we want to apply - mask = _nbrs_T[:,0] != _nbrs_T[:,1] + mask = _nbrs_T[:, 0] != _nbrs_T[:, 1] # do a joint boolean operation to get the mask _mask_applied = torch.logical_or(idxs_to_apply, mask) _nbrs_T = _nbrs_T[_mask_applied] @@ -179,7 +179,7 @@ def get_periodic_nbrs(batch, ).long().to(_xyz.device) return nbrs_T, nbrs, z, _xyzs, N, lattice_points, mask_applied, \ - r_cut, mol_idx + r_cut, mol_idx def get_periodic_coordination(xyz, @@ -196,8 +196,8 @@ def get_periodic_coordination(xyz, # r_ij with all lattice translation vectors # vector btwn pairs of atoms - r_ij_T = ( (xyz[nbrs_T[:, 0]] - xyz[nbrs_T[:, 1]]) - + lattice_points ).to(xyz.device) + r_ij_T = ((xyz[nbrs_T[:, 0]] - xyz[nbrs_T[:, 1]]) + + lattice_points).to(xyz.device) # r_ab with all lattice translations # distance (scalar) btwn pairs of atoms @@ -209,16 +209,15 @@ def get_periodic_coordination(xyz, nbrs_T_cn = nbrs_T[r_ab_T < cn_cut] r_ab_T_cn = r_ab_T[r_ab_T < cn_cut] - # calculate covalent radii (for coordination number calculation) ra_cov_T = r_cov[z[nbrs_T_cn[:, 0]]].to(r_ab_T.device) rb_cov_T = r_cov[z[nbrs_T_cn[:, 1]]].to(r_ab_T.device) cn_ab_T = ((1 / (1 + torch.exp( - -k1 * (k2 * (ra_cov_T + rb_cov_T) / r_ab_T_cn - 1)))) - .to(r_ab_T.device)) + -k1 * (k2 * (ra_cov_T + rb_cov_T) / r_ab_T_cn - 1)))) + .to(r_ab_T.device)) cn = scatter_add(cn_ab_T, - nbrs_T_cn[:, 0], - dim_size=xyz.shape[0]) + nbrs_T_cn[:, 0], + dim_size=xyz.shape[0]) return r_ab_T, r_ij_T, cn @@ -404,43 +403,43 @@ def get_dispersion(batch, disp_type=disp_type, func_params=func_params) - periodic = (batch.get('cell',None) is not None) + periodic = (batch.get('cell', None) is not None) device = xyz.device if periodic: (nbrs_T, nbrs, z, _xyzs, N, - lattice_points, mask_applied, - r_cut, mol_idx) = get_periodic_nbrs(batch=batch, - xyz=xyz, - nbrs_info=nbrs, - mol_idx=mol_idx) + lattice_points, mask_applied, + r_cut, mol_idx) = get_periodic_nbrs(batch=batch, + xyz=xyz, + nbrs_info=nbrs, + mol_idx=mol_idx) r_ij_T = [] c6 = [] c8 = [] filtered_nbrs_T = [] for _nbrs_T, _nbrs, _z, _xyz, _N, _lattice_points, _mask_applied \ - in zip(nbrs_T, nbrs, z, _xyzs, N, lattice_points, mask_applied): + in zip(nbrs_T, nbrs, z, _xyzs, N, lattice_points, mask_applied): _r_ab_T, _r_ij_T, cn = get_periodic_coordination( - xyz=_xyz, - z=_z, - nbrs_T=_nbrs_T, - lattice_points=_lattice_points, - r_cov=r_cov, - k1=params["k1"], - k2=params["k2"] - ) + xyz=_xyz, + z=_z, + nbrs_T=_nbrs_T, + lattice_points=_lattice_points, + r_cov=r_cov, + k1=params["k1"], + k2=params["k2"] + ) _c6 = get_c6(z=_z, - cn=cn, - nbrs=_nbrs, - c6_ref=c6_ref, - k3=params["k3"]) + cn=cn, + nbrs=_nbrs, + c6_ref=c6_ref, + k3=params["k3"]) _c8 = get_c8(z=_z, - nbrs=_nbrs, - c6=_c6, - r2r4=r2r4) + nbrs=_nbrs, + c6=_c6, + r2r4=r2r4) # get original pairwise interactions from within unit cell # change shape of all tensors to account for the fake expansion @@ -466,28 +465,28 @@ def get_dispersion(batch, c8 = torch.cat(c8) mask_applied = torch.cat(mask_applied).to(device) - + count = 0 counter = [] for _xyz in _xyzs: counter.append(count) - count+=len(_xyz) + count += len(_xyz) - filtered_nbrs_T = [_nbrs_T+count for _nbrs_T, count - in zip(filtered_nbrs_T, counter)] + filtered_nbrs_T = [_nbrs_T + count for _nbrs_T, count + in zip(filtered_nbrs_T, counter)] nbrs_T = torch.cat(filtered_nbrs_T).to(device) xyzs = torch.cat(_xyzs).to(device) - e_disp=disp_from_data(r_ab=r_ab_T, - c6=c6, - c8=c8, - s6=params["s6"], - s8=params["s8"], - a1=params["a1"], - a2=params["a2"], - xyz=xyzs, - nbrs=nbrs_T, - mol_idx=mol_idx) + e_disp = disp_from_data(r_ab=r_ab_T, + c6=c6, + c8=c8, + s6=params["s6"], + s8=params["s8"], + a1=params["a1"], + a2=params["a2"], + xyz=xyzs, + nbrs=nbrs_T, + mol_idx=mol_idx) else: nbrs, mol_idx, z = get_nbrs(batch=batch, @@ -521,7 +520,7 @@ def get_dispersion(batch, a2=params["a2"], xyz=xyz, nbrs=nbrs, - mol_idx=mol_idx) + mol_idx=mol_idx) r_ij_T = None nbrs_T = None @@ -531,7 +530,7 @@ def get_dispersion(batch, def grimme_dispersion(batch, xyz, disp_type, functional): d3 = DFTD3(xc='pbe', damping='bj', grad=True) - atoms = Atoms(cell=batch.get('cell',None).detach().cpu().numpy(), + atoms = Atoms(cell=batch.get('cell', None).detach().cpu().numpy(), numbers=batch['nxyz'][:, 0].detach().cpu().numpy(), positions=xyz.detach().cpu().numpy(), pbc=True) atoms.calc = d3 @@ -539,4 +538,4 @@ def grimme_dispersion(batch, xyz, disp_type, functional): stress_disp = atoms.get_stress(voigt=False) forces_disp = atoms.get_forces() - return e_disp, stress_disp, forces_disp \ No newline at end of file + return e_disp, stress_disp, forces_disp diff --git a/nff/utils/functions.py b/nff/utils/functions.py index 558ff398..7ba7bdce 100644 --- a/nff/utils/functions.py +++ b/nff/utils/functions.py @@ -1,6 +1,6 @@ """ Special functions for DimeNet and SpookyNet. -Dimenet functions taken directly from +Dimenet functions taken directly from https://github.com/klicperajo/ dimenet/blob/master/dimenet/model/ layers/basis_utils.py. @@ -24,7 +24,7 @@ def Jn(r, n): """ numerical spherical bessel functions of order n """ - return np.sqrt(np.pi/(2*r)) * sp.jv(n+0.5, r) + return np.sqrt(np.pi / (2 * r)) * sp.jv(n + 0.5, r) def Jn_zeros(n, k): @@ -51,11 +51,11 @@ def spherical_bessel_formulas(n): """ x = sym.symbols('x') - f = [sym.sin(x)/x] - a = sym.sin(x)/x + f = [sym.sin(x) / x] + a = sym.sin(x) / x for i in range(1, n): - b = sym.diff(a, x)/x - f += [sym.simplify(b*(-x)**i)] + b = sym.diff(a, x) / x + f += [sym.simplify(b * (-x)**i)] a = sym.simplify(b) return f @@ -71,8 +71,8 @@ def bessel_basis(n, k): for order in range(n): normalizer_tmp = [] for i in range(k): - normalizer_tmp += [0.5*Jn(zeros[order, i], order+1)**2] - normalizer_tmp = 1/np.array(normalizer_tmp)**0.5 + normalizer_tmp += [0.5 * Jn(zeros[order, i], order + 1)**2] + normalizer_tmp = 1 / np.array(normalizer_tmp)**0.5 normalizer += [normalizer_tmp] f = spherical_bessel_formulas(n) @@ -82,8 +82,8 @@ def bessel_basis(n, k): bess_basis_tmp = [] for i in range(k): bess_basis_tmp += [sym.simplify(normalizer[order] - [i]*f[order].subs( - x, zeros[order, i]*x))] + [i] * f[order].subs( + x, zeros[order, i] * x))] bess_basis += [bess_basis_tmp] return bess_basis @@ -95,8 +95,8 @@ def sph_harm_prefactor(l, m): l: int, l>=0 m: int, -l<=m<=l """ - return ((2*l+1) * np.math.factorial(l-abs(m)) - / (4*np.pi*np.math.factorial(l+abs(m))))**0.5 + return ((2 * l + 1) * np.math.factorial(l - abs(m)) + / (4 * np.pi * np.math.factorial(l + abs(m))))**0.5 def associated_legendre_polynomials(l, zero_m_only=True): @@ -104,7 +104,7 @@ def associated_legendre_polynomials(l, zero_m_only=True): Computes sympy formulas of the associated legendre polynomials up to order l (excluded). """ z = sym.symbols('z') - P_l_m = [[0]*(j+1) for j in range(l)] + P_l_m = [[0] * (j + 1) for j in range(l)] P_l_m[0][0] = 1 if l > 0: @@ -112,16 +112,16 @@ def associated_legendre_polynomials(l, zero_m_only=True): for j in range(2, l): P_l_m[j][0] = sym.simplify( - ((2*j-1)*z*P_l_m[j-1][0] - (j-1)*P_l_m[j-2][0])/j) + ((2 * j - 1) * z * P_l_m[j - 1][0] - (j - 1) * P_l_m[j - 2][0]) / j) if not zero_m_only: for i in range(1, l): - P_l_m[i][i] = sym.simplify((1-2*i)*P_l_m[i-1][i-1]) + P_l_m[i][i] = sym.simplify((1 - 2 * i) * P_l_m[i - 1][i - 1]) if i + 1 < l: - P_l_m[i+1][i] = sym.simplify((2*i+1)*z*P_l_m[i][i]) + P_l_m[i + 1][i] = sym.simplify((2 * i + 1) * z * P_l_m[i][i]) for j in range(i + 2, l): P_l_m[j][i] = sym.simplify( - ((2*j-1) * z * P_l_m[j-1][i] - - (i+j-1) * P_l_m[j-2][i]) / (j - i)) + ((2 * j - 1) * z * P_l_m[j - 1][i] + - (i + j - 1) * P_l_m[j - 2][i]) / (j - i)) return P_l_m @@ -139,8 +139,8 @@ def real_sph_harm(l, for i in range(1, l): x = sym.symbols('x') y = sym.symbols('y') - S_m += [x*S_m[i-1] + y*C_m[i-1]] - C_m += [x*C_m[i-1] - y*S_m[i-1]] + S_m += [x * S_m[i - 1] + y * C_m[i - 1]] + C_m += [x * C_m[i - 1] - y * S_m[i - 1]] P_l_m = associated_legendre_polynomials(l, zero_m_only) if spherical_coordinates: @@ -148,18 +148,18 @@ def real_sph_harm(l, z = sym.symbols('z') for i in range(len(P_l_m)): for j in range(len(P_l_m[i])): - if type(P_l_m[i][j]) != int: + if not isinstance(P_l_m[i][j], int): P_l_m[i][j] = P_l_m[i][j].subs(z, sym.cos(theta)) if not zero_m_only: phi = sym.symbols('phi') for i in range(len(S_m)): S_m[i] = S_m[i].subs(x, sym.sin( - theta)*sym.cos(phi)).subs(y, sym.sin(theta)*sym.sin(phi)) + theta) * sym.cos(phi)).subs(y, sym.sin(theta) * sym.sin(phi)) for i in range(len(C_m)): C_m[i] = C_m[i].subs(x, sym.sin( - theta)*sym.cos(phi)).subs(y, sym.sin(theta)*sym.sin(phi)) + theta) * sym.cos(phi)).subs(y, sym.sin(theta) * sym.sin(phi)) - Y_func_l_m = [['0']*(2*j + 1) for j in range(l)] + Y_func_l_m = [['0'] *(2 *j + 1) for j in range(l)] for i in range(l): Y_func_l_m[i][0] = sym.simplify(sph_harm_prefactor(i, 0) * P_l_m[i][0]) @@ -223,7 +223,7 @@ def c_plm(p, l, m): def make_c_table(l_max): c_table = {} for l in range(l_max + 1): - for m in range(-l, l+1): + for m in range(-l, l +1): for p in range(0, math.floor((l - m) / 2) + 1): c_table[(p, l, m)] = c_plm(p, l, m) return c_table @@ -320,7 +320,7 @@ def b_k(x, binoms = (torch.Tensor([sp.binom(bern_k - 1, int(k)) for k in k_vals]) .to(device)) - out = binoms * (x ** k_vals) * (1-x) ** (bern_k - 1 - k_vals) + out = binoms * (x ** k_vals) * (1 -x) ** (bern_k - 1 - k_vals) return out diff --git a/nff/utils/misc.py b/nff/utils/misc.py index 1d2e1b21..cfa14fb9 100644 --- a/nff/utils/misc.py +++ b/nff/utils/misc.py @@ -327,7 +327,7 @@ def prop_split(max_specs, dataset_type, props, sample_dic, seed): else: random.shuffle(underrep) random.shuffle(overrep) - keep_smiles = underrep[: max_specs // 2] + overrep[max_specs // 2 :] + keep_smiles = underrep[: max_specs // 2] + overrep[max_specs // 2:] else: keep_smiles = list(sample_dic.keys()) diff --git a/nff/utils/scatter.py b/nff/utils/scatter.py index 9c0b9087..1ea928c0 100644 --- a/nff/utils/scatter.py +++ b/nff/utils/scatter.py @@ -9,10 +9,10 @@ def compute_grad(inputs, Args: inputs (torch.Tensor): torch tensor, requires_grad=True - output (torch.Tensor): scalar output + output (torch.Tensor): scalar output Returns: - torch.Tensor: gradients with respect to each input component + torch.Tensor: gradients with respect to each input component """ assert inputs.requires_grad diff --git a/nff/utils/script_utils/loaders.py b/nff/utils/script_utils/loaders.py index 2e12c6b7..b1357db1 100644 --- a/nff/utils/script_utils/loaders.py +++ b/nff/utils/script_utils/loaders.py @@ -32,10 +32,10 @@ def get_loaders(args, logging=None): val_size=args.split[0], test_size=args.split[1] ) - + if logging is not None: logging.info("load data...") - + train_loader = DataLoader( train, batch_size=args.batch_size, @@ -55,5 +55,5 @@ def get_loaders(args, logging=None): num_workers=args.workers, collate_fn=collate_dicts ) - + return train_loader, val_loader, test_loader diff --git a/nff/utils/script_utils/parsers.py b/nff/utils/script_utils/parsers.py index d4a76cca..0679b10f 100644 --- a/nff/utils/script_utils/parsers.py +++ b/nff/utils/script_utils/parsers.py @@ -7,7 +7,7 @@ def get_main_parser(): """ Setup parser for command line arguments """ - ## command-specific + # command-specific cmd_parser = argparse.ArgumentParser(add_help=False) cmd_parser.add_argument( "--device", @@ -30,7 +30,7 @@ def get_main_parser(): def add_subparsers(cmd_parser, defaults={}): - ## training + # training train_parser = argparse.ArgumentParser(add_help=False, parents=[cmd_parser]) train_parser.add_argument("data_path", help="Dataset to use") train_parser.add_argument("model_path", help="Destination for models and logs") @@ -111,7 +111,7 @@ def add_subparsers(cmd_parser, defaults={}): default='{"energy": 0.1, "energy_grad": 1.0}', ) - ## evaluation + # evaluation eval_parser = argparse.ArgumentParser(add_help=False, parents=[cmd_parser]) eval_parser.add_argument("data_path", help="Dataset to use") eval_parser.add_argument("model_path", help="Path of stored model") @@ -164,7 +164,7 @@ def add_subparsers(cmd_parser, defaults={}): help="Dropout rate for SchNet convolutions (default: %(default)s)", ) - ## setup subparser structure + # setup subparser structure cmd_subparsers = cmd_parser.add_subparsers( dest="mode", help="Command-specific arguments" ) diff --git a/nff/utils/tools.py b/nff/utils/tools.py index abb2200b..4baed084 100644 --- a/nff/utils/tools.py +++ b/nff/utils/tools.py @@ -31,7 +31,7 @@ "sigmoid": torch.nn.Sigmoid, "Dropout": torch.nn.Dropout, "LeakyReLU": torch.nn.LeakyReLU, - "ELU": torch.nn.ELU, + "ELU": torch.nn.ELU, "swish": Swish, "learnable_swish": LearnableSwish, "softplus": torch.nn.Softplus @@ -39,20 +39,20 @@ def construct_Sequential(layers): - """Construct a sequential model from list of params + """Construct a sequential model from list of params Args: - layers (list): list to describe the stacked layer params + layers (list): list to describe the stacked layer params example: [ {'name': 'linear', 'param' : {'in_features': 10, 'out_features': 20}}, {'name': 'linear', 'param' : {'in_features': 10, 'out_features': 1}} ] Returns: - Sequential: Stacked Sequential Model + Sequential: Stacked Sequential Model """ - return Sequential(collections.OrderedDict([layer['name']+str(i), + return Sequential(collections.OrderedDict([layer['name'] + str(i), layer_types[layer['name']]( **layer['param']) ] for i, layer in enumerate(layers))) @@ -157,6 +157,7 @@ def make_directed(nbr_list): new_nbrs = torch.cat([nbr_list, nbr_list.flip(1)], dim=0) return new_nbrs, directed + def make_undirected(nbr_list): gtr_ij = (nbr_list[:, 0] > nbr_list[:, 1]).any().item() gtr_ji = (nbr_list[:, 1] > nbr_list[:, 0]).any().item() @@ -165,5 +166,5 @@ def make_undirected(nbr_list): if not directed: return nbr_list, directed nbrs = nbr_list[nbr_list[:, 1] > nbr_list[:, 0]] - + return nbrs, directed diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index d63feafa..b1d3f1dc 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -38,17 +38,17 @@ global __ATOM_LIST__ __ATOM_LIST__ = \ - ['h', 'he', - 'li', 'be', 'b', 'c', 'n', 'o', 'f', 'ne', - 'na', 'mg', 'al', 'si', 'p', 's', 'cl', 'ar', - 'k', 'ca', 'sc', 'ti', 'v ', 'cr', 'mn', 'fe', 'co', 'ni', 'cu', + ['h', 'he', + 'li', 'be', 'b', 'c', 'n', 'o', 'f', 'ne', + 'na', 'mg', 'al', 'si', 'p', 's', 'cl', 'ar', + 'k', 'ca', 'sc', 'ti', 'v ', 'cr', 'mn', 'fe', 'co', 'ni', 'cu', 'zn', 'ga', 'ge', 'as', 'se', 'br', 'kr', - 'rb', 'sr', 'y', 'zr', 'nb', 'mo', 'tc', 'ru', 'rh', 'pd', 'ag', - 'cd', 'in', 'sn', 'sb', 'te', 'i', 'xe', + 'rb', 'sr', 'y', 'zr', 'nb', 'mo', 'tc', 'ru', 'rh', 'pd', 'ag', + 'cd', 'in', 'sn', 'sb', 'te', 'i', 'xe', 'cs', 'ba', 'la', 'ce', 'pr', 'nd', 'pm', 'sm', 'eu', 'gd', 'tb', 'dy', - 'ho', 'er', 'tm', 'yb', 'lu', 'hf', 'ta', 'w', 're', 'os', 'ir', 'pt', + 'ho', 'er', 'tm', 'yb', 'lu', 'hf', 'ta', 'w', 're', 'os', 'ir', 'pt', 'au', 'hg', 'tl', 'pb', 'bi', 'po', 'at', 'rn', - 'fr', 'ra', 'ac', 'th', 'pa', 'u', 'np', 'pu'] + 'fr', 'ra', 'ac', 'th', 'pa', 'u', 'np', 'pu'] global atomic_valence @@ -172,11 +172,11 @@ def BO_is_OK(BO, AC, charge, DU, atomic_valence_electrons, atoms, valances, BO - AC - charge - - DU - + DU - optional - allow_charges_fragments - + allow_charges_fragments - returns: @@ -671,7 +671,7 @@ def xyz2AC_huckel(atomicNumList, xyz, charge): tri[np.tril(np.ones((num_atoms, num_atoms), dtype=bool)) ] = opop # lower triangular to square matrix for i in range(num_atoms): - for j in range(i+1, num_atoms): + for j in range(i + 1, num_atoms): pair_pop = abs(tri[j, i]) if pair_pop >= 0.15: # arbitry cutoff for bond. May need adjustment AC[i, j] = 1 diff --git a/pyproject.toml b/pyproject.toml index 2e3c0e6c..ff05d35e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,6 +53,15 @@ Homepage = "https://github.mit.edu/MLMat/NeuralForceField/" [tool.setuptools] packages.find = { where = ["."], include = ["nff*"] } +[tool.autopep8] +max_line_length = 120 +in-place = true +recursive = true +aggressive = 2 + +[tool.flake8] +max_line_length = 120 + [tool.ruff] include = ["**/pyproject.toml", "*.ipynb", "*.py", "*.pyi"] exclude = ["__init__.py"] From 607ef698647234bcdf263e6e01dae18f43341b5c Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 16 Dec 2024 14:59:40 -0500 Subject: [PATCH 13/66] getting existent tests to work (with cpu) --- conftest.py | 12 ++++++++++ nff/data/dataset.py | 15 +++++------- nff/data/tests/test_dataset.py | 10 +++++++- nff/io/tests/test_ase.py | 36 +++++++++++++++++++++------- nff/md/zhu_nakamura/dynamics_test.py | 4 ++-- 5 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 conftest.py diff --git a/conftest.py b/conftest.py new file mode 100644 index 00000000..f5f4d021 --- /dev/null +++ b/conftest.py @@ -0,0 +1,12 @@ + +import pytest + + +def pytest_addoption(parser): + print("add option") + parser.addoption("--device", action="store", default="cpu", help="Whether to use the CPU or GPU for the tests") + + +@pytest.fixture +def device(request): + return request.config.getoption("--device") diff --git a/nff/data/dataset.py b/nff/data/dataset.py index 974ccb8c..f3b0d7bd 100644 --- a/nff/data/dataset.py +++ b/nff/data/dataset.py @@ -40,8 +40,7 @@ featurize_parallel, ) -if TYPE_CHECKING: - from nff.io.ase import AtomsBatch +from nff.io.ase import AtomsBatch class Dataset(TorchDataset): @@ -86,6 +85,7 @@ def __init__( units: str = "kcal/mol", check_props: bool = True, do_copy: bool = True, + device: str = "cuda" ) -> None: """Constructor for Dataset class. @@ -108,6 +108,7 @@ def __init__( self.props = props self.units = units self.to_units(units) + self.device = device def __len__(self) -> int: """Length of the dataset. @@ -276,8 +277,6 @@ def _get_periodic_neighbor_list( offset_key: str = "offsets", nbr_key: str = "nbr_list", ) -> None: - from nff.io.ase import AtomsBatch - nbrlist = [] offsets = [] for nxyz, lattice in zip(self.props["nxyz"], self.props["lattice"]): @@ -289,6 +288,7 @@ def _get_periodic_neighbor_list( pbc=True, cutoff=cutoff, directed=(not undirected), + device=self.device, ) nbrs, offs = atoms.update_nbr_list() nbrlist.append(nbrs) @@ -434,8 +434,6 @@ def unwrap_xyz(self, mol_dic: dict) -> None: Args: mol_dic (dict): dictionary of nodes of each disconnected subgraphs """ - from nff.io.ase import AtomsBatch - for i in range(len(self.props["nxyz"])): # makes atoms object @@ -444,6 +442,7 @@ def unwrap_xyz(self, mol_dic: dict) -> None: numbers=self.props["nxyz"][i][:, 0], cell=self.props["cell"][i], pbc=True, + device=self.device ) # recontruct coordinates based on subgraphs index @@ -510,7 +509,6 @@ def gen_bond_prior(self, cutoff: float, bond_len_dict: dict | None = None) -> No Raises: TypeError: _description_ """ - from nff.io.ase import AtomsBatch if not self.props: raise TypeError("the dataset has no data yet") @@ -577,6 +575,7 @@ def gen_bond_prior(self, cutoff: float, bond_len_dict: dict | None = None) -> No "cutoff": cutoff, "cell": cell, "nbr_torch": False, + "device": self.device } # the coordinates have been unwrapped and try to results offsets @@ -611,8 +610,6 @@ def as_atoms_batches( Returns: List[AtomsBatch]: list of AtomsBatch objects """ - from nff.io.ase import AtomsBatch - atoms_batches = [] num_batches = len(self.props["nxyz"]) for i in range(num_batches): diff --git a/nff/data/tests/test_dataset.py b/nff/data/tests/test_dataset.py index cdbf73bf..17b227ff 100644 --- a/nff/data/tests/test_dataset.py +++ b/nff/data/tests/test_dataset.py @@ -6,6 +6,8 @@ import numpy as np import torch +import pytest + from nff.data.dataset import ( Dataset, concatenate_dict, @@ -223,6 +225,7 @@ def test_inexistent_list_lists(self): self.assertEqual(ab, expected) +@pytest.mark.usefixtures("device") # Ensure the fixture is accessible class TestPeriodicDataset(unittest.TestCase): def setUp(self): self.quartz = { @@ -248,7 +251,12 @@ def setUp(self): ), } - self.qtz_dataset = Dataset(concatenate_dict(*[self.quartz] * 3)) + self.qtz_dataset = Dataset(concatenate_dict(*[self.quartz] * 3), device=self._test_fixture_device) + + @pytest.fixture(autouse=True) + def inject_device(self, device): + # Automatically set the fixture value to an attribute + self._test_fixture_device = device def test_neighbor_list(self): nbrs, offs = self.qtz_dataset.generate_neighbor_list(cutoff=5) diff --git a/nff/io/tests/test_ase.py b/nff/io/tests/test_ase.py index 14ee02d7..e5b7971a 100644 --- a/nff/io/tests/test_ase.py +++ b/nff/io/tests/test_ase.py @@ -5,6 +5,8 @@ import numpy as np from ase import Atoms +import pytest + from nff.io.ase import AtomsBatch @@ -19,6 +21,8 @@ def compare_dicts(d1: dict, d2: dict): for key, value in d1.items(): if isinstance(value, dict): compare_dicts(value, d2[key]) + elif isinstance(value, str): + assert value == d2[key] elif isinstance(value, Iterable): assert np.allclose(value, d2[key]) else: @@ -47,10 +51,17 @@ def get_ethanol(): return Atoms(nxyz[:, 0].astype(int), positions=nxyz[:, 1:]) -# @ut.skip("skip this for now") +@pytest.mark.usefixtures("device") # Ensure the fixture is accessible class TestAtomsBatch(ut.TestCase): def setUp(self): self.ethanol = get_ethanol() + # Access the device value from the pytest fixture + self.device = self._test_fixture_device + + @pytest.fixture(autouse=True) + def inject_device(self, device): + # Automatically set the fixture value to an attribute + self._test_fixture_device = device @ut.skip("skip this for now") def test_AtomsBatch(self): @@ -111,7 +122,7 @@ def test_AtomsBatch(self): ] ) - atoms_batch = AtomsBatch(self.ethanol, cutoff=2.5) + atoms_batch = AtomsBatch(self.ethanol, cutoff=2.5, device=self.device) atoms_batch.update_nbr_list() G1 = nx.from_edgelist(expected_nbrlist_cutoff_2dot5) @@ -120,13 +131,13 @@ def test_AtomsBatch(self): assert nx.is_isomorphic(G1, G2) def test_get_batch(self): - atoms_batch = AtomsBatch(self.ethanol, cutoff=5) + atoms_batch = AtomsBatch(self.ethanol, cutoff=5, device=self.device) batch = atoms_batch.get_batch() assert "nxyz" in batch def test_from_atoms(self): - atoms_batch = AtomsBatch.from_atoms(self.ethanol, cutoff=2.5) + atoms_batch = AtomsBatch.from_atoms(self.ethanol, cutoff=2.5, device=self.device) # ensure atomic numbers, positions, and cell are the same assert np.allclose(atoms_batch.get_atomic_numbers(), self.ethanol.get_atomic_numbers()) @@ -134,7 +145,7 @@ def test_from_atoms(self): assert np.allclose(atoms_batch.get_cell(), self.ethanol.get_cell()) def test_copy(self): - atoms_batch = AtomsBatch(self.ethanol, cutoff=2.5) + atoms_batch = AtomsBatch(self.ethanol, cutoff=2.5, device=self.device) atoms_batch.get_batch() # update props atoms_batch_copy = atoms_batch.copy() @@ -154,7 +165,7 @@ def test_copy(self): assert atoms_batch.requires_large_offsets == atoms_batch_copy.requires_large_offsets def test_fromdict(self): - atoms_batch = AtomsBatch(self.ethanol, cutoff=2.5) + atoms_batch = AtomsBatch(self.ethanol, cutoff=2.5, device=self.device) ab_dict = atoms_batch.todict(update_props=True) ab_from_dict = AtomsBatch.fromdict(ab_dict) @@ -183,6 +194,7 @@ def test_fromdict(self): compare_dicts(ab_dict_props, ab_dict_again_props) +@pytest.mark.usefixtures("device") # Ensure the fixture is loaded class TestPeriodic(ut.TestCase): def setUp(self): nxyz = np.array( @@ -205,9 +217,15 @@ def setUp(self): [0.0, 0.0, 5.51891759], ] ) - self.quartz = AtomsBatch(nxyz[:, 0].astype(int), positions=nxyz[:, 1:], cell=lattice, pbc=True) - - def test_ase(self): + self.quartz = AtomsBatch(nxyz[:, 0].astype(int), positions=nxyz[:, 1:], cell=lattice, pbc=True, + device=self._test_fixture_device) + + @pytest.fixture(autouse=True) + def inject_device(self, device): + # Automatically set the fixture value to an attribute + self._test_fixture_device = device + + def test_print(self): print(self.quartz) def test_nbrlist(self): diff --git a/nff/md/zhu_nakamura/dynamics_test.py b/nff/md/zhu_nakamura/dynamics_test.py index bf391d24..41eb460a 100644 --- a/nff/md/zhu_nakamura/dynamics_test.py +++ b/nff/md/zhu_nakamura/dynamics_test.py @@ -15,8 +15,8 @@ from ase.io.trajectory import Trajectory from ase import Atoms -from nff.md.utils import mol_dot, mol_norm, ZhuNakamuraLogger, atoms_to_nxyz -from nff.md.nvt_test import NoseHoover, NoseHooverChain +from nff.md.utils_ax import mol_dot, mol_norm, ZhuNakamuraLogger, atoms_to_nxyz +from nff.md.nvt_ax import NoseHoover, NoseHooverChain from nff.utils.constants import BOHR_RADIUS, FS_TO_AU, AMU_TO_AU, FS_TO_ASE, ASE_TO_FS, EV_TO_AU from nff.data import Dataset, collate_dicts from nff.utils.cuda import batch_to From d66dff0ffb2de679e878661ec18ac9ed0a6f8027 Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 16 Dec 2024 15:11:19 -0500 Subject: [PATCH 14/66] move tests to designated folder --- nff/data/dataset.py | 10 +++++++++- nff/{data => }/tests/__init__.py | 0 conftest.py => nff/tests/conftest.py | 0 nff/{md/zhu_nakamura => tests}/dynamics_test.py | 0 nff/{io => }/tests/test_ase.py | 0 nff/{io/tests => tests/test_data}/__init__.py | 0 .../data/SrIrO3_bulk_55_nff_all_dataset.pth.tar | Bin nff/{data/tests => tests/test_data}/test_dataset.py | 4 ++-- nff/{data/tests => tests/test_data}/test_stats.py | 0 9 files changed, 11 insertions(+), 3 deletions(-) rename nff/{data => }/tests/__init__.py (100%) rename conftest.py => nff/tests/conftest.py (100%) rename nff/{md/zhu_nakamura => tests}/dynamics_test.py (100%) rename nff/{io => }/tests/test_ase.py (100%) rename nff/{io/tests => tests/test_data}/__init__.py (100%) rename nff/{data/tests => tests/test_data}/data/SrIrO3_bulk_55_nff_all_dataset.pth.tar (100%) rename nff/{data/tests => tests/test_data}/test_dataset.py (97%) rename nff/{data/tests => tests/test_data}/test_stats.py (100%) diff --git a/nff/data/dataset.py b/nff/data/dataset.py index f3b0d7bd..7bd20958 100644 --- a/nff/data/dataset.py +++ b/nff/data/dataset.py @@ -40,7 +40,8 @@ featurize_parallel, ) -from nff.io.ase import AtomsBatch +if TYPE_CHECKING: + from nff.io.ase import AtomsBatch class Dataset(TorchDataset): @@ -277,6 +278,8 @@ def _get_periodic_neighbor_list( offset_key: str = "offsets", nbr_key: str = "nbr_list", ) -> None: + from nff.io.ase import AtomsBatch + nbrlist = [] offsets = [] for nxyz, lattice in zip(self.props["nxyz"], self.props["lattice"]): @@ -434,6 +437,8 @@ def unwrap_xyz(self, mol_dic: dict) -> None: Args: mol_dic (dict): dictionary of nodes of each disconnected subgraphs """ + from nff.io.ase import AtomsBatch + for i in range(len(self.props["nxyz"])): # makes atoms object @@ -509,6 +514,7 @@ def gen_bond_prior(self, cutoff: float, bond_len_dict: dict | None = None) -> No Raises: TypeError: _description_ """ + from nff.io.ase import AtomsBatch if not self.props: raise TypeError("the dataset has no data yet") @@ -610,6 +616,8 @@ def as_atoms_batches( Returns: List[AtomsBatch]: list of AtomsBatch objects """ + from nff.io.ase import AtomsBatch + atoms_batches = [] num_batches = len(self.props["nxyz"]) for i in range(num_batches): diff --git a/nff/data/tests/__init__.py b/nff/tests/__init__.py similarity index 100% rename from nff/data/tests/__init__.py rename to nff/tests/__init__.py diff --git a/conftest.py b/nff/tests/conftest.py similarity index 100% rename from conftest.py rename to nff/tests/conftest.py diff --git a/nff/md/zhu_nakamura/dynamics_test.py b/nff/tests/dynamics_test.py similarity index 100% rename from nff/md/zhu_nakamura/dynamics_test.py rename to nff/tests/dynamics_test.py diff --git a/nff/io/tests/test_ase.py b/nff/tests/test_ase.py similarity index 100% rename from nff/io/tests/test_ase.py rename to nff/tests/test_ase.py diff --git a/nff/io/tests/__init__.py b/nff/tests/test_data/__init__.py similarity index 100% rename from nff/io/tests/__init__.py rename to nff/tests/test_data/__init__.py diff --git a/nff/data/tests/data/SrIrO3_bulk_55_nff_all_dataset.pth.tar b/nff/tests/test_data/data/SrIrO3_bulk_55_nff_all_dataset.pth.tar similarity index 100% rename from nff/data/tests/data/SrIrO3_bulk_55_nff_all_dataset.pth.tar rename to nff/tests/test_data/data/SrIrO3_bulk_55_nff_all_dataset.pth.tar diff --git a/nff/data/tests/test_dataset.py b/nff/tests/test_data/test_dataset.py similarity index 97% rename from nff/data/tests/test_dataset.py rename to nff/tests/test_data/test_dataset.py index 17b227ff..16ee7fc4 100644 --- a/nff/data/tests/test_dataset.py +++ b/nff/tests/test_data/test_dataset.py @@ -16,8 +16,8 @@ ) current_path = Path(__file__).parent -DATASET_PATH = current_path / "../../../tutorials/data/dataset.pth.tar" -PEROVSKITE_DATA_PATH = current_path / "./data/SrIrO3_bulk_55_nff_all_dataset.pth.tar" +DATASET_PATH = os.path.join(current_path, "..", "..", "..", "tutorials", "data", "dataset.pth.tar") +PEROVSKITE_DATA_PATH = os.path.join(current_path, "data", "SrIrO3_bulk_55_nff_all_dataset.pth.tar") TARG_NAME = "formula" VAL_SIZE = 0.1 TEST_SIZE = 0.1 diff --git a/nff/data/tests/test_stats.py b/nff/tests/test_data/test_stats.py similarity index 100% rename from nff/data/tests/test_stats.py rename to nff/tests/test_data/test_stats.py From ea48cb3dc85b9087a5628afb16b5a52711ec8a83 Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 16 Dec 2024 16:44:42 -0500 Subject: [PATCH 15/66] some regression tests based on tutorials --- nff/tests/conftest.py | 4 + nff/tests/data/azo_diabat.pth.tar | Bin 0 -> 18931785 bytes nff/tests/data/dataset.pth.tar | Bin 0 -> 1598749 bytes nff/tests/test_excited_states_training.py | 174 ++++++++++++++++++++++ nff/tests/test_training.py | 120 +++++++++++++++ 5 files changed, 298 insertions(+) create mode 100644 nff/tests/data/azo_diabat.pth.tar create mode 100644 nff/tests/data/dataset.pth.tar create mode 100644 nff/tests/test_excited_states_training.py create mode 100644 nff/tests/test_training.py diff --git a/nff/tests/conftest.py b/nff/tests/conftest.py index f5f4d021..148fd0e0 100644 --- a/nff/tests/conftest.py +++ b/nff/tests/conftest.py @@ -1,5 +1,9 @@ +import os import pytest +import torch + +torch.set_num_threads(int(os.getenv("OMP_NUM_THREADS", 1))) def pytest_addoption(parser): diff --git a/nff/tests/data/azo_diabat.pth.tar b/nff/tests/data/azo_diabat.pth.tar new file mode 100644 index 0000000000000000000000000000000000000000..1065bcae1cc3f11dc62dfcb4686383eca07d8a0f GIT binary patch literal 18931785 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 kYsB@tfP^vqmfnCXY2Si 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

okj;QX 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ν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

uJ5Q-3` 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�pN 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

df(_8+DFN7*qBm%VBc5NKT7+L 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

sR85&}*eJ!$UWNQ+Dhcw6JT{l-ZVD zr`Xx+ae=*ovST-*h25m4#4;hcS+TRX-~xLqWyfwq3%gxSnPml_*x5U9fxVNG6#&W# zKuwut1)$j3dvSrikCGJt$_hYDnPml_*x840fqj^g6#&W#Kuwut1)$j3$8mvuf|3;g z$_hYDnPml_*x6@rfqj;e6#&W#Kuwut1)$j37jS`nk&+bv$_hYDnPml_*x6TcfqjjV z6#&W#Kuwut1)$j3H*tY|i;@)p$_hYDnPml_*xC1RfqkEn6#&W#Kuuk2{4a>{LfZ56 z{1?PW&V205CxPkuFNh{ng-;dx_ddgg?|n|mi^M1|600fwtmTq@rP$f8ae@7Yk{5|l zUL;o2fB9Lz7t%hVXV=dU&iv@iPl4(ASB zfeY-Pl$;<&IYHe2zpz#7rP$etae07K3QYH}rz$rJDfaK}gA3o=my#QWP;L}bQ~p_bl}xd-2jBwR zq2yIElvl~rlv!RSQ|#;^xWFDt$*W{2uac=Lv%E^C*xAEzfjxqfSIJObB~w#od6i7D zv&Y~9dn_fdlA*jxrl!pDDw$$ukH-b}1WH~dLwS`o*&!=QP zfU+J?Q)a6+Qn9la;R1UxCF=o{^?;f(TeDG$oxKbf*vlzd51_0E)Rft}jaKaJRk*-j zP04xyWj&y#%r@*g#m-)j3+xS)tOrom18VAG{b; zC?|;3lv!>RQta$wxWGP6$&ErNHwvjKv)m}8*x9FXfqjOO8--AA6jD=Wxlu^5vtx0A zeSwl2g-~u3Qd4HD_OfDUU%>_TRmzUNh8Fg^nlf9nHxxTN4j0%rDS2@K<;4LtWwvhb zD0cQ;Twvd$BkuWXD7i0c2dfYO@W0z%(%eLLdgqcC@+wy zDYFfmU9q!s-~u}*B`=Vnyg;U=%r%)3+#N9yg-KX0-2gJ+p+}}JG&4runSZ2 z0vXB+WNJz*(~HFvJG(e8uuD*OtT$R%A2nsRWJ@Y`b}3w7m!|C4GH79a)zrntKhu{L z(jMOPa>sJcl$^iit>(!LmhTWjp*&A_zy@|48H=~8!qNdC? z?N-Ik-i8b8?UWrGgBEs&nljt6I~6;77cQ`OQ+Dhgw6J^Clvw5z_bGPveq3N5pzPR# zXkibjDYGSeSh2H@-~#(7Wyc;v3wvBmnJwEBik*ED7ucsLJN7hM*fVPCV&lJepB2&` zH+lCI{W)izcV=v0y8gY}Dpl+S#s0k)ap8L}QFiQQw6Isylz-N$y{g#R*KmP-ost)c zQC=igQ)X-SrebH`!UgtiN?s&Jd68I6nXTJeAZpEfl?Ceyyz)nrc4k45sLTbuv)uvPI z?DV+6&OpfyA(S0LYRYWQW>)O%EV#hVO34l(lpR89>SE)si8+L{PwctTX-;S6a%S$p zbpM(t*KHof{=Io|;d}E@vK~NL52z{stPNXGv9k-|0=qCJ>j9MYfSNMfw8a!VyErbe zOHi^NKv@r{DYGqGQn9m3;R3rfCF=o{^?;fZ%WPv=#m+8=3v7w9V`a3kikdQ8vZ`Wd zYq-GHDLd9c3u~$=vt?^3c6NDOU{|1IhY-pRAvI;TVk;?jc4b^(SD|Ew5XufAHD$JH zt0{JNbzETApk#*-$_^nlWwvH(D|U7rTwvFwWQP#S4k0yVwr*|3&aQ_G?D~}K5JK4@ zq^8U^tWfOihPc3PM9B^zlpR89%52j%RqX6$xWH~s$qpfu9YSi#Y|FM%?CjRKz-~jy z4k45sLTXAZbBgU1JG%oeusc$+LkMMukeV`EvRxEAyDKiRyHT=32xW(mnlf9qJrz5< z7cQ`SQ?f${WrvWOGF!3z6g#^=F0e+)4k45sLTbuv)ecnb>_ND|9!$v&A(S0LYRYWQ z4pZ#xU|e8_P_jb^WrvWOGF!JJ6+3$rF0e;avO@@Ehme{w+pvErcJ?@2V24t&LkMMu zkeV{vv=bFOdlD|N!zkGygt9|OO_^=kzZE-sDlV|6QL;k_WrvWO63fitOvTQgg$wL( zN=^%-oEBD7W=r-T#m=6K3+xC=P79-)7FJVc%XWccXD`GBb|fXIg;7omt0}V;yF{_G zm*N6Dijvd9D5r(hl-a6Xq1f3gae*C8$!TGf)52=%V&lL6t`X8+f3oiX=DgOK>zuhh zFx~(D<8_Q16#MsX#D(wOM9F#pWj&y#{Ik~WR>jWVh70WNl&l9()&pwFY{TwU?Cf2* zz}`*CdH`iTpr*_=?LNiM-j56H1C*=>P}T!#%52LXR_yE}xWGP2$$9`~J)owj9MYfSNK}vS$@L`y4K?&r^16ELzwLYRYWcUR3PtOSr(kOxdwl(869- zQ)Vmnnqp^P#|8Ec%8rdg3wu*dnXTGeik*EM7ua_wJN7PG*n4WqY|Y+R?Cb})zK7me&OoJKGx<*gllp9)xmxkeV{f>jH|MT?QA}zLeY^gmQb3ni9*LqNLc_GA^(c zN^TQHxlL3}ndNl>#m+Wxfo)Q9n<&a{qH4-4uL~%4c12uZ`%!Y6D9UZ3YRW9H3n+HB zKQ6GVQgWLp%59=*$}F!7D0X&DTwvFt1+eForSzZ@V?CbzsU^``_?n}wuAe6m9YRYWIOtG^E-~!vBWN#44-XJw)wrU3} zcJ>flU=O8aZxG7fAT?#SW?xG&4MN!)q^8Wa>@>yBo{kIb8IVnTDcKu@vNuRgnXTGr#m-)Z3+&aD>FVp z*6cdP&R&lT>*u-{O!Hwa~KkeV{vwC@!=`vWepKT@(c2xV`Onljt635uQl1sB*~DcKu@vNuRg ziDiE9hhk^{#0B;*O7;e=A+{I#54L0zD|U7gTwo`qWN#44-XJyQ@0M)}#m-KN3+z;s z>FVpR%}|u&Q6C5?DUlE4MN!)q^8VPZ6?Le&WsD}ER^gGLfIRnrp(rCcE!%l zfeY-MlEC6K|pr*_+3sCIrLb$*#Ovx+&Wfq{O%rXm5 z?Cj#Wz%D__EC6K|pr*_+3sCIrQn}I&YZcfQ80A&`Srpz)6Q0(m1xWH~h$t(b6 z7NDlYY8If_*&T3!-I0=60Lm;tO_^mDpxD`6ae>{9l34)CEI>_}Wfq{=*}ZUq-J6nG z0Lm;tO_^mDpxD{{ae*~TW&tR(05xTnS%6|^55fiZU`l2ID6;@HWtLfhVrK{A0y~6~ zSpdo`Kuwut7NFSKqi}&envz)n$}B)lnPnEB*xBQ7fgMW8EC6K|pr*_+3sCIrNw~lc zqhuCoxKzn*in?s0#IfFYRW9L0L9K; zi3{v#N@f8lvj8<^wr1BTcJ^9aV6UU(=1`QIL)Dboy4|SQ*_&{Iy_u4mLs4!HRa0gg zcAH{nZ^s383?(;*qTC#+rpz|&F2&B?jSK8Ol-wMOa&xGfGTXBI6+8O?F0c<$a&suk z&7o>aEPt>6h+=0S#Rc{;N^TBCxj9r#nJw9qik*E57ucsMxj7W&=1?_dwrtNScJ_H( zV8>E&b12Hqp=!!(#a>eE?8~^ozCy{(p(r0VRSnFT2J@BNGm z- z{kxOn0y_mIvjCJ?fSNMPEI_fd)8GO-EhV!6lv#k9GRrJLv9mMc0y`5WvjCJ?fSNMP zEI_fdv*7|eJ0-IKlv#k9GF!K~6gxXNF0k`Za&suk&7o@QV&kug`GvH%?^$Or;LL)~ zEEJgTUlR>x0gC;5i{Qfd7NuksfHDhEQ~p_*1t@m5H!iS!D47MI%mUPuS!Mx>om~bO z*uIp^0#IfFYD%nT0g9b1;{scuWEOxj3s6&LnFT0zwt)+5lag5g$}B)lnPnEB*x40v zf$c}hEC6K|pr*_+3sCHAe_UW!rDPU>G7C^sW|;*jc6Lo%VArB#7JxDfP*Y}^1t@lQ z04}ftDVYVJ%mUPuS!Mx>ogIV=>;{y~0#IfFYRW9L0L9L3j0@~0l*|H9W&vu-EVBT` z&TfGV?3R?w0#IfFYRW9L0L9L3iwo>_l*|H9W&vtStY!go!ti)*nKIP1)$6V)Rb9f0g9bH02kN}C9?pOS%8`{ z%Pc^#vxndUdnhHd0F+sPnlj5QK(Vuj;{tmGC9?pOS%8`{%Pc^#v&Y~9dn_fh0F+sP znlj5QK(VvO;{tmEC9?pOS%8`{%Pc^#vnS&MdkQ790F+sPnlj5QK(Vu@;{tmIC9?pO zS%8}U&XzO_Q0(m4xWJx6$t(b67NDlgG7C`b?0LAro=?dv0A&`Srpz)6Q0(kQxWHaa z$t(b67NDlgG7C`b>}9yXUQWp@0A&`Srpz)6Q0(kgxWHab$t(b67NDlgG7C`b?De?7 z-ayGL0A&`Srpz)6Q0(k2xWL{@$t(b67NDlgG7C`b>>aqk-bu+U0A&`Srpz)6Q0(lz zxWL{=$t(b67NDlgG7C`b>_fP~K1|6h0A&`Sro?I%pxD{Rae;k;l34)CEI>_}Wfq{= z*=KNpeU_400Lm;tO_^mDpxD_LaDjc1l34)CEI>_}t=KDyoqZJ-*w-kzHwfk4AT?#S zYU30;`z9{1Z&7k@5X!wlYRYWQ-c{`Ed$_>9PszPODE9`bDYJDOuh`j-aDn}plAA+O zZVpvbW*hdIVrM_c1@;R{ZVpAcIaE!VG ziIQ^xDCYvylvte$Q0(llxWN8K$+-ZOa{+3~Eaw6gJNp+duoJB%win8|0Q4U$=K>Tv zJ1H)(lTmUm0OeeOn(}u!7ogbLsc?avnv!z?DCYvylv&OND0X&wTwrIQ9Wof8+>xhT0g6y@enHD$J8^D1_BK3rhur{v~P zl$%4g zTws@>;uw_ba4n?^+R85&JTTQXEbzEQ@l)NH_@`{+6GF!3b z6+62EF0d<7@`@PBD`INOY}Hm)?CdJI!1kx)6)}`o#MG48nys$b*)?#1U6Ybm#86%l zQ&VQ^wvJ+F*Tn^P041-8p}Zodrpz{MJ;lzhj|=P|N?s8|c|}Z3nQhvJik;mE7uby{ zc|{E66)`nswq=_sc6M`IV7H*;6)}`o#MG2n{$77;#m;Vn3+%R(ydsA3ikO-*Te2M# zJG&z;usc!miWtf(Vrt54*>+Xz>~6Tg?oP?8!YHo_t0}V;+e@*td*cGT4<)Y(qr57t zrp#7tf5pxkF0cns@~SY(tHNsPV&mTt93-UO?s_}Wfq{= z*^_XA9Y)D40A&`Srpz)6Q0(lfxWJx9$t(b67NDlYY8If_*|Ttg9ZtzC0A&`Srpz)6 zQ0(lvxWJB}WEOxj3s6&LnFT0z_Cj1>M^Z8iK$!)oDYMK16gztVs$P+v9nL&0{avt=K@g91*j>r zoC{Fw>~pxlK2OQH0F-k9YRW9<0u(#@5-zYWQ*tf<Ht3+x+|oC`oX z7oeuhaxOrzvv1=9`wk`N0#MEcs426Y3sCIr2e`m~NXfYXlyd=U$}Hys6g&F~F0h|c zaxMVnT!5M~%eer>&VGpt>{pbW3qUy+pr*`nEooV`#UbMe^4?DK$!)oDYMK1*6wC|;Q~7`C9?pOS%8`{%Pc^# ze|K_RV5gvD7JxDfP*Y}^1t@lQ8eCwfrDPU>G7C^sW|;*jc6LTwU}vIa7JxDfP*Y}^ z1t@lQHe6t5r(_m@G7C^sW|;*jc6M%DVCSJ^7JxDfP*Y|bHoszL7r+H}K}uc`LwQ9^ zOd9gtB9YqJW z?q9#W_^nYh57MajKEDE9`b>A(E*og<|E zThDp0|2T85Ga~}i^RqVXJjMRK^Ks#O7f|xD7|P3HYRW%r%Pvyv?8UgiUP8&sVkj?* zsp;=52OaD(#m-)i3+xq?yex+DvY47OTe7PZJ9{-Qu-8!XvKY$CVrt54*{)aY>7-x{g#sX z0LpwoO_{CP4~m`r5f|8>D47qS%m>tz*}DCr*x6rkf&Gn=`2fm%Kuwu#*q@4>{RtzzuU4Y6+1f>F0fNmG9N&h52z`z%tNMA z?CkWoz|KI)d;n!Wpr*{0Y-YvI&Vmc2T&$%+_pi#m+8)3v6#n<^w46 z0X1c|Zc8b4c4=H-m!V`nfHEIYQ)U~soMLB7xWJYvnGc}M2h^0=rqvWXTgL^qLCJgo zWj>&$%(iTK#m=sP3+#%N%m+~B18Pbv^N^JlJG%-lu>C2S51`Bk)Rftht*+SFHE@Al zlal!W%6vdgnJwEoik)2-7uW%m%m+~B18T}_#nw~o?E1LC4x(f}fHEIYQx_ZmT;5Pf z`_G;`UpI1QV`nxAO!uG5m8xy3*uS?KE_`ouO3n(PoE1=0{#k3bm11YN#szj8O3n(P zoE1=0X6v@SVrO^21$IYD&I+KM6;M-V8@7vLXLrQ~b~j4S3ZR@7P*Y}`wx?oe_re8s zZ%WPzpqv#@Q)XMXpJHeC#|73XIV*s2RzOXOWrlK~VrLJ+1@>S{&I+KM6;M-VOLmxI zX9wc~JA{(?0LpwoO_?p*k&2x?3K!U;DVYzT%m>tz*^2#3v9rhF0y~tF`2fm%Kuwvg z+KGytJqZ`sVU)}VQ04<_%52U4t=QR9ae+OJlKBA2d_YZ^t=pN3ojnT|*x{7S2T&$%r@-;#m-)c3+zZr<^w460X1c|WtS*+_EKD6M^Q2# zK$#DyDY48$u2AgkmAJr;rsS*u%2@$5WwvD3D0cQ*Twt%GlcJ?M* zU~i`6tN_Yc0X1c|Vz()F_I6xg$53)s0OhQJnlf9pyA(TnH!iUEP;yoP<*b03GF!9z z6+8O?F0c<$a#jH4tbm#_Ten9PJNqauu#Zu4RsiL!fSNMfuqPEe`xGv)Pg8PM0OhQJ znljt8=M+2pJT9Gq^8W) z?PtZ#PQV5B7fRj~LwQq7O_^=j?~0xM0~gpoDS1;2dS0feY-El)Nd1@}`)Y63c938pX~|iwo>@l)Nd1@}`)YGF!446+1f< zF0eCG@}?Ndn__CpY}sa0?Ck8gz|KL*n_?($im55H6`NbJv-98rJ1-?~ilMwIrl!nR zZ2`s3E{F^4LX^BIhVrJEnlf9nMHM@{7%s4jQ}U)5%9~_}ZQ41Co&66ku;)_p zh5*VN0&2=^%g$Hq>;<^MUP#Fs0w`|?sOj%)g}>LoSh2I0-~xLoC2t6zydj{b%$DqO z#m-)V3+$DYydi+{hJczfTehneJ9`Z-u-8(uHwa~KkeV`Eu^SXSdm}EeH&L=T2xV`O znlf9pTNOKd8!oW7Q?fS*Wp9w0GF!7d6+3$uF0gk~vNs52Z;+ZYTetfZJ9|Gaun$nO zHwa~KkeV{vu!j{p`v@+uk5aNX2xV`Onljt8ClovTBrdQ|QL;A(Wp9w0GTX9e6+8PJ zF0jv2vNs52Z;+Z2%irt2sMy(;aDjc9lD$DFdxO-J*^<4c*xA={fqjFLy+J5@gVdDS zvc09)*|%|leTS00K`48J)RftZy|38W4{(9~kdnPYD0_p{l-a6%tk~I4aDn}llD$DF zdxO-J*_wT!*x4^}f&Ge-y+J5@gVdDSx_ztI+3#?H{hpG&K`48J)RftV{iN90pK*bm zK*`=9l)XV}%52kqQ|#>TxWN8F$=)E8y+LZqY|ADZ(9QP31$JUe_6DKs4N_BL`8)c_ z6#I84#|3r@O7;e!>Dm?+L3Zvt{eA*x6NafnAM~_k>a26IN4ZE4HR$XV=07c5O=D6GnMY zSWTI&+5pAQ4#WkvP04%0DDMfYDYG>jq}bUFaDgo-c~2PSJz+Ivwr(3Mc6Jk7U^k`Y zJzSUhHatP*)4H_-HMX;gi+oTR#Rr1wyk1kx5EW?drICDMtM(IO_^=kPKuq~ z85h`HD0xp9Q$-(9h@d*A}QCuPU>LJQklO_?p(K8l^)7Z=$5C_A=4T9~OR zvt>I#v9ldqU=O71*g@+oHwrQs;cJ>ThV9%uN*jZ>{!_}18mYuEG*>iA#{SRfw&P59wp{6c2 z&e+Zq(tdp6?tM<@J9B|E7Y3$l##Z6)=tnB{?_Goo-@BNSbHXU+gw>RO)>_F%DR%ZU zTwpJ!nlf9p zn-x2I3ofv?QgTih<(#mZGF!7Tik-a!7uY)~IVX&APFPKut=m0{oxK+q*!w6sCya7V zSWTI2*n^6leFzuWhbcKHjB-v`O_^=lV~U-992eLpC^;vLa!y!HnQhtAik*E17uaVh zIVX&APFPKenlf9lcNIJP9xkx&Q?d^TWgn25GF!Frik!sV1K3L&QO#)L)Dborv0JV**|fC{fm-2LkEiOh5mzW z*~E&Sodg%yNh!HA6y?rPHKp(J_xe*Pc6Lf!V5g$w&QO#)L)Dbol1;1F+39eBot~0A zLs9MwRa0imHj`p!XT}9~7E106MY%InO_{CO?24V80~gpiDY-Kg<<3wwWwvVbD0X&U zTwv#;SkTVNAv&jF$Eb7clJ$vpJb7pa8mIzGuuir+^ zdMoyyu@5f%j7w6o9za;ASH^2q9 zpkzIOvK~-VW~;WbVrMtO1$I+P)&nT(0X1c|W?LwBc1v7fx1wY{fU+J?Q)cV7tzu`l z!v%JGO4b7?>j5=owqZLdc6Mi6V0WQpJ%F+vP*Y}`w!30y_rL{qPfFGUDC+?=WwvGe zD0X&VTwwR3WIceg9#B(anI9aW*x3#)um@7I9zaFVp*6cLJ&Yq47>=~5Y8-#LikeV`E zx8aJNJsTI;b11nt2<6@&HD$J8BNRJ(9xkxwQ*v(*%Dq8q%52j{Dt7iFTwpJzWIceg z9#B(eTQ*9uvzOrldpRZR0hINCn*PpKnK_JB?Ce#zz+O$sdH`iTpr*{0>^jBHUXKgx z4V0`0P}T!#%52$gR_yF8xWL{@$$9`~J)ow{R&0!7XYarT_D)LH11ReOHD$JH_b7Ju zUR+@BqhvjRvK~-VW^4AKVrL)11@>V|)&nT(0X1c|ZjUK;_HkTbpP*ztfU+J?Q)V0X zv|?wU!3FkNO4b7?>j5=owrOJ(JNp7IurE@w9zaj5=omU97$oqZ1%*!L+}51_0E)RbAy1t@m*BV1rVrer;U zvK~-VW;qw2*xAo zC^;8^axOqkndMx7VrPHF1@<>e&IO>H3s6&LITxVV*}rgsov1Cg7s|N+^dBte0u(zt zDK4;+QF1N-TvI}0wbvr=*{0OeeOnlj6|0L9MEi3{vpl$;AdITxU&%yKS3v9t5x0y{q?=K@g9 z1*j>roC{Fw?83OfE<(w<0F-k9YU*O+e=965q&;QN`MV{Y>FrFP|A$%9nTuxZUK20n z%+k&*6PT|5zNnUK)>pCrjLYJ}&$t{VdxKE+2B|6k^VO}Q*x4#Bur*5d2BGW?Qd4Fd z)>Q0l3m4esDcKu@vNuRgnQdA>#m=sT3+&32>FWH^8f3qLfYH+{C~8XGpjqZ zMqqmWKWf>Uiv4?Q;llUUrer;UvK~-V`dOKW3{dRsKwMzkl&l9()&pwFY{>>Gc6I|? zU<*pt11ReOHD$JJ8!L8p6I@_7rDQ#TvK~-VW-GRZVrRF+1$HY+)&nT(0X1c|YTGJy zb~{{Px2I%1fU+J?Q)X+nlVWFg#szj4O4b7?>j5=owr;yCc6JY3VE3eCJ%F+vP*Y|b zwvS?G_r(QvKT6gEDC+?=b+PgH=>bC8^_jbW&vl$R(3yh*)BWqI(zJsW`}YpPh3_3o z$vvVd_lT+~|Ew(=qS)EPae+O8lJx+}dO%HyWrlLJVrP%R1@>4<)&nT(0X1c|WJ47@ zdps_%Cs48;Kv@r{DYIo8rr6n&ae+OBlJx+}dO%H?t=MUbojn~F*fS_u51_0E)Rft( z4Oi^!*|@--L&rL@BTG$kuw)N zb4g&je@#^DcBx|j-Y8u7-er^>yBsa-3N_`QwP9B(c6Kx_uvbxb>}s^IYt)q4rd_Mp z+3RqDy`HjTH=u>xsHV)e>?Xy|-i!;!XkquODYIpJK(VtA;sW~+Wyc;y3wuOOnXTBPik*E77ud%s zJN5)x*pq6?Y}KAp?CjIHz&=CSv1if3o>Nn1YxcZiXUF0K`vPUhUPKFfNllrp+slfb zeFYcTS1CL88d})vYRYWG-cao9I9y=gq~uL8lsCoHl-Z`equAMZae;l0k~hUr-V{?) zW?S~5VrR$W0{amqZ;GM3DW;~xGDG=Pv9q7y0{b~7Z;GM3DW;~(mh3CV&VG#x>^GFm z2T&$E;jyoF+oWC$ew%Xe{tqlXMPJz_n#N_iv6zG zzxM|&eD6<6&I+KM6V;_78ls*C^;*Da#lc1nQhpNik+Pa7ucC8IV*s2RzOXeZQ5*#ot+&Q z*f}UUD}ZuVKuwu#+1!eqod*}#c_}$7fO1wqO^IcOvVdY|7sLg2Axh2)pqv#@Q)WxH zsA6Xq!v%J6O3n(PoE1=0X3N$`v9n9!0=pC?X9ZBs3aBZw73-_m*=2EoU5=9V0Lpqm zO_{A)MX|G0TwrUItOrom18VAG&Ovuoi3yEY~30hINCnljt80g9a+ zhzo3+lJx+}dO%H?ZP_5j&TfDUY(dF-0A)R(ro=K2*;ui&o8SVwDJAOxl=Xm`GF!4O z6g#^mF0flsvK~NL52z`#W!qMj9MYfSNK}vwajhyDu)V`%$tUKv@r{DYJDuK(VtOTwo8RWIlj0 zA5c>l8-EWRBBVWdmhS&j9MYfSU5p+O(q; zJ9`W+u*Xue9za-mZ<8gsKfs*wA%6dReiDiZ|OtG^k;{tmMCF=o{^?;f( zTe8y>J9|1VuxC)R9zav4g-fs*+E%6vdgnQhw5ik-a$7uZ`VnGc}M2h^0=mW@&D>>aqk z-bu-P0A)U)roXc_<{|eecJ^LeVDF=3K7cYGP*Y}0_Ml>CAHoIpVM^u$DDwd|WwvaO zDR%a8TwtG|WIlj0A5c?fEB3TvXP?0Z_E}2i11R$WHD$JHV--950xqyGQZgSvnGdKb zvo(7~v9qt@0{a>z^8u9kfSNK}w{eP{eG?bhw&$#4->0TCua=-~#(C zCG!E4`GA@-Te2S%JNqLpus=~UA3&K8s425$`$e&{zv2S>8zu7rl=*;~GF!1f6+8PE zF0d1=FSZxTd;t9iTeV3PJ3A>Zu#-_TA3&K8s40K9W>YG5b}C$8r>0~+fHEIYQ)cTn zonmLF#|3r`2fm%Kuwt~+2V?wT>=-_-jv)M zgmQ0?n!4Ed-x*5@X;0sCU+L1$EaObyz;yk0My*`7WflAPmcxbbl_)z_MtNgcP5Ec7 zSXHsJHC$lpl)N#F^2V^5GF!ElVrQ4f1$G5W-WW!CV^~d@t=US7on09h*i|TbV;JR) zVKrs8ZmTJFc6D4}*P!H$VU#z9)s)$Wt*zMEb#Q@Qmy$PzQQjC+}-_fk>C(q2X}XOcN^T@JxGus!6CoTuD5$uO~LP< zz4oqE-#k6<;+^T|sZ-}P_8y{pgQ$Ch(lpsU>s~1rdvC6>_YvJ2MBN*drpfMI_fNUl z2XKvjpy=Kp>fWFy1 zcE@^b%Edm8YwTg7dxNNZgVHqFjrGKoi+vK;*e8qb4WjN1O4DR_uBWA3?9;i%K0|bG z5Or@*nkKuso}F^B&*2*TT+zKj)V)Dzn(VIif|QGWA=lU!iS7-e?hQ)QWOuKZrd;gH zxW>L*bZ-!KZ%~>Ju>HRWuL`pN1V{Y#^6Fwy*cG#-@-Nat)kswYIitIlij!8k#e!`!RIZYIitI zlij_(m2$D)<{JAQ(e5y{JDjG;?pfbYx!50Yjs2l$cbM88PSa%ft{`%DH{#3L( zOzjS*X|ns)&r>e;7hGe1DcT*Tc8Ak6STl!Tr(EoBxW@igv^z}g4yS3dJJ#=0F7^*x zWB(}H9j11N(=^$Q^_P^3{VUhlzlnB-somi;O?Kxx%2f`shj5KOs%UqZ+8s{QWH;9_ zQm)TECfC?wiFSvn-QhG%cGo&?%Eca!YwYnwyTjD(aGEB&dz~odVo%I9_9UX+VQP0c zO_SZTPM&hHr{EfUO405xwL6@q$?jdJNx9h5a*aKmXm^;}9Zu6^_pLLgT+#-3TU zJ522kr)jX}2WL&W*t2nsJ-cXknA#mq(`0w7bEaJExwyujTeK@c?Fyu6vK#AsDHnTw zuCW&o?Fvx40%@A;&b5(pu{*iOZi;pVs9k|HO?GqbNx9g)Tx0i%b_J+ifixXp`+vhO z5@i2ZjyQ*L(PA!E%*7jX@V{Z^2mh9Gecqv5`@Bnt-W8zU6-d+kv+iF1o^r95<{En$ z(YpfFy8>yN?4EV`l#9Ir*VrqH-W8zU6-d)R`RBZHko|`r@qW-%in(erTa7v5pVK>I zDc9#+ook)t6B zdmpZ`_Z7V>K)oxFrpfME4@kM#2Xc*lkmy|j>Ro{}O?K~kNXo@Nlxyt6#O?KPy0spW zrpfMGk4(APM{$jPw79(|tDEA1`jNC(y0+#57HI$9huA#Xgy9 z>{G<;^;EjGo|dM`Zmg%LT)C0V?9TO^l#6{X*VyNY+w1vsYrP;% zlige|Ou5(>agBYk=xh*mHYiP#-L+npa-*&ym{P?{#Yd%Zg4Vqe2G_O+t3 zLDboxG#z03zmMM#WdA9S`1kP}i+NKqZ*I)Ne^2e(v)+<&ecoHS_IYm;-6KlfBbui9 zXWhHrnR2o3;u`yI(LJKnJ)&uv?7sEBl#6{o*Vqq;?h&Q#5lz#P+1+LiA5OX0!@0(O zM0AfRb&qJ8Cc9&OJmq3P!8P`iqI*QCdqmST*^Tv?l#Bf=*VxaA?h&Q#5lz!%cdjp{ zT`}SK9!+#Mh&mgTrun%$*D+Hr_E=nFk1aYIM4b&v z(_}Z-@lr1K_*`R8AUYdFoefIUWOuC-r(EnwxW=ATbT)`O8D#$H==k0^DIXqpCVesH~% zi@iSA*c*uM5vA@CP19s|tQ)6X>`l1F-c)ptD0Po$nkKukZjo}ax8xdoE73io)IFkU zn(WSX+mwsF9oN{~i|!Gn?h#GXWH;BHQZDw+Tx0Jdx<{0{M>I{7-LwYO0dw;I64-nlWO5G!xrpfMI|Cw^J z59S*C5YauN)IFkUn(V&y@RW;v1lQO{itZ7m?h#GX0k;1=@-ad7-|2{Z5*}O3yLD6{V7e8-Ld|haDD?L{RejE zI(o{*9)oM2drWbA9gA+QW2b3;?&dm9%Eca+YwYpF?R9**wN8+x$?jSwOu5(-ag9B( zxV=t7x7JD1G}+zjWGNSWa;~wb5VzMU>DD?`nkKtvojT=WPs26#wBq(U9o<@|Pt#=g zt}~=u>>0Vno=MzZXQo^0ENPnTzV$CD7kgH&v1b#v*V*aTI!BrYYku&rDHnTAuCeD5 zy)jI^F`TB!?pWtdx!Ch@jXl5UjbZAI;WSNlW9>+}*bT0+J4J5{Q*R8XX|g-l?v#t& z!!>rV=#63Ojo~y+c5_`gISO7C_Ac(llAKfRu~9HP_hNh-LxQEFevjH48|&*gJ5I zy`yLrK+OWuG+DENl#5+lWA7@O1yHkqG)>klAmw83!8P`tqFDen3rN#s%>q&`_C8!= z?<<-GP_uwEP1YB)+`|9Vjsmd z_R*qQ05uCp(_k|TNV(XY8H^D$(jYETD7LcaNngyg>?2EX@zF0I1pk@JSnygts%Ei8% zYwRmTvjA!qkfzC+1*BZ;Yq-X~Rx}HsW&vrM?4I?8l#6{M*Vs3S_JpZD;WSNl?|N&> z#lDSe?At|q!qlE{nkKt%y({Hn-_14lJ)%8fYEL*#M`riG}&G2>nRue4X&}@6zvI9d%|g&?C$lQl#Bf? z*Vylg_JpZD;WSNl&-!7?#r}wE?0<>&gsDB@G);Ez`f19={)}tve~b2nsXgH|O?Kb< zWy;0=ifioui1vi3J>fJB*6;eiO}W_LagF_7(Vj51C!D6q?pS|Jx!6B(js3Ie9#QHZ z(KJnVWBo1VV*k!H_Wwlph+Zx1A@m>Eo$IJ67kf0Wu}2r(BTC&Pnx^@=o9kF97kg~3 zvBweJBTC&Pnx@I_TE|bh*b{J#J)!6xQR*JiG);E*I!VgKo|J3s$wc>vQum0aX|j9P zDN`=?R9s_EExJdPx<@oklij;cmvXVE=Nfwk(LJKnJ)&uv?7ns8l#4wJ*Vum%x7S(e z);e372J3hIv!`6_Ik?9DtGK<+Nw?Oy(lpr}>)a_9dmgT_=M}ft`RLXFEZPg8_5#v0S$hE~7kf3Xu~!%E1yFkdX&P+y0#Yva+FWC=Biaj~_5#v0 zS$hE~7kdM)u{RX$1yFkdX`1ZDx=G5#-jr+X%|v?v)LuZECTlMs0BSEFO_Q}3kaDqi=Nfwt(Ov+x z7m%jO+6zdz*n4x0y^m-wfZ7X4(`4-hq+IL+xW+zEv=>0_1*B=R_5xBa_90wjA1c}l zp!NdNG}!C~q+IMHxyC+9v=>0_1*B=R_5xBa_HkTe4-@SLPvlKAmgqGemm<)LuZECTlMs_o@veq+IMTxyJrVbPk9*2Sjgi?V}&%C`Y;ZjqFVRM!doL zEj{Ny{9m*gtp5N0Fa9sr{xAMsv>8lo2B&HMX>10kTz{HBbB+CrXfv4F3{KNzZ3d@Y z?Ei6%J<8R?9ztyf(|=%X2B%!?(YeMRL$n!8Z3d@ley+{nl#4wM*VyBVHiN0n;51Fv zW^l^Io{($oiA0;h)Mjv+CTlY|8PSarha(|YTi~Sd_v1b)+22-2CX_~Cf;FOE~SFW+=6m14m zo55+C?8Z7z%Eg|SYwY>N?R9>-wJwmR$?jYiOu5({Tw^!H?X{C`t<5w|c604Yx!B!Y zWA}*LYcJhe`_eSoUF$+A7kgo@u@@1y*G1{px>%YfyL(+cUxVDJnxrpfMGS4z3qD|3y# zinzV5O1IWlng;7v_^YK{?A5u(UPJWjKlST>nkKtrT|4DsufsL=x}snIsbBxoG}(=H zgOrQCA=lU&iGKa3e*I6=WOuHcrd;gJxW?XG^y@$M>wlUiySZ+aawlUiyKg-p|tDEA20g#pZfJb zO_SZZo|JO2Pv#o?6w$B$)UW?(n(XF!ddkHFMbxUZ<#lDDZ?2ARe{!_pHr)jco2~D}!mvfDMh3MCR>ev4?P1Y@;DHr=1 zuCcEb{rXS+`k$uBx+OH_V&BL$_D!N+|EXX9({yBZuV3NcnsTvk;~M*R(Xap1um5S9 ztXo1;F81AAW8WkC^`H9nKTQYN+dlt%A@)D`WZUcgLH3{Lh?}@RP|OF5`A}mHOjh?^ z&^LgT>+=rh+UI>l^bLUe29T!tXY~yr$+{&p$+{&pe zx!6l`jlGm;6M)(TNYiBZuFIrc>}9#eUQV zY7-z$lij&)oN}=@;Tn5W(Ix=336Q4AZmwITTi7i9mHj<}uR^~JoQm^U`&;NP1!_pLXjT%Y%5u6^EHM4JHACP13T zpVhDZZ%?_{cW{k;r)U#^+5||`WOuChq+INKxyHUv^bLU81W40lH`WJJF7`uQV?Qj~ z1fVtn(lptf>!T?b`!TMu9~W%`P@4d0n(XHKRLaGEnrrN5M4JHACP11dyK8+utTi~Tv**k6b?0jN!Y zG);EL`k$1G{WaIv--tE=s7-)0O?G4bZ_35~o@?wMM4JHACP11dyL0_HqDHu}8V)k=R2-n*h`%0R0Dc*E)L2#U6uepLx3y6dm^r}Cl+l2P@4d0n(W?nvXqNGIoH@zh&BPJO@K5V zVEe!0P90?brH^;;mhRIObJ}7~*O-Is98Xo#-BB_fRu~< z7p}2q70m*uSwNa5YZj1lvH!|7_MDF4%mkP4~6vsdKzlnb@=F-JnrZETqH?hZQpp@(LF2}XcyS(T$ z5Oo?TP4my{G*HULUWse$l|`q4sMA1cnyk}6DHnS+uCZ4aod%*#1Ep!O<_FhGx!7xS zjlGWOG!S(fC{2@f8YtyrZ@@M7hN9Cz)M=nJP1b3kl#9J7*VvnhP6JV=fzmWtr-4!~ z_EubDZ!J0vM4bjo(`20nO1aqEbB(=&=rj;@8YoSZbs8w;V(-E=c8N{{QKx~@G+C#C zQZDxHTx0JcIt@gf21?Upod!y|*n4x0y^rWL5Oo?TO_OyRDCJ@wz%}-PqSHXsX`nPs z)@h)Wi+u>!*oTTv15u}e(ll7}gGZ!X>?66xK1y^Nh&m0FrpY=Dlyb3;;~IOI=rj;@ z8YoSZbs8w;VxPn{_Q|5tK-6iVG)>lNpp=V!I@j1|h)x4hr-9NmS*L+gF7`QGW1lNJ z4Md#=O4DSW21>cu7jlh#k?1rKbs8v5lXV&>&1Mdm~S@bz<>YtUC=F|Dc9$Hn`@u<9nmeJbZdPtP4my{me7=o z{Q=k5ABt`XrEUpL(`4NensTu};Tro>(Ji6WEum?etXo1;F7_8(V}B{SC6u})G);pw zKlpXZ#r}qC>~BT4gi^PJrfITn2~D}!KX8rxqv)1U>Xy(nP1Y@;DHr=!uCad;-4aUO z5}KyTx+U~l2iZfo#vWC4ODJ_qXqqPLme7>zbC1b2_E@4@LaAFq(==JPgr;2V@wmnw zUvx_-bxUZPChL~al#4wv*VvPYZV9Ds2~E>v-4dE|v8Uh~drHwQq0}v*X_~BCLQ^jG zv|M9PC%Pq+x+OGClXXjI%Eg|EYwVfD?R6IFme4c}*8JeCDHnS-uCZqq-4aUO5}KyT zx+OH_V$a1j_S~XdLaAFq(==JPgr;2V`MJhkKy*tebxUZPCcATOq+IMyuCbe|U<1`$V^dQn!SrX|i4nOS#yKa*e&1=*2MV#jrF@cK13o}9ydURLyC81-UUnkMVTu#}6vBG=gcq8G!c7sJvtSucjATlvVJR1TTduLU6TKKly%?6J z$$Bv?^9ffyNO;5qh1V4(`5Iod!}6Me{hYxm$<#| zO}Ey4(lpt<>%J)$dq1wR_ZPR<1L)RzV45boZ#^jGV*itC?1RPa^$@zX9-5}XnjbtY z%}P-`x36PFBRPiMBNIMrpfMEuSmJrS8|PgmFQL=>Q?0dP!zE3m@pk@JSnygts%Ef+&YwU+bvjA!qkfzC+1*BZ;$GFCRTr>-yW&vrM ztXV+H#eSM=>}N!?0BRPHrpcNGq+IM5xW;}_Gz*|+0co17SwPCgewAzN*F>`bY8H^D z$(jYETD7LcaNngyg>?2oy|{zNnjpk@JS z8f<0(DHr>5uCc!m%>t-dK$<3N7LanWzvdeI8__I)ngyh3vStA(7yEmzv40TF0;pL) znkH)&kaDqq;Tro_(JX+P1*B=RW&tS|dz5P*i9JL#3!r8J^dDHWfRu|p2G>6Kn4(z# zH48}7{9Lnul#4ws*VyBUW&zYJAWf4s3rM-x6LF0_v1k@R%>vRiS+jtYi#<8l*i(pR z0n{uYO_SZXPMvbGr{NlVTG6dQ)U7~i8m!;-&yaGlXXF}tCef`xbZea@O_SZR{w3vN z&&oCSY@%C%s9S;3G}(>yuPGOMPOh=%65R?!-3pYZ$?ja|O}W_fag9B{=vE-=R-iN; zVEbt-dK$_;C)hr<8VlT`! z_9CKL05uCp(`3y8QZDx2xW*nTngvj^fHY0kUO>vl{yW#$ON;gbsJ(zRP1asO%Eexu zYwQ(7djZs5K$<3NFCgV&ugo>}Dx$prYA+y7gUwz*%EextYwR^ddjZs5K$<3NFCgV& zufsL=x}v=RYA+y7leHI+a7eMU=q-nDD0#Yva4qRjJDB264_5#v0S$hE~7rVH|-c__0Kvl9>z8H@uIx|YA+y7 zleHI+avlzJ_b;Yejnj z)LuZECTlMsZUsuyWH;9* zQZDwBTw^~ax)q4J6(~)U-L*cOaR zO4DTbtgokB>^Hc^ep7TS5Oph1nkKtD-d-nP?{#YXB|J~Vo$&| z_JpEafv8)7(lpt<>m(@`ds42kCllQYMBNIMrUPvM`|Bx#?7#gHFPfaHm{S*Xn#TOU zzrXIh;0}8MDc9$nj%%NHdeL40wHJ`4@n_9mK+46QnQQD>M0)|$UO<{AYcC+>V$aSs z_8g+U0BSEFP5klAmw8Ba*f?5ngvj^fHY0kEFk4#FUmFcVxn09H48}7 zKly*7Lxb!;(XkGGm$^hSmn`N|jXC1~jocENa(&*Vx%PRN5#16>-4dFn`Db-YXv)Q2 zfotp)MYn`fw}hr?vU}H+Q!e%@Tw|{)Zm%u6wXT+?$?jWMPr2A@aE-mDxV^4Lx7M}O zG+6V4>!e)lb-Bh~PuyPDr(5d=X`1Ygb;Fd4y%E>g8;jfPCUk4vG)R^)2;Q8G);EjdT7eUK8$PZ!^Q3O2)eZ%nWn*- zA3Q4MVjs;l_A%o2dMw>qk4w{JcdWxwF81+UW1k>yuP4&2^`taSc4Iv`*XmI`wFhHuN1e}tLWBxb($u-XT2unVqeQO_I2X+ zdOh7*Z%EStw*PnbjY0Nbf#C9gR8o@8eA` zhNWD8#&>b;&-iZ9*&ym{P@3jHpBKYYF82LgV?Q7|8$_KAO4DG?DL$NXv4?Yw{fOvn z5Op>vO_TLvSjxqIf@|z2MQ4Mkvq5Q^tQW&lF7~rrV?QT48$_KAO4DS$7?yIeU*a13 zWzpFn>TFP&ChNtpl#Bg3*Vu1}_JpZD;WSOwi(x4j`yH;a-xasl_ozMLG)>lvVJR2; zL$0wu67307d%|g&tQW&lF7~HfV}B;v6Q=fr(==HxhNWEWFS*A4O0*|T?Fpx8vR({J zx!B)wjs2ZyPng;hPSaq`DgKahv47+m`zO(!FtsO~rpbCSEahVV#x?fuqCH`1Px!k3 zgxy$&q+IM#xyBw%v?omM38!g(t{1~nF7{YlV~;J`6Q=fr(==HxhNWEW@wvvHK(r@J z?Fpx8vR({Jx!99%jXkMoPng;hPSa$)7?yIer{o%YD$$-WwI`gW$$Bv??&lhNCDEQRwI`gW$$Bv?*2o^YBb>&38?i@hD!*xQTtgsDB@G)>lvVJR1TXRfh#5$y?6 zd%|g&tQW&lF7|F*WA8576Q=fr(==HxhNWEWy|~8STeK%k?Fpx8vR({Jx!C)2jeUT) zy&g#I38!hYUJOgQ*avfseTZmJnA#Ig(`3CEmU6L=;2Qf#(Vj51C!D6inmIfs0!&)40YyU9=}m?Fpx8vOCwa zQZDw{Tw|Xj+7qVsgwr(H&Gr10i+ust*cXcSgsDB@G);EbdP&N~zLab1%S3y^)Shsf zCcAsRGUZ}l#WnWTqCH`1PdH7J-LqboawAxyR%hdo0mj z0JRs8rpek1NV(YKag9B`XfJ@;3rN#s?FFP=AYGzVJR28himL!(Tic!i(zS+tQW&lF7_f^V=pRt zF^qaKEKQU3Vpz(>9?CWL5~3Hws29W1G+DENl#9JI*VxO5W&zYJAWf4s3rM-xD{zgy zqG%RC%>vRiS+jtYi@gfh*sF?W0n{uYO_MbXNV(W+aE-mDXcj=t0@5_t%mPv__PShS zuP2%XP_uwEP1YB)+`|9VsFDW z_O_x~05uCp(`3y8QZDw6Tx0Jfngvj^fHY0kEFk4#@5(iHTQm!xW&vrMtXV+H#om)^ z?0<-60n{uYO_MbXNV(Yia*e&8Xcj=t0@5^Dvw)O~eGu2!{}jyvs98XoCTkXuaE>=Q(@0BRPHrpcNGq+IM% zxW+zJGz*|+0co17SwPCgK9g(gvqZB1Y8H^D$(jYET#y(#(3!r8JX_~BAK+46w zm}~4yM6&>D7LcaNngyg>>?^p&zEU&`pk@JSnygts%Ei8xYwYVpvjA!qkfzD*U2jae z*f(*FeY3c|-a@z5Thlbzed}#07yEXuvF{MK*E{LfdRLkT>o@v$r(EoNxW>L$++Oda zTkHL4n(U7Cfs~8=AlKLriQDVLbZZ@+rpa!skEC4eN4ds+Ox#`{r(5e2X`1ZL^~scr z{S?>OPm9~@GjwZxHcgY=T%Sw1*w1r~{erl?zDT#$m(n!ZUF*v!7yA{iv0oLp*VpLQ z`g)osyL){jvl{+Vm+UqtT(Q11n#X|mo6NV(Ym;~IOE z>xVsrdM|+f1M9tjl#4w&*Vto--V31K3rN%aT<-;>TIcLb$rvhD~vl{u|fWLq&T5)LuZECTlMs( zdjZs5K$<3NFCgV&FV8jh3ZlILYA+y7leHI+avl zK9FndgG74))LuZE2AjQrl#6{R*Vu=N_5!HAfHY0kUO>vlK8kDXqeXiG)LuZECTlMs z}y4P0n}bVnkH*6Amw7;$Tjv&qP+lWFCa}vW;e1IkaDqa;~M*R(Ov+x z7m%jO+6zdz*mrY{eUE4_fZ7X4(`4-hq+IL=xW;}^v=>0_1*B=R_5xBa_9I+lKPuV_ zp!NdNG+BEADHr=muCbpI?FCSK0co17y?~U9{T$cW&x`f~sJ(zRP1asO%Ef+}YwTA< zdjZs5K$<3NFCgV&zri*3o1(n{YA+y7leHI+a zVvoi(_UNL$0BSEFP4jc@1*BZ;vAM<`N3<6}?FFQ1vi1T}F7^amV^1jB3!wG_(ll9n z0Vx-IQm(Nl6YT|1djV;h?7nr%l#4wT*Vt2wUJIsP3r^Eu{YHPfl#4w**Vr?NUJIsP z3r^EycdRp~T1yipDr|AIOf8RfMkp0Iv z;%$`k6m#BU&exa&zwd8scrPI3`n(Hp?ei`uItN6Z14`5UvwANe3rM-xeOzNNBsvE~odZhKWW5)Va3rM-x>vN60f#@6%bq**^ll5Le%EjJ< zYwS%$=YXhlKxvw+_X1Kb_Lf{@ZzVbhM4bal(`3CDkaDrN;~IN=(K#UM98j7j>%D-K zi@h_~*t>|%0a53G(llA`1*BZ;-MGfyU33nJItP@d$$Bp!3rM-x$8wE*oah`7bq**^ll5Le%EdmBYwVLm=YXhlKxvw+_X1Kb_Gw&WpDsEF zM4bal(`3CDkaDrl<{JAP(K#UM98j7jyL&x9uqRs)OX|mo6NV(WoagBYo=o}Dr4k%5N-M3zsaGVzvvtgbq**^ zlij&Klyb2j<{Epr=o}Dr4k%5N-CQ3_x!8|$js1k^91wL5C{2^ywLYD4v7g}@`&rRB zAnF`YnkKt@eIeyyzsNQAOQLf?)H$FuO?J=vYRbiajce@JMdyI1b3kdD?B4aQl#Bf~ z*Vylf&H+*9fYLPCee3%v7yARQu|E`@1ES6WrD?E!qyKTr#r}kA>`z7KfT(joX`1Yg z_4AaA{RP+9Uy9BFQRjftG}(>y>y(TA4cFM;ip~L1=YY~Q*`4e6DHr<(uCad`_JMfT(joX`1Zrb&QnjbC1b2 z_E@5GK-4*)G);ETI&R9v9*=A6@kQr=sB=JRn(W?nqLhn0G1u6Wh|U2~=YY~Q*?sHe zDHnSRuCb>SodcrI0i|iMexpB4%Eg|RYwYPn=YXhlKxvxnj&;VAi#-$9*fWdH0a53G z(lptPb=H)NJsa29vy09FQRjftG})c&oGBN3F0QfX7M%m4&H<%qvYYFCDHnTwuCW&o z?F3Uh!D*W8uCvvDXsa4@%t+ znx@I_T-Qyx*z0kPy}syvQ0jirG);DM-6-W^Z_G9JCZhX6sry0GG}&G2<|!9@3$C%Z z6x|O>-4B|k$?jgaNx9hDa*e&6=zdV@e$X^ccF($F%EjJ^YwVpx_k&XRgQjV+d)Hl4 zE_R!1?A=87gHrc{rfIVK);&`$_CL7B-b-{pD0M$*ng;7P`unC_?ESdL-d}V-D0M$* znkKtrJt*a3|C4L%gGKj)Qul+VX|fyZVJR2;aIUeB5Zw<--4B|k$?jZ_PPy2}aE*Pe z=zdV@e$X^cc5^*G4-4@%t+nx+G6|2^fI zLH57yL7M%m4&H<%qvOCt>QZDxGTw~uMItN6Z14`3mH`cpTF7`cKW8W(}2Sl9% zO4DR_t`DSK><78Ven@lbq**^lijuco^rAO$2ImSHwt?QbqAnF`YnkKtroj&Da&%ibIjG}Wu z)H$FuO?G3QCFNrOg=_3tMdyI1b3kdD?9O$Ll#BgWuCeD7odcrI0i|iOo9jF&7kgf= zvF8(=1ES6WrD?Le)&)~8b_dtk4beFu>Kss-CcAs>O1aqGTx0i$&H+*9fYLPCJ?la# z7kgo@u@@1Y1ES6WrD?Kz*TqvV_TRY19x6HqM4bal(`5IpOQl@wzjKYfwCEfVbq**^ zgY_Hz z;~IN&(K#UM98j7Lu>J33w+gcV=11IBd+TCuQ_O7}bKvh}J9qA0w@bM`@Ah2#ygP{A z3Zvc%OVj+b?pb$Ex!AjKja{O*!l<{x(lpt<>uxC*dv~s}_Yl1mM!gl5rpfMG_e#0g zdvlGwkLay1>aDOe4c71a_fNUl2XKvjpy;hI>aDOeO?Jn6aLUC#glp_WMQ?>sZ-u34 zvK#9WDHr=luCb32y%k2i6_%#S?p%*ex!A{XjXg~CRv7hGSehogxt^GEu}|U}`()8u zVboh;X`1Y=^|X|WeLC0JXNcYkquvTj(`0wAXQy23bGXJnSM*jG-CEC2(`5Io7o=S5 z3%SO=Nc2`1^;TG#CcAgNH05Gn#x?fkqPN1Rx5Cmi*?sF(DHr={uCcEXy%k2i6_%#K z`d$C^DHr<&uCZ?vy%k2i6_%#S?pSY0x!AXIjeVQwtuX4Xury6}W4$xwV&BCz_T8fU zfT;U`(sY3B|Gs!%ko~7T;%>nA7xRH)KKTE`e5jbqo#f#6z7H33crhPo%)x)h?DAef z%Jpab7}x%c9~ZqBK)n}`ruon3y?~U9{WRCu&xqa&pxz5e(`3CDkaDqK;2Qfy(R%^Z zdjV;htoH&^F7~TjW4|VPFMxV4AWf6?UO>vlev51Dw?*#-Q11n#X|mo6NV(YWbB+Ch z=)C~yy?``L)_Vad7yDzbu|E;L7eKuikfy=ry?~U9{W;gzUx?ldpxz5e(`3CDkaDrV z<{JAO(R%^ZdjV;htoH&^F823aWB(v}FMxV4AWf6?UO>vl{)KDoUq$Z)Q11n#X|mo6 zNV(Xf-1tcBA)@yJsP_WsKd{~lNV(W!aP4!CDS9t}dM_YN^K-oykaDrdvlo}6p!DMarDQ11n#X|mo6NV(Y4aE(2! z=)C~yy?`_g*8JcMDHnT2uCZqly%#{e7m%jOdM_a5V$aGo_H3f}0;u-_(llA`1*BZ; zIl0E3OY~j<^rVXeXH32~N{wcdrYlT}(=^!~>*^^NdkwC!*A(ppQ#-+Fn(W59PRhkzmuu|xL_5LMPH>tgyK~(z0_1*B=R_5xBa_PJbRpC{T2p!NdNG+BEADHr=9 zuCXr`?FCSK0ckqG_W%F$vLO54cf{XYUtY{Big{&Y4*vh2ecldExjygJT>HG&h`tX{ z-v`n(|E%5)PPy1OaE*PV==%WmeIQMf^>%Q|#lDqm?At`&2dM7@X*x2yY3A_Gl#6{A z*VuQ9z7J5}2hucIZwIGb?EAUKen50TD0M$*nkMV*;FOC!oNMeyME8SI_k*Tsvfd6( zx!6x|js2wPeo*Ru&@@ff+rcRp`&q8BpA+2=O5G2drpbCcIOSr$#5MNIqWeLq`$5w* z+1=}FDHr>7uCd<`-49CL51OXQ?pfbXx!CV;js33Zeo*Ru&@@eU@A^T?#r}|M?2knE zgHrc{rfIVK)=yF{_NQE9e`6uUgHrc{rfIT!*C|pi_LN*>PbIn^l)4`@O_TLrK+46Q zj%)1cMfZbJ_k*Tsuz4>a?Af`-ovlZgP#?CE5$1_5#v0 zS$hE~7rT#Z?1e;o0n}bVnkH*6Amw5&#x?fhqP+lWFCa~mwHJ_bv6ti;dnwUg0JRs8 zrpek1NV(X{a*e&5XfJ@;3rN#s?FFPMxYA+y7leHI+a_bF*0n}bVnkH*6Amw5o!8P`gqP+lWFCa~mwHJ_bv5(~% z`#8~F0JRs8rpek1NV(W2a*chGXfJ@;3rN#s?FFPvl zzKUz?t3`VO)LuZECTlMsvlzJ+V-TSa>T)LuZECTlMs z>s$s{!z3SK|# z5$y#~djV;hti6Dgi#-L`*i(x30;s)!Gz~U;0Vx-ITCTCD6YT|1djV;hti6Dgi#-$9 z*fWdv0;s)!G)>lCK+46Qjce@LMSB6%UO<{AYcC+>V$a1j_S~Yq0BSEFO_Q}3kaDr- z=Nfwf(Ov+x7m%jO+6zdz*qvNsH${5^)LuZE4zT@qt35&XU+jqAefJi#ub2xp=D_b( zn|sUxQm)Ut2-iOEqM}&XfGNM@k zH48}7WX%FnF7^ssW3MQh1yHkqGz~VhfRu~93fI`Hie>@SEFevjH48|&*lTc&y{2du zK+OWuG+DENl#9JC*VyZcW&zYJAWf4s3rM-x8*z=jv1k@R%>vRi+0Avcl#9JN*VtQ# z?gypr2Tjvtcdc8eTB%EjK7YwZ0*_k&XRgQjV) ze%F6s%Edm2YwUlD?gypr2TjvtcdUn|T7e-hJ7T+{{2UsOZ;dtA1mhLjXCh&uw55)M^MW3d7tFk=Y2|aM-X*KP@3kS)g3`8 z7yCJ`v7Z;+5k%b)l%~nLBPiu!zsxoEE22Ass5^qv^iTddzaC`&6OMOqM*EFozFEw- z8gs-yr&&PC^?Bdn+UI>&Gz*|+0co0lRB)+`|9V*kc9_V1!u05uD^**{^;0#Yvas9a-@CYl9Mvw$?s&ov83x!7ZI zjXkz#7C_Ac(llAKfRu|pKG)b2h-LxQEFevjH48|&*pqOLJ*j9GK+OWuG+DENl#4wj z*Vt2uW&zYJAWf4s3rM-x({YVGy=WFd%>vRi*vtY_F80h^W6vU*1yHkqG)>klAmw7u z&NcQNqFDen3rN#s%>q&`_S{@!&m)=zP_uwEP1YD7LcaNngyg>>}9#eUQRR%pk@JSnygts%Ej*I8ha(tEP$E?q-n631*BZ; z7T4ITiDm)REFevjH48|&*lTf(y|!o;K+OWuG+DENl#9JS*Vr3~W&zYJAWf4s3rM-x zn{bW2sc05J%>vRiS+jtYi@hb+*jtHa0n{uYO_MbXNV(YCagDvbXcj=t0@5^Dvw)O~ zy))O?yNG51)GQ!PlQj!Sx!AjLjlH{Q7C_Ac(llAKfRu~97uVQ(i)I1TEFevjH48|& z*!y#heSl~dK+OWuG}z1nQZDwvTw@<1ngvj^fHY0kEFk4#AHg;Dk)l}uH48}70k;2r z>M=p~pZ{nF|DN&KVjfq_VU0QX_l(Vr_4t(Q^Pa%9&wHY1Png;hPSgCe?p#kvx!9+2 zjeVMEPng;hPSa#J*E3Tt_E}tGpDk{$=g_V7+%!#g*Lq&c#Xg^F>F(co4LlmMciI*rCaN5X&S8g!P`?V_8nYf-zjddchRl&?lety z$9hl7#lDwo?EA#+^?tgwK9Hu#ZmbWcTvl{)KDoUqyQX)LuZECTlMs~Xoq9#6CvKvlo|9|rxkP&b)LuZECTlMs|iuMAiy?``L)?Pr$#qQx6yH~UqKt-d zK$<3N7LanWhjNX*glHB(%>vRiS+jtYi@h}0*vp7!0n{uYO_MbXNV(W6aE-m9Xcj=t z0@5_t%mPv__9|RsuPT}aP_uwEP1YB)+`|9VsFGX_Qs-F05uCp(`3y8QZDx9Tw`w`ngvj^fHY0kEFk4#Z^JeAwxU@8 zH48}7WX%FnF7}RGWA7xI1yHkqG#z03-(Odd{dYLQ!N0%WwV3TF?FFQ1vfc|wx!9L;jeUjay#VUHfHWOo`~Qw#9c2I8j&<;V z$FC{owZ*)yF$e#5yw6@h%Jq3~;M(WCQM4C8?FFQ1{#oq>q+IM0_1*GZ7 z?C$IZq+IN~xW>L)v=>0_1*GYp{Byo9$o`)l@iylBi}^q?A8gElf6m<(^mcH{^?4uW z+UFfEIvYft4NBAevwAx?%Q|#eR)z?AJwSgQ&AXX_~CJgHtZ{+gxM6BRU&IoefIU zWW61naa*h3) z=xh*mHYiP#^>*+r4zh=EjXkR9Y!G!eC{2^~c5uq|xyR%hdo0n}AnI&TnkMV*;FOC! z9@p68i_Qj7XM@r-S#JlYTTHPr)_zl%lgi)Y+gkP1f7N zDHnTMuCb>RoeiSS2Bm4T-VRQ=*fVjBJ+tU+5Op>vO@lQ*IBUwqo{ekl*+plAsIx(7 znyj~jQ!e&gTw~8IIvYft4NB8wH`e)5F82IfV=o{&8$_KAO49+h|2JeK$o@ASa`3+) zJB!&YW>;el{=3z?1iMqN&)dVb&)X~dK0tjRNYnhYZmtWbTTH59Jzr3DNff>ia;NChP6sl#9JI*VxO5z7J5}2hucIZwIGb>=n4iUQzUYfcid= zrpbCcIOSrm!Zr4)qVEIL_klD`*4x1;7kdq^vDXxRAE3Suq-n5b4%bP!*z0nQy`Jd% z0QG$!O_TL@aLUErh->VPMc)Ug?*nO?tha+xF81bJV{ak)K0tjRNYiA!9h`Epx8WLl zThaFc>ia;NChP6sl#9J1*VsFWz7J5}2hucIZwIGb>|MFWZi~(aQD=kFG+A#4r(Enk zxyJs7=xh*mHYiP#^>%Q|#om`|?EOS%gQ&AXX_~CJgHtZ{L0n`1Q*<_nIvbRx$$C3D z4o+Rr_i+wTI*q4aT22p2&(ll9b2d7-@E4aqKQgk+mIvbRx$$C3DmqRs}TX|mo9PPy2(bB%q6=xh*mHYiPlH9vTF%Ei8i zYwUYPXM?D-L1~(-w}VqI_JdqwKO{OEM4b&v(`3CJoN}=rjhY@)t#B2=;@<))OhXp>#IR*LpWD{0f7Hm$cxNjs%diWWsh zN(-gpTD8!ER9dv}`=Whu>pe3)&;RfBc%R?>%;)LzX_}elIObaBd!0FFz6VO+3`K)# z%0lj7)Qx4YK&_hWRcHcdD3rh%iU!q`h1|iY8_V8+S~c05&;-sBjp z+ZdX_844wEhN3|=Wg&Mk>c+AbP^%{U7c_x06iVO>MT2U}LhfMHjb)odt(vSgG=Vb| zO5hAdgKEfv|G)-yW7$?vt0rp;P2dcL5;#NApqjFfI~a9i*>+H?CTj;x;0%QlI788( znzE2P7c+B;P^%{E1Wn)!g%UVJ(V&{LkUJQ4 zV_7$-Rg-mxCUAyA37ny5P)%9L9gMoMtQXX($x_e+&QK_UGZYP~DGRxSQ8$+5pjJ(m zhbC}_LJ6FqXi!aA$Q_Kjv21s!Rg?9FCUAyA37ny5P)%9L9gMoMY%i!)lkE*n;0%Ql zI788(nzE2P7km!f422RnL(!lbvfw`mMBP|+Ak?bK4uU3dhC&IPp=eM| zS;!rXy0Ppqs8y2+`*_D z%Z5U&n(SC;0%s_cz!{1L)szK}Ak>XzCqk{7>?CLcM-Y_25rhWSlm(6;)Qx4QLamzY zG-v`x5R||Xga*}=1&$!pjb+23R!w#mG=U=sO5g}WgKElxF93C8*?CZ_COaRR;0u5f zd;w@sOqBCL04y;0%QlI788(nzD}J z>rgkAje}Y>+4ax_&QK_UGZYP~DeDv-kGiq!Ca6`D-3(3O422RnL(!m`vd-aKQ8$)N zgjzM(BxnL>D3rh%iU!q`bqU{ry0Pp|s8y3qh9+=^LJ6FqXi!aA*YFh7jb&4zR!w#f zG=Vb|O5hAdgKEmUg{PrzESnCsYO?#G37nx&0%s^1R8tl>f>1Y>&4gMt*+b9-jvy$3 zBM1$uDGR;;)Qx4cpjJ&b8=Bw?fD(KGXi!aA@CBf5EPDcK)nrdX6MO+sf-e9K`oCq} zkuLysV_5-e)nr9zf-e9{@CBejHD!S#2z6sw6>8OF^PveGK~Mrm5E@id7C3@XH zfV#2lOQ=%EZ9=JP#F93C8eR@!ow6g^z-sIb-bod+QrmE_1rvR@+1i{q^syqpPK5fQHuiW29xRH99Sd)i7VT#-T}E|;Y#@)`$ax*sVi%i_ljxd>&z82 zs+4v_H02`Jo>Y#$%Vd8ZuFF|1q_~Ohh|*G5F=b$5X@G7jz1VoB z*ZW&d8K?8h;kTSmIsM!$Ue4wux7Zt=3@0)6U#5#b15SwggI-DB9Wy0#<@4-+>}jd3 zrG@_fcUQjk|9#~heZ5=$H&_18EqU3p8G9gY4ts1(eRgF%EADpWL}il2M#iXqqO#+k zi}GZ>FLI9`KiESiW7KEYYbml#+-JV6yemPU z_c1snmmDc%8n4^W*nBQx%v-#Z^&Cbq(>MCDCKJl(GQ0ayw~-ZjY;gixd@)(N>US^K zamhhu^4@;(@;bMrRx#h%^?dh+{hGFsI(G`8r_QvdyKbB->Q<#l#TQ#J z+k>s8Z9k?lc7v^%6Y)R29NgR(m&*HI*FWkqmX(#Fft?9+?@F`0oojDrw zqxx&U{>ECiHLgEA`YklwfVGXfvDZI6Wo}%umDl@9Y(UeV+?~>Rz#GZ-!k=q*X-<#@*zJh@7_a0lt$xv@LB3d#d4>v z+;&2G&hD{f8Un z4)q+^HepqYN@t3BMI$-86DPQg;9K&eE62F3>Fb!A6BDIP&!$U$C%e%r0(GU{oi{MW z2J2YuKDkWMfm6(~i7DdC=~u-yS(Wts9uvi~y=KzUr)5Iv*YC`j;%*}Q%vZYADTiL2 zoG$k5_<%lr_8IMTYzG~&v_$M_wSs9KJy?Ed_F5{PYAh#LT$c|2EXU9P^s`aLny3qh<@E+ULNAaxCQ7GV@;%#(>c+TEZbh$Z_*L9L*hH$T zdL?D8St2#sVks>$KQ2lqwIxx{m<{PZo3V&{FAn{YAw=c=pvQapiW#q`NO|33#53lb z=pcHZWMqF*lD2N4E4uGumd@6e%PK$7XPw4N!Qan`!x{~s(erM0-1*WXmj=D%Ej zxB<=o`y0@DahBx%b(!Sa!&^FkP-Q;5Qf&K~FWJkMTJpEBZFv#BLlwRE7nF#QbS@^g zs~UTCD^H)jrF8wen-7}5LcKTmwL(R;Q11^t%w=zH%3to|#YH>X$hyBT((v;n_!&}S zZYSB%G*nt;dsFf?y~5-KZDt%zA2UK~XIV(iWM}}gkOlD}V)UwA_`dgTlxTV~lDhdD2tPA@< zj}E%URM_fBhCRmO@u1(U(T0T-%uhgn7i>tQ$89)Cd6$0_qRM6Z(&JqW`W<`qaFhyc z+n~0DAhp1DFBP|;3BLY|8x==tzW$B0TK?DT4>zFMe|rN)&J18)#=fS~eNRy6UN5SA zUC$8oqrd-etZAg>@?UiU-Z=cXx@!9fXyR)jo(?vn+gb0=ErHs+DLQsh~Ob?>UOLGM?{)^16RU5=?VZbMfZa6kk+qXIVclmI_OgdtVO zv+44xsbZF`n{+m571M9A35?%BJq|m_EJ}SKS<5++QXVUsvohd|RUTkmo@(|4bQ4ahChxP@u%IYX3Uw( z*;LbBkMR0G`D9ur&G)}H{Bb10A8C>iv-DGP-u5BuvHtCIH}oXbPlP{>id!)H?PK#s zGVpM6v}iBLZg{(SWJlJp{+1a80%{Qi57TNg~Ip9p`Jj=e=dzRmQHv#p#NI;9nU{tK^@Zh6XDO^wPsAWiYTh=-DW)hhRd&d6V9Iqf5u(d zDISr>Qrn+*!TO(C4PQ*Cp9p`dnwQXt)FIE0YcufmkL>%+hEP8d{@mPJP9NQ|L_9Kf zC7!?VdYGhHe{J{!uRj6)=x45D!5(1`?)@qQKFG6s7|V3jEqQ49L;9UhUGB=+>vEH2 zx4DuI+I-fB<2>Mza$w9(C2M|Q{#`ROCGY7Z)yT)fyZQXbQ)sFTrrKeD0DDyUgK- zGWMt^YxK1(cS$dr^Glkhq+2l@$O&s7UuD3qp~K2AgKcw209<1F+I3<5lHN&S<^Cd_ zvxIhXt0w_|P{>w7b@*4jc6<;8^OOLuXuuc-Fc;fEU`t70J4w@5#Y-8-ztMod^w9Fr zQt#wOGT2}=^kMv|yX1`l8U8qF#GjvCEtxI1`-|OPBx7B_U%vmP`Tp02KTbsWb0BBD z_(nTSINH1`UjOf$k6%Hkp9p^r_9>#8>$Vk&Gh~c^_FI#`5b7twpQ+oOnbo_q#Puhe z;rGu^{CS;FKN0?T+0|vzc0TqxY119+zcqG8S3>*bfbF@jBX8pC{54?T^_;c)$xsv#1 zg4EuA12Pl$3?%4Q|Xlj>iS;dfxiUj59LbxBmr3xgTIZ3$e-ms`w- zs^QYm-};nUe?@-t#+E_&`11K;Y^xk7Z_bWz*WtX*MX@gOUb)WOMiStMnDRKENiJP2 zjSd>d#HaR`zy^}Q&JnU~b3}w=@bjewmS-5W&xUaExa)Mlt3yI;kh=t!CBhybUXzE$ zM`n`YkF!Sn=@F7m>wJt6j!|O;^!(lRX!}I-{jUvwoQd#f{D2m8fVGZz;_EA{KY#a$ zI)wU(@Mr9+F3gsH7Ew0Y#aO>*J^i_a`ibyocCS2P)WSNwv-F%j4B^Jg>7d!uIkwc!su{sj0Fe1EwNJ|DSYTWb#OmDMqFRQg#Q zV!@xn{%ZPBj!M_%k`fQ7`fb+nR`WcSHuqY2_nm5*-+jC*-(bfRHShE!{^pxw+>CpT z_<2EvOq-`+YMG%s_;Y^JKfbuLhjOjttI|^ zh?1nAMl!;XU{maCqGA7x1wRwui75knaj?(k&7gfW@b!pYgBCF8U$no7Y@>|h^XSuW z&NA?GvF``zK)7@^$$&-vD5M9i3067E3o`t1(TG3xPjAuMJC=!ISM>1nm&QaA;*Sdv z{+!c|_GFTmE^q=I5_A{Bt3~AL)1P(xe(#c?WvzchZT2){&g4Q`=9wL&y{fgMEJ92$6wNL z#+1(dc?7S&A^Xoq5$Y$xAEP}z#D)g@sR8;k@$+}6sr^Jk{Y3b4)a0yKv@Msi<|{qX z^Y_L-WhSA1BK#>eUBpD%mgaSxnvLf_=3Vn3Lj6SeV-Wfe{r6H+@vU=v{H@)-d1N!q z`fI}D6Y!#gjIhG_kO9|jBDk|1Y`Mx`BeG1>wBhP&?pwgD6D_-o&!6D4w!L( z+udZJ0>6i18|Ta+|4-F%XA$BJ#DRr&lF#q0Vp=N0ge2XS-uWz-qsmznLm~7Hn#_QG zLw~5cBi^=c4F02&5O%(BM;Q8hCHRwa zM8GcwY$%AqSi+!Za@Q2Si)8rYsu6$MnI9CMKL46~{_9!%{29EB9i#dF*S7w<65-F9 z@Lp2E%|_z8?+x+#yZwF8zwkfSs-FmdECWu8O&vdayE{nVoM z!WZV^|Iz7|7YOwe;m_+H0uNyR-<|M%?M;kJ%MTc}zmW zAr5R23hm=Tj2ha9V<4uDhWI#$cN@ln&q_)%HDZ%Y*P;D56myq%F-TWJ`-(ek3y{r} z_t)=S>BpB742o?7Tw+eY>5hJeh~n|?9&}(~e@_N{L-vxeE2ymmHWLk4hT}g^&Nt5{ z!yh+|_;aQCb9#?OxbXGMCcOUbc^|q)^Zl=F{dXh6AFsa8=#O@vsW-6|`1w0$er-9S zej@y78uyD{cpzPv>{cJIKVDRi_k{Y1@TcJM7}_uAm#{Td7r*}&Jr5GvUv5PBQ~2Pm zxNuB2Dm^h8-~Yeu%8Ci+PlP{)o_^B$UpYd)eHvbWy+fY%Ce%-aKYQ|KiZ_;;39VXJ zVEvtfM-loz-H7nVy8S8o*EB(>V>$po|8^!}g!Z2s5&ld_^prMor-iwC^YHy2HZ1K2 z;q@oNAFHZhs+=wKnmW)D>mMDnXS`U)9kl#vtvubkzXEHp z2=UkK)p#qeTi#Y>NkA&ECK&S1Lj2UppW5U<@$9Hl@!HvP~#Da^_xsGEGM#pI>7U{!S@cXlu`{c1F!-|;$hQrvBFT-Sry^~?z zPJU}Wl3iJ`odw^KtQ;RNx1MIsWdvxmgHNWh#(h_@fH{)k)cPn!kDgO{Ktg+Ot89nD z-dTGI*+qa$Oo$wfV#%4zH-jYuw~pAa13nxH_Tj{r$In0v_cjsyMk0zsfVc!2;^`PZ z;5q|wa1cxP7L8{hMgqko(B9?YBEm3a|2X)V62@Pi_hEU(M^@nVH)UJd z0nPWnHvDlX!k@%JF|=n@KjH5Kt?=`AUs~CkP(Km=D5V{l!zsF6g6b`zYd!u})GI>$ zMEK)9YZfE4Iw}tJ*o4==o@bw*AkEaUOh*sp9p_Uzne%+ zT&@X`kDuW6cT$UxNrd`|@JDy{3~5Q(O=0o`5kG(R<~$5#FfBe5^8`U{VsGkUbB!3Ua{Q3sUcffwU{`8{W+iKQd z8~(ub3Gk=IP74M3O9mFEL%fo~qY~T|9~vXivZ5Iu>4FC%pJeZqt6M;-;s^ zCC7BfaSnUF{F1jNbzq|%ceA-)CS#k!?!_g!SHv6n%$!He=S(j}e$^1LCyL#9@G-mn zZ$o94?Mr5dt)Ga_=z#x*IT_Xu?Z4r8HMG};Vy;mfIoMTzQEM0!Pab@~E@0M5y6uM7 zI9B^|r`k5Wg+Df7O-I9^sbIi_msP=a9VM|52PCgD?p8^kbz$f^;3{&rt3 zCtUx#65-GAa4lNtutX^7FafVWcRoIEr1|-;4S%~5;g9Fu>2%xi^~9B71$h0P@iy%l zp?)I#`6fouuLAVN=`SAO>mU5L?L9*MMEJ8kAyG{2X+ou}*n*$GBNYaN2=x=;&rZ`V zUZrxmuyJ-A_W#{}I+zguyAt7#8o@|u5BJcQgjD?eh1_1|OgMic{LzhgDtZhk&l_s{ z=d5QJ!+6r?p9p`tG9#opcPEMkl#HMMCF3LiMf_21_yg(*@aOyRBo_HYwmO<9kFFXi zBOi)#>t~x_e=LCmzX}Vn3DN@n$BOs9S$xICA6&mhFZuFum*wHU%T@2*cKH@YAx=Q* zV&bPDykLKRmSK-iE{s^gUih?IhP^Pxz4V^c*X}UuKhj8UKCz62{Wk%yQ0Ud;s0eY> z$UdP_j5LaELl}Z=9CX$c`EXh({pW<{_x{+wi|^5d_O}NS{(SE?L(*+j$II@= zdW`>XyYBTPoIer%)LGkF>QkqVAm3?+pZ{ZXzuqU*PlP`OVSkI$j(iXt#dY}pe;(}f zFZRDpwA^Z*KZVuD>3@FwG{|d2p=|BZM7r23Lh8lWk$fyzDq`DdRyYwT+OO8;rg+#( z7cV|il44h=jk0ejt@mZ~DU%Jn9k>Pjsm57q{V|#9K0285oYkG@=caK>ONXi2SF@D; z&$r4yT=kSX4pr>tyKT9s85`-c<~!vBhm4hn5#!nWiDqoeipgx(@??38St0#=V5Yq1 z7{jd+ZRC1`yDJ02-muK^5;nH^NY+`~Sos_{jS{Dip{23?#W;^-u`2eUAUCZmP5UxL zoKSAY91QT40(11Gv$|DMX0EIBz%N7`=G>58>wQ<;VR1z)4)tc7-+iaE?;0?hIxnLy z=02ncpExTG@ZBW^1(h;KVjD{@FMG4pu%+V0z%|UvE@@0^lYEQ`hyACUXvUvf_$Scu zQw{tR$cMGN&2RQ;Ly|%tLi}@QbnEhg)(3Pc%@R z|9;4UUygMu*@w?~fv=9sDw?7E-n3ciP-(2bU9Pe%uWV6P9T>`iEhu;Bk|~Fj=ql)3 z)+e1P7M;mOSP$oc!A^XMxFq20t~U+)wrHOc;lI>n)j0{pkia(ph4ww+=SUDEBHec_ z!h50UdjZ+1XXcDy|N8BT_fz5Lipa-@VnopXCwy0cty=)LXPNk)_#fB*u#x8LUkm?) zqk~5Lf0eB#ZQp;G>Rg_P*B@{5n3qKFzoP>Y{>Oc4CiT70*sGz#1pNLxc-;FJ{@+^c zKSu{5{6FI9#+1Ea zNbc(qEA{-x<=oi}A0F0zW=(05)FB~G7Rx5Ged9K;yJJV=y;c28BgHJIm3(OVXSuTM zINRpvR5{3Y1qbJ(%8J*0tRp&QZ%(S!T0~Lwpcu&l50*0-qb; zNGEAh>P%)xdRrFx$pB9nbOu;&)kG9~5ApHyfU}~v2!1%UCrZQqsEFo=_C&!ZrSTaq zutAR|CBnX`Ho_fj6{)xTPTES)hki3?6a`5`I z%GJt~?D-?(pBQTQTMW#J627?h!ulWNr!^qdPlP}BdfSP2zKs#K7N5fU-@gqZ`~G)y zB*LGex}7A$r@EqKV1e}){a$HIIDaDiIdZifle_)Q10#MEFy( z$XP5oGn2|0v<~Y(R(g)i|KsRLgg@7M&hQG)*dZj%UF(6?zlq1={>A!N>->rE$Lhjb zadO;u%C6K3mNss5Qu-ToX6?tvvQ^guxQam%><_;5 z0&L;;theQ-oKH~u#a&bbHXcy747kV-Nl4=@2j%i;|1saYf!a5@k2>{EV|7vLC?)EH!+ARZzL;tEkryfirAtOVz_q*)c2Y=z(tPU z8V&ohIx^-XN_UqLA0F5!u)nDPNaE7Pb0H`H1khT za~p_N^NvxolBNmx`(x*RviJ{2GX9BH$z`HZcndMMupB>s@5}1kC42vzi125}mio-z z`8TK!_Fb`l-^9BE2=x=;&u_ObV%KdaJ$2%@LVr{)vBWc5~lsLj6SeLw5eZHvECt zj{tvO+dq&;R50?lx~JHJH7i+$-N7PW*7###$|~WD3_dGn|1E94r`%X+b2?1@zV4*D zKPOprZR^eFE;04q(ZJHXe%lV*-~nms&o498aMwf1>}mW z$i+&d@Au?oZ|1YAVGkK%Fl76TSkCy_UUvDwd7Sxj9S-5hT)T$&cR+jauf|wJ;FTp_kx~zt_$G$bhQ-N$CwD$%v z@W5~M5S_zM(<$@nL}tY|0g9<|OZC*aTd!zV4n$@oVdor&=0^+lf9dFi?^ za>_mtU28L|A#cgvKW8HR89Cd8iCOhJuVO=QtUoOC>kLBuMELW+#{c8!OoTr%-+D2( zY&%dzE$idwPtUT&PQv*U;m?pCe$t3B?Q?@_y~Pdd z&uKoyh)_Qf{*15d&z$K`iPC5q+g~$39Xdj&p9p^}jRuO_xIx0ABzHXjc>^waYt~;I z{=nl;fIqs^xF9dGHN!A13Ii6~1-6$Df`hH@ZH8U%RkEg}6m_i~lR7S40@*afQ7&HfF&f z1@W!IUKa;G7wTf0yKFPxZ7A-L-C&t58(WO#?4l-fdxwwU*5$h@OQJ`}C{CWS{Kh;v zy_Q2~uYjXSgxGlCGrA?cn*%iQK6P2(Dq;}dIh^Aa!QX>;C&1Pjj(E;-j6Aa6z)pgF zyLK%lQ6JifFY$^Zl>Q{wCv}uy5Xsd9HpEhPE1pzyF6jwTdUyPlP{>uT{}T z^JB%j=9Lt}pB)7kUlZyl!k?^f-K3@Fz3K5ToALEGYu1zyf64eKMvirmdZd<7w(T4+ z{tdOB7*05UBK#@bWG4piS}v@8@dtl~C;psHsGkUb#`H2~2JHVSJp3mM-~WKBcVzK* zjxI#_Bkf|CteL4^_bV4;{Jn9!GgOScqBt)eD@xL@PC*$99bRoi@ z3xirQ)=%xInJ2^X^{>-{J z2XHUq>nmv?5nO{Q`&IJ+E%}12k?QPyTHax^FRPix&AeZnOH=JS74c2)M5(un8uQ(9 z-PEL(&w)tY zQo8aYdNtTxnX-dR1AbYq$U-c;qV-R_0=5=6r?eyRA6C&g*@c@LHmHnHw1PKk_VqrE}X@BO9Sr)idjUy zA!JiQe0?$O7k0wfht|Xu^;`Io;g4qiiD$?C>8ylGuehXOy#8<8^O!9D%aM$K;`Qv$ zlyQ!+FwZFpKmYeu|03f*c624epRIGWnfE8VQF=WuV*M)<%?a%vS0emj!g|uiGfaee z(>CMl-!*jPc+Kx$ZTRm>WdF3iLL;;ixd zvuER!R6_kk_>+($(9icIP^F99u>K<%CSM5k6X8#4tgCc6UZs|`vc~vxpeZ5$hNCMH z{+u3dD+MpPDKr`7hxOYV#cm~>KN0?X_c4sjEkla34=q?DZA$?C0o!Jt_86G{o!`}0PAGf?m*#A;;K4q~GZy!yWtBgj?EDSE=lK zoCA!Y&^a-*Zw7cmKaCtGA-=qE2HPdA1V_aA${*P{;;Rsm zPYCQal-~*V+1exS3LNW(&UB%;`kwM8X-f2T8Rgpmd&%>>>j(*96vCfdWfmjI@JBQM z#P5Pv^q90z;D0=g?e9egx9V!X|Fx}uWc(B9*MEq0oki+V$EEoBuY2v4NT{C(fByIO z-`$AtCw1>vdhzTiSzns|9yYe15fR+#9FFa)P*Lk|;-yS$sz0QR5$!k~hZj%>syJH{9OP57(qbCQU zcsGWrKbJ#iy8uT7$XCHc{^Z%O=AO!u*~^ujSbz4;p#F$INkQj*E4I}ET#8nrL+`Me zl{Z+w5_1mr2_bI4n}*m139x|yEMwq|uMAisW*@x5w4XVNg_t(XH;c|LTf14ZfFEq< zxoZ*bpqzt%R~J!CHRcva@d--;Y~}dW5(aVaO$j)L{a_F`#~@n}@^eTit{dUc$XU({ z$nZxq|HQp4Goj8^12HGvRz$k2t>zK#f06M|gdDb$dQ6_~70kHc^*6(VC(Hlf=uU(` zriSLsw6PX>Y-&q9f4z40yEH%lwc)Qj5&jIByUjCw#5|!ia1fqiyhUxe`|?nL-=ab}>TGcA^$ zbNdhfRo<4Ya>Dr&;m@0NbII}JI3e_sKE|J+VFNM=^%LQbTl&&d?@x)8wVaHEt*(~HAk|7Qoao5Su%6vJr zW@m2x!gke9Q3R{b-1580%JE^@szaj~uEVC@yvYP-??!v;a(Pc*Dyh3vb+y?Iwfp-m z@`t&@x$|-g;-CO~WFvb~`YEAUxVM2TP(CBHSH?hW0*lV&FgJ5$lk0mh=fuN>ogvna zkpYKfgb96vUa@hzx5y~I8s)ClH7)|q@`JP*x*zz7s>Fwn;~13B37y$Ndvbt96v7IG zQ7B#kaXF#9fXM!Vy*?W3B@z7}niq;;fLJ*Z?ak3ST9E6u70Me3Ii38)*P$zMj2@DK z^FPSW!rvse+cMUY;g4qii3jzENzeWEi;nB!u`b79@0M!5|Fx~ZWc(9}1?S*XU4HkU0AHS4bpe?UC}{vaM8w8lry+zWYP zd&+cwYsIClfdcC~Z4$MT17E*Sh@Q8rS(OSrv3&E1gScg0 zrry~RTiE0}p=!*OB-Qw670R1|@WBgW(J=qGo@mTHT$stCGd}$dGG&HsuE5zFl+TYD zV`t3;vau56r(k2%M0D0ig7|IjLM*Ec*H&1R7ZBp|B(Q0~Rw)zFSsjEe$QQ&|&SQV} z`AhB;@Eo5C=^B}^XUhVay+(q^1ukADN{NJ=NCp`b*L4-eb z4U#A+zB!dTKL&q)dgWXg(@DRt>Dy#A#wds3HBKN0@CeRW1Wlih*}?Cpj1 zo5egK{QmJE!k?xuKZ&1S+Y04pM11{^eTyLU|9BAL&+uepVeAPDp(u&R`p+3Jo~HTw z*TO#mZ$AnD#Ol`*n4gmevu|B^cBsU%&-?9=pV?%wfxk}4eGZ?JiyT|ZRb#iyiPJ9d z6X#9iUnVr+ok#lQzciSvKDRSebN5{3Q_9oSj#HPj#q-uH4bo2Vu^pChjRtO)hZr1| zQ%|>(Q%*W?yVv-#pEq5SquZ3pYR~<0;qES+fA9rn?efm@@>L@g=fZ5Z!J!xI{XO%Q z{OtE^ptw{Xd#fe4^U_zQhguKHNvQ7;oscGSr^l(8Gk%+N#j= zhgdSEgNnsvzEA13$?lTy@H#zj+$~|;wpe<>BxBin!9I*Xp68wZ1^(2+KY@<_XyBhf z`;g#MlS78?X79W9l_B;W{8As~Pa=i#C5jKEm+X`VACz`y9e5Ns@!Ie-zrWLM?$MQl ze2drh^4EVYRpY)j$rxNxQgptSIWQ|v{-HNWLHQU#kNlv`B^hGy<;-W#Kyk{Cbr%@K8u-KNRK2g6{!1(b&MWpvD1QE*y(&IOIDaDiUy#2~IN)QP zJKH`Ce}BHV>PPzi5#j%;0!!v-{(A9Z%TM_JFNu3h=6`f@Ai{q=V=Jal>;}qv#h>$! z2lTcCXukfn*q`Y5CxQK0IW16uJWp&G@2tG&_ej39Hdq0h5#{^fx-Q-=A=}h*dP}AA zz_n`S_buFo1u5M563+W!T@yZ{Z#({RRkM7H6}QyltSBWq&<62T@XxJcxZliWw*J~! zIpJ3y<&|MudA4+c8$RDwS^GFp-t%RFa%X%Pj_PZh8$ z5r;c)RLthUU&hp5Yp8&)jvXDhguT}6B>Se|AI!(Qab{!rO~E1tVkHr;5({>vZ14C~ zMtI^Pw_)9qZ6S|I3FMbIV-&$>+!8UASIpV;a+LwuUjPH?=ChQEK8hJPo^Kk7urKM^w~k?Q}K zp=b18;duQYE4?G*zi@ISvOgaWen(f#ETgo8+vE3dWDhN}{2NYW{1dJ9n~HC*U!;bw zT8HP~KYHUQ&F^1r`0Gf7Kl`+zrBO>P@-8`A<8PfCslMk4^%LPw-qN;W%JSWm=hQ#v zkJcz}ZaXUMniWQ^3!Et0s?i2=x=;&yI_p%vS#k!d0CL{QM8A>Qt&(e{J{!uRj6) zpg276Z2|XDoH*y)D`n*#N@82Ple|e~> zclV6r>gHF6)yse7sfJhV)Yn}M_YH%LzXo^! zezMCVI&+15WniC4jT`E+DCY>oh6u||lW|NT$|-`*P@z3g#3=#$rob;@jN(SX|MpTq zzBjOeP~3QVK{)zc>RFQw}LecI2 zoc|B6Od≥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

%g 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

{I>bmL4i!XYuF1 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≫U`6eXpq&{&&+Q~IZXb^1)= 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%0D4DK8XLndlVtlJH&%%(U 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�Yifiv8yB)qwW}iaSsbpvVI1<^ss?) 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%0Aszqf$?bUkv_axO#!``{2q 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%0AeBh5a%(Di+W)#x? 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�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

%r} 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 z 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 z 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≤f*~`{{lI{=Me1gX!ds@`@4s|&u8y* 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 S`=6HDP#ZRK)UG3z96q!hI&j=hqgPvL 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
    taZ* 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

    !# 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 +~s67&ZYh@kA%#Vp_Omz1mUG+A|AQ1 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 literal 0 HcmV?d00001 diff --git a/nff/tests/test_excited_states_training.py b/nff/tests/test_excited_states_training.py new file mode 100644 index 00000000..9b89e705 --- /dev/null +++ b/nff/tests/test_excited_states_training.py @@ -0,0 +1,174 @@ + +import os +import pathlib + +import torch +from torch.optim import Adam +from torch.utils.data import DataLoader +from torch.utils.data.sampler import RandomSampler + + +from nff.data import Dataset, split_train_validation_test, collate_dicts +from nff.train import Trainer, get_model, loss, hooks, metrics, evaluate + + +def test_excited_training(device, tmpdir): + # Loss function + # Let's make a loss function for the model. We'll use three diabatic states, + # so that the model outputs the six quantities `d_{ij}` for `i >= j`, and `0 <= i, j <= 2`. + # That means the model outputs `d_00`, `d_01`, etc. The model will then produce three adiabatic energies, + # `energy_{i}`. Last, the model will also run a backwards pass to produce the gradients `energy_{i}_grad`. + # The loss function can penalize errors in the adiabatic energies and forces, adiabatic gaps, + # and non-adiabatic couplings (NACV). It can also penalize errors in the `d_{i}{i}`, + # provided that a set of reference geometries with known `d_{i}{i}` is in the dataset. + + loss_dict = { + "mse": [ + {"coef": 0.01, "params": {"key": "d_00"}}, + {"coef": 0.01, "params": {"key": "d_11"}}, + {"coef": 0.01, "params": {"key": "d_22"}}, + {"coef": 0.2, "params": {"key": "energy_0"}}, + {"coef": 1, "params": {"key": "energy_0_grad"}}, + {"coef": 0.1, "params": {"key": "energy_1"}}, + {"coef": 1, "params": {"key": "energy_1_grad"}}, + {"coef": 0.5, "params": {"key": "energy_1_energy_0_delta"}}, + ], + "nacv": [{"coef": 1, "params": {"abs": False, "key": "force_nacv_10", "max": False}}], + } + + # We see that each key is a different type of loss (e.g. `mse` for mean-squared-error), + # and each value is a list of sub-dictionaries. Each sub-dictionary contains information about the quantities + # being penalized, through `params`, and their relative weights, through `coef`. + # For example, `d_11` is through with an MSE loss with weight 0.01. Some notes: + # + # - The NACV gets its own special loss type, called `nacv`. + # This is because it must correct the phase of the predicted NACV to minimize the prediction error. + # This accounts for random sign changes in the ground truth NACV. + # + # - Energy gaps in the dataset are denoted `energy_{i}_energy_{j}_delta`, where i > j. + # + # - Force NACVS in the dataset are denoted `force_nacv_{i}_energy_{j}_delta`, where i > j. + # + # Now we can supply the loss dictionary to `loss.build_multi_loss`, and we have our loss funnction: + + loss_fn = loss.build_multi_loss(loss_dict) + + + # ## Making the model + # + # Now let's make the model. To do this we can use `get_model`, together with the model parameters and model type. + # + # Our model type is called `PainnDiabat`, because it's PaiNN with diabatic states. We'll also have to supply the keys below, which include the regular hyperparameters (activation function, feature dimension, etc.), as well as the keys of the diabatic energies. We'll also specify `add_nacv=True`, which means the NACV will get computed when the model is called, and hence can be used in the loss function: + # + + # Only provide the 6 unique diabatic keys + # It doesn't matter whether you use upper- or lower-triangular + + diabat_keys = [["d_00", "d_01", "d_02"], ["d_01", "d_11", "d_12"], ["d_02", "d_12", "d_22"]] + + modelparams = { + "feat_dim": 128, + "activation": "swish", + "n_rbf": 20, + "cutoff": 5.0, + "num_conv": 3, + "output_keys": ["energy_0", "energy_1"], + "grad_keys": ["energy_0_grad", "energy_1_grad"], + "diabat_keys": diabat_keys, + "add_nacv": True, + } + + model = get_model(modelparams, model_type="PainnDiabat") + + # ## Optimizer, metrics, and hooks + trainable_params = filter(lambda p: p.requires_grad, model.parameters()) + optimizer = Adam(trainable_params, lr=1e-4) + + train_metrics = [ + metrics.MeanAbsoluteError("energy_0"), + metrics.MeanAbsoluteError("energy_1"), + metrics.MeanAbsoluteError("energy_0_grad"), + metrics.MeanAbsoluteError("energy_1_grad"), + metrics.MeanAbsoluteError("energy_1_energy_0_delta"), + ] + + outdir = tmpdir + train_hooks = [ + hooks.CSVHook( + outdir, + metrics=train_metrics, + ), + hooks.PrintingHook(outdir, metrics=train_metrics, separator=" | ", time_strf="%M:%S"), + hooks.ReduceLROnPlateauHook( + optimizer=optimizer, + # patience in the original paper + patience=50, + factor=0.5, + min_lr=1e-7, + window_length=1, + stop_after_min=True, + ), + ] + + + # ## Dataset + dset = Dataset.from_file(os.path.join(pathlib.Path(__file__).parent.absolute(), "data/azo_diabat.pth.tar")) + train, val, test = split_train_validation_test(dset, val_size=0.1, test_size=0.1) + + batch_size = 20 + train_loader = DataLoader(train, batch_size=batch_size, collate_fn=collate_dicts, sampler=RandomSampler(train)) + val_loader = DataLoader(val, batch_size=batch_size, collate_fn=collate_dicts) + test_loader = DataLoader(test, batch_size=batch_size, collate_fn=collate_dicts) + + + # ## Training + + T = Trainer( + model_path=outdir, + model=model, + loss_fn=loss_fn, + optimizer=optimizer, + train_loader=train_loader, + validation_loader=val_loader, + checkpoint_interval=1, + hooks=train_hooks, + mini_batches=1, + ) + T.train(device=device, n_epochs=10) + + # ## Evaluating + + def correct_nacv(results, targets, key): + num_atoms = targets["num_atoms"] + if not isinstance(num_atoms, list): + num_atoms = num_atoms.tolist() + pred = torch.split(torch.cat(results[key]), num_atoms) + targ = torch.split(torch.cat(targets[key]), num_atoms) + + real_pred = [] + + for p, t in zip(pred, targ): + sub_err = (p - t).abs().mean() + add_err = (p + t).abs().mean() + sign = 1 if sub_err < add_err else -1 + real_pred.append(sign * p) + + return real_pred + + results, targets, test_loss = evaluate( + T.get_best_model(), test_loader, loss_fn=lambda x, y: torch.Tensor([0]), device=device + ) + real_nacv = correct_nacv(results, targets, "force_nacv_10") + results["force_nacv_10"] = real_nacv + + en_keys = ["energy_0", "energy_1", "energy_1_energy_0_delta"] + grad_keys = ["energy_0_grad", "energy_1_grad"] + + for key in [*en_keys, *grad_keys, "force_nacv_10"]: + pred = results[key] + targ = targets[key] + targ_dim = len(targets["energy_0"][0].shape) + fn = torch.stack if targ_dim == 0 else torch.cat + pred = torch.cat(pred).reshape(-1) + targ = fn(targ).reshape(-1) + assert abs(pred - targ).mean() < 12.0 diff --git a/nff/tests/test_training.py b/nff/tests/test_training.py new file mode 100644 index 00000000..40140e5f --- /dev/null +++ b/nff/tests/test_training.py @@ -0,0 +1,120 @@ +import os +import pathlib + +import torch +from torch.optim import Adam +from torch.utils.data import DataLoader + +from nff.data import Dataset, split_train_validation_test, collate_dicts, to_tensor +from nff.train import Trainer, get_model, loss, hooks, metrics, evaluate + + +def test_training(device, tmpdir): + OUTDIR = tmpdir + dataset = Dataset.from_file(os.path.join(pathlib.Path(__file__).parent.absolute(), "data", "dataset.pth.tar")) + train, val, test = split_train_validation_test(dataset, val_size=0.2, test_size=0.2) + + train_loader = DataLoader(train, batch_size=50, collate_fn=collate_dicts) + val_loader = DataLoader(val, batch_size=50, collate_fn=collate_dicts) + test_loader = DataLoader(test, batch_size=50, collate_fn=collate_dicts) + + # `nff` is based on SchNet. It parameterizes interatomic interactions in molecules and materials through a + # series of convolution layers with continuous filters. Here, we are going to create a simple model using the + # hyperparameters given on `params`: + params = { + "n_atom_basis": 256, + "n_filters": 256, + "n_gaussians": 32, + "n_convolutions": 4, + "cutoff": 5.0, + "trainable_gauss": True, + "dropout_rate": 0.2, + } + + model = get_model(params) + + + # ## Creating a trainer + + # To train our model with the data provided, we have to create a loss function. + # The easiest way to do that is through the `build_mse_loss` builder. + # Its argument `rho` is a parameter that will multiply the mean square error (MSE) of the force components + # before summing it with the MSE of the energy. + loss_fn = loss.build_mse_loss(loss_coef={"energy": 0.01, "energy_grad": 1}) + + # We should also select an optimizer for our recently created model: + trainable_params = filter(lambda p: p.requires_grad, model.parameters()) + optimizer = Adam(trainable_params, lr=3e-4) + + # ### Metrics and hooks + # Metrics and hooks allow the customization of the training process. + # Instead of tweaking directly the code or having to resort to countless flags, + # we can create submodules (or add-ons) to monitor the progress of the training or customize it. + # If we want to monitor the progress of our training, say by looking at the mean absolute error (MAE) of + # energies and forces, we can simply create metrics to observe them: + + train_metrics = [metrics.MeanAbsoluteError("energy"), metrics.MeanAbsoluteError("energy_grad")] + + # Furthermore, if we want to customize how our training procedure is done, we can use hooks which can interrupt + # or change the train automatically. + # + # In our case, we are adding hooks to: + # * Stop the training procedure after 100 epochs; + # * Log the training on a machine-readable CSV file under the directory `./sandbox`; + # * Print the progress on the screen with custom formatting; and + # * Set up a scheduler for the learning rate. + # the max epochs are massively reduced to be suitable for a CI pipeline + + train_hooks = [ + hooks.MaxEpochHook(7), + hooks.CSVHook( + OUTDIR, + metrics=train_metrics, + ), + hooks.PrintingHook(OUTDIR, metrics=train_metrics, separator=" | ", time_strf="%M:%S"), + hooks.ReduceLROnPlateauHook( + optimizer=optimizer, patience=30, factor=0.5, min_lr=1e-7, window_length=1, stop_after_min=True + ), + ] + + # ### Trainer wrapper + # A `Trainer` in the `nff` package is a wrapper to train a model. It automatically creates checkpoints, + # as well as trains and validates a given model. + # It also allows further training by loading checkpoints from existing paths, + # making the training procedure more flexible. + # Its functionality can be extended by the hooks we created above. + # To create a trainer, we have to execute the following command: + T = Trainer( + model_path=OUTDIR, + model=model, + loss_fn=loss_fn, + optimizer=optimizer, + train_loader=train_loader, + validation_loader=val_loader, + checkpoint_interval=1, + hooks=train_hooks, + ) + + # Now we can finally train the model using the method `train` from the `Trainer`: + # the number of epochs is massively reduced to be suitable for a CI pipeline + T.train(device=device, n_epochs=7) + + # ## Evaluating the model on the test set + # Now we have a brand new model trained and validated. + # We can use the best model from this training to evaluate its performance on the test set. + # `results` contains the predictions of properties for the whole test dataset. + # `targets` contains the ground truth for such data. + # `test_loss` is the loss, calculated with the same function used during the training part + results, targets, val_loss = evaluate(T.get_best_model(), test_loader, loss_fn, device=device) + + to_tensor(results["energy"], stack=True).shape + + # Finally, we could plot our results to observe how well is our model performing + # here we are just checking the MAE to ensure the pipeline works + + keys = "energy_grad", "energy" + for key in keys: + pred = torch.stack(results[key], dim=0).view(-1).detach().cpu().numpy() + targ = torch.stack(targets[key], dim=0).view(-1).detach().cpu().numpy() + mae = abs(pred - targ).mean() + assert mae < 10.0 From 4bafcbf3f715897242aa95442f05473e449e29ba Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 16 Dec 2024 16:46:25 -0500 Subject: [PATCH 16/66] simple CI --- .github/workflows/python-app.yml | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/workflows/python-app.yml diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml new file mode 100644 index 00000000..67309729 --- /dev/null +++ b/.github/workflows/python-app.yml @@ -0,0 +1,47 @@ +name: Test NeuralForceField package + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + # python-version: ["pypy3.10", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10"] + + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Display Python version + run: python -c "import sys; print(sys.version)" + - name: Install basics + run: python -m pip install --upgrade pip setuptools wheel + - name: Install package + run: python -m pip install . + # - name: Install linters + # run: python -m pip install flake8 mypy pylint + # - name: Install documentation requirements + # run: python -m pip install -r docs/requirements.txt + # - name: Test with flake8 + # run: flake8 polymethod + # - name: Test with mypy + # run: mypy polymethod + # - name: Test with pylint + # run: pylint polymethod + - name: Test with pytest + run: | + pip install pytest pytest-cov + pytest nff --doctest-modules --junitxml=junit/test-results-${{ matrix.python-version }}.xml --cov=nff --cov-report=xml --cov-report=html + - name: Upload pytest test results + uses: actions/upload-artifact@v4 + with: + name: pytest-results-${{ matrix.python-version }} + path: junit/test-results-${{ matrix.python-version }}.xml + if: ${{ always() }} + # - name: Test documentation + # run: sphinx-build docs/source docs/build From 9bdf505512396ac52844160d280ccbae11eba91a Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 08:51:40 -0500 Subject: [PATCH 17/66] avoid execution of broken code by pytest? --- .github/workflows/python-app.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 67309729..0ce4cfa6 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -36,7 +36,7 @@ jobs: - name: Test with pytest run: | pip install pytest pytest-cov - pytest nff --doctest-modules --junitxml=junit/test-results-${{ matrix.python-version }}.xml --cov=nff --cov-report=xml --cov-report=html + pytest nff/tests --doctest-modules --junitxml=junit/test-results-${{ matrix.python-version }}.xml --cov=nff --cov-report=xml --cov-report=html - name: Upload pytest test results uses: actions/upload-artifact@v4 with: From 5e037674ee74b454ccf96897d8be48268a8a5a71 Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 10:27:44 -0500 Subject: [PATCH 18/66] autoflake and ruff formatting --- nff/analysis/attribution.py | 2 +- nff/analysis/attribution_deprecate.py | 2 +- nff/analysis/cp3d.py | 200 ++--- nff/analysis/loss_plot.py | 20 +- nff/analysis/mpl_settings.py | 11 +- nff/analysis/parity_plot.py | 8 +- nff/analysis/roce.py | 249 ++---- nff/data/dataset.py | 11 +- nff/data/features/graph.py | 276 +++--- nff/data/features/xyz.py | 57 +- nff/data/graphs.py | 2 +- nff/data/loader.py | 99 +-- nff/data/parallel.py | 81 +- nff/data/sampling.py | 192 ++--- nff/data/utils.py | 1 - nff/io/ase_ax.py | 143 ++-- nff/io/ase_calcs.py | 14 +- nff/io/bias_calculators.py | 178 +--- nff/io/cprop.py | 106 +-- nff/io/gmm.py | 70 +- nff/io/mace.py | 101 +-- nff/io/openmm_calculators.py | 399 ++++----- nff/md/aims/calcs/basis.py | 698 ++++++--------- nff/md/ci/opt.py | 2 - nff/md/colvars.py | 399 +++++---- nff/md/nms.py | 476 ++++------- nff/md/npt.py | 2 +- nff/md/nvt_ax.py | 131 ++- nff/md/special_thermostats.py | 85 +- nff/md/tully/ab_dynamics.py | 160 ++-- nff/md/tully/ab_io.py | 375 +++----- nff/md/tully/io.py | 482 ++++------- nff/md/tully/step.py | 797 +++++------------- nff/md/tully_multiplicity/dynamics.py | 541 +++++------- nff/md/tully_multiplicity/io.py | 202 ++--- nff/md/tully_multiplicity/step.py | 266 ++---- nff/md/utils_ax.py | 105 +-- nff/md/zhu_nakamura/dynamics.py | 2 +- nff/nn/activations.py | 17 +- nff/nn/glue.py | 63 +- nff/nn/graphconv.py | 24 +- nff/nn/graphop.py | 27 +- nff/nn/models/conformers.py | 142 ++-- nff/nn/models/cp3d.py | 115 +-- nff/nn/models/dispersion_models.py | 176 ++-- nff/nn/models/graphconvintegration.py | 50 +- nff/nn/models/hybridgraph.py | 82 +- nff/nn/models/mace.py | 4 +- nff/nn/models/painn.py | 228 ++--- nff/nn/models/schnet.py | 86 +- nff/nn/models/schnet_features.py | 48 +- nff/nn/models/spooky.py | 287 +++---- nff/nn/models/spooky_fast.py | 189 ++--- nff/nn/models/spooky_net_source/functional.py | 12 +- .../spooky_net_source/modules/attention.py | 37 +- .../modules/bernstein_polynomials.py | 5 +- .../modules/d4_dispersion_energy.py | 112 +-- .../modules/electronic_embedding.py | 4 +- .../modules/electrostatic_energy.py | 49 +- .../exponential_bernstein_polynomials.py | 8 +- .../modules/exponential_gaussian_functions.py | 20 +- .../modules/gaussian_functions.py | 13 +- .../modules/interaction_module.py | 9 +- .../modules/local_interaction.py | 8 +- .../modules/nonlinear_electronic_embedding.py | 20 +- .../modules/nonlocal_interaction.py | 17 +- .../modules/nuclear_embedding.py | 34 +- .../spooky_net_source/modules/residual.py | 4 +- .../spooky_net_source/modules/residual_mlp.py | 4 +- .../modules/residual_stack.py | 9 +- .../modules/shifted_softplus.py | 8 +- .../modules/sinc_functions.py | 10 +- .../models/spooky_net_source/modules/swish.py | 8 +- .../modules/zbl_repulsion_energy.py | 8 +- nff/nn/models/spooky_net_source/spookynet.py | 104 +-- .../spooky_net_source/spookynet_calculator.py | 61 +- .../spooky_net_source/spookynet_ensemble.py | 36 +- nff/nn/modules/diabat.py | 2 +- nff/nn/modules/dimenet.py | 223 ++--- nff/nn/modules/painn.py | 571 +++++-------- nff/nn/modules/schnet.py | 3 +- nff/nn/modules/spooky.py | 4 +- nff/nn/modules/spooky_fast.py | 648 ++++++-------- nff/nn/modules/spooky_painn.py | 4 +- nff/nn/modules/torchmd_net.py | 154 +--- nff/nn/tensorgrad.py | 138 +-- nff/nn/utils.py | 41 +- nff/opt/algos.py | 40 +- nff/qm/integrals/overlap.py | 70 +- nff/reactive_tools/ev_following.py | 24 +- nff/reactive_tools/kabsch.py | 13 +- nff/reactive_tools/nms.py | 67 +- nff/reactive_tools/reactive_langevin.py | 54 +- nff/reactive_tools/utils.py | 37 +- nff/tests/conftest.py | 1 - nff/tests/dynamics_test.py | 178 ++-- nff/tests/test_ase.py | 7 +- nff/tests/test_data/test_stats.py | 5 +- nff/tests/test_excited_states_training.py | 4 - nff/tests/test_training.py | 15 +- nff/train/builders/trainer.py | 1 + nff/train/chgnet.py | 12 +- nff/train/evaluate.py | 4 +- nff/train/hooks/base_hook.py | 2 - nff/train/hooks/logging.py | 168 ++-- nff/train/hooks/scheduling.py | 8 +- nff/train/metrics.py | 49 +- nff/train/parallel.py | 106 +-- nff/train/trainer.py | 32 +- nff/train/transfer.py | 23 +- nff/train/uncertainty.py | 72 +- nff/utils/cellfilters.py | 12 +- nff/utils/confgen.py | 663 +++++++-------- nff/utils/confs.py | 138 +-- nff/utils/constants.py | 14 +- nff/utils/dispersion.py | 337 +++----- nff/utils/fast_attention.py | 12 +- nff/utils/functions.py | 180 ++-- nff/utils/geom.py | 247 +++--- nff/utils/misc.py | 2 +- nff/utils/scatter.py | 40 +- nff/utils/script_utils/loaders.py | 26 +- nff/utils/script_utils/parsers.py | 66 +- nff/utils/script_utils/setup.py | 5 +- nff/utils/tools.py | 16 +- nff/utils/xyz2mol.py | 359 ++++---- 126 files changed, 5134 insertions(+), 8846 deletions(-) diff --git a/nff/analysis/attribution.py b/nff/analysis/attribution.py index ef4f7475..8f7b2149 100644 --- a/nff/analysis/attribution.py +++ b/nff/analysis/attribution.py @@ -123,7 +123,7 @@ def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: offsets = -torch.floor(f + 0.5).view(M, 3) traj_unwrap = mol_xyz + torch.matmul(offsets, torch.Tensor(atomsobject.cell)) else: - sub = (intra_dmat > 0.5 * box_len).to(torch.float) * box_len + (intra_dmat > 0.5 * box_len).to(torch.float) * box_len add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len shift = torch.round(torch.divide(intra_dmat, box_len)) offsets = -shift diff --git a/nff/analysis/attribution_deprecate.py b/nff/analysis/attribution_deprecate.py index ef4f7475..8f7b2149 100644 --- a/nff/analysis/attribution_deprecate.py +++ b/nff/analysis/attribution_deprecate.py @@ -123,7 +123,7 @@ def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: offsets = -torch.floor(f + 0.5).view(M, 3) traj_unwrap = mol_xyz + torch.matmul(offsets, torch.Tensor(atomsobject.cell)) else: - sub = (intra_dmat > 0.5 * box_len).to(torch.float) * box_len + (intra_dmat > 0.5 * box_len).to(torch.float) * box_len add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len shift = torch.round(torch.divide(intra_dmat, box_len)) offsets = -shift diff --git a/nff/analysis/cp3d.py b/nff/analysis/cp3d.py index e81b206d..0b47427c 100644 --- a/nff/analysis/cp3d.py +++ b/nff/analysis/cp3d.py @@ -41,10 +41,8 @@ def get_pred_files(model_path): # should have the form _pred_.pickle # or pred_.pickle splits = ["train", "val", "test"] - starts_split = any([file.startswith(f"{split}_pred") - for split in splits]) - starts_pred = any([file.startswith(f"pred") - for split in splits]) + starts_split = any([file.startswith(f"{split}_pred") for split in splits]) + starts_pred = any([file.startswith(f"pred") for split in splits]) if (not starts_split) and (not starts_pred): continue if not file.endswith("pickle"): @@ -89,8 +87,8 @@ def get_att_type(dic): num_confs_list = [] for sub_dic in dic.values(): - num_learned_weights = sub_dic['learned_weights'].shape[0] - num_confs = sub_dic['boltz_weights'].shape[0] + num_learned_weights = sub_dic["learned_weights"].shape[0] + num_confs = sub_dic["boltz_weights"].shape[0] if num_learned_weights in num_weights_list: continue @@ -104,8 +102,7 @@ def get_att_type(dic): if len(num_confs_list) == 2: break - is_linear = ((num_weights_list[1] / num_weights_list[0]) - == (num_confs_list[1] / num_confs_list[0])) + is_linear = (num_weights_list[1] / num_weights_list[0]) == (num_confs_list[1] / num_confs_list[0]) if is_linear: num_heads = int(num_weights_list[0] / num_confs_list[0]) else: @@ -128,34 +125,30 @@ def annotate_confs(dic): """ num_heads, is_linear = get_att_type(dic) for sub_dic in dic.values(): - num_confs = sub_dic['boltz_weights'].shape[0] + num_confs = sub_dic["boltz_weights"].shape[0] if is_linear: split_sizes = [num_confs] * num_heads else: - split_sizes = [num_confs ** 2] * num_heads + split_sizes = [num_confs**2] * num_heads - learned = torch.Tensor(sub_dic['learned_weights']) + learned = torch.Tensor(sub_dic["learned_weights"]) head_weights = torch.split(learned, split_sizes) # if it's not linear, sum over conformer pairs to # get the average importance of each conformer if not is_linear: - head_weights = [i.reshape(num_confs, num_confs).sum(0) - for i in head_weights] + head_weights = [i.reshape(num_confs, num_confs).sum(0) for i in head_weights] # the conformers with the highest weight, according to each # head - max_weight_confs = [head_weight.argmax().item() - for head_weight in head_weights] + max_weight_confs = [head_weight.argmax().item() for head_weight in head_weights] # the highest conformer weight assigned by each head - max_weights = [head_weight.max() - for head_weight in head_weights] + max_weights = [head_weight.max() for head_weight in head_weights] # the head that gave out the highest weight max_weight_head = np.argmax(max_weights) # the conformer with the highest of all weights max_weight_conf = max_weight_confs[max_weight_head] - sub_dic["head_weights"] = {i: weights.tolist() for i, weights in - enumerate(head_weights)} + sub_dic["head_weights"] = {i: weights.tolist() for i, weights in enumerate(head_weights)} sub_dic["max_weight_conf"] = max_weight_conf sub_dic["max_weight_head"] = max_weight_head @@ -181,9 +174,7 @@ def choices_from_pickle(paths): return fps_choices -def funcs_for_external(external_fp_fn, - summary_path, - rd_path): +def funcs_for_external(external_fp_fn, summary_path, rd_path): """ If requesting an external method to get and compare fingerprints, then use this function to get a dictionary @@ -231,38 +222,24 @@ def sample_species(dic, classifier, max_samples): # if it's not a classifier, you'll just randomly sample # different species pairs and compare their fingerprints keys = list(dic.keys()) - samples = [np.random.choice(keys, max_samples), - np.random.choice(keys, max_samples)] + samples = [np.random.choice(keys, max_samples), np.random.choice(keys, max_samples)] sample_dics = {"random_mols": samples} else: # if it is a classifier, you'll want to compare species # that are both hits, both misses, or one hit and one miss - pos_keys = [smiles for smiles, sub_dic in dic.items() - if sub_dic['true'] == 1] - neg_keys = [smiles for smiles, sub_dic in dic.items() - if sub_dic['true'] == 0] - - intra_pos = [np.random.choice(pos_keys, max_samples), - np.random.choice(pos_keys, max_samples)] - intra_neg = [np.random.choice(neg_keys, max_samples), - np.random.choice(neg_keys, max_samples)] - inter = [np.random.choice(pos_keys, max_samples), - np.random.choice(neg_keys, max_samples)] - - sample_dics = {"intra_pos": intra_pos, - "intra_neg": intra_neg, - "inter": inter} + pos_keys = [smiles for smiles, sub_dic in dic.items() if sub_dic["true"] == 1] + neg_keys = [smiles for smiles, sub_dic in dic.items() if sub_dic["true"] == 0] + + intra_pos = [np.random.choice(pos_keys, max_samples), np.random.choice(pos_keys, max_samples)] + intra_neg = [np.random.choice(neg_keys, max_samples), np.random.choice(neg_keys, max_samples)] + inter = [np.random.choice(pos_keys, max_samples), np.random.choice(neg_keys, max_samples)] + + sample_dics = {"intra_pos": intra_pos, "intra_neg": intra_neg, "inter": inter} return sample_dics -def calc_sim(dic, - smiles_0, - smiles_1, - func, - pickle_dic, - conf_type, - fp_kwargs): +def calc_sim(dic, smiles_0, smiles_1, func, pickle_dic, conf_type, fp_kwargs): """ Calculate the similatiy between conformers of two different species. Args: @@ -294,7 +271,6 @@ def calc_sim(dic, fp_1_choices = sub_dic_1["conf_fps"] if conf_type == "att": - conf_0_idx = sub_dic_0["max_weight_conf"] conf_1_idx = sub_dic_1["max_weight_conf"] @@ -312,20 +288,14 @@ def calc_sim(dic, if isinstance(fp, Chem.rdchem.Mol): fps[j] = func(fp, **fp_kwargs) - sim = cos_sim(fps[0].reshape(1, -1), - fps[1].reshape(1, -1)).item() + sim = cos_sim(fps[0].reshape(1, -1), fps[1].reshape(1, -1)).item() return sim -def attention_sim(dic, - max_samples, - classifier, - seed, - external_fp_fn=None, - summary_path=None, - rd_path=None, - fp_kwargs=None): +def attention_sim( + dic, max_samples, classifier, seed, external_fp_fn=None, summary_path=None, rd_path=None, fp_kwargs=None +): """ Calculate similarities of the conformer fingerprints of different pairs of species. @@ -359,9 +329,7 @@ def attention_sim(dic, # get an external fingeprinting function if asked if external_fp_fn is not None: - pickle_dic, func = funcs_for_external(external_fp_fn, - summary_path, - rd_path) + pickle_dic, func = funcs_for_external(external_fp_fn, summary_path, rd_path) else: pickle_dic = None func = None @@ -373,21 +341,22 @@ def attention_sim(dic, # conformer similarities for key, samples in sample_dics.items(): - fp_dics[key] = {} - conf_types = ['att', 'random'] + conf_types = ["att", "random"] for conf_type in conf_types: fp_sims = [] for i in tqdm(range(len(samples[0]))): smiles_0 = samples[0][i] smiles_1 = samples[1][i] - sim = calc_sim(dic=dic, - smiles_0=smiles_0, - smiles_1=smiles_1, - func=func, - pickle_dic=pickle_dic, - conf_type=conf_type, - fp_kwargs=fp_kwargs) + sim = calc_sim( + dic=dic, + smiles_0=smiles_0, + smiles_1=smiles_1, + func=func, + pickle_dic=pickle_dic, + conf_type=conf_type, + fp_kwargs=fp_kwargs, + ) fp_sims.append(sim) fp_dics[key][conf_type] = np.array(fp_sims) @@ -409,10 +378,11 @@ def analyze_data(bare_data, analysis): """ for key, val in bare_data.items(): if isinstance(val, np.ndarray): - analysis[key] = {"mean": np.mean(val), - "std": np.std(val), - "std_of_mean": (np.std(val) - / val.shape[0] ** 0.5)} + analysis[key] = { + "mean": np.mean(val), + "std": np.std(val), + "std_of_mean": (np.std(val) / val.shape[0] ** 0.5), + } else: if key not in analysis: analysis[key] = {} @@ -433,8 +403,8 @@ def report_delta(bare_dic): fprint("+/- indicates standard deviation of the mean") # attention and random differences in similarity - delta_att = dic['intra_pos']['att'] - dic['inter']['att'] - delta_rand = dic['intra_pos']['random'] - dic['inter']['random'] + delta_att = dic["intra_pos"]["att"] - dic["inter"]["att"] + delta_rand = dic["intra_pos"]["random"] - dic["inter"]["random"] # compute mean for attention delta_att_mean = np.mean(delta_att) @@ -449,24 +419,17 @@ def report_delta(bare_dic): # a measure of how much attention is learning delta_delta_mean = delta_att_mean - delta_rand_mean - delta_delta_std = ((np.var(delta_att) + np.var(delta_rand)) ** 0.5 - / (len(delta_att)) ** 0.5) + delta_delta_std = (np.var(delta_att) + np.var(delta_rand)) ** 0.5 / (len(delta_att)) ** 0.5 fprint("Delta att: %.4f +/- %.4f" % (delta_att_mean, delta_att_std)) fprint("Delta rand: %.4f +/- %.4f" % (delta_rand_mean, delta_rand_std)) - fprint("Delta delta: %.4f +/- %.4f" % - (delta_delta_mean, delta_delta_std)) + fprint("Delta delta: %.4f +/- %.4f" % (delta_delta_mean, delta_delta_std)) fprint("\n") -def conf_sims_from_files(model_path, - max_samples, - classifier, - seed, - external_fp_fn=None, - summary_path=None, - rd_path=None, - fp_kwargs=None): +def conf_sims_from_files( + model_path, max_samples, classifier, seed, external_fp_fn=None, summary_path=None, rd_path=None, fp_kwargs=None +): """ Get similarity among species according to predictions of different models, given a folder with all of the prediction pickles. @@ -504,14 +467,16 @@ def conf_sims_from_files(model_path, for key in tqdm(pred): dic = pred[key] annotate_confs(dic) - fp_dics = attention_sim(dic=dic, - max_samples=max_samples, - classifier=classifier, - seed=seed, - external_fp_fn=external_fp_fn, - summary_path=summary_path, - rd_path=rd_path, - fp_kwargs=fp_kwargs) + fp_dics = attention_sim( + dic=dic, + max_samples=max_samples, + classifier=classifier, + seed=seed, + external_fp_fn=external_fp_fn, + summary_path=summary_path, + rd_path=rd_path, + fp_kwargs=fp_kwargs, + ) bare_data[key] = fp_dics # analyze the bare data @@ -524,7 +489,7 @@ def conf_sims_from_files(model_path, return analysis, bare_data -def get_scores(path, avg_metrics=['auc', 'prc-auc']): +def get_scores(path, avg_metrics=["auc", "prc-auc"]): """ Load pickle files that contain predictions and actual values, using models evaluated by different validation metrics, and use the predictions @@ -538,8 +503,7 @@ def get_scores(path, avg_metrics=['auc', 'prc-auc']): used, the validation metric used to get the model, and the PRC and AUC scores. """ - files = [i for i in os.listdir(path) if i.endswith(".pickle") - and i.startswith("pred")] + files = [i for i in os.listdir(path) if i.endswith(".pickle") and i.startswith("pred")] if not files: return scores = [] @@ -549,38 +513,27 @@ def get_scores(path, avg_metrics=['auc', 'prc-auc']): split = file.split(".pickle")[0].split("_")[-1] from_metric = file.split("pred_")[-1].split(f"_{split}")[0] - pred = [sub_dic['pred'] for sub_dic in dic.values()] - true = [sub_dic['true'] for sub_dic in dic.values()] + pred = [sub_dic["pred"] for sub_dic in dic.values()] + true = [sub_dic["true"] for sub_dic in dic.values()] # then it's not a binary classification problem if any([i not in [0, 1] for i in true]): return auc_score = roc_auc_score(y_true=true, y_score=pred) - precision, recall, thresholds = precision_recall_curve( - y_true=true, probas_pred=pred) + precision, recall, thresholds = precision_recall_curve(y_true=true, probas_pred=pred) prc_score = auc(recall, precision) - scores.append({"split": split, - "from_metric": from_metric, - "auc": auc_score, - "prc": prc_score}) + scores.append({"split": split, "from_metric": from_metric, "auc": auc_score, "prc": prc_score}) if avg_metrics is None: avg_metrics = [score["from_metric"] for score in scores] - all_auc = [score["auc"] for score in scores if score['from_metric'] - in avg_metrics] - all_prc = [score["prc"] for score in scores if score['from_metric'] - in avg_metrics] - avg_auc = {"mean": np.mean(all_auc), - "std": np.std(all_auc)} - avg_prc = {"mean": np.mean(all_prc), - "std": np.std(all_prc)} - scores.append({"from_metric": "average", - "auc": avg_auc, - "prc": avg_prc, - "avg_metrics": avg_metrics}) + all_auc = [score["auc"] for score in scores if score["from_metric"] in avg_metrics] + all_prc = [score["prc"] for score in scores if score["from_metric"] in avg_metrics] + avg_auc = {"mean": np.mean(all_auc), "std": np.std(all_auc)} + avg_prc = {"mean": np.mean(all_prc), "std": np.std(all_prc)} + scores.append({"from_metric": "average", "auc": avg_auc, "prc": avg_prc, "avg_metrics": avg_metrics}) save_path = os.path.join(path, "scores_from_metrics.json") with open(save_path, "w") as f: @@ -589,7 +542,7 @@ def get_scores(path, avg_metrics=['auc', 'prc-auc']): return scores -def recursive_scoring(base_path, avg_metrics=['auc', 'prc-auc']): +def recursive_scoring(base_path, avg_metrics=["auc", "prc-auc"]): """ Recursively search in a base directory to find sub-folders that have pickle files that can be used for scoring. Apply `get_scores` @@ -602,8 +555,7 @@ def recursive_scoring(base_path, avg_metrics=['auc', 'prc-auc']): None """ - files = [i for i in os.listdir(base_path) if i.endswith(".pickle") - and i.startswith("pred")] + files = [i for i in os.listdir(base_path) if i.endswith(".pickle") and i.startswith("pred")] if files: print(f"Analyzing {base_path}") get_scores(base_path, avg_metrics) @@ -612,15 +564,13 @@ def recursive_scoring(base_path, avg_metrics=['auc', 'prc-auc']): direc_path = os.path.join(base_path, direc) if not os.path.isdir(direc_path): continue - files = [i for i in os.listdir(direc_path) if i.endswith(".pickle") - and i.startswith("pred")] + files = [i for i in os.listdir(direc_path) if i.endswith(".pickle") and i.startswith("pred")] if files: print(f"Analyzing {direc_path}") get_scores(direc_path, avg_metrics) continue - folders = [os.path.join(direc_path, i) for i in - os.listdir(direc_path)] + folders = [os.path.join(direc_path, i) for i in os.listdir(direc_path)] folders = [i for i in folders if os.path.isdir(i)] if not folders: diff --git a/nff/analysis/loss_plot.py b/nff/analysis/loss_plot.py index 4340ff0b..e46c82d4 100644 --- a/nff/analysis/loss_plot.py +++ b/nff/analysis/loss_plot.py @@ -4,8 +4,8 @@ from . import mpl_settings -def plot_loss(energy_history, forces_history, figname, train_key='train', val_key='val'): - """ Plot the loss history of the model. +def plot_loss(energy_history, forces_history, figname, train_key="train", val_key="val"): + """Plot the loss history of the model. Args: energy_history (dict): energy loss history of the model for training and validation forces_history (dict): forces loss history of the model for training and validation @@ -16,17 +16,17 @@ def plot_loss(energy_history, forces_history, figname, train_key='train', val_ke """ epochs = np.arange(1, len(energy_history[train_key]) + 1) fig, ax_fig = plt.subplots(1, 2, figsize=(12, 6), dpi=mpl_settings.DPI) - ax_fig[0].semilogy(epochs, energy_history[train_key], label='train', color=mpl_settings.colors[1]) - ax_fig[0].semilogy(epochs, energy_history[val_key], label='val', color=mpl_settings.colors[2]) + ax_fig[0].semilogy(epochs, energy_history[train_key], label="train", color=mpl_settings.colors[1]) + ax_fig[0].semilogy(epochs, energy_history[val_key], label="val", color=mpl_settings.colors[2]) ax_fig[0].legend() - ax_fig[0].set_xlabel('Epoch') - ax_fig[0].set_ylabel('Loss') + ax_fig[0].set_xlabel("Epoch") + ax_fig[0].set_ylabel("Loss") - ax_fig[1].semilogy(epochs, forces_history[train_key], label='train', color=mpl_settings.colors[1]) - ax_fig[1].semilogy(epochs, forces_history[val_key], label='val', color=mpl_settings.colors[2]) + ax_fig[1].semilogy(epochs, forces_history[train_key], label="train", color=mpl_settings.colors[1]) + ax_fig[1].semilogy(epochs, forces_history[val_key], label="val", color=mpl_settings.colors[2]) ax_fig[1].legend() - ax_fig[1].set_xlabel('Epoch') - ax_fig[1].set_ylabel('Loss') + ax_fig[1].set_xlabel("Epoch") + ax_fig[1].set_ylabel("Loss") plt.tight_layout() plt.savefig(f"{figname}.png") diff --git a/nff/analysis/mpl_settings.py b/nff/analysis/mpl_settings.py index 960dde95..cd21fbdc 100644 --- a/nff/analysis/mpl_settings.py +++ b/nff/analysis/mpl_settings.py @@ -65,7 +65,7 @@ def hex_to_rgb(value: str) -> tuple: value = value.strip("#") # removes hash symbol if present lv = len(value) - return tuple(int(value[i: i + lv // 3], 16) for i in range(0, lv, lv // 3)) + return tuple(int(value[i : i + lv // 3], 16) for i in range(0, lv, lv // 3)) def rgb_to_dec(value: list): @@ -84,9 +84,7 @@ def rgb_to_dec(value: list): return [v / 256 for v in value] -def get_continuous_cmap( - hex_list: List[str], float_list: List[float] = None -) -> matplotlib.colors.Colormap: +def get_continuous_cmap(hex_list: List[str], float_list: List[float] = None) -> matplotlib.colors.Colormap: """ Creates and returns a color map that can be used in heat map figures. If float_list is not provided, colour map graduates linearly between each color in hex_list. @@ -109,10 +107,7 @@ def get_continuous_cmap( cdict = dict() for num, col in enumerate(["red", "green", "blue"]): - col_list = [ - [float_list[i], rgb_list[i][num], rgb_list[i][num]] - for i in range(len(float_list)) - ] + col_list = [[float_list[i], rgb_list[i][num], rgb_list[i][num]] for i in range(len(float_list))] cdict[col] = col_list cmp = matplotlib.colors.LinearSegmentedColormap("j_cmap", segmentdata=cdict, N=256) return cmp diff --git a/nff/analysis/parity_plot.py b/nff/analysis/parity_plot.py index 7688b073..380af4d5 100644 --- a/nff/analysis/parity_plot.py +++ b/nff/analysis/parity_plot.py @@ -146,7 +146,7 @@ def plot_err_var( idx = np.arange(len(var)) np.random.seed(2) sample_idx = np.random.choice(idx, size=int(len(idx) * sample_frac), replace=False) - n_samples = len(sample_idx) + len(sample_idx) var = var.flatten()[sample_idx] err = err.flatten()[sample_idx] @@ -164,11 +164,7 @@ def plot_err_var( x = pd.Series(var) y = pd.Series(err) - kernel = gaussian_kde( - np.vstack( - [x.sample(n=len(x), random_state=2), y.sample(n=len(y), random_state=2)] - ) - ) + kernel = gaussian_kde(np.vstack([x.sample(n=len(x), random_state=2), y.sample(n=len(y), random_state=2)])) c = kernel(np.vstack([x, y])) hb = ax.scatter( var, diff --git a/nff/analysis/roce.py b/nff/analysis/roce.py index 0a9062aa..152cd03c 100644 --- a/nff/analysis/roce.py +++ b/nff/analysis/roce.py @@ -25,17 +25,17 @@ DELTA = 0.2 # keys for specifying text attributes -TEXT_KEYS = ['fontsize'] +TEXT_KEYS = ["fontsize"] # use the same defaults as in iPython notebooks # to avoid an unhappy surprise after testing your plots # in a notebook -rcParams['figure.figsize'] = (6.0, 4.0) -rcParams['font.size'] = 10 -rcParams['savefig.dpi'] = 72 -rcParams['figure.subplot.bottom'] = 0.125 +rcParams["figure.figsize"] = (6.0, 4.0) +rcParams["font.size"] = 10 +rcParams["savefig.dpi"] = 72 +rcParams["figure.subplot.bottom"] = 0.125 def compute_roce(fpr, preds, real): @@ -213,9 +213,7 @@ def remove_overlap(scores, height): # the model that are ordered before this one for other_val in vals: # calculate how much you have to change this value - change = get_change(this_val=new_vals[model, i], - other_val=other_val, - height=height) + change = get_change(this_val=new_vals[model, i], other_val=other_val, height=height) # if you've changed it at all after comparing # to another value, break if abs(change) > eps: @@ -231,9 +229,7 @@ def remove_overlap(scores, height): return new_vals -def parse_csv(pred_path, - true_path, - target): +def parse_csv(pred_path, true_path, target): """ Get the list of predicted and real values from a csv file. Running `predict.sh` on the results of a ChemProp calculation @@ -263,9 +259,7 @@ def parse_csv(pred_path, return [pred], [real] -def parse_json(pred_path, - target, - split): +def parse_json(pred_path, target, split): """ Get the list of predicted and real values from a JSON file. Running `predict.sh` on the results of a ChemProp calculation @@ -297,12 +291,11 @@ def parse_json(pred_path, values. """ - with open(pred_path, 'r') as f_open: + with open(pred_path, "r") as f_open: pred_dic = json.load(f_open) # int keys for different seeds - int_keys = list([i for i in pred_dic.keys() - if i.isdigit()]) + int_keys = list([i for i in pred_dic.keys() if i.isdigit()]) # get the predictions of each seed preds = [] @@ -336,16 +329,13 @@ def parse_pickle(path): with open(path, "rb") as f_open: dic = pickle.load(f_open) - real = np.array([sub_dic['true'] for sub_dic in dic.values()]) - pred = np.array([sub_dic['pred'] for sub_dic in dic.values()]) + real = np.array([sub_dic["true"] for sub_dic in dic.values()]) + pred = np.array([sub_dic["pred"] for sub_dic in dic.values()]) return [pred], [real] -def get_all_preds(true_path, - pred_paths, - target, - split): +def get_all_preds(true_path, pred_paths, target, split): """ Get all predictions from various different versions of a model (e.g. different seeds of a ChemProp model). @@ -368,14 +358,10 @@ def get_all_preds(true_path, for path in pred_paths: if path.endswith("csv"): - these_preds, these_real = parse_csv(pred_path=path, - true_path=true_path, - target=target) + these_preds, these_real = parse_csv(pred_path=path, true_path=true_path, target=target) elif path.endswith("json"): - these_preds, these_real = parse_json(pred_path=path, - target=target, - split=split) + these_preds, these_real = parse_json(pred_path=path, target=target, split=split) elif path.endswith("pickle"): these_preds, these_real = parse_pickle(path) else: @@ -390,11 +376,7 @@ def get_all_preds(true_path, return preds, reals -def get_mean_roce(true_path, - pred_paths, - target, - split, - fpr_vals): +def get_mean_roce(true_path, pred_paths, target, split, fpr_vals): """ Get mean ROCE scores from various different versions of a model (e.g. different seeds of a ChemProp model). @@ -410,14 +392,10 @@ def get_mean_roce(true_path, averaged over the different versions of the model. """ - all_preds, all_reals = get_all_preds(true_path=true_path, - pred_paths=pred_paths, - target=target, - split=split) + all_preds, all_reals = get_all_preds(true_path=true_path, pred_paths=pred_paths, target=target, split=split) roces = [] for pred, real in zip(all_preds, all_reals): - roce = np.array([compute_roce(fpr, pred, real) - for fpr in fpr_vals]) + roce = np.array([compute_roce(fpr, pred, real) for fpr in fpr_vals]) roces.append(roce) mean_roce = np.stack(roces).mean(axis=0) @@ -446,11 +424,8 @@ def add_model_roces(plot_dic): for i, model_dic in enumerate(model_dics): mean_roce = get_mean_roce( - true_path=true_path, - pred_paths=model_dic["pred_paths"], - target=target, - split=split, - fpr_vals=fpr_vals) + true_path=true_path, pred_paths=model_dic["pred_paths"], target=target, split=split, fpr_vals=fpr_vals + ) model_dics[i]["roce"] = mean_roce return plot_dic @@ -490,7 +465,7 @@ def vals_for_plot(plot_dic): roce_no_overlap = remove_overlap(roce_scores, bar_height) # get the default cycle colors - fpr_colors = plt.rcParams['axes.prop_cycle'].by_key()['color'] + fpr_colors = plt.rcParams["axes.prop_cycle"].by_key()["color"] # set the labels equal to the plot names, but replace every space # with a new line to avoid overlapping labels @@ -500,11 +475,7 @@ def vals_for_plot(plot_dic): return roce_scores, roce_no_overlap, fpr_colors, labels, bar_height -def base_plot(roce_scores, - roce_no_overlap, - labels, - fpr_colors, - bar_height): +def base_plot(roce_scores, roce_no_overlap, labels, fpr_colors, bar_height): """ Make the basic ROCE plot without any extra features, label sizes, axis limits, etc. @@ -541,7 +512,6 @@ def base_plot(roce_scores, # go through each value of fpr for j in range(roce_no_overlap.shape[1]): - # start is where the slice starts start = -0.4 @@ -561,23 +531,11 @@ def base_plot(roce_scores, x_range = np.arange(start, end, interval / 100) y_vals = np.array([new_perform] * len(x_range)) - plt.plot(x_range, y_vals, - '-', - color=fpr_colors[j], - linewidth=3, - label='_nolegend_') + plt.plot(x_range, y_vals, "-", color=fpr_colors[j], linewidth=3, label="_nolegend_") # add black lines at +/- bar_height / 2 - plt.plot(x_range, (y_vals - bar_height / 2), - '-', - color='black', - linewidth=1, - label='_nolegend_') - plt.plot(x_range, (y_vals + bar_height / 2), - '-', - color='black', - linewidth=1, - label='_nolegend_') + plt.plot(x_range, (y_vals - bar_height / 2), "-", color="black", linewidth=1, label="_nolegend_") + plt.plot(x_range, (y_vals + bar_height / 2), "-", color="black", linewidth=1, label="_nolegend_") # add `DELTA` to `start` as you continue left to # right in the plot @@ -586,9 +544,7 @@ def base_plot(roce_scores, return axis -def set_plot_ylim(max_scale, - roce_no_overlap, - bar_height): +def set_plot_ylim(max_scale, roce_no_overlap, bar_height): """ Set the y limits for the plot. Args: @@ -605,15 +561,13 @@ def set_plot_ylim(max_scale, max_score = roce_no_overlap.max() min_scale = max_scale if (min_score < 0) else (1 / max_scale) - ylim = [min([min_score * min_scale, 0]) - - bar_height, max_score * max_scale] + ylim = [min([min_score * min_scale, 0]) - bar_height, max_score * max_scale] plt.ylim(ylim) return ylim -def set_tick_sizes(x_axis_dic, - y_axis_dic): +def set_tick_sizes(x_axis_dic, y_axis_dic): """ Set plot tick sizes. Args: @@ -625,24 +579,20 @@ def set_tick_sizes(x_axis_dic, None """ - # x-axis tick font size + # x-axis tick font size if "ticks" in x_axis_dic: tick_dic = x_axis_dic["ticks"] if "fontsize" in tick_dic: - plt.rc('xtick', labelsize=tick_dic["fontsize"]) + plt.rc("xtick", labelsize=tick_dic["fontsize"]) # y-axis tick font size if "ticks" in y_axis_dic: tick_dic = y_axis_dic["ticks"] if "fontsize" in tick_dic: - plt.rc('ytick', labelsize=tick_dic["fontsize"]) + plt.rc("ytick", labelsize=tick_dic["fontsize"]) -def label_plot(fpr_vals, - legend_dic, - x_axis_dic, - y_axis_dic, - axis): +def label_plot(fpr_vals, legend_dic, x_axis_dic, y_axis_dic, axis): """ Add various labels to the plot. Args: @@ -661,37 +611,30 @@ def label_plot(fpr_vals, # legend fpr_pct = [(use_val * 100) for use_val in fpr_vals] - fpr_str = [("%.1f" % val) if (val < 1) else ("%d" % val) - for val in fpr_pct] + fpr_str = [("%.1f" % val) if (val < 1) else ("%d" % val) for val in fpr_pct] - kwargs = {key: legend_dic[key] for key in - [*TEXT_KEYS, 'loc', 'ncol'] if key in legend_dic} + kwargs = {key: legend_dic[key] for key in [*TEXT_KEYS, "loc", "ncol"] if key in legend_dic} if legend_dic.get("use_legend", True): - plt.legend([f'{string}%' for string in fpr_str], - **kwargs) + plt.legend([f"{string}%" for string in fpr_str], **kwargs) # y-axis font size and label ylabel_kwargs = {} - if 'labels' in y_axis_dic: - label_dic = y_axis_dic['labels'] - if 'fontsize' in label_dic: + if "labels" in y_axis_dic: + label_dic = y_axis_dic["labels"] + if "fontsize" in label_dic: ylabel_kwargs["fontsize"] = label_dic["fontsize"] plt.ylabel("ROCE", **ylabel_kwargs) # x-axis label font sizes - if 'labels' in x_axis_dic: - label_dic = x_axis_dic['labels'] - if 'fontsize' in label_dic: + if "labels" in x_axis_dic: + label_dic = x_axis_dic["labels"] + if "fontsize" in label_dic: for label in axis.get_xticklabels(): - label.set_fontsize(label_dic['fontsize']) + label.set_fontsize(label_dic["fontsize"]) -def decorate_plot(labels, - ylim, - axis, - dividers=None, - texts=None): +def decorate_plot(labels, ylim, axis, dividers=None, texts=None): """ Add various "decorations" to the plot - such as dividers between different model categories, text on the plot, etc. @@ -710,12 +653,7 @@ def decorate_plot(labels, max_x = len(labels) x_range = np.arange(-0.5, max_x, max_x / 100) - plt.plot(x_range, [0] * len(x_range), - '-', - color='black', - linewidth=1, - label='_nolegend_', - zorder=-10) + plt.plot(x_range, [0] * len(x_range), "-", color="black", linewidth=1, label="_nolegend_", zorder=-10) # add any dividers if dividers is not None: @@ -723,25 +661,18 @@ def decorate_plot(labels, for divider in dividers: loc = labels.index(divider.replace(" ", "\n")) + 2.5 * DELTA locs.append(loc) - plt.vlines(locs, - ylim[0], - ylim[1], - linestyles='--', - color='black') + plt.vlines(locs, ylim[0], ylim[1], linestyles="--", color="black") # add any text if texts is not None: for item in texts: - text = item['text'] - pos = item['position'] - kwargs = {key: item[key] for key in TEXT_KEYS - if key in item} + text = item["text"] + pos = item["position"] + kwargs = {key: item[key] for key in TEXT_KEYS if key in item} - plt.text(*pos, text, - horizontalalignment='center', - verticalalignment='center', - transform=axis.transAxes, - **kwargs) + plt.text( + *pos, text, horizontalalignment="center", verticalalignment="center", transform=axis.transAxes, **kwargs + ) def save_plot(save_path): @@ -783,41 +714,39 @@ def plot(plot_dic): plot_info = plot_dic["plot_info"] # get ROCE scores and other values needed for the plot - (roce_scores, roce_no_overlap, - fpr_colors, labels, bar_height) = vals_for_plot(plot_dic=plot_dic) + (roce_scores, roce_no_overlap, fpr_colors, labels, bar_height) = vals_for_plot(plot_dic=plot_dic) # set tick sizes - this has to come before making the plot x_axis_dic = plot_info.get("x_axis", {}) y_axis_dic = plot_info.get("y_axis", {}) - set_tick_sizes(x_axis_dic=x_axis_dic, - y_axis_dic=y_axis_dic) + set_tick_sizes(x_axis_dic=x_axis_dic, y_axis_dic=y_axis_dic) # make the base plot - axis = base_plot(roce_scores=roce_scores, - roce_no_overlap=roce_no_overlap, - labels=labels, - fpr_colors=fpr_colors, - bar_height=bar_height) + axis = base_plot( + roce_scores=roce_scores, + roce_no_overlap=roce_no_overlap, + labels=labels, + fpr_colors=fpr_colors, + bar_height=bar_height, + ) # add labels - label_plot(fpr_vals=base_info["fpr_vals"], - legend_dic=plot_info.get("legend", {}), - x_axis_dic=x_axis_dic, - y_axis_dic=y_axis_dic, - axis=axis) + label_plot( + fpr_vals=base_info["fpr_vals"], + legend_dic=plot_info.get("legend", {}), + x_axis_dic=x_axis_dic, + y_axis_dic=y_axis_dic, + axis=axis, + ) # set the y limits - ylim = set_plot_ylim(max_scale=plot_info.get("max_height_scale", 1.2), - roce_no_overlap=roce_no_overlap, - bar_height=bar_height) + ylim = set_plot_ylim( + max_scale=plot_info.get("max_height_scale", 1.2), roce_no_overlap=roce_no_overlap, bar_height=bar_height + ) # add decorations - decorate_plot(labels=labels, - ylim=ylim, - axis=axis, - dividers=plot_info.get("dividers"), - texts=plot_info.get("texts")) + decorate_plot(labels=labels, ylim=ylim, axis=axis, dividers=plot_info.get("dividers"), texts=plot_info.get("texts")) # save and show save_plot(save_path=plot_info.get("save_path")) @@ -828,9 +757,7 @@ def plot(plot_dic): return roce_scores, labels, fpr_vals -def get_perform_info(fprs, - roce_scores, - labels): +def get_perform_info(fprs, roce_scores, labels): """ Summarize the information about model performances so it can be saved in a JSON. @@ -857,13 +784,12 @@ def get_perform_info(fprs, sort_scores = scores[sort_idx].tolist() sort_labels = np.array(labels)[sort_idx].tolist() - score_list = [{"rank": i + 1, - "model": sort_labels[i].replace("\n", " "), - "roce": score} - for i, score in enumerate(sort_scores)] + score_list = [ + {"rank": i + 1, "model": sort_labels[i].replace("\n", " "), "roce": score} + for i, score in enumerate(sort_scores) + ] - this_info = {"fpr": fpr, - "scores": score_list} + this_info = {"fpr": fpr, "scores": score_list} info.append(this_info) return info @@ -883,9 +809,7 @@ def plot_all(plot_dics): for plot_dic in plot_dics: roce_scores, labels, fprs = plot(plot_dic) - info = get_perform_info(fprs=fprs, - roce_scores=roce_scores, - labels=labels) + info = get_perform_info(fprs=fprs, roce_scores=roce_scores, labels=labels) roces.append(info) return roces @@ -897,13 +821,14 @@ def main(): file with plot information. """ parser = argparse.ArgumentParser() - parser.add_argument('--config_file', type=str, - help=("Path to JSON file with plot information. " - "Please see config/plot_info.json for an " - "example.")) - parser.add_argument('--save_path', type=str, - help=("Path to JSON file with saved ROCE scores."), - default='roce.json') + parser.add_argument( + "--config_file", + type=str, + help=("Path to JSON file with plot information. " "Please see config/plot_info.json for an " "example."), + ) + parser.add_argument( + "--save_path", type=str, help=("Path to JSON file with saved ROCE scores."), default="roce.json" + ) args = parser.parse_args() config_file = args.config_file @@ -912,7 +837,7 @@ def main(): roces = plot_all(plot_dics=plot_dics) save_path = args.save_path - with open(save_path, 'w') as f_open: + with open(save_path, "w") as f_open: json.dump(roces, f_open, indent=4, sort_keys=True) print(f"Saved ROCE score information to {save_path}") diff --git a/nff/data/dataset.py b/nff/data/dataset.py index 7bd20958..b641fb4f 100644 --- a/nff/data/dataset.py +++ b/nff/data/dataset.py @@ -81,12 +81,7 @@ class Dataset(TorchDataset): """ def __init__( - self, - props: dict, - units: str = "kcal/mol", - check_props: bool = True, - do_copy: bool = True, - device: str = "cuda" + self, props: dict, units: str = "kcal/mol", check_props: bool = True, do_copy: bool = True, device: str = "cuda" ) -> None: """Constructor for Dataset class. @@ -447,7 +442,7 @@ def unwrap_xyz(self, mol_dic: dict) -> None: numbers=self.props["nxyz"][i][:, 0], cell=self.props["cell"][i], pbc=True, - device=self.device + device=self.device, ) # recontruct coordinates based on subgraphs index @@ -581,7 +576,7 @@ def gen_bond_prior(self, cutoff: float, bond_len_dict: dict | None = None) -> No "cutoff": cutoff, "cell": cell, "nbr_torch": False, - "device": self.device + "device": self.device, } # the coordinates have been unwrapped and try to results offsets diff --git a/nff/data/features/graph.py b/nff/data/features/graph.py index 2b2e701c..117d3141 100644 --- a/nff/data/features/graph.py +++ b/nff/data/features/graph.py @@ -20,44 +20,26 @@ # default feature types and options -BOND_FEAT_TYPES = ["bond_type", - "conjugated", - "in_ring", - "stereo", - "in_ring_size"] - -ATOM_FEAT_TYPES = ["atom_type", - "num_bonds", - "formal_charge", - "chirality", - "num_bonded_h", - "hybrid", - "aromaticity", - "mass"] - -CHIRAL_OPTIONS = ["chi_unspecified", - "chi_tetrahedral_cw", - "chi_tetrahedral_ccw", - "chi_other"] - -HYBRID_OPTIONS = ["s", - "sp", - "sp2", - "sp3", - "sp3d", - "sp3d2"] - -BOND_OPTIONS = ["single", - "double", - "triple", - "aromatic"] - -STEREO_OPTIONS = ["stereonone", - "stereoany", - "stereoz", - "stereoe", - "stereocis", - "stereotrans"] +BOND_FEAT_TYPES = ["bond_type", "conjugated", "in_ring", "stereo", "in_ring_size"] + +ATOM_FEAT_TYPES = [ + "atom_type", + "num_bonds", + "formal_charge", + "chirality", + "num_bonded_h", + "hybrid", + "aromaticity", + "mass", +] + +CHIRAL_OPTIONS = ["chi_unspecified", "chi_tetrahedral_cw", "chi_tetrahedral_ccw", "chi_other"] + +HYBRID_OPTIONS = ["s", "sp", "sp2", "sp3", "sp3d", "sp3d2"] + +BOND_OPTIONS = ["single", "double", "triple", "aromatic"] + +STEREO_OPTIONS = ["stereonone", "stereoany", "stereoz", "stereoe", "stereocis", "stereotrans"] AT_NUM = list(range(1, 100)) FORMAL_CHARGES = [-2, -1, 0, 1, 2] @@ -68,46 +50,31 @@ # dictionary with feature names, their options, type, # and size when stored as a vector -FEAT_DIC = {"bond_type": {"options": BOND_OPTIONS, - "num": len(BOND_OPTIONS) + 1}, - "conjugated": {"options": [bool], - "num": 1}, - "in_ring": {"options": [bool], - "num": 1}, - "stereo": {"options": STEREO_OPTIONS, - "num": len(STEREO_OPTIONS) + 1}, - "in_ring_size": {"options": RING_SIZE, - "num": len(RING_SIZE) + 1}, - "atom_type": {"options": AT_NUM, - "num": len(AT_NUM) + 1}, - "num_bonds": {"options": BONDS, - "num": len(BONDS) + 1}, - "formal_charge": {"options": FORMAL_CHARGES, - "num": len(FORMAL_CHARGES) + 1}, - "chirality": {"options": CHIRAL_OPTIONS, - "num": len(CHIRAL_OPTIONS) + 1}, - "num_bonded_h": {"options": NUM_H, - "num": len(NUM_H) + 1}, - "hybrid": {"options": HYBRID_OPTIONS, - "num": len(HYBRID_OPTIONS) + 1}, - "aromaticity": {"options": [bool], - "num": 1}, - "mass": {"options": [float], - "num": 1}} - -META_DATA = {"bond_features": BOND_FEAT_TYPES, - "atom_features": ATOM_FEAT_TYPES, - "details": FEAT_DIC} +FEAT_DIC = { + "bond_type": {"options": BOND_OPTIONS, "num": len(BOND_OPTIONS) + 1}, + "conjugated": {"options": [bool], "num": 1}, + "in_ring": {"options": [bool], "num": 1}, + "stereo": {"options": STEREO_OPTIONS, "num": len(STEREO_OPTIONS) + 1}, + "in_ring_size": {"options": RING_SIZE, "num": len(RING_SIZE) + 1}, + "atom_type": {"options": AT_NUM, "num": len(AT_NUM) + 1}, + "num_bonds": {"options": BONDS, "num": len(BONDS) + 1}, + "formal_charge": {"options": FORMAL_CHARGES, "num": len(FORMAL_CHARGES) + 1}, + "chirality": {"options": CHIRAL_OPTIONS, "num": len(CHIRAL_OPTIONS) + 1}, + "num_bonded_h": {"options": NUM_H, "num": len(NUM_H) + 1}, + "hybrid": {"options": HYBRID_OPTIONS, "num": len(HYBRID_OPTIONS) + 1}, + "aromaticity": {"options": [bool], "num": 1}, + "mass": {"options": [float], "num": 1}, +} + +META_DATA = {"bond_features": BOND_FEAT_TYPES, "atom_features": ATOM_FEAT_TYPES, "details": FEAT_DIC} # default number of atom features -NUM_ATOM_FEATS = sum([val["num"] for key, val in FEAT_DIC.items() - if key in ATOM_FEAT_TYPES]) +NUM_ATOM_FEATS = sum([val["num"] for key, val in FEAT_DIC.items() if key in ATOM_FEAT_TYPES]) # default number of bond features -NUM_BOND_FEATS = sum([val["num"] for key, val in FEAT_DIC.items() - if key in BOND_FEAT_TYPES]) +NUM_BOND_FEATS = sum([val["num"] for key, val in FEAT_DIC.items() if key in BOND_FEAT_TYPES]) def remove_bad_idx(dataset, smiles_list, bad_idx, verbose=True): @@ -125,8 +92,7 @@ def remove_bad_idx(dataset, smiles_list, bad_idx, verbose=True): bad_idx = sorted(list(set(bad_idx))) new_props = {} for key, values in dataset.props.items(): - new_props[key] = [val for i, val in enumerate( - values) if i not in bad_idx] + new_props[key] = [val for i, val in enumerate(values) if i not in bad_idx] if not new_props[key]: continue if type(values) is torch.Tensor: @@ -139,9 +105,7 @@ def remove_bad_idx(dataset, smiles_list, bad_idx, verbose=True): conv_pct = good_len / total_len * 100 if verbose: - print(("Converted %d of %d " - "species (%.2f%%)" % ( - good_len, total_len, conv_pct))) + print(("Converted %d of %d " "species (%.2f%%)" % (good_len, total_len, conv_pct))) def smiles_from_smiles(smiles): @@ -197,7 +161,6 @@ def get_undirected_bonds(mol): bonds = mol.GetBonds() for bond in bonds: - start = bond.GetBeginAtomIdx() end = bond.GetEndAtomIdx() lower = min((start, end)) @@ -224,7 +187,6 @@ def undirected_bond_atoms(mol): bonds = mol.GetBonds() for bond in bonds: - start = bond.GetBeginAtom().GetAtomicNum() end = bond.GetEndAtom().GetAtomicNum() lower = min((start, end)) @@ -247,7 +209,7 @@ def check_connectivity(mol_0, mol_1): bonds_0 = undirected_bond_atoms(mol_0) bonds_1 = undirected_bond_atoms(mol_1) - same = (bonds_0 == bonds_1) + same = bonds_0 == bonds_1 return same @@ -286,22 +248,23 @@ def verify_smiles(rd_mol, smiles): # try checking bond connectivity - good_con = check_connectivity(mol_0=new_rd_mol, - mol_1=db_mol) + good_con = check_connectivity(mol_0=new_rd_mol, mol_1=db_mol) if good_con: - msg = (("WARNING: xyz2mol SMILES is {} " - "and database SMILES is {}. " - "However, the connectivity is the same. " - "Check to make sure the SMILES are resonances " - "structures.".format(rd_smiles, db_smiles))) + msg = ( + "WARNING: xyz2mol SMILES is {} " + "and database SMILES is {}. " + "However, the connectivity is the same. " + "Check to make sure the SMILES are resonances " + "structures.".format(rd_smiles, db_smiles) + ) return # otherwise raise an exception - msg = (("SMILES created by xyz2mol is {}, " - "which doesn't match the database " - "SMILES {}.".format(rd_smiles, db_smiles))) + msg = "SMILES created by xyz2mol is {}, " "which doesn't match the database " "SMILES {}.".format( + rd_smiles, db_smiles + ) raise Exception(msg) @@ -322,9 +285,7 @@ def log_failure(bad_idx, i): good_len = i - len(bad_idx) conv_pct = good_len / i * 100 - print(("Converted %d of %d " - "species (%.2f%%)" % ( - good_len, i, conv_pct))) + print(("Converted %d of %d " "species (%.2f%%)" % (good_len, i, conv_pct))) def log_missing(missing_e): @@ -341,8 +302,7 @@ def log_missing(missing_e): print("No elements are missing from xyz2mol") else: missing_e = list(set(missing_e)) - print("Elements {} are missing from xyz2mol".format( - ", ".join(missing_e))) + print("Elements {} are missing from xyz2mol".format(", ".join(missing_e))) def get_enum_func(track): @@ -362,10 +322,7 @@ def get_enum_func(track): return func -def make_rd_mols(dataset, - verbose=True, - check_smiles=False, - track=True): +def make_rd_mols(dataset, verbose=True, check_smiles=False, track=True): """ Use xyz2mol to add RDKit mols to a dataset that contains molecule coordinates. @@ -382,7 +339,7 @@ def make_rd_mols(dataset, """ - num_atoms = dataset.props['num_atoms'] + num_atoms = dataset.props["num_atoms"] # number of atoms in each conformer mol_size = dataset.props.get("mol_size", num_atoms).tolist() smiles_list = dataset.props["smiles"] @@ -396,7 +353,6 @@ def make_rd_mols(dataset, enum = get_enum_func(track) for i, smiles in enum(smiles_list): - # split the nxyz of each species into the component # nxyz of each conformer @@ -411,7 +367,6 @@ def make_rd_mols(dataset, # go through each conformer nxyz for j, nxyz in enumerate(nxyz_list): - # if a conformer in the species has already failed # to produce an RDKit mol, then don't bother converting # any of the other conformers for that species @@ -422,25 +377,24 @@ def make_rd_mols(dataset, # coordinates and atomic numbers xyz = nxyz[:, 1:].tolist() - atoms = nxyz[:, 0].numpy().astype('int').tolist() + atoms = nxyz[:, 0].numpy().astype("int").tolist() try: - - mol = xyz2mol(atoms=atoms, - coordinates=xyz, - charge=charge, - use_graph=QUICK, - allow_charged_fragments=CHARGED_FRAGMENTS, - embed_chiral=EMBED_CHIRAL, - use_huckel=USE_HUCKEL) + mol = xyz2mol( + atoms=atoms, + coordinates=xyz, + charge=charge, + use_graph=QUICK, + allow_charged_fragments=CHARGED_FRAGMENTS, + embed_chiral=EMBED_CHIRAL, + use_huckel=USE_HUCKEL, + ) if check_smiles: # check the smiles if requested verify_smiles(rd_mol=mol, smiles=smiles) except Exception as e: - - print(("xyz2mol failed " - "with error '{}' ".format(e))) + print(("xyz2mol failed " "with error '{}' ".format(e))) print("Removing smiles {}".format(smiles)) bad_idx.append(i) @@ -463,10 +417,7 @@ def make_rd_mols(dataset, # remove any species with missing RDKit mols - remove_bad_idx(dataset=dataset, - smiles_list=smiles_list, - bad_idx=bad_idx, - verbose=verbose) + remove_bad_idx(dataset=dataset, smiles_list=smiles_list, bad_idx=bad_idx, verbose=verbose) if verbose: log_missing(missing_e) @@ -516,12 +467,10 @@ def bond_feat_to_vec(feat_type, feat): # select from `BOND_OPTIONS` options = BOND_OPTIONS bond_type = feat - one_hot = make_one_hot(options=options, - result=bond_type) + one_hot = make_one_hot(options=options, result=bond_type) return one_hot elif feat_type == "in_ring_size": - # This is already a one-hot encoded vector, # because RDKit tests if the bond is in a # ring of a specific size, so the feature we @@ -537,8 +486,7 @@ def bond_feat_to_vec(feat_type, feat): ring_size = option break - one_hot = make_one_hot(options=options, - result=ring_size) + one_hot = make_one_hot(options=options, result=ring_size) return one_hot @@ -552,8 +500,7 @@ def bond_feat_to_vec(feat_type, feat): # select from `STEREO_OPTIONS` stereo = feat options = STEREO_OPTIONS - one_hot = make_one_hot(options=options, - result=stereo) + one_hot = make_one_hot(options=options, result=stereo) return one_hot @@ -605,46 +552,37 @@ def atom_feat_to_vec(feat_type, feat): if feat_type == "atom_type": options = AT_NUM - one_hot = make_one_hot(options=options, - result=feat) + one_hot = make_one_hot(options=options, result=feat) return one_hot elif feat_type == "num_bonds": options = BONDS - one_hot = make_one_hot(options=options, - result=feat) + one_hot = make_one_hot(options=options, result=feat) return one_hot elif feat_type == "formal_charge": - options = FORMAL_CHARGES - one_hot = make_one_hot(options=options, - result=feat) + one_hot = make_one_hot(options=options, result=feat) return one_hot elif feat_type == "chirality": options = CHIRAL_OPTIONS - one_hot = make_one_hot(options=options, - result=feat) + one_hot = make_one_hot(options=options, result=feat) return one_hot elif feat_type == "num_bonded_h": - options = NUM_H - one_hot = make_one_hot(options=options, - result=feat) + one_hot = make_one_hot(options=options, result=feat) return one_hot elif feat_type == "hybrid": - options = HYBRID_OPTIONS - one_hot = make_one_hot(options=options, - result=feat) + one_hot = make_one_hot(options=options, result=feat) return one_hot @@ -680,21 +618,16 @@ def get_atom_features(atom, feat_type): feat = atom.GetTotalDegree() elif feat_type == "formal_charge": - feat = atom.GetFormalCharge() elif feat_type == "chirality": feat = atom.GetChiralTag().name.lower() elif feat_type == "num_bonded_h": - - neighbors = [at.GetAtomicNum() for at - in atom.GetNeighbors()] - feat = len([i for i in neighbors if - i == 1]) + neighbors = [at.GetAtomicNum() for at in atom.GetNeighbors()] + feat = len([i for i in neighbors if i == 1]) elif feat_type == "hybrid": - feat = atom.GetHybridization().name.lower() elif feat_type == "aromaticity": @@ -705,8 +638,7 @@ def get_atom_features(atom, feat_type): # convert to a feature vector - vec = atom_feat_to_vec(feat_type=feat_type, - feat=feat) + vec = atom_feat_to_vec(feat_type=feat_type, feat=feat) return vec @@ -726,8 +658,7 @@ def get_all_bond_feats(bond, feat_types): feat_dic = {} for feat_type in feat_types: - feature = get_bond_features(bond=bond, - feat_type=feat_type) + feature = get_bond_features(bond=bond, feat_type=feat_type) feat_dic[feat_type] = feature return feat_dic @@ -748,16 +679,13 @@ def get_all_atom_feats(atom, feat_types): feat_dic = {} for feat_type in feat_types: - feature = get_atom_features(atom=atom, - feat_type=feat_type) + feature = get_atom_features(atom=atom, feat_type=feat_type) feat_dic[feat_type] = feature return feat_dic -def featurize_bonds(dataset, - feat_types=BOND_FEAT_TYPES, - track=True): +def featurize_bonds(dataset, feat_types=BOND_FEAT_TYPES, track=True): """ Add the bond feature vectors of each species and conformer to the dataset. @@ -779,14 +707,13 @@ def featurize_bonds(dataset, # number of bonds in a species props["num_bonds"] = [] - num_atoms = dataset.props['num_atoms'] + num_atoms = dataset.props["num_atoms"] mol_size = dataset.props.get("mol_size", num_atoms).tolist() enum = get_enum_func(track) # go through each set of RDKit mols for i, rd_mols in enum(dataset.props["rd_mols"]): - num_confs = (num_atoms[i] // mol_size[i]).item() split_sizes = [mol_size[i]] * num_confs @@ -798,12 +725,10 @@ def featurize_bonds(dataset, # go through each RDKit mol for j, rd_mol in enumerate(rd_mols): - bonds = rd_mol.GetBonds() bond_list = [] for bond in bonds: - all_props.append(torch.tensor([])) start = bond.GetBeginAtomIdx() @@ -815,8 +740,7 @@ def featurize_bonds(dataset, bond_list.append([lower, upper]) # get the bond features - feat_dic = get_all_bond_feats(bond=bond, - feat_types=feat_types) + feat_dic = get_all_bond_feats(bond=bond, feat_types=feat_types) # add to the features `all_props`, which contains # the bond features of all the conformers of this species @@ -829,8 +753,7 @@ def featurize_bonds(dataset, other_atoms = sum(split_sizes[:j]) shifted_bond_list = np.array(bond_list) + other_atoms - props["bond_list"][-1].append(torch.LongTensor( - shifted_bond_list)) + props["bond_list"][-1].append(torch.LongTensor(shifted_bond_list)) props["num_bonds"][-1].append(len(bonds)) # convert everything into a tensor after looping through each conformer @@ -841,9 +764,7 @@ def featurize_bonds(dataset, return dataset -def featurize_atoms(dataset, - feat_types=ATOM_FEAT_TYPES, - track=True): +def featurize_atoms(dataset, feat_types=ATOM_FEAT_TYPES, track=True): """ Add the atom feature vectors of each species and conformer to the dataset. @@ -863,7 +784,6 @@ def featurize_atoms(dataset, # go through each set of RDKit mols for each species for i, rd_mols in enum(dataset.props["rd_mols"]): - # initialize a list of features for each atom all_props = [] @@ -876,8 +796,7 @@ def featurize_atoms(dataset, all_props.append(torch.tensor([])) # get the atomic features - feat_dic = get_all_atom_feats(atom=atom, - feat_types=feat_types) + feat_dic = get_all_atom_feats(atom=atom, feat_types=feat_types) for key, feat in feat_dic.items(): all_props[-1] = torch.cat((all_props[-1], feat)) @@ -946,8 +865,7 @@ def decode_atomic(features, meta_data=META_DATA): options = options_list[i] name = feat_names[i] - result = decode_one_hot(options=options, - vector=vector) + result = decode_one_hot(options=options, vector=vector) dic[name] = result # multiply by 100 if it's the mass @@ -985,16 +903,13 @@ def decode_bond(features, meta_data=META_DATA): options = options_list[i] name = feat_names[i] - result = decode_one_hot(options=options, - vector=vector) + result = decode_one_hot(options=options, vector=vector) dic[name] = result return dic -def featurize_dataset(dataset, - bond_feats=BOND_FEAT_TYPES, - atom_feats=ATOM_FEAT_TYPES): +def featurize_dataset(dataset, bond_feats=BOND_FEAT_TYPES, atom_feats=ATOM_FEAT_TYPES): """ Add RDKit mols, atomic features and bond features to a dataset. Note that this has been superseded by the parallel @@ -1041,14 +956,13 @@ def add_morgan(dataset, vec_length): """ dataset.props["morgan"] = [] - for smiles in dataset.props['smiles']: + for smiles in dataset.props["smiles"]: mol = Chem.MolFromSmiles(smiles) if vec_length != 0: - morgan = AllChem.GetMorganFingerprintAsBitVect( - mol, radius=2, nBits=vec_length) + morgan = AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, nBits=vec_length) else: morgan = [] - arr_morgan = np.array(list(morgan)).astype('float32') + arr_morgan = np.array(list(morgan)).astype("float32") morgan_tens = torch.tensor(arr_morgan) dataset.props["morgan"].append(morgan_tens) diff --git a/nff/data/features/xyz.py b/nff/data/features/xyz.py index 7fe91901..9b710bab 100644 --- a/nff/data/features/xyz.py +++ b/nff/data/features/xyz.py @@ -66,11 +66,11 @@ def get_3d_representation(xyz, smiles, method, mol=None): """ representation_fn = { - 'autocorrelation_3d': rdMD.CalcAUTOCORR3D, - 'rdf': rdMD.CalcRDF, - 'morse': rdMD.CalcMORSE, - 'whim': rdMD.CalcWHIM, - 'getaway': lambda x: rdMD.CalcWHIM(x, precision=0.001) + "autocorrelation_3d": rdMD.CalcAUTOCORR3D, + "rdf": rdMD.CalcRDF, + "morse": rdMD.CalcMORSE, + "whim": rdMD.CalcWHIM, + "getaway": lambda x: rdMD.CalcWHIM(x, precision=0.001), } # if a `mol` is not given, generate it from the xyz and smiles @@ -95,23 +95,19 @@ def featurize_rdkit(dataset, method): props = dataset.props # go through each geometry - for i in range(len(props['nxyz'])): - - smiles = props['smiles'][i] - nxyz = props['nxyz'][i] + for i in range(len(props["nxyz"])): + smiles = props["smiles"][i] + nxyz = props["nxyz"][i] reps = [] # if there are RDKit mols in the dataset, you can # get the 3D representation from the mol itself - if 'rd_mols' in props: - rd_mols = props['rd_mols'][i] + if "rd_mols" in props: + rd_mols = props["rd_mols"][i] for rd_mol in rd_mols: - rep = torch.Tensor(get_3d_representation(xyz=None, - smiles=None, - method=method, - mol=rd_mol)) + rep = torch.Tensor(get_3d_representation(xyz=None, smiles=None, method=method, mol=rd_mol)) reps.append(rep) # otherwise you can get the mols from the nxyz, but this @@ -123,23 +119,22 @@ def featurize_rdkit(dataset, method): # if `mol_size` is there then split the nxyz into conformer # geomtries - if 'mol_size' in props: - mol_size = props['mol_size'][i].item() + if "mol_size" in props: + mol_size = props["mol_size"][i].item() n_confs = nxyz.shape[0] // mol_size nxyz_list = torch.split(nxyz, [mol_size] * n_confs) for sub_nxyz in nxyz_list: - - msg = ("Warning: no RDKit mols found in dataset. " - "Using nxyz and SMILES and assuming that the " - "nxyz atom ordering is the same as in the RDKit " - "mol. Make sure to check this!") + msg = ( + "Warning: no RDKit mols found in dataset. " + "Using nxyz and SMILES and assuming that the " + "nxyz atom ordering is the same as in the RDKit " + "mol. Make sure to check this!" + ) print(msg) xyz = sub_nxyz.detach().cpu().numpy().tolist() - rep = torch.Tensor(get_3d_representation(xyz=xyz, - smiles=smiles, - method=method)) + rep = torch.Tensor(get_3d_representation(xyz=xyz, smiles=smiles, method=method)) reps.append(rep) reps = torch.stack(reps) @@ -159,16 +154,11 @@ def get_e3fp(mol, bits, smiles=None): smiles = Chem.MolToSmiles(mol) mol.SetProp("_Name", smiles) fprint_params = {"bits": bits} - fp = (fprints_from_mol(mol, fprint_params=fprint_params)[0] - .to_vector().toarray().astype(int) - ).reshape(-1) + fp = (fprints_from_mol(mol, fprint_params=fprint_params)[0].to_vector().toarray().astype(int)).reshape(-1) return fp -def add_e3fp(rd_dataset, - fp_length, - verbose=False, - track=True): +def add_e3fp(rd_dataset, fp_length, verbose=False, track=True): """ Add E3FP fingerprints to each conformer in the dataset. Args: @@ -194,12 +184,11 @@ def add_e3fp(rd_dataset, smiles = batch["smiles"] fps = [] for mol in mols: - fp_array = get_e3fp(mol, fp_length, smiles) fps.append(torch.Tensor(fp_array)) e3fp_list.append(torch.stack(fps)) - rd_dataset.props['e3fp'] = e3fp_list + rd_dataset.props["e3fp"] = e3fp_list return rd_dataset diff --git a/nff/data/graphs.py b/nff/data/graphs.py index a7002b03..9d47a003 100644 --- a/nff/data/graphs.py +++ b/nff/data/graphs.py @@ -232,7 +232,7 @@ def generate_subgraphs(atomsobject, unwrap=True, get_edge=False): atoms = AtomsBatch(atomsobject) z, adj, dmat, threshold = adjdistmat(atoms, unwrap=unwrap) - box_len = torch.Tensor(np.diag(atoms.get_cell())) + torch.Tensor(np.diag(atoms.get_cell())) G = nx.from_numpy_matrix(adj) for i, item in enumerate(z): diff --git a/nff/data/loader.py b/nff/data/loader.py index 1de2cdba..60503e1d 100644 --- a/nff/data/loader.py +++ b/nff/data/loader.py @@ -4,22 +4,20 @@ from torch.utils.data.sampler import Sampler, BatchSampler -REINDEX_KEYS = ['atoms_nbr_list', 'nbr_list', 'bonded_nbr_list', - 'angle_list', 'mol_nbrs'] -NBR_LIST_KEYS = ['bond_idx', 'kj_idx', 'ji_idx'] -MOL_IDX_KEYS = ['atomwise_mol_list', 'directed_nbr_mol_list', - 'undirected_nbr_mol_list'] -IGNORE_KEYS = ['rd_mols'] +REINDEX_KEYS = ["atoms_nbr_list", "nbr_list", "bonded_nbr_list", "angle_list", "mol_nbrs"] +NBR_LIST_KEYS = ["bond_idx", "kj_idx", "ji_idx"] +MOL_IDX_KEYS = ["atomwise_mol_list", "directed_nbr_mol_list", "undirected_nbr_mol_list"] +IGNORE_KEYS = ["rd_mols"] TYPE_KEYS = { - 'atoms_nbr_list': torch.long, - 'nbr_list': torch.long, - 'num_atoms': torch.long, - 'bond_idx': torch.long, - 'bonded_nbr_list': torch.long, - 'angle_list': torch.long, - 'ji_idx': torch.long, - 'kj_idx': torch.long, + "atoms_nbr_list": torch.long, + "nbr_list": torch.long, + "num_atoms": torch.long, + "bond_idx": torch.long, + "bonded_nbr_list": torch.long, + "angle_list": torch.long, + "ji_idx": torch.long, + "kj_idx": torch.long, } @@ -37,18 +35,17 @@ def collate_dicts(dicts): # new indices for the batch: the first one is zero and the # last does not matter - cumulative_atoms = np.cumsum([0] + [d['num_atoms'] for d in dicts])[:-1] + cumulative_atoms = np.cumsum([0] + [d["num_atoms"] for d in dicts])[:-1] for n, d in zip(cumulative_atoms, dicts): for key in REINDEX_KEYS: if key in d: d[key] = d[key] + int(n) - if all(['nbr_list' in d for d in dicts]): + if all(["nbr_list" in d for d in dicts]): # same idea, but for quantities whose maximum value is the length of # the nbr list in each batch - cumulative_nbrs = np.cumsum( - [0] + [len(d['nbr_list']) for d in dicts])[:-1] + cumulative_nbrs = np.cumsum([0] + [len(d["nbr_list"]) for d in dicts])[:-1] for n, d in zip(cumulative_nbrs, dicts): for key in NBR_LIST_KEYS: if key in d: @@ -67,16 +64,10 @@ def collate_dicts(dicts): continue if isinstance(val, str): batch[key] = [data[key] for data in dicts] - elif hasattr(val, 'shape') and len(val.shape) > 0: - batch[key] = torch.cat([ - data[key] - for data in dicts - ], dim=0) + elif hasattr(val, "shape") and len(val.shape) > 0: + batch[key] = torch.cat([data[key] for data in dicts], dim=0) else: - batch[key] = torch.stack( - [data[key] for data in dicts], - dim=0 - ) + batch[key] = torch.stack([data[key] for data in dicts], dim=0) # adjusting the data types: for key, dtype in TYPE_KEYS.items(): @@ -101,9 +92,7 @@ class ImbalancedDatasetSampler(Sampler): """ - def __init__(self, - target_name, - props): + def __init__(self, target_name, props): """ Args: target_name (str): name of the property being classified @@ -112,10 +101,8 @@ def __init__(self, data_length = len(props[target_name]) - negative_idx = [i for i, target in enumerate( - props[target_name]) if round(target.item()) == 0] - positive_idx = [i for i in range(data_length) - if i not in negative_idx] + negative_idx = [i for i, target in enumerate(props[target_name]) if round(target.item()) == 0] + positive_idx = [i for i in range(data_length) if i not in negative_idx] num_neg = len(negative_idx) num_pos = len(positive_idx) @@ -134,22 +121,14 @@ def __init__(self, self.weights[positive_idx] = 1 / positive_weight def __iter__(self): - - return (i for i in torch.multinomial( - self.weights, self.data_length, replacement=True)) + return (i for i in torch.multinomial(self.weights, self.data_length, replacement=True)) def __len__(self): return self.data_length class BalancedFFSampler(torch.utils.data.sampler.Sampler): - - def __init__(self, - balance_type=None, - weights=None, - balance_dict=None, - **kwargs): - + def __init__(self, balance_type=None, weights=None, balance_dict=None, **kwargs): from nff.data.sampling import spec_config_zhu_balance if weights is not None: @@ -170,32 +149,21 @@ def __init__(self, self.data_length = len(self.balance_dict["weights"]) def __iter__(self): - - return (i for i in torch.multinomial( - self.balance_dict["weights"], - self.data_length, - replacement=True)) + return (i for i in torch.multinomial(self.balance_dict["weights"], self.data_length, replacement=True)) def __len__(self): return self.data_length class BalancedBatchedSpecies(BatchSampler): - def __init__(self, - base_sampler, - smiles_list, - batch_size, - min_geoms=None): + def __init__(self, base_sampler, smiles_list, batch_size, min_geoms=None): """ min_geoms (int, optional): minimum number of geoms that a species has to have to be sampled """ from nff.data.sampling import get_spec_dic - BatchSampler.__init__(self, - sampler=base_sampler, - batch_size=batch_size, - drop_last=False) + BatchSampler.__init__(self, sampler=base_sampler, batch_size=batch_size, drop_last=False) self.spec_dic = get_spec_dic({"smiles": smiles_list}) self.rev_specs = self.reverse_spec_dic() @@ -217,16 +185,13 @@ def reverse_spec_dic(self): def exclude_sparse(self, min_geoms): if min_geoms is None: return - invalid_specs = [key for key, val in self.spec_dic.items() - if len(val) < min_geoms] + invalid_specs = [key for key, val in self.spec_dic.items() if len(val) < min_geoms] if not invalid_specs: return - invalid_idx = torch.cat([self.spec_dic[spec] for spec - in invalid_specs]) + invalid_idx = torch.cat([self.spec_dic[spec] for spec in invalid_specs]) self.sampler.balance_dict["weights"][invalid_idx] = 0 def __iter__(self): - sampler_indices = list(iter(self.sampler)) num_samples = len(self.sampler) // self.batch_size batch = [] @@ -241,17 +206,13 @@ def __iter__(self): # to zero weights = self.sampler.balance_dict["weights"] these_weights = copy.deepcopy(weights) - zero_weight = torch.ones(len(weights), - dtype=torch.bool) + zero_weight = torch.ones(len(weights), dtype=torch.bool) zero_weight[other_geom_idx] = False these_weights[zero_weight] = 0 # sample indices from this species only # by using `these_weights` - add_idx = torch.multinomial( - these_weights, - self.batch_size, - replacement=True) + add_idx = torch.multinomial(these_weights, self.batch_size, replacement=True) for idx in add_idx: batch.append(idx) diff --git a/nff/data/parallel.py b/nff/data/parallel.py index 3c0697a0..0d6257f0 100644 --- a/nff/data/parallel.py +++ b/nff/data/parallel.py @@ -8,12 +8,7 @@ import torch from nff.utils import fprint -from nff.data.features import (make_rd_mols, - featurize_bonds, - featurize_atoms, - add_e3fp, - BOND_FEAT_TYPES, - ATOM_FEAT_TYPES) +from nff.data.features import make_rd_mols, featurize_bonds, featurize_atoms, add_e3fp, BOND_FEAT_TYPES, ATOM_FEAT_TYPES from nff.data.graphs import kj_ji_to_dset, add_bond_idx @@ -35,17 +30,13 @@ def split_dataset(dataset, num): splits = np.array_split(idx, num) for split in splits: - if len(split) == 0: continue min_split = split[0] max_split = split[-1] + 1 - new_props = {key: val[min_split: max_split] for key, val - in dataset.props.items()} + new_props = {key: val[min_split:max_split] for key, val in dataset.props.items()} - new_dataset = dataset.__class__(props=new_props, - check_props=False, - units=dataset.units) + new_dataset = dataset.__class__(props=new_props, check_props=False, units=dataset.units) datasets.append(new_dataset) return datasets @@ -70,14 +61,12 @@ def rejoin_props(datasets): if type(val) is list: new_props[key] += val else: - new_props[key] = torch.cat([ - new_props[key], val], dim=0) + new_props[key] = torch.cat([new_props[key], val], dim=0) return new_props def gen_parallel(func, kwargs_list): - if len(kwargs_list) == 1: kwargs = kwargs_list[0] kwargs["track"] = True @@ -87,10 +76,9 @@ def gen_parallel(func, kwargs_list): future_objs = [] # go through each set of kwargs for i, kwargs in enumerate(kwargs_list): - # monitor with tqdm for the first process only # so that they don't print on top of each other - kwargs["track"] = (i == 0) + kwargs["track"] = i == 0 result = executor.submit(func, **kwargs) # `future_objs` are the results of applying each function @@ -116,11 +104,8 @@ def rd_parallel(datasets, check_smiles=False): RDKit mols. """ - kwargs_list = [{"dataset": dataset, "verbose": False, - "check_smiles": check_smiles} - for dataset in datasets] - result_dsets = gen_parallel(func=make_rd_mols, - kwargs_list=kwargs_list) + kwargs_list = [{"dataset": dataset, "verbose": False, "check_smiles": check_smiles} for dataset in datasets] + result_dsets = gen_parallel(func=make_rd_mols, kwargs_list=kwargs_list) return result_dsets @@ -138,10 +123,8 @@ def bonds_parallel(datasets, feat_types): bond lists and features. """ - kwargs_list = [{"dataset": dataset, "feat_types": feat_types} - for dataset in datasets] - result_dsets = gen_parallel(func=featurize_bonds, - kwargs_list=kwargs_list) + kwargs_list = [{"dataset": dataset, "feat_types": feat_types} for dataset in datasets] + result_dsets = gen_parallel(func=featurize_bonds, kwargs_list=kwargs_list) return result_dsets @@ -159,10 +142,8 @@ def atoms_parallel(datasets, feat_types): atom features. """ - kwargs_list = [{"dataset": dataset, "feat_types": feat_types} - for dataset in datasets] - result_dsets = gen_parallel(func=featurize_atoms, - kwargs_list=kwargs_list) + kwargs_list = [{"dataset": dataset, "feat_types": feat_types} for dataset in datasets] + result_dsets = gen_parallel(func=featurize_atoms, kwargs_list=kwargs_list) return result_dsets @@ -178,31 +159,25 @@ def e3fp_parallel(datasets, fp_length): results_dsets (list): list of datasets with E3FP fingerprints. """ - kwargs_list = [{"rd_dataset": dataset, "fp_length": fp_length} for - dataset in datasets] + kwargs_list = [{"rd_dataset": dataset, "fp_length": fp_length} for dataset in datasets] - result_dsets = gen_parallel(func=add_e3fp, - kwargs_list=kwargs_list) + result_dsets = gen_parallel(func=add_e3fp, kwargs_list=kwargs_list) return result_dsets def kj_ji_parallel(dsets): - kwargs_list = [{"dataset": dataset} for - dataset in dsets] + kwargs_list = [{"dataset": dataset} for dataset in dsets] - result_dsets = gen_parallel(func=kj_ji_to_dset, - kwargs_list=kwargs_list) + result_dsets = gen_parallel(func=kj_ji_to_dset, kwargs_list=kwargs_list) return result_dsets def bond_idx_parallel(dsets): - kwargs_list = [{"dataset": dataset} for - dataset in dsets] + kwargs_list = [{"dataset": dataset} for dataset in dsets] - result_dsets = gen_parallel(func=add_bond_idx, - kwargs_list=kwargs_list) + result_dsets = gen_parallel(func=add_bond_idx, kwargs_list=kwargs_list) return result_dsets @@ -220,14 +195,10 @@ def summarize_rd(new_sets, first_set): tried = len(first_set) succ = sum([len(d) for d in new_sets]) pct = succ / tried * 100 - fprint("Converted %d of %d molecules (%.2f%%)." % - (succ, tried, pct)) + fprint("Converted %d of %d molecules (%.2f%%)." % (succ, tried, pct)) -def featurize_parallel(dataset, - num_procs, - bond_feats=BOND_FEAT_TYPES, - atom_feats=ATOM_FEAT_TYPES): +def featurize_parallel(dataset, num_procs, bond_feats=BOND_FEAT_TYPES, atom_feats=ATOM_FEAT_TYPES): """ Add RDKit mols, atom features and bond features to a dataset in parallel. @@ -259,7 +230,7 @@ def featurize_parallel(dataset, datasets = split_dataset(dataset=dataset, num=num_procs) # add RDKit mols if they're not already in the dataset - has_rdmols = all(['rd_mols' in dset.props for dset in datasets]) + has_rdmols = all(["rd_mols" in dset.props for dset in datasets]) if not has_rdmols: fprint("Converting xyz to RDKit mols...") datasets = rd_parallel(datasets) @@ -283,9 +254,7 @@ def featurize_parallel(dataset, dataset.props["offsets"] = offsets -def add_e3fp_parallel(dataset, - fp_length, - num_procs): +def add_e3fp_parallel(dataset, fp_length, num_procs): """ Add E3FP fingerprints to a dataset in parallel. Args: @@ -308,9 +277,7 @@ def add_e3fp_parallel(dataset, def add_kj_ji_parallel(dataset, num_procs): - - fprint((f"Adding kj and ji indices with {num_procs} " - "parallel processes")) + fprint((f"Adding kj and ji indices with {num_procs} " "parallel processes")) datasets = split_dataset(dataset=dataset, num=num_procs) datasets = kj_ji_parallel(datasets) @@ -319,9 +286,7 @@ def add_kj_ji_parallel(dataset, num_procs): def add_bond_idx_parallel(dataset, num_procs): - - fprint((f"Adding bond indices with {num_procs} " - "parallel processes")) + fprint((f"Adding bond indices with {num_procs} " "parallel processes")) datasets = split_dataset(dataset=dataset, num=num_procs) datasets = bond_idx_parallel(datasets) diff --git a/nff/data/sampling.py b/nff/data/sampling.py index 82bfa5b1..906a4869 100644 --- a/nff/data/sampling.py +++ b/nff/data/sampling.py @@ -28,8 +28,7 @@ def get_spec_dic(props): spec_dic = {} for i, spec in enumerate(props["smiles"]): - no_stereo_spec = (spec.replace("\\", "") - .replace("/", "")) + no_stereo_spec = spec.replace("\\", "").replace("/", "") if no_stereo_spec not in spec_dic: spec_dic[no_stereo_spec] = [] spec_dic[no_stereo_spec].append(i) @@ -40,8 +39,7 @@ def get_spec_dic(props): return spec_dic -def compute_zhu(props, - zhu_kwargs): +def compute_zhu(props, zhu_kwargs): """ Compute the approximate Zhu-Nakamura hopping probabilities for each geom in the dataset. @@ -58,18 +56,19 @@ def compute_zhu(props, expec_gap_kcal = zhu_kwargs["expec_gap"] * const.AU_TO_KCAL["energy"] func_type = zhu_kwargs["func_type"] - zhu_p = batch_zhu_p(batch=cat_props(props), - upper_key=upper_key, - lower_key=lower_key, - expec_gap=expec_gap_kcal, - func_type=func_type, - gap_shape=None) + zhu_p = batch_zhu_p( + batch=cat_props(props), + upper_key=upper_key, + lower_key=lower_key, + expec_gap=expec_gap_kcal, + func_type=func_type, + gap_shape=None, + ) return zhu_p -def balanced_spec_zhu(spec_dic, - zhu_p): +def balanced_spec_zhu(spec_dic, zhu_p): """ Get the Zhu weights assigned to each geom, such that the probability of getting a geom in species A @@ -92,7 +91,6 @@ def balanced_spec_zhu(spec_dic, all_weights = torch.zeros(num_geoms) for lst_idx in spec_dic.values(): - idx = torch.LongTensor(lst_idx) this_zhu = zhu_p[idx] sum_zhu = this_zhu.sum() @@ -131,13 +129,7 @@ def imbalanced_spec_zhu(zhu_p): return all_weights -def assign_clusters(ref_idx, - spec_nxyz, - ref_nxyzs, - device, - num_clusters, - extra_category, - extra_rmsd): +def assign_clusters(ref_idx, spec_nxyz, ref_nxyzs, device, num_clusters, extra_category, extra_rmsd): """ Assign each geom to a cluster. @@ -205,9 +197,7 @@ def assign_clusters(ref_idx, dset_0 = Dataset(props=props_0) dset_1 = Dataset(props=props_1) - rmsds, _ = compute_distances(dataset=dset_0, - device=device, - dataset_1=dset_1) + rmsds, _ = compute_distances(dataset=dset_0, device=device, dataset_1=dset_1) # take the minimum rmsd with respect to the set of reference # nxyz's in each cluster. Put infinity if a species is missing a @@ -231,8 +221,7 @@ def assign_clusters(ref_idx, clusters[in_extra] = num_clusters # record clusters in `cluster_dic` - cluster_dic = {i: [] for i in - range(num_clusters + int(extra_category))} + cluster_dic = {i: [] for i in range(num_clusters + int(extra_category))} for spec_idx, cluster in enumerate(clusters): cluster_dic[cluster.item()].append(spec_idx) @@ -240,13 +229,7 @@ def assign_clusters(ref_idx, return cluster_dic, min_rmsds -def per_spec_config_weights(spec_nxyz, - ref_nxyzs, - ref_idx, - num_clusters, - extra_category, - extra_rmsd, - device='cpu'): +def per_spec_config_weights(spec_nxyz, ref_nxyzs, ref_idx, num_clusters, extra_category, extra_rmsd, device="cpu"): """ Get weights to evenly sample different regions of phase space for a given species @@ -291,13 +274,15 @@ def per_spec_config_weights(spec_nxyz, """ # a dictionary that tells you which geoms are in each cluster - cluster_dic, cluster_rmsds = assign_clusters(ref_idx=ref_idx, - spec_nxyz=spec_nxyz, - ref_nxyzs=ref_nxyzs, - device=device, - num_clusters=num_clusters, - extra_category=extra_category, - extra_rmsd=extra_rmsd) + cluster_dic, cluster_rmsds = assign_clusters( + ref_idx=ref_idx, + spec_nxyz=spec_nxyz, + ref_nxyzs=ref_nxyzs, + device=device, + num_clusters=num_clusters, + extra_category=extra_category, + extra_rmsd=extra_rmsd, + ) # assign weights to each geom equal to 1 / (num geoms in cluster), # so that the probability of sampling any one cluster is equal to @@ -320,12 +305,7 @@ def per_spec_config_weights(spec_nxyz, return geom_weights, cluster_rmsds, cluster_dic -def all_spec_config_weights(props, - ref_nxyz_dic, - spec_dic, - device, - extra_category, - extra_rmsd): +def all_spec_config_weights(props, ref_nxyz_dic, spec_dic, device, extra_category, extra_rmsd): """ Get the "configuration weights" for each geom, i.e. the weights chosen to evenly sample each cluster @@ -359,18 +339,17 @@ def all_spec_config_weights(props, """ weight_dic = {} - num_geoms = len(props['nxyz']) - num_clusters = max([len(ref_dic['nxyz']) for - ref_dic in ref_nxyz_dic.values()]) + num_geoms = len(props["nxyz"]) + num_clusters = max([len(ref_dic["nxyz"]) for ref_dic in ref_nxyz_dic.values()]) cluster_rmsds = torch.zeros(num_geoms, num_clusters) cluster_assgn = torch.zeros(num_geoms) for spec in tqdm(list(spec_dic.keys())): idx = spec_dic[spec] - ref_nxyzs = ref_nxyz_dic[spec]['nxyz'] - ref_idx = ref_nxyz_dic[spec]['idx'] - spec_nxyz = [props['nxyz'][i] for i in idx] + ref_nxyzs = ref_nxyz_dic[spec]["nxyz"] + ref_idx = ref_nxyz_dic[spec]["idx"] + spec_nxyz = [props["nxyz"][i] for i in idx] geom_weights, these_rmsds, cluster_dic = per_spec_config_weights( spec_nxyz=spec_nxyz, ref_nxyzs=ref_nxyzs, @@ -378,7 +357,8 @@ def all_spec_config_weights(props, num_clusters=num_clusters, device=device, extra_category=extra_category, - extra_rmsd=extra_rmsd) + extra_rmsd=extra_rmsd, + ) # assign weights to each species weight_dic[spec] = geom_weights @@ -394,8 +374,7 @@ def all_spec_config_weights(props, return weight_dic, cluster_rmsds, cluster_assgn -def balanced_spec_config(weight_dic, - spec_dic): +def balanced_spec_config(weight_dic, spec_dic): """ Generate weights for geoms such that there is balance with respect to species [p(A) = p(B)], and with respect to clusters in each @@ -421,20 +400,19 @@ def balanced_spec_config(weight_dic, return all_weights -def imbalanced_spec_config(weight_dic, - spec_dic): +def imbalanced_spec_config(weight_dic, spec_dic): """ - Generate weights for geoms such that there is no balance with respect - to species [p(A) != p(B)], but there is with respect to clusters in - each species [p(A, c1) = p(A, c2), where c1 and c2 are two different - clusters in species A]. - Args: - spec_dic (dict): dictionary with indices of geoms in each species. - weight_dic (dict): dictionary of the form {smiles: geom_weights}, - where geom_weights are the set of normalized weights for - each geometry in that species. - Returns: - all_weights (torch.Tensor): normalized set of weights + Generate weights for geoms such that there is no balance with respect + to species [p(A) != p(B)], but there is with respect to clusters in + each species [p(A, c1) = p(A, c2), where c1 and c2 are two different + clusters in species A]. + Args: + spec_dic (dict): dictionary with indices of geoms in each species. + weight_dic (dict): dictionary of the form {smiles: geom_weights}, + where geom_weights are the set of normalized weights for + each geometry in that species. + Returns: + all_weights (torch.Tensor): normalized set of weights """ num_geoms = sum([i.shape[0] for i in weight_dic.values()]) @@ -482,15 +460,17 @@ def get_rand_weights(spec_dic): return balanced_spec_weights, imbalanced_spec_weights -def combine_weights(balanced_config, - imbalanced_config, - balanced_zhu, - imbalanced_zhu, - balanced_rand, - imbalanced_rand, - spec_weight, - config_weight, - zhu_weight): +def combine_weights( + balanced_config, + imbalanced_config, + balanced_zhu, + imbalanced_zhu, + balanced_rand, + imbalanced_rand, + spec_weight, + config_weight, + zhu_weight, +): """ Combine config weights, Zhu-Nakamura weights, and random weights to get the final weights for each geom. @@ -526,20 +506,19 @@ def combine_weights(balanced_config, # combination of zhu weights that are balanced and imbalanced with respect # to species - weighted_zhu = (balanced_zhu * zhu_weight * spec_weight - + imbalanced_zhu * zhu_weight * (1 - spec_weight)) + weighted_zhu = balanced_zhu * zhu_weight * spec_weight + imbalanced_zhu * zhu_weight * (1 - spec_weight) # combination of config weights that are balanced and imbalanced with # respect to species - weighted_config = (balanced_config * config_weight * spec_weight - + imbalanced_config * config_weight * (1 - spec_weight)) + weighted_config = balanced_config * config_weight * spec_weight + imbalanced_config * config_weight * ( + 1 - spec_weight + ) # combination of random weights that are balanced and imbalanced with # respect to species - rand_weight = (1 - zhu_weight - config_weight) - weighted_rand = (balanced_rand * rand_weight * spec_weight - + imbalanced_rand * rand_weight * (1 - spec_weight)) + rand_weight = 1 - zhu_weight - config_weight + weighted_rand = balanced_rand * rand_weight * spec_weight + imbalanced_rand * rand_weight * (1 - spec_weight) # final weights @@ -548,15 +527,17 @@ def combine_weights(balanced_config, return final_weights -def spec_config_zhu_balance(props, - ref_nxyz_dic, - zhu_kwargs, - spec_weight, - config_weight, - zhu_weight, - extra_category=False, - extra_rmsd=None, - device='cpu'): +def spec_config_zhu_balance( + props, + ref_nxyz_dic, + zhu_kwargs, + spec_weight, + config_weight, + zhu_weight, + extra_category=False, + extra_rmsd=None, + device="cpu", +): """ Generate weights that combine balancing of species, configurations, and Zhu-Nakamura hopping rates. @@ -597,28 +578,22 @@ def spec_config_zhu_balance(props, spec_dic=spec_dic, device=device, extra_category=extra_category, - extra_rmsd=extra_rmsd) + extra_rmsd=extra_rmsd, + ) - balanced_config = balanced_spec_config( - weight_dic=config_weight_dic, - spec_dic=spec_dic) + balanced_config = balanced_spec_config(weight_dic=config_weight_dic, spec_dic=spec_dic) - imbalanced_config = imbalanced_spec_config( - weight_dic=config_weight_dic, - spec_dic=spec_dic) + imbalanced_config = imbalanced_spec_config(weight_dic=config_weight_dic, spec_dic=spec_dic) # get the species-balanced and species-imbalanced # zhu weights - zhu_p = compute_zhu(props=props, - zhu_kwargs=zhu_kwargs) - balanced_zhu = balanced_spec_zhu(spec_dic=spec_dic, - zhu_p=zhu_p) + zhu_p = compute_zhu(props=props, zhu_kwargs=zhu_kwargs) + balanced_zhu = balanced_spec_zhu(spec_dic=spec_dic, zhu_p=zhu_p) imbalanced_zhu = imbalanced_spec_zhu(zhu_p=zhu_p) # get the random weights - balanced_rand, imbalanced_rand = get_rand_weights( - spec_dic=spec_dic) + balanced_rand, imbalanced_rand = get_rand_weights(spec_dic=spec_dic) # combine them all together @@ -631,11 +606,10 @@ def spec_config_zhu_balance(props, imbalanced_rand=imbalanced_rand, spec_weight=spec_weight, config_weight=config_weight, - zhu_weight=zhu_weight) + zhu_weight=zhu_weight, + ) # put relevant info in a dictionary - results = {"weights": final_weights, - "cluster_rmsds": cluster_rmsds, - "clusters": cluster_assgn} + results = {"weights": final_weights, "cluster_rmsds": cluster_rmsds, "clusters": cluster_assgn} return results diff --git a/nff/data/utils.py b/nff/data/utils.py index c69a2454..36179991 100644 --- a/nff/data/utils.py +++ b/nff/data/utils.py @@ -1,6 +1,5 @@ import os import shutil -import sys import tempfile from urllib import request as request diff --git a/nff/io/ase_ax.py b/nff/io/ase_ax.py index da52b944..2f5b6120 100644 --- a/nff/io/ase_ax.py +++ b/nff/io/ase_ax.py @@ -18,25 +18,20 @@ DEFAULT_CUTOFF = 5.0 DEFAULT_SKIN = 1.0 DEFAULT_DIRECTED = False -CONVERSION_DIC = {"ev": 1 / const.EV_TO_KCAL_MOL, - "au": const.KCAL_TO_AU["energy"]} +CONVERSION_DIC = {"ev": 1 / const.EV_TO_KCAL_MOL, "au": const.KCAL_TO_AU["energy"]} -UNDIRECTED = [SchNet, - SchNetDiabat, - HybridGraphConv, - SchNetFeatures, - OnlyBondUpdateCP3D] +UNDIRECTED = [SchNet, SchNetDiabat, HybridGraphConv, SchNetFeatures, OnlyBondUpdateCP3D] def check_directed(model, atoms): model_cls = model.__class__.__name__ msg = f"{model_cls} needs a directed neighbor list" - assert (not atoms.undirected), msg + assert not atoms.undirected, msg class AtomsBatch(Atoms): """Class to deal with the Neural Force Field and batch several - Atoms objects. + Atoms objects. """ def __init__( @@ -47,7 +42,7 @@ def __init__( needs_angles=False, undirected=(not DEFAULT_DIRECTED), cutoff_skin=DEFAULT_SKIN, - **kwargs + **kwargs, ): """ @@ -61,16 +56,16 @@ def __init__( super().__init__(*args, **kwargs) self.props = {} if (props is None) else props.copy() - self.nbr_list = self.props.get('nbr_list', None) - self.offsets = self.props.get('offsets', None) - self.num_atoms = self.props.get('num_atoms', len(self)) + self.nbr_list = self.props.get("nbr_list", None) + self.offsets = self.props.get("offsets", None) + self.num_atoms = self.props.get("num_atoms", len(self)) self.cutoff = cutoff self.cutoff_skin = cutoff_skin self.needs_angles = needs_angles - self.kj_idx = self.props.get('kj_idx') - self.ji_idx = self.props.get('ji_idx') - self.angle_list = self.props.get('angle_list') + self.kj_idx = self.props.get("kj_idx") + self.ji_idx = self.props.get("ji_idx") + self.angle_list = self.props.get("angle_list") self.device = self.props.get("device", 0) self.undirected = undirected @@ -82,14 +77,11 @@ def get_nxyz(self): nxyz (np.array): atomic numbers + cartesian coordinates of the atoms. """ - nxyz = np.concatenate([ - self.get_atomic_numbers().reshape(-1, 1), - self.get_positions().reshape(-1, 3) - ], axis=1) + nxyz = np.concatenate([self.get_atomic_numbers().reshape(-1, 1), self.get_positions().reshape(-1, 3)], axis=1) return nxyz - def get_batch(self, device='cpu'): + def get_batch(self, device="cpu"): """Uses the properties of Atoms to create a batch to be sent to the model. @@ -100,15 +92,15 @@ def get_batch(self, device='cpu'): if self.nbr_list is None: # or self.offsets is None: self.update_nbr_list() - self.props['nbr_list'] = self.nbr_list - self.props['angle_list'] = self.angle_list - self.props['ji_idx'] = self.ji_idx - self.props['kj_idx'] = self.kj_idx + self.props["nbr_list"] = self.nbr_list + self.props["angle_list"] = self.angle_list + self.props["ji_idx"] = self.ji_idx + self.props["kj_idx"] = self.kj_idx - self.props['offsets'] = self.offsets + self.props["offsets"] = self.offsets - self.props['nxyz'] = torch.Tensor(self.get_nxyz()) - self.props['num_atoms'] = torch.LongTensor([len(self)]) + self.props["nxyz"] = torch.Tensor(self.get_nxyz()) + self.props["num_atoms"] = torch.LongTensor([len(self)]) return self.props @@ -127,35 +119,29 @@ def update_nbr_list(self): """ if self.needs_angles: - - dataset = Dataset({key: [val] for key, val in - self.props.items()}, check_props=False) + dataset = Dataset({key: [val] for key, val in self.props.items()}, check_props=False) if "nxyz" not in dataset.props: dataset.props["nxyz"] = [self.get_nxyz()] - dataset.generate_neighbor_list((self.cutoff + self.cutoff_skin), - undirected=self.undirected) + dataset.generate_neighbor_list((self.cutoff + self.cutoff_skin), undirected=self.undirected) dataset.generate_angle_list() - self.ji_idx = dataset.props['ji_idx'][0] - self.kj_idx = dataset.props['kj_idx'][0] - self.nbr_list = dataset.props['nbr_list'][0] - self.angle_list = dataset.props['angle_list'][0] + self.ji_idx = dataset.props["ji_idx"][0] + self.kj_idx = dataset.props["kj_idx"][0] + self.nbr_list = dataset.props["nbr_list"][0] + self.angle_list = dataset.props["angle_list"][0] nbr_list = self.nbr_list if any(self.pbc): - offsets = offsets[self.nbr_list[:, 0], - self.nbr_list[:, 1], :].detach().to("cpu").numpy() + offsets = offsets[self.nbr_list[:, 0], self.nbr_list[:, 1], :].detach().to("cpu").numpy() else: offsets = np.zeros((self.nbr_list.shape[0], 3)) else: - edge_from, edge_to, offsets = torch_nbr_list(self, - (self.cutoff + - self.cutoff_skin), - self.device, - directed=(not self.undirected)) + edge_from, edge_to, offsets = torch_nbr_list( + self, (self.cutoff + self.cutoff_skin), self.device, directed=(not self.undirected) + ) nbr_list = torch.LongTensor(np.stack([edge_from, edge_to], axis=1)) self.nbr_list = nbr_list @@ -174,19 +160,9 @@ def batch_virial(): pass @classmethod - def from_atoms(cls, - atoms, - props=None, - needs_angles=False, - device=0, - **kwargs): + def from_atoms(cls, atoms, props=None, needs_angles=False, device=0, **kwargs): instance = cls( - atoms, - positions=atoms.positions, - numbers=atoms.numbers, - props=props, - needs_angles=needs_angles, - **kwargs + atoms, positions=atoms.positions, numbers=atoms.numbers, props=props, needs_angles=needs_angles, **kwargs ) instance.device = device @@ -196,18 +172,18 @@ def from_atoms(cls, class NeuralFF(Calculator): """ASE calculator using a pretrained NeuralFF model""" - implemented_properties = ['energy', 'forces'] + implemented_properties = ["energy", "forces"] def __init__( self, model, - device='cpu', - output_keys=['energy'], - conversion='ev', + device="cpu", + output_keys=["energy"], + conversion="ev", dataset_props=None, needs_angles=False, model_kwargs=None, - **kwargs + **kwargs, ): """Creates a NeuralFF calculator.nff/io/ase.py @@ -234,8 +210,7 @@ def __init__( # output keys if getattr(model, "grad_keys", []): - keep_keys = [key for key in model.grad_keys - if key.replace("_grad", "") in self.output_keys] + keep_keys = [key for key in model.grad_keys if key.replace("_grad", "") in self.output_keys] if hasattr(model, "_grad_keys"): model._grad_keys = keep_keys else: @@ -245,12 +220,7 @@ def to(self, device): self.device = device self.model.to(device) - def calculate( - self, - atomsbatch=None, - properties=['energy', 'forces'], - system_changes=all_changes - ): + def calculate(self, atomsbatch=None, properties=["energy", "forces"], system_changes=all_changes): """Calculates the desired properties for the given AtomsBatch. Args: @@ -276,7 +246,7 @@ def calculate( # add keys so that the readout function can calculate these properties for key in self.output_keys: batch[key] = [] - if 'forces' in properties: + if "forces" in properties: batch[key + "_grad"] = [] kwargs = {} @@ -289,16 +259,15 @@ def calculate( # results to an empty list if len(self.output_keys) != 1: self.results["energy"] = [] - if len(self.output_keys) != 1 and 'forces' in properties: + if len(self.output_keys) != 1 and "forces" in properties: self.results["forces"] = [] for key in self.output_keys: - assert self.conversion in CONVERSION_DIC, "Unit conversion kcal/mol to {} not supported.".format( - self.conversion) + self.conversion + ) - value = prediction[key].detach().cpu( - ).numpy() * CONVERSION_DIC[self.conversion] + value = prediction[key].detach().cpu().numpy() * CONVERSION_DIC[self.conversion] # if you're only outputting energy, then set energy to value if len(self.output_keys) == 1: @@ -307,9 +276,8 @@ def calculate( else: self.results["energy"].append(value.reshape(-1)) - if 'forces' in properties: - value_grad = prediction[key + "_grad"].detach( - ).cpu().numpy() * CONVERSION_DIC[self.conversion] + if "forces" in properties: + value_grad = prediction[key + "_grad"].detach().cpu().numpy() * CONVERSION_DIC[self.conversion] if len(self.output_keys) == 1: self.results["forces"] = -value_grad.reshape(-1, 3) @@ -324,20 +292,13 @@ def calculate( def from_file( cls, model_path, - device='cuda', - output_keys=['energy'], - conversion='ev', + device="cuda", + output_keys=["energy"], + conversion="ev", params=None, model_type=None, needs_angles=False, - **kwargs + **kwargs, ): - model = load_model(model_path, - params=params, - model_type=model_type) - return cls(model, - device, - output_keys, - conversion, - needs_angles=needs_angles, - **kwargs) + model = load_model(model_path, params=params, model_type=model_type) + return cls(model, device, output_keys, conversion, needs_angles=needs_angles, **kwargs) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 3a56b2c7..f71d8150 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -198,11 +198,14 @@ def calculate( self.results["embedding"] = embedding if requires_stress: - if isinstance(self.model, NffScaleMACE): # the implementation of stress calculation in MACE is a bit different + if isinstance( + self.model, NffScaleMACE + ): # the implementation of stress calculation in MACE is a bit different # and hence this is required (ASE_suit: mace/mace/calculators/mace.py) self.results["stress"] = ( - torch.mean(prediction["stress"], dim=0).cpu().numpy()) # converting to eV/Angstrom^3 + torch.mean(prediction["stress"], dim=0).cpu().numpy() + ) # converting to eV/Angstrom^3 else: # for other models stress = prediction["stress_volume"].detach().cpu().numpy() self.results["stress"] = stress * (1 / atoms.get_volume()) @@ -407,10 +410,7 @@ def calculate( gradients.append(prediction_numpy["energy_grad"]) if "stress_volume" in prediction: # TODO: implement unit conversion for stress with prediction_numpy - stresses.append( - prediction["stress_volume"].detach().cpu().numpy() - * (1 / atoms.get_volume()) - ) + stresses.append(prediction["stress_volume"].detach().cpu().numpy() * (1 / atoms.get_volume())) energies = np.stack(energies) gradients = np.stack(gradients) @@ -428,7 +428,7 @@ def calculate( if "e_disp" in prediction: self.results["energy"] = self.results["energy"] + prediction["e_disp"] if self.jobdir is not None and system_changes: - energy_std = self.results["energy_std"][None] + self.results["energy_std"][None] self.log_ensemble(self.jobdir, "energy_nff_ensemble.npy", energies) if "forces" in properties: diff --git a/nff/io/bias_calculators.py b/nff/io/bias_calculators.py index c22d73ab..bc9ab57f 100644 --- a/nff/io/bias_calculators.py +++ b/nff/io/bias_calculators.py @@ -57,9 +57,7 @@ def __init__( extra_constraints: list[dict] = None, **kwargs, ): - NeuralFF.__init__( - self, model=model, device=device, en_key=en_key, directed=directed, **kwargs - ) + NeuralFF.__init__(self, model=model, device=device, en_key=en_key, directed=directed, **kwargs) self.cv_defs = cv_defs self.num_cv = len(cv_defs) @@ -97,9 +95,7 @@ def __init__( if "ext_k" in cv.keys(): self.ext_k[ii] = cv["ext_k"] elif "ext_sigma" in cv.keys(): - self.ext_k[ii] = (units.kB * self.equil_temp) / ( - cv["ext_sigma"] * cv["ext_sigma"] - ) + self.ext_k[ii] = (units.kB * self.equil_temp) / (cv["ext_sigma"] * cv["ext_sigma"]) else: raise KeyError("ext_k/ext_sigma") @@ -121,9 +117,7 @@ def __init__( if "k" in cv.keys(): self.constraints[-1]["k"] = cv["k"] elif "sigma" in cv.keys(): - self.constraints[-1]["k"] = (units.kB * self.equil_temp) / ( - cv["sigma"] * cv["sigma"] - ) + self.constraints[-1]["k"] = (units.kB * self.equil_temp) / (cv["sigma"] * cv["sigma"]) else: raise KeyError("k/sigma") @@ -147,9 +141,7 @@ def _check_boundaries(self, xi: np.ndarray): in_bounds = (xi <= self.ranges[:, 1]).all() and (xi >= self.ranges[:, 0]).all() return in_bounds - def diff( - self, a: Union[np.ndarray, float], b: Union[np.ndarray, float], cv_type: str - ) -> Union[np.ndarray, float]: + def diff(self, a: Union[np.ndarray, float], b: Union[np.ndarray, float], cv_type: str) -> Union[np.ndarray, float]: """get difference of elements of numbers or arrays in range(-inf, inf) if is_angle is False or in range(-pi, pi) if is_angle is True Args: @@ -252,9 +244,7 @@ def harmonic_constraint( constr_ener = 0.0 for i in range(self.num_const): - dxi = self.diff( - xi[i], self.constraints[i]["pos"], self.constraints[i]["type"] - ) + dxi = self.diff(xi[i], self.constraints[i]["pos"], self.constraints[i]["type"]) constr_grad += self.constraints[i]["k"] * dxi * grad_xi[i] constr_ener += 0.5 * self.constraints[i]["k"] * dxi**2 @@ -314,14 +304,10 @@ def calculate( prediction = self.model(batch, **kwargs) # change energy and force to numpy array and eV - model_energy = prediction[self.en_key].detach().cpu().numpy() * ( - 1 / const.EV_TO_KCAL_MOL - ) + model_energy = prediction[self.en_key].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) if grad_key in prediction: - model_grad = prediction[grad_key].detach().cpu().numpy() * ( - 1 / const.EV_TO_KCAL_MOL - ) + model_grad = prediction[grad_key].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) else: raise KeyError(grad_key) @@ -344,9 +330,7 @@ def calculate( cvs[ii] = xi cv_grads[ii] = xi_grad cv_grad_lens[ii] = np.linalg.norm(xi_grad) - cv_invmass[ii] = np.einsum( - "i,ii,i", xi_grad.flatten(), M_inv, xi_grad.flatten() - ) + cv_invmass[ii] = np.einsum("i,ii,i", xi_grad.flatten(), M_inv, xi_grad.flatten()) cv_dot_PES[ii] = np.dot(xi_grad.flatten(), model_grad.flatten()) self.results = { @@ -391,9 +375,7 @@ def calculate( self.results["const_vals"] = consts if requires_stress: - stress = prediction["stress_volume"].detach().cpu().numpy() * ( - 1 / const.EV_TO_KCAL_MOL - ) + stress = prediction["stress_volume"].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) self.results["stress"] = stress * (1 / atoms.get_volume()) @@ -459,32 +441,18 @@ def __init__( # initialize extended system at target temp of MD simulation for i in range(self.num_cv): - self.ext_vel[i] = np.random.randn() * np.sqrt( - self.equil_temp * units.kB / self.ext_masses[i] - ) + self.ext_vel[i] = np.random.randn() * np.sqrt(self.equil_temp * units.kB / self.ext_masses[i]) self.friction = friction_per_ps * 1.0e-3 / units.fs - self.rand_push = np.sqrt( - self.equil_temp - * self.friction - * self.ext_dt - * units.kB - / (2.0e0 * self.ext_masses) - ) + self.rand_push = np.sqrt(self.equil_temp * self.friction * self.ext_dt * units.kB / (2.0e0 * self.ext_masses)) self.prefac1 = 2.0 / (2.0 + self.friction * self.ext_dt) - self.prefac2 = (2.0e0 - self.friction * self.ext_dt) / ( - 2.0e0 + self.friction * self.ext_dt - ) + self.prefac2 = (2.0e0 - self.friction * self.ext_dt) / (2.0e0 + self.friction * self.ext_dt) # set up all grid accumulators for ABF self.nbins_per_dim = np.array([1 for i in range(self.num_cv)]) self.grid = [] for i in range(self.num_cv): - self.nbins_per_dim[i] = int( - np.ceil( - np.abs(self.ranges[i, 1] - self.ranges[i, 0]) / self.ext_binwidth[i] - ) - ) + self.nbins_per_dim[i] = int(np.ceil(np.abs(self.ranges[i, 1] - self.ranges[i, 0]) / self.ext_binwidth[i])) self.grid.append( np.arange( self.ranges[i, 0] + self.ext_binwidth[i] / 2, @@ -513,9 +481,7 @@ def get_index(self, xi: np.ndarray) -> tuple: """ bin_x = np.zeros(shape=xi.shape, dtype=np.int64) for i in range(self.num_cv): - bin_x[i] = int( - np.floor(np.abs(xi[i] - self.ranges[i, 0]) / self.ext_binwidth[i]) - ) + bin_x[i] = int(np.floor(np.abs(xi[i] - self.ranges[i, 0]) / self.ext_binwidth[i])) return tuple(bin_x.reshape(1, -1)[0]) def _update_bias(self, xi: np.ndarray): @@ -524,11 +490,7 @@ def _update_bias(self, xi: np.ndarray): self.ext_hist[bink] += 1 # linear ramp function - ramp = ( - 1.0 - if self.ext_hist[bink] > self.nfull - else self.ext_hist[bink] / self.nfull - ) + ramp = 1.0 if self.ext_hist[bink] > self.nfull else self.ext_hist[bink] / self.nfull for i in range(self.num_cv): # apply bias force on extended system @@ -540,8 +502,7 @@ def _update_bias(self, xi: np.ndarray): self.ext_hist[bink], self.bias[i][bink], self.m2_force[i][bink], - self.ext_k[i] - * self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]["type"]), + self.ext_k[i] * self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]["type"]), ) self.ext_forces[i] -= ramp * self.bias[i][bink] @@ -659,9 +620,7 @@ def __init__( ], f"Unknown aMD method {self.amd_method}" if self.amd_method == "amd": - print( - " >>> Warning: Please use GaMD or SaMD to obtain accurate free energy estimates!\n" - ) + print(" >>> Warning: Please use GaMD or SaMD to obtain accurate free energy estimates!\n") self.pot_count = 0 self.pot_var = 0.0 @@ -745,8 +704,7 @@ def _apply_boost(self, epot): if self.amd_method == "amd": amd_pot = np.square(self.E - epot) / (self.parameter + (self.E - epot)) boost_grad = ( - ((epot - self.E) * (epot - 2.0 * self.parameter - self.E)) - / np.square(epot - self.parameter - self.E) + ((epot - self.E) * (epot - 2.0 * self.parameter - self.E)) / np.square(epot - self.parameter - self.E) ) * self.amd_forces elif self.amd_method == "samd": @@ -761,17 +719,7 @@ def _apply_boost(self, epot): ) ) boost_grad = ( - -( - 1.0 - / ( - np.exp( - -self.k * (epot - self.pot_min) + np.log((1 / self.c0) - 1) - ) - + 1 - ) - - 1 - ) - * self.amd_forces + -(1.0 / (np.exp(-self.k * (epot - self.pot_min) + np.log((1 / self.c0) - 1)) + 1) - 1) * self.amd_forces ) else: @@ -790,9 +738,7 @@ def _update_pot_distribution(self, epot: float): self.pot_min = np.min([epot, self.pot_min]) self.pot_max = np.max([epot, self.pot_max]) self.pot_count += 1 - self.pot_avg, self.pot_m2, self.pot_var = welford_var( - self.pot_count, self.pot_avg, self.pot_m2, epot - ) + self.pot_avg, self.pot_m2, self.pot_var = welford_var(self.pot_count, self.pot_avg, self.pot_m2, epot) self.pot_std = np.sqrt(self.pot_var) def _calc_E_k0(self): @@ -803,9 +749,7 @@ def _calc_E_k0(self): """ if self.amd_method == "gamd_lower": self.E = self.pot_max - ko = (self.amd_parameter / self.pot_std) * ( - (self.pot_max - self.pot_min) / (self.pot_max - self.pot_avg) - ) + ko = (self.amd_parameter / self.pot_std) * ((self.pot_max - self.pot_min) / (self.pot_max - self.pot_avg)) self.k0 = np.min([1.0, ko]) @@ -820,9 +764,7 @@ def _calc_E_k0(self): self.E = self.pot_min + (self.pot_max - self.pot_min) / self.k0 elif self.amd_method == "samd": - ko = (self.amd_parameter / self.pot_std) * ( - (self.pot_max - self.pot_min) / (self.pot_max - self.pot_avg) - ) + ko = (self.amd_parameter / self.pot_std) * ((self.pot_max - self.pot_min) / (self.pot_max - self.pot_avg)) self.k0 = np.min([1.0, ko]) if (self.pot_std / self.amd_parameter) <= 1.0: @@ -831,10 +773,7 @@ def _calc_E_k0(self): self.k1 = np.max( [ 0, - ( - np.log(self.c) - + np.log((self.pot_std) / (self.amd_parameter) - 1) - ) + (np.log(self.c) + np.log((self.pot_std) / (self.amd_parameter) - 1)) / (self.pot_avg - self.pot_min), ] ) @@ -922,11 +861,7 @@ def _update_bias(self, xi: np.ndarray): self.ext_hist[bink] += 1 # linear ramp function - ramp = ( - 1.0 - if self.ext_hist[bink] > self.nfull - else self.ext_hist[bink] / self.nfull - ) + ramp = 1.0 if self.ext_hist[bink] > self.nfull else self.ext_hist[bink] / self.nfull for i in range(self.num_cv): # apply bias force on extended system @@ -938,8 +873,7 @@ def _update_bias(self, xi: np.ndarray): self.ext_hist[bink], self.bias[i][bink], self.m2_force[i][bink], - self.ext_k[i] - * self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]["type"]), + self.ext_k[i] * self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]["type"]), ) self.ext_forces[i] -= ramp * self.bias[i][bink] + mtd_forces[i] @@ -974,9 +908,7 @@ def _accumulate_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: bink = self.get_index(xi) if self.call_count % self.hill_drop_freq == 0: - w = self.hill_height * np.exp( - -self.metapot[bink] / (units.kB * self.well_tempered_temp) - ) + w = self.hill_height * np.exp(-self.metapot[bink] / (units.kB * self.well_tempered_temp)) dx = self.diff(self.grid[0], xi[0], self.cv_defs[0]["type"]).reshape( -1, @@ -1008,32 +940,20 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: dist_to_centers = [] for ii in range(self.num_cv): - dist_to_centers.append( - self.diff( - xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"] - ) - ) + dist_to_centers.append(self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"])) dist_to_centers = np.asarray(dist_to_centers) if self.num_cv > 1: - ind[ - (abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0) - ] = np.ma.masked + ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0)] = np.ma.masked else: - ind[ - (abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0) - ] = np.ma.masked + ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0)] = np.ma.masked # can get slow in long run, so only iterate over significant elements for i in np.nditer(ind.compressed(), flags=["zerosize_ok"]): - w = self.hill_height * np.exp( - -local_pot / (units.kB * self.well_tempered_temp) - ) + w = self.hill_height * np.exp(-local_pot / (units.kB * self.well_tempered_temp)) - epot = w * np.exp( - -np.power(dist_to_centers[:, i] / self.hill_std, 2).sum() / 2.0 - ) + epot = w * np.exp(-np.power(dist_to_centers[:, i] / self.hill_std, 2).sum() / 2.0) local_pot += epot bias_force -= epot * dist_to_centers[:, i] / self.hill_var @@ -1077,9 +997,7 @@ def __init__( extra_constraints: list[dict] = None, **kwargs, ): - NeuralFF.__init__( - self, model=model, device=device, en_key=en_key, directed=directed, **kwargs - ) + NeuralFF.__init__(self, model=model, device=device, en_key=en_key, directed=directed, **kwargs) self.gamma = gamma self.cv_defs = cv_defs @@ -1124,9 +1042,7 @@ def __init__( if "k" in cv.keys(): self.constraints[-1]["k"] = cv["k"] elif "sigma" in cv.keys(): - self.constraints[-1]["k"] = (units.kB * self.equil_temp) / ( - cv["sigma"] * cv["sigma"] - ) + self.constraints[-1]["k"] = (units.kB * self.equil_temp) / (cv["sigma"] * cv["sigma"]) else: raise KeyError("k/sigma") @@ -1137,9 +1053,7 @@ def __init__( self.num_const = len(self.constraints) - def diff( - self, a: Union[np.ndarray, float], b: Union[np.ndarray, float], cv_type: str - ) -> Union[np.ndarray, float]: + def diff(self, a: Union[np.ndarray, float], b: Union[np.ndarray, float], cv_type: str) -> Union[np.ndarray, float]: """get difference of elements of numbers or arrays in range(-inf, inf) if is_angle is False or in range(-pi, pi) if is_angle is True Args: @@ -1225,9 +1139,7 @@ def harmonic_constraint( constr_ener = 0.0 for i in range(self.num_const): - dxi = self.diff( - xi[i], self.constraints[i]["pos"], self.constraints[i]["type"] - ) + dxi = self.diff(xi[i], self.constraints[i]["pos"], self.constraints[i]["type"]) constr_grad += self.constraints[i]["k"] * dxi * grad_xi[i] constr_ener += 0.5 * self.constraints[i]["k"] * dxi**2 @@ -1287,14 +1199,10 @@ def calculate( prediction = self.model(batch, **kwargs) # change energy and force to numpy array and eV - model_energy = prediction[self.en_key].detach().cpu().numpy() * ( - 1 / const.EV_TO_KCAL_MOL - ) + model_energy = prediction[self.en_key].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) if grad_key in prediction: - model_grad = prediction[grad_key].detach().cpu().numpy() * ( - 1 / const.EV_TO_KCAL_MOL - ) + model_grad = prediction[grad_key].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) else: raise KeyError(grad_key) @@ -1317,9 +1225,7 @@ def calculate( cvs[ii] = xi cv_grads[ii] = xi_grad cv_grad_lens[ii] = np.linalg.norm(xi_grad) - cv_invmass[ii] = np.einsum( - "i,ii,i", xi_grad.flatten(), M_inv, xi_grad.flatten() - ) + cv_invmass[ii] = np.einsum("i,ii,i", xi_grad.flatten(), M_inv, xi_grad.flatten()) cv_dot_PES[ii] = np.dot(xi_grad.flatten(), model_grad.flatten()) self.results = { @@ -1364,15 +1270,11 @@ def calculate( self.results["const_vals"] = consts if requires_stress: - stress = prediction["stress_volume"].detach().cpu().numpy() * ( - 1 / const.EV_TO_KCAL_MOL - ) + stress = prediction["stress_volume"].detach().cpu().numpy() * (1 / const.EV_TO_KCAL_MOL) self.results["stress"] = stress * (1 / atoms.get_volume()) -def welford_var( - count: float, mean: float, M2: float, newValue: float -) -> Tuple[float, float, float]: +def welford_var(count: float, mean: float, M2: float, newValue: float) -> Tuple[float, float, float]: """On-the-fly estimate of sample variance by Welford's online algorithm Args: count: current number of samples (with new one) diff --git a/nff/io/cprop.py b/nff/io/cprop.py index 439e3a66..ae7e2c60 100644 --- a/nff/io/cprop.py +++ b/nff/io/cprop.py @@ -9,10 +9,7 @@ from nff.utils import bash_command, fprint -def get_cp_cmd(script, - config_path, - data_path, - dataset_type): +def get_cp_cmd(script, config_path, data_path, dataset_type): """ Get the string for a ChemProp command. Args: @@ -25,15 +22,11 @@ def get_cp_cmd(script, cmd (str): the chemprop command """ - cmd = (f"python {script} --config_path {config_path} " - f" --data_path {data_path} " - f" --dataset_type {dataset_type}") + cmd = f"python {script} --config_path {config_path} " f" --data_path {data_path} " f" --dataset_type {dataset_type}" return cmd -def cp_hyperopt(cp_folder, - hyp_folder, - rerun): +def cp_hyperopt(cp_folder, hyp_folder, rerun): """ Run hyperparameter optimization with ChemProp. Args: @@ -54,7 +47,6 @@ def cp_hyperopt(cp_folder, # If it exists and you don't want to re-run, then load it if params_exist and (not rerun): - fprint(f"Loading hyperparameter results from {param_file}\n") with open(param_file, "r") as f: @@ -71,10 +63,7 @@ def cp_hyperopt(cp_folder, data_path = config["data_path"] dataset_type = config["dataset_type"] - cmd = get_cp_cmd(hyp_script, - config_path, - data_path, - dataset_type) + cmd = get_cp_cmd(hyp_script, config_path, data_path, dataset_type) cmd += f" --config_save_path {param_file}" fprint(f"Running hyperparameter optimization in folder {hyp_folder}\n") @@ -89,8 +78,7 @@ def cp_hyperopt(cp_folder, return best_params -def cp_train(cp_folder, - train_folder): +def cp_train(cp_folder, train_folder): """ Train a chemprop model. Args: @@ -108,10 +96,7 @@ def cp_train(cp_folder, data_path = config["data_path"] dataset_type = config["dataset_type"] - cmd = get_cp_cmd(train_script, - config_path, - data_path, - dataset_type) + cmd = get_cp_cmd(train_script, config_path, data_path, dataset_type) p = bash_command(f"source activate chemprop && {cmd}") p.wait() @@ -133,15 +118,17 @@ def make_feat_paths(feat_path): return paths -def modify_config(base_config_path, - metric, - train_feat_path, - val_feat_path, - test_feat_path, - train_folder, - features_only, - hyp_params, - no_features): +def modify_config( + base_config_path, + metric, + train_feat_path, + val_feat_path, + test_feat_path, + train_folder, + features_only, + hyp_params, + no_features, +): """ Modify a chemprop config file with new parameters. Args: @@ -164,16 +151,17 @@ def modify_config(base_config_path, with open(base_config_path, "r") as f: config = json.load(f) - dic = {"metric": metric, - "features_path": make_feat_paths(train_feat_path), - "separate_val_features_path": make_feat_paths(val_feat_path), - "separate_test_features_path": make_feat_paths(test_feat_path), - "save_dir": train_folder, - "features_only": features_only, - **hyp_params} + dic = { + "metric": metric, + "features_path": make_feat_paths(train_feat_path), + "separate_val_features_path": make_feat_paths(val_feat_path), + "separate_test_features_path": make_feat_paths(test_feat_path), + "save_dir": train_folder, + "features_only": features_only, + **hyp_params, + } - config.update({key: val for key, val in - dic.items() if val is not None}) + config.update({key: val for key, val in dic.items() if val is not None}) if no_features: for key in list(config.keys()): @@ -188,12 +176,7 @@ def modify_config(base_config_path, json.dump(config, f, indent=4, sort_keys=True) -def modify_hyp_config(hyp_config_path, - metric, - hyp_feat_path, - hyp_folder, - features_only, - no_features): +def modify_hyp_config(hyp_config_path, metric, hyp_feat_path, hyp_folder, features_only, no_features): """ Modfiy a hyperparameter optimization config file with new parameters. Args: @@ -215,13 +198,14 @@ def modify_hyp_config(hyp_config_path, with open(hyp_config_path, "r") as f: config = json.load(f) - dic = {"metric": metric, - "features_path": make_feat_paths(hyp_feat_path), - "save_dir": hyp_folder, - "features_only": features_only} + dic = { + "metric": metric, + "features_path": make_feat_paths(hyp_feat_path), + "save_dir": hyp_folder, + "features_only": features_only, + } - config.update({key: val for key, val in - dic.items() if val is not None}) + config.update({key: val for key, val in dic.items() if val is not None}) if no_features: for key in list(config.keys()): @@ -275,8 +259,7 @@ def save_smiles(smiles_folder, smiles_list, name): # no bind): file_names = [f"{name}_smiles.csv", f"{name}_full.csv"] - paths = [os.path.join(smiles_folder, name) for name in - file_names] + paths = [os.path.join(smiles_folder, name) for name in file_names] for path in paths: with open(path, "r") as f: lines = f.readlines() @@ -333,11 +316,7 @@ def make_hyperopt_csvs(smiles_folder, all_smiles): save_smiles(smiles_folder, all_smiles, name="hyperopt") -def save_hyperopt(feat_folder, - metric, - smiles_folder, - cp_save_folder, - dset_size): +def save_hyperopt(feat_folder, metric, smiles_folder, cp_save_folder, dset_size): """ Aggregate and save the train and validation SMILES for hyperparameter optimization. Args: @@ -357,9 +336,8 @@ def save_hyperopt(feat_folder, for name in names: smiles_list = get_smiles(smiles_folder, f"{name}_smiles.csv") - np_save_path = os.path.join(cp_save_folder, - f"{name}_{metric}.npz") - feats = np.load(np_save_path)['features'] + np_save_path = os.path.join(cp_save_folder, f"{name}_{metric}.npz") + feats = np.load(np_save_path)["features"] all_feats.append(feats) all_smiles += smiles_list @@ -370,12 +348,10 @@ def save_hyperopt(feat_folder, all_feats = all_feats[:dset_size] # save the entire train + val dataset features - hyp_np_path = os.path.join(cp_save_folder, - f"hyperopt_{metric}.npz") + hyp_np_path = os.path.join(cp_save_folder, f"hyperopt_{metric}.npz") np.savez_compressed(hyp_np_path, features=all_feats) # save csvs for the train + val dataset - make_hyperopt_csvs(smiles_folder=smiles_folder, - all_smiles=all_smiles) + make_hyperopt_csvs(smiles_folder=smiles_folder, all_smiles=all_smiles) return hyp_np_path diff --git a/nff/io/gmm.py b/nff/io/gmm.py index 2dd1e94f..0250b025 100644 --- a/nff/io/gmm.py +++ b/nff/io/gmm.py @@ -12,7 +12,6 @@ # Modified by Thierry Guillemot # License: BSD 3 clause - import numpy as np from scipy import linalg from sklearn.mixture._base import BaseMixture, _check_shape @@ -67,16 +66,12 @@ def _check_weights(weights, n_components): if any(np.less(weights, 0.0)) or any(np.greater(weights, 1.0)): raise ValueError( "The parameter 'weights' should be in the range " - "[0, 1], but got max value %.5f, min value %.5f" - % (np.min(weights), np.max(weights)) + "[0, 1], but got max value %.5f, min value %.5f" % (np.min(weights), np.max(weights)) ) # check normalization if not np.allclose(np.abs(1.0 - np.sum(weights)), 0.0): - raise ValueError( - "The parameter 'weights' should be normalized, but got sum(weights) = %.5f" - % np.sum(weights) - ) + raise ValueError("The parameter 'weights' should be normalized, but got sum(weights) = %.5f" % np.sum(weights)) return weights @@ -111,12 +106,8 @@ def _check_precision_positivity(precision, covariance_type): def _check_precision_matrix(precision, covariance_type): """Check a precision matrix is symmetric and positive-definite.""" - if not ( - np.allclose(precision, precision.T) and np.all(linalg.eigvalsh(precision) > 0.0) - ): - raise ValueError( - "'%s precision' should be symmetric, positive-definite" % covariance_type - ) + if not (np.allclose(precision, precision.T) and np.all(linalg.eigvalsh(precision) > 0.0)): + raise ValueError("'%s precision' should be symmetric, positive-definite" % covariance_type) def _check_precisions_full(precisions, covariance_type): @@ -161,9 +152,7 @@ def _check_precisions(precisions, covariance_type, n_components, n_features): "diag": (n_components, n_features), "spherical": (n_components,), } - _check_shape( - precisions, precisions_shape[covariance_type], "%s precision" % covariance_type - ) + _check_shape(precisions, precisions_shape[covariance_type], "%s precision" % covariance_type) _check_precisions = { "full": _check_precisions_full, @@ -358,18 +347,14 @@ def _compute_precision_cholesky(covariances, covariance_type): cov_chol = linalg.cholesky(covariance, lower=True) except linalg.LinAlgError: raise ValueError(estimate_precision_error_message) - precisions_chol[k] = linalg.solve_triangular( - cov_chol, np.eye(n_features), lower=True - ).T + precisions_chol[k] = linalg.solve_triangular(cov_chol, np.eye(n_features), lower=True).T elif covariance_type == "tied": _, n_features = covariances.shape try: cov_chol = linalg.cholesky(covariances, lower=True) except linalg.LinAlgError: raise ValueError(estimate_precision_error_message) - precisions_chol = linalg.solve_triangular( - cov_chol, np.eye(n_features), lower=True - ).T + precisions_chol = linalg.solve_triangular(cov_chol, np.eye(n_features), lower=True).T else: if np.any(np.less_equal(covariances, 0.0)): raise ValueError(estimate_precision_error_message) @@ -403,9 +388,7 @@ def _compute_log_det_cholesky(matrix_chol, covariance_type, n_features): """ if covariance_type == "full": n_components, _, _ = matrix_chol.shape - log_det_chol = np.sum( - np.log(matrix_chol.reshape(n_components, -1)[:, :: n_features + 1]), 1 - ) + log_det_chol = np.sum(np.log(matrix_chol.reshape(n_components, -1)[:, :: n_features + 1]), 1) elif covariance_type == "tied": log_det_chol = np.sum(np.log(np.diag(matrix_chol))) @@ -714,9 +697,7 @@ def _check_parameters(self, X): self.weights_init = _check_weights(self.weights_init, self.n_components) if self.means_init is not None: - self.means_init = _check_means( - self.means_init, self.n_components, n_features - ) + self.means_init = _check_means(self.means_init, self.n_components, n_features) if self.precisions_init is not None: self.precisions_init = _check_precisions( @@ -737,9 +718,7 @@ def _initialize(self, X, resp): """ n_samples, _ = X.shape - weights, means, covariances = _estimate_gaussian_parameters( - X, resp, self.reg_covar, self.covariance_type - ) + weights, means, covariances = _estimate_gaussian_parameters(X, resp, self.reg_covar, self.covariance_type) weights /= n_samples self.weights_ = weights if self.weights_init is None else self.weights_init @@ -747,20 +726,13 @@ def _initialize(self, X, resp): if self.precisions_init is None: self.covariances_ = covariances - self.precisions_cholesky_ = _compute_precision_cholesky( - covariances, self.covariance_type - ) + self.precisions_cholesky_ = _compute_precision_cholesky(covariances, self.covariance_type) elif self.covariance_type == "full": self.precisions_cholesky_ = np.array( - [ - linalg.cholesky(prec_init, lower=True) - for prec_init in self.precisions_init - ] + [linalg.cholesky(prec_init, lower=True) for prec_init in self.precisions_init] ) elif self.covariance_type == "tied": - self.precisions_cholesky_ = linalg.cholesky( - self.precisions_init, lower=True - ) + self.precisions_cholesky_ = linalg.cholesky(self.precisions_init, lower=True) else: self.precisions_cholesky_ = np.sqrt(self.precisions_init) @@ -779,14 +751,10 @@ def _m_step(self, X, log_resp): X, np.exp(log_resp), self.reg_covar, self.covariance_type ) self.weights_ /= self.weights_.sum() - self.precisions_cholesky_ = _compute_precision_cholesky( - self.covariances_, self.covariance_type - ) + self.precisions_cholesky_ = _compute_precision_cholesky(self.covariances_, self.covariance_type) def _estimate_log_prob(self, X): - return _estimate_log_gaussian_prob( - X, self.means_, self.precisions_cholesky_, self.covariance_type - ) + return _estimate_log_gaussian_prob(X, self.means_, self.precisions_cholesky_, self.covariance_type) def _estimate_log_weights(self): return np.log(self.weights_) @@ -819,9 +787,7 @@ def _set_parameters(self, params): self.precisions_[k] = batched_dot_product(prec_chol, prec_chol.T) elif self.covariance_type == "tied": - self.precisions_ = batched_dot_product( - self.precisions_cholesky_, self.precisions_cholesky_.T - ) + self.precisions_ = batched_dot_product(self.precisions_cholesky_, self.precisions_cholesky_.T) else: self.precisions_ = self.precisions_cholesky_**2 @@ -855,9 +821,7 @@ def bic(self, X): bic : float The lower the better. """ - return -2 * self.score(X) * X.shape[0] + self._n_parameters() * np.log( - X.shape[0] - ) + return -2 * self.score(X) * X.shape[0] + self._n_parameters() * np.log(X.shape[0]) def aic(self, X): """Akaike information criterion for the current model on the input X. diff --git a/nff/io/mace.py b/nff/io/mace.py index 1c588ade..56746cc9 100644 --- a/nff/io/mace.py +++ b/nff/io/mace.py @@ -18,13 +18,9 @@ from nff.utils.cuda import detach # get the path to NFF models dir, which is the parent directory of this file -module_dir = os.path.abspath( - os.path.join(os.path.abspath(__file__), "..", "..", "..", "models") -) +module_dir = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "models")) print(module_dir) -LOCAL_MODEL_PATH = os.path.join( - module_dir, "foundation_models/mace/2023-12-03-mace-mp.model" -) +LOCAL_MODEL_PATH = os.path.join(module_dir, "foundation_models/mace/2023-12-03-mace-mp.model") MACE_URLS = dict( small="http://tinyurl.com/46jrkm3v", # 2023-12-10-mace-128-L0_energy_epoch-249.model @@ -35,9 +31,7 @@ def _check_non_zero(std): if std == 0.0: - logging.warning( - "Standard deviation of the scaling is zero, Changing to no scaling" - ) + logging.warning("Standard deviation of the scaling is zero, Changing to no scaling") std = 1.0 return std @@ -58,20 +52,14 @@ def get_mace_mp_model_path(model: str = None) -> str: """ if model in (None, "medium") and os.path.isfile(LOCAL_MODEL_PATH): model_path = LOCAL_MODEL_PATH - print( - f"Using local medium Materials Project MACE model for MACECalculator {model}" - ) + print(f"Using local medium Materials Project MACE model for MACECalculator {model}") elif model in (None, "small", "medium", "large") or str(model).startswith("https:"): try: checkpoint_url = ( - MACE_URLS.get(model, MACE_URLS["medium"]) - if model in (None, "small", "medium", "large") - else model + MACE_URLS.get(model, MACE_URLS["medium"]) if model in (None, "small", "medium", "large") else model ) cache_dir = os.path.expanduser("~/.cache/mace") - checkpoint_url_name = "".join( - c for c in os.path.basename(checkpoint_url) if c.isalnum() or c in "_" - ) + checkpoint_url_name = "".join(c for c in os.path.basename(checkpoint_url) if c.isalnum() or c in "_") model_path = f"{cache_dir}/{checkpoint_url_name}" if not os.path.isfile(model_path): os.makedirs(cache_dir, exist_ok=True) @@ -82,13 +70,9 @@ def get_mace_mp_model_path(model: str = None) -> str: msg = f"Loading Materials Project MACE with {model_path}" print(msg) except Exception as exc: - raise RuntimeError( - "Model download failed and no local model found" - ) from exc + raise RuntimeError("Model download failed and no local model found") from exc else: - raise RuntimeError( - "Model download failed and no local model found" - ) + raise RuntimeError("Model download failed and no local model found") return model_path @@ -114,16 +98,15 @@ def get_init_kwargs_from_model(model: Union[ScaleShiftMACE, MACE]) -> dict: "atomic_energies": model.atomic_energies_fn.atomic_energies, "avg_num_neighbors": model.interactions[0].avg_num_neighbors, "atomic_numbers": model.atomic_numbers.tolist(), - "correlation": model.products[0] - .symmetric_contractions.contractions[0] - .correlation, + "correlation": model.products[0].symmetric_contractions.contractions[0].correlation, "gate": model.readouts[-1].non_linearity.acts[0].f, "radial_MLP": model.interactions[0].conv_tp_weights.hs[1:-1], - "radial_type": radial_type + "radial_type": radial_type, } if isinstance(model, ScaleShiftMACE): - init_kwargs.update({"atomic_inter_scale": model.scale_shift.scale, - "atomic_inter_shift": model.scale_shift.shift}) + init_kwargs.update( + {"atomic_inter_scale": model.scale_shift.scale, "atomic_inter_shift": model.scale_shift.shift} + ) return init_kwargs @@ -143,9 +126,7 @@ def get_atomic_number_table_from_zs(zs: Iterable[int]) -> AtomicNumberTable: return AtomicNumberTable(sorted(z_set)) -def compute_average_E0s( - train_dset: Dataset, z_table: AtomicNumberTable, desired_units: str = "eV" -) -> Dict[int, float]: +def compute_average_E0s(train_dset: Dataset, z_table: AtomicNumberTable, desired_units: str = "eV") -> Dict[int, float]: """Function to compute the average interaction energy of each chemical element returns dictionary of E0s @@ -174,9 +155,7 @@ def compute_average_E0s( for i, z in enumerate(z_table.zs): atomic_energies_dict[z] = E0s[i] except np.linalg.LinAlgError: - logging.warning( - "Failed to compute E0s using least squares regression, using the same for all atoms" - ) + logging.warning("Failed to compute E0s using least squares regression, using the same for all atoms") atomic_energies_dict = {} for i, z in enumerate(z_table.zs): atomic_energies_dict[z] = 0.0 @@ -213,7 +192,7 @@ def compute_mean_rms_energy_forces( one_hot_zs[i, z_table.z_to_index(z)] = 1 # compute atomic energies node_e0 = atomic_energies_fn(one_hot_zs) - graph_sizes = batch['num_atoms'] # list of num atoms + graph_sizes = batch["num_atoms"] # list of num atoms # given graph_sizes, transform to list of indices # index starts from 0, denoting the first graph @@ -221,17 +200,13 @@ def compute_mean_rms_energy_forces( counter = 0 batch_indices = torch.zeros(sum(graph_sizes), dtype=torch.long) for i, size in enumerate(graph_sizes): - batch_indices[counter:counter + size] = i + batch_indices[counter : counter + size] = i counter += size # get the graph energy - graph_e0s = scatter_sum( - src=node_e0, index=batch_indices, dim=-1, dim_size=len(graph_sizes) - ) - atom_energy_list.append( - (batch['energy'] - graph_e0s) / graph_sizes - ) # {[n_graphs], } - forces_list.append(-batch['energy_grad']) # {[n_graphs*n_atoms,3], } + graph_e0s = scatter_sum(src=node_e0, index=batch_indices, dim=-1, dim_size=len(graph_sizes)) + atom_energy_list.append((batch["energy"] - graph_e0s) / graph_sizes) # {[n_graphs], } + forces_list.append(-batch["energy_grad"]) # {[n_graphs*n_atoms,3], } atom_energies = torch.cat(atom_energy_list, dim=0) # [total_n_graphs] forces = torch.cat(forces_list, dim=0) # {[total_n_graphs*n_atoms,3], } @@ -254,27 +229,23 @@ def compute_avg_num_neighbors(data_loader: torch.utils.data.DataLoader) -> float num_neighbors = [] for batch in data_loader: - unique_neighbors_list = torch.unique(batch['nbr_list'], dim=0) # remove repeated neighbors + unique_neighbors_list = torch.unique(batch["nbr_list"], dim=0) # remove repeated neighbors receivers = unique_neighbors_list[:, 1] _, counts = torch.unique(receivers, return_counts=True) num_neighbors.append(counts) - avg_num_neighbors = torch.mean( - torch.cat(num_neighbors, dim=0).type(torch.get_default_dtype()) - ) + avg_num_neighbors = torch.mean(torch.cat(num_neighbors, dim=0).type(torch.get_default_dtype())) return detach(avg_num_neighbors, to_numpy=True).item() -def update_mace_init_params(train: Dataset, - val: Dataset, - train_loader: torch.utils.data.DataLoader, - model_params: Dict, - logger: logging.Logger = None) -> Dict[str, - Union[int, - float, - np.ndarray, - List[int]]]: +def update_mace_init_params( + train: Dataset, + val: Dataset, + train_loader: torch.utils.data.DataLoader, + model_params: Dict, + logger: logging.Logger = None, +) -> Dict[str, Union[int, float, np.ndarray, List[int]]]: """Update the MACE model initialization parameters based values obtained from training and validation datasets. Args: @@ -291,8 +262,14 @@ def update_mace_init_params(train: Dataset, logger = logging.getLogger(__name__) # z_table - z_table = get_atomic_number_table_from_zs([int(z) for data_split in (train, val) - for data in data_split for z in detach(data["nxyz"][:, 0], to_numpy=True)]) + z_table = get_atomic_number_table_from_zs( + [ + int(z) + for data_split in (train, val) + for data in data_split + for z in detach(data["nxyz"][:, 0], to_numpy=True) + ] + ) logger.info("Z Table %s", z_table.zs) # avg_num_neighbors @@ -304,9 +281,7 @@ def update_mace_init_params(train: Dataset, # atomic_energies # {8: -4.930998234144857, 38: -5.8572783662579795, 77: -8.316066722236071} atomic_energies_dict = compute_average_E0s(train, z_table) - atomic_energies: np.ndarray = np.array( - [atomic_energies_dict[z] for z in z_table.zs] - ) + atomic_energies: np.ndarray = np.array([atomic_energies_dict[z] for z in z_table.zs]) logger.info("Atomic energies: %s", atomic_energies.tolist()) # mean & std diff --git a/nff/io/openmm_calculators.py b/nff/io/openmm_calculators.py index 9edb9db1..98cdefbc 100644 --- a/nff/io/openmm_calculators.py +++ b/nff/io/openmm_calculators.py @@ -1,8 +1,6 @@ -import os import numpy as np import torch from typing import Union, Tuple -import copy from ase import Atoms from ase.neighborlist import neighbor_list @@ -19,7 +17,7 @@ nonbondedMethod = { - 'NonPeriodic': app.CutoffNonPeriodic, + "NonPeriodic": app.CutoffNonPeriodic, } @@ -33,40 +31,43 @@ class BiasBase(Calculator): equil_temp: float temperature of the simulation (important for extended system dynamics) """ - implemented_properties = ['energy', 'forces', - 'energy_unbiased', 'forces_unbiased', - 'cv_vals', 'ext_pos', 'cv_invmass', - 'grad_length', 'cv_grad_lengths', - 'cv_dot_PES', 'const_vals'] - - def __init__(self, - mmparms, - cv_defs: list[dict], - equil_temp: float = 300.0, - extra_constraints: list[dict] = None, - **kwargs): - + implemented_properties = [ + "energy", + "forces", + "energy_unbiased", + "forces_unbiased", + "cv_vals", + "ext_pos", + "cv_invmass", + "grad_length", + "cv_grad_lengths", + "cv_dot_PES", + "const_vals", + ] + + def __init__( + self, mmparms, cv_defs: list[dict], equil_temp: float = 300.0, extra_constraints: list[dict] = None, **kwargs + ): Calculator.__init__(self, **kwargs) # OpenMM setup - if 'prmtop' in mmparms.keys(): - parm = pmd.load_file(mmparms['prmtop']) - elif 'parm7' in mmparms.keys(): + if "prmtop" in mmparms.keys(): + parm = pmd.load_file(mmparms["prmtop"]) + elif "parm7" in mmparms.keys(): # for a list with parm7 and rst7 - parm = pmd.load_file(mmparms['parm7'], mmparms['rst7']) + parm = pmd.load_file(mmparms["parm7"], mmparms["rst7"]) else: raise NotImplemented # in case we need PBC, the pdb contains the box values - pdb = app.PDBFile(mmparms['pdb']) + app.PDBFile(mmparms["pdb"]) - system = parm.createSystem(nonbondedMethod=nonbondedMethod[mmparms['nonbonded']], - nonbondedCutoff=mmparms['nonbonded_cutoff'] * unit.nanometers, - ) - platform = omm.Platform.getPlatformByName(mmparms['platform']) - # this will not be used - integrator = omm.LangevinIntegrator( - 0.0 * unit.kelvin, 1.0 / unit.picoseconds, 0.1 * unit.picoseconds + system = parm.createSystem( + nonbondedMethod=nonbondedMethod[mmparms["nonbonded"]], + nonbondedCutoff=mmparms["nonbonded_cutoff"] * unit.nanometers, ) + platform = omm.Platform.getPlatformByName(mmparms["platform"]) + # this will not be used + integrator = omm.LangevinIntegrator(0.0 * unit.kelvin, 1.0 / unit.picoseconds, 0.1 * unit.picoseconds) self.context = omm.Context(system, integrator, platform) # BiasBase setup @@ -91,30 +92,29 @@ def __init__(self, self.conf_k = np.zeros(shape=(self.num_cv, 1)) for ii, cv in enumerate(self.cv_defs): - if 'range' in cv.keys(): - self.ext_coords[ii] = cv['range'][0] - self.ranges[ii] = cv['range'] + if "range" in cv.keys(): + self.ext_coords[ii] = cv["range"][0] + self.ranges[ii] = cv["range"] else: - raise PropertyNotPresent('range') + raise PropertyNotPresent("range") - if 'margin' in cv.keys(): - self.margins[ii] = cv['margin'] + if "margin" in cv.keys(): + self.margins[ii] = cv["margin"] - if 'conf_k' in cv.keys(): - self.conf_k[ii] = cv['conf_k'] + if "conf_k" in cv.keys(): + self.conf_k[ii] = cv["conf_k"] - if 'ext_k' in cv.keys(): - self.ext_k[ii] = cv['ext_k'] - elif 'ext_sigma' in cv.keys(): - self.ext_k[ii] = (units.kB * self.equil_temp) / ( - cv['ext_sigma'] * cv['ext_sigma']) + if "ext_k" in cv.keys(): + self.ext_k[ii] = cv["ext_k"] + elif "ext_sigma" in cv.keys(): + self.ext_k[ii] = (units.kB * self.equil_temp) / (cv["ext_sigma"] * cv["ext_sigma"]) else: - raise PropertyNotPresent('ext_k/ext_sigma') + raise PropertyNotPresent("ext_k/ext_sigma") - if 'type' not in cv.keys(): - self.cv_defs[ii]['type'] = 'not_angle' + if "type" not in cv.keys(): + self.cv_defs[ii]["type"] = "not_angle" else: - self.cv_defs[ii]['type'] = cv['type'] + self.cv_defs[ii]["type"] = cv["type"] self.constraints = None self.num_const = 0 @@ -123,28 +123,25 @@ def __init__(self, for cv in extra_constraints: self.constraints.append({}) - self.constraints[-1]['func'] = CV(cv["definition"]) + self.constraints[-1]["func"] = CV(cv["definition"]) - self.constraints[-1]['pos'] = cv['pos'] - if 'k' in cv.keys(): - self.constraints[-1]['k'] = cv['k'] - elif 'sigma' in cv.keys(): - self.constraints[-1]['k'] = (units.kB * self.equil_temp) / ( - cv['sigma'] * cv['sigma']) + self.constraints[-1]["pos"] = cv["pos"] + if "k" in cv.keys(): + self.constraints[-1]["k"] = cv["k"] + elif "sigma" in cv.keys(): + self.constraints[-1]["k"] = (units.kB * self.equil_temp) / (cv["sigma"] * cv["sigma"]) else: - raise PropertyNotPresent('k/sigma') + raise PropertyNotPresent("k/sigma") - if 'type' not in cv.keys(): - self.constraints[-1]['type'] = 'not_angle' + if "type" not in cv.keys(): + self.constraints[-1]["type"] = "not_angle" else: - self.constraints[-1]['type'] = cv['type'] + self.constraints[-1]["type"] = cv["type"] self.num_const = len(self.constraints) self.cvs = np.zeros(shape=(self.num_cv, 1)) - self.cv_grads = np.zeros(shape=(self.num_cv, - atoms.get_positions().shape[0], - atoms.get_positions().shape[1])) + self.cv_grads = np.zeros(shape=(self.num_cv, atoms.get_positions().shape[0], atoms.get_positions().shape[1])) self.cv_grad_lens = np.zeros(shape=(self.num_cv, 1)) self.cv_invmass = np.zeros(shape=(self.num_cv, 1)) self.cv_dot_PES = np.zeros(shape=(self.num_cv, 1)) @@ -159,15 +156,10 @@ def _up_extvel(self): pass def _check_boundaries(self, xi: np.ndarray): - in_bounds = ((xi <= self.ranges[:, 1]).all() and - (xi >= self.ranges[:, 0]).all()) + in_bounds = (xi <= self.ranges[:, 1]).all() and (xi >= self.ranges[:, 0]).all() return in_bounds - def diff(self, - a: Union[np.ndarray, float], - b: Union[np.ndarray, float], - cv_type: str - ) -> Union[np.ndarray, float]: + def diff(self, a: Union[np.ndarray, float], b: Union[np.ndarray, float], cv_type: str) -> Union[np.ndarray, float]: """get difference of elements of numbers or arrays in range(-inf, inf) if is_angle is False or in range(-pi, pi) if is_angle is True Args: @@ -180,12 +172,10 @@ def diff(self, # wrap to range(-pi,pi) for angle if isinstance(diff, np.ndarray) and cv_type == "angle": - diff[diff > np.pi] -= 2 * np.pi diff[diff < -np.pi] += 2 * np.pi elif cv_type == "angle": - if diff < -np.pi: diff += 2 * np.pi elif diff > np.pi: @@ -193,10 +183,11 @@ def diff(self, return diff - def step_bias(self, - xi: np.ndarray, - grad_xi: np.ndarray, - ) -> Tuple[np.ndarray, np.ndarray]: + def step_bias( + self, + xi: np.ndarray, + grad_xi: np.ndarray, + ) -> Tuple[np.ndarray, np.ndarray]: """energy and gradient of bias Args: @@ -215,18 +206,18 @@ def step_bias(self, for i in range(self.num_cv): # harmonic coupling of extended coordinate to reaction coordinate - dxi = self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]['type']) + dxi = self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]["type"]) self.ext_forces[i] = self.ext_k[i] * dxi bias_grad += self.ext_k[i] * dxi * grad_xi[i] bias_ener += 0.5 * self.ext_k[i] * dxi**2 # harmonic walls for confinement to range of interest if self.ext_coords[i] > (self.ranges[i][1] + self.margins[i]): - r = self.diff(self.ranges[i][1] + self.margins[i], self.ext_coords[i], self.cv_defs[i]['type']) + r = self.diff(self.ranges[i][1] + self.margins[i], self.ext_coords[i], self.cv_defs[i]["type"]) self.ext_forces[i] += self.conf_k[i] * r elif self.ext_coords[i] < (self.ranges[i][0] - self.margins[i]): - r = self.diff(self.ranges[i][0] - self.margins[i], self.ext_coords[i], self.cv_defs[i]['type']) + r = self.diff(self.ranges[i][0] - self.margins[i], self.ext_coords[i], self.cv_defs[i]["type"]) self.ext_forces[i] += self.conf_k[i] * r self._update_bias(xi) @@ -234,10 +225,11 @@ def step_bias(self, return bias_ener, bias_grad - def harmonic_constraint(self, - xi: np.ndarray, - grad_xi: np.ndarray, - ) -> Tuple[np.ndarray, np.ndarray]: + def harmonic_constraint( + self, + xi: np.ndarray, + grad_xi: np.ndarray, + ) -> Tuple[np.ndarray, np.ndarray]: """energy and gradient of additional harmonic constraint Args: @@ -254,20 +246,28 @@ def harmonic_constraint(self, constr_ener = 0.0 for i in range(self.num_const): - dxi = self.diff(xi[i], self.constraints[i]['pos'], self.constraints[i]['type']) - constr_grad += self.constraints[i]['k'] * dxi * grad_xi[i] - constr_ener += 0.5 * self.constraints[i]['k'] * dxi**2 + dxi = self.diff(xi[i], self.constraints[i]["pos"], self.constraints[i]["type"]) + constr_grad += self.constraints[i]["k"] * dxi * grad_xi[i] + constr_ener += 0.5 * self.constraints[i]["k"] * dxi**2 return constr_ener, constr_grad def calculate( - self, - atoms=None, - properties=['energy', 'forces', - 'energy_unbiased', 'forces_unbiased', - 'cv_vals', 'cv_invmass', - 'grad_length', 'cv_grad_lengths', 'cv_dot_PES', 'const_vals'], - system_changes=all_changes, + self, + atoms=None, + properties=[ + "energy", + "forces", + "energy_unbiased", + "forces_unbiased", + "cv_vals", + "cv_invmass", + "grad_length", + "cv_grad_lengths", + "cv_dot_PES", + "const_vals", + ], + system_changes=all_changes, ): """Calculates the desired properties for the given AtomsBatch. @@ -290,12 +290,13 @@ def calculate( new_positions = ([omm.Vec3(*xyz.tolist()) for xyz in numpy_pos]) * unit.nanometers self.context.setPositions(new_positions) state = self.context.getState(getForces=True, getEnergy=True) - model_energy = (state.getPotentialEnergy().value_in_unit( - unit.kilocalories / unit.moles) / const.EV_TO_KCAL_MOL) - model_forces = (state.getForces(asNumpy=True).value_in_unit( - unit.kilocalories / (unit.moles * unit.angstroms)) / const.EV_TO_KCAL_MOL) + model_energy = state.getPotentialEnergy().value_in_unit(unit.kilocalories / unit.moles) / const.EV_TO_KCAL_MOL + model_forces = ( + state.getForces(asNumpy=True).value_in_unit(unit.kilocalories / (unit.moles * unit.angstroms)) + / const.EV_TO_KCAL_MOL + ) - inv_masses = 1. / atoms.get_masses() + inv_masses = 1.0 / atoms.get_masses() M_inv = np.diag(np.repeat(inv_masses, 3).flatten()) for ii, cv_def in enumerate(self.cv_defs): @@ -312,31 +313,31 @@ def calculate( if self.constraints: consts = np.zeros(shape=(self.num_const, 1)) - const_grads = np.zeros(shape=(self.num_const, - atoms.get_positions().shape[0], - atoms.get_positions().shape[1])) + const_grads = np.zeros( + shape=(self.num_const, atoms.get_positions().shape[0], atoms.get_positions().shape[1]) + ) for ii, const_dict in enumerate(self.constraints): - consts[ii], const_grads[ii] = const_dict['func'](atoms) + consts[ii], const_grads[ii] = const_dict["func"](atoms) const_ener, const_grad = self.harmonic_constraint(consts, const_grads) energy += const_ener forces -= const_grad self.results = { - 'energy': energy.reshape(-1), - 'forces': forces.reshape(-1, 3), - 'energy_unbiased': model_energy, - 'forces_unbiased': model_forces.reshape(-1, 3), - 'grad_length': np.linalg.norm(model_forces), - 'cv_vals': self.cvs, - 'cv_grad_lengths': self.cv_grad_lens, - 'cv_invmass': self.cv_invmass, - 'cv_dot_PES': self.cv_dot_PES, - 'ext_pos': self.ext_coords, + "energy": energy.reshape(-1), + "forces": forces.reshape(-1, 3), + "energy_unbiased": model_energy, + "forces_unbiased": model_forces.reshape(-1, 3), + "grad_length": np.linalg.norm(model_forces), + "cv_vals": self.cvs, + "cv_grad_lengths": self.cv_grad_lens, + "cv_invmass": self.cv_invmass, + "cv_dot_PES": self.cv_dot_PES, + "ext_pos": self.ext_coords, } if self.constraints: - self.results['const_vals'] = consts + self.results["const_vals"] = consts class eABF(BiasBase): @@ -353,64 +354,54 @@ class with neural force field nfull: numer of samples need for full application of bias force """ - def __init__(self, - mmparms, - cv_defs: list[dict], - dt: float, - friction_per_ps: float, - equil_temp: float = 300.0, - nfull: int = 100, - **kwargs): - - BiasBase.__init__(self, - mmparms=mmparms, - cv_defs=cv_defs, - equil_temp=equil_temp, - **kwargs) + def __init__( + self, + mmparms, + cv_defs: list[dict], + dt: float, + friction_per_ps: float, + equil_temp: float = 300.0, + nfull: int = 100, + **kwargs, + ): + BiasBase.__init__(self, mmparms=mmparms, cv_defs=cv_defs, equil_temp=equil_temp, **kwargs) self.ext_dt = dt * units.fs self.nfull = nfull for ii, cv in enumerate(self.cv_defs): - if 'bin_width' in cv.keys(): - self.ext_binwidth[ii] = cv['bin_width'] - elif 'ext_sigma' in cv.keys(): - self.ext_binwidth[ii] = cv['ext_sigma'] + if "bin_width" in cv.keys(): + self.ext_binwidth[ii] = cv["bin_width"] + elif "ext_sigma" in cv.keys(): + self.ext_binwidth[ii] = cv["ext_sigma"] else: - raise PropertyNotPresent('bin_width') + raise PropertyNotPresent("bin_width") - if 'ext_pos' in cv.keys(): + if "ext_pos" in cv.keys(): # set initial position - self.ext_coords[ii] = cv['ext_pos'] + self.ext_coords[ii] = cv["ext_pos"] else: - raise PropertyNotPresent('ext_pos') + raise PropertyNotPresent("ext_pos") - if 'ext_mass' in cv.keys(): - self.ext_masses[ii] = cv['ext_mass'] + if "ext_mass" in cv.keys(): + self.ext_masses[ii] = cv["ext_mass"] else: - raise PropertyNotPresent('ext_mass') + raise PropertyNotPresent("ext_mass") # initialize extended system at target temp of MD simulation for i in range(self.num_cv): - self.ext_vel[i] = (np.random.randn() * - np.sqrt(self.equil_temp * units.kB / - self.ext_masses[i])) + self.ext_vel[i] = np.random.randn() * np.sqrt(self.equil_temp * units.kB / self.ext_masses[i]) self.friction = friction_per_ps * 1.0e-3 / units.fs - self.rand_push = np.sqrt(self.equil_temp * self.friction * - self.ext_dt * units.kB / (2.0e0 * self.ext_masses)) + self.rand_push = np.sqrt(self.equil_temp * self.friction * self.ext_dt * units.kB / (2.0e0 * self.ext_masses)) self.prefac1 = 2.0 / (2.0 + self.friction * self.ext_dt) - self.prefac2 = ((2.0e0 - self.friction * self.ext_dt) / - (2.0e0 + self.friction * self.ext_dt)) + self.prefac2 = (2.0e0 - self.friction * self.ext_dt) / (2.0e0 + self.friction * self.ext_dt) # set up all grid accumulators for ABF self.nbins_per_dim = np.array([1 for i in range(self.num_cv)]) self.grid = [] for i in range(self.num_cv): - self.nbins_per_dim[i] = ( - int(np.ceil(np.abs(self.ranges[i, 1] - self.ranges[i, 0]) / - self.ext_binwidth[i])) - ) + self.nbins_per_dim[i] = int(np.ceil(np.abs(self.ranges[i, 1] - self.ranges[i, 0]) / self.ext_binwidth[i])) self.grid.append( np.arange( self.ranges[i, 0] + self.ext_binwidth[i] / 2, @@ -421,17 +412,13 @@ def __init__(self, self.nbins = np.prod(self.nbins_per_dim) # accumulators and conditional averages - self.bias = np.zeros( - (self.num_cv, *self.nbins_per_dim), dtype=float - ) + self.bias = np.zeros((self.num_cv, *self.nbins_per_dim), dtype=float) self.var_force = np.zeros_like(self.bias) self.m2_force = np.zeros_like(self.bias) self.cv_crit = np.copy(self.bias) - self.histogram = np.zeros( - self.nbins_per_dim, dtype=float - ) + self.histogram = np.zeros(self.nbins_per_dim, dtype=float) self.ext_hist = np.zeros_like(self.histogram) def get_index(self, xi: np.ndarray) -> tuple: @@ -443,26 +430,18 @@ def get_index(self, xi: np.ndarray) -> tuple: """ bin_x = np.zeros(shape=xi.shape, dtype=np.int64) for i in range(self.num_cv): - bin_x[i] = int(np.floor(np.abs(xi[i] - self.ranges[i, 0]) / - self.ext_binwidth[i])) + bin_x[i] = int(np.floor(np.abs(xi[i] - self.ranges[i, 0]) / self.ext_binwidth[i])) return tuple(bin_x.reshape(1, -1)[0]) - def _update_bias(self, - xi: np.ndarray): + def _update_bias(self, xi: np.ndarray): if self._check_boundaries(self.ext_coords): - bink = self.get_index(self.ext_coords) self.ext_hist[bink] += 1 # linear ramp function - ramp = ( - 1.0 - if self.ext_hist[bink] > self.nfull - else self.ext_hist[bink] / self.nfull - ) + ramp = 1.0 if self.ext_hist[bink] > self.nfull else self.ext_hist[bink] / self.nfull for i in range(self.num_cv): - # apply bias force on extended system ( self.bias[i][bink], @@ -472,8 +451,7 @@ def _update_bias(self, self.ext_hist[bink], self.bias[i][bink], self.m2_force[i][bink], - self.ext_k[i] * - self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]['type']), + self.ext_k[i] * self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]["type"]), ) self.ext_forces[i] -= ramp * self.bias[i][bink] @@ -493,7 +471,6 @@ def _update_bias(self, """ def _propagate_ext(self): - self.ext_rand_gauss = np.random.randn(len(self.ext_vel), 1) self.ext_vel += self.rand_push * self.ext_rand_gauss @@ -502,14 +479,13 @@ def _propagate_ext(self): # wrap to range(-pi,pi) for angle for ii in range(self.num_cv): - if self.cv_defs[ii]['type'] == 'angle': + if self.cv_defs[ii]["type"] == "angle": if self.ext_coords[ii] > np.pi: self.ext_coords[ii] -= 2 * np.pi elif self.ext_coords[ii] < -np.pi: self.ext_coords[ii] += 2 * np.pi def _up_extvel(self): - self.ext_vel *= self.prefac2 self.ext_vel += self.rand_push * self.ext_rand_gauss self.ext_vel += 0.5e0 * self.ext_dt * self.ext_forces / self.ext_masses @@ -532,26 +508,29 @@ class WTMeABF(eABF): well_tempered_temp: ficticious temperature for the well-tempered scaling """ - def __init__(self, - mmparms, - cv_defs: list[dict], - dt: float, - friction_per_ps: float, - equil_temp: float = 300.0, - nfull: int = 100, - hill_height: float = 0.0, - hill_drop_freq: int = 20, - well_tempered_temp: float = 4000.0, - **kwargs): - - eABF.__init__(self, - mmparms=mmparms, - cv_defs=cv_defs, - equil_temp=equil_temp, - dt=dt, - friction_per_ps=friction_per_ps, - nfull=nfull, - **kwargs) + def __init__( + self, + mmparms, + cv_defs: list[dict], + dt: float, + friction_per_ps: float, + equil_temp: float = 300.0, + nfull: int = 100, + hill_height: float = 0.0, + hill_drop_freq: int = 20, + well_tempered_temp: float = 4000.0, + **kwargs, + ): + eABF.__init__( + self, + mmparms=mmparms, + cv_defs=cv_defs, + equil_temp=equil_temp, + dt=dt, + friction_per_ps=friction_per_ps, + nfull=nfull, + **kwargs, + ) self.hill_height = hill_height self.hill_drop_freq = hill_drop_freq @@ -562,36 +541,28 @@ def __init__(self, self.center = [] for ii, cv in enumerate(self.cv_defs): - if 'hill_std' in cv.keys(): - self.hill_std[ii] = cv['hill_std'] - self.hill_var[ii] = cv['hill_std'] * cv['hill_std'] + if "hill_std" in cv.keys(): + self.hill_std[ii] = cv["hill_std"] + self.hill_var[ii] = cv["hill_std"] * cv["hill_std"] else: - raise PropertyNotPresent('hill_std') + raise PropertyNotPresent("hill_std") # set up all grid for MetaD potential self.metapot = np.zeros_like(self.histogram) self.metaforce = np.zeros_like(self.bias) - def _update_bias(self, - xi: np.ndarray): - + def _update_bias(self, xi: np.ndarray): mtd_forces = self.get_wtm_force(self.ext_coords) self.call_count += 1 if self._check_boundaries(self.ext_coords): - bink = self.get_index(self.ext_coords) self.ext_hist[bink] += 1 # linear ramp function - ramp = ( - 1.0 - if self.ext_hist[bink] > self.nfull - else self.ext_hist[bink] / self.nfull - ) + ramp = 1.0 if self.ext_hist[bink] > self.nfull else self.ext_hist[bink] / self.nfull for i in range(self.num_cv): - # apply bias force on extended system ( self.bias[i][bink], @@ -601,8 +572,7 @@ def _update_bias(self, self.ext_hist[bink], self.bias[i][bink], self.m2_force[i][bink], - self.ext_k[i] * - self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]['type']), + self.ext_k[i] * self.diff(xi[i], self.ext_coords[i], self.cv_defs[i]["type"]), ) self.ext_forces[i] -= ramp * self.bias[i][bink] + mtd_forces[i] @@ -626,8 +596,7 @@ def get_wtm_force(self, xi: np.ndarray) -> np.ndarray: return bias_force - def _accumulate_wtm_force(self, - xi: np.ndarray) -> Tuple[list, float]: + def _accumulate_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: """compute numerical WTM bias force from a grid Right now this works only for 1D CVs Args: @@ -638,13 +607,11 @@ def _accumulate_wtm_force(self, bink = self.get_index(xi) if self.call_count % self.hill_drop_freq == 0: + w = self.hill_height * np.exp(-self.metapot[bink] / (units.kB * self.well_tempered_temp)) - w = self.hill_height * np.exp( - -self.metapot[bink] - / (units.kB * self.well_tempered_temp) + dx = self.diff(self.grid[0], xi[0], self.cv_defs[0]["type"]).reshape( + -1, ) - - dx = self.diff(self.grid[0], xi[0], self.cv_defs[0]['type']).reshape(-1,) epot = w * np.exp(-(dx * dx) / (2.0 * self.hill_var[0])) self.metapot += epot self.metaforce[0] -= epot * dx / self.hill_var[0] @@ -672,7 +639,7 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: dist_to_centers = [] for ii in range(self.num_cv): - dist_to_centers.append(self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]['type'])) + dist_to_centers.append(self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"])) dist_to_centers = np.asarray(dist_to_centers) @@ -683,9 +650,7 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: # can get slow in long run, so only iterate over significant elements for i in np.nditer(ind.compressed(), flags=["zerosize_ok"]): - w = self.hill_height * np.exp( - -local_pot / (units.kB * self.well_tempered_temp) - ) + w = self.hill_height * np.exp(-local_pot / (units.kB * self.well_tempered_temp)) epot = w * np.exp(-np.power(dist_to_centers[:, i] / self.hill_std, 2).sum() / 2.0) local_pot += epot @@ -694,11 +659,7 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: return bias_force.reshape(-1, 1), local_pot -def welford_var( - count: float, - mean: float, - M2: float, - newValue: float) -> Tuple[float, float, float]: +def welford_var(count: float, mean: float, M2: float, newValue: float) -> Tuple[float, float, float]: """On-the-fly estimate of sample variance by Welford's online algorithm Args: count: current number of samples (with new one) diff --git a/nff/md/aims/calcs/basis.py b/nff/md/aims/calcs/basis.py index aba71820..a9ad6f49 100644 --- a/nff/md/aims/calcs/basis.py +++ b/nff/md/aims/calcs/basis.py @@ -51,7 +51,7 @@ def dgamma_dt(en, p, m): """ reshape_m = m.reshape(1, -1, 1) - deriv = -en + (p ** 2 / (2 * reshape_m)).sum((1, 2)) + deriv = -en + (p**2 / (2 * reshape_m)).sum((1, 2)) return deriv @@ -65,8 +65,7 @@ def to_dset(r, atom_nums, nbrs, gen_nbrs): """ atom_num_reshape = atom_nums.reshape(-1, 1) - nxyz = [torch.cat([atom_num_reshape, xyz], dim=-1) - for xyz in r] + nxyz = [torch.cat([atom_num_reshape, xyz], dim=-1) for xyz in r] dataset = Dataset(props={"nxyz": nxyz}) @@ -78,14 +77,7 @@ def to_dset(r, atom_nums, nbrs, gen_nbrs): return dataset -def get_engrad(r, - atom_nums, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys): +def get_engrad(r, atom_nums, nbrs, gen_nbrs, batch_size, device, model, diabat_keys): """ Args: r (torch.Tensor): a position tensor of dimension N_J x N_at x 3, @@ -93,53 +85,25 @@ def get_engrad(r, J and N_at is the number of atoms. """ - dataset = to_dset(r=r, - atom_nums=atom_nums, - nbrs=nbrs, - gen_nbrs=gen_nbrs) + dataset = to_dset(r=r, atom_nums=atom_nums, nbrs=nbrs, gen_nbrs=gen_nbrs) - loader = DataLoader(dataset, - batch_size=batch_size, - collate_fn=collate_dicts) + loader = DataLoader(dataset, batch_size=batch_size, collate_fn=collate_dicts) - results, _, _ = evaluate(model=model, - loader=loader, - loss_fn=lambda x, y: 0, - device=device, - debatch=True) + results, _, _ = evaluate(model=model, loader=loader, loss_fn=lambda x, y: 0, device=device, debatch=True) for key, val in results.items(): - if key.endswith("_grad") or key.startswith('nacv_'): + if key.endswith("_grad") or key.startswith("nacv_"): results[key] = torch.stack(val) return results, dataset -def compute_derivs(r, - m, - atom_num, - p, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys, - diabatic): - - results, dataset = get_engrad(r, - atom_num, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys) +def compute_derivs(r, m, atom_num, p, nbrs, gen_nbrs, batch_size, device, model, diabat_keys, diabatic): + results, dataset = get_engrad(r, atom_num, nbrs, gen_nbrs, batch_size, device, model, diabat_keys) num_states = len(diabat_keys) derivs = [] for i in range(num_states): - if diabatic: en_key = diabat_keys[i][i] grad_key = en_key + "_grad" @@ -153,22 +117,14 @@ def compute_derivs(r, p_deriv = dp_dt(en_grad) r_deriv = dr_dt(p, m) - dic = {"gamma": gamma_deriv, - "p": p_deriv, - "r": r_deriv} + dic = {"gamma": gamma_deriv, "p": p_deriv, "r": r_deriv} derivs.append(dic) return derivs -def overlap_formula(expand_r_i, - expand_r_j, - expand_alpha_i, - expand_alpha_j, - expand_p_i, - expand_p_j): - +def overlap_formula(expand_r_i, expand_r_j, expand_alpha_i, expand_alpha_j, expand_p_i, expand_p_j): r_i = expand_r_i.numpy() r_j = expand_r_j.numpy() alpha_i = expand_alpha_i.numpy() @@ -176,17 +132,16 @@ def overlap_formula(expand_r_i, p_i = expand_p_i.numpy() p_j = expand_p_j.numpy() - A = (-alpha_j * r_j ** 2 - alpha_i * r_i ** 2 - + 1j * p_j * (-r_j) - 1j * p_i * (-r_i)) + A = -alpha_j * r_j**2 - alpha_i * r_i**2 + 1j * p_j * (-r_j) - 1j * p_i * (-r_i) B = alpha_i + alpha_j - C = (2 * alpha_j * r_j + 1j * p_j - + 2 * alpha_i * r_i - 1j * p_i) + C = 2 * alpha_j * r_j + 1j * p_j + 2 * alpha_i * r_i - 1j * p_i # has dimension N_I x N_J x N_at x 3 - overlaps = ((2 / np.pi) ** 0.5 * (alpha_i * alpha_j) ** 0.25 - * np.exp(A) * (np.pi / B) ** 0.5 * np.exp(C ** 2 / (4 * B))) + overlaps = ( + (2 / np.pi) ** 0.5 * (alpha_i * alpha_j) ** 0.25 * np.exp(A) * (np.pi / B) ** 0.5 * np.exp(C**2 / (4 * B)) + ) # take the product over the last two dimensions N_I = expand_r_i.shape[0] @@ -201,15 +156,7 @@ def overlap_formula(expand_r_i, return overlap_prod -def tile_params(r_i, - r_j, - p_i, - p_j, - alpha_i, - alpha_j, - m_i=None, - m_j=None): - +def tile_params(r_i, r_j, p_i, p_j, alpha_i, alpha_j, m_i=None, m_j=None): N_I = r_i.shape[0] N_J = r_i.shape[0] N_at = r_i.shape[1] @@ -220,35 +167,21 @@ def tile_params(r_i, expand_p_i = p_i.expand(N_J, N_I, N_at, 3).transpose(0, 1) expand_p_j = p_j.expand(N_I, N_J, N_at, 3) - expand_alpha_i = (alpha_i.reshape(1, 1, N_at, 1) - .expand(N_I, N_J, N_at, 3)) + expand_alpha_i = alpha_i.reshape(1, 1, N_at, 1).expand(N_I, N_J, N_at, 3) - expand_alpha_j = (alpha_j.reshape(1, 1, N_at, 1) - .expand(N_J, N_I, N_at, 3) - .transpose(0, 1)) + expand_alpha_j = alpha_j.reshape(1, 1, N_at, 1).expand(N_J, N_I, N_at, 3).transpose(0, 1) if m_i is not None and m_j is not None: - expand_mi = (m_i.reshape(1, 1, N_at, 1) - .expand(N_I, N_J, N_at, 3)) + expand_mi = m_i.reshape(1, 1, N_at, 1).expand(N_I, N_J, N_at, 3) - expand_mj = (m_j.reshape(1, 1, N_at, 1) - .expand(N_J, N_I, N_at, 3) - .transpose(0, 1)) + expand_mj = m_j.reshape(1, 1, N_at, 1).expand(N_J, N_I, N_at, 3).transpose(0, 1) - return (expand_r_i, expand_r_j, expand_p_i, - expand_p_j, expand_alpha_i, expand_alpha_j, - expand_mi, expand_mj) + return (expand_r_i, expand_r_j, expand_p_i, expand_p_j, expand_alpha_i, expand_alpha_j, expand_mi, expand_mj) else: - return (expand_r_i, expand_r_j, expand_p_i, - expand_p_j, expand_alpha_i, expand_alpha_j) + return (expand_r_i, expand_r_j, expand_p_i, expand_p_j, expand_alpha_i, expand_alpha_j) -def get_overlaps(r_i, - r_j, - alpha_i, - alpha_j, - p_i, - p_j): +def get_overlaps(r_i, r_j, alpha_i, alpha_j, p_i, p_j): """ Args: r_i: Gaussian positions in state i. Tensor of @@ -260,34 +193,27 @@ def get_overlaps(r_i, """ - (expand_r_i, expand_r_j, expand_p_i, - expand_p_j, expand_alpha_i, expand_alpha_j) = tile_params(r_i, - r_j, - p_i, - p_j, - alpha_i, - alpha_j) + (expand_r_i, expand_r_j, expand_p_i, expand_p_j, expand_alpha_i, expand_alpha_j) = tile_params( + r_i, r_j, p_i, p_j, alpha_i, alpha_j + ) - r_max = ((expand_alpha_i * expand_r_i + expand_alpha_j * expand_r_j) - / (expand_alpha_i + expand_alpha_j)) + r_max = (expand_alpha_i * expand_r_i + expand_alpha_j * expand_r_j) / (expand_alpha_i + expand_alpha_j) # G_ij - overlap = overlap_formula(expand_r_i=expand_r_i, - expand_r_j=expand_r_j, - expand_alpha_i=expand_alpha_i, - expand_alpha_j=expand_alpha_j, - expand_p_i=expand_p_i, - expand_p_j=expand_p_j) + overlap = overlap_formula( + expand_r_i=expand_r_i, + expand_r_j=expand_r_j, + expand_alpha_i=expand_alpha_i, + expand_alpha_j=expand_alpha_j, + expand_p_i=expand_p_i, + expand_p_j=expand_p_j, + ) return overlap, r_max -def get_coupling_r(r_list, - p_list, - alpha_dic, - atom_nums, - min_overlap): +def get_coupling_r(r_list, p_list, alpha_dic, atom_nums, min_overlap): """ Get all overlaps betwene nuclear wave functions on different states, and get the positions at which the overlaps are large enough that we'll want to calculate matrix elements @@ -304,32 +230,27 @@ def get_coupling_r(r_list, for i in range(num_states): for j in range(num_states): - r_i = r_list[i] # N_I x N_at x 3 r_j = r_list[j] # N_J x N_at x 3 p_i = p_list[i] p_j = p_list[j] - alpha_i = torch.Tensor([alpha_dic[atom_num] - for atom_num in atom_nums]) + alpha_i = torch.Tensor([alpha_dic[atom_num] for atom_num in atom_nums]) alpha_j = copy.deepcopy(alpha_i) - overlap, r_max = get_overlaps(r_i=r_i, - r_j=r_j, - alpha_i=alpha_i, - alpha_j=alpha_j, - p_i=p_i, - p_j=p_j) + overlap, r_max = get_overlaps(r_i=r_i, r_j=r_j, alpha_i=alpha_i, alpha_j=alpha_j, p_i=p_i, p_j=p_j) couple_mask = abs(overlap) > min_overlap couple_idx = couple_mask.nonzero() couple_r = r_max[couple_idx[:, 0], couple_idx[:, 1]] - couple_dic[f"{i}_{j}"] = {"overlap": overlap, - "couple_idx": couple_idx, - "couple_r": couple_r, - "couple_mask": couple_mask} + couple_dic[f"{i}_{j}"] = { + "overlap": overlap, + "couple_idx": couple_idx, + "couple_r": couple_r, + "couple_mask": couple_mask, + } return couple_dic @@ -350,19 +271,12 @@ def compute_A(m, nacv, hbar=1): """ m_reshape = m.reshape(1, -1, 1) - A_ij = (-hbar ** 2 / m_reshape * nacv).sum((1, 2)) + A_ij = (-(hbar**2) / m_reshape * nacv).sum((1, 2)) return A_ij -def nonad_ham_ij(couple_r, - nacv, - overlap, - mask, - alpha_j, - r_j, - p_j, - m): +def nonad_ham_ij(couple_r, nacv, overlap, mask, alpha_j, r_j, p_j, m): """ Construct the off-diagonal elements of the Hamiltonian in the adiabatic basis. Computes f_ij = f(R_ij), the value of the matrix @@ -412,8 +326,7 @@ def nonad_ham_ij(couple_r, # we take the sum along the atomic dimensions n_ij = idx.shape[0] - nabla_ij_real = ((-alpha_j_reshape * (couple_r - mask_rj)) - .reshape(n_ij, -1).sum(-1)) + nabla_ij_real = (-alpha_j_reshape * (couple_r - mask_rj)).reshape(n_ij, -1).sum(-1) nabla_ij_im = mask_pj.reshape(n_ij, -1).sum(-1) # Convert to numpy to make it complex @@ -498,15 +411,8 @@ def nonad_ham_ij(couple_r, # return h_ij -def nuc_ke(r_j, - p_j, - alpha_j, - r_i, - p_i, - alpha_i, - mask, - m, - hbar=1): + +def nuc_ke(r_j, p_j, alpha_j, r_i, p_i, alpha_i, mask, m, hbar=1): """ Get the diagonal kinetic energy part of the Hamiltonian. Args: @@ -524,38 +430,31 @@ def nuc_ke(r_j, # **** this should actually be done analytically - (expand_r_i, expand_r_j, expand_p_i, - expand_p_j, expand_alpha_i, expand_alpha_j, - expand_mi, expand_mj) = tile_params(r_i, - r_j, - p_i, - p_j, - alpha_i, - alpha_j) + (expand_r_i, expand_r_j, expand_p_i, expand_p_j, expand_alpha_i, expand_alpha_j, expand_mi, expand_mj) = ( + tile_params(r_i, r_j, p_i, p_j, alpha_i, alpha_j) + ) - A = (-2 * expand_alpha_j - (expand_p_j) ** 2 - + 4 * 1j * expand_alpha_j * expand_p_j * expand_r_j) + A = -2 * expand_alpha_j - (expand_p_j) ** 2 + 4 * 1j * expand_alpha_j * expand_p_j * expand_r_j - B = (-4 * 1j * expand_alpha_j * expand_p_j - - 8 * (expand_alpha_j) ** 2 * expand_r_j) + B = -4 * 1j * expand_alpha_j * expand_p_j - 8 * (expand_alpha_j) ** 2 * expand_r_j - C = 4 * expand_alpha_j ** 2 + C = 4 * expand_alpha_j**2 - D = (1j * expand_p_i * expand_r_i - 1j * expand_p_j * expand_r_j - - expand_alpha_i * expand_r_i ** 2 - expand_alpha_j * expand_r_j ** 2) + D = ( + 1j * expand_p_i * expand_r_i + - 1j * expand_p_j * expand_r_j + - expand_alpha_i * expand_r_i**2 + - expand_alpha_j * expand_r_j**2 + ) - E = (1j * expand_p_j - 1j * expand_p_i + 2 * expand_r_i * expand_alpha_i - + 2 * expand_r_j * expand_alpha_j) + E = 1j * expand_p_j - 1j * expand_p_i + 2 * expand_r_i * expand_alpha_i + 2 * expand_r_j * expand_alpha_j F = expand_alpha_i + expand_alpha_j # *** are we dividing by the right mass here?? - prefactor = ((2) ** 0.5 * (expand_alpha_i * expand_alpha_j) ** 0.25 - * (-hbar ** 2) / (2 * expand_mj)) + prefactor = (2) ** 0.5 * (expand_alpha_i * expand_alpha_j) ** 0.25 * (-(hbar**2)) / (2 * expand_mj) - main_term = (1 / (4 * F ** (5 / 2)) - * np.exp(D + E ** 2 / (4 * F)) - * (C * E ** 2 + 2 * (C + B * E) * F + 4 * A * F ** 2)) + main_term = 1 / (4 * F ** (5 / 2)) * np.exp(D + E**2 / (4 * F)) * (C * E**2 + 2 * (C + B * E) * F + 4 * A * F**2) # dimension N_I x N_J x N_at x 3 ke_vec = prefactor * main_term @@ -567,9 +466,7 @@ def nuc_ke(r_j, return ke -def elec_e(energies, - overlap, - mask): +def elec_e(energies, overlap, mask): """ Args: energies (torch.Tensor): n_ij dimensional tensor @@ -587,18 +484,9 @@ def elec_e(energies, return h_ij -def construct_ham(r_list, - p_list, - atom_nums, - m, - couple_dic, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys, - alpha_dic): +def construct_ham( + r_list, p_list, atom_nums, m, couple_dic, nbrs, gen_nbrs, batch_size, device, model, diabat_keys, alpha_dic +): """ This needs to be fixed -- need properly H term for adiabatic, and also nuclear kinetic energy @@ -617,39 +505,37 @@ def construct_ham(r_list, h_ad (np.array): Hamiltonian in adiabatic basis """ - num_states = int(couple_dic ** 0.5) + num_states = int(couple_dic**0.5) max_basis = max([r.shape[0] for r in r_list]) # padded, as different states have different number of # trj basis functions - h_d = torch.zeros(num_states, num_states, - max_basis, max_basis).numpy() + h_d = torch.zeros(num_states, num_states, max_basis, max_basis).numpy() - h_ad = torch.zeros(num_states, num_states, - max_basis, max_basis).numpy() + h_ad = torch.zeros(num_states, num_states, max_basis, max_basis).numpy() for key, sub_dic in couple_dic.items(): - i, j = key.split("_") couple_r = sub_dic["couple_r"] - results, dataset = get_engrad(r=couple_r, - atom_nums=atom_nums, - nbrs=nbrs, - gen_nbrs=gen_nbrs, - batch_size=batch_size, - device=device, - model=model, - diabat_keys=diabat_keys) + results, dataset = get_engrad( + r=couple_r, + atom_nums=atom_nums, + nbrs=nbrs, + gen_nbrs=gen_nbrs, + batch_size=batch_size, + device=device, + model=model, + diabat_keys=diabat_keys, + ) mask = sub_dic["couple_mask"] # numpy array overlap = sub_dic["overlap"] # numpy array (complex) # h_d_ij = torch.zeros_like(overlap).numpy() - alpha_j = torch.Tensor([alpha_dic[atom_num] - for atom_num in atom_nums]) + alpha_j = torch.Tensor([alpha_dic[atom_num] for atom_num in atom_nums]) alpha_i = copy.deepcopy(alpha_j) r_j = r_list[j] @@ -659,17 +545,9 @@ def construct_ham(r_list, p_i = p_list[i] if i == j: - # nuclear kinetic energy component - h_ad_ij = nuc_ke(r_j, - p_j, - alpha_j, - r_i, - p_i, - alpha_i, - mask, - m) + h_ad_ij = nuc_ke(r_j, p_j, alpha_j, r_i, p_i, alpha_i, mask, m) h_d_ij = copy.deepcopy(h_ad_ij) @@ -678,36 +556,24 @@ def construct_ham(r_list, ad_key = f"energy_{i}" diabat_key = diabat_keys[i][j] - h_ad_ij += elec_e(results[ad_key], - overlap, - mask) + h_ad_ij += elec_e(results[ad_key], overlap, mask) - h_d_ij += elec_e(results[diabat_key], - overlap, - mask) + h_d_ij += elec_e(results[diabat_key], overlap, mask) else: - # The off-diagonal Hamiltonian in the adiabatic # basis involves the non-adiabatic coupling vector nacv = results[f"nacv_{i}{j}"] - h_ad_ij = nonad_ham_ij(couple_r=couple_r, - nacv=nacv, - overlap=overlap, - mask=mask, - alpha_j=alpha_j, - r_j=r_j, - p_j=p_j, - m=m) + h_ad_ij = nonad_ham_ij( + couple_r=couple_r, nacv=nacv, overlap=overlap, mask=mask, alpha_j=alpha_j, r_j=r_j, p_j=p_j, m=m + ) # The off-diagonal Hamiltonian in the diabatic # basis is the diabatic eletronic energy diabat_key = diabat_keys[i][j] - h_d_ij = elec_e(results[diabat_key], - overlap, - mask) + h_d_ij = elec_e(results[diabat_key], overlap, mask) N_I, N_J = overlap.shape[:2] h_d[i, j, :N_I, :N_J] = h_d_ij @@ -716,26 +582,23 @@ def construct_ham(r_list, return h_d, h_ad -def diabat_spawn_criterion(states, - results, - diabat_keys, - threshold): +def diabat_spawn_criterion(states, results, diabat_keys, threshold): """ - Args: + Args: - results_list (list[dict]): list of dictionaries. Each - dictionary corresponds to an electronic state. - It contains model predictions for the - positions of the nuclear wave packets on - that state. - Returns: - thresh_dic (dict): dictionary with keys for each state, - the value of which is a subdictionary. The subdictionary - contains keys for each other state. Say we're looking at - main key i and subdictionary key j. Then thresh_dic[i][j] - is a boolean tensor of dimension N_I. For each Gaussian - basis function in state i, it tells you whether you should - replicate it on state j. + results_list (list[dict]): list of dictionaries. Each + dictionary corresponds to an electronic state. + It contains model predictions for the + positions of the nuclear wave packets on + that state. + Returns: + thresh_dic (dict): dictionary with keys for each state, + the value of which is a subdictionary. The subdictionary + contains keys for each other state. Say we're looking at + main key i and subdictionary key j. Then thresh_dic[i][j] + is a boolean tensor of dimension N_I. For each Gaussian + basis function in state i, it tells you whether you should + replicate it on state j. """ @@ -768,28 +631,25 @@ def diabat_spawn_criterion(states, return thresh_dic -def adiabat_spawn_criterion(states, - results, - v_list, - threshold): +def adiabat_spawn_criterion(states, results, v_list, threshold): """ - Args: + Args: - results_list (list[dict]): list of dictionaries. Each - dictionary corresponds to an electronic state. - It contains model predictions for the - positions of the nuclear wave packets on - that state. - v_list (list[torch.Tensor]): list of velocities for wave - packets on each state. - Returns: - thresh_dic (dict): dictionary with keys for each state, - the value of which is a subdictionary. The subdictionary - contains keys for each other state. Say we're looking at - main key i and subdictionary key j. Then thresh_dic[i][j] - is a boolean tensor of dimension N_I. For each Gaussian - basis function in state i, it tells you whether you should - replicate it on state j. + results_list (list[dict]): list of dictionaries. Each + dictionary corresponds to an electronic state. + It contains model predictions for the + positions of the nuclear wave packets on + that state. + v_list (list[torch.Tensor]): list of velocities for wave + packets on each state. + Returns: + thresh_dic (dict): dictionary with keys for each state, + the value of which is a subdictionary. The subdictionary + contains keys for each other state. Say we're looking at + main key i and subdictionary key j. Then thresh_dic[i][j] + is a boolean tensor of dimension N_I. For each Gaussian + basis function in state i, it tells you whether you should + replicate it on state j. """ @@ -813,17 +673,12 @@ def adiabat_spawn_criterion(states, # Effective coupling h_eff = (vel * nacv).sum() - thresh_dic[i][j] = {"criterion": (abs(h_eff) > threshold).any(), - "val": h_eff.norm()} + thresh_dic[i][j] = {"criterion": (abs(h_eff) > threshold).any(), "val": h_eff.norm()} return thresh_dic -def get_vals(diabatic, - surf, - diabat_keys, - results): - +def get_vals(diabatic, surf, diabat_keys, results): i = surf if diabatic: en_key = diabat_keys[i][i] @@ -837,29 +692,27 @@ def get_vals(diabatic, return en, en_grad -def nuc_classical(r, - gamma, - m, - atom_num, - p, - nbrs, - gen_nbrs, - batch_size, - device, - model, - states, - diabat_keys, - diabatic, - dt, - surf, - old_results): - +def nuc_classical( + r, + gamma, + m, + atom_num, + p, + nbrs, + gen_nbrs, + batch_size, + device, + model, + states, + diabat_keys, + diabatic, + dt, + surf, + old_results, +): # classical propagation of nuclei - old_en, old_grad = get_vals(diabatic=diabatic, - surf=surf, - diabat_keys=diabat_keys, - results=old_results) + old_en, old_grad = get_vals(diabatic=diabatic, surf=surf, diabat_keys=diabat_keys, results=old_results) # note: we need a p + 1/2 dt and a p + 3/2 dt # The p that we keep track of will always be 1/2 dt @@ -874,19 +727,9 @@ def nuc_classical(r, # m has dim N_at r_new = r + 1 / m.reshape(1, -1, 1) * dt * p - results, dataset = get_engrad(r_new, - atom_num, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys) + results, dataset = get_engrad(r_new, atom_num, nbrs, gen_nbrs, batch_size, device, model, diabat_keys) - new_en, new_grad = get_vals(diabatic=diabatic, - surf=surf, - diabat_keys=diabat_keys, - results=results) + new_en, new_grad = get_vals(diabatic=diabatic, surf=surf, diabat_keys=diabat_keys, results=results) p_new = p - new_grad * dt @@ -896,24 +739,25 @@ def nuc_classical(r, return r_new, p_new, gamma_new, results -def find_spawn(r, - gamma, - m, - atom_num, - p, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys, - diabatic, - dt, - new_surf, - old_results, - old_surf, - threshold): - +def find_spawn( + r, + gamma, + m, + atom_num, + p, + nbrs, + gen_nbrs, + batch_size, + device, + model, + diabat_keys, + diabatic, + dt, + new_surf, + old_results, + old_surf, + threshold, +): # classical propagation too_big = False @@ -929,38 +773,34 @@ def find_spawn(r, while too_big: # this is right: keep propagating along the old surface - r_new, p_new, gamma_new, new_results = nuc_classical(r_new, - gamma_new, - m, - atom_num, - p_new, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys, - diabatic, - dt, - old_surf, - old_results) + r_new, p_new, gamma_new, new_results = nuc_classical( + r_new, + gamma_new, + m, + atom_num, + p_new, + nbrs, + gen_nbrs, + batch_size, + device, + model, + diabat_keys, + diabatic, + dt, + old_surf, + old_results, + ) states = [old_surf, new_surf] if diabatic: - spawn_dic = diabat_spawn_criterion(states, - new_results, - diabat_keys, - threshold) + spawn_dic = diabat_spawn_criterion(states, new_results, diabat_keys, threshold) else: - spawn_dic = adiabat_spawn_criterion(states, - new_results, - v_list, - threshold) + spawn_dic = adiabat_spawn_criterion(states, new_results, v_list, threshold) - coupling = spawn_dic[old_surf][new_surf]['val'] + coupling = spawn_dic[old_surf][new_surf]["val"] couplings.append(coupling) - too_big = spawn_dic[old_surf][new_surf]['criterion'] + too_big = spawn_dic[old_surf][new_surf]["criterion"] r_list.append(r_new) p_list.append(p_new) @@ -980,21 +820,15 @@ def find_spawn(r, return spawn_r, spawn_p, spawn_idx, old_results_list -def rescale(p_new, - m, - diabatic, - results, - old_surf, - new_surf): - +def rescale(p_new, m, diabatic, results, old_surf, new_surf): if diabatic: raise NotImplementedError else: # p has dimension N_J x N_at x 3 # nacv has dimension N_J x N_at x 3 - nacv = results[f'nacv_{old_surf}{new_surf}'] - norm = (nacv ** 2).sum(-1) ** 0.5 + nacv = results[f"nacv_{old_surf}{new_surf}"] + norm = (nacv**2).sum(-1) ** 0.5 nacv_unit = nacv / norm # dot product @@ -1002,8 +836,7 @@ def rescale(p_new, # p_parallel N_J, N_at = projection.shape - p_par = (projection.reshape(N_J, N_at, 1) - * nacv_unit) + p_par = projection.reshape(N_J, N_at, 1) * nacv_unit # p perpendicular p_perp = p_new - p_par @@ -1012,11 +845,11 @@ def rescale(p_new, # m has shape N_at # is this right? - t_old = (p_new ** 2 / (2 * m.reshape(1, -1, 1))).sum() - t_old_perp = (p_perp ** 2 / (2 * m.reshape(1, -1, 1))).sum() - t_old_par = (p_par ** 2 / (2 * m.reshape(1, -1, 1))).sum() - v_old = results[f'energy_{old_surf}'] - v_new = results[f'energy_{new_surf}'] + t_old = (p_new**2 / (2 * m.reshape(1, -1, 1))).sum() + t_old_perp = (p_perp**2 / (2 * m.reshape(1, -1, 1))).sum() + t_old_par = (p_par**2 / (2 * m.reshape(1, -1, 1))).sum() + v_old = results[f"energy_{old_surf}"] + v_new = results[f"energy_{new_surf}"] # re-scale p_parallel # not 100% sure if this is right @@ -1028,33 +861,34 @@ def rescale(p_new, # potential energy return None - scale = scale_sq ** 0.5 + scale = scale_sq**0.5 new_p = p_par * scale + p_perp return new_p -def backward_prop(spawn_r, - spawn_p, - spawn_gamma, - spawn_idx, - m, - atom_num, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys, - diabatic, - dt, - new_surf, - old_results_list, - old_surf, - threshold, - dr): - +def backward_prop( + spawn_r, + spawn_p, + spawn_gamma, + spawn_idx, + m, + atom_num, + nbrs, + gen_nbrs, + batch_size, + device, + model, + diabat_keys, + diabatic, + dt, + new_surf, + old_results_list, + old_surf, + threshold, + dr, +): num_steps = spawn_idx old_results = old_results_list[spawn_idx] @@ -1062,48 +896,46 @@ def backward_prop(spawn_r, p_new = copy.deepcopy(spawn_p) # re-scale the momentum along the nacv # to ensure energy conservation - p_new = rescale(p_new=p_new, - m=m, - diabatic=diabatic, - results=old_results, - old_surf=old_surf, - new_surf=new_surf) + p_new = rescale(p_new=p_new, m=m, diabatic=diabatic, results=old_results, old_surf=old_surf, new_surf=new_surf) if p_new is None: - - grad = old_results[f'energy_{new_surf}_grad'] + grad = old_results[f"energy_{new_surf}_grad"] r_new = spawn_r - grad * dr - new_results = get_engrad(r_new=r_new, - atom_num=atom_num, - nbrs=nbrs, - gen_nbrs=gen_nbrs, - batch_size=batch_size, - device=device, - model=model, - diabat_keys=diabat_keys) + new_results = get_engrad( + r_new=r_new, + atom_num=atom_num, + nbrs=nbrs, + gen_nbrs=gen_nbrs, + batch_size=batch_size, + device=device, + model=model, + diabat_keys=diabat_keys, + ) old_results_list[spawn_idx] = new_results - return backward_prop(r_new, - spawn_p, - spawn_gamma, - spawn_idx, - m, - atom_num, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys, - diabatic, - dt, - new_surf, - old_results_list, - old_surf, - threshold, - dr) + return backward_prop( + r_new, + spawn_p, + spawn_gamma, + spawn_idx, + m, + atom_num, + nbrs, + gen_nbrs, + batch_size, + device, + model, + diabat_keys, + diabatic, + dt, + new_surf, + old_results_list, + old_surf, + threshold, + dr, + ) gamma_new = copy.deepcopy(spawn_gamma) @@ -1114,21 +946,23 @@ def backward_prop(spawn_r, for _ in range(num_steps): # I don't think just replacing it with -dt is right - don't # we have to replace the forces with their negative values? - r_new, p_new, gamma_new, new_results = nuc_classical(r_new, - gamma_new, - m, - atom_num, - p_new, - nbrs, - gen_nbrs, - batch_size, - device, - model, - diabat_keys, - diabatic, - (-dt), - new_surf, - old_results) + r_new, p_new, gamma_new, new_results = nuc_classical( + r_new, + gamma_new, + m, + atom_num, + p_new, + nbrs, + gen_nbrs, + batch_size, + device, + model, + diabat_keys, + diabatic, + (-dt), + new_surf, + old_results, + ) old_results = new_results return r_new, p_new diff --git a/nff/md/ci/opt.py b/nff/md/ci/opt.py index 4791923b..58c57225 100644 --- a/nff/md/ci/opt.py +++ b/nff/md/ci/opt.py @@ -39,7 +39,6 @@ from ase.calculators.calculator import Calculator from ase import Atoms, optimize, units import numpy as np -import random import pdb import json import copy @@ -344,7 +343,6 @@ def test(): # weightpath = "/home/saxelrod/engaging/models/971" weightpath = "/home/saxelrod/engaging/models/953" nxyz = BASE_NXYZ - penalty = 0.5 # atoms = opt_ci(weightpath=weightpath, nxyz=nxyz, # penalty=penalty) diff --git a/nff/md/colvars.py b/nff/md/colvars.py index 4c216b5d..02291136 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -1,9 +1,8 @@ from torch import nn from itertools import repeat from torch.nn import ModuleDict -from typing import Union, Tuple +from typing import Union import itertools as itertools -import os import numpy as np import torch @@ -17,20 +16,25 @@ class ColVar(torch.nn.Module): """collective variable class - computes cv and its Cartesian gradient + computes cv and its Cartesian gradient """ - implemented_cvs = ['distance', 'angle', 'dihedral', - 'coordination_number', 'coordination', - 'minimal_distance', - 'projecting_centroidvec', - 'projecting_veconplane', - 'projecting_veconplanenormal', - 'projection_channelnormal', - 'Sp', 'Sd', - 'adjecencey_matrix', - 'energy_gap' - ] + implemented_cvs = [ + "distance", + "angle", + "dihedral", + "coordination_number", + "coordination", + "minimal_distance", + "projecting_centroidvec", + "projecting_veconplane", + "projecting_veconplanenormal", + "projection_channelnormal", + "Sp", + "Sd", + "adjecencey_matrix", + "energy_gap", + ] def __init__(self, info_dict: dict): """initialization of many class variables to avoid recurrent assignment @@ -43,69 +47,67 @@ def __init__(self, info_dict: dict): super(ColVar, self).__init__() self.info_dict = info_dict - if 'name' not in info_dict.keys(): - raise TypeError("CV definition is missing the key \"name\"!") + if "name" not in info_dict.keys(): + raise TypeError('CV definition is missing the key "name"!') - if self.info_dict['name'] not in self.implemented_cvs: + if self.info_dict["name"] not in self.implemented_cvs: raise NotImplementedError(f"The CV {self.info_dict['name']} is not implemented!") - if self.info_dict['name'] == 'Sp': - self.Oacid = torch.tensor(self.info_dict['x']) - self.Owater = torch.tensor(self.info_dict['y']) - self.H = torch.tensor(self.info_dict['z']) - self.Box = torch.tensor(self.info_dict.get('box', None)) + if self.info_dict["name"] == "Sp": + self.Oacid = torch.tensor(self.info_dict["x"]) + self.Owater = torch.tensor(self.info_dict["y"]) + self.H = torch.tensor(self.info_dict["z"]) + self.Box = torch.tensor(self.info_dict.get("box", None)) self.O = torch.cat((Oacid, Owater)) - self.do = self.info_dict['dcv1'] - self.d = self.info_dict['dcv2'] - self.ro = self.info_dict['acidhyd'] - self.r1 = self.info_dict['waterhyd'] - - elif self.info_dict['name'] == 'Sd': - self.Oacid = torch.tensor(self.info_dict['x']) - self.Owater = torch.tensor(self.info_dict['y']) - self.H = torch.tensor(self.info_dict['z']) - self.Box = torch.tensor(self.info_dict.get('box', None)) + self.do = self.info_dict["dcv1"] + self.d = self.info_dict["dcv2"] + self.ro = self.info_dict["acidhyd"] + self.r1 = self.info_dict["waterhyd"] + + elif self.info_dict["name"] == "Sd": + self.Oacid = torch.tensor(self.info_dict["x"]) + self.Owater = torch.tensor(self.info_dict["y"]) + self.H = torch.tensor(self.info_dict["z"]) + self.Box = torch.tensor(self.info_dict.get("box", None)) self.O = torch.cat((Oacid, Owater)) - self.do = self.info_dict['dcv1'] - self.d = self.info_dict['dcv2'] - self.ro = self.info_dict['acidhyd'] - self.r1 = self.info_dict['waterhyd'] - - elif self.info_dict['name'] == 'adjecencey_matrix': - self.model = self.info_dict['model'] - self.device = self.info_dict['device'] - self.bond_length = self.info_dict['bond_length'] - self.cell = self.info_dict.get('box', None) - self.atom_numbers = torch.tensor(self.info_dict['atom_numbers']) - self.target = self.info_dict['target'] + self.do = self.info_dict["dcv1"] + self.d = self.info_dict["dcv2"] + self.ro = self.info_dict["acidhyd"] + self.r1 = self.info_dict["waterhyd"] + + elif self.info_dict["name"] == "adjecencey_matrix": + self.model = self.info_dict["model"] + self.device = self.info_dict["device"] + self.bond_length = self.info_dict["bond_length"] + self.cell = self.info_dict.get("box", None) + self.atom_numbers = torch.tensor(self.info_dict["atom_numbers"]) + self.target = self.info_dict["target"] self.model = self.model.to(self.device) self.model.eval() - elif self.info_dict['name'] == 'projecting_centroidvec': - self.vector_inds = self.info_dict['vector'] - self.mol_inds = torch.LongTensor(self.info_dict['indices']) - self.reference_inds = self.info_dict['reference'] - - elif self.info_dict['name'] == 'projecting_veconplane': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) - self.ring_inds = torch.LongTensor(self.info_dict['ring_inds']) - - elif self.info_dict['name'] == 'projecting_veconplanenormal': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) - self.ring_inds = torch.LongTensor(self.info_dict['ring_inds']) - - elif self.info_dict['name'] == 'projection_channelnormal': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) - self.g1_inds = torch.LongTensor(self.info_dict['g1_inds']) - self.g2_inds = torch.LongTensor(self.info_dict['g2_inds']) - - elif self.info_dict['name'] == 'energy_gap': - self.device = self.info_dict['device'] - path = self.info_dict['path'] - model_type = self.info_dict['model_type'] - self.model = load_model(path, - model_type=model_type, - device=self.device) + elif self.info_dict["name"] == "projecting_centroidvec": + self.vector_inds = self.info_dict["vector"] + self.mol_inds = torch.LongTensor(self.info_dict["indices"]) + self.reference_inds = self.info_dict["reference"] + + elif self.info_dict["name"] == "projecting_veconplane": + self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) + self.ring_inds = torch.LongTensor(self.info_dict["ring_inds"]) + + elif self.info_dict["name"] == "projecting_veconplanenormal": + self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) + self.ring_inds = torch.LongTensor(self.info_dict["ring_inds"]) + + elif self.info_dict["name"] == "projection_channelnormal": + self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) + self.g1_inds = torch.LongTensor(self.info_dict["g1_inds"]) + self.g2_inds = torch.LongTensor(self.info_dict["g2_inds"]) + + elif self.info_dict["name"] == "energy_gap": + self.device = self.info_dict["device"] + path = self.info_dict["path"] + model_type = self.info_dict["model_type"] + self.model = load_model(path, model_type=model_type, device=self.device) self.model = self.model.to(self.device) self.model.eval() @@ -131,8 +133,7 @@ def _get_com(self, indices: Union[int, list]) -> torch.tensor: return com - def distance(self, - index_list: list[Union[int, list]]) -> torch.tensor: + def distance(self, index_list: list[Union[int, list]]) -> torch.tensor: """distance between two mass centers in range(0, inf) Args: distance beteen atoms: [ind0, ind1] @@ -141,9 +142,7 @@ def distance(self, cv (torch.tensor): computed distance """ if len(index_list) != 2: - raise ValueError( - "CV ERROR: Invalid number of centers in definition of distance!" - ) + raise ValueError("CV ERROR: Invalid number of centers in definition of distance!") p1 = self._get_com(index_list[0]) p2 = self._get_com(index_list[1]) @@ -154,8 +153,7 @@ def distance(self, return cv - def angle(self, - index_list: list[Union[int, list]]) -> torch.tensor: + def angle(self, index_list: list[Union[int, list]]) -> torch.tensor: """get angle between three mass centers in range(-pi,pi) Args: index_list @@ -165,9 +163,7 @@ def angle(self, cv (torch.tensor): computed angle """ if len(index_list) != 3: - raise ValueError( - "CV ERROR: Invalid number of centers in definition of angle!" - ) + raise ValueError("CV ERROR: Invalid number of centers in definition of angle!") p1 = self._get_com(index_list[0]) p2 = self._get_com(index_list[1]) @@ -187,8 +183,7 @@ def angle(self, return cv - def dihedral(self, - index_list: list[Union[int, list]]) -> torch.tensor: + def dihedral(self, index_list: list[Union[int, list]]) -> torch.tensor: """torsion angle between four mass centers in range(-pi,pi) Params: self.info_dict['index_list'] @@ -201,9 +196,7 @@ def dihedral(self, cv (float): computed torsional angle """ if len(index_list) != 4: - raise ValueError( - "CV ERROR: Invalid number of centers in definition of dihedral!" - ) + raise ValueError("CV ERROR: Invalid number of centers in definition of dihedral!") p1 = self._get_com(index_list[0]) p2 = self._get_com(index_list[1]) @@ -224,9 +217,7 @@ def dihedral(self, return cv - def coordination_number(self, - index_list: list[int], - switch_distance: float) -> torch.tensor: + def coordination_number(self, index_list: list[int], switch_distance: float) -> torch.tensor: """coordination number between two atoms in range(0, 1) Args: distance between atoms: [ind00, ind01] @@ -235,19 +226,15 @@ def coordination_number(self, cv (torch.tensor): computed distance """ if len(index_list) != 2: - raise ValueError( - "CV ERROR: Invalid number of atom in definition of coordination_number!" - ) + raise ValueError("CV ERROR: Invalid number of atom in definition of coordination_number!") scaled_distance = self.distance(index_list) / switch_distance - cv = (1. - scaled_distance.pow(6)) / ((1. - scaled_distance.pow(12))) + cv = (1.0 - scaled_distance.pow(6)) / (1.0 - scaled_distance.pow(12)) return cv - def coordination(self, - index_list: list[list[int]], - switch_distance: float) -> torch.tensor: + def coordination(self, index_list: list[list[int]], switch_distance: float) -> torch.tensor: """sum of coordination numbers between two sets of atoms in range(0, 1) Args: distance between atoms: [[ind00, ind01, ...], [ind10, ind11, ...]] @@ -256,9 +243,7 @@ def coordination(self, cv (torch.tensor): computed distance """ if len(index_list) != 2: - raise ValueError( - "CV ERROR: Invalid number of atom lists in definition of coordination_number!" - ) + raise ValueError("CV ERROR: Invalid number of atom lists in definition of coordination_number!") cv = torch.tensor(0.0) @@ -267,8 +252,7 @@ def coordination(self, return cv - def minimal_distance(self, - index_list: list[list[int]]) -> torch.tensor: + def minimal_distance(self, index_list: list[list[int]]) -> torch.tensor: """minimal distance between two sets of atoms Args: distance between atoms: [[ind00, ind01, ...], [ind10, ind11, ...]] @@ -276,9 +260,7 @@ def minimal_distance(self, cv (torch.tensor): computed distance """ if len(index_list) != 2: - raise ValueError( - "CV ERROR: Invalid number of atom lists in definition of minimal_distance!" - ) + raise ValueError("CV ERROR: Invalid number of atom lists in definition of minimal_distance!") distances = torch.zeros(len(index_list[0]) * len(index_list[1])) @@ -289,16 +271,16 @@ def minimal_distance(self, def projecting_centroidvec(self): """ - Projection of a position vector onto a reference vector - Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - vector: list of int - List of the indices of atoms that define the vector on which the position vector is projected - indices: list if int - List of indices of the mol/fragment - reference: list of int - List of atomic indices that are used as reference for the position vector + Projection of a position vector onto a reference vector + Atomic indices are used to determine the coordiantes of the vectors. + Params + ------ + vector: list of int + List of the indices of atoms that define the vector on which the position vector is projected + indices: list if int + List of indices of the mol/fragment + reference: list of int + List of atomic indices that are used as reference for the position vector """ vector_pos = self.xyz[self.vector_inds] vector = vector_pos[1] - vector_pos[0] @@ -371,7 +353,7 @@ def projecting_veconplanenormal(self): ring_coors = self.xyz[self.ring_inds] mol_cm = mol_coors.mean(axis=0) # mol center -# mol_cm = self._get_com(self.mol_inds) + # mol_cm = self._get_com(self.mol_inds) ring_cm = ring_coors.mean(axis=0) # ring center # ring atoms to center, center of geometry! ring_coors = ring_coors - ring_cm @@ -412,7 +394,7 @@ def projection_channelnormal(self): List of atomic indices denoting "end" of channel """ - mol_coors = self.xyz[self.mol_inds] + self.xyz[self.mol_inds] g1_coors = self.xyz[self.g1_inds] g2_coors = self.xyz[self.g2_inds] @@ -428,25 +410,22 @@ def projection_channelnormal(self): return cv def adjacency_matrix_cv(self): - """Docstring - """ - edges, atomslist, Natoms, adjacency_matrix = get_adjacency_matrix(self.xyz, - self.atom_numbers, - self.bond_length, - cell=self.cell, - device=self.device) + """Docstring""" + edges, atomslist, Natoms, adjacency_matrix = get_adjacency_matrix( + self.xyz, self.atom_numbers, self.bond_length, cell=self.cell, device=self.device + ) pred = self.model(atomslist, edges, Natoms, adjacency_matrix)[0] rmsd = (pred - self.target).norm() - cv = rmsd.to('cpu').view(-1, 1) + cv = rmsd.to("cpu").view(-1, 1) return cv def deproton1(self): - """ Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 - https://www.pnas.org/doi/10.1073/pnas.1819771116 + """Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 + https://www.pnas.org/doi/10.1073/pnas.1819771116 - Sp describes the proton exchange between acid-base pairs + Sp describes the proton exchange between acid-base pairs """ dis_mat = self.xyz[None, :, :] - self.xyz[:, None, :] @@ -463,17 +442,17 @@ def deproton1(self): dis1 = dis_sq[self.Oacid, :][:, self.Owater] cvmatrix = torch.exp(-self.do * dis) cvmatrix = cvmatrix / cvmatrix.sum(0) - cvmatrixw = cvmatrix[self.Oacid.shape[0]:].sum(-1) - self.r1 - cvmatrix = cvmatrix[:self.Oacid.shape[0]].sum(-1) - self.ro + cvmatrixw = cvmatrix[self.Oacid.shape[0] :].sum(-1) - self.r1 + cvmatrix = cvmatrix[: self.Oacid.shape[0]].sum(-1) - self.ro cv1 = 2 * cvmatrix.sum() + cvmatrixw.sum() return cv1 def deproton2(self): - """ Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 - https://www.pnas.org/doi/10.1073/pnas.1819771116 + """Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 + https://www.pnas.org/doi/10.1073/pnas.1819771116 - Sd describes tge distance between acid-base pairs + Sd describes tge distance between acid-base pairs """ dis_mat = self.xyz[None, :, :] - self.xyz[:, None, :] @@ -491,9 +470,9 @@ def deproton2(self): cvmatrix = cvmatrix / cvmatrix.sum(0) cvmatrixx = torch.exp(-self.d * dis) cvmatrixx = cvmatrixx / cvmatrixx.sum(0) - cvmatrixw = cvmatrixx[self.Oacid.shape[0]:].sum(-1) - self.r1 - cvmatrix = cvmatrixx[:self.Oacid.shape[0]].sum(-1) - self.ro - cvmatrix1 = torch.cat((cvmatrix, cvmatrixw)) + cvmatrixw = cvmatrixx[self.Oacid.shape[0] :].sum(-1) - self.r1 + cvmatrix = cvmatrixx[: self.Oacid.shape[0]].sum(-1) - self.ro + torch.cat((cvmatrix, cvmatrixw)) cvmatrix2 = torch.matmul(cvmatrix.view(1, -1).t(), cvmatrixw.view(1, -1)) cvmatrix2 = -cvmatrix2 * dis1 cv2 = cvmatrix2.sum() @@ -517,78 +496,77 @@ def energy_gap(self, enkey1, enkey2): e_diff = energy_2 - energy_1 cv = torch.abs(e_diff) - cv_grad = pred[enkey2 + '_grad'] - pred[enkey1 + '_grad'] + cv_grad = pred[enkey2 + "_grad"] - pred[enkey1 + "_grad"] if e_diff < 0: cv_grad *= -1.0 return cv, cv_grad def forward(self, atoms): - """switch function to call the right CV-func - """ + """switch function to call the right CV-func""" self.xyz = torch.from_numpy(atoms.get_positions()) self.xyz.requires_grad = True self.atoms = atoms - if self.info_dict['name'] == 'distance': - cv = self.distance(self.info_dict['index_list']) + if self.info_dict["name"] == "distance": + cv = self.distance(self.info_dict["index_list"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'angle': - cv = self.angle(self.info_dict['index_list']) + elif self.info_dict["name"] == "angle": + cv = self.angle(self.info_dict["index_list"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'dihedral': - cv = self.dihedral(self.info_dict['index_list']) + elif self.info_dict["name"] == "dihedral": + cv = self.dihedral(self.info_dict["index_list"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'coordination_number': - cv = self.coordination_number(self.info_dict['index_list'], self.info_dict['switching_dist']) + elif self.info_dict["name"] == "coordination_number": + cv = self.coordination_number(self.info_dict["index_list"], self.info_dict["switching_dist"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'coordination': - cv = self.coordination(self.info_dict['index_list'], self.info_dict['switching_dist']) + elif self.info_dict["name"] == "coordination": + cv = self.coordination(self.info_dict["index_list"], self.info_dict["switching_dist"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'minimal_distance': - cv = self.minimal_distance(self.info_dict['index_list']) + elif self.info_dict["name"] == "minimal_distance": + cv = self.minimal_distance(self.info_dict["index_list"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'projecting_centroidvec': + elif self.info_dict["name"] == "projecting_centroidvec": cv = self.projecting_centroidvec() cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'projecting_veconplane': + elif self.info_dict["name"] == "projecting_veconplane": cv = self.projecting_veconplane() cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'projecting_veconplanenormal': + elif self.info_dict["name"] == "projecting_veconplanenormal": cv = self.projecting_veconplanenormal() cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'projection_channelnormal': + elif self.info_dict["name"] == "projection_channelnormal": cv = self.projection_channelnormal() cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'Sp': + elif self.info_dict["name"] == "Sp": cv = self.deproton1() cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'Sd': + elif self.info_dict["name"] == "Sd": cv = self.deproton2() cv_grad = compute_grad(inputs=self.xyz, output=cv) - elif self.info_dict['name'] == 'energy_gap': - cv, cv_grad = self.energy_gap(self.info_dict['enkey_1'], self.info_dict['enkey_2']) + elif self.info_dict["name"] == "energy_gap": + cv, cv_grad = self.energy_gap(self.info_dict["enkey_1"], self.info_dict["enkey_2"]) return cv.detach().cpu().numpy(), cv_grad.detach().cpu().numpy() # implement SMILES to graph function def smiles2graph(smiles): - ''' + """ Transfrom smiles into a list nodes (atomic number) Args: @@ -596,7 +574,7 @@ def smiles2graph(smiles): return: z(np.array), A (np.array): list of atomic numbers, adjancency matrix - ''' + """ mol = Chem.MolFromSmiles(smiles) # no hydrogen z = np.array([atom.GetAtomicNum() for atom in mol.GetAtoms()]) @@ -606,13 +584,8 @@ def smiles2graph(smiles): class GraphDataset(torch.utils.data.Dataset): - def __init__(self, - AtomicNum_list, - Edge_list, - Natom_list, - Adjacency_matrix_list - ): - ''' + def __init__(self, AtomicNum_list, Edge_list, Natom_list, Adjacency_matrix_list): + """ GraphDataset object Args: @@ -621,7 +594,7 @@ def __init__(self, N_list (list of int) - ''' + """ self.AtomicNum_list = AtomicNum_list # atomic number self.Edge_list = Edge_list # edge list self.Natom_list = Natom_list # Number of atoms @@ -631,7 +604,6 @@ def __len__(self): return len(self.Natom_list) def __getitem__(self, idx): - AtomicNum = torch.LongTensor(self.AtomicNum_list[idx]) Edge = torch.LongTensor(self.Edge_list[idx]) Natom = self.Natom_list[idx] @@ -641,7 +613,7 @@ def __getitem__(self, idx): def collate_graphs(batch): - '''Batch multiple graphs into one batched graph + """Batch multiple graphs into one batched graph Args: @@ -650,7 +622,7 @@ def collate_graphs(batch): Return (tuple): Batched AtomicNum, Edge, Natom - ''' + """ AtomicNum_batch = [] Edge_batch = [] @@ -677,10 +649,10 @@ def collate_graphs(batch): def scatter_add(src, index, dim_size, dim=-1, fill_value=0): - ''' + """ Sums all values from the src tensor into out at the indices specified in the index tensor along a given axis dim. - ''' + """ index_size = list(repeat(1, src.dim())) index_size[dim] = src.size(dim) @@ -696,9 +668,9 @@ def scatter_add(src, index, dim_size, dim=-1, fill_value=0): class GNN(torch.nn.Module): - ''' - A GNN model - ''' + """ + A GNN model + """ def __init__(self, n_convs=3, n_embed=64): super(GNN, self).__init__() @@ -706,14 +678,16 @@ def __init__(self, n_convs=3, n_embed=64): # Declare MLPs in a ModuleList self.convolutions = nn.ModuleList( [ - ModuleDict({ - 'update_mlp': nn.Sequential(nn.Linear(n_embed, n_embed), - nn.ReLU(), - nn.Linear(n_embed, n_embed)), - 'message_mlp': nn.Sequential(nn.Linear(n_embed, n_embed), - nn.ReLU(), - nn.Linear(n_embed, n_embed)) - }) + ModuleDict( + { + "update_mlp": nn.Sequential( + nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, n_embed) + ), + "message_mlp": nn.Sequential( + nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, n_embed) + ), + } + ) for _ in range(n_convs) ] ) @@ -743,17 +717,13 @@ def adjfunc(x, m, s): def gauss(x, m, s, a, b): # return torch.exp(-abs((x-m)/2*s)**p) - G = (1 + (2**(a / b) - 1) * abs((x - m) / s)**a)**(-b / a) + G = (1 + (2 ** (a / b) - 1) * abs((x - m) / s) ** a) ** (-b / a) G[torch.where(x < m)] = 1 return G -def get_adjacency_matrix(xyz, atom_numbers, bond_length, oxygeninvolved, cell=None, device='cpu'): - d = 1 - p = 3 - m = 6 - n = 12 - types = list(set(atom_numbers)) +def get_adjacency_matrix(xyz, atom_numbers, bond_length, oxygeninvolved, cell=None, device="cpu"): + list(set(atom_numbers)) dis_mat = xyz[None, :, :] - xyz[:, None, :] if cell is not None: cell_dim = torch.tensor(np.diag(cell)) @@ -763,23 +733,25 @@ def get_adjacency_matrix(xyz, atom_numbers, bond_length, oxygeninvolved, cell=No dis_mat = dis_mat + offsets * cell_dim dis_sq = dis_mat.norm(dim=-1) bondlen = torch.ones(dis_sq.shape) - bondlen[torch.where(atom_numbers == 8)[0], torch.where(atom_numbers == 14)[0].view(-1, 1)] = bond_length['8-14'] - bondlen[torch.where(atom_numbers == 14)[0], torch.where(atom_numbers == 8)[0].view(-1, 1)] = bond_length['14-8'] - bondlen[torch.where(atom_numbers == 8)[0], torch.where(atom_numbers == 1)[0].view(-1, 1)] = bond_length['8-1'] - bondlen[torch.where(atom_numbers == 1)[0], torch.where(atom_numbers == 8)[0].view(-1, 1)] = bond_length['1-8'] + bondlen[torch.where(atom_numbers == 8)[0], torch.where(atom_numbers == 14)[0].view(-1, 1)] = bond_length["8-14"] + bondlen[torch.where(atom_numbers == 14)[0], torch.where(atom_numbers == 8)[0].view(-1, 1)] = bond_length["14-8"] + bondlen[torch.where(atom_numbers == 8)[0], torch.where(atom_numbers == 1)[0].view(-1, 1)] = bond_length["8-1"] + bondlen[torch.where(atom_numbers == 1)[0], torch.where(atom_numbers == 8)[0].view(-1, 1)] = bond_length["1-8"] # adjacency=dis_sq-bondlen # adjacency=(dis_sq-0.0001)/bondlen # adjacency_matrix=torch.exp(-((torch.abs(adjacency)/d)**p)) # adjacency_matrix=(1-adjacency**m)/(1-adjacency**n) # adjacency_matrix=adjacency_matrix-torch.eye(adjacency_matrix.shape[0]) adjacency_matrix = gauss(dis_sq, bondlen, 0.5, 2, 2) - adjacency_matrix = adjacency_matrix[torch.where( - atom_numbers == 14)[0].view(-1, 1), torch.where(atom_numbers == 8)[0][oxygeninvolved]] + adjacency_matrix = adjacency_matrix[ + torch.where(atom_numbers == 14)[0].view(-1, 1), torch.where(atom_numbers == 8)[0][oxygeninvolved] + ] adjacency_matrix = torch.matmul(adjacency_matrix, adjacency_matrix.t()) adjacency_matrix = adjacency_matrix.fill_diagonal_(0) edges = torch.stack([i for i in torch.where(adjacency_matrix >= 0)]) - adjacency_matrix = adjacency_matrix[torch.where(adjacency_matrix >= 0)[ - 0], torch.where(adjacency_matrix >= 0)[1]].view(-1, 1) + adjacency_matrix = adjacency_matrix[ + torch.where(adjacency_matrix >= 0)[0], torch.where(adjacency_matrix >= 0)[1] + ].view(-1, 1) atomslist = torch.tensor([14 for i in torch.where(atom_numbers == 14)[0]]).view(-1) # molecules,edge_list,atom_list=get_molecules(xyz=xyz.detach(),atom_numbers=atom_numbers,bond_length=bond_length,periodic=False) # adjacency_matrix_list=[] @@ -787,11 +759,15 @@ def get_adjacency_matrix(xyz, atom_numbers, bond_length, oxygeninvolved, cell=No # for i,m in enumerate(molecules): # n=torch.tensor(m) # adjacency_matrix_list.append(adjacency_matrix[edge_list[i][0],edge_list[i][1]].view(-1,1)) - return torch.LongTensor(edges).to(device), torch.LongTensor(atomslist).to( - device), [(len(atomslist))], adjacency_matrix.float().to(device) + return ( + torch.LongTensor(edges).to(device), + torch.LongTensor(atomslist).to(device), + [(len(atomslist))], + adjacency_matrix.float().to(device), + ) -def get_molecules(atom, bond_length, mode='bond', periodic=True): +def get_molecules(atom, bond_length, mode="bond", periodic=True): types = list(set(atom.numbers)) xyz = atom.positions # A=np.lexsort((xyz[:,2],xyz[:,1],xyz[:,0])) @@ -808,12 +784,17 @@ def get_molecules(atom, bond_length, mode='bond', periodic=True): mm = max(clusters) ty = atom.numbers[i] oxy_neighbors = [] - if mode == 'bond': + if mode == "bond": for t in types: - if bond_length.get('%s-%s' % (ty, t)) is not None: - oxy_neighbors.extend(list(np.where(atom.numbers == t)[0][np.where( - dis_sq[i, np.where(atom.numbers == t)[0]] <= bond_length['%s-%s' % (ty, t)])[0]])) - elif mode == 'cutoff': + if bond_length.get("%s-%s" % (ty, t)) is not None: + oxy_neighbors.extend( + list( + np.where(atom.numbers == t)[0][ + np.where(dis_sq[i, np.where(atom.numbers == t)[0]] <= bond_length["%s-%s" % (ty, t)])[0] + ] + ) + ) + elif mode == "cutoff": oxy_neighbors.extend(list(np.where(dis_sq[i] <= 6)[0])) oxy_neighbors = np.array(oxy_neighbors) if len(oxy_neighbors) == 0: @@ -828,8 +809,10 @@ def get_molecules(atom, bond_length, mode='bond', periodic=True): clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] != 0: - tmp = clusters[oxy_neighbors][clusters[oxy_neighbors] != 0][clusters[oxy_neighbors][ - clusters[oxy_neighbors] != 0] != min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0])] + tmp = clusters[oxy_neighbors][clusters[oxy_neighbors] != 0][ + clusters[oxy_neighbors][clusters[oxy_neighbors] != 0] + != min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + ] clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) for tr in tmp: @@ -864,7 +847,7 @@ def reconstruct_atoms(atomsobject, mol_idx, centre=None): offsets = -torch.floor(f + 0.5).view(M, 3) traj_unwrap = mol_xyz + torch.matmul(offsets, torch.Tensor(atomsobject.cell)) else: - sub = (intra_dmat > 0.5 * box_len).to(torch.float) * box_len + (intra_dmat > 0.5 * box_len).to(torch.float) * box_len add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len shift = torch.round(torch.divide(intra_dmat, box_len)) offsets = -shift diff --git a/nff/md/nms.py b/nff/md/nms.py index 2bc0f0bd..0b49f385 100644 --- a/nff/md/nms.py +++ b/nff/md/nms.py @@ -29,10 +29,10 @@ PT = Chem.GetPeriodicTable() PERIODICTABLE = PT -HA2J = 4.359744E-18 +HA2J = 4.359744e-18 BOHRS2ANG = 0.529177 -SPEEDOFLIGHT = 2.99792458E8 -AMU2KG = 1.660538782E-27 +SPEEDOFLIGHT = 2.99792458e8 +AMU2KG = 1.660538782e-27 TEMP = 298.15 PRESSURE = 101325 @@ -40,7 +40,7 @@ ROTOR_CUTOFF = 50 # cm^-1 CM_TO_EV = 1.2398e-4 GAS_CONST = 8.3144621 * J / mol -B_AV = 1e-44 * kg * m ** 2 +B_AV = 1e-44 * kg * m**2 RESTART_FILE = "restart.pickle" @@ -95,24 +95,22 @@ def init_calculator(atoms, params): num_states = params.get("num_states", 1) en_key = get_key(iroot=opt_state, num_states=num_states) - nn_id = params['nnid'] + nn_id = params["nnid"] # get the right weightpath (either regular or cluster-mounted) # depending on which exists - weightpath = os.path.join(params['weightpath'], str(nn_id)) + weightpath = os.path.join(params["weightpath"], str(nn_id)) if not os.path.isdir(weightpath): - weightpath = os.path.join(params['mounted_weightpath'], str(nn_id)) + weightpath = os.path.join(params["mounted_weightpath"], str(nn_id)) # get the model nn_params = params.get("networkhyperparams", {}) model_type = params.get("model_type") - model = load_model(weightpath, - model_type=model_type, - params=nn_params) + model = load_model(weightpath, model_type=model_type, params=nn_params) # get and set the calculator nff_ase = NeuralFF.from_file( weightpath, - device=params.get('device', 'cuda'), + device=params.get("device", "cuda"), output_keys=[en_key], params=nn_params, model_type=model_type, @@ -153,18 +151,15 @@ def correct_hessian(restart_file, hessian): def get_output_keys(model): - atomwisereadout = model.atomwisereadout # get the names of all the attributes of the readout dict readout_attr_names = dir(atomwisereadout) # restrict to the attributes that are ModuleDicts - readout_dict_names = [name for name in readout_attr_names if - type(getattr(atomwisereadout, name)) is ModuleDict] + readout_dict_names = [name for name in readout_attr_names if type(getattr(atomwisereadout, name)) is ModuleDict] # get the ModuleDicts - readout_dicts = [getattr(atomwisereadout, name) - for name in readout_dict_names] + readout_dicts = [getattr(atomwisereadout, name) for name in readout_dict_names] # get their keys output_keys = [key for dic in readout_dicts for key in dic.keys()] @@ -172,19 +167,12 @@ def get_output_keys(model): return output_keys -def get_loader(model, - nxyz_list, - num_states, - cutoff, - needs_angles=False, - base_keys=['energy']): - +def get_loader(model, nxyz_list, num_states, cutoff, needs_angles=False, base_keys=["energy"]): # base_keys = get_output_keys(model) grad_keys = [key + "_grad" for key in base_keys] ref_quant = [0] * len(nxyz_list) - ref_quant_grad = [ - np.zeros(((len(nxyz_list[0])), 3)).tolist()] * len(nxyz_list) + ref_quant_grad = [np.zeros(((len(nxyz_list[0])), 3)).tolist()] * len(nxyz_list) props = {"nxyz": nxyz_list} props.update({key: ref_quant for key in base_keys}) @@ -201,42 +189,33 @@ def get_loader(model, def check_convg(model, loader, energy_key, device, restart_file): - - mode_dic = get_modes(model=model, - loader=loader, - energy_key=energy_key, - device=device) + mode_dic = get_modes(model=model, loader=loader, energy_key=energy_key, device=device) freqs = mode_dic["freqs"] neg_freqs = list(filter(lambda x: x < 0, freqs)) num_neg = len(neg_freqs) if num_neg != 0: - print(("Found {} negative frequencies; " - "restarting optimization.").format(num_neg)) + print(("Found {} negative frequencies; " "restarting optimization.").format(num_neg)) correct_hessian(restart_file=restart_file, hessian=mode_dic["hess"]) return False, mode_dic else: - print(("Found no negative frequencies; " - "optimization complete.")) + print(("Found no negative frequencies; " "optimization complete.")) return True, mode_dic def get_opt_kwargs(params): - # params with the right name for max_step new_params = copy.deepcopy(params) new_params["steps"] = new_params["opt_max_step"] new_params.pop("opt_max_step") - opt_kwargs = {key: val for key, - val in new_params.items() if key in OPT_KEYS} + opt_kwargs = {key: val for key, val in new_params.items() if key in OPT_KEYS} return opt_kwargs def opt_conformer(atoms, params): - converged = False device = params.get("device", "cuda") restart_file = params.get("restart_file", RESTART_FILE) @@ -248,7 +227,6 @@ def opt_conformer(atoms, params): output_keys = nn_params.get("output_keys", ["energy"]) for iteration in tqdm(range(max_rounds)): - model, energy_key = init_calculator(atoms=atoms, params=params) opt_module = getattr(optimize, params.get("opt_type", "BFGS")) @@ -258,19 +236,18 @@ def opt_conformer(atoms, params): nxyz_list = [atoms.get_nxyz()] - model, loader = get_loader(model=model, - nxyz_list=nxyz_list, - num_states=num_states, - cutoff=cutoff, - needs_angles=params.get( - "needs_angles", False), - base_keys=output_keys) - - hess_converged, mode_dic = check_convg(model=model, - loader=loader, - energy_key=energy_key, - device=device, - restart_file=restart_file) + model, loader = get_loader( + model=model, + nxyz_list=nxyz_list, + num_states=num_states, + cutoff=cutoff, + needs_angles=params.get("needs_angles", False), + base_keys=output_keys, + ) + + hess_converged, mode_dic = check_convg( + model=model, loader=loader, energy_key=energy_key, device=device, restart_file=restart_file + ) if dyn_converged and hess_converged: converged = True break @@ -279,7 +256,6 @@ def opt_conformer(atoms, params): def get_confs(traj_filename, thermo_filename, num_starting_poses): - with open(thermo_filename, "r") as f: lines = f.readlines() energies = [] @@ -313,35 +289,29 @@ def get_nve_params(params): def md_to_conf(params): - - thermo_filename = params.get( - "thermo_filename", nve.DEFAULTNVEPARAMS["thermo_filename"]) + thermo_filename = params.get("thermo_filename", nve.DEFAULTNVEPARAMS["thermo_filename"]) if os.path.isfile(thermo_filename): os.remove(thermo_filename) nve_params = get_nve_params(params) - nxyz = np.array(params['nxyz']) + nxyz = np.array(params["nxyz"]) atoms = AtomsBatch(nxyz[:, 0], nxyz[:, 1:]) _, _ = init_calculator(atoms=atoms, params=params) - nve_instance = nve.Dynamics(atomsbatch=atoms, - mdparam=nve_params) + nve_instance = nve.Dynamics(atomsbatch=atoms, mdparam=nve_params) nve_instance.run() - thermo_filename = params.get( - "thermo_filename", nve.DEFAULTNVEPARAMS["thermo_filename"]) - traj_filename = params.get( - "traj_filename", nve.DEFAULTNVEPARAMS["traj_filename"]) + thermo_filename = params.get("thermo_filename", nve.DEFAULTNVEPARAMS["thermo_filename"]) + traj_filename = params.get("traj_filename", nve.DEFAULTNVEPARAMS["traj_filename"]) num_starting_poses = params.get("num_starting_poses", NUM_CONFS) - best_confs = get_confs(traj_filename=traj_filename, - thermo_filename=thermo_filename, - num_starting_poses=num_starting_poses) + best_confs = get_confs( + traj_filename=traj_filename, thermo_filename=thermo_filename, num_starting_poses=num_starting_poses + ) return best_confs def confs_to_opt(params, best_confs): - convg_atoms = [] energy_list = [] mode_list = [] @@ -367,10 +337,8 @@ def confs_to_opt(params, best_confs): def get_opt_and_modes(params): - best_confs = md_to_conf(params) - all_geoms, all_modes = confs_to_opt(params=params, - best_confs=best_confs) + all_geoms, all_modes = confs_to_opt(params=params, best_confs=best_confs) opt_geom = all_geoms[0] mode_dic = all_modes[0] @@ -378,7 +346,7 @@ def get_opt_and_modes(params): def get_orca_form(cc_mat, cc_freqs, n_atoms): - """ Converts cclib version of Orca's (almost orthogonalizing) matrix + """Converts cclib version of Orca's (almost orthogonalizing) matrix and mode frequencies back into the original Orca forms. Also converts frequencies from cm^{-1} into atomic units (Hartree).""" @@ -390,7 +358,6 @@ def get_orca_form(cc_mat, cc_freqs, n_atoms): n_tot = n_modes + n_inactive for i in range(len(pure_matrix)): - new_col = pure_matrix[i].reshape(3 * len(pure_matrix[i])) if i == 1: new_mat = np.column_stack((old_col, new_col)) @@ -412,20 +379,19 @@ def get_orca_form(cc_mat, cc_freqs, n_atoms): def get_orth(mass_vec, matrix): """Makes orthogonalizing matrix given the outputted - (non-orthogonal) matrix from Orca. The mass_vec variable - is a list of the masses of the atoms in the molecule (must be) - in the order given to Orca when it calculated normal modes). - Note that this acts directly on the matrix outputted from Orca, - not on the cclib version that divides columns into sets of - three entries for each atom.""" + (non-orthogonal) matrix from Orca. The mass_vec variable + is a list of the masses of the atoms in the molecule (must be) + in the order given to Orca when it calculated normal modes). + Note that this acts directly on the matrix outputted from Orca, + not on the cclib version that divides columns into sets of + three entries for each atom.""" m = np.array([[mass] for mass in mass_vec]) # repeat sqrt(m) three times, one for each direction - sqrt_m_vec = np.kron(m ** 0.5, np.ones((3, 1))) + sqrt_m_vec = np.kron(m**0.5, np.ones((3, 1))) # a matrix with sqrt_m repeated K times, where # K = 3N - 5 or 3N-6 is the number of modes - sqrt_m_mat = np.kron(sqrt_m_vec, np.ones( - (1, len(sqrt_m_vec)))) + sqrt_m_mat = np.kron(sqrt_m_vec, np.ones((1, len(sqrt_m_vec)))) # orthogonalize the matrix by element-wise multiplication with 1/sqrt(m) orth = sqrt_m_mat * matrix @@ -439,7 +405,7 @@ def get_orth(mass_vec, matrix): def get_n_in(matrix): - """ Get number of inactive modes """ + """Get number of inactive modes""" n_in = 0 for entry in matrix[0]: @@ -472,11 +438,11 @@ def get_disp(mass_vec, matrix, freqs, q, p, hb=1): def wigner_sample(w, kt=25.7 / 1000 / 27.2, hb=1): - """ Sample unitless x and unitless p from a Wigner distribution. + """Sample unitless x and unitless p from a Wigner distribution. Takes frequency and temperature in au as inputs. Default temperature is 300 K.""" - sigma = (1 / np.tanh((hb * w) / (2 * kt)))**0.5 / 2**0.5 + sigma = (1 / np.tanh((hb * w) / (2 * kt))) ** 0.5 / 2**0.5 cov = [[sigma**2, 0], [0, sigma**2]] mean = (0, 0) x, p = np.random.multivariate_normal(mean, cov) @@ -491,12 +457,7 @@ def classical_sample(w, kt=25.7 / 1000 / 27.2, hb=1): return x, p -def make_dx_dp(mass_vec, - cc_matrix, - cc_freqs, - kt=25.7 / 1000 / 27.2, - hb=1, - classical=False): +def make_dx_dp(mass_vec, cc_matrix, cc_freqs, kt=25.7 / 1000 / 27.2, hb=1, classical=False): """Make Wigner-sampled p and dx, where dx is the displacement about the equilibrium geometry. Takes mass vector, CClib matrix, and CClib vib freqs as inputs. @@ -518,12 +479,7 @@ def make_dx_dp(mass_vec, unitless_x = np.append(np.zeros(n_in), unitless_x) unitless_p = np.append(np.zeros(n_in), unitless_p) - dx, dp = get_disp(mass_vec=mass_vec, - matrix=matrix, - freqs=freqs, - q=unitless_x, - p=unitless_p, - hb=hb) + dx, dp = get_disp(mass_vec=mass_vec, matrix=matrix, freqs=freqs, q=unitless_x, p=unitless_p, hb=hb) # re-shape to have form of [[dx1, dy1, dz1], [dx2, dy2, dz2], ...] @@ -534,16 +490,15 @@ def make_dx_dp(mass_vec, def split_convert_xyz(xyz): - """ Splits xyz into Z, coordinates in au, and masses in au """ + """Splits xyz into Z, coordinates in au, and masses in au""" coords = [(np.array(element[1:]) * ANGS_2_AU).tolist() for element in xyz] - mass_vec = [PERIODICTABLE.GetAtomicWeight( - int(element[0])) * AMU_2_AU for element in xyz] + mass_vec = [PERIODICTABLE.GetAtomicWeight(int(element[0])) * AMU_2_AU for element in xyz] Z = [element[0] for element in xyz] return Z, coords, mass_vec def join_xyz(Z, coords): - """ Joins Z's and coordinates back into xyz """ + """Joins Z's and coordinates back into xyz""" out = [] for i in range(len(coords)): this_quad = [Z[i]] @@ -551,13 +506,7 @@ def join_xyz(Z, coords): out.append(this_quad) -def make_wigner_init(init_atoms, - vibdisps, - vibfreqs, - num_samples, - kt=25.7 / 1000 / 27.2, - hb=1, - classical=False): +def make_wigner_init(init_atoms, vibdisps, vibfreqs, num_samples, kt=25.7 / 1000 / 27.2, hb=1, classical=False): """Generates Wigner-sampled coordinates and velocities. xyz is the xyz array at the optimized geometry. xyz is in Angstrom, so xyz is first converted to @@ -566,18 +515,14 @@ def make_wigner_init(init_atoms, vibdisps and vibfreqs are the CClib quantities found in the database.""" - xyz = np.concatenate([init_atoms.get_atomic_numbers().reshape(-1, 1), - init_atoms.get_positions()], axis=1) + xyz = np.concatenate([init_atoms.get_atomic_numbers().reshape(-1, 1), init_atoms.get_positions()], axis=1) atoms_list = [] for _ in range(num_samples): - assert min( - vibfreqs) >= 0, ("Negative frequencies found. " - "Geometry must not be converged.") + assert min(vibfreqs) >= 0, "Negative frequencies found. " "Geometry must not be converged." Z, opt_coords, mass_vec = split_convert_xyz(xyz) - dx, dp = make_dx_dp(mass_vec, vibdisps, vibfreqs, - kt, hb, classical=classical) + dx, dp = make_dx_dp(mass_vec, vibdisps, vibfreqs, kt, hb, classical=classical) wigner_coords = ((np.asarray(opt_coords) + dx) / ANGS_2_AU).tolist() nxyz = np.array(join_xyz(Z, wigner_coords)) @@ -594,101 +539,96 @@ def make_wigner_init(init_atoms, return atoms_list -def nms_sample(params, - classical, - num_samples, - kt=25.7 / 1000 / 27.2, - hb=1): - +def nms_sample(params, classical, num_samples, kt=25.7 / 1000 / 27.2, hb=1): atoms, mode_dic = get_opt_and_modes(params) vibdisps = np.array(mode_dic["modes"]) vibdisps = vibdisps.reshape(vibdisps.shape[0], -1, 3).tolist() vibfreqs = mode_dic["freqs"] - atoms_list = make_wigner_init(init_atoms=atoms, - vibdisps=vibdisps, - vibfreqs=vibfreqs, - num_samples=num_samples, - kt=kt, - hb=hb, - classical=classical) + atoms_list = make_wigner_init( + init_atoms=atoms, + vibdisps=vibdisps, + vibfreqs=vibfreqs, + num_samples=num_samples, + kt=kt, + hb=hb, + classical=classical, + ) return atoms_list def get_modes(model, loader, energy_key, device): - batch = next(iter(loader)) batch = batch_to(batch, device) model = model.to(device) if isinstance(model, SchNet): - hessian = get_schnet_hessians(batch=batch, - model=model, - device=device, - energy_key=energy_key)[ - 0].cpu().detach().numpy() + hessian = ( + get_schnet_hessians(batch=batch, model=model, device=device, energy_key=energy_key)[0] + .cpu() + .detach() + .numpy() + ) else: raise NotImplementedError # convert to Ha / bohr^2 hessian *= (const.BOHR_RADIUS) ** 2 - hessian *= const.KCAL_TO_AU['energy'] + hessian *= const.KCAL_TO_AU["energy"] force_consts, vib_freqs, eigvec = vib_analy( - r=batch["nxyz"][:, 0].cpu().detach().numpy(), - xyz=batch["nxyz"][:, 1:].cpu().detach().numpy(), - hessian=hessian) + r=batch["nxyz"][:, 0].cpu().detach().numpy(), xyz=batch["nxyz"][:, 1:].cpu().detach().numpy(), hessian=hessian + ) # from https://gaussian.com/vib/#SECTION00036000000000000000 nxyz = batch["nxyz"].cpu().detach().numpy() - masses = np.array([PT.GetMostCommonIsotopeMass(int(z)) - for z in nxyz[:, 0]]) + masses = np.array([PT.GetMostCommonIsotopeMass(int(z)) for z in nxyz[:, 0]]) triple_mass = np.concatenate([np.array([item] * 3) for item in masses]) - red_mass = 1 / np.matmul(eigvec ** 2, 1 / triple_mass) + red_mass = 1 / np.matmul(eigvec**2, 1 / triple_mass) # un-mass weight the modes modes = [] for vec in eigvec: - col = vec / triple_mass ** 0.5 + col = vec / triple_mass**0.5 col /= np.linalg.norm(col) modes.append(col) modes = np.array(modes) - out_dic = {"nxyz": nxyz.tolist(), - "hess": hessian.tolist(), - "modes": modes.tolist(), - "red_mass": red_mass.tolist(), - "freqs": vib_freqs.tolist()} + out_dic = { + "nxyz": nxyz.tolist(), + "hess": hessian.tolist(), + "modes": modes.tolist(), + "red_mass": red_mass.tolist(), + "freqs": vib_freqs.tolist(), + } return out_dic def moi_tensor(massvec, expmassvec, xyz): # Center of Mass - com = np.sum(expmassvec.reshape(-1, 3) * - xyz.reshape(-1, 3), axis=0 - ) / np.sum(massvec) + com = np.sum(expmassvec.reshape(-1, 3) * xyz.reshape(-1, 3), axis=0) / np.sum(massvec) # xyz shifted to COM xyz_com = xyz.reshape(-1, 3) - com # Compute elements need to calculate MOI tensor - mass_xyz_com_sq_sum = np.sum( - expmassvec.reshape(-1, 3) * xyz_com ** 2, axis=0) + mass_xyz_com_sq_sum = np.sum(expmassvec.reshape(-1, 3) * xyz_com**2, axis=0) mass_xy = np.sum(massvec * xyz_com[:, 0] * xyz_com[:, 1], axis=0) mass_yz = np.sum(massvec * xyz_com[:, 1] * xyz_com[:, 2], axis=0) mass_xz = np.sum(massvec * xyz_com[:, 0] * xyz_com[:, 2], axis=0) # MOI tensor - moi = np.array([[mass_xyz_com_sq_sum[1] + mass_xyz_com_sq_sum[2], -1 * - mass_xy, -1 * mass_xz], - [-1 * mass_xy, mass_xyz_com_sq_sum[0] + - mass_xyz_com_sq_sum[2], -1 * mass_yz], - [-1 * mass_xz, -1 * mass_yz, mass_xyz_com_sq_sum[0] + - mass_xyz_com_sq_sum[1]]]) + moi = np.array( + [ + [mass_xyz_com_sq_sum[1] + mass_xyz_com_sq_sum[2], -1 * mass_xy, -1 * mass_xz], + [-1 * mass_xy, mass_xyz_com_sq_sum[0] + mass_xyz_com_sq_sum[2], -1 * mass_yz], + [-1 * mass_xz, -1 * mass_yz, mass_xyz_com_sq_sum[0] + mass_xyz_com_sq_sum[1]], + ] + ) # MOI eigenvectors and eigenvalues moi_eigval, moi_eigvec = np.linalg.eig(moi) @@ -697,7 +637,6 @@ def moi_tensor(massvec, expmassvec, xyz): def trans_rot_vec(massvec, xyz_com, moi_eigvec): - # Mass-weighted translational vectors zero_vec = np.zeros([len(massvec)]) sqrtmassvec = np.sqrt(massvec) @@ -710,23 +649,20 @@ def trans_rot_vec(massvec, xyz_com, moi_eigvec): # Mass-weighted rotational vectors big_p = np.matmul(xyz_com, moi_eigvec) - d4 = (np.repeat(big_p[:, 1], 3).reshape(-1) * - np.tile(moi_eigvec[:, 2], len(massvec)).reshape(-1) - - np.repeat(big_p[:, 2], 3).reshape(-1) * - np.tile(moi_eigvec[:, 1], len(massvec)).reshape(-1) - ) * expsqrtmassvec + d4 = ( + np.repeat(big_p[:, 1], 3).reshape(-1) * np.tile(moi_eigvec[:, 2], len(massvec)).reshape(-1) + - np.repeat(big_p[:, 2], 3).reshape(-1) * np.tile(moi_eigvec[:, 1], len(massvec)).reshape(-1) + ) * expsqrtmassvec - d5 = (np.repeat(big_p[:, 2], 3).reshape(-1) * - np.tile(moi_eigvec[:, 0], len(massvec)).reshape(-1) - - np.repeat(big_p[:, 0], 3).reshape(-1) * - np.tile(moi_eigvec[:, 2], len(massvec)).reshape(-1) - ) * expsqrtmassvec + d5 = ( + np.repeat(big_p[:, 2], 3).reshape(-1) * np.tile(moi_eigvec[:, 0], len(massvec)).reshape(-1) + - np.repeat(big_p[:, 0], 3).reshape(-1) * np.tile(moi_eigvec[:, 2], len(massvec)).reshape(-1) + ) * expsqrtmassvec - d6 = (np.repeat(big_p[:, 0], 3).reshape(-1) * - np.tile(moi_eigvec[:, 1], len(massvec)).reshape(-1) - - np.repeat(big_p[:, 1], 3).reshape(-1) * - np.tile(moi_eigvec[:, 0], len(massvec)).reshape(-1) - ) * expsqrtmassvec + d6 = ( + np.repeat(big_p[:, 0], 3).reshape(-1) * np.tile(moi_eigvec[:, 1], len(massvec)).reshape(-1) + - np.repeat(big_p[:, 1], 3).reshape(-1) * np.tile(moi_eigvec[:, 0], len(massvec)).reshape(-1) + ) * expsqrtmassvec d1_norm = d1 / np.linalg.norm(d1) d2_norm = d2 / np.linalg.norm(d2) @@ -735,28 +671,20 @@ def trans_rot_vec(massvec, xyz_com, moi_eigvec): d5_norm = d5 / np.linalg.norm(d5) d6_norm = d6 / np.linalg.norm(d6) - dx_norms = np.stack((d1_norm, - d2_norm, - d3_norm, - d4_norm, - d5_norm, - d6_norm)) + dx_norms = np.stack((d1_norm, d2_norm, d3_norm, d4_norm, d5_norm, d6_norm)) return dx_norms def vib_analy(r, xyz, hessian): - # r is the proton number of atoms # xyz is the cartesian coordinates in Angstrom # Hessian elements in atomic units (Ha/bohr^2) - massvec = np.array([PT.GetAtomicWeight(i.item()) * AMU2KG - for i in list(np.array(r.reshape(-1)).astype(int))]) + massvec = np.array([PT.GetAtomicWeight(i.item()) * AMU2KG for i in list(np.array(r.reshape(-1)).astype(int))]) expmassvec = np.repeat(massvec, 3) sqrtinvmassvec = np.divide(1.0, np.sqrt(expmassvec)) - hessian_mwc = np.einsum('i,ij,j->ij', sqrtinvmassvec, - hessian, sqrtinvmassvec) + hessian_mwc = np.einsum("i,ij,j->ij", sqrtinvmassvec, hessian, sqrtinvmassvec) hessian_eigval, hessian_eigvec = np.linalg.eig(hessian_mwc) xyz_com, moi_eigvec = moi_tensor(massvec, expmassvec, xyz) @@ -768,8 +696,7 @@ def vib_analy(r, xyz, hessian): # Projecting the T and R modes out of the hessian mwhess_proj = np.dot(P.T, hessian_mwc).dot(P) - hess_proj = np.einsum('i,ij,j->ij', 1 / sqrtinvmassvec, - mwhess_proj, 1 / sqrtinvmassvec) + hess_proj = np.einsum("i,ij,j->ij", 1 / sqrtinvmassvec, mwhess_proj, 1 / sqrtinvmassvec) hessian_eigval, hessian_eigvec = np.linalg.eigh(mwhess_proj) @@ -780,9 +707,7 @@ def vib_analy(r, xyz, hessian): hessian_eigval_abs = np.abs(hessian_eigval) - pre_vib_freq_cm_1 = np.sqrt( - hessian_eigval_abs * HA2J * 10e19) / (SPEEDOFLIGHT * 2 * np.pi * - BOHRS2ANG * 100) + pre_vib_freq_cm_1 = np.sqrt(hessian_eigval_abs * HA2J * 10e19) / (SPEEDOFLIGHT * 2 * np.pi * BOHRS2ANG * 100) vib_freq_cm_1 = pre_vib_freq_cm_1.copy() @@ -797,20 +722,17 @@ def vib_analy(r, xyz, hessian): if np.abs(freq) < 1.0: trans_rot_elms.append(i) - force_constants_J_m_2 = np.delete( - hessian_eigval * HA2J * 1e20 / (BOHRS2ANG ** 2) * AMU2KG, - trans_rot_elms) + force_constants_J_m_2 = np.delete(hessian_eigval * HA2J * 1e20 / (BOHRS2ANG**2) * AMU2KG, trans_rot_elms) proj_vib_freq_cm_1 = np.delete(vib_freq_cm_1, trans_rot_elms) proj_hessian_eigvec = np.delete(hessian_eigvec.T, trans_rot_elms, 0) - return (force_constants_J_m_2, proj_vib_freq_cm_1, proj_hessian_eigvec, - mwhess_proj, hess_proj) + return (force_constants_J_m_2, proj_vib_freq_cm_1, proj_hessian_eigvec, mwhess_proj, hess_proj) def free_rotor_moi(freqs): freq_ev = freqs * CM_TO_EV - mu = 1 / (8 * np.pi ** 2 * freq_ev) + mu = 1 / (8 * np.pi**2 * freq_ev) return mu @@ -819,45 +741,30 @@ def eff_moi(mu, b_av): return mu_prime -def low_freq_entropy(freqs, - temperature, - b_av=B_AV): +def low_freq_entropy(freqs, temperature, b_av=B_AV): mu = free_rotor_moi(freqs) mu_prime = eff_moi(mu, b_av) - arg = (8 * np.pi ** 3 * mu_prime * kB * temperature) - entropy = GAS_CONST * (1 / 2 + np.log(arg ** 0.5)) + arg = 8 * np.pi**3 * mu_prime * kB * temperature + entropy = GAS_CONST * (1 / 2 + np.log(arg**0.5)) return entropy -def high_freq_entropy(freqs, - temperature): - +def high_freq_entropy(freqs, temperature): freq_ev = freqs * CM_TO_EV exp_pos = np.exp(freq_ev / (kB * temperature)) - 1 exp_neg = 1 - np.exp(-freq_ev / (kB * temperature)) - entropy = GAS_CONST * ( - freq_ev / (kB * temperature * exp_pos) - - np.log(exp_neg) - ) + entropy = GAS_CONST * (freq_ev / (kB * temperature * exp_pos) - np.log(exp_neg)) return entropy -def mrrho_entropy(freqs, - temperature, - rotor_cutoff, - b_av, - alpha): - +def mrrho_entropy(freqs, temperature, rotor_cutoff, b_av, alpha): func = 1 / (1 + (rotor_cutoff / freqs) ** alpha) - s_r = low_freq_entropy(freqs=freqs, - b_av=b_av, - temperature=temperature) - s_v = high_freq_entropy(freqs=freqs, - temperature=temperature) + s_r = low_freq_entropy(freqs=freqs, b_av=b_av, temperature=temperature) + s_v = high_freq_entropy(freqs=freqs, temperature=temperature) new_vib_s = (func * s_v + (1 - func) * s_r).sum() old_vib_s = s_v.sum() @@ -865,63 +772,55 @@ def mrrho_entropy(freqs, return old_vib_s, new_vib_s -def mrrho_quants(ase_atoms, - freqs, - imag_cutoff=IMAG_CUTOFF, - temperature=TEMP, - pressure=PRESSURE, - rotor_cutoff=ROTOR_CUTOFF, - b_av=B_AV, - alpha=4, - flip_all_but_ts=False): - +def mrrho_quants( + ase_atoms, + freqs, + imag_cutoff=IMAG_CUTOFF, + temperature=TEMP, + pressure=PRESSURE, + rotor_cutoff=ROTOR_CUTOFF, + b_av=B_AV, + alpha=4, + flip_all_but_ts=False, +): potentialenergy = ase_atoms.get_potential_energy() if flip_all_but_ts: - print(("Flipping all imaginary frequencies except " - "the lowest one")) + print(("Flipping all imaginary frequencies except " "the lowest one")) abs_freqs = abs(freqs[1:]) else: abs_freqs = abs(freqs[freqs > imag_cutoff]) ens = abs_freqs * CM_TO_EV - ideal_gas = IdealGasThermo(vib_energies=ens, - potentialenergy=potentialenergy, - atoms=ase_atoms, - geometry='nonlinear', - symmetrynumber=1, - spin=0) + ideal_gas = IdealGasThermo( + vib_energies=ens, + potentialenergy=potentialenergy, + atoms=ase_atoms, + geometry="nonlinear", + symmetrynumber=1, + spin=0, + ) # full entropy including rotation, translation etc - old_entropy = (ideal_gas.get_entropy(temperature=temperature, - pressure=pressure).item()) - enthalpy = (ideal_gas.get_enthalpy(temperature=temperature) - .item()) + old_entropy = ideal_gas.get_entropy(temperature=temperature, pressure=pressure).item() + enthalpy = ideal_gas.get_enthalpy(temperature=temperature).item() # correction to vibrational entropy - out = mrrho_entropy(freqs=abs_freqs, - temperature=temperature, - rotor_cutoff=rotor_cutoff, - b_av=b_av, - alpha=alpha) + out = mrrho_entropy(freqs=abs_freqs, temperature=temperature, rotor_cutoff=rotor_cutoff, b_av=b_av, alpha=alpha) old_vib_s, new_vib_s = out final_entropy = old_entropy - old_vib_s + new_vib_s - free_energy = (enthalpy - temperature * final_entropy) + free_energy = enthalpy - temperature * final_entropy return final_entropy, enthalpy, free_energy -def convert_modes(atoms, - modes): - - masses = (atoms.get_masses().reshape(-1, 1) - .repeat(3, 1) - .reshape(1, -1)) +def convert_modes(atoms, modes): + masses = atoms.get_masses().reshape(-1, 1).repeat(3, 1).reshape(1, -1) # Multiply by 1 / sqrt(M) to be consistent with the DB - vibdisps = modes / (masses ** 0.5) + vibdisps = modes / (masses**0.5) norm = np.linalg.norm(vibdisps, axis=1).reshape(-1, 1) # Normalize @@ -935,14 +834,15 @@ def convert_modes(atoms, return vibdisps -def hessian_and_modes(ase_atoms, - imag_cutoff=IMAG_CUTOFF, - rotor_cutoff=ROTOR_CUTOFF, - temperature=TEMP, - pressure=PRESSURE, - flip_all_but_ts=False, - analytical=False): - +def hessian_and_modes( + ase_atoms, + imag_cutoff=IMAG_CUTOFF, + rotor_cutoff=ROTOR_CUTOFF, + temperature=TEMP, + pressure=PRESSURE, + flip_all_but_ts=False, + analytical=False, +): # comparison to the analytical Hessian # shows that delta=0.005 is indistinguishable # from the real result, whereas delta=0.05 @@ -952,8 +852,8 @@ def hessian_and_modes(ase_atoms, # because it might mess up the Hessian # calculation - if os.path.isdir('vib'): - shutil.rmtree('vib') + if os.path.isdir("vib"): + shutil.rmtree("vib") if analytical: hessian = analytical_hess(atoms=ase_atoms) @@ -964,42 +864,40 @@ def hessian_and_modes(ase_atoms, vib_results = vib.get_vibrations() dim = len(ase_atoms) - hessian = (vib_results.get_hessian() - .reshape(dim * 3, dim * 3) * - EV_TO_AU * - BOHR_RADIUS ** 2) + hessian = vib_results.get_hessian().reshape(dim * 3, dim * 3) * EV_TO_AU * BOHR_RADIUS**2 print(vib.get_frequencies()[:20]) - vib_results = vib_analy(r=ase_atoms.get_atomic_numbers(), - xyz=ase_atoms.get_positions(), - hessian=hessian) + vib_results = vib_analy(r=ase_atoms.get_atomic_numbers(), xyz=ase_atoms.get_positions(), hessian=hessian) _, freqs, modes, mwhess_proj, hess_proj = vib_results mwhess_proj *= AMU2KG - vibdisps = convert_modes(atoms=ase_atoms, - modes=modes) + vibdisps = convert_modes(atoms=ase_atoms, modes=modes) - mrrho_results = mrrho_quants(ase_atoms=ase_atoms, - freqs=freqs, - imag_cutoff=imag_cutoff, - temperature=temperature, - pressure=pressure, - rotor_cutoff=rotor_cutoff, - flip_all_but_ts=flip_all_but_ts) + mrrho_results = mrrho_quants( + ase_atoms=ase_atoms, + freqs=freqs, + imag_cutoff=imag_cutoff, + temperature=temperature, + pressure=pressure, + rotor_cutoff=rotor_cutoff, + flip_all_but_ts=flip_all_but_ts, + ) entropy, enthalpy, free_energy = mrrho_results imgfreq = len(freqs[freqs < 0]) - results = {"vibdisps": vibdisps.tolist(), - "vibfreqs": freqs.tolist(), - "modes": modes, - "hessianmatrix": hessian.tolist(), - "mwhess_proj": mwhess_proj.tolist(), - "hess_proj": hess_proj.tolist(), - "imgfreq": imgfreq, - "freeenergy": free_energy * EV_TO_AU, - "enthalpy": enthalpy * EV_TO_AU, - "entropy": entropy * temperature * EV_TO_AU} + results = { + "vibdisps": vibdisps.tolist(), + "vibfreqs": freqs.tolist(), + "modes": modes, + "hessianmatrix": hessian.tolist(), + "mwhess_proj": mwhess_proj.tolist(), + "hess_proj": hess_proj.tolist(), + "imgfreq": imgfreq, + "freeenergy": free_energy * EV_TO_AU, + "enthalpy": enthalpy * EV_TO_AU, + "entropy": entropy * temperature * EV_TO_AU, + } return results diff --git a/nff/md/npt.py b/nff/md/npt.py index 25a1acef..1dce73c9 100644 --- a/nff/md/npt.py +++ b/nff/md/npt.py @@ -412,7 +412,7 @@ def step(self): scale_coords = np.exp(delta_eps) scale_volume = np.exp(self.d * delta_eps) - V_t = V * scale_volume + V * scale_volume h_t = h * scale_coords # half time for all velocities diff --git a/nff/md/nvt_ax.py b/nff/md/nvt_ax.py index 92ac392a..316c75b4 100644 --- a/nff/md/nvt_ax.py +++ b/nff/md/nvt_ax.py @@ -1,4 +1,3 @@ -import copy import os import numpy as np import math @@ -6,35 +5,37 @@ from ase.md.md import MolecularDynamics from ase.optimize.optimize import Dynamics from ase import units -from ase.md.velocitydistribution import (MaxwellBoltzmannDistribution, - Stationary, ZeroRotation) +from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary, ZeroRotation class NoseHoover(MolecularDynamics): - def __init__(self, - atoms, - timestep, - temperature, - ttime, - maxwell_temp=None, - trajectory=None, - logfile=None, - loginterval=1, - max_steps=None, - nbr_update_period=20, - append_trajectory=True, - **kwargs): - + def __init__( + self, + atoms, + timestep, + temperature, + ttime, + maxwell_temp=None, + trajectory=None, + logfile=None, + loginterval=1, + max_steps=None, + nbr_update_period=20, + append_trajectory=True, + **kwargs, + ): if os.path.isfile(trajectory): os.remove(trajectory) - MolecularDynamics.__init__(self, - atoms=atoms, - timestep=timestep * units.fs, - trajectory=trajectory, - logfile=logfile, - loginterval=loginterval, - append_trajectory=append_trajectory) + MolecularDynamics.__init__( + self, + atoms=atoms, + timestep=timestep * units.fs, + trajectory=trajectory, + logfile=logfile, + loginterval=loginterval, + append_trajectory=append_trajectory, + ) # Initialize simulation parameters # convert units @@ -48,7 +49,7 @@ def __init__(self, # no rotation or translation, so target kinetic energy is 1/2 (3N - 6) kT self.targeEkin = 0.5 * (3.0 * self.Natom - 6) * self.T - self.Q = (3.0 * self.Natom - 6) * self.T * (self.ttime * self.dt)**2 + self.Q = (3.0 * self.Natom - 6) * self.T * (self.ttime * self.dt) ** 2 self.zeta = 0.0 self.num_steps = max_steps self.n_steps = 0 @@ -67,14 +68,12 @@ def __init__(self, ZeroRotation(self.atoms) def step(self): - # get current acceleration and velocity: accel = self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1) vel = self.atoms.get_velocities() # make full step in position - x = self.atoms.get_positions() + vel * self.dt + \ - (accel - self.zeta * vel) * (0.5 * self.dt ** 2) + x = self.atoms.get_positions() + vel * self.dt + (accel - self.zeta * vel) * (0.5 * self.dt**2) self.atoms.set_positions(x) # record current velocities @@ -89,22 +88,18 @@ def step(self): accel = f / self.atoms.get_masses().reshape(-1, 1) # make a half step in self.zeta - self.zeta = self.zeta + 0.5 * self.dt * \ - (1 / self.Q) * (KE_0 - self.targeEkin) + self.zeta = self.zeta + 0.5 * self.dt * (1 / self.Q) * (KE_0 - self.targeEkin) # make another halfstep in self.zeta - self.zeta = self.zeta + 0.5 * self.dt * \ - (1 / self.Q) * (self.atoms.get_kinetic_energy() - self.targeEkin) + self.zeta = self.zeta + 0.5 * self.dt * (1 / self.Q) * (self.atoms.get_kinetic_energy() - self.targeEkin) # make another half step in velocity - vel = (self.atoms.get_velocities() + 0.5 * self.dt * accel) / \ - (1 + 0.5 * self.dt * self.zeta) + vel = (self.atoms.get_velocities() + 0.5 * self.dt * accel) / (1 + 0.5 * self.dt * self.zeta) self.atoms.set_velocities(vel) return f def run(self, steps=None): - if steps is None: steps = self.num_steps @@ -122,25 +117,21 @@ def run(self, steps=None): class NoseHooverChain(MolecularDynamics): - def __init__(self, - atoms, - timestep, - temperature, - ttime, - num_chains, - maxwell_temp, - trajectory=None, - logfile=None, - loginterval=1, - max_steps=None, - **kwargs): - - MolecularDynamics.__init__(self, - atoms, - timestep * units.fs, - trajectory, - logfile, - loginterval) + def __init__( + self, + atoms, + timestep, + temperature, + ttime, + num_chains, + maxwell_temp, + trajectory=None, + logfile=None, + loginterval=1, + max_steps=None, + **kwargs, + ): + MolecularDynamics.__init__(self, atoms, timestep * units.fs, trajectory, logfile, loginterval) # Initialize simulation parameters @@ -152,8 +143,12 @@ def __init__(self, # in units of fs: self.ttime = ttime - self.Q = 2 * np.array([self.N_dof * self.T * (self.ttime * self.dt)**2, - *[self.T * (self.ttime * self.dt)**2] * (num_chains - 1)]) + self.Q = 2 * np.array( + [ + self.N_dof * self.T * (self.ttime * self.dt) ** 2, + *[self.T * (self.ttime * self.dt) ** 2] * (num_chains - 1), + ] + ) # no rotation or translation, so target kinetic energy is 3/2 N kT - 6 self.targeEkin = 1 / 2 * self.N_dof * self.T @@ -173,25 +168,20 @@ def __init__(self, MaxwellBoltzmannDistribution(self.atoms, maxwell_temp) def get_zeta_accel(self): - - p0_dot = 2 * (self.atoms.get_kinetic_energy() - self.targeEkin) - \ - self.p_zeta[0] * self.p_zeta[1] / self.Q[1] - p_middle_dot = self.p_zeta[:-2]**2 / self.Q[:-2] - \ - self.T - self.p_zeta[1:-1] * self.p_zeta[2:] / self.Q[2:] - p_last_dot = self.p_zeta[-2]**2 / self.Q[-2] - self.T + p0_dot = 2 * (self.atoms.get_kinetic_energy() - self.targeEkin) - self.p_zeta[0] * self.p_zeta[1] / self.Q[1] + p_middle_dot = self.p_zeta[:-2] ** 2 / self.Q[:-2] - self.T - self.p_zeta[1:-1] * self.p_zeta[2:] / self.Q[2:] + p_last_dot = self.p_zeta[-2] ** 2 / self.Q[-2] - self.T p_dot = np.array([p0_dot, *p_middle_dot, p_last_dot]) return p_dot / self.Q def half_step_v_zeta(self): - v = self.p_zeta / self.Q accel = self.get_zeta_accel() v_half = v + 1 / 2 * accel * self.dt return v_half def half_step_v_system(self): - v = self.atoms.get_velocities() accel = self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1) accel -= v * self.p_zeta[0] / self.Q[0] @@ -199,14 +189,15 @@ def half_step_v_system(self): return v_half def full_step_positions(self): - accel = self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1) - new_positions = self.atoms.get_positions() + self.atoms.get_velocities() * self.dt + \ - (accel - self.p_zeta[0] / self.Q[0]) * (self.dt)**2 + new_positions = ( + self.atoms.get_positions() + + self.atoms.get_velocities() * self.dt + + (accel - self.p_zeta[0] / self.Q[0]) * (self.dt) ** 2 + ) return new_positions def step(self): - new_positions = self.full_step_positions() self.atoms.set_positions(new_positions) @@ -218,14 +209,12 @@ def step(self): v_full_zeta = self.half_step_v_zeta() accel = self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1) - v_full_system = (v_half_system + 1 / 2 * accel * self.dt) / \ - (1 + 0.5 * self.dt * v_full_zeta[0]) + v_full_system = (v_half_system + 1 / 2 * accel * self.dt) / (1 + 0.5 * self.dt * v_full_zeta[0]) self.atoms.set_velocities(v_full_system) self.p_zeta = v_full_zeta * self.Q def run(self, steps=None): - if steps is None: steps = self.num_steps diff --git a/nff/md/special_thermostats.py b/nff/md/special_thermostats.py index 92f77579..64671867 100644 --- a/nff/md/special_thermostats.py +++ b/nff/md/special_thermostats.py @@ -1,44 +1,43 @@ import os import numpy as np -import copy -import math -import pickle from tqdm import tqdm from ase.optimize.optimize import Dynamics from ase.md.md import MolecularDynamics from ase.md.logger import MDLogger from ase import units -from ase.md.velocitydistribution import (MaxwellBoltzmannDistribution, - Stationary, ZeroRotation) +from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary, ZeroRotation from nff.io.ase import AtomsBatch class TempRamp(MolecularDynamics): - def __init__(self, - atoms, - timestep, - target_temp, - num_steps, - maxwell_temp=None, - trajectory=None, - logfile=None, - loginterval=1, - nbr_update_period=20, - append_trajectory=True, - **kwargs): - + def __init__( + self, + atoms, + timestep, + target_temp, + num_steps, + maxwell_temp=None, + trajectory=None, + logfile=None, + loginterval=1, + nbr_update_period=20, + append_trajectory=True, + **kwargs, + ): if os.path.isfile(str(trajectory)): os.remove(trajectory) - MolecularDynamics.__init__(self, - atoms=atoms, - timestep=timestep * units.fs, - trajectory=trajectory, - logfile=logfile, - loginterval=loginterval, - append_trajectory=append_trajectory) + MolecularDynamics.__init__( + self, + atoms=atoms, + timestep=timestep * units.fs, + trajectory=trajectory, + logfile=logfile, + loginterval=loginterval, + append_trajectory=append_trajectory, + ) # Initialize simulation parameters # convert units @@ -57,8 +56,10 @@ def __init__(self, if self.num_steps < self.nbr_update_period: print("WARNING: Ramp will be performed in a single rescaling step!") if self.num_steps % self.nbr_update_period != 0: - print("WARNING: Number of steps is adjusted to " - f"{self.num_steps + self.nbr_update_period - (self.num_steps % self.nbr_update_period)}!") + print( + "WARNING: Number of steps is adjusted to " + f"{self.num_steps + self.nbr_update_period - (self.num_steps % self.nbr_update_period)}!" + ) # initial Maxwell-Boltmann temperature for atoms if maxwell_temp is not None: @@ -68,11 +69,12 @@ def __init__(self, self.start_temp = (2 * self.atoms.get_kinetic_energy()) / (units.kB * self.activeDoF) self.num_epochs = int(np.ceil(self.num_steps / self.nbr_update_period)) - self.ramp_targets = np.linspace(self.start_temp, target_temp, - num=self.num_epochs + 1, endpoint=True)[1:] + self.ramp_targets = np.linspace(self.start_temp, target_temp, num=self.num_epochs + 1, endpoint=True)[1:] self.max_steps = 0 - print(f"Info: Temperature is adjusted {self.num_epochs} times" - "in {self.ramp_targets[1] - self.ramp_targets[0]}K increments.") + print( + f"Info: Temperature is adjusted {self.num_epochs} times" + "in {self.ramp_targets[1] - self.ramp_targets[0]}K increments." + ) self.remove_constrained_vel(atoms) Stationary(self.atoms) @@ -87,16 +89,19 @@ def remove_constrained_vel(self, atoms): fixed_idx = [] for constraint in constraints: has_keys = False - keys = ['idx', 'indices', 'index'] + keys = ["idx", "indices", "index"] for key in keys: if hasattr(constraint, key): - val = np.array(getattr(constraint, key) - ).reshape(-1).tolist() + val = np.array(getattr(constraint, key)).reshape(-1).tolist() fixed_idx += val has_keys = True if not has_keys: - print(("WARNING: velocity not set to zero for any atoms in constraint " - "%s; do not know how to find its fixed indices." % constraint)) + print( + ( + "WARNING: velocity not set to zero for any atoms in constraint " + "%s; do not know how to find its fixed indices." % constraint + ) + ) if not fixed_idx: return @@ -107,10 +112,8 @@ def remove_constrained_vel(self, atoms): self.atoms.set_velocities(vel) def step(self): - # get current acceleration and velocity: - accel = (self.atoms.get_forces() / - self.atoms.get_masses().reshape(-1, 1)) + accel = self.atoms.get_forces() / self.atoms.get_masses().reshape(-1, 1) vel = self.atoms.get_velocities() # make half a step in velocity @@ -133,15 +136,13 @@ def step(self): return f def run(self): - self.atoms.update_nbr_list() for ii in tqdm(range(self.num_epochs)): self.max_steps += self.nbr_update_period Dynamics.run(self) - curr_temp = (2. * self.atoms.get_kinetic_energy() / - (units.kB * self.activeDoF)) + curr_temp = 2.0 * self.atoms.get_kinetic_energy() / (units.kB * self.activeDoF) curr_target = self.ramp_targets[ii] rescale_fac = np.sqrt(curr_target / curr_temp) new_vel = rescale_fac * self.atom.get_velocities() diff --git a/nff/md/tully/ab_dynamics.py b/nff/md/tully/ab_dynamics.py index 4ece5df4..44235827 100644 --- a/nff/md/tully/ab_dynamics.py +++ b/nff/md/tully/ab_dynamics.py @@ -10,9 +10,7 @@ from ase import Atoms import copy -from nff.md.tully.dynamics import (NeuralTully, - TULLY_LOG_FILE, - TULLY_SAVE_FILE) +from nff.md.tully.dynamics import NeuralTully, TULLY_LOG_FILE, TULLY_SAVE_FILE from nff.md.tully.io import load_json, coords_to_xyz from nff.md.tully.ab_io import get_results as ab_results from nff.utils import constants as const @@ -21,19 +19,16 @@ def load_params(file): all_params = load_json(file) - all_params['nacv_details'] = {**all_params, - **all_params['nacv_details']} - all_params['grad_details'] = {**all_params, - **all_params['grad_details']} + all_params["nacv_details"] = {**all_params, **all_params["nacv_details"]} + all_params["grad_details"] = {**all_params, **all_params["grad_details"]} return all_params def make_atoms(all_params): - vel = np.array(all_params['velocities']) + vel = np.array(all_params["velocities"]) nxyz = coords_to_xyz(all_params["coords"]) - atoms = Atoms(nxyz[:, 0], - positions=nxyz[:, 1:]) + atoms = Atoms(nxyz[:, 0], positions=nxyz[:, 1:]) atoms.set_velocities(vel) atoms_list = [atoms] @@ -42,22 +37,23 @@ def make_atoms(all_params): class AbTully(NeuralTully): - def __init__(self, - charge, - grad_config, - nacv_config, - grad_details, - nacv_details, - atoms_list, - num_states, - initial_surf, - dt, - max_time, - elec_substeps, - decoherence, - hop_eqn, - **kwargs): - + def __init__( + self, + charge, + grad_config, + nacv_config, + grad_details, + nacv_details, + atoms_list, + num_states, + initial_surf, + dt, + max_time, + elec_substeps, + decoherence, + hop_eqn, + **kwargs, + ): self.atoms_list = atoms_list self.vel = self.get_vel() self.T = None @@ -67,14 +63,13 @@ def __init__(self, self.num_atoms = len(self.atoms_list[0]) self.num_samples = len(atoms_list) self.num_states = num_states - self.surfs = np.ones(self.num_samples, - dtype=np.int) * initial_surf + self.surfs = np.ones(self.num_samples, dtype=np.int) * initial_surf self.dt = dt * const.FS_TO_AU self.elec_substeps = elec_substeps self.max_time = max_time * const.FS_TO_AU - self.max_gap_hop = float('inf') + self.max_gap_hop = float("inf") self.log_file = TULLY_LOG_FILE self.save_file = TULLY_SAVE_FILE @@ -86,7 +81,7 @@ def __init__(self, self.c = self.init_c() self.decoherence = self.init_decoherence(params=decoherence) - self.decoherence_type = decoherence['name'] + self.decoherence_type = decoherence["name"] self.hop_eqn = hop_eqn self.diabat_propagate = False self.simple_vel_scale = False @@ -108,11 +103,8 @@ def __init__(self, @property def forces(self): - inf = np.ones((self.num_atoms, - 3)) * float('inf') - _forces = np.stack([-self.props.get(f'energy_{i}_grad', - inf).reshape(-1, 3) - for i in range(self.num_states)]) + inf = np.ones((self.num_atoms, 3)) * float("inf") + _forces = np.stack([-self.props.get(f"energy_{i}_grad", inf).reshape(-1, 3) for i in range(self.num_states)]) _forces = _forces.reshape(1, *_forces.shape) return _forces @@ -120,21 +112,17 @@ def forces(self): @forces.setter def forces(self, _forces): for i in range(self.num_states): - self.props[f'energy_{i}_grad'] = -_forces[:, i] - - def correct_phase(self, - old_force_nacv): + self.props[f"energy_{i}_grad"] = -_forces[:, i] + def correct_phase(self, old_force_nacv): if old_force_nacv is None: return new_force_nacv = self.force_nacv new_nacv = self.nacv - delta = np.max(np.linalg.norm(old_force_nacv - new_force_nacv, - axis=((-1, -2))), axis=-1) - sigma = np.max(np.linalg.norm(old_force_nacv + new_force_nacv, - axis=((-1, -2))), axis=-1) + delta = np.max(np.linalg.norm(old_force_nacv - new_force_nacv, axis=((-1, -2))), axis=-1) + sigma = np.max(np.linalg.norm(old_force_nacv + new_force_nacv, axis=((-1, -2))), axis=-1) delta = delta.reshape(*delta.shape, 1, 1, 1) sigma = sigma.reshape(*sigma.shape, 1, 1, 1) @@ -151,13 +139,10 @@ def correct_phase(self, num_states = new_nacv.shape[1] for i in range(num_states): for j in range(num_states): - self.props[f'force_nacv_{i}{j}'] = new_force_nacv[:, i, j] - self.props[f'nacv_{i}{j}'] = new_nacv[:, i, j] - - def update_props(self, - *args, - **kwargs): + self.props[f"force_nacv_{i}{j}"] = new_force_nacv[:, i, j] + self.props[f"nacv_{i}{j}"] = new_nacv[:, i, j] + def update_props(self, *args, **kwargs): old_force_nacv = copy.deepcopy(self.force_nacv) job_dir = os.path.join(os.getcwd(), str(self.step_num)) @@ -166,15 +151,17 @@ def update_props(self, else: os.makedirs(job_dir) - self.props = ab_results(nxyz=self.nxyz, - charge=self.charge, - num_states=self.num_states, - surf=self.surfs[0], - job_dir=job_dir, - grad_config=self.grad_config, - nacv_config=self.nacv_config, - grad_details=self.grad_details, - nacv_details=self.nacv_details) + self.props = ab_results( + nxyz=self.nxyz, + charge=self.charge, + num_states=self.num_states, + surf=self.surfs[0], + job_dir=job_dir, + grad_config=self.grad_config, + nacv_config=self.nacv_config, + grad_details=self.grad_details, + nacv_details=self.nacv_details, + ) self.correct_phase(old_force_nacv=old_force_nacv) self.step_num += 1 @@ -182,8 +169,7 @@ def get_vel(self): """ Velocities are in a.u. here, not ASE units """ - vel = np.stack([atoms.get_velocities() - for atoms in self.atoms_list]) + vel = np.stack([atoms.get_velocities() for atoms in self.atoms_list]) return vel @@ -197,35 +183,32 @@ def new_force_calc(self): """ surf = self.surfs[0] - needs_calc = np.bitwise_not( - np.isfinite( - self.forces[0, surf] - ) - ).any() + needs_calc = np.bitwise_not(np.isfinite(self.forces[0, surf])).any() if not needs_calc: return - new_job_dir = os.path.join(os.getcwd(), - f"{self.step_num - 1}_extra") + new_job_dir = os.path.join(os.getcwd(), f"{self.step_num - 1}_extra") if os.path.isdir(new_job_dir): shutil.rmtree(new_job_dir) else: os.makedirs(new_job_dir) - props = ab_results(nxyz=self.nxyz, - charge=self.charge, - num_states=self.num_states, - surf=surf, - job_dir=new_job_dir, - grad_config=self.grad_config, - nacv_config=self.nacv_config, - grad_details=self.grad_details, - nacv_details=self.nacv_details, - calc_nacv=False) - - key = f'energy_{surf}_grad' + props = ab_results( + nxyz=self.nxyz, + charge=self.charge, + num_states=self.num_states, + surf=surf, + job_dir=new_job_dir, + grad_config=self.grad_config, + nacv_config=self.nacv_config, + grad_details=self.grad_details, + nacv_details=self.nacv_details, + calc_nacv=False, + ) + + key = f"energy_{surf}_grad" self.props[key] = props[key] def run(self): @@ -240,28 +223,22 @@ def run(self): self.save() self.step(needs_nbrs=False) - with open(self.log_file, 'a') as f: - f.write('\nTully surface hopping terminated normally.') + with open(self.log_file, "a") as f: + f.write("\nTully surface hopping terminated normally.") @classmethod - def from_file(cls, - file): - + def from_file(cls, file): all_params = load_params(file) atoms_list = make_atoms(all_params) - instance = cls(atoms_list=atoms_list, - **all_params) + instance = cls(atoms_list=atoms_list, **all_params) return instance def main(): parser = argparse.ArgumentParser() - parser.add_argument('--params_file', - type=str, - help='Info file with parameters', - default='job_info.json') + parser.add_argument("--params_file", type=str, help="Info file with parameters", default="job_info.json") args = parser.parse_args() path = args.params_file @@ -272,8 +249,9 @@ def main(): except Exception as e: print(e) import pdb + pdb.post_mortem() -if __name__ == '__main__': +if __name__ == "__main__": main() diff --git a/nff/md/tully/ab_io.py b/nff/md/tully/ab_io.py index 30d0b7e0..c6979f5b 100644 --- a/nff/md/tully/ab_io.py +++ b/nff/md/tully/ab_io.py @@ -6,65 +6,51 @@ import numpy as np import copy -from chemconfigs.parsers.qchem import (get_cis_grads, - get_nacv, - get_sf_energies) +from chemconfigs.parsers.qchem import get_cis_grads, get_nacv, get_sf_energies from nff.utils.misc import bash_command CONFIG_DIRS = { - "bhhlyp_6-31gs_sf_tddft_engrad_qchem": - "qchem/bhhlyp_6-31gs_sf_tddft_engrad", - - "bhhlyp_6-31gs_sf_tddft_nacv_qchem": - "qchem/bhhlyp_6-31gs_sf_tddft_nacv" + "bhhlyp_6-31gs_sf_tddft_engrad_qchem": "qchem/bhhlyp_6-31gs_sf_tddft_engrad", + "bhhlyp_6-31gs_sf_tddft_nacv_qchem": "qchem/bhhlyp_6-31gs_sf_tddft_nacv", } -SPIN_FLIP_CONFIGS = ["bhhlyp_6-31gs_sf_tddft_engrad_qchem", - "bhhlyp_6-31gs_sf_tddft_engrad_qchem_pcm", - "bhhlyp_6-31gs_sf_tddft_nacv_qchem", - "bhhlyp_6-31gs_sf_tddft_nacv_qchem_pcm"] +SPIN_FLIP_CONFIGS = [ + "bhhlyp_6-31gs_sf_tddft_engrad_qchem", + "bhhlyp_6-31gs_sf_tddft_engrad_qchem_pcm", + "bhhlyp_6-31gs_sf_tddft_nacv_qchem", + "bhhlyp_6-31gs_sf_tddft_nacv_qchem_pcm", +] PERIODICTABLE = Chem.GetPeriodicTable() -def render(temp_text, - jobspec, - write_path): - +def render(temp_text, jobspec, write_path): template = Template(temp_text) inp = template.render(jobspec=jobspec) - with open(write_path, 'w') as f_open: + with open(write_path, "w") as f_open: f_open.write(inp) def get_files(config, jobspec): - platform = jobspec['details'].get("platform") + platform = jobspec["details"].get("platform") dic = config if platform is not None: dic = config[platform] - files = [dic['job_template_filename'], - *dic['extra_template_filenames']] + files = [dic["job_template_filename"], *dic["extra_template_filenames"]] - if config['name'] == "bhhlyp_6-31gs_sf_tddft_engrad_qchem": - rm_file = 'qchem_bhhlyp_6-31gs_sf_tddft_engrad.inp' + if config["name"] == "bhhlyp_6-31gs_sf_tddft_engrad_qchem": + rm_file = "qchem_bhhlyp_6-31gs_sf_tddft_engrad.inp" if rm_file in files: files.remove(rm_file) return files -def render_config(config_name, - config_dir, - config, - jobspec, - job_dir, - num_parallel, - run_parallel=True): - +def render_config(config_name, config_dir, config, jobspec, job_dir, num_parallel, run_parallel=True): files = get_files(config, jobspec) # use 1 / num_parallel * total number of cores @@ -72,123 +58,91 @@ def render_config(config_name, this_jobspec = copy.deepcopy(jobspec) if run_parallel: - nprocs = this_jobspec['details']['nprocs'] - this_jobspec['details']['nprocs'] = int(nprocs / num_parallel) + nprocs = this_jobspec["details"]["nprocs"] + this_jobspec["details"]["nprocs"] = int(nprocs / num_parallel) for file in files: temp_path = os.path.join(config_dir, file) write_path = os.path.join(job_dir, file) - with open(temp_path, 'r') as f: + with open(temp_path, "r") as f: temp_text = f.read() - render(temp_text=temp_text, - jobspec=this_jobspec, - write_path=write_path) + render(temp_text=temp_text, jobspec=this_jobspec, write_path=write_path) - info_path = os.path.join(job_dir, 'job_info.json') - with open(info_path, 'w') as f: + info_path = os.path.join(job_dir, "job_info.json") + with open(info_path, "w") as f: json.dump(this_jobspec, f, indent=4) def translate_dir(direc): - if '$HOME' in direc: - direc = direc.replace("$HOME", - os.environ["HOME"]) + if "$HOME" in direc: + direc = direc.replace("$HOME", os.environ["HOME"]) return direc -def load_config(config_name, - htvs_dir): - +def load_config(config_name, htvs_dir): config_dir_name = CONFIG_DIRS[config_name] - config_dir = os.path.join(translate_dir(htvs_dir), - 'chemconfigs', - config_dir_name) + config_dir = os.path.join(translate_dir(htvs_dir), "chemconfigs", config_dir_name) - config_path = os.path.join(config_dir, - 'config.json') + config_path = os.path.join(config_dir, "config.json") - with open(config_path, 'r') as f: + with open(config_path, "r") as f: config = json.load(f) return config, config_dir -def render_all(config_name, - jobspec, - job_dir, - num_parallel): - - htvs_dir = jobspec['details']['htvs'] - config, config_dir = load_config(config_name=config_name, - htvs_dir=htvs_dir) +def render_all(config_name, jobspec, job_dir, num_parallel): + htvs_dir = jobspec["details"]["htvs"] + config, config_dir = load_config(config_name=config_name, htvs_dir=htvs_dir) - render_config(config_name=config_name, - config_dir=config_dir, - config=config, - jobspec=jobspec, - job_dir=job_dir, - num_parallel=num_parallel) + render_config( + config_name=config_name, + config_dir=config_dir, + config=config, + jobspec=jobspec, + job_dir=job_dir, + num_parallel=num_parallel, + ) def get_coords(nxyz): coords = [] for l in nxyz: - this_coord = {"element": PERIODICTABLE.GetElementSymbol(int(l[0])), - "x": l[1], - "y": l[2], - "z": l[3]} + this_coord = {"element": PERIODICTABLE.GetElementSymbol(int(l[0])), "x": l[1], "y": l[2], "z": l[3]} coords.append(this_coord) return coords -def init_jobspec(nxyz, - details, - charge): - +def init_jobspec(nxyz, details, charge): coords = get_coords(nxyz) - jobspec = {'details': details, - 'coords': coords, - 'charge': charge} + jobspec = {"details": details, "coords": coords, "charge": charge} return jobspec -def sf_grad_jobspec(jobspec, - surf): - - jobspec['details'].update({'grad_roots': [int(surf)], - 'num_grad_roots': 1}) +def sf_grad_jobspec(jobspec, surf): + jobspec["details"].update({"grad_roots": [int(surf)], "num_grad_roots": 1}) return jobspec -def sf_nacv_jobspec(jobspec, - singlet_path, - num_states): - - with open(singlet_path, 'r') as f: +def sf_nacv_jobspec(jobspec, singlet_path, num_states): + with open(singlet_path, "r") as f: singlets = json.load(f) coupled_states = singlets[:num_states] - details = jobspec['details'] + details = jobspec["details"] details.update({"coupled_states": coupled_states}) return jobspec -def run_job(config_name, - jobspec, - job_dir, - num_parallel): - - render_all(config_name=config_name, - jobspec=jobspec, - job_dir=job_dir, - num_parallel=num_parallel) +def run_job(config_name, jobspec, job_dir, num_parallel): + render_all(config_name=config_name, jobspec=jobspec, job_dir=job_dir, num_parallel=num_parallel) cmd = f"cd {job_dir} && bash job.sh && rm *fchk" p = bash_command(cmd) @@ -196,95 +150,59 @@ def run_job(config_name, return p -def bhhlyp_6_31gs_sf_tddft_engrad_qchem(nxyz, - details, - charge, - surf, - job_dir, - num_parallel): - - jobspec = init_jobspec(nxyz=nxyz[0], - details=details, - charge=charge) - jobspec = sf_grad_jobspec(jobspec=jobspec, - surf=surf) +def bhhlyp_6_31gs_sf_tddft_engrad_qchem(nxyz, details, charge, surf, job_dir, num_parallel): + jobspec = init_jobspec(nxyz=nxyz[0], details=details, charge=charge) + jobspec = sf_grad_jobspec(jobspec=jobspec, surf=surf) - config_name = 'bhhlyp_6-31gs_sf_tddft_engrad_qchem' + config_name = "bhhlyp_6-31gs_sf_tddft_engrad_qchem" - grad_dir = os.path.join(job_dir, 'grad') + grad_dir = os.path.join(job_dir, "grad") if not os.path.isdir(grad_dir): os.makedirs(grad_dir) # copy job_info.json - p = run_job(config_name=config_name, - jobspec=jobspec, - job_dir=grad_dir, - num_parallel=num_parallel) + p = run_job(config_name=config_name, jobspec=jobspec, job_dir=grad_dir, num_parallel=num_parallel) return p def get_singlet_path(job_dir): - singlet_path = os.path.join(job_dir, 'grad', 'singlets.json') + singlet_path = os.path.join(job_dir, "grad", "singlets.json") return singlet_path -def bhhlyp_6_31gs_sf_tddft_nacv_qchem(nxyz, - details, - charge, - num_states, - job_dir, - num_parallel): - +def bhhlyp_6_31gs_sf_tddft_nacv_qchem(nxyz, details, charge, num_states, job_dir, num_parallel): singlet_path = get_singlet_path(job_dir) exists = False while not exists: exists = os.path.isfile(singlet_path) time.sleep(5) - jobspec = init_jobspec(nxyz=nxyz[0], - details=details, - charge=charge) - jobspec = sf_nacv_jobspec(jobspec=jobspec, - singlet_path=singlet_path, - num_states=num_states) + jobspec = init_jobspec(nxyz=nxyz[0], details=details, charge=charge) + jobspec = sf_nacv_jobspec(jobspec=jobspec, singlet_path=singlet_path, num_states=num_states) config_name = "bhhlyp_6-31gs_sf_tddft_nacv_qchem" - nacv_dir = os.path.join(job_dir, 'nacv') + nacv_dir = os.path.join(job_dir, "nacv") if not os.path.isdir(nacv_dir): os.makedirs(nacv_dir) - p = run_job(config_name=config_name, - jobspec=jobspec, - job_dir=nacv_dir, - num_parallel=num_parallel) + p = run_job(config_name=config_name, jobspec=jobspec, job_dir=nacv_dir, num_parallel=num_parallel) return p -def run_sf(job_dir, - nxyz, - charge, - num_states, - surf, - grad_details, - nacv_details, - grad_config, - nacv_config, - calc_nacv=True): - +def run_sf( + job_dir, nxyz, charge, num_states, surf, grad_details, nacv_details, grad_config, nacv_config, calc_nacv=True +): procs = [] proc_names = [] num_parallel = 2 if calc_nacv else 1 - if grad_config == 'bhhlyp_6-31gs_sf_tddft_engrad_qchem': - p = bhhlyp_6_31gs_sf_tddft_engrad_qchem(nxyz=nxyz, - details=grad_details, - charge=charge, - surf=surf, - job_dir=job_dir, - num_parallel=num_parallel) + if grad_config == "bhhlyp_6-31gs_sf_tddft_engrad_qchem": + p = bhhlyp_6_31gs_sf_tddft_engrad_qchem( + nxyz=nxyz, details=grad_details, charge=charge, surf=surf, job_dir=job_dir, num_parallel=num_parallel + ) procs.append(p) proc_names.append("Q-Chem engrad") @@ -294,12 +212,14 @@ def run_sf(job_dir, if calc_nacv: if nacv_config == "bhhlyp_6-31gs_sf_tddft_nacv_qchem": - p = bhhlyp_6_31gs_sf_tddft_nacv_qchem(nxyz=nxyz, - details=nacv_details, - charge=charge, - num_states=num_states, - job_dir=job_dir, - num_parallel=num_parallel) + p = bhhlyp_6_31gs_sf_tddft_nacv_qchem( + nxyz=nxyz, + details=nacv_details, + charge=charge, + num_states=num_states, + job_dir=job_dir, + num_parallel=num_parallel, + ) procs.append(p) proc_names.append("Q-Chem NACV") @@ -315,8 +235,8 @@ def run_sf(job_dir, def parse_sf_grads(job_dir): - path = os.path.join(job_dir, 'singlet_grad.out') - with open(path, 'r') as f: + path = os.path.join(job_dir, "singlet_grad.out") + with open(path, "r") as f: lines = f.readlines() output_dics = get_cis_grads(lines) @@ -324,84 +244,71 @@ def parse_sf_grads(job_dir): def parse_sf_ens(job_dir): - path = os.path.join(job_dir, 'singlet_energy.out') - with open(path, 'r') as f: + path = os.path.join(job_dir, "singlet_energy.out") + with open(path, "r") as f: lines = f.readlines() output_dics = get_sf_energies(lines) return output_dics -def parse_sf_nacv(job_dir, - conifg_name): - +def parse_sf_nacv(job_dir, conifg_name): if conifg_name == "bhhlyp_6-31gs_sf_tddft_nacv_qchem": - out_name = 'qchem_bhhlyp_6-31gs_sf_tddft_nacv' + out_name = "qchem_bhhlyp_6-31gs_sf_tddft_nacv" else: raise NotImplementedError - path = os.path.join(job_dir, f'{out_name}.out') - with open(path, 'r') as f: + path = os.path.join(job_dir, f"{out_name}.out") + with open(path, "r") as f: lines = f.readlines() output_dics = get_nacv(lines) return output_dics -def check_sf(grad_config, - nacv_config): +def check_sf(grad_config, nacv_config): configs = [grad_config, nacv_config] is_sf = any([config in SPIN_FLIP_CONFIGS for config in configs]) return is_sf -def parse_sf(job_dir, - nacv_config, - calc_nacv=True): - - nacv_dir = os.path.join(job_dir, 'nacv') - grad_dir = os.path.join(job_dir, 'grad') +def parse_sf(job_dir, nacv_config, calc_nacv=True): + nacv_dir = os.path.join(job_dir, "nacv") + grad_dir = os.path.join(job_dir, "grad") en_dics = parse_sf_ens(job_dir=grad_dir) grad_dics = parse_sf_grads(job_dir=grad_dir) if calc_nacv: - nacv_dic = parse_sf_nacv(job_dir=nacv_dir, - conifg_name=nacv_config) + nacv_dic = parse_sf_nacv(job_dir=nacv_dir, conifg_name=nacv_config) else: nacv_dic = {} return en_dics, grad_dics, nacv_dic -def en_to_arr(results, - en_dics, - singlets): - +def en_to_arr(results, en_dics, singlets): for dic in en_dics: - state = dic['state'] + state = dic["state"] if state not in singlets: continue idx = singlets.index(state) key = f"energy_{idx}" - en = dic['energy'] + en = dic["energy"] results[key] = np.array([en]) return results -def grad_to_arr(results, - grad_dics, - singlets): - +def grad_to_arr(results, grad_dics, singlets): combined_grad = {} for dic in grad_dics: combined_grad.update(dic) for abs_state, grad in combined_grad.items(): idx = singlets.index(abs_state) - key = f'energy_{idx}_grad' + key = f"energy_{idx}_grad" grad = np.array(grad) shape = grad.shape @@ -410,12 +317,9 @@ def grad_to_arr(results, return results -def nacv_to_arr(results, - nacv_dic, - singlets): - - translation = {"deriv_nacv_etf": 'nacv'} - keys = ['deriv_nacv_etf', 'force_nacv'] +def nacv_to_arr(results, nacv_dic, singlets): + translation = {"deriv_nacv_etf": "nacv"} + keys = ["deriv_nacv_etf", "force_nacv"] for key in keys: if key not in nacv_dic: @@ -427,8 +331,7 @@ def nacv_to_arr(results, singlet_end = singlets.index(end_state) translate_base = translation.get(key, key) - results_key = (f"{translate_base}_{singlet_start}" - f"{singlet_end}") + results_key = f"{translate_base}_{singlet_start}" f"{singlet_end}" nacv = np.array(nacv) shape = nacv.shape @@ -437,46 +340,26 @@ def nacv_to_arr(results, return results -def combine_results(singlets, - en_dics, - grad_dics, - nacv_dic): - +def combine_results(singlets, en_dics, grad_dics, nacv_dic): results = {} - results = en_to_arr(results=results, - en_dics=en_dics, - singlets=singlets) - results = grad_to_arr(results=results, - grad_dics=grad_dics, - singlets=singlets) - results = nacv_to_arr(results=results, - nacv_dic=nacv_dic, - singlets=singlets) + results = en_to_arr(results=results, en_dics=en_dics, singlets=singlets) + results = grad_to_arr(results=results, grad_dics=grad_dics, singlets=singlets) + results = nacv_to_arr(results=results, nacv_dic=nacv_dic, singlets=singlets) return results -def parse(job_dir, - grad_config, - nacv_config, - calc_nacv=True): - - is_sf = check_sf(grad_config=grad_config, - nacv_config=nacv_config) +def parse(job_dir, grad_config, nacv_config, calc_nacv=True): + is_sf = check_sf(grad_config=grad_config, nacv_config=nacv_config) if is_sf: - en_dics, grad_dics, nacv_dic = parse_sf(job_dir=job_dir, - nacv_config=nacv_config, - calc_nacv=calc_nacv) + en_dics, grad_dics, nacv_dic = parse_sf(job_dir=job_dir, nacv_config=nacv_config, calc_nacv=calc_nacv) singlet_path = get_singlet_path(job_dir) - with open(singlet_path, 'r') as f: + with open(singlet_path, "r") as f: singlets = json.load(f) - results = combine_results(singlets=singlets, - en_dics=en_dics, - grad_dics=grad_dics, - nacv_dic=nacv_dic) + results = combine_results(singlets=singlets, en_dics=en_dics, grad_dics=grad_dics, nacv_dic=nacv_dic) else: raise NotImplementedError @@ -484,38 +367,28 @@ def parse(job_dir, return results -def get_results(nxyz, - charge, - num_states, - surf, - job_dir, - grad_config, - nacv_config, - grad_details, - nacv_details, - calc_nacv=True): - - is_sf = check_sf(grad_config=grad_config, - nacv_config=nacv_config) +def get_results( + nxyz, charge, num_states, surf, job_dir, grad_config, nacv_config, grad_details, nacv_details, calc_nacv=True +): + is_sf = check_sf(grad_config=grad_config, nacv_config=nacv_config) if is_sf: - run_sf(job_dir=job_dir, - nxyz=nxyz, - charge=charge, - surf=surf, - num_states=num_states, - grad_details=grad_details, - nacv_details=nacv_details, - grad_config=grad_config, - nacv_config=nacv_config, - calc_nacv=calc_nacv) + run_sf( + job_dir=job_dir, + nxyz=nxyz, + charge=charge, + surf=surf, + num_states=num_states, + grad_details=grad_details, + nacv_details=nacv_details, + grad_config=grad_config, + nacv_config=nacv_config, + calc_nacv=calc_nacv, + ) else: raise NotImplementedError - results = parse(job_dir=job_dir, - grad_config=grad_config, - nacv_config=nacv_config, - calc_nacv=calc_nacv) + results = parse(job_dir=job_dir, grad_config=grad_config, nacv_config=nacv_config, calc_nacv=calc_nacv) return results diff --git a/nff/md/tully/io.py b/nff/md/tully/io.py index e481c849..1cda996e 100644 --- a/nff/md/tully/io.py +++ b/nff/md/tully/io.py @@ -2,6 +2,7 @@ Link between Tully surface hopping and both NFF models and JSON parameter files. """ + import json import os @@ -23,12 +24,7 @@ ANGLE_MODELS = ["DimeNet", "DimeNetDiabat", "DimeNetDiabatDelta"] -def check_hop(model, - results, - max_gap_hop, - surf, - num_states): - +def check_hop(model, results, max_gap_hop, surf, num_states): # **** this won't work - assumes surf is an integer """ `max_gap_hop` in a.u. @@ -39,35 +35,29 @@ def check_hop(model, continue upper = max([i, surf]) lower = min([i, surf]) - key = f'energy_{upper}_energy_{lower}_delta' + key = f"energy_{upper}_energy_{lower}_delta" gap_keys.append(key) # convert max_gap_hop to kcal - max_conv = max_gap_hop * const.AU_TO_KCAL['energy'] - gaps = torch.cat([results[key].reshape(-1, 1) - for key in gap_keys], dim=-1) + max_conv = max_gap_hop * const.AU_TO_KCAL["energy"] + gaps = torch.cat([results[key].reshape(-1, 1) for key in gap_keys], dim=-1) can_hop = (gaps <= max_conv).sum(-1).to(torch.bool) return can_hop -def split_by_hop(dic, - can_hop, - num_atoms): - +def split_by_hop(dic, can_hop, num_atoms): hop_dic = {} no_hop_dic = {} for key, val in dic.items(): - if any(['nacv' in key, 'grad' in key, 'nxyz' in key]): + if any(["nacv" in key, "grad" in key, "nxyz" in key]): val = torch.split(val, num_atoms) - hop_tensor = torch.cat([item for i, item in enumerate(val) - if can_hop[i]]) + hop_tensor = torch.cat([item for i, item in enumerate(val) if can_hop[i]]) - no_hop_tensor = torch.cat([item for i, item in enumerate(val) - if not can_hop[i]]) + no_hop_tensor = torch.cat([item for i, item in enumerate(val) if not can_hop[i]]) hop_dic[key] = hop_tensor no_hop_dic[key] = no_hop_tensor @@ -75,67 +65,43 @@ def split_by_hop(dic, return hop_dic, no_hop_dic -def split_all(model, - xyz, - max_gap_hop, - surf, - num_states, - batch, - results): - - can_hop = check_hop(model=model, - results=results, - max_gap_hop=max_gap_hop, - surf=surf, - num_states=num_states) +def split_all(model, xyz, max_gap_hop, surf, num_states, batch, results): + can_hop = check_hop(model=model, results=results, max_gap_hop=max_gap_hop, surf=surf, num_states=num_states) - num_atoms = batch['num_atoms'].tolist() - batch['xyz'] = xyz + num_atoms = batch["num_atoms"].tolist() + batch["xyz"] = xyz - hop_batch, no_hop_batch = split_by_hop(dic=batch, - can_hop=can_hop, - num_atoms=num_atoms) + hop_batch, no_hop_batch = split_by_hop(dic=batch, can_hop=can_hop, num_atoms=num_atoms) - hop_results, no_hop_results = split_by_hop(dic=results, - can_hop=can_hop, - num_atoms=num_atoms) + hop_results, no_hop_results = split_by_hop(dic=results, can_hop=can_hop, num_atoms=num_atoms) splits = (hop_batch, no_hop_batch, hop_results, no_hop_results) return splits, can_hop -def init_results(num_atoms, - num_states): - - en_keys = [f'energy_{i}' for i in range(num_states)] +def init_results(num_atoms, num_states): + en_keys = [f"energy_{i}" for i in range(num_states)] grad_keys = [key + "_grad" for key in en_keys] - nacv_keys = [f"nacv_{i}{j}" for i in range(num_states) - for j in range(num_states) if i != j] + nacv_keys = [f"nacv_{i}{j}" for i in range(num_states) for j in range(num_states) if i != j] force_nacv_keys = ["force_" + key for key in nacv_keys] num_samples = len(num_atoms) - shapes = {"energy": [num_samples], - "grad": [num_samples, num_atoms[0], 3]} + shapes = {"energy": [num_samples], "grad": [num_samples, num_atoms[0], 3]} - key_maps = {"energy": en_keys, - "grad": [*grad_keys, *nacv_keys, *force_nacv_keys]} + key_maps = {"energy": en_keys, "grad": [*grad_keys, *nacv_keys, *force_nacv_keys]} results = {} for key_type, keys in key_maps.items(): shape = shapes[key_type] for key in keys: - init = torch.ones(*shape) * float('nan') + init = torch.ones(*shape) * float("nan") results[key] = init -def fill_results(batch, - these_results, - results, - idx): - - num_atoms = batch['num_atoms'].tolist() - grad_flags = ['_grad', 'nacv'] +def fill_results(batch, these_results, results, idx): + num_atoms = batch["num_atoms"].tolist() + grad_flags = ["_grad", "nacv"] for key, val in these_results.keys(): if any([flag in key for flag in grad_flags]): @@ -146,96 +112,68 @@ def fill_results(batch, return results -def combine_all(no_hop_results, - hop_results, - no_hop_batch, - hop_batch, - can_hop, - num_states, - batch): - - num_atoms = batch['num_atoms'].tolist() - results = init_results(num_atoms=num_atoms, - num_states=num_states) +def combine_all(no_hop_results, hop_results, no_hop_batch, hop_batch, can_hop, num_states, batch): + num_atoms = batch["num_atoms"].tolist() + results = init_results(num_atoms=num_atoms, num_states=num_states) hop_idx = can_hop.nonzero() no_hop_idx = torch.bitwise_not(can_hop).nonzero() - tuples = [(no_hop_batch, no_hop_results, no_hop_idx), - (hop_batch, hop_results, hop_idx)] + tuples = [(no_hop_batch, no_hop_results, no_hop_idx), (hop_batch, hop_results, hop_idx)] for tup in tuples: batch, these_results, idx = tup - results = fill_results(batch=batch, - these_results=these_results, - results=results, - idx=idx) + results = fill_results(batch=batch, these_results=these_results, results=results, idx=idx) return results -def grad_by_split(model, - hop_batch, - hop_results, - no_hop_batch, - no_hop_results, - surf): - +def grad_by_split(model, hop_batch, hop_results, no_hop_batch, no_hop_results, surf): # add all the gradients for the hop batch and results - model.diabatic_readout.add_all_grads(xyz=hop_batch['xyz'], - results=hop_results, - num_atoms=hop_batch['num_atoms'], - u=hop_results['U'], - add_u=False) + model.diabatic_readout.add_all_grads( + xyz=hop_batch["xyz"], results=hop_results, num_atoms=hop_batch["num_atoms"], u=hop_results["U"], add_u=False + ) # just add the state gradient for the non-hop batch / results - key = f'energy_{surf}' - surf_grad = compute_grad(inputs=no_hop_batch['xyz'], - output=no_hop_results[key]) - no_hop_results[key + '_grad'] = surf_grad + key = f"energy_{surf}" + surf_grad = compute_grad(inputs=no_hop_batch["xyz"], output=no_hop_results[key]) + no_hop_results[key + "_grad"] = surf_grad return hop_results, no_hop_results -def add_grad(model, - batch, - xyz, - results, - max_gap_hop, - surf, - num_states): - +def add_grad(model, batch, xyz, results, max_gap_hop, surf, num_states): # split batches and results into those that require NACVs # and gradients on all states, and those that only require # the gradient on the current state - splits, can_hop = split_all(model=model, - xyz=xyz, - max_gap_hop=max_gap_hop, - surf=surf, - num_states=num_states, - batch=batch, - results=results) + splits, can_hop = split_all( + model=model, xyz=xyz, max_gap_hop=max_gap_hop, surf=surf, num_states=num_states, batch=batch, results=results + ) (hop_batch, no_hop_batch, hop_results, no_hop_results) = splits # add the relevant gradients - hop_results, no_hop_results = grad_by_split(model=model, - hop_batch=hop_batch, - hop_results=hop_results, - no_hop_batch=no_hop_batch, - no_hop_results=no_hop_results, - surf=surf) + hop_results, no_hop_results = grad_by_split( + model=model, + hop_batch=hop_batch, + hop_results=hop_results, + no_hop_batch=no_hop_batch, + no_hop_results=no_hop_results, + surf=surf, + ) # combine everything together - results = combine_all(no_hop_results=no_hop_results, - hop_results=hop_results, - no_hop_batch=no_hop_batch, - hop_batch=hop_batch, - can_hop=can_hop, - num_states=num_states, - batch=batch) + results = combine_all( + no_hop_results=no_hop_results, + hop_results=hop_results, + no_hop_batch=no_hop_batch, + hop_batch=hop_batch, + can_hop=can_hop, + num_states=num_states, + batch=batch, + ) return results @@ -255,14 +193,7 @@ def add_grad(model, # for i in range(num_states)} -def run_model(model, - batch, - device, - surf, - max_gap_hop, - num_states, - all_engrads, - nacv): +def run_model(model, batch, device, surf, max_gap_hop, num_states, all_engrads, nacv): """ `max_gap_hop` in a.u. """ @@ -284,14 +215,16 @@ def run_model(model, xyz = None model.add_nacv = nacv - results = model(batch, - xyz=xyz, - add_nacv=nacv, - # add_grad=all_engrads, - add_grad=True, - add_gap=True, - add_u=True, - inference=True) + results = model( + batch, + xyz=xyz, + add_nacv=nacv, + # add_grad=all_engrads, + add_grad=True, + add_gap=True, + add_u=True, + inference=True, + ) # If we use NACV then we can come back to what's commented # out below, where you only ask for gradients NACVs among states @@ -318,8 +251,7 @@ def run_model(model, def get_phases(U, old_U): # Compute overlap - S = np.einsum('...ki, ...kj -> ...ij', - old_U, U) + S = np.einsum("...ki, ...kj -> ...ij", old_U, U) # Take the element in each column with the # largest absolute value, not just the diagonal. @@ -333,48 +265,33 @@ def get_phases(U, old_U): max_idx = abs(S).argmax(axis=1) num_samples = S.shape[0] - S_max = np.take_along_axis( - S.transpose(0, 2, 1), - max_idx.reshape(num_samples, num_states, 1), - axis=2 - ).transpose(0, 2, 1) + S_max = np.take_along_axis(S.transpose(0, 2, 1), max_idx.reshape(num_samples, num_states, 1), axis=2).transpose( + 0, 2, 1 + ) new_phases = np.sign(S_max) return new_phases -def update_phase(new_phases, - i, - j, - results, - key, - num_atoms): +def update_phase(new_phases, i, j, results, key, num_atoms): + phase = (new_phases[:, :, i] * new_phases[:, :, j]).reshape(-1, 1, 1) - phase = ((new_phases[:, :, i] * new_phases[:, :, j]) - .reshape(-1, 1, 1)) - - updated = np.concatenate( - np.split(results[key], num_atoms) - ).reshape(-1, num_atoms[0], 3) * phase + updated = np.concatenate(np.split(results[key], num_atoms)).reshape(-1, num_atoms[0], 3) * phase results[key] = updated return results -def correct_nacv(results, - old_U, - num_atoms, - num_states): +def correct_nacv(results, old_U, num_atoms, num_states): """ Stack the non-adiabatic couplings and correct their phases. Also correct the phases of U. """ # get phase correction - new_phases = get_phases(U=results["U"], - old_U=old_U) + new_phases = get_phases(U=results["U"], old_U=old_U) new_U = results["U"] * new_phases results["U"] = new_U @@ -397,45 +314,32 @@ def correct_nacv(results, if key not in results: continue - results = update_phase( - new_phases=new_phases, - i=i, - j=j, - results=results, - key=key, - num_atoms=num_atoms) + results = update_phase(new_phases=new_phases, i=i, j=j, results=results, key=key, num_atoms=num_atoms) return results -def batched_calc(model, - batch, - device, - num_states, - surf, - max_gap_hop, - all_engrads, - nacv): +def batched_calc(model, batch, device, num_states, surf, max_gap_hop, all_engrads, nacv): """ Get model results from a batch, including nacv phase correction """ - results = run_model(model=model, - batch=batch, - device=device, - surf=surf, - max_gap_hop=max_gap_hop, - num_states=num_states, - all_engrads=all_engrads, - nacv=nacv) + results = run_model( + model=model, + batch=batch, + device=device, + surf=surf, + max_gap_hop=max_gap_hop, + num_states=num_states, + all_engrads=all_engrads, + nacv=nacv, + ) return results -def concat_and_conv(results_list, - num_atoms, - diabat_keys): +def concat_and_conv(results_list, num_atoms, diabat_keys): """ Concatenate results from separate batches and convert to atomic units @@ -450,13 +354,13 @@ def concat_and_conv(results_list, for key in keys: val = torch.cat([i[key] for i in results_list]) - if ('energy' in key and '_grad' in key) or 'force_nacv' in key: - val *= conv['energy'] * conv['_grad'] + if ("energy" in key and "_grad" in key) or "force_nacv" in key: + val *= conv["energy"] * conv["_grad"] val = val.reshape(*grad_shape) - elif 'energy' in key or key in diabat_keys: - val *= conv['energy'] - elif 'nacv' in key: - val *= conv['_grad'] + elif "energy" in key or key in diabat_keys: + val *= conv["energy"] + elif "nacv" in key: + val *= conv["_grad"] val = val.reshape(*grad_shape) # else: # msg = f"{key} has no known conversion" @@ -467,35 +371,18 @@ def concat_and_conv(results_list, return all_results -def make_loader(nxyz, - nbr_list, - num_atoms, - needs_nbrs, - cutoff, - cutoff_skin, - device, - batch_size): - - props = {"nxyz": [torch.Tensor(i) - for i in nxyz]} +def make_loader(nxyz, nbr_list, num_atoms, needs_nbrs, cutoff, cutoff_skin, device, batch_size): + props = {"nxyz": [torch.Tensor(i) for i in nxyz]} - dataset = Dataset(props=props, - units='kcal/mol', - check_props=True) + dataset = Dataset(props=props, units="kcal/mol", check_props=True) if needs_nbrs or nbr_list is None: - nbrs = single_spec_nbrs(dset=dataset, - cutoff=(cutoff + - cutoff_skin), - device=device, - directed=True) - dataset.props['nbr_list'] = nbrs + nbrs = single_spec_nbrs(dset=dataset, cutoff=(cutoff + cutoff_skin), device=device, directed=True) + dataset.props["nbr_list"] = nbrs else: - dataset.props['nbr_list'] = nbr_list + dataset.props["nbr_list"] = nbr_list - loader = DataLoader(dataset, - batch_size=batch_size, - collate_fn=collate_dicts) + loader = DataLoader(dataset, batch_size=batch_size, collate_fn=collate_dicts) return loader @@ -516,55 +403,58 @@ def my_func(*args, **kwargs): # @timing -def get_results(model, - nxyz, - nbr_list, - num_atoms, - needs_nbrs, - cutoff, - cutoff_skin, - device, - batch_size, - old_U, - num_states, - surf, - max_gap_hop, - all_engrads, - nacv, - diabat_keys): +def get_results( + model, + nxyz, + nbr_list, + num_atoms, + needs_nbrs, + cutoff, + cutoff_skin, + device, + batch_size, + old_U, + num_states, + surf, + max_gap_hop, + all_engrads, + nacv, + diabat_keys, +): """ `nxyz_list` assumed to be in Angstroms """ - loader = make_loader(nxyz=nxyz, - nbr_list=nbr_list, - num_atoms=num_atoms, - needs_nbrs=needs_nbrs, - cutoff=cutoff, - cutoff_skin=cutoff_skin, - device=device, - batch_size=batch_size) + loader = make_loader( + nxyz=nxyz, + nbr_list=nbr_list, + num_atoms=num_atoms, + needs_nbrs=needs_nbrs, + cutoff=cutoff, + cutoff_skin=cutoff_skin, + device=device, + batch_size=batch_size, + ) results_list = [] for batch in loader: - results = batched_calc(model=model, - batch=batch, - device=device, - num_states=num_states, - surf=surf, - max_gap_hop=max_gap_hop, - all_engrads=all_engrads, - nacv=nacv) + results = batched_calc( + model=model, + batch=batch, + device=device, + num_states=num_states, + surf=surf, + max_gap_hop=max_gap_hop, + all_engrads=all_engrads, + nacv=nacv, + ) results_list.append(results) - all_results = concat_and_conv(results_list=results_list, - num_atoms=num_atoms, - diabat_keys=diabat_keys) + all_results = concat_and_conv(results_list=results_list, num_atoms=num_atoms, diabat_keys=diabat_keys) if old_U is not None: - all_results = correct_nacv(results=all_results, - old_U=old_U, - num_atoms=[num_atoms] * old_U.shape[0], - num_states=num_states) + all_results = correct_nacv( + results=all_results, old_U=old_U, num_atoms=[num_atoms] * old_U.shape[0], num_states=num_states + ) return all_results @@ -572,7 +462,7 @@ def get_results(model, def coords_to_xyz(coords): nxyz = [] for dic in coords: - directions = ['x', 'y', 'z'] + directions = ["x", "y", "z"] n = float(PERIODICTABLE.GetAtomicNumber(dic["element"])) xyz = [dic[i] for i in directions] nxyz.append([n, *xyz]) @@ -580,36 +470,30 @@ def coords_to_xyz(coords): def load_json(file): - - with open(file, 'r') as f: + with open(file, "r") as f: info = json.load(f) - if 'details' in info: - details = info['details'] + if "details" in info: + details = info["details"] else: details = {} - all_params = {key: val for key, val in info.items() - if key != "details"} + all_params = {key: val for key, val in info.items() if key != "details"} all_params.update(details) return all_params -def make_dataset(nxyz, - ground_params): - props = { - 'nxyz': [torch.Tensor(nxyz)] - } +def make_dataset(nxyz, ground_params): + props = {"nxyz": [torch.Tensor(nxyz)]} cutoff = ground_params["cutoff"] cutoff_skin = ground_params["cutoff_skin"] - dataset = Dataset(props.copy(), units='kcal/mol') - dataset.generate_neighbor_list(cutoff=(cutoff + cutoff_skin), - undirected=False) + dataset = Dataset(props.copy(), units="kcal/mol") + dataset.generate_neighbor_list(cutoff=(cutoff + cutoff_skin), undirected=False) model_type = ground_params["model_type"] - needs_angles = (model_type in ANGLE_MODELS) + needs_angles = model_type in ANGLE_MODELS if needs_angles: dataset.generate_angle_list() @@ -626,13 +510,8 @@ def get_batched_props(dataset): return batched_props -def add_calculator(atomsbatch, - model_path, - model_type, - device, - batched_props): - - needs_angles = (model_type in ANGLE_MODELS) +def add_calculator(atomsbatch, model_path, model_type, device, batched_props): + needs_angles = model_type in ANGLE_MODELS nff_ase = NeuralFF.from_file( model_path=model_path, @@ -642,41 +521,40 @@ def add_calculator(atomsbatch, params=None, model_type=model_type, needs_angles=needs_angles, - dataset_props=batched_props + dataset_props=batched_props, ) atomsbatch.set_calculator(nff_ase) -def get_atoms(ground_params, - all_params): - +def get_atoms(ground_params, all_params): coords = all_params["coords"] nxyz = coords_to_xyz(coords) - atoms = Atoms(nxyz[:, 0], - positions=nxyz[:, 1:]) + atoms = Atoms(nxyz[:, 0], positions=nxyz[:, 1:]) - dataset, needs_angles = make_dataset(nxyz=nxyz, - ground_params=ground_params) + dataset, needs_angles = make_dataset(nxyz=nxyz, ground_params=ground_params) batched_props = get_batched_props(dataset) - device = ground_params.get('device', 'cuda') + device = ground_params.get("device", "cuda") - atomsbatch = AtomsBatch.from_atoms(atoms=atoms, - props=batched_props, - needs_angles=needs_angles, - device=device, - undirected=False, - cutoff_skin=ground_params['cutoff_skin']) + atomsbatch = AtomsBatch.from_atoms( + atoms=atoms, + props=batched_props, + needs_angles=needs_angles, + device=device, + undirected=False, + cutoff_skin=ground_params["cutoff_skin"], + ) - if 'model_path' in all_params: - model_path = all_params['model_path'] + if "model_path" in all_params: + model_path = all_params["model_path"] else: - model_path = os.path.join(all_params['weightpath'], - str(all_params["nnid"])) - add_calculator(atomsbatch=atomsbatch, - model_path=model_path, - model_type=ground_params["model_type"], - device=device, - batched_props=batched_props) + model_path = os.path.join(all_params["weightpath"], str(all_params["nnid"])) + add_calculator( + atomsbatch=atomsbatch, + model_path=model_path, + model_type=ground_params["model_type"], + device=device, + batched_props=batched_props, + ) return atomsbatch diff --git a/nff/md/tully/step.py b/nff/md/tully/step.py index 78209640..66e18311 100644 --- a/nff/md/tully/step.py +++ b/nff/md/tully/step.py @@ -9,41 +9,30 @@ import torch -def compute_T(nacv, - vel, - c): - +def compute_T(nacv, vel, c): # vel has shape num_samples x num_atoms x 3 # nacv has shape num_samples x num_states x num_states # x num_atoms x 3 # T has shape num_samples x (num_states x num_states) - T = (vel.reshape(vel.shape[0], 1, 1, -1, 3) - * nacv).sum((-1, -2)) + T = (vel.reshape(vel.shape[0], 1, 1, -1, 3) * nacv).sum((-1, -2)) # anything that's nan has too big a gap # for hopping and should therefore have T=0 T[np.isnan(T)] = 0 num_states = nacv.shape[1] - coupling = np.einsum('nij, nj-> ni', T, c[:, :num_states]) + coupling = np.einsum("nij, nj-> ni", T, c[:, :num_states]) return T, coupling -def get_dc_dt(c, - vel, - nacv, - energy, - hbar=1): - +def get_dc_dt(c, vel, nacv, energy, hbar=1): # energies have shape num_samples x num_states w = energy / hbar # T has dimension num_samples x (num_states x num_states) - T, coupling = compute_T(nacv=nacv, - vel=vel, - c=c) + T, coupling = compute_T(nacv=nacv, vel=vel, c=c) dc_dt = -(1j * w * c + coupling) @@ -55,33 +44,21 @@ def get_a(c): num_samples = c.shape[0] num_states = c.shape[1] - a = np.zeros((num_samples, num_states, num_states), - dtype='complex128') + a = np.zeros((num_samples, num_states, num_states), dtype="complex128") for i in range(num_states): for j in range(num_states): - a[..., i, j] = (np.conj(c[..., i]) - * c[..., j]) + a[..., i, j] = np.conj(c[..., i]) * c[..., j] return a -def remove_self_hop(p, - surfs): - +def remove_self_hop(p, surfs): same_surfs = surfs.reshape(-1, 1) - np.put_along_axis(p, - same_surfs, - np.zeros_like(same_surfs), - axis=-1) + np.put_along_axis(p, same_surfs, np.zeros_like(same_surfs), axis=-1) return p -def get_tully_p(c, - T, - dt, - surfs, - num_adiabat, - **kwargs): +def get_tully_p(c, T, dt, surfs, num_adiabat, **kwargs): """ Tully surface hopping probability """ @@ -95,12 +72,10 @@ def get_tully_p(c, b = -2 * np.real(np.conj(a) * T) # a_surf has dimension num_samples x 1 - a_surf = np.stack([sample_a[surf, surf] for - sample_a, surf in zip(a, surfs)]).reshape(-1, 1) + a_surf = np.stack([sample_a[surf, surf] for sample_a, surf in zip(a, surfs)]).reshape(-1, 1) # b_surf has dimension num_samples x num_states - b_surf = np.stack([sample_b[:, surf] for - sample_b, surf in zip(b, surfs)]) + b_surf = np.stack([sample_b[:, surf] for sample_b, surf in zip(b, surfs)]) # p has dimension num_samples x num_states, for the # hopping probability of each sample to all other @@ -112,8 +87,7 @@ def get_tully_p(c, p = np.real(dt * b_surf / a_surf) # no hopping from current state to self - p = remove_self_hop(p=p, - surfs=surfs) + p = remove_self_hop(p=p, surfs=surfs) # only hop among adiabatic states of interest p = p[:, :num_adiabat] @@ -121,12 +95,7 @@ def get_tully_p(c, return p -def get_sharc_p(old_c, - new_c, - P, - surfs, - num_adiabat, - **kwargs): +def get_sharc_p(old_c, new_c, P, surfs, num_adiabat, **kwargs): """ P is the propagator. """ @@ -134,52 +103,32 @@ def get_sharc_p(old_c, num_samples = old_c.shape[0] num_states = old_c.shape[1] - other_surfs = get_other_surfs(surfs=surfs, - num_states=num_states, - num_samples=num_samples) + other_surfs = get_other_surfs(surfs=surfs, num_states=num_states, num_samples=num_samples) - c_beta_t = np.take_along_axis(old_c, - surfs.reshape(-1, 1), - axis=-1) - c_beta_dt = np.take_along_axis(new_c, - surfs.reshape(-1, 1), - axis=-1) + c_beta_t = np.take_along_axis(old_c, surfs.reshape(-1, 1), axis=-1) + c_beta_dt = np.take_along_axis(new_c, surfs.reshape(-1, 1), axis=-1) - c_alpha_dt = np.take_along_axis(new_c, - other_surfs, - axis=-1) + c_alpha_dt = np.take_along_axis(new_c, other_surfs, axis=-1) # `P` has dimension num_samples x num_states x num_states - P_alpha_beta = np.take_along_axis(np.take_along_axis( - P, - surfs.reshape(-1, 1, 1), - axis=-1).squeeze(-1), - other_surfs, - axis=-1 + P_alpha_beta = np.take_along_axis( + np.take_along_axis(P, surfs.reshape(-1, 1, 1), axis=-1).squeeze(-1), other_surfs, axis=-1 ) - P_beta_beta = np.take_along_axis(np.take_along_axis( - P, - surfs.reshape(-1, 1, 1), - axis=-1).squeeze(-1), - surfs.reshape(-1, 1), - axis=-1 + P_beta_beta = np.take_along_axis( + np.take_along_axis(P, surfs.reshape(-1, 1, 1), axis=-1).squeeze(-1), surfs.reshape(-1, 1), axis=-1 ) # h_alpha is the transition probability from the current state # to alpha num = np.real(c_alpha_dt * np.conj(P_alpha_beta) * np.conj(c_beta_t)) - denom = abs(c_beta_t) ** 2 - np.real(c_beta_dt * np.conj(P_beta_beta) - * np.conj(c_beta_t)) + denom = abs(c_beta_t) ** 2 - np.real(c_beta_dt * np.conj(P_beta_beta) * np.conj(c_beta_t)) pref = 1 - abs(c_beta_dt) ** 2 / abs(c_beta_t) ** 2 h = np.zeros((num_samples, num_states)) - np.put_along_axis(h, - other_surfs, - pref * num / denom, - axis=-1) + np.put_along_axis(h, other_surfs, pref * num / denom, axis=-1) h[h < 0] = 0 # only hop among adiabatic states of interest @@ -188,12 +137,10 @@ def get_sharc_p(old_c, return h -def get_p_hop(hop_eqn='sharc', - **kwargs): - - if hop_eqn == 'sharc': +def get_p_hop(hop_eqn="sharc", **kwargs): + if hop_eqn == "sharc": p = get_sharc_p(**kwargs) - elif hop_eqn == 'tully': + elif hop_eqn == "tully": p = get_tully_p(**kwargs) else: raise NotImplementedError @@ -201,15 +148,9 @@ def get_p_hop(hop_eqn='sharc', return p -def get_new_surf(p_hop, - surfs, - max_gap_hop, - energy): - +def get_new_surf(p_hop, surfs, max_gap_hop, energy): num_samples = p_hop.shape[0] - lhs = np.concatenate([np.zeros(num_samples).reshape(-1, 1), - p_hop.cumsum(axis=-1)], - axis=-1)[:, :-1] + lhs = np.concatenate([np.zeros(num_samples).reshape(-1, 1), p_hop.cumsum(axis=-1)], axis=-1)[:, :-1] rhs = lhs + p_hop r = np.random.rand(num_samples).reshape(-1, 1) hop = (lhs < r) * (r <= rhs) @@ -221,12 +162,8 @@ def get_new_surf(p_hop, if max_gap_hop is None: return new_surfs - old_en = np.take_along_axis(energy, - surfs.reshape(-1, 1), - axis=-1).squeeze(-1) - new_en = np.take_along_axis(energy, - new_surfs.reshape(-1, 1), - axis=-1).squeeze(-1) + old_en = np.take_along_axis(energy, surfs.reshape(-1, 1), axis=-1).squeeze(-1) + new_en = np.take_along_axis(energy, new_surfs.reshape(-1, 1), axis=-1).squeeze(-1) gaps = abs(old_en - new_en) bad_idx = gaps >= max_gap_hop new_surfs[bad_idx] = surfs[bad_idx] @@ -234,29 +171,20 @@ def get_new_surf(p_hop, return new_surfs -def solve_quadratic(vel, - nac_dir, - old_en, - new_en, - mass): - a = (1 / (2 * mass.reshape(1, -1, 1)) - * nac_dir ** 2).sum((-1, -2)).astype('complex128') - b = (vel * nac_dir).sum((-1, -2)).astype('complex128') - c = (new_en - old_en).astype('complex128') +def solve_quadratic(vel, nac_dir, old_en, new_en, mass): + a = (1 / (2 * mass.reshape(1, -1, 1)) * nac_dir**2).sum((-1, -2)).astype("complex128") + b = (vel * nac_dir).sum((-1, -2)).astype("complex128") + c = (new_en - old_en).astype("complex128") - sqrt = np.sqrt(b ** 2 - 4 * a * c) + sqrt = np.sqrt(b**2 - 4 * a * c) scale_pos = (-b + sqrt) / (2 * a) scale_neg = (-b - sqrt) / (2 * a) # take solution with smallest absolute value of # scaling factor - scales = np.concatenate([scale_pos.reshape(-1, 1), - scale_neg.reshape(-1, 1)], - axis=1) + scales = np.concatenate([scale_pos.reshape(-1, 1), scale_neg.reshape(-1, 1)], axis=1) scale_argmin = np.argmin(abs(scales), axis=1) - scale = np.take_along_axis(scales, - scale_argmin.reshape(-1, 1), - axis=1) + scale = np.take_along_axis(scales, scale_argmin.reshape(-1, 1), axis=1) scale[np.imag(scale) != 0] = np.nan scale = np.real(scale) @@ -264,17 +192,12 @@ def solve_quadratic(vel, return scale -def get_simple_scale(mass, - new_en, - old_en, - vel): - +def get_simple_scale(mass, new_en, old_en, vel): m = mass.reshape(1, -1, 1) gap = old_en - new_en - arg = ((2 * gap + (m * vel ** 2).sum((-1, -2))) - .astype('complex128')) + arg = (2 * gap + (m * vel**2).sum((-1, -2))).astype("complex128") num = np.sqrt(arg) - denom = np.sqrt((m * vel ** 2).sum((-1, -2))) + denom = np.sqrt((m * vel**2).sum((-1, -2))) v_scale = num / denom @@ -285,13 +208,7 @@ def get_simple_scale(mass, return v_scale -def rescale(energy, - vel, - nacv, - mass, - surfs, - new_surfs, - simple_scale): +def rescale(energy, vel, nacv, mass, surfs, new_surfs, simple_scale): """ Velocity re-scaling, from: @@ -304,28 +221,18 @@ def rescale(energy, """ # old and new energies - old_en = np.take_along_axis(energy, surfs.reshape(-1, 1), - -1).reshape(-1) - new_en = np.take_along_axis(energy, new_surfs.reshape(-1, 1), - -1).reshape(-1) + old_en = np.take_along_axis(energy, surfs.reshape(-1, 1), -1).reshape(-1) + new_en = np.take_along_axis(energy, new_surfs.reshape(-1, 1), -1).reshape(-1) if simple_scale or nacv is None: - v_scale = get_simple_scale(mass=mass, - new_en=new_en, - old_en=old_en, - vel=vel) + v_scale = get_simple_scale(mass=mass, new_en=new_en, old_en=old_en, vel=vel) new_vel = v_scale.reshape(-1, 1, 1) * vel return new_vel # nacvs connecting old to new surfaces ones = [1] * 4 - start_nacv = np.take_along_axis(nacv, surfs - .reshape(-1, *ones), - axis=1) - pair_nacv = np.take_along_axis(start_nacv, new_surfs - .reshape(-1, *ones), - axis=2 - ).squeeze(1).squeeze(1) + start_nacv = np.take_along_axis(nacv, surfs.reshape(-1, *ones), axis=1) + pair_nacv = np.take_along_axis(start_nacv, new_surfs.reshape(-1, *ones), axis=2).squeeze(1).squeeze(1) # nacv unit vector norm = np.linalg.norm(pair_nacv, axis=-1) @@ -334,45 +241,24 @@ def rescale(energy, nac_dir = pair_nacv / norm.reshape(*pair_nacv.shape[:-1], 1) # solve quadratic equation for momentum rescaling - scale = solve_quadratic(vel=vel, - nac_dir=nac_dir, - old_en=old_en, - new_en=new_en, - mass=mass) + scale = solve_quadratic(vel=vel, nac_dir=nac_dir, old_en=old_en, new_en=new_en, mass=mass) # scale the velocity - new_vel = (scale.reshape(-1, 1, 1) * nac_dir - / mass.reshape(1, -1, 1) - + vel) + new_vel = scale.reshape(-1, 1, 1) * nac_dir / mass.reshape(1, -1, 1) + vel return new_vel -def try_hop(c, - p_hop, - surfs, - vel, - nacv, - mass, - energy, - max_gap_hop, - simple_scale): +def try_hop(c, p_hop, surfs, vel, nacv, mass, energy, max_gap_hop, simple_scale): """ `energy` has dimension num_samples x num_states """ - new_surfs = get_new_surf(p_hop=p_hop, - surfs=surfs, - max_gap_hop=max_gap_hop, - energy=energy) + new_surfs = get_new_surf(p_hop=p_hop, surfs=surfs, max_gap_hop=max_gap_hop, energy=energy) - new_vel = rescale(energy=energy, - vel=vel, - nacv=nacv, - mass=mass, - surfs=surfs, - new_surfs=new_surfs, - simple_scale=simple_scale) + new_vel = rescale( + energy=energy, vel=vel, nacv=nacv, mass=mass, surfs=surfs, new_surfs=new_surfs, simple_scale=simple_scale + ) # reset any frustrated hops or things that didn't hop frustrated = np.isnan(new_vel).any((-1, -2)).nonzero()[0] @@ -382,21 +268,12 @@ def try_hop(c, return new_surfs, new_vel -def runge_c(c, - vel, - nacv, - energy, - elec_dt, - hbar=1): +def runge_c(c, vel, nacv, energy, elec_dt, hbar=1): """ Runge-Kutta step for c """ - deriv = partial(get_dc_dt, - vel=vel, - nacv=nacv, - energy=energy, - hbar=hbar) + deriv = partial(get_dc_dt, vel=vel, nacv=nacv, energy=energy, hbar=hbar) k1, T1 = deriv(c) k2, T2 = deriv(c + elec_dt * k1 / 2) @@ -412,37 +289,24 @@ def remove_T_nan(T, S): num_states = S.shape[1] nan_idx = np.bitwise_not(np.isfinite(T)) - num_nan = int(nan_idx.nonzero()[0].reshape(-1).shape[0] - / num_states ** 2) - eye = (np.eye(num_states).reshape(-1, num_states, num_states) - .repeat(num_nan, axis=0)).reshape(-1) + num_nan = int(nan_idx.nonzero()[0].reshape(-1).shape[0] / num_states**2) + eye = (np.eye(num_states).reshape(-1, num_states, num_states).repeat(num_nan, axis=0)).reshape(-1) T[nan_idx] = eye return T -def get_implicit_diabat(c, - elec_substeps, - old_H_ad, - new_H_ad, - new_U, - old_U, - dt, - hbar=1): - +def get_implicit_diabat(c, elec_substeps, old_H_ad, new_H_ad, new_U, old_U, dt, hbar=1): num_ad = c.shape[1] - S = np.einsum('...ki, ...kj -> ...ij', - old_U, new_U)[:, :num_ad, :num_ad] + S = np.einsum("...ki, ...kj -> ...ij", old_U, new_U)[:, :num_ad, :num_ad] - s_t_s = np.einsum('...ji, ...jk -> ...ik', S, S) + s_t_s = np.einsum("...ji, ...jk -> ...ik", S, S) lam, O = np.linalg.eigh(s_t_s) # in case any eigenvalues are 0 or slightly negative - with np.errstate(divide='ignore', invalid='ignore'): - lam_half = np.stack([np.diag(i ** (-1 / 2)) - for i in lam]) - T = np.einsum('...ij, ...jk, ...kl, ...ml -> ...im', - S, O, lam_half, O) + with np.errstate(divide="ignore", invalid="ignore"): + lam_half = np.stack([np.diag(i ** (-1 / 2)) for i in lam]) + T = np.einsum("...ij, ...jk, ...kl, ...ml -> ...im", S, O, lam_half, O) # set T to the identity for any cases in which one of # the eigenvalues is 0 @@ -451,59 +315,48 @@ def get_implicit_diabat(c, T_inv = T.transpose(0, 2, 1) old_H_d = old_H_ad - new_H_d = np.einsum('...ij, ...jk, ...lk -> ...il', - T, new_H_ad, T) + new_H_d = np.einsum("...ij, ...jk, ...lk -> ...il", T, new_H_ad, T) return old_H_d, new_H_d, T_inv -def adiabatic_c(c, - elec_substeps, - old_H_plus_nacv, - new_H_plus_nacv, - dt, - hbar=1, - **kwargs): - +def adiabatic_c(c, elec_substeps, old_H_plus_nacv, new_H_plus_nacv, dt, hbar=1, **kwargs): num_samples = old_H_plus_nacv.shape[0] num_states = old_H_plus_nacv.shape[1] n = elec_substeps - exp = (np.eye(num_states, num_states) - .reshape(1, num_states, num_states) - .repeat(num_samples, axis=0)) + exp = np.eye(num_states, num_states).reshape(1, num_states, num_states).repeat(num_samples, axis=0) delta_tau = dt / n for i in range(1, n + 1): - new_exp = torch.tensor( - -1j / hbar * ( - old_H_plus_nacv + i / n * - (new_H_plus_nacv - old_H_plus_nacv) - ) - * delta_tau - ).matrix_exp().numpy() - exp = np.einsum('ijk, ikl -> ijl', exp, new_exp) + new_exp = ( + torch.tensor(-1j / hbar * (old_H_plus_nacv + i / n * (new_H_plus_nacv - old_H_plus_nacv)) * delta_tau) + .matrix_exp() + .numpy() + ) + exp = np.einsum("ijk, ikl -> ijl", exp, new_exp) P = exp - c_new = np.einsum('ijk, ik -> ij', P, c) + c_new = np.einsum("ijk, ik -> ij", P, c) return c_new, P -def diabatic_c(c, - elec_substeps, - new_U, - old_U, - dt, - explicit_diabat, - hbar=1, - old_H_d=None, - new_H_d=None, - old_H_ad=None, - new_H_ad=None, - **kwargs): - +def diabatic_c( + c, + elec_substeps, + new_U, + old_U, + dt, + explicit_diabat, + hbar=1, + old_H_d=None, + new_H_d=None, + old_H_ad=None, + new_H_ad=None, + **kwargs, +): if not explicit_diabat: old_H_d, new_H_d, T_inv = get_implicit_diabat( c=c, @@ -513,61 +366,43 @@ def diabatic_c(c, new_U=new_U, old_U=old_U, dt=dt, - hbar=hbar) + hbar=hbar, + ) num_samples = old_H_d.shape[0] num_states = old_H_d.shape[1] n = elec_substeps - exp = (np.eye(num_states, num_states) - .reshape(1, num_states, num_states) - .repeat(num_samples, axis=0)) + exp = np.eye(num_states, num_states).reshape(1, num_states, num_states).repeat(num_samples, axis=0) delta_tau = dt / n for i in range(1, n + 1): - - new_exp = torch.tensor( - -1j / hbar * ( - old_H_d + i / n * (new_H_d - old_H_d) - ) - * delta_tau - ).matrix_exp().numpy() - exp = np.einsum('ijk, ikl -> ijl', exp, new_exp) + new_exp = torch.tensor(-1j / hbar * (old_H_d + i / n * (new_H_d - old_H_d)) * delta_tau).matrix_exp().numpy() + exp = np.einsum("ijk, ikl -> ijl", exp, new_exp) if explicit_diabat: # new_U has dimension num_samples x num_states x num_states T = old_U T_inv = new_U.transpose(0, 2, 1) - P = np.einsum('ijk, ikl, ilm -> ijm', - T_inv, exp, T) + P = np.einsum("ijk, ikl, ilm -> ijm", T_inv, exp, T) else: # if implicit, T(t) = identity - P = np.einsum('ijk, ikl -> ijl', - T_inv, exp) + P = np.einsum("ijk, ikl -> ijl", T_inv, exp) - c_new = np.einsum('ijk, ik -> ij', P, c) + c_new = np.einsum("ijk, ik -> ij", P, c) # print(abs(c_new[30]) ** 2) return c_new, P -def verlet_step_1(forces, - surfs, - vel, - xyz, - mass, - dt): - +def verlet_step_1(forces, surfs, vel, xyz, mass, dt): # `forces` has dimension (num_samples x num_states # x num_atoms x 3) # `surfs` has dimension `num_samples` - surf_forces = np.take_along_axis( - forces, surfs.reshape(-1, 1, 1, 1), - axis=1 - ).squeeze(1) + surf_forces = np.take_along_axis(forces, surfs.reshape(-1, 1, 1, 1), axis=1).squeeze(1) # `surf_forces` has dimension (num_samples x # num_atoms x 3) @@ -577,22 +412,14 @@ def verlet_step_1(forces, # `vel` and `xyz` each have dimension # (num_samples x num_atoms x 3) - new_xyz = xyz + vel * dt + 0.5 * accel * dt ** 2 + new_xyz = xyz + vel * dt + 0.5 * accel * dt**2 new_vel = vel + 0.5 * dt * accel return new_xyz, new_vel -def verlet_step_2(forces, - surfs, - vel, - mass, - dt): - - surf_forces = np.take_along_axis( - forces, surfs.reshape(-1, 1, 1, 1), - axis=1 - ).squeeze(1) +def verlet_step_2(forces, surfs, vel, mass, dt): + surf_forces = np.take_along_axis(forces, surfs.reshape(-1, 1, 1, 1), axis=1).squeeze(1) accel = surf_forces / mass.reshape(1, -1, 1) new_vel = vel + 0.5 * dt * accel @@ -601,7 +428,6 @@ def verlet_step_2(forces, def delta_F_for_tau(forces): - num_samples = forces.shape[0] num_states = forces.shape[1] num_atoms = forces.shape[-2] @@ -614,21 +440,14 @@ def delta_F_for_tau(forces): def get_diag_delta_R(delta_R): - num_states = delta_R.shape[1] - diag_delta_R = np.take_along_axis(delta_R, np.arange(num_states) - .reshape(1, -1, 1, 1, 1), axis=2 - ).repeat(num_states, axis=2) + diag_delta_R = np.take_along_axis(delta_R, np.arange(num_states).reshape(1, -1, 1, 1, 1), axis=2).repeat( + num_states, axis=2 + ) return diag_delta_R -def get_tau_d(forces, - energy, - force_nacv, - delta_R, - hbar=1, - zeta=1): - +def get_tau_d(forces, energy, force_nacv, delta_R, hbar=1, zeta=1): # tau_d^{ni} has shape num_samples x num_states x num_states # delta_R, delta_P, and force_nacv have shape # num_samples x num_states x num_states x num_atoms x 3 @@ -637,24 +456,14 @@ def get_tau_d(forces, diag_delta_R = get_diag_delta_R(delta_R) term_1 = (delta_F * diag_delta_R).sum((-1, -2)) / (2 * hbar) - term_2 = - 2 * abs(zeta / hbar * ( - force_nacv.transpose((0, 2, 1, 3, 4)) - * diag_delta_R) - .sum((-1, -2)) - ) + term_2 = -2 * abs(zeta / hbar * (force_nacv.transpose((0, 2, 1, 3, 4)) * diag_delta_R).sum((-1, -2))) tau = term_1 + term_2 return tau -def get_tau_reset(forces, - energy, - force_nacv, - delta_R, - hbar=1, - zeta=1): - +def get_tau_reset(forces, energy, force_nacv, delta_R, hbar=1, zeta=1): delta_F = delta_F_for_tau(forces) diag_delta_R = get_diag_delta_R(delta_R) @@ -668,7 +477,7 @@ def matmul(a, b): Matrix multiplication in electronic subspace """ - out = np.einsum('ijk..., ikl...-> ijl...', a, b) + out = np.einsum("ijk..., ikl...-> ijl...", a, b) return out @@ -682,52 +491,33 @@ def commute(a, b): return comm -def get_term_3(nacv, - delta, - vel): +def get_term_3(nacv, delta, vel): num_samples = nacv.shape[0] num_states = nacv.shape[1] num_atoms = nacv.shape[3] - d_beta = np.zeros((num_samples, num_states, num_states, - 3 * num_atoms, 3 * num_atoms)) + d_beta = np.zeros((num_samples, num_states, num_states, 3 * num_atoms, 3 * num_atoms)) - d_beta += nacv.reshape(num_samples, num_states, - num_states, 1, 3 * num_atoms,) + d_beta += nacv.reshape( + num_samples, + num_states, + num_states, + 1, + 3 * num_atoms, + ) - delta_R_alpha = np.zeros((num_samples, - num_states, - num_states, - 3 * num_atoms, - 3 * num_atoms), - dtype='complex128') + delta_R_alpha = np.zeros((num_samples, num_states, num_states, 3 * num_atoms, 3 * num_atoms), dtype="complex128") - delta_R_alpha += delta.reshape(num_samples, - num_states, - num_states, - 3 * num_atoms, 1) + delta_R_alpha += delta.reshape(num_samples, num_states, num_states, 3 * num_atoms, 1) vel_reshape = vel.reshape(num_samples, 1, 1, 1, 3 * num_atoms) - term_3 = -(commute(d_beta, delta_R_alpha) - * vel_reshape - ).sum(-1) - term_3 = term_3.reshape(num_samples, - num_states, - num_states, - num_atoms, - 3) + term_3 = -(commute(d_beta, delta_R_alpha) * vel_reshape).sum(-1) + term_3 = term_3.reshape(num_samples, num_states, num_states, num_atoms, 3) return term_3 -def decoherence_T_R(pot_V, - delta_R, - delta_P, - nacv, - mass, - vel, - hbar=1): - +def decoherence_T_R(pot_V, delta_R, delta_P, nacv, mass, vel, hbar=1): # pot_V has dimension num_samples x num_states x num_states term_1 = -1j / hbar * commute(pot_V, delta_R) @@ -738,70 +528,38 @@ def decoherence_T_R(pot_V, term_2 = delta_P / mass.reshape(1, 1, 1, -1, 1) - term_3 = get_term_3(nacv=nacv, - delta=delta_R, - vel=vel) + term_3 = get_term_3(nacv=nacv, delta=delta_R, vel=vel) T_R = term_1 + term_2 + term_3 return T_R -def decoherence_T_ii(T, - surfs): - T_ii = np.take_along_axis(arr=T, - indices=surfs.reshape(-1, 1, 1, 1, 1), - axis=1 - ).squeeze(1) +def decoherence_T_ii(T, surfs): + T_ii = np.take_along_axis(arr=T, indices=surfs.reshape(-1, 1, 1, 1, 1), axis=1).squeeze(1) - T_ii = np.take_along_axis(arr=T_ii, - indices=surfs.reshape(-1, 1, 1, 1), - axis=1 - ).squeeze(1) + T_ii = np.take_along_axis(arr=T_ii, indices=surfs.reshape(-1, 1, 1, 1), axis=1).squeeze(1) num_states = T.shape[1] num_samples = T.shape[0] - delta = np.eye(num_states).reshape( - 1, - num_states, - num_states, - 1, - 1) + delta = np.eye(num_states).reshape(1, num_states, num_states, 1, 1) T_ii_delta = T_ii.reshape(num_samples, 1, 1, -1, 3) * delta return T_ii_delta -def deriv_delta_R(pot_V, - delta_R, - delta_P, - nacv, - mass, - vel, - surfs, - hbar=1, - **kwargs): - - T_R = decoherence_T_R(pot_V=pot_V, - delta_R=delta_R, - delta_P=delta_P, - nacv=nacv, - mass=mass, - vel=vel, - hbar=hbar) +def deriv_delta_R(pot_V, delta_R, delta_P, nacv, mass, vel, surfs, hbar=1, **kwargs): + T_R = decoherence_T_R(pot_V=pot_V, delta_R=delta_R, delta_P=delta_P, nacv=nacv, mass=mass, vel=vel, hbar=hbar) - T_ii_delta = decoherence_T_ii(T=T_R, - surfs=surfs) + T_ii_delta = decoherence_T_ii(T=T_R, surfs=surfs) deriv = T_R - T_ii_delta return deriv -def get_F_alpha(force_nacv, - forces): - +def get_F_alpha(force_nacv, forces): num_samples = force_nacv.shape[0] num_states = force_nacv.shape[1] num_atoms = force_nacv.shape[3] @@ -810,21 +568,11 @@ def get_F_alpha(force_nacv, row_idx = np.arange(num_states) * num_states idx = diag_idx + row_idx - F_alpha = np.zeros((num_samples, - num_states * num_states, - num_atoms, - 3)) + F_alpha = np.zeros((num_samples, num_states * num_states, num_atoms, 3)) # forces on diagonal - np.put_along_axis(arr=F_alpha, - indices=idx.reshape(1, -1, 1, 1), - values=forces, - axis=1) + np.put_along_axis(arr=F_alpha, indices=idx.reshape(1, -1, 1, 1), values=forces, axis=1) - F_alpha = F_alpha.reshape(num_samples, - num_states, - num_states, - num_atoms, - 3) + F_alpha = F_alpha.reshape(num_samples, num_states, num_states, num_atoms, 3) # - force nacv on off-diagonal (force nacv is the # positive gradient so it needs a negative in front) @@ -835,119 +583,67 @@ def get_F_alpha(force_nacv, return F_alpha -def get_F_alpha_sh(forces, - surfs): - +def get_F_alpha_sh(forces, surfs): num_samples = forces.shape[0] num_states = forces.shape[1] num_atoms = forces.shape[-2] - F_sh = np.take_along_axis(arr=forces, - indices=surfs.reshape(-1, 1, 1, 1), - axis=1) - F_sh = F_sh.reshape(num_samples, - 1, - 1, - num_atoms, - 3) - id_elec = np.eye(num_states, num_states).reshape(1, - num_states, - num_states, - 1, - 1) + F_sh = np.take_along_axis(arr=forces, indices=surfs.reshape(-1, 1, 1, 1), axis=1) + F_sh = F_sh.reshape(num_samples, 1, 1, num_atoms, 3) + id_elec = np.eye(num_states, num_states).reshape(1, num_states, num_states, 1, 1) F_sh_id = F_sh * id_elec return F_sh_id -def get_delta_F(force_nacv, - forces, - surfs): +def get_delta_F(force_nacv, forces, surfs): + F_alpha = get_F_alpha(force_nacv=force_nacv, forces=forces) - F_alpha = get_F_alpha(force_nacv=force_nacv, - forces=forces) - - F_alpha_sh = get_F_alpha_sh(forces=forces, - surfs=surfs) + F_alpha_sh = get_F_alpha_sh(forces=forces, surfs=surfs) delta_F = F_alpha - F_alpha_sh return delta_F -def decoherence_T_P(pot_V, - delta_P, - nacv, - force_nacv, - forces, - surfs, - vel, - sigma, - hbar=1): - +def decoherence_T_P(pot_V, delta_P, nacv, force_nacv, forces, surfs, vel, sigma, hbar=1): term_1 = -1j / hbar * commute(pot_V, delta_P) - delta_F = get_delta_F(force_nacv=force_nacv, - forces=forces, - surfs=surfs) - term_2 = 1 / 2 * (matmul(delta_F, sigma) - + matmul(sigma, delta_F)) + delta_F = get_delta_F(force_nacv=force_nacv, forces=forces, surfs=surfs) + term_2 = 1 / 2 * (matmul(delta_F, sigma) + matmul(sigma, delta_F)) - term_3 = get_term_3(nacv=nacv, - delta=delta_P, - vel=vel) + term_3 = get_term_3(nacv=nacv, delta=delta_P, vel=vel) T_P = term_1 + term_2 + term_3 return T_P # , term_1, term_2, term_3 -def deriv_delta_P(pot_V, - delta_P, - nacv, - force_nacv, - forces, - surfs, - vel, - sigma, - hbar=1, - **kwargs): - - T_P = decoherence_T_P(pot_V=pot_V, - delta_P=delta_P, - nacv=nacv, - force_nacv=force_nacv, - forces=forces, - surfs=surfs, - vel=vel, - sigma=sigma, - hbar=hbar) - - T_ii_delta = decoherence_T_ii(T=T_P, - surfs=surfs) +def deriv_delta_P(pot_V, delta_P, nacv, force_nacv, forces, surfs, vel, sigma, hbar=1, **kwargs): + T_P = decoherence_T_P( + pot_V=pot_V, + delta_P=delta_P, + nacv=nacv, + force_nacv=force_nacv, + forces=forces, + surfs=surfs, + vel=vel, + sigma=sigma, + hbar=hbar, + ) + + T_ii_delta = decoherence_T_ii(T=T_P, surfs=surfs) deriv = T_P - T_ii_delta return deriv -def deriv_sigma(pot_V, - delta_R, - nacv, - force_nacv, - forces, - surfs, - vel, - sigma, - hbar=1, - **kwargs): - - F_alpha = get_F_alpha(force_nacv=force_nacv, - forces=forces) +def deriv_sigma(pot_V, delta_R, nacv, force_nacv, forces, surfs, vel, sigma, hbar=1, **kwargs): + F_alpha = get_F_alpha(force_nacv=force_nacv, forces=forces) term_1 = -1j / hbar * commute(pot_V, sigma) - term_2 = 1j / hbar * commute(F_alpha, - delta_R).sum((-1, -2)) + term_2 = 1j / hbar * commute(F_alpha, delta_R).sum((-1, -2)) # `vel` has shape num_samples x num_atoms x 3 # `nacv` has shape num_samples x num_states x # num_states x num_atoms x 3 @@ -955,88 +651,46 @@ def deriv_sigma(pot_V, num_samples = nacv.shape[0] num_atoms = nacv.shape[-2] - vel_reshape = vel.reshape(num_samples, - 1, - 1, - num_atoms, - 3) - term_3 = (-commute(vel_reshape * nacv, sigma) - .sum((-1, -2))) + vel_reshape = vel.reshape(num_samples, 1, 1, num_atoms, 3) + term_3 = -commute(vel_reshape * nacv, sigma).sum((-1, -2)) deriv = term_1 + term_2 + term_3 return deriv -def get_delta_partials(pot_V, - delta_P, - delta_R, - nacv, - force_nacv, - forces, - surfs, - vel, - sigma, - mass, - hbar=1): - - partial_P = partial(deriv_delta_P, - pot_V=pot_V, - nacv=nacv, - force_nacv=force_nacv, - forces=forces, - surfs=surfs, - vel=vel, - hbar=hbar) +def get_delta_partials(pot_V, delta_P, delta_R, nacv, force_nacv, forces, surfs, vel, sigma, mass, hbar=1): + partial_P = partial( + deriv_delta_P, pot_V=pot_V, nacv=nacv, force_nacv=force_nacv, forces=forces, surfs=surfs, vel=vel, hbar=hbar + ) # missing: delta_R, delta_P - partial_R = partial(deriv_delta_R, - pot_V=pot_V, - nacv=nacv, - mass=mass, - vel=vel, - surfs=surfs, - hbar=hbar) + partial_R = partial(deriv_delta_R, pot_V=pot_V, nacv=nacv, mass=mass, vel=vel, surfs=surfs, hbar=hbar) # missing: delta_R, sigma - partial_sigma = partial(deriv_sigma, - pot_V=pot_V, - nacv=nacv, - force_nacv=force_nacv, - forces=forces, - surfs=surfs, - vel=vel, - hbar=hbar) + partial_sigma = partial( + deriv_sigma, pot_V=pot_V, nacv=nacv, force_nacv=force_nacv, forces=forces, surfs=surfs, vel=vel, hbar=hbar + ) return partial_P, partial_R, partial_sigma -def runge_delta(pot_V, - delta_P, - delta_R, - nacv, - force_nacv, - forces, - surfs, - vel, - sigma, - mass, - elec_dt, - hbar=1): - - derivs = get_delta_partials(pot_V=pot_V, - delta_P=delta_P, - delta_R=delta_R, - nacv=nacv, - force_nacv=force_nacv, - forces=forces, - surfs=surfs, - vel=vel, - sigma=sigma, - mass=mass, - hbar=hbar) +def runge_delta(pot_V, delta_P, delta_R, nacv, force_nacv, forces, surfs, vel, sigma, mass, elec_dt, hbar=1): + derivs = get_delta_partials( + pot_V=pot_V, + delta_P=delta_P, + delta_R=delta_R, + nacv=nacv, + force_nacv=force_nacv, + forces=forces, + surfs=surfs, + vel=vel, + sigma=sigma, + mass=mass, + hbar=hbar, + ) init_vals = [delta_P, delta_R, sigma] intermed_vals = copy.deepcopy(init_vals) @@ -1048,63 +702,39 @@ def runge_delta(pot_V, names = ["delta_P", "delta_R", "sigma"] for i in range(4): - kwargs = {name: val for name, val in - zip(names, intermed_vals)} - k_i = [deriv(**kwargs) - for deriv in derivs] + kwargs = {name: val for name, val in zip(names, intermed_vals)} + k_i = [deriv(**kwargs) for deriv in derivs] intermed_vals = [] for n in range(num_vals): if isinstance(final_vals[n], np.ndarray): - final_vals[n] = final_vals[n].astype('complex128') + final_vals[n] = final_vals[n].astype("complex128") final_vals[n] += k_i[n] * elec_dt * final_weight[i] if i == 3: continue - intermed_vals.append(init_vals[n] + ( - k_i[n] * elec_dt * step_size[i])) + intermed_vals.append(init_vals[n] + (k_i[n] * elec_dt * step_size[i])) return final_vals -def add_decoherence(c, - surfs, - new_surfs, - delta_P, - delta_R, - nacv, - energy, - forces, - mass): +def add_decoherence(c, surfs, new_surfs, delta_P, delta_R, nacv, energy, forces, mass): """ Landry, B.R. and Subotnik, J.E., 2012. How to recover Marcus theory with fewest switches surface hopping: Add just a touch of decoherence. The Journal of chemical physics, 137(22), p.22A513. """ - pass - -def get_other_surfs(surfs, - num_states, - num_samples): - all_surfs = (np.arange(num_states).reshape(-1, 1) - .repeat(num_samples, 1).transpose()) +def get_other_surfs(surfs, num_states, num_samples): + all_surfs = np.arange(num_states).reshape(-1, 1).repeat(num_samples, 1).transpose() other_idx = all_surfs != surfs.reshape(-1, 1) other_surfs = all_surfs[other_idx].reshape(num_samples, -1) return other_surfs -def truhlar_decoherence(c, - surfs, - energy, - vel, - dt, - mass, - hbar=1, - C=0.1, - **kwargs): +def truhlar_decoherence(c, surfs, energy, vel, dt, mass, hbar=1, C=0.1, **kwargs): """ Originally attributed to Truhlar, cited from G. Granucci and M. Persico. "Critical appraisal of the @@ -1115,28 +745,18 @@ def truhlar_decoherence(c, num_samples = c.shape[0] num_states = c.shape[1] - other_surfs = get_other_surfs(surfs=surfs, - num_states=num_states, - num_samples=num_samples) + other_surfs = get_other_surfs(surfs=surfs, num_states=num_states, num_samples=num_samples) - c_m = np.take_along_axis(c, - surfs.reshape(-1, 1), - axis=-1) + c_m = np.take_along_axis(c, surfs.reshape(-1, 1), axis=-1) - E_m = np.take_along_axis(energy, - surfs.reshape(-1, 1), - axis=-1) + E_m = np.take_along_axis(energy, surfs.reshape(-1, 1), axis=-1) - c_k = np.take_along_axis(c, - other_surfs, - axis=-1) + c_k = np.take_along_axis(c, other_surfs, axis=-1) - E_k = np.take_along_axis(energy, - other_surfs, - axis=-1) + E_k = np.take_along_axis(energy, other_surfs, axis=-1) # vel has shape num_samples x num_atoms x 3 - E_kin = (1 / 2 * mass.reshape(1, -1, 1) * vel ** 2).sum((-1, -2)) + E_kin = (1 / 2 * mass.reshape(1, -1, 1) * vel**2).sum((-1, -2)) tau_km = hbar / abs(E_k - E_m) * (1 + C / E_kin.reshape(-1, 1)) c_k_prime = c_k * np.exp(-dt / tau_km) @@ -1146,20 +766,11 @@ def truhlar_decoherence(c, num[num < 0] = 0 - c_m_prime = c_m * ( - num.reshape(-1, 1) - / abs(c_m) ** 2 - ) ** 0.5 + c_m_prime = c_m * (num.reshape(-1, 1) / abs(c_m) ** 2) ** 0.5 new_c = np.zeros_like(c) - np.put_along_axis(new_c, - surfs.reshape(-1, 1), - c_m_prime, - axis=-1) - - np.put_along_axis(new_c, - other_surfs, - c_k_prime, - axis=-1) + np.put_along_axis(new_c, surfs.reshape(-1, 1), c_m_prime, axis=-1) + + np.put_along_axis(new_c, other_surfs, c_k_prime, axis=-1) return new_c diff --git a/nff/md/tully_multiplicity/dynamics.py b/nff/md/tully_multiplicity/dynamics.py index 01eca5b5..71e75a39 100644 --- a/nff/md/tully_multiplicity/dynamics.py +++ b/nff/md/tully_multiplicity/dynamics.py @@ -30,51 +30,50 @@ from nff.utils import constants as const from nff.md.utils_ax import atoms_to_nxyz from nff.md.tully_multiplicity.io import get_results, load_json, get_atoms -from nff.md.tully_multiplicity.step import (try_hop, - verlet_step_1, verlet_step_2, - truhlar_decoherence, - adiabatic_c, - compute_T, - get_p_hop) +from nff.md.tully_multiplicity.step import ( + try_hop, + verlet_step_1, + verlet_step_2, + truhlar_decoherence, + adiabatic_c, + compute_T, + get_p_hop, +) from nff.md.nvt_ax import NoseHoover, NoseHooverChain -METHOD_DIC = { - "nosehoover": NoseHoover, - "nosehooverchain": NoseHooverChain -} +METHOD_DIC = {"nosehoover": NoseHoover, "nosehooverchain": NoseHooverChain} DECOHERENCE_DIC = {"truhlar": truhlar_decoherence} -TULLY_LOG_FILE = 'tully.log' -TULLY_SAVE_FILE = 'tully.pickle' +TULLY_LOG_FILE = "tully.log" +TULLY_SAVE_FILE = "tully.pickle" -MODEL_KWARGS = {"add_nacv": False, - "add_grad": True, - "inference": True, - "en_keys_for_grad": ["energy_0"]} +MODEL_KWARGS = {"add_nacv": False, "add_grad": True, "inference": True, "en_keys_for_grad": ["energy_0"]} class NeuralTully: - def __init__(self, - atoms_list, - device, - batch_size, - adiabatic_keys: List[str], - initial_surf: str, - dt, - elec_substeps: int, - max_time, - cutoff, - model_paths: List, - simple_vel_scale, - hop_eqn, - cutoff_skin, - max_gap_hop, - nbr_update_period, - save_period, - decoherence, - **kwargs): + def __init__( + self, + atoms_list, + device, + batch_size, + adiabatic_keys: List[str], + initial_surf: str, + dt, + elec_substeps: int, + max_time, + cutoff, + model_paths: List, + simple_vel_scale, + hop_eqn, + cutoff_skin, + max_gap_hop, + nbr_update_period, + save_period, + decoherence, + **kwargs, + ): """ `max_gap_hop` in a.u. """ @@ -98,13 +97,13 @@ def __init__(self, self.spinadiabatic_to_statenum = {} self.spinadiabatic_keys = [] for key in adiabatic_keys: - if 'S' in key: + if "S" in key: new_key = key + "_ms+0" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - elif 'D' in key: + elif "D" in key: new_key = key + "_ms-1/2" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) @@ -115,7 +114,7 @@ def __init__(self, self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - elif 'T' in key: + elif "T" in key: new_key = key + "_ms-1" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) @@ -131,7 +130,7 @@ def __init__(self, self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) self.spinadiabatic_keys.append(new_key) self.spinadiabatic_to_adiabatic[new_key] = key - elif 'Q' in key: + elif "Q" in key: new_key = key + "_ms-3/2" self.repeated_keys.append(key) self.spinadiabatic_to_statenum[new_key] = len(self.spinadiabatic_keys) @@ -182,8 +181,7 @@ def __init__(self, self.log_template = self.setup_logging() self.p_hop = np.zeros((self.num_samples, self.num_states)) self.just_hopped = None - self.surfs = np.ones(self.num_samples, - dtype=np.int) * self.initial_surf_num + self.surfs = np.ones(self.num_samples, dtype=np.int) * self.initial_surf_num self.c_hmc = self.init_c() self.update_props(needs_nbrs=True) @@ -197,7 +195,7 @@ def __init__(self, self.setup_save() self.decoherence = self.init_decoherence(params=decoherence) - self.decoherence_type = decoherence['name'] + self.decoherence_type = decoherence["name"] self.hop_eqn = hop_eqn self.simple_vel_scale = simple_vel_scale @@ -212,35 +210,32 @@ def init_decoherence(self, params): if not params: return - name = params['name'] - kwargs = params.get('kwargs', {}) + name = params["name"] + kwargs = params.get("kwargs", {}) method = DECOHERENCE_DIC[name] - func = partial(method, - **kwargs) + func = partial(method, **kwargs) return func def load_model(self, model_path): - param_path = os.path.join(model_path, 'params.json') - with open(param_path, 'r') as f: + param_path = os.path.join(model_path, "params.json") + with open(param_path, "r") as f: params = json.load(f) - model = load_model(model_path, params, params['model_type']) + model = load_model(model_path, params, params["model_type"]) return model @property def mass(self): - _mass = (self.atoms_list[0].get_masses() - * const.AMU_TO_AU) + _mass = self.atoms_list[0].get_masses() * const.AMU_TO_AU return _mass @property def nxyz(self): - _nxyz = np.stack([atoms_to_nxyz(atoms) for atoms in - self.atoms_list]) + _nxyz = np.stack([atoms_to_nxyz(atoms) for atoms in self.atoms_list]) return _nxyz @@ -261,16 +256,13 @@ def xyz(self, val): atoms.set_positions(xyz) def get_vel(self): - vel = np.stack([atoms.get_velocities() - for atoms in self.atoms_list]) + vel = np.stack([atoms.get_velocities() for atoms in self.atoms_list]) vel /= const.BOHR_RADIUS * const.ASE_TO_FS * const.FS_TO_AU return vel def init_c(self): - c = np.zeros((self.num_samples, - self.num_states), - dtype='complex128') + c = np.zeros((self.num_samples, self.num_states), dtype="complex128") c[:, self.surfs[0]] = 1 return c @@ -278,9 +270,7 @@ def get_c_hmc(self): """ state coefficients in the HMC basis """ - c_hmc = np.einsum('ijk,ik->ij', - self.U, - self.c_diag) + c_hmc = np.einsum("ijk,ik->ij", self.U, self.c_diag) return c_hmc @@ -288,34 +278,23 @@ def get_c_diag(self): """ state coefficients in the diagonal basis """ - c_diag = np.einsum('ijk,ik->ij', - self.U.conj().transpose(0, 2, 1), - self.c_hmc) + c_diag = np.einsum("ijk,ik->ij", self.U.conj().transpose(0, 2, 1), self.c_hmc) return c_diag def get_forces(self): - _forces = np.stack([-self.props[f'energy_{key}_grad'] - for key in self.repeated_keys], - axis=1) - _forces = (_forces.reshape(self.num_samples, - -1, - self.num_states, - 3) - .transpose(0, 2, 1, 3)) + _forces = np.stack([-self.props[f"energy_{key}_grad"] for key in self.repeated_keys], axis=1) + _forces = _forces.reshape(self.num_samples, -1, self.num_states, 3).transpose(0, 2, 1, 3) return _forces def get_energy(self): - _energy = np.stack([self.props[f'energy_{key}'].reshape(-1) - for key in self.repeated_keys], - axis=1) + _energy = np.stack([self.props[f"energy_{key}"].reshape(-1) for key in self.repeated_keys], axis=1) return _energy def get_nacv(self): - _nacv = np.zeros((self.num_samples, self.num_states, - self.num_states, self.num_atoms, 3)) + _nacv = np.zeros((self.num_samples, self.num_states, self.num_states, self.num_atoms, 3)) for state_n1 in range(self.num_states): state1 = self.statenum_to_spinadiabatic[state_n1] splits = state1.split("_") @@ -334,7 +313,7 @@ def get_nacv(self): # checks for the same degeneracy continue - key = f'NACV_{adiabat1}_to_{adiabat2}_grad' + key = f"NACV_{adiabat1}_to_{adiabat2}_grad" if key not in self.props: continue _nacv[:, state_n1, state_n2, :] = self.props[key] @@ -353,7 +332,6 @@ def get_gap(self): return _gap def get_force_nacv(self): - # self.gap has shape num_samples x num_states x num_states # `nacv` has shape num_samples x num_states x num_states # x num_atoms x 3 @@ -362,11 +340,7 @@ def get_force_nacv(self): if nacv is None: return - gap = self.gap.reshape(self.num_samples, - self.num_states, - self.num_states, - 1, - 1) + gap = self.gap.reshape(self.num_samples, self.num_states, self.num_states, 1, 1) _force_nacv = -nacv * gap @@ -377,18 +351,9 @@ def get_pot_V(self): Potential energy matrix in n_adiabat x n_adiabat space """ - V = np.zeros((self.num_samples, - self.num_states, - self.num_states)) + V = np.zeros((self.num_samples, self.num_states, self.num_states)) idx = np.arange(self.num_states) - np.put_along_axis( - V, - idx.reshape(1, -1, 1), - self.energy.reshape(self.num_samples, - self.num_states, - 1), - axis=2 - ) + np.put_along_axis(V, idx.reshape(1, -1, 1), self.energy.reshape(self.num_samples, self.num_states, 1), axis=2) return V @@ -397,10 +362,7 @@ def get_SOC_mat(self): Matrix with SOCs in HMC basis """ - H_soc = np.zeros((self.num_samples, - self.num_states, - self.num_states), - dtype=np.complex128) + H_soc = np.zeros((self.num_samples, self.num_states, self.num_states), dtype=np.complex128) for state_n1 in range(self.num_states): state1 = self.statenum_to_spinadiabatic[state_n1] @@ -423,34 +385,34 @@ def get_SOC_mat(self): ST_soc = False TT_soc = False - if 'S' in adiabat1: + if "S" in adiabat1: ST_soc = True - elif 'T' in adiabat1 and 'T' in adiabat2: + elif "T" in adiabat1 and "T" in adiabat2: TT_soc = True else: raise NotImplementedError if ST_soc: - if spin_ms2 == 'ms-1': + if spin_ms2 == "ms-1": soc_val = a + 1j * b - elif spin_ms2 == 'ms+0': - soc_val = 0. + 1j * c - elif spin_ms2 == 'ms+1': + elif spin_ms2 == "ms+0": + soc_val = 0.0 + 1j * c + elif spin_ms2 == "ms+1": soc_val = a - 1j * b elif TT_soc: - if spin_ms1 == 'ms-1' and spin_ms2 == 'ms-1': - soc_val = 0. + 1j * c - elif spin_ms1 == 'ms-1' and spin_ms2 == 'ms+0': + if spin_ms1 == "ms-1" and spin_ms2 == "ms-1": + soc_val = 0.0 + 1j * c + elif spin_ms1 == "ms-1" and spin_ms2 == "ms+0": soc_val = -a + 1j * b - elif spin_ms1 == 'ms+0' and spin_ms2 == 'ms-1': + elif spin_ms1 == "ms+0" and spin_ms2 == "ms-1": soc_val = a + 1j * b - elif spin_ms1 == 'ms+0' and spin_ms2 == 'ms+1': + elif spin_ms1 == "ms+0" and spin_ms2 == "ms+1": soc_val = -a + 1j * b - elif spin_ms1 == 'ms+1' and spin_ms2 == 'ms+0': + elif spin_ms1 == "ms+1" and spin_ms2 == "ms+0": soc_val = a + 1j * b - elif spin_ms1 == 'ms+1' and spin_ms2 == 'ms+1': - soc_val = 0. - 1j * c + elif spin_ms1 == "ms+1" and spin_ms2 == "ms+1": + soc_val = 0.0 - 1j * c H_soc[:, state_n1, state_n2] = soc_val H_soc[:, state_n2, state_n1] = soc_val.conj() @@ -481,87 +443,64 @@ def get_H_plus_nacv(self): return # pot_V = self.pot_V H_hmc = self.H_hmc - nac_term = -1j * (self.nacv * - self.vel.reshape(self.num_samples, - 1, - 1, - self.num_atoms, - 3) - ).sum((-1, -2)) + nac_term = -1j * (self.nacv * self.vel.reshape(self.num_samples, 1, 1, self.num_atoms, 3)).sum((-1, -2)) # return pot_V + nac_term return H_hmc + nac_term def get_neg_G_hmc(self): - - neg_G = np.zeros((self.num_samples, - self.num_states, - self.num_states, - self.num_atoms, - 3)) + neg_G = np.zeros((self.num_samples, self.num_states, self.num_states, self.num_atoms, 3)) idx = np.arange(self.num_states) np.put_along_axis( neg_G, idx.reshape(1, -1, 1, 1, 1), - self.forces.reshape(self.num_samples, - self.num_states, - 1, - self.num_atoms, - 3), - axis=2 + self.forces.reshape(self.num_samples, self.num_states, 1, self.num_atoms, 3), + axis=2, ) neg_G += self.force_nacv return neg_G def get_neg_G_diag(self): - - neg_G_diag = np.einsum('ijk,ikl...,ilm->ijm...', - self.U.conj().transpose((0, 2, 1)), - self.neg_G_hmc, - self.U) + neg_G_diag = np.einsum("ijk,ikl...,ilm->ijm...", self.U.conj().transpose((0, 2, 1)), self.neg_G_hmc, self.U) return neg_G_diag def get_diag_energy(self): - H_diag = np.einsum('ijk,ikl,ilm->ijm', - self.U.conj().transpose((0, 2, 1)), - self.H_hmc, - self.U) + H_diag = np.einsum("ijk,ikl,ilm->ijm", self.U.conj().transpose((0, 2, 1)), self.H_hmc, self.U) idxs = np.arange(self.num_states) - _energy = np.take_along_axis(np.real(H_diag), - idxs.reshape(1, -1, 1), axis=2) + _energy = np.take_along_axis(np.real(H_diag), idxs.reshape(1, -1, 1), axis=2) return _energy.reshape(self.num_samples, self.num_states) def get_diag_forces(self): - - diag_forces = np.diagonal(self.neg_G_diag, - axis1=1, axis2=2).transpose((0, 3, 1, 2)) + diag_forces = np.diagonal(self.neg_G_diag, axis1=1, axis2=2).transpose((0, 3, 1, 2)) return np.real(diag_forces) @property def state_dict(self): - _state_dict = {"nxyz": self.nxyz, - "nacv": self.nacv, - # "force_nacv": self.force_nacv, - "energy": self.energy, - "forces": self.forces, - # "H_d": self.H_d, - "U": self.U, - "t": self.t / const.FS_TO_AU, - "vel": self.vel, - "c_hmc": self.c_hmc, - "c_diag": self.c_diag, - # "T": self.T, - "surfs": self.surfs} + _state_dict = { + "nxyz": self.nxyz, + "nacv": self.nacv, + # "force_nacv": self.force_nacv, + "energy": self.energy, + "forces": self.forces, + # "H_d": self.H_d, + "U": self.U, + "t": self.t / const.FS_TO_AU, + "vel": self.vel, + "c_hmc": self.c_hmc, + "c_diag": self.c_diag, + # "T": self.T, + "surfs": self.surfs, + } return _state_dict @state_dict.setter def state_dict(self, dic): for key, val in dic.items(): - if key in ['force_nacv']: + if key in ["force_nacv"]: continue setattr(self, key, val) self.t *= const.FS_TO_AU @@ -580,7 +519,7 @@ def save(self, idx=None): idx = set(idx) for key, val in state_dict.items(): - if key == 't': + if key == "t": continue if val is None: continue @@ -590,7 +529,7 @@ def save(self, idx=None): this_val = v if (i in idx) else None use_val.append(this_val) use_dict[key] = use_val - use_dict['t'] = state_dict['t'] + use_dict["t"] = state_dict["t"] with open(self.save_file, "ab") as f: pickle.dump(use_dict, f) @@ -600,7 +539,6 @@ def restart(self): self.state_dict = state_dicts[-1] def setup_logging(self, remove_old=True): - states = [f"State {i}" for i in range(self.num_states)] hdr = "%-9s " % "Time [fs]" for state in states: @@ -609,7 +547,7 @@ def setup_logging(self, remove_old=True): hdr += "%15s " % "Hop prob." if not os.path.isfile(self.log_file) or remove_old: - with open(self.log_file, 'w') as f: + with open(self.log_file, "w") as f: f.write(hdr) template = "%-10.2f " @@ -622,8 +560,7 @@ def setup_logging(self, remove_old=True): def clean_c_p(self): c_states = self.c.shape[-1] - c = (self.c[np.bitwise_not(np.isnan(self.c))] - .reshape(-1, c_states)) + c = self.c[np.bitwise_not(np.isnan(self.c))].reshape(-1, c_states) p_states = self.p_hop.shape[-1] p_nan_idx = np.isnan(self.p_hop).any(-1) @@ -634,11 +571,11 @@ def clean_c_p(self): def log(self): time = self.t / const.FS_TO_AU -# pcts = [] -# for i in range(self.num_states): -# num_surf = (self.surfs == i).sum() -# pct = num_surf / self.num_samples * 100 -# pcts.append(pct) + # pcts = [] + # for i in range(self.num_states): + # num_surf = (self.surfs == i).sum() + # pct = num_surf / self.num_samples * 100 + # pcts.append(pct) pcts_hmc = [] argmax = np.argmax(np.abs(self.c_hmc), axis=1) @@ -650,11 +587,14 @@ def log(self): # c, p = self.clean_c_p() norm_c = np.mean(np.linalg.norm(self.c_hmc, axis=1)) p_avg = np.mean(np.max(self.p_hop, axis=1)) - text = self.log_template % (time, # *pcts, - *pcts_hmc, - norm_c, p_avg) + text = self.log_template % ( + time, # *pcts, + *pcts_hmc, + norm_c, + p_avg, + ) - with open(self.log_file, 'a') as f: + with open(self.log_file, "a") as f: f.write("\n" + text) # sanity check @@ -663,38 +603,34 @@ def log(self): exit(1) @classmethod - def from_pickle(cls, - file, - max_time=None): - + def from_pickle(cls, file, max_time=None): state_dicts = [] - with open(file, 'rb') as f: + with open(file, "rb") as f: while True: try: state_dict = pickle.load(f) state_dicts.append(state_dict) except EOFError: break - time = state_dict['t'] + time = state_dict["t"] if max_time is not None and time > max_time: break - sample_nxyz = state_dicts[0]['nxyz'] + sample_nxyz = state_dicts[0]["nxyz"] # whether this is a single trajectory or multiple single = len(sample_nxyz.shape) == 2 num_samples = 1 if single else sample_nxyz.shape[0] trjs = [[] for _ in range(num_samples)] for state_dict in state_dicts: - nxyz = state_dict['nxyz'] + nxyz = state_dict["nxyz"] if single: nxyz = [nxyz] for i, nxyz in enumerate(nxyz): if nxyz is None: trjs[i].append(None) continue - atoms = Atoms(nxyz[:, 0], - positions=nxyz[:, 1:]) + atoms = Atoms(nxyz[:, 0], positions=nxyz[:, 1:]) trjs[i].append(atoms) if single: @@ -702,18 +638,18 @@ def from_pickle(cls, return state_dicts, trjs - def update_props(self, - needs_nbrs): - - props = get_results(models=self.models, - nxyz=self.nxyz, - nbr_list=self.nbr_list, - num_atoms=self.num_atoms, - needs_nbrs=needs_nbrs, - cutoff=self.cutoff, - cutoff_skin=self.cutoff_skin, - device=self.device, - batch_size=self.batch_size,) + def update_props(self, needs_nbrs): + props = get_results( + models=self.models, + nxyz=self.nxyz, + nbr_list=self.nbr_list, + num_atoms=self.num_atoms, + needs_nbrs=needs_nbrs, + cutoff=self.cutoff, + cutoff_skin=self.cutoff_skin, + device=self.device, + batch_size=self.batch_size, + ) self.props = props self.update_selfs() @@ -735,22 +671,19 @@ def update_selfs(self): # diagonalization of HMC representation self.U, evals = self.get_U() - -if not isinstance(self.U_old, type(None)): + if self.U_old is not None: # the following is an implementation of Appendix B # from Mai, Marquetand, Gonzalez # Int.J. Quant. Chem. 2015, 115, 1215-1231 - V = np.einsum('ijk,ikl->ijl', - self.U.conj().transpose((0, 2, 1)), - self.U_old) + V = np.einsum("ijk,ikl->ijl", self.U.conj().transpose((0, 2, 1)), self.U_old) # attempt to make V diagonally dominant for replica in range(self.num_samples): abs_v = np.abs(V[replica]) arg_max = np.argmax(abs_v, axis=1) # sanity check print statement -# if len(np.unique(arg_max)) < len(arg_max): -# print("V could not be made diagonal dominant!") + # if len(np.unique(arg_max)) < len(arg_max): + # print("V could not be made diagonal dominant!") for column in range(self.num_states): curr_col = copy.deepcopy(V[replica][:, column]) @@ -765,31 +698,28 @@ def update_selfs(self): # for replica, hdiag in enumerate(evals): hdiag = evals.reshape((self.num_samples, self.num_states, 1)) diff = hdiag - hdiag.transpose((0, 2, 1)) - preserved_idxs = np.isclose(diff, np.zeros(shape=diff.shape), - atol=1e-8, rtol=0.0) + preserved_idxs = np.isclose(diff, np.zeros(shape=diff.shape), atol=1e-8, rtol=0.0) V[~preserved_idxs] = 0.0 # Loewding symmetric orthonormalization u, s, vh = np.linalg.svd(V) - Phi_adj = np.einsum('ijk, ikl->ijl', u, vh) + Phi_adj = np.einsum("ijk, ikl->ijl", u, vh) - corrected_U = np.einsum('ijk, ikl->ijl', self.U, Phi_adj) + corrected_U = np.einsum("ijk, ikl->ijl", self.U, Phi_adj) self.U = copy.deepcopy(corrected_U) # check eq B11 epsilon = 0.1 # hardcoded for now - diagonals = np.einsum('ijj->ij', np.einsum('ijk,ikl->ijl', - self.U.conj().transpose((0, 2, 1)), - self.U_old)) + diagonals = np.einsum("ijj->ij", np.einsum("ijk,ikl->ijl", self.U.conj().transpose((0, 2, 1)), self.U_old)) anti_hermitian = ((1 - epsilon) < diagonals).all() -# if not anti_hermitian: -# print("WARNING: Time step likely too large! At least one new unitary matrix ", -# "does not fulfill anti-hermicity!") -# print(f"epsilon = {epsilon}") -# print("diagonal elements:\n", diagonals) -# print("H_diag:\n", evals) -# print(V) -# print(preserved_idxs) + # if not anti_hermitian: + # print("WARNING: Time step likely too large! At least one new unitary matrix ", + # "does not fulfill anti-hermicity!") + # print(f"epsilon = {epsilon}") + # print("diagonal elements:\n", diagonals) + # print("H_diag:\n", evals) + # print(V) + # print(preserved_idxs) self.U_old = copy.deepcopy(self.U) @@ -798,44 +728,33 @@ def update_selfs(self): self.diag_energy = self.get_diag_energy() self.diag_forces = self.get_diag_forces() - def do_hop(self, - old_c, - new_c, - P): - - self.p_hop = get_p_hop(hop_eqn=self.hop_eqn, - old_c=old_c, - new_c=new_c, - P=P, - surfs=self.surfs) - - new_surfs, new_vel = try_hop(p_hop=self.p_hop, - surfs=self.surfs, - vel=self.vel, - nacv=self.nacv, - mass=self.mass, - energy=self.energy, - max_gap_hop=self.max_gap_hop, - simple_scale=self.simple_vel_scale) + def do_hop(self, old_c, new_c, P): + self.p_hop = get_p_hop(hop_eqn=self.hop_eqn, old_c=old_c, new_c=new_c, P=P, surfs=self.surfs) + + new_surfs, new_vel = try_hop( + p_hop=self.p_hop, + surfs=self.surfs, + vel=self.vel, + nacv=self.nacv, + mass=self.mass, + energy=self.energy, + max_gap_hop=self.max_gap_hop, + simple_scale=self.simple_vel_scale, + ) return new_surfs, new_vel def add_decoherence(self): - if not self.decoherence: return - self.c_diag = self.decoherence(c=self.c_diag, - surfs=self.surfs, - energy=self.diag_energy, - vel=self.vel, - dt=self.dt, - mass=self.mass) + self.c_diag = self.decoherence( + c=self.c_diag, surfs=self.surfs, energy=self.diag_energy, vel=self.vel, dt=self.dt, mass=self.mass + ) self.c_hmc = self.get_c_hmc() def step(self, needs_nbrs): - old_V = copy.deepcopy(self.pot_V) old_H_hmc = copy.deepcopy(self.H_hmc) old_H_plus_nacv = copy.deepcopy(self.H_plus_nacv) @@ -846,49 +765,39 @@ def step(self, needs_nbrs): # xyz converted to a.u. for the step and then # back to Angstrom after - new_xyz, new_vel = verlet_step_1(self.diag_forces, - self.surfs, - vel=self.vel, - xyz=self.xyz / const.BOHR_RADIUS, - mass=self.mass, - dt=self.dt) + new_xyz, new_vel = verlet_step_1( + self.diag_forces, self.surfs, vel=self.vel, xyz=self.xyz / const.BOHR_RADIUS, mass=self.mass, dt=self.dt + ) self.xyz = new_xyz * const.BOHR_RADIUS self.vel = new_vel # from here on everything is "new" self.update_props(needs_nbrs) - new_vel = verlet_step_2(forces=self.diag_forces, - surfs=self.surfs, - vel=self.vel, - mass=self.mass, - dt=self.dt) + new_vel = verlet_step_2(forces=self.diag_forces, surfs=self.surfs, vel=self.vel, mass=self.mass, dt=self.dt) self.vel = new_vel - self.c_hmc, self.P_hmc = adiabatic_c(c=self.c_hmc, - elec_substeps=self.elec_substeps, - old_H_plus_nacv=old_H_plus_nacv, - new_H_plus_nacv=self.H_plus_nacv, - dt=self.dt) + self.c_hmc, self.P_hmc = adiabatic_c( + c=self.c_hmc, + elec_substeps=self.elec_substeps, + old_H_plus_nacv=old_H_plus_nacv, + new_H_plus_nacv=self.H_plus_nacv, + dt=self.dt, + ) -# print("Norm before/after elec substeps (hop):\n", -# np.linalg.norm(old_c_hmc, axis=1), -# np.linalg.norm(self.c_hmc, axis=1)) + # print("Norm before/after elec substeps (hop):\n", + # np.linalg.norm(old_c_hmc, axis=1), + # np.linalg.norm(self.c_hmc, axis=1)) self.c_diag = self.get_c_diag() - self.P_diag = np.einsum('ijk,ikl,ilm->ijm', - self.U.conj().transpose((0, 2,1)), - self.P_hmc, - old_U) + self.P_diag = np.einsum("ijk,ikl,ilm->ijm", self.U.conj().transpose((0, 2, 1)), self.P_hmc, old_U) -# if self.nacv is not None: -# self.T, _ = compute_T(nacv=self.nacv, -# vel=self.vel, -# c=self.c_hmc) + # if self.nacv is not None: + # self.T, _ = compute_T(nacv=self.nacv, + # vel=self.vel, + # c=self.c_hmc) - new_surfs, new_vel = self.do_hop(old_c=old_c_diag, - new_c=self.c_diag, - P=self.P_diag) + new_surfs, new_vel = self.do_hop(old_c=old_c_diag, new_c=self.c_diag, P=self.P_diag) self.just_hopped = (new_surfs != self.surfs).nonzero()[0] # if self.just_hopped.any(): @@ -909,49 +818,40 @@ def run(self): counter = 0 -# self.model.to(self.device) -# if self.t == 0: -# self.update_props(needs_nbrs=True) + # self.model.to(self.device) + # if self.t == 0: + # self.update_props(needs_nbrs=True) for _ in tqdm(range(epochs)): for i in range(self.nbr_update_period): - needs_nbrs = (i == 0) + needs_nbrs = i == 0 self.step(needs_nbrs=needs_nbrs) counter += 1 if counter % self.save_period == 0: self.save() -# else: -# # save any geoms that just hopped -# self.save(idx=self.just_hopped) - + # else: + # # save any geoms that just hopped + # self.save(idx=self.just_hopped) - with open(self.log_file, 'a') as f: - f.write('\nNeural Tully terminated normally.') + with open(self.log_file, "a") as f: + f.write("\nNeural Tully terminated normally.") class CombinedNeuralTully: - def __init__(self, - atoms, - ground_params, - tully_params): - + def __init__(self, atoms, ground_params, tully_params): self.reload_ground = tully_params.get("reload_ground", False) - self.ground_dynamics = self.init_ground(atoms=atoms, - ground_params=ground_params) + self.ground_dynamics = self.init_ground(atoms=atoms, ground_params=ground_params) self.ground_params = ground_params self.ground_savefile = ground_params.get("savefile") self.tully_params = tully_params - self.num_trj = tully_params['num_trj'] - - def init_ground(self, - atoms, - ground_params): + self.num_trj = tully_params["num_trj"] + def init_ground(self, atoms, ground_params): ase_ground_params = copy.deepcopy(ground_params) ase_ground_params["trajectory"] = ground_params.get("savefile") - logfile = ase_ground_params['logfile'] + logfile = ase_ground_params["logfile"] trj_file = ase_ground_params["trajectory"] if os.path.isfile(logfile): @@ -971,15 +871,12 @@ def init_ground(self, return ground_dynamics def sample_ground_geoms(self): - steps = math.ceil(self.ground_params["max_time"] / - self.ground_params["timestep"]) - equil_steps = math.ceil(self.ground_params["equil_time"] / - self.ground_params["timestep"]) + steps = math.ceil(self.ground_params["max_time"] / self.ground_params["timestep"]) + equil_steps = math.ceil(self.ground_params["equil_time"] / self.ground_params["timestep"]) loginterval = self.ground_params.get("loginterval", 1) if self.ground_dynamics is not None: - old_trj_file = (str(self.ground_savefile) - .replace(".trj", "_old.trj")) + old_trj_file = str(self.ground_savefile).replace(".trj", "_old.trj") if self.reload_ground and os.path.isfile(old_trj_file): trj = Trajectory(old_trj_file) atoms = next(iter(reversed(trj))) @@ -988,49 +885,39 @@ def sample_ground_geoms(self): # set positions and velocities. Don't overwrite atoms because # then you lose their calculator self.ground_dynamics.atoms.set_positions(atoms.get_positions()) - self.ground_dynamics.atoms.set_velocities( - atoms.get_velocities()) + self.ground_dynamics.atoms.set_velocities(atoms.get_velocities()) self.ground_dynamics.run(steps=steps) trj = Trajectory(self.ground_savefile) logged_equil = math.ceil(equil_steps / loginterval) - possible_states = [trj[index] for index in - range(logged_equil, len(trj))] - random_indices = random.sample(range(len(possible_states)), - self.num_trj) + possible_states = [trj[index] for index in range(logged_equil, len(trj))] + random_indices = random.sample(range(len(possible_states)), self.num_trj) actual_states = [possible_states[index] for index in random_indices] return actual_states def run(self): atoms_list = self.sample_ground_geoms() - tully = NeuralTully(atoms_list=atoms_list, - **self.tully_params) + tully = NeuralTully(atoms_list=atoms_list, **self.tully_params) tully.run() @classmethod - def from_file(cls, - file): - + def from_file(cls, file): all_params = load_json(file) - ground_params = all_params['ground_params'] - atomsbatch = get_atoms(all_params=all_params, - ground_params=ground_params) + ground_params = all_params["ground_params"] + atomsbatch = get_atoms(all_params=all_params, ground_params=ground_params) atomsbatch.calc.model_kwargs = MODEL_KWARGS - tully_params = all_params['tully_params'] - if 'weightpath' in all_params: - model_path = os.path.join(all_params['weightpath'], - str(all_params["nnid"])) + tully_params = all_params["tully_params"] + if "weightpath" in all_params: + model_path = os.path.join(all_params["weightpath"], str(all_params["nnid"])) else: - model_path = all_params['model_path'] + model_path = all_params["model_path"] tully_params.update({"model_path": model_path}) - instance = cls(atoms=atomsbatch, - ground_params=ground_params, - tully_params=tully_params) + instance = cls(atoms=atomsbatch, ground_params=ground_params, tully_params=tully_params) return instance diff --git a/nff/md/tully_multiplicity/io.py b/nff/md/tully_multiplicity/io.py index d382e909..18bfd563 100644 --- a/nff/md/tully_multiplicity/io.py +++ b/nff/md/tully_multiplicity/io.py @@ -2,6 +2,7 @@ Link between Tully surface hopping and both NFF models and JSON parameter files. """ + import json import os @@ -25,58 +26,38 @@ ANGLE_MODELS = ["DimeNet", "DimeNetDiabat", "DimeNetDiabatDelta"] -def make_loader(nxyz, - nbr_list, - num_atoms, - needs_nbrs, - cutoff, - cutoff_skin, - device, - batch_size): - - props = {"nxyz": [torch.Tensor(i) - for i in nxyz]} +def make_loader(nxyz, nbr_list, num_atoms, needs_nbrs, cutoff, cutoff_skin, device, batch_size): + props = {"nxyz": [torch.Tensor(i) for i in nxyz]} - dataset = Dataset(props=props, - units='kcal/mol', - check_props=True) + dataset = Dataset(props=props, units="kcal/mol", check_props=True) if needs_nbrs or nbr_list is None: - nbrs = single_spec_nbrs(dset=dataset, - cutoff=(cutoff + - cutoff_skin), - device=device, - directed=True) - dataset.props['nbr_list'] = nbrs + nbrs = single_spec_nbrs(dset=dataset, cutoff=(cutoff + cutoff_skin), device=device, directed=True) + dataset.props["nbr_list"] = nbrs else: - dataset.props['nbr_list'] = nbr_list + dataset.props["nbr_list"] = nbr_list - loader = DataLoader(dataset, - batch_size=batch_size, - collate_fn=collate_dicts) + loader = DataLoader(dataset, batch_size=batch_size, collate_fn=collate_dicts) return loader -def run_models(models: List, - batch, - device: Union[str, int]): +def run_models(models: List, batch, device: Union[str, int]): """ - Gets a list of models, which contains X models that - collectively predict Energies/Forces, NACVs, SOCs + Gets a list of models, which contains X models that + collectively predict Energies/Forces, NACVs, SOCs - Args: - models (list): list of torch models - batch: torch batch to do inference for - device: device on which all tensors are located + Args: + models (list): list of torch models + batch: torch batch to do inference for + device: device on which all tensors are located """ batch = batch_to(batch, device) results = {} for model in models: - result = model(batch, - inference=True) + result = model(batch, inference=True) result = batch_detach(result) # merge dictionaries @@ -86,8 +67,7 @@ def run_models(models: List, return results -def concat_and_conv(results_list, - num_atoms): +def concat_and_conv(results_list, num_atoms): """ Concatenate results from separate batches and convert to atomic units @@ -102,18 +82,18 @@ def concat_and_conv(results_list, for key in keys: val = torch.cat([i[key] for i in results_list]) - if 'energy_grad' in key or 'force_nacv' in key: - val *= conv['energy'] * conv['_grad'] + if "energy_grad" in key or "force_nacv" in key: + val *= conv["energy"] * conv["_grad"] val = val.reshape(*grad_shape) - elif 'energy' in key: - val *= conv['energy'] - elif ('nacv' in key or 'NACV' in key) and 'grad' in key: - val *= conv['_grad'] + elif "energy" in key: + val *= conv["energy"] + elif ("nacv" in key or "NACV" in key) and "grad" in key: + val *= conv["_grad"] val = val.reshape(*grad_shape) - elif 'NACP' in key and 'grad' in key: - val *= conv['_grad'] + elif "NACP" in key and "grad" in key: + val *= conv["_grad"] val = val.reshape(*grad_shape) - elif 'soc' in key or 'SOC' in key: + elif "soc" in key or "SOC" in key: val *= 0.0000045563353 # cm-1 to Ha # else: # msg = f"{key} has no known conversion" @@ -124,36 +104,37 @@ def concat_and_conv(results_list, return all_results -def get_results(models, - nxyz, - nbr_list, - num_atoms, - needs_nbrs, - cutoff, - cutoff_skin, - device, - batch_size,): +def get_results( + models, + nxyz, + nbr_list, + num_atoms, + needs_nbrs, + cutoff, + cutoff_skin, + device, + batch_size, +): """ `nxyz_list` assumed to be in Angstroms """ - loader = make_loader(nxyz=nxyz, - nbr_list=nbr_list, - num_atoms=num_atoms, - needs_nbrs=needs_nbrs, - cutoff=cutoff, - cutoff_skin=cutoff_skin, - device=device, - batch_size=batch_size) + loader = make_loader( + nxyz=nxyz, + nbr_list=nbr_list, + num_atoms=num_atoms, + needs_nbrs=needs_nbrs, + cutoff=cutoff, + cutoff_skin=cutoff_skin, + device=device, + batch_size=batch_size, + ) results_list = [] for batch in loader: - results = run_models(models=models, - batch=batch, - device=device) + results = run_models(models=models, batch=batch, device=device) results_list.append(results) - all_results = concat_and_conv(results_list=results_list, - num_atoms=num_atoms) + all_results = concat_and_conv(results_list=results_list, num_atoms=num_atoms) return all_results @@ -161,7 +142,7 @@ def get_results(models, def coords_to_nxyz(coords): nxyz = [] for dic in coords: - directions = ['x', 'y', 'z'] + directions = ["x", "y", "z"] n = float(PERIODICTABLE.GetAtomicNumber(dic["element"])) xyz = [dic[i] for i in directions] nxyz.append([n, *xyz]) @@ -169,36 +150,30 @@ def coords_to_nxyz(coords): def load_json(file): - - with open(file, 'r') as f: + with open(file, "r") as f: info = json.load(f) - if 'details' in info: - details = info['details'] + if "details" in info: + details = info["details"] else: details = {} - all_params = {key: val for key, val in info.items() - if key != "details"} + all_params = {key: val for key, val in info.items() if key != "details"} all_params.update(details) return all_params -def make_dataset(nxyz, - ground_params): - props = { - 'nxyz': [torch.Tensor(nxyz)] - } +def make_dataset(nxyz, ground_params): + props = {"nxyz": [torch.Tensor(nxyz)]} cutoff = ground_params["cutoff"] cutoff_skin = ground_params["cutoff_skin"] - dataset = Dataset(props.copy(), units='kcal/mol') - dataset.generate_neighbor_list(cutoff=(cutoff + cutoff_skin), - undirected=False) + dataset = Dataset(props.copy(), units="kcal/mol") + dataset.generate_neighbor_list(cutoff=(cutoff + cutoff_skin), undirected=False) model_type = ground_params["model_type"] - needs_angles = (model_type in ANGLE_MODELS) + needs_angles = model_type in ANGLE_MODELS if needs_angles: dataset.generate_angle_list() @@ -215,14 +190,8 @@ def get_batched_props(dataset): return batched_props -def add_calculator(atomsbatch, - model_path, - model_type, - device, - batched_props, - output_keys=["energy_0"]): - - needs_angles = (model_type in ANGLE_MODELS) +def add_calculator(atomsbatch, model_path, model_type, device, batched_props, output_keys=["energy_0"]): + needs_angles = model_type in ANGLE_MODELS nff_ase = NeuralFF.from_file( model_path=model_path, @@ -232,42 +201,41 @@ def add_calculator(atomsbatch, params=None, model_type=model_type, needs_angles=needs_angles, - dataset_props=batched_props + dataset_props=batched_props, ) atomsbatch.set_calculator(nff_ase) -def get_atoms(ground_params, - all_params): - +def get_atoms(ground_params, all_params): coords = all_params["coords"] nxyz = coords_to_nxyz(coords) - atoms = Atoms(nxyz[:, 0], - positions=nxyz[:, 1:]) + atoms = Atoms(nxyz[:, 0], positions=nxyz[:, 1:]) - dataset, needs_angles = make_dataset(nxyz=nxyz, - ground_params=ground_params) + dataset, needs_angles = make_dataset(nxyz=nxyz, ground_params=ground_params) batched_props = get_batched_props(dataset) - device = ground_params.get('device', 'cuda') + device = ground_params.get("device", "cuda") - atomsbatch = AtomsBatch.from_atoms(atoms=atoms, - props=batched_props, - needs_angles=needs_angles, - device=device, - undirected=False, - cutoff_skin=ground_params['cutoff_skin']) + atomsbatch = AtomsBatch.from_atoms( + atoms=atoms, + props=batched_props, + needs_angles=needs_angles, + device=device, + undirected=False, + cutoff_skin=ground_params["cutoff_skin"], + ) - if 'model_path' in all_params: - model_path = all_params['model_path'] + if "model_path" in all_params: + model_path = all_params["model_path"] else: - model_path = os.path.join(all_params['weightpath'], - str(all_params["nnid"])) - add_calculator(atomsbatch=atomsbatch, - model_path=model_path, - model_type=ground_params["model_type"], - device=device, - batched_props=batched_props, - output_keys=[ground_params['energy_key']]) + model_path = os.path.join(all_params["weightpath"], str(all_params["nnid"])) + add_calculator( + atomsbatch=atomsbatch, + model_path=model_path, + model_type=ground_params["model_type"], + device=device, + batched_props=batched_props, + output_keys=[ground_params["energy_key"]], + ) return atomsbatch diff --git a/nff/md/tully_multiplicity/step.py b/nff/md/tully_multiplicity/step.py index 6e7340a4..3eec9ba4 100644 --- a/nff/md/tully_multiplicity/step.py +++ b/nff/md/tully_multiplicity/step.py @@ -3,27 +3,17 @@ """ import copy -from functools import partial import numpy as np import torch -def verlet_step_1(forces, - surfs, - vel, - xyz, - mass, - dt): - +def verlet_step_1(forces, surfs, vel, xyz, mass, dt): # `forces` has dimension (num_samples x num_states # x num_atoms x 3) # `surfs` has dimension `num_samples` - surf_forces = np.take_along_axis( - forces, surfs.reshape(-1, 1, 1, 1), - axis=1 - ).squeeze(1) + surf_forces = np.take_along_axis(forces, surfs.reshape(-1, 1, 1, 1), axis=1).squeeze(1) # `surf_forces` has dimension (num_samples x # num_atoms x 3) @@ -33,22 +23,14 @@ def verlet_step_1(forces, # `vel` and `xyz` each have dimension # (num_samples x num_atoms x 3) - new_xyz = xyz + vel * dt + 0.5 * accel * dt ** 2 + new_xyz = xyz + vel * dt + 0.5 * accel * dt**2 new_vel = vel + 0.5 * dt * accel return new_xyz, new_vel -def verlet_step_2(forces, - surfs, - vel, - mass, - dt): - - surf_forces = np.take_along_axis( - forces, surfs.reshape(-1, 1, 1, 1), - axis=1 - ).squeeze(1) +def verlet_step_2(forces, surfs, vel, mass, dt): + surf_forces = np.take_along_axis(forces, surfs.reshape(-1, 1, 1, 1), axis=1).squeeze(1) accel = surf_forces / mass.reshape(1, -1, 1) new_vel = vel + 0.5 * dt * accel @@ -56,65 +38,49 @@ def verlet_step_2(forces, return new_vel -def adiabatic_c(c, - elec_substeps, - old_H_plus_nacv, - new_H_plus_nacv, - dt, - **kwargs): - +def adiabatic_c(c, elec_substeps, old_H_plus_nacv, new_H_plus_nacv, dt, **kwargs): num_samples = old_H_plus_nacv.shape[0] num_states = old_H_plus_nacv.shape[1] n = elec_substeps - exp = (np.eye(num_states, num_states) - .reshape(1, num_states, num_states) - .repeat(num_samples, axis=0)) + exp = np.eye(num_states, num_states).reshape(1, num_states, num_states).repeat(num_samples, axis=0) delta_tau = dt / n for i in range(1, n + 1): - new_exp = torch.tensor( - -1j * ( - old_H_plus_nacv + i / n * - (new_H_plus_nacv - old_H_plus_nacv) - ) - * delta_tau - ).matrix_exp().numpy() - exp = np.einsum('ijk, ikl -> ijl', exp, new_exp) + new_exp = ( + torch.tensor(-1j * (old_H_plus_nacv + i / n * (new_H_plus_nacv - old_H_plus_nacv)) * delta_tau) + .matrix_exp() + .numpy() + ) + exp = np.einsum("ijk, ikl -> ijl", exp, new_exp) P = exp - c_new = np.einsum('ijk, ik -> ij', P, c) + c_new = np.einsum("ijk, ik -> ij", P, c) return c_new, P -def compute_T(nacv, - vel, - c): - +def compute_T(nacv, vel, c): # vel has shape num_samples x num_atoms x 3 # nacv has shape num_samples x num_states x num_states # x num_atoms x 3 # T has shape num_samples x (num_states x num_states) - T = (vel.reshape(vel.shape[0], 1, 1, -1, 3) - * nacv).sum((-1, -2)) + T = (vel.reshape(vel.shape[0], 1, 1, -1, 3) * nacv).sum((-1, -2)) # anything that's nan has too big a gap # for hopping and should therefore have T=0 T[np.isnan(T)] = 0 num_states = nacv.shape[1] - coupling = np.einsum('nij, nj-> ni', T, c[:, :num_states]) + coupling = np.einsum("nij, nj-> ni", T, c[:, :num_states]) return T, coupling -def get_p_hop(hop_eqn='sharc', - **kwargs): - - if hop_eqn == 'sharc': +def get_p_hop(hop_eqn="sharc", **kwargs): + if hop_eqn == "sharc": p = get_sharc_p(**kwargs) else: raise NotImplementedError @@ -122,11 +88,7 @@ def get_p_hop(hop_eqn='sharc', return p -def get_sharc_p(old_c, - new_c, - P, - surfs, - **kwargs): +def get_sharc_p(old_c, new_c, P, surfs, **kwargs): """ P is the propagator. """ @@ -134,92 +96,55 @@ def get_sharc_p(old_c, num_samples = old_c.shape[0] num_states = old_c.shape[1] - other_surfs = get_other_surfs(surfs=surfs, - num_states=num_states, - num_samples=num_samples) + other_surfs = get_other_surfs(surfs=surfs, num_states=num_states, num_samples=num_samples) - c_beta_t = np.take_along_axis(old_c, - surfs.reshape(-1, 1), - axis=-1) - c_beta_dt = np.take_along_axis(new_c, - surfs.reshape(-1, 1), - axis=-1) + c_beta_t = np.take_along_axis(old_c, surfs.reshape(-1, 1), axis=-1) + c_beta_dt = np.take_along_axis(new_c, surfs.reshape(-1, 1), axis=-1) - c_alpha_dt = np.take_along_axis(new_c, - other_surfs, - axis=-1) + c_alpha_dt = np.take_along_axis(new_c, other_surfs, axis=-1) # `P` has dimension num_samples x num_states x num_states - P_alpha_beta = np.take_along_axis(np.take_along_axis( - P, - surfs.reshape(-1, 1, 1), - axis=-1).squeeze(-1), - other_surfs, - axis=-1 + P_alpha_beta = np.take_along_axis( + np.take_along_axis(P, surfs.reshape(-1, 1, 1), axis=-1).squeeze(-1), other_surfs, axis=-1 ) - P_beta_beta = np.take_along_axis(np.take_along_axis( - P, - surfs.reshape(-1, 1, 1), - axis=-1).squeeze(-1), - surfs.reshape(-1, 1), - axis=-1 + P_beta_beta = np.take_along_axis( + np.take_along_axis(P, surfs.reshape(-1, 1, 1), axis=-1).squeeze(-1), surfs.reshape(-1, 1), axis=-1 ) # h_alpha is the transition probability from the current state # to alpha num = np.real(c_alpha_dt * np.conj(P_alpha_beta) * np.conj(c_beta_t)) - denom = np.power(np.abs(c_beta_t), 2) - np.real(c_beta_dt * np.conj(P_beta_beta) - * np.conj(c_beta_t)) - pref = 1. - np.power(np.abs(c_beta_dt), 2) / (np.power(np.abs(c_beta_t), 2) + 1.e-8) + denom = np.power(np.abs(c_beta_t), 2) - np.real(c_beta_dt * np.conj(P_beta_beta) * np.conj(c_beta_t)) + pref = 1.0 - np.power(np.abs(c_beta_dt), 2) / (np.power(np.abs(c_beta_t), 2) + 1.0e-8) h = np.zeros((num_samples, num_states)) - np.put_along_axis(h, - other_surfs, - pref * num / (denom + 1.e-8), - axis=-1) + np.put_along_axis(h, other_surfs, pref * num / (denom + 1.0e-8), axis=-1) h[h < 0] = 0 return h -def get_other_surfs(surfs, - num_states, - num_samples): - all_surfs = (np.arange(num_states).reshape(-1, 1) - .repeat(num_samples, 1).transpose()) +def get_other_surfs(surfs, num_states, num_samples): + all_surfs = np.arange(num_states).reshape(-1, 1).repeat(num_samples, 1).transpose() other_idx = all_surfs != surfs.reshape(-1, 1) other_surfs = all_surfs[other_idx].reshape(num_samples, -1) return other_surfs -def try_hop(p_hop, - surfs, - vel, - nacv, - mass, - energy, - max_gap_hop, - simple_scale): +def try_hop(p_hop, surfs, vel, nacv, mass, energy, max_gap_hop, simple_scale): """ `energy` has dimension num_samples x num_states """ - new_surfs = get_new_surf(p_hop=p_hop, - surfs=surfs, - max_gap_hop=max_gap_hop, - energy=energy) + new_surfs = get_new_surf(p_hop=p_hop, surfs=surfs, max_gap_hop=max_gap_hop, energy=energy) - new_vel = rescale(energy=energy, - vel=vel, - nacv=nacv, - mass=mass, - surfs=surfs, - new_surfs=new_surfs, - simple_scale=simple_scale) + new_vel = rescale( + energy=energy, vel=vel, nacv=nacv, mass=mass, surfs=surfs, new_surfs=new_surfs, simple_scale=simple_scale + ) # reset any frustrated hops or things that didn't hop frustrated = np.isnan(new_vel).any((-1, -2)).nonzero()[0] @@ -229,15 +154,9 @@ def try_hop(p_hop, return new_surfs, new_vel -def get_new_surf(p_hop, - surfs, - max_gap_hop, - energy): - +def get_new_surf(p_hop, surfs, max_gap_hop, energy): num_samples = p_hop.shape[0] - lhs = np.concatenate([np.zeros(num_samples).reshape(-1, 1), - p_hop.cumsum(axis=-1)], - axis=-1)[:, :-1] + lhs = np.concatenate([np.zeros(num_samples).reshape(-1, 1), p_hop.cumsum(axis=-1)], axis=-1)[:, :-1] rhs = lhs + p_hop r = np.random.rand(num_samples).reshape(-1, 1) hop = (lhs < r) * (r <= rhs) @@ -249,12 +168,8 @@ def get_new_surf(p_hop, if max_gap_hop is None: return new_surfs - old_en = np.take_along_axis(energy, - surfs.reshape(-1, 1), - axis=-1).squeeze(-1) - new_en = np.take_along_axis(energy, - new_surfs.reshape(-1, 1), - axis=-1).squeeze(-1) + old_en = np.take_along_axis(energy, surfs.reshape(-1, 1), axis=-1).squeeze(-1) + new_en = np.take_along_axis(energy, new_surfs.reshape(-1, 1), axis=-1).squeeze(-1) gaps = abs(old_en - new_en) bad_idx = gaps >= max_gap_hop new_surfs[bad_idx] = surfs[bad_idx] @@ -262,13 +177,7 @@ def get_new_surf(p_hop, return new_surfs -def rescale(energy, - vel, - nacv, - mass, - surfs, - new_surfs, - simple_scale): +def rescale(energy, vel, nacv, mass, surfs, new_surfs, simple_scale): """ Velocity re-scaling, from: @@ -281,28 +190,18 @@ def rescale(energy, """ # old and new energies - old_en = np.take_along_axis(energy, surfs.reshape(-1, 1), - -1).reshape(-1) - new_en = np.take_along_axis(energy, new_surfs.reshape(-1, 1), - -1).reshape(-1) + old_en = np.take_along_axis(energy, surfs.reshape(-1, 1), -1).reshape(-1) + new_en = np.take_along_axis(energy, new_surfs.reshape(-1, 1), -1).reshape(-1) if simple_scale or nacv is None: - v_scale = get_simple_scale(mass=mass, - new_en=new_en, - old_en=old_en, - vel=vel) + v_scale = get_simple_scale(mass=mass, new_en=new_en, old_en=old_en, vel=vel) new_vel = v_scale.reshape(-1, 1, 1) * vel return new_vel # nacvs connecting old to new surfaces ones = [1] * 4 - start_nacv = np.take_along_axis(nacv, surfs - .reshape(-1, *ones), - axis=1) - pair_nacv = np.take_along_axis(start_nacv, new_surfs - .reshape(-1, *ones), - axis=2 - ).squeeze(1).squeeze(1) + start_nacv = np.take_along_axis(nacv, surfs.reshape(-1, *ones), axis=1) + pair_nacv = np.take_along_axis(start_nacv, new_surfs.reshape(-1, *ones), axis=2).squeeze(1).squeeze(1) # nacv unit vector norm = np.linalg.norm(pair_nacv, axis=-1) @@ -311,31 +210,20 @@ def rescale(energy, nac_dir = pair_nacv / norm.reshape(*pair_nacv.shape[:-1], 1) # solve quadratic equation for momentum rescaling - scale = solve_quadratic(vel=vel, - nac_dir=nac_dir, - old_en=old_en, - new_en=new_en, - mass=mass) + scale = solve_quadratic(vel=vel, nac_dir=nac_dir, old_en=old_en, new_en=new_en, mass=mass) # scale the velocity - new_vel = (scale.reshape(-1, 1, 1) * nac_dir - / mass.reshape(1, -1, 1) - + vel) + new_vel = scale.reshape(-1, 1, 1) * nac_dir / mass.reshape(1, -1, 1) + vel return new_vel -def get_simple_scale(mass, - new_en, - old_en, - vel): - +def get_simple_scale(mass, new_en, old_en, vel): m = mass.reshape(1, -1, 1) gap = old_en - new_en - arg = ((2 * gap + (m * vel ** 2).sum((-1, -2))) - .astype('complex128')) + arg = (2 * gap + (m * vel**2).sum((-1, -2))).astype("complex128") num = np.sqrt(arg) - denom = np.sqrt((m * vel ** 2).sum((-1, -2))) + denom = np.sqrt((m * vel**2).sum((-1, -2))) v_scale = num / denom @@ -346,16 +234,7 @@ def get_simple_scale(mass, return v_scale -def truhlar_decoherence(c, - surfs, - energy, - vel, - dt, - mass, - hbar=1, - C=0.1, - eps=1.e-12, - **kwargs): +def truhlar_decoherence(c, surfs, energy, vel, dt, mass, hbar=1, C=0.1, eps=1.0e-12, **kwargs): """ Originally attributed to Truhlar, cited from G. Granucci and M. Persico. "Critical appraisal of the @@ -366,25 +245,15 @@ def truhlar_decoherence(c, num_samples = c.shape[0] num_states = c.shape[1] - other_surfs = get_other_surfs(surfs=surfs, - num_states=num_states, - num_samples=num_samples) + other_surfs = get_other_surfs(surfs=surfs, num_states=num_states, num_samples=num_samples) - c_m = np.take_along_axis(c, - surfs.reshape(-1, 1), - axis=-1) + c_m = np.take_along_axis(c, surfs.reshape(-1, 1), axis=-1) - E_m = np.take_along_axis(energy, - surfs.reshape(-1, 1), - axis=-1) + E_m = np.take_along_axis(energy, surfs.reshape(-1, 1), axis=-1) - c_k = np.take_along_axis(c, - other_surfs, - axis=-1) + c_k = np.take_along_axis(c, other_surfs, axis=-1) - E_k = np.take_along_axis(energy, - other_surfs, - axis=-1) + E_k = np.take_along_axis(energy, other_surfs, axis=-1) # vel has shape num_samples x num_atoms x 3 E_kin = (1 / 2 * mass.reshape(1, -1, 1) * np.power(vel, 2)).sum((-1, -2)) @@ -399,20 +268,11 @@ def truhlar_decoherence(c, num[num < 0] = 0 - c_m_prime = c_m * np.sqrt( - num.reshape(-1, 1) - / np.power(np.abs(c_m), 2) - ) + c_m_prime = c_m * np.sqrt(num.reshape(-1, 1) / np.power(np.abs(c_m), 2)) new_c = np.zeros_like(c) - np.put_along_axis(new_c, - surfs.reshape(-1, 1), - c_m_prime, - axis=-1) - - np.put_along_axis(new_c, - other_surfs, - c_k_prime, - axis=-1) + np.put_along_axis(new_c, surfs.reshape(-1, 1), c_m_prime, axis=-1) + + np.put_along_axis(new_c, other_surfs, c_k_prime, axis=-1) return new_c diff --git a/nff/md/utils_ax.py b/nff/md/utils_ax.py index 84b33373..5804ae1d 100644 --- a/nff/md/utils_ax.py +++ b/nff/md/utils_ax.py @@ -2,9 +2,7 @@ import numpy as np import csv import json -import logging import copy -import pdb import ase @@ -31,66 +29,64 @@ def get_energy(atoms): # ekin = ekin.detach().numpy() - print(('Energy per atom: Epot = %.2fkcal/mol ' - 'Ekin = %.2fkcal/mol (T=%3.0fK) ' - 'Etot = %.2fkcal/mol' - % (epot, ekin, Temperature, epot + ekin))) + print( + ( + "Energy per atom: Epot = %.2fkcal/mol " + "Ekin = %.2fkcal/mol (T=%3.0fK) " + "Etot = %.2fkcal/mol" % (epot, ekin, Temperature, epot + ekin) + ) + ) # print('Energy per atom: Epot = %.5feV Ekin = %.5feV (T=%3.0fK) ' # 'Etot = %.5feV' % (epot, ekin, Temperature, (epot + ekin))) return epot, ekin, Temperature def write_traj(filename, frames): - ''' - Write trajectory dataframes into .xyz format for VMD visualization - to do: include multiple atom types - - example: - path = "../../sim/topotools_ethane/ethane-nvt_unwrap.xyz" - traj2write = trajconv(n_mol, n_atom, box_len, path) - write_traj(path, traj2write) - ''' - file = open(filename, 'w') + """ + Write trajectory dataframes into .xyz format for VMD visualization + to do: include multiple atom types + + example: + path = "../../sim/topotools_ethane/ethane-nvt_unwrap.xyz" + traj2write = trajconv(n_mol, n_atom, box_len, path) + write_traj(path, traj2write) + """ + file = open(filename, "w") atom_no = frames.shape[1] for i, frame in enumerate(frames): - file.write(str(atom_no) + '\n') - file.write('Atoms. Timestep: ' + str(i) + '\n') + file.write(str(atom_no) + "\n") + file.write("Atoms. Timestep: " + str(i) + "\n") for atom in frame: if atom.shape[0] == 4: try: - file.write(str(int(atom[0])) + " " + str(atom[1]) + - " " + str(atom[2]) + " " + str(atom[3]) + "\n") + file.write(str(int(atom[0])) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") except BaseException: - file.write(str(atom[0]) + " " + str(atom[1]) + - " " + str(atom[2]) + " " + str(atom[3]) + "\n") + file.write(str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") elif atom.shape[0] == 3: - file.write(("1" + " " + str(atom[0]) + " " - + str(atom[1]) + " " + str(atom[2]) + "\n")) + file.write(("1" + " " + str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + "\n")) else: raise ValueError("wrong format") file.close() def mol_dot(vec1, vec2): - """ Say we have two vectors, each of which has the form + """Say we have two vectors, each of which has the form [[fx1, fy1, fz1], [fx2, fy2, fz2], ...]. mol_dot returns an array of dot products between each - element of the two vectors. """ + element of the two vectors.""" v1 = np.array(vec1) v2 = np.array(vec2) - out = np.transpose([np.dot(element1, element2) for - element1, element2 in zip(v1, v2)]) + out = np.transpose([np.dot(element1, element2) for element1, element2 in zip(v1, v2)]) return out def mol_norm(vec): """Square root of mol_dot(vec, vec).""" - return mol_dot(vec, vec)**0.5 + return mol_dot(vec, vec) ** 0.5 def atoms_to_nxyz(atoms, positions=None): - atomic_numbers = atoms.get_atomic_numbers() if positions is None: positions = atoms.get_positions() @@ -98,8 +94,7 @@ def atoms_to_nxyz(atoms, positions=None): # don't make this a numpy array or it'll become type float64, # which will mess up the tensor computation. Need it to be # type float32. - nxyz = [[symbol, *position] for - symbol, position in zip(atomic_numbers, positions)] + nxyz = [[symbol, *position] for symbol, position in zip(atomic_numbers, positions)] return nxyz @@ -120,7 +115,7 @@ def zhu_dic_to_list(dic): sub_dic = dict() for key in dic.keys(): sub_dic[key.split("_list")[0]] = dic[key][i] - if (key == "time_list"): + if key == "time_list": sub_dic[key.split("_list")[0]] /= const.FS_TO_AU lst.append(sub_dic) @@ -135,7 +130,7 @@ def append_to_csv(lst, out_file): Returns: None """ - with open(out_file, 'a+') as csvfile: + with open(out_file, "a+") as csvfile: for item in lst: fieldnames = sorted(list(item.keys())) writer = csv.DictWriter(csvfile, fieldnames=fieldnames) @@ -147,7 +142,7 @@ def write_to_new_csv(lst, out_file): """ Same as `append_to_csv`, but writes a new file. """ - with open(out_file, 'w') as csvfile: + with open(out_file, "w") as csvfile: for item in lst: fieldnames = sorted(list(item.keys())) writer = csv.DictWriter(csvfile, fieldnames=fieldnames) @@ -176,7 +171,7 @@ def csv_read(out_file): dic_list (list): list of dictionaries """ - with open(out_file, newline='') as csvfile: + with open(out_file, newline="") as csvfile: # get the keys and the corresponding dictionaries # being outputted dic_list = list(csv.DictReader(csvfile))[0::2] @@ -186,7 +181,7 @@ def csv_read(out_file): # to the key order on every other line. # (Also, weird things happen if you define `dic_keys` and # `dic_list` within the same context manager, so must do it separately) - with open(out_file, newline='') as csvfile: + with open(out_file, newline="") as csvfile: # this dictionary gives you a key: value pair # of the form supposed key: actual key dic_keys = list(csv.DictReader(csvfile))[1::2] @@ -201,19 +196,15 @@ def csv_read(out_file): for dic in new_dic_list: for key, value in dic.items(): - if 'nan' in value: - value = value.replace('nan', "float('nan')") + if "nan" in value: + value = value.replace("nan", "float('nan')") dic[key] = eval(value) return new_dic_list class NeuralMDLogger(MDLogger): - def __init__(self, - *args, - verbose=True, - **kwargs): - + def __init__(self, *args, verbose=True, **kwargs): super().__init__(*args, **kwargs) self.natoms = len(self.atoms) self.verbose = verbose @@ -244,7 +235,6 @@ def __call__(self): class ZhuNakamuraLogger: - """ Base class for Zhu Nakamura dynamics. Properties: @@ -254,7 +244,6 @@ class ZhuNakamuraLogger: """ def __init__(self, out_file, log_file, save_keys, **kwargs): - self.out_file = out_file self.log_file = log_file self.save_keys = save_keys @@ -307,8 +296,7 @@ def create_save_list(self): else: save_dic[key] = val - save_dic["nxyz_list"] = [atoms_to_nxyz(self.atoms, positions) for - positions in save_dic["position_list"]] + save_dic["nxyz_list"] = [atoms_to_nxyz(self.atoms, positions) for positions in save_dic["position_list"]] save_list = zhu_dic_to_list(save_dic) return save_list @@ -319,16 +307,12 @@ def save(self): """ save_list = self.create_save_list() - csv_write(out_file=self.out_file, - lst=save_list[-1:], - method="append") + csv_write(out_file=self.out_file, lst=save_list[-1:], method="append") for key in self.save_keys: setattr(self, key, getattr(self, key)[-5:]) - def ac_present(self, - old_list, - new_list): + def ac_present(self, old_list, new_list): """ Check if the previous AC step, whose properties you're updating, was actually saved. @@ -360,8 +344,7 @@ def ac_present(self, return present, freq_gt_2 def modify_hop(self, new_list): - - key = 'hopping_probability' + key = "hopping_probability" new_list[-3][key] = copy.deepcopy(new_list[-2][key]) new_list[-2][key] = [] @@ -402,9 +385,7 @@ def modify_save(self): # check to see if [AC on old surface] was # actually saved - may not be if we're not # saving every frame - ac_present, freq_gt_2 = self.ac_present( - old_list=old_list, - new_list=new_list) + ac_present, freq_gt_2 = self.ac_present(old_list=old_list, new_list=new_list) # update [AC on old surface] with the # fact that it's not in the trj and that @@ -434,9 +415,7 @@ def modify_save(self): if not freq_gt_2: save_list.append(new_list[-1]) - csv_write(out_file=self.out_file, - lst=save_list, - method="new") + csv_write(out_file=self.out_file, lst=save_list, method="new") def output_to_json(self): """ @@ -456,7 +435,7 @@ def log(self, msg): Args: msg (str) """ - output = '{:>12}: {}'.format("Zhu-Nakamura dynamics".upper(), msg) + output = "{:>12}: {}".format("Zhu-Nakamura dynamics".upper(), msg) with open(self.log_file, "a+") as f: f.write(output) f.write("\n") diff --git a/nff/md/zhu_nakamura/dynamics.py b/nff/md/zhu_nakamura/dynamics.py index 4029d68c..8ffef808 100644 --- a/nff/md/zhu_nakamura/dynamics.py +++ b/nff/md/zhu_nakamura/dynamics.py @@ -977,7 +977,7 @@ def update_energies_forces(self, trjs, get_new_neighbors): current_trj = i * self.batch_size - for j, trj in enumerate(trjs[current_trj: current_trj + self.batch_size]): + for j, trj in enumerate(trjs[current_trj : current_trj + self.batch_size]): energies = [] forces = [] for key in self.energy_keys: diff --git a/nff/nn/activations.py b/nff/nn/activations.py index d4139c40..dc751eb7 100644 --- a/nff/nn/activations.py +++ b/nff/nn/activations.py @@ -5,7 +5,6 @@ class shifted_softplus(torch.nn.Module): - def __init__(self): super(shifted_softplus, self).__init__() @@ -22,20 +21,10 @@ def forward(self, x): class LearnableSwish(torch.nn.Module): - def __init__(self, - alpha=1.0, - beta=1.702): + def __init__(self, alpha=1.0, beta=1.702): super().__init__() - self.alpha_inv = nn.Parameter( - torch.log( - torch.exp(torch.Tensor([alpha])) - 1 - ) - ) - self.beta_inv = nn.Parameter( - torch.log( - torch.exp(torch.Tensor([beta])) - 1 - ) - ) + self.alpha_inv = nn.Parameter(torch.log(torch.exp(torch.Tensor([alpha])) - 1)) + self.beta_inv = nn.Parameter(torch.log(torch.exp(torch.Tensor([beta])) - 1)) @property def alpha(self): diff --git a/nff/nn/glue.py b/nff/nn/glue.py index 255a265e..6dc706d6 100644 --- a/nff/nn/glue.py +++ b/nff/nn/glue.py @@ -4,30 +4,24 @@ import numpy as np from nff.train import batch_detach -IMPLEMENTED_MODES = ['sum', 'mean'] +IMPLEMENTED_MODES = ["sum", "mean"] class Stack(nn.Module): - def __init__(self, model_dict, mode='sum'): + def __init__(self, model_dict, mode="sum"): super().__init__() if mode not in IMPLEMENTED_MODES: - raise NotImplementedError( - f'{mode} mode is not implemented for Stack') + raise NotImplementedError(f"{mode} mode is not implemented for Stack") # to implement a check for readout keys self.models = ModuleDict(model_dict) self.mode = mode - def forward(self, - batch, - keys_to_combine=['energy', 'energy_grad'], - **kwargs): - + def forward(self, batch, keys_to_combine=["energy", "energy_grad"], **kwargs): # run models - result_list = [self.models[key](batch, **kwargs) - for key in self.models.keys()] + result_list = [self.models[key](batch, **kwargs) for key in self.models.keys()] # perform further operations combine_results = dict() @@ -38,20 +32,14 @@ def forward(self, combine_results[key] += result[key] else: combine_results[key] = result[key] - if self.mode == 'mean': + if self.mode == "mean": for key in keys_to_combine: combine_results[key] /= len(result_list) return combine_results class DiabatStack(nn.Module): - def __init__(self, - models, - diabat_keys, - energy_keys, - adiabat_mean, - extra_keys=None): - + def __init__(self, models, diabat_keys, energy_keys, adiabat_mean, extra_keys=None): super().__init__() self.models = ModuleList(models) @@ -61,13 +49,9 @@ def __init__(self, self.adiabat_mean = adiabat_mean # any extra keys you want to be averaged - self.extra_keys = (extra_keys if (extra_keys is not None) - else extra_keys) - - def forward(self, - batch, - **kwargs): + self.extra_keys = extra_keys if (extra_keys is not None) else extra_keys + def forward(self, batch, **kwargs): # use the same xyz for all the models so you can # compute the gradients @@ -83,14 +67,12 @@ def forward(self, if this_key not in results: continue if i != 0: - combined_results[this_key] += (results[this_key] - / num_models) + combined_results[this_key] += results[this_key] / num_models else: - combined_results[this_key] = (results[this_key] - / num_models) + combined_results[this_key] = results[this_key] / num_models return combined_results - xyz = batch['nxyz'][:, 1:] + xyz = batch["nxyz"][:, 1:] xyz.requires_grad = True # don't compute any gradients in the initial forward @@ -98,8 +80,7 @@ def forward(self, # average adiabatic energies and waste time/memory init_kwargs = copy.deepcopy(kwargs) - init_kwargs.update({"add_grad": False, - "add_nacv": False}) + init_kwargs.update({"add_grad": False, "add_nacv": False}) # get diabatic predictions from each model result_list = [] @@ -107,28 +88,20 @@ def forward(self, # use the initial run before computing all the # adiabatic quantities, if possible if hasattr(model, "run"): - result_list.append(model.run(batch=batch, - xyz=xyz)[0]) + result_list.append(model.run(batch=batch, xyz=xyz)[0]) else: - result_list.append(model(batch=batch, - xyz=xyz, - **init_kwargs)) + result_list.append(model(batch=batch, xyz=xyz, **init_kwargs)) combined_results = {} - unique_diabat_keys = list(set((np.array(self.diabat_keys) - .reshape(-1).tolist()))) + unique_diabat_keys = list(set((np.array(self.diabat_keys).reshape(-1).tolist()))) num_models = len(self.models) for key in unique_diabat_keys: for i, result in enumerate(result_list): if i == 0: combined_results[key] = result[key] / num_models else: - combined_results[key] = (combined_results[key] - + result[key] / num_models) + combined_results[key] = combined_results[key] + result[key] / num_models - combined_results = self.diabatic_readout(batch=batch, - xyz=xyz, - results=combined_results, - **kwargs) + combined_results = self.diabatic_readout(batch=batch, xyz=xyz, results=combined_results, **kwargs) return combined_results diff --git a/nff/nn/graphconv.py b/nff/nn/graphconv.py index d3e97d10..93c22f7e 100644 --- a/nff/nn/graphconv.py +++ b/nff/nn/graphconv.py @@ -3,9 +3,7 @@ class MessagePassingModule(nn.Module): - - """Convolution constructed as MessagePassing. - """ + """Convolution constructed as MessagePassing.""" def __init__(self): super(MessagePassingModule, self).__init__() @@ -25,17 +23,13 @@ def message(self, r, e, a, aggr_wgt): def aggregate(self, message, index, size): # pdb.set_trace() - new_r = scatter_add(src=message, - index=index, - dim=0, - dim_size=size) + new_r = scatter_add(src=message, index=index, dim=0, dim_size=size) return new_r def update(self, r): return r def forward(self, r, e, a, aggr_wgt=None): - graph_size = r.shape[0] rij, rji = self.message(r, e, a, aggr_wgt) @@ -48,8 +42,7 @@ def forward(self, r, e, a, aggr_wgt=None): class EdgeUpdateModule(nn.Module): - """Update Edge State Based on information from connected nodes - """ + """Update Edge State Based on information from connected nodes""" def __init__(self): super(EdgeUpdateModule, self).__init__() @@ -79,8 +72,7 @@ def aggregate(self, message, neighborlist): Returns: TYPE: Description """ - aggregated_edge_feature = message[neighborlist[:, 0] - ] + message[neighborlist[:, 1]] + aggregated_edge_feature = message[neighborlist[:, 0]] + message[neighborlist[:, 1]] return aggregated_edge_feature def update(self, e): @@ -95,18 +87,14 @@ def forward(self, r, e, a): class GeometricOperations(nn.Module): - - """Compute geomtrical properties based on XYZ coordinates - """ + """Compute geomtrical properties based on XYZ coordinates""" def __init__(self): super(GeometricOperations, self).__init__() class TopologyOperations(nn.Module): - - """Change the topology index given geomtrical properties - """ + """Change the topology index given geomtrical properties""" def __init__(self): super(TopologyOperations, self).__init__() diff --git a/nff/nn/graphop.py b/nff/nn/graphop.py index 292ad565..6c0f379f 100644 --- a/nff/nn/graphop.py +++ b/nff/nn/graphop.py @@ -1,6 +1,7 @@ import torch from nff.utils.scatter import compute_grad from nff.nn.modules import ConfAttention + EPS = 1e-15 @@ -31,12 +32,7 @@ def update_boltz(conf_fp, weight, boltz_nn): return boltzmann_fp -def conf_pool(mol_size, - boltzmann_weights, - mol_fp_nn, - boltz_nns, - conf_fps, - head_pool="concatenate"): +def conf_pool(mol_size, boltzmann_weights, mol_fp_nn, boltz_nns, conf_fps, head_pool="concatenate"): """ Pool atomic representations of conformers into molecular fingerprint, and then add those fingerprints together with Boltzmann weights. @@ -65,9 +61,7 @@ def conf_pool(mol_size, # the attention pooler and return if isinstance(boltz_nn, ConfAttention): - final_fp, learned_weights = boltz_nn( - conf_fps=conf_fps, - boltzmann_weights=boltzmann_weights) + final_fp, learned_weights = boltz_nn(conf_fps=conf_fps, boltzmann_weights=boltzmann_weights) else: # otherwise get a new fingerprint for each conformer # based on its Boltzmann weight @@ -75,10 +69,7 @@ def conf_pool(mol_size, boltzmann_fps = [] for i, conf_fp in enumerate(conf_fps): weight = boltzmann_weights[i] - boltzmann_fp = update_boltz( - conf_fp=conf_fp, - weight=weight, - boltz_nn=boltz_nn) + boltzmann_fp = update_boltz(conf_fp=conf_fp, weight=weight, boltz_nn=boltz_nn) boltzmann_fps.append(boltzmann_fp) boltzmann_fps = torch.stack(boltzmann_fps) @@ -181,17 +172,11 @@ def get_atoms_inside_cell(r, N, pbc): N = [N] # selecting only the atoms inside the unit cell - atoms_in_cell = [ - set(x.cpu().data.numpy()) - for x in torch.split(pbc, N) - ] + atoms_in_cell = [set(x.cpu().data.numpy()) for x in torch.split(pbc, N)] N = [len(n) for n in atoms_in_cell] - atoms_in_cell = torch.cat([ - torch.LongTensor(list(x)) - for x in atoms_in_cell - ]) + atoms_in_cell = torch.cat([torch.LongTensor(list(x)) for x in atoms_in_cell]) r = r[atoms_in_cell] diff --git a/nff/nn/models/conformers.py b/nff/nn/models/conformers.py index 91c31d58..6f6ef529 100644 --- a/nff/nn/models/conformers.py +++ b/nff/nn/models/conformers.py @@ -2,12 +2,7 @@ import torch.nn as nn from nff.nn.layers import DEFAULT_DROPOUT_RATE -from nff.nn.modules import ( - SchNetConv, - NodeMultiTaskReadOut, - ConfAttention, - LinearConfAttention -) +from nff.nn.modules import SchNetConv, NodeMultiTaskReadOut, ConfAttention, LinearConfAttention from nff.nn.graphop import conf_pool from nff.nn.utils import construct_sequential from nff.utils.scatter import compute_grad @@ -176,7 +171,6 @@ def make_boltz_nn(self, boltzmann_dict): # network for each of the number of heads elif "attention" in boltzmann_dict["type"]: - if boltzmann_dict["type"] == "attention": module = ConfAttention elif boltzmann_dict["type"] == "linear_attention": @@ -190,20 +184,23 @@ def make_boltz_nn(self, boltzmann_dict): # (useful for ablation studies) equal_weights = boltzmann_dict.get("equal_weights", False) # what function to use to convert the alpha_ij to probabilities - prob_func = boltzmann_dict.get("prob_func", 'softmax') + prob_func = boltzmann_dict.get("prob_func", "softmax") # add a network for each head for _ in range(num_heads): - mol_basis = boltzmann_dict["mol_basis"] boltz_basis = boltzmann_dict["boltz_basis"] final_act = boltzmann_dict["final_act"] - networks.append(module(mol_basis=mol_basis, - boltz_basis=boltz_basis, - final_act=final_act, - equal_weights=equal_weights, - prob_func=prob_func)) + networks.append( + module( + mol_basis=mol_basis, + boltz_basis=boltz_basis, + final_act=final_act, + equal_weights=equal_weights, + prob_func=prob_func, + ) + ) return networks @@ -232,7 +229,6 @@ def add_features(self, batch, **kwargs): # go through each extra per-species feature for feat_name, feat_type in zip(self.extra_feats, self.ext_feat_types): - if feat_type == "conformer": continue @@ -241,8 +237,7 @@ def add_features(self, batch, **kwargs): # split the batched features up by species and add them # to the list splits = [feat_len] * num_mols - feat = torch.stack(list( - torch.split(batch[feat_name], splits))) + feat = torch.stack(list(torch.split(batch[feat_name], splits))) feats.append(feat) # concatenate the features @@ -250,11 +245,7 @@ def add_features(self, batch, **kwargs): return feats - def convolve_sub_batch(self, - batch, - xyz=None, - xyz_grad=False, - **kwargs): + def convolve_sub_batch(self, batch, xyz=None, xyz_grad=False, **kwargs): """ Apply the convolutional layers to a sub-batch. @@ -284,14 +275,13 @@ def convolve_sub_batch(self, # offsets take care of periodic boundary conditions offsets = batch.get("offsets", 0) # to deal with any shape mismatches - if hasattr(offsets, 'max') and offsets.max() == 0: + if hasattr(offsets, "max") and offsets.max() == 0: offsets = 0 if "distances" in batch: e = batch["distances"][:, None] else: - e = (xyz[a[:, 0]] - xyz[a[:, 1]] - - offsets).pow(2).sum(1).sqrt()[:, None] + e = (xyz[a[:, 0]] - xyz[a[:, 1]] - offsets).pow(2).sum(1).sqrt()[:, None] # ensuring image atoms have the same vectors of their corresponding # atom inside the unit cell @@ -304,11 +294,7 @@ def convolve_sub_batch(self, return r, xyz - def convolve(self, - batch, - sub_batch_size=None, - xyz=None, - xyz_grad=False): + def convolve(self, batch, sub_batch_size=None, xyz=None, xyz_grad=False): """ Apply the convolution layers to the batch. Args: @@ -340,9 +326,7 @@ def convolve(self, xyz_list = [] for sub_batch in sub_batches: - - new_node_feats, xyz = self.convolve_sub_batch( - sub_batch, xyz, xyz_grad) + new_node_feats, xyz = self.convolve_sub_batch(sub_batch, xyz, xyz_grad) new_node_feat_list.append(new_node_feats) xyz_list.append(xyz) @@ -351,9 +335,7 @@ def convolve(self, return new_node_feats, xyz - def get_external_3d(self, - batch, - n_conf_list): + def get_external_3d(self, batch, n_conf_list): """ Get any extra 3D per-conformer features that were requested for the dataset. @@ -369,15 +351,13 @@ def get_external_3d(self, # if you didn't ask for any extra features, or none of the requested # features are per-conformer features, return empty tensors - if (self.extra_feats is None or - "conformer" not in self.ext_feat_types): + if self.extra_feats is None or "conformer" not in self.ext_feat_types: return # get all the features and split them up by species extra_conf_fps = [] - for feat_name, feat_type in zip(self.extra_feats, - self.ext_feat_types): + for feat_name, feat_type in zip(self.extra_feats, self.ext_feat_types): if feat_type == "conformer": extra_conf_fps.append(batch[feat_name]) @@ -386,12 +366,7 @@ def get_external_3d(self, return split_extra - def get_conf_fps(self, - smiles_fp, - mol_size, - batch, - split_extra, - idx): + def get_conf_fps(self, smiles_fp, mol_size, batch, split_extra, idx): """ Get per-conformer fingerprints. Args: @@ -420,9 +395,9 @@ def get_conf_fps(self, # split the atomic fingerprints up by conformer for atomic_fps in torch.split(smiles_fp, N): # sum them and then convert to molecular fp - if self.pool_type == 'sum': + if self.pool_type == "sum": summed_atomic_fps = atomic_fps.sum(dim=0) - elif self.pool_type == 'mean': + elif self.pool_type == "mean": summed_atomic_fps = atomic_fps.mean(dim=0) else: raise NotImplementedError @@ -443,11 +418,7 @@ def get_conf_fps(self, return conf_fps - def post_process(self, - batch, - r, - xyz, - **kwargs): + def post_process(self, batch, r, xyz, **kwargs): """ Split various items up by species, convert atomic fingerprints to molecular fingerprints, and incorporate non-learnable features. @@ -465,17 +436,14 @@ def post_process(self, # split the fingerprints by species fps_by_smiles = torch.split(r, N) # get extra 3D fingerprints - split_extra = self.get_external_3d(batch, - num_confs) + split_extra = self.get_external_3d(batch, num_confs) # get all the conformer fingerprints for each species conf_fps_by_smiles = [] for i, smiles_fp in enumerate(fps_by_smiles): - conf_fps = self.get_conf_fps(smiles_fp=smiles_fp, - mol_size=mol_sizes[i], - batch=batch, - split_extra=split_extra, - idx=i) + conf_fps = self.get_conf_fps( + smiles_fp=smiles_fp, mol_size=mol_sizes[i], batch=batch, split_extra=split_extra, idx=i + ) conf_fps_by_smiles.append(conf_fps) @@ -486,13 +454,15 @@ def post_process(self, extra_feats = self.add_features(batch=batch, **kwargs) # return everything in a dictionary - outputs = dict(r=r, - N=N, - xyz=xyz, - conf_fps_by_smiles=conf_fps_by_smiles, - boltzmann_weights=boltzmann_weights, - mol_sizes=mol_sizes, - extra_feats=extra_feats) + outputs = dict( + r=r, + N=N, + xyz=xyz, + conf_fps_by_smiles=conf_fps_by_smiles, + boltzmann_weights=boltzmann_weights, + mol_sizes=mol_sizes, + extra_feats=extra_feats, + ) return outputs @@ -514,24 +484,22 @@ def fps_no_mpnn(self, batch, **kwargs): n_conf_list = (torch.tensor(N) / torch.tensor(mol_sizes)).tolist() # get the conformer fps for each smiles - conf_fps_by_smiles = self.get_external_3d(batch, - n_conf_list) + conf_fps_by_smiles = self.get_external_3d(batch, n_conf_list) # add any per-species fingerprints boltzmann_weights = torch.split(batch["weights"], n_conf_list) extra_feats = self.add_features(batch=batch, **kwargs) - outputs = {"conf_fps_by_smiles": conf_fps_by_smiles, - "boltzmann_weights": boltzmann_weights, - "mol_sizes": mol_sizes, - "extra_feats": extra_feats} + outputs = { + "conf_fps_by_smiles": conf_fps_by_smiles, + "boltzmann_weights": boltzmann_weights, + "mol_sizes": mol_sizes, + "extra_feats": extra_feats, + } return outputs - def make_embeddings(self, - batch, - xyz=None, - **kwargs): + def make_embeddings(self, batch, xyz=None, **kwargs): """ Make all conformer fingerprints. Args: @@ -549,13 +517,8 @@ def make_embeddings(self, # if using an MPNN, apply the convolution layers # and then post-process if self.use_mpnn: - r, xyz = self.convolve(batch=batch, - xyz=xyz, - **kwargs) - outputs = self.post_process(batch=batch, - r=r, - xyz=xyz, - **kwargs) + r, xyz = self.convolve(batch=batch, xyz=xyz, **kwargs) + outputs = self.post_process(batch=batch, r=r, xyz=xyz, **kwargs) # otherwise just use the non-learnable features else: @@ -614,7 +577,8 @@ def pool(self, outputs): mol_fp_nn=self.mol_fp_nn, boltz_nns=self.boltz_nns, conf_fps=conf_fps, - head_pool=self.head_pool) + head_pool=self.head_pool, + ) # add extra features if there are any if extra_feats is not None: @@ -648,15 +612,11 @@ def add_grad(self, batch, results, xyz): # these keys, then compute its predicted value if key in result_grad_keys: base_result = results[key.replace("_grad", "")] - results[key] = compute_grad(inputs=xyz, - output=base_result) + results[key] = compute_grad(inputs=xyz, output=base_result) return results - def forward(self, - batch, - xyz=None, - **kwargs): + def forward(self, batch, xyz=None, **kwargs): """ Call the model. Args: diff --git a/nff/nn/models/cp3d.py b/nff/nn/models/cp3d.py index 48c88cf5..8ebfb17a 100644 --- a/nff/nn/models/cp3d.py +++ b/nff/nn/models/cp3d.py @@ -1,13 +1,10 @@ from torch import nn import torch import numpy as np -import math from nff.data.graphs import get_bond_idx from nff.nn.models.conformers import WeightedConformers -from nff.nn.modules import (ChemPropConv, ChemPropMsgToNode, - ChemPropInit, SchNetEdgeFilter, - CpSchNetConv) +from nff.nn.modules import ChemPropConv, ChemPropMsgToNode, ChemPropInit, SchNetEdgeFilter, CpSchNetConv from nff.utils.tools import make_directed from nff.utils.confs import split_batch @@ -60,7 +57,8 @@ def __init__(self, modelparams): trainable_gauss=modelparams["trainable_gauss"], n_filters=modelparams["n_filters"], dropout_rate=modelparams["dropout_rate"], - activation=modelparams["activation"]) + activation=modelparams["activation"], + ) def make_convs(self, modelparams): """ @@ -75,16 +73,11 @@ def make_convs(self, modelparams): modelparams.update({"n_edge_hidden": modelparams["mol_basis"]}) # call `CpSchNetConv` to make the convolution layers - convs = nn.ModuleList([ChemPropConv(**modelparams) - for _ in range(num_conv)]) + convs = nn.ModuleList([ChemPropConv(**modelparams) for _ in range(num_conv)]) return convs - def get_distance_feats(self, - batch, - xyz, - offsets, - bond_nbrs): + def get_distance_feats(self, batch, xyz, offsets, bond_nbrs): """ Get distance features. Args: @@ -102,8 +95,7 @@ def get_distance_feats(self, # get directed neighbor list nbr_list, nbr_was_directed = make_directed(batch["nbr_list"]) # distances - distances = (xyz[nbr_list[:, 0]] - xyz[nbr_list[:, 1]] - - offsets).pow(2).sum(1).sqrt()[:, None] + distances = (xyz[nbr_list[:, 0]] - xyz[nbr_list[:, 1]] - offsets).pow(2).sum(1).sqrt()[:, None] # put through Gaussian filter and dense layer to get features distance_feats = self.edge_filter(distances) @@ -114,18 +106,13 @@ def get_distance_feats(self, bond_idx = batch["bond_idx"] if not nbr_was_directed: nbr_dim = nbr_list.shape[0] - bond_idx = torch.cat([bond_idx, - bond_idx + nbr_dim // 2]) + bond_idx = torch.cat([bond_idx, bond_idx + nbr_dim // 2]) else: bond_idx = get_bond_idx(bond_nbrs, nbr_list) return nbr_list, distance_feats, bond_idx - def make_h(self, - batch, - r, - xyz, - offsets): + def make_h(self, batch, r, xyz, offsets): """ Initialize the hidden edge features. Args: @@ -149,17 +136,13 @@ def make_h(self, # get the distance-based edge features nbr_list, distance_feats, bond_idx = self.get_distance_feats( - batch=batch, - xyz=xyz, - offsets=offsets, - bond_nbrs=bond_nbrs) + batch=batch, xyz=xyz, offsets=offsets, bond_nbrs=bond_nbrs + ) # combine node and bonded edge features to get the bond component # of h_0 - cp_bond_feats = self.W_i_cp(r=r, - bond_feats=bond_feats, - bond_nbrs=bond_nbrs) + cp_bond_feats = self.W_i_cp(r=r, bond_feats=bond_feats, bond_nbrs=bond_nbrs) h_0_bond = torch.zeros((nbr_list.shape[0], cp_bond_feats.shape[1])) h_0_bond = h_0_bond.to(device) h_0_bond[bond_idx] = cp_bond_feats @@ -167,9 +150,7 @@ def make_h(self, # combine node and distance edge features to get the schnet component # of h_0 - h_0_distance = self.W_i_schnet(r=r, - bond_feats=distance_feats, - bond_nbrs=nbr_list) + h_0_distance = self.W_i_schnet(r=r, bond_feats=distance_feats, bond_nbrs=nbr_list) # concatenate the two together @@ -177,10 +158,7 @@ def make_h(self, return h_0 - def convolve_sub_batch(self, - batch, - xyz=None, - xyz_grad=False): + def convolve_sub_batch(self, batch, xyz=None, xyz_grad=False): """ Apply the convolution layers to a sub-batch. Args: @@ -206,34 +184,24 @@ def convolve_sub_batch(self, # offsets for periodic boundary conditions offsets = batch.get("offsets", 0) # to deal with any shape mismatches - if hasattr(offsets, 'max') and offsets.max() == 0: + if hasattr(offsets, "max") and offsets.max() == 0: offsets = 0 # initialize hidden bond features - h_0 = self.make_h(batch=batch, - r=r, - xyz=xyz, - offsets=offsets) + h_0 = self.make_h(batch=batch, r=r, xyz=xyz, offsets=offsets) h_new = h_0.clone() # update edge features for conv in self.convolutions: - h_new = conv(h_0=h_0, - h_new=h_new, - nbrs=a, - kj_idx=batch.get("kj_idx"), - ji_idx=batch.get("ji_idx")) + h_new = conv(h_0=h_0, h_new=h_new, nbrs=a, kj_idx=batch.get("kj_idx"), ji_idx=batch.get("ji_idx")) # convert back to node features - new_node_feats = self.W_o(r=r, - h=h_new, - nbrs=a) + new_node_feats = self.W_o(r=r, h=h_new, nbrs=a) return new_node_feats, xyz class OnlyBondUpdateCP3D(ChemProp3D): - def __init__(self, modelparams): """ Initialize model. @@ -253,8 +221,7 @@ def __init__(self, modelparams): self.W_i = ChemPropInit(input_layers=input_layers) self.convolutions = self.make_convs(modelparams) - self.W_o = ChemPropMsgToNode( - output_layers=output_layers) + self.W_o = ChemPropMsgToNode(output_layers=output_layers) # dimension of the hidden bond vector self.n_bond_hidden = modelparams["n_bond_hidden"] @@ -272,8 +239,7 @@ def make_convs(self, modelparams): same_filters = modelparams["same_filters"] # call `CpSchNetConv` to make the convolution layers - convs = nn.ModuleList([CpSchNetConv(**modelparams) - for _ in range(num_conv)]) + convs = nn.ModuleList([CpSchNetConv(**modelparams) for _ in range(num_conv)]) # if you want to use the same filters for every convolution, repeat # the initial network and delete all the others @@ -282,11 +248,7 @@ def make_convs(self, modelparams): return convs - def make_h(self, - batch, - nbr_list, - r, - nbr_was_directed): + def make_h(self, batch, nbr_list, r, nbr_was_directed): """ Initialize the hidden bond features. Args: @@ -315,9 +277,7 @@ def make_h(self, # initialize hidden bond features - h_0_bond = self.W_i(r=r, - bond_feats=bond_feats, - bond_nbrs=bond_nbrs) + h_0_bond = self.W_i(r=r, bond_feats=bond_feats, bond_nbrs=bond_nbrs) # initialize `h_0`, the features of all edges # (including bonded ones), to zero @@ -333,8 +293,7 @@ def make_h(self, bond_idx = batch["bond_idx"] if not nbr_was_directed: nbr_dim = nbr_list.shape[0] - bond_idx = torch.cat([bond_idx, - bond_idx + nbr_dim // 2]) + bond_idx = torch.cat([bond_idx, bond_idx + nbr_dim // 2]) else: bond_idx = get_bond_idx(bond_nbrs, nbr_list) bond_idx = bond_idx.to(device) @@ -343,10 +302,7 @@ def make_h(self, return h_0, bond_nbrs, bond_idx - def convolve_sub_batch(self, - batch, - xyz=None, - xyz_grad=False): + def convolve_sub_batch(self, batch, xyz=None, xyz_grad=False): """ Apply the convolution layers to a sub-batch. Args: @@ -374,41 +330,28 @@ def convolve_sub_batch(self, offsets = 0 # get the distances between neighbors - e = (xyz[a[:, 0]] - xyz[a[:, 1]] - - offsets).pow(2).sum(1).sqrt()[:, None] + e = (xyz[a[:, 0]] - xyz[a[:, 1]] - offsets).pow(2).sum(1).sqrt()[:, None] # initialize hidden bond features - h_0, bond_nbrs, bond_idx = self.make_h( - batch=batch, - nbr_list=a, - r=r, - nbr_was_directed=nbr_was_directed) + h_0, bond_nbrs, bond_idx = self.make_h(batch=batch, nbr_list=a, r=r, nbr_was_directed=nbr_was_directed) h_new = h_0.clone() # update edge features for conv in self.convolutions: - # don't use any kj_idx or ji_idx # because they are only relevant when # you're doing updates with all neighbors, # not with just the bonded neighbors like # we do here - h_new = conv(h_0=h_0, - h_new=h_new, - all_nbrs=a, - bond_nbrs=bond_nbrs, - bond_idx=bond_idx, - e=e, - kj_idx=None, - ji_idx=None) + h_new = conv( + h_0=h_0, h_new=h_new, all_nbrs=a, bond_nbrs=bond_nbrs, bond_idx=bond_idx, e=e, kj_idx=None, ji_idx=None + ) # convert back to node features - new_node_feats = self.W_o(r=r, - h=h_new, - nbrs=a) + new_node_feats = self.W_o(r=r, h=h_new, nbrs=a) return new_node_feats, xyz diff --git a/nff/nn/models/dispersion_models.py b/nff/nn/models/dispersion_models.py index 2989f51a..9db3c00c 100644 --- a/nff/nn/models/dispersion_models.py +++ b/nff/nn/models/dispersion_models.py @@ -15,10 +15,7 @@ class PainnDispersion(nn.Module): - - def __init__(self, - modelparams, - painn_model=None): + def __init__(self, modelparams, painn_model=None): """ `modelparams` has the same keys as in a regular PaiNN model, plus the required keys "functional" and "disp_type" for the added dispersion. @@ -38,44 +35,32 @@ def __init__(self, else: self.painn_model = Painn(modelparams=modelparams) - def get_dispersion(self, - batch, - xyz): - - e_disp, r_ij_T, nbrs_T = base_dispersion(batch=batch, - xyz=xyz, - disp_type=self.disp_type, - functional=self.functional, - nbrs=batch.get('mol_nbrs'), - mol_idx=batch.get('mol_idx')) + def get_dispersion(self, batch, xyz): + e_disp, r_ij_T, nbrs_T = base_dispersion( + batch=batch, + xyz=xyz, + disp_type=self.disp_type, + functional=self.functional, + nbrs=batch.get("mol_nbrs"), + mol_idx=batch.get("mol_idx"), + ) # convert to kcal / mol e_disp = e_disp * const.HARTREE_TO_KCAL_MOL return e_disp, r_ij_T, nbrs_T - def get_grimme_dispersion(self, - batch, - xyz): - + def get_grimme_dispersion(self, batch, xyz): # all units are output in ASE units (eV and Angs) - e_disp, stress_disp, forces_disp = grimme_dispersion(batch=batch, - xyz=xyz, - disp_type=self.disp_type, - functional=self.functional) + e_disp, stress_disp, forces_disp = grimme_dispersion( + batch=batch, xyz=xyz, disp_type=self.disp_type, functional=self.functional + ) return e_disp, stress_disp, forces_disp - def run(self, - batch, - xyz=None, - requires_stress=False, - grimme_disp=False, - inference=False): - + def run(self, batch, xyz=None, requires_stress=False, grimme_disp=False, inference=False): # Normal painn stuff, part 1 - atomwise_out, xyz, r_ij, nbrs = self.painn_model.atomwise(batch=batch, - xyz=xyz) + atomwise_out, xyz, r_ij, nbrs = self.painn_model.atomwise(batch=batch, xyz=xyz) if getattr(self.painn_model, "excl_vol", None): # Excluded Volume interactions @@ -83,18 +68,12 @@ def run(self, for key in self.output_keys: atomwise_out[key] += r_ex - all_results, xyz = self.painn_model.pool(batch=batch, - atomwise_out=atomwise_out, - xyz=xyz, - r_ij=r_ij, - nbrs=nbrs, - inference=inference) + all_results, xyz = self.painn_model.pool( + batch=batch, atomwise_out=atomwise_out, xyz=xyz, r_ij=r_ij, nbrs=nbrs, inference=inference + ) if requires_stress: - all_results = add_stress(batch=batch, - all_results=all_results, - nbrs=nbrs, - r_ij=r_ij) + all_results = add_stress(batch=batch, all_results=all_results, nbrs=nbrs, r_ij=r_ij) # add dispersion and gradients associated with it @@ -104,8 +83,7 @@ def run(self, if grimme_disp: pass else: - e_disp, r_ij_T, nbrs_T = self.get_dispersion(batch=batch, - xyz=xyz) + e_disp, r_ij_T, nbrs_T = self.get_dispersion(batch=batch, xyz=xyz) for key in self.painn_model.pool_dic.keys(): # add dispersion energy @@ -118,8 +96,7 @@ def run(self, grad_key = "%s_grad" % key if grad_key in self.painn_model.grad_keys: if disp_grad is None: - disp_grad = compute_grad(inputs=xyz, - output=e_disp) + disp_grad = compute_grad(inputs=xyz, output=e_disp) if inference: disp_grad = disp_grad.detach().cpu() @@ -132,25 +109,22 @@ def run(self, if requires_stress and not grimme_disp: # add gradient for stress - disp_rij_grad = compute_grad(inputs=r_ij_T, - output=e_disp) + disp_rij_grad = compute_grad(inputs=r_ij_T, output=e_disp) - if batch['num_atoms'].shape[0] == 1: + if batch["num_atoms"].shape[0] == 1: disp_stress_volume = torch.matmul(disp_rij_grad.t(), r_ij_T) else: allstress = [] - for j in range(batch['nxyz'].shape[0]): + for j in range(batch["nxyz"].shape[0]): allstress.append( torch.matmul( - disp_rij_grad[torch.where(nbrs_T[:, 0] == j)].t(), - r_ij_T[torch.where(nbrs_T[:, 0] == j)] + disp_rij_grad[torch.where(nbrs_T[:, 0] == j)].t(), r_ij_T[torch.where(nbrs_T[:, 0] == j)] ) ) allstress = torch.stack(allstress) N = batch["num_atoms"].detach().cpu().tolist() split_val = torch.split(allstress, N) - disp_stress_volume = torch.stack([i.sum(0) - for i in split_val]) + disp_stress_volume = torch.stack([i.sum(0) for i in split_val]) if inference: disp_stress_volume = disp_stress_volume.detach().cpu() @@ -158,18 +132,16 @@ def run(self, if disp_stress_volume.isnan().any() and fallback_to_grimme: grimme_disp = True else: - all_results['stress_volume'] = all_results['stress_volume'] + \ - disp_stress_volume + all_results["stress_volume"] = all_results["stress_volume"] + disp_stress_volume # if there was numerical instability with disp_grad pytorch # re-calculate everything with Grimme dispersion instead # requires dftd3 executable if grimme_disp: - e_disp, stress_disp, forces_disp = self.get_grimme_dispersion(batch=batch, - xyz=xyz) - all_results['e_disp'] = e_disp - all_results['stress_disp'] = stress_disp - all_results['forces_disp'] = forces_disp + e_disp, stress_disp, forces_disp = self.get_grimme_dispersion(batch=batch, xyz=xyz) + all_results["e_disp"] = e_disp + all_results["stress_disp"] = stress_disp + all_results["forces_disp"] = forces_disp # Normal painn stuff, part 2 @@ -178,13 +150,7 @@ def run(self, return all_results, xyz - def forward(self, - batch, - xyz=None, - requires_stress=False, - grimme_disp=False, - inference=False, - **kwargs): + def forward(self, batch, xyz=None, requires_stress=False, grimme_disp=False, inference=False, **kwargs): """ Call the model Args: @@ -193,11 +159,9 @@ def forward(self, results (dict): dictionary of predictions """ - results, _ = self.run(batch=batch, - xyz=xyz, - requires_stress=requires_stress, - grimme_disp=grimme_disp, - inference=inference) + results, _ = self.run( + batch=batch, xyz=xyz, requires_stress=requires_stress, grimme_disp=grimme_disp, inference=inference + ) return results @@ -208,39 +172,44 @@ def __init__(self, modelparams): self.functional = modelparams["functional"] self.disp_type = modelparams["disp_type"] - def forward(self, - batch, - xyz=None, - add_nacv=True, - add_grad=True, - add_gap=True, - add_u=False, - inference=False, - do_nan=True, - en_keys_for_grad=None): - + def forward( + self, + batch, + xyz=None, + add_nacv=True, + add_grad=True, + add_gap=True, + add_u=False, + inference=False, + do_nan=True, + en_keys_for_grad=None, + ): # get diabatic results - results = super().forward(batch=batch, - xyz=xyz, - add_nacv=add_nacv, - add_grad=add_grad, - add_gap=add_gap, - add_u=add_u, - inference=inference, - do_nan=do_nan, - en_keys_for_grad=en_keys_for_grad) + results = super().forward( + batch=batch, + xyz=xyz, + add_nacv=add_nacv, + add_grad=add_grad, + add_gap=add_gap, + add_u=add_u, + inference=inference, + do_nan=do_nan, + en_keys_for_grad=en_keys_for_grad, + ) xyz = results["xyz"] # get dispersion energy (I couldn't figure out how to sub-class # PainnDiabatDispersion with PainnDispersion without getting errors, # unless I put it before PainnDiabat, which isn't what I want. So # instead I just copied the logic for getting the disperson energy) - e_disp, _, _ = base_dispersion(batch=batch, - xyz=xyz, - disp_type=self.disp_type, - functional=self.functional, - nbrs=batch.get('mol_nbrs'), - mol_idx=batch.get('mol_idx')) + e_disp, _, _ = base_dispersion( + batch=batch, + xyz=xyz, + disp_type=self.disp_type, + functional=self.functional, + nbrs=batch.get("mol_nbrs"), + mol_idx=batch.get("mol_idx"), + ) # convert to kcal / mol e_disp = e_disp * const.HARTREE_TO_KCAL_MOL @@ -253,20 +222,17 @@ def forward(self, # "energy_1"], we won't have updated "energy_2" properly energy_keys = ["energy_%d" % i for i in range(len(diabat_keys))] - for key in (diagonal_diabat_keys + energy_keys): + for key in diagonal_diabat_keys + energy_keys: results[key] = results[key] + e_disp.reshape(results[key].shape) # add dispersion grads to diabatic diagonal gradients and # adiabatic gradients - disp_grad = compute_grad(inputs=xyz, - output=e_disp) + disp_grad = compute_grad(inputs=xyz, output=e_disp) - grad_keys = [key + "_grad" for key in - (diagonal_diabat_keys + energy_keys)] + grad_keys = [key + "_grad" for key in (diagonal_diabat_keys + energy_keys)] for key in grad_keys: if key in results: - results[key] = (results[key] + - disp_grad.reshape(results[key].shape)) + results[key] = results[key] + disp_grad.reshape(results[key].shape) return results diff --git a/nff/nn/models/graphconvintegration.py b/nff/nn/models/graphconvintegration.py index 4b99cf31..6ccc48dc 100644 --- a/nff/nn/models/graphconvintegration.py +++ b/nff/nn/models/graphconvintegration.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import copy import torch.nn.functional as F from nff.nn.layers import Dense, GaussianSmearing @@ -11,7 +10,6 @@ class GraphConvIntegration(nn.Module): - """SchNet with optional aggr_weight for thermodynamic intergration Attributes: @@ -37,27 +35,31 @@ def __init__(self, modelparams): super().__init__() - n_atom_basis = modelparams['n_atom_basis'] - n_filters = modelparams['n_filters'] - n_gaussians = modelparams['n_gaussians'] - n_convolutions = modelparams['n_convolutions'] - cutoff = modelparams['cutoff'] - trainable_gauss = modelparams.get('trainable_gauss', False) + n_atom_basis = modelparams["n_atom_basis"] + n_filters = modelparams["n_filters"] + n_gaussians = modelparams["n_gaussians"] + n_convolutions = modelparams["n_convolutions"] + cutoff = modelparams["cutoff"] + trainable_gauss = modelparams.get("trainable_gauss", False) # default predict var - readoutdict = modelparams.get('readoutdict', get_default_readout(n_atom_basis)) - post_readout = modelparams.get('post_readout', None) + readoutdict = modelparams.get("readoutdict", get_default_readout(n_atom_basis)) + post_readout = modelparams.get("post_readout", None) self.atom_embed = nn.Embedding(100, n_atom_basis, padding_idx=0) - self.convolutions = nn.ModuleList([ - SchNetConv(n_atom_basis=n_atom_basis, - n_filters=n_filters, - n_gaussians=n_gaussians, - cutoff=cutoff, - trainable_gauss=trainable_gauss) - for _ in range(n_convolutions) - ]) + self.convolutions = nn.ModuleList( + [ + SchNetConv( + n_atom_basis=n_atom_basis, + n_filters=n_filters, + n_gaussians=n_gaussians, + cutoff=cutoff, + trainable_gauss=trainable_gauss, + ) + for _ in range(n_convolutions) + ] + ) # ReadOut self.atomwisereadout = NodeMultiTaskReadOut(multitaskdict=readoutdict, post_readout=post_readout) @@ -72,14 +74,14 @@ def forward(self, batch, **kwargs): Returns: dict: dionary of results """ - r = batch['nxyz'][:, 0] - xyz = batch['nxyz'][:, 1:4] - N = batch['num_atoms'].reshape(-1).tolist() - a = batch['nbr_list'] - aggr_wgt = batch['aggr_wgt'] + r = batch["nxyz"][:, 0] + xyz = batch["nxyz"][:, 1:4] + N = batch["num_atoms"].reshape(-1).tolist() + a = batch["nbr_list"] + aggr_wgt = batch["aggr_wgt"] # offsets take care of periodic boundary conditions - offsets = batch.get('offsets', 0) + offsets = batch.get("offsets", 0) xyz.requires_grad = True diff --git a/nff/nn/models/hybridgraph.py b/nff/nn/models/hybridgraph.py index 553986cb..5e09ba19 100644 --- a/nff/nn/models/hybridgraph.py +++ b/nff/nn/models/hybridgraph.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import copy import torch.nn.functional as F from nff.nn.layers import Dense, GaussianSmearing @@ -13,47 +12,54 @@ class HybridGraphConv(nn.Module): - def __init__(self, modelparams): super().__init__() - n_atom_basis = modelparams['n_atom_basis'] - n_filters = modelparams['n_filters'] - n_gaussians = modelparams['n_gaussians'] - trainable_gauss = modelparams.get('trainable_gauss', False) - mol_n_convolutions = modelparams['mol_n_convolutions'] - mol_cutoff = modelparams['mol_cutoff'] - sys_n_convolutions = modelparams['sys_n_convolutions'] - sys_cutoff = modelparams['sys_cutoff'] + n_atom_basis = modelparams["n_atom_basis"] + n_filters = modelparams["n_filters"] + n_gaussians = modelparams["n_gaussians"] + trainable_gauss = modelparams.get("trainable_gauss", False) + mol_n_convolutions = modelparams["mol_n_convolutions"] + mol_cutoff = modelparams["mol_cutoff"] + sys_n_convolutions = modelparams["sys_n_convolutions"] + sys_cutoff = modelparams["sys_cutoff"] self.power = modelparams["V_ex_power"] self.sigma = torch.nn.Parameter(torch.Tensor([modelparams["V_ex_sigma"]])) # default predict var - readoutdict = modelparams.get('readoutdict', get_default_readout(n_atom_basis)) - post_readout = modelparams.get('post_readout', None) + readoutdict = modelparams.get("readoutdict", get_default_readout(n_atom_basis)) + post_readout = modelparams.get("post_readout", None) self.atom_embed = nn.Embedding(100, n_atom_basis, padding_idx=0) - self.molecule_convolutions = nn.ModuleList([ - SchNetConv(n_atom_basis=n_atom_basis, - n_filters=n_filters, - n_gaussians=n_gaussians, - cutoff=mol_cutoff, - trainable_gauss=trainable_gauss, - dropout_rate=0.0) - for _ in range(mol_n_convolutions) - ]) - - self.system_convolutions = nn.ModuleList([ - SchNetConv(n_atom_basis=n_atom_basis, - n_filters=n_filters, - n_gaussians=n_gaussians, - cutoff=sys_cutoff, - trainable_gauss=trainable_gauss, - dropout_rate=0.0) - for _ in range(sys_n_convolutions) - ]) + self.molecule_convolutions = nn.ModuleList( + [ + SchNetConv( + n_atom_basis=n_atom_basis, + n_filters=n_filters, + n_gaussians=n_gaussians, + cutoff=mol_cutoff, + trainable_gauss=trainable_gauss, + dropout_rate=0.0, + ) + for _ in range(mol_n_convolutions) + ] + ) + + self.system_convolutions = nn.ModuleList( + [ + SchNetConv( + n_atom_basis=n_atom_basis, + n_filters=n_filters, + n_gaussians=n_gaussians, + cutoff=sys_cutoff, + trainable_gauss=trainable_gauss, + dropout_rate=0.0, + ) + for _ in range(sys_n_convolutions) + ] + ) # ReadOut self.atomwisereadout = NodeMultiTaskReadOut(multitaskdict=readoutdict, post_readout=post_readout) @@ -70,18 +76,18 @@ def SeqConv(self, node, xyz, nbr_list, conv_module, pbc_offsets=None): def V_ex(self, xyz, nbr_list, pbc_offsets): dist = (xyz[nbr_list[:, 1]] - xyz[nbr_list[:, 0]] + pbc_offsets).pow(2).sum(1).sqrt() - potential = ((dist.reciprocal() * self.sigma).pow(self.power)) + potential = (dist.reciprocal() * self.sigma).pow(self.power) return scatter_add(potential, nbr_list[:, 0], dim_size=xyz.shape[0])[:, None] def forward(self, batch, **kwargs): - r = batch['nxyz'][:, 0] - xyz = batch['nxyz'][:, 1:4] - N = batch['num_atoms'].reshape(-1).tolist() - a_mol = batch['atoms_nbr_list'] - a_sys = batch['nbr_list'] + r = batch["nxyz"][:, 0] + xyz = batch["nxyz"][:, 1:4] + N = batch["num_atoms"].reshape(-1).tolist() + a_mol = batch["atoms_nbr_list"] + a_sys = batch["nbr_list"] # offsets take care of periodic boundary conditions - offsets = batch.get('offsets', 0) # offsets only affect nbr_list + offsets = batch.get("offsets", 0) # offsets only affect nbr_list xyz.requires_grad = True node_input = self.atom_embed(r.long()).squeeze() diff --git a/nff/nn/models/mace.py b/nff/nn/models/mace.py index 319d4ad1..1b0966fe 100644 --- a/nff/nn/models/mace.py +++ b/nff/nn/models/mace.py @@ -138,9 +138,9 @@ def convert_batch_to_data(self, batch: dict) -> torch_geometric.data.Data: numbers = props.get("nxyz")[node_idx, 0].long().detach().cpu().numpy() if "cell" in props.keys(): - cell = props["cell"][3 * i: 3 * i + 3].detach().cpu().numpy() + cell = props["cell"][3 * i : 3 * i + 3].detach().cpu().numpy() elif "lattice" in props.keys(): - cell = props["lattice"][3 * i: 3 * i + 3].detach().cpu().numpy() + cell = props["lattice"][3 * i : 3 * i + 3].detach().cpu().numpy() else: raise ValueError("No cell or lattice found in batch") config = Configuration( diff --git a/nff/nn/models/painn.py b/nff/nn/models/painn.py index 814e912d..9df17733 100644 --- a/nff/nn/models/painn.py +++ b/nff/nn/models/painn.py @@ -28,7 +28,6 @@ from nff.utils.scatter import scatter_add, compute_grad import torch -import pdb POOL_DIC = { "sum": SumPool, @@ -84,19 +83,12 @@ def __init__(self, modelparams): ] ) self.update_blocks = nn.ModuleList( - [ - UpdateBlock( - feat_dim=feat_dim, activation=activation, dropout=conv_dropout - ) - for _ in range(num_conv) - ] + [UpdateBlock(feat_dim=feat_dim, activation=activation, dropout=conv_dropout) for _ in range(num_conv)] ) self.output_keys = output_keys # no skip connection in original paper - self.skip = modelparams.get( - "skip_connection", {key: False for key in self.output_keys} - ) + self.skip = modelparams.get("skip_connection", {key: False for key in self.output_keys}) self.num_readouts = num_conv if any(self.skip.values()) else 1 self.readout_blocks = nn.ModuleList( @@ -159,9 +151,7 @@ def atomwise(self, batch, xyz=None): for i, message_block in enumerate(self.message_blocks): update_block = self.update_blocks[i] - ds_message, dv_message = message_block( - s_j=s_i, v_j=v_i, r_ij=r_ij, nbrs=nbrs - ) + ds_message, dv_message = message_block(s_j=s_i, v_j=v_i, r_ij=r_ij, nbrs=nbrs) s_i = s_i + ds_message v_i = v_i + dv_message @@ -249,9 +239,7 @@ def add_delta(self, all_results): grad_keys = [e_i + "_grad", e_j + "_grad"] delta_grad_key = "_".join(grad_keys) + "_delta" if all([grad_key in all_results for grad_key in grad_keys]): - all_results[delta_grad_key] = ( - all_results[grad_keys[0]] - all_results[grad_keys[1]] - ) + all_results[delta_grad_key] = all_results[grad_keys[0]] - all_results[grad_keys[1]] return all_results def V_ex(self, r_ij, nbr_list, xyz): @@ -286,14 +274,10 @@ def run( ) if requires_embedding: - all_results = add_embedding( - atomwise_out=atomwise_out, all_results=all_results - ) + all_results = add_embedding(atomwise_out=atomwise_out, all_results=all_results) if requires_stress: - all_results = add_stress( - batch=batch, all_results=all_results, nbrs=nbrs, r_ij=r_ij - ) + all_results = add_stress(batch=batch, all_results=all_results, nbrs=nbrs, r_ij=r_ij) if getattr(self, "compute_delta", False): all_results = self.add_delta(all_results) @@ -359,13 +343,9 @@ def __init__(self, modelparams): ) if same_message_blocks: - self.message_blocks = nn.ModuleList( - [self.message_blocks[0]] * len(self.message_blocks) - ) + self.message_blocks = nn.ModuleList([self.message_blocks[0]] * len(self.message_blocks)) - self.embed_block = NbrEmbeddingBlock( - feat_dim=feat_dim, dropout=conv_dropout, rbf=rbf - ) + self.embed_block = NbrEmbeddingBlock(feat_dim=feat_dim, dropout=conv_dropout, rbf=rbf) class PainnDiabat(Painn): @@ -521,17 +501,10 @@ def forward(self, *args, **kwargs): combined_results = {} for key in common_keys: - pool_dics = [ - self.get_model_attr(model, "pool_dic") for model in self.models - ] + pool_dics = [self.get_model_attr(model, "pool_dic") for model in self.models] in_pool = all([key in dic for dic in pool_dics]) - in_grad = all( - [ - key in self.get_model_attr(model, "grad_keys") - for model in self.models - ] - ) + in_grad = all([key in self.get_model_attr(model, "grad_keys") for model in self.models]) common = in_pool or in_grad @@ -565,9 +538,7 @@ def __init__(self, modelparams): self.output_vec_keys = output_vec_keys # no skip connection in original paper - self.skip_vec = modelparams.get( - "skip_vec_connection", {key: False for key in self.output_vec_keys} - ) + self.skip_vec = modelparams.get("skip_vec_connection", {key: False for key in self.output_vec_keys}) num_vec_readouts = modelparams["num_conv"] if any(self.skip.values()) else 1 self.readout_vec_blocks = nn.ModuleList( @@ -608,9 +579,7 @@ def atomwise(self, batch, xyz=None): for i, message_block in enumerate(self.message_blocks): update_block = self.update_blocks[i] - ds_message, dv_message = message_block( - s_j=s_i, v_j=v_i, r_ij=r_ij, nbrs=nbrs - ) + ds_message, dv_message = message_block(s_j=s_i, v_j=v_i, r_ij=r_ij, nbrs=nbrs) s_i = s_i + ds_message v_i = v_i + dv_message @@ -662,8 +631,7 @@ def atomwise(self, batch, xyz=None): class Painn_VecOut2(Painn_VecOut): # unlike Painn_VecOut this uses 2 equivariant blocks for each output - def __init__(self, - modelparams): + def __init__(self, modelparams): """ Args: modelparams (dict): dictionary of model parameters @@ -681,20 +649,21 @@ def __init__(self, self.output_vec_keys = output_vec_keys # no skip connection in original paper - self.skip_vec = modelparams.get("skip_vec_connection", - {key: False for key - in self.output_vec_keys}) + self.skip_vec = modelparams.get("skip_vec_connection", {key: False for key in self.output_vec_keys}) - num_vec_readouts = (modelparams["num_conv"] if any(self.skip.values()) - else 1) + num_vec_readouts = modelparams["num_conv"] if any(self.skip.values()) else 1 self.readout_vec_blocks = nn.ModuleList( - [ReadoutBlock_Vec2(feat_dim=feat_dim, - output_keys=output_vec_keys, - activation=activation, - dropout=readout_dropout, - means=means, - stddevs=stddevs) - for _ in range(num_vec_readouts)] + [ + ReadoutBlock_Vec2( + feat_dim=feat_dim, + output_keys=output_vec_keys, + activation=activation, + dropout=readout_dropout, + means=means, + stddevs=stddevs, + ) + for _ in range(num_vec_readouts) + ] ) @@ -702,8 +671,7 @@ class Painn_NAC_OuterProd(Painn_VecOut2): # This model attempts to learn non-adiabatic coupling vectors # as suggested by Jeremy Richardson, as eigenvector # of an outer product matrix - def __init__(self, - modelparams): + def __init__(self, modelparams): """ Args: modelparams (dict): dictionary of model parameters @@ -712,22 +680,16 @@ def __init__(self, super().__init__(modelparams) - def get_nac(self, - all_results, - batch, - xyz): - + def get_nac(self, all_results, batch, xyz): N = batch["num_atoms"].detach().cpu().tolist() xyz_s = torch.split(xyz, N) for key in self.output_vec_keys: - mats = [] nacs = [] nu_s = torch.split(all_results[key], N) for nu, r in zip(nu_s, xyz_s): - mat = (torch.outer(r.reshape(-1), nu.reshape(-1)) - + torch.outer(nu.reshape(-1), r.reshape(-1))) + mat = torch.outer(r.reshape(-1), nu.reshape(-1)) + torch.outer(nu.reshape(-1), r.reshape(-1)) mats.append(mat) eigvals, eigvecs = torch.linalg.eigh(mat) @@ -744,17 +706,10 @@ def get_nac(self, return all_results, xyz - def run(self, - batch, - xyz=None, - requires_embedding=False, - requires_stress=False, - inference=False): - + def run(self, batch, xyz=None, requires_embedding=False, requires_stress=False, inference=False): from nff.train import batch_detach - atomwise_out, xyz, r_ij, nbrs = self.atomwise(batch=batch, - xyz=xyz) + atomwise_out, xyz, r_ij, nbrs = self.atomwise(batch=batch, xyz=xyz) if getattr(self, "excl_vol", None): # Excluded Volume interactions @@ -762,26 +717,17 @@ def run(self, for key in self.output_keys: atomwise_out[key] += r_ex - pooled_results, xyz = self.pool(batch=batch, - atomwise_out=atomwise_out, - xyz=xyz, - r_ij=r_ij, - nbrs=nbrs, - inference=False) + pooled_results, xyz = self.pool( + batch=batch, atomwise_out=atomwise_out, xyz=xyz, r_ij=r_ij, nbrs=nbrs, inference=False + ) - all_results, xyz = self.get_nac(all_results=pooled_results, - batch=batch, - xyz=xyz) + all_results, xyz = self.get_nac(all_results=pooled_results, batch=batch, xyz=xyz) if requires_embedding: - all_results = add_embedding(atomwise_out=atomwise_out, - all_results=all_results) + all_results = add_embedding(atomwise_out=atomwise_out, all_results=all_results) if requires_stress: - all_results = add_stress(batch=batch, - all_results=all_results, - nbrs=nbrs, - r_ij=r_ij) + all_results = add_stress(batch=batch, all_results=all_results, nbrs=nbrs, r_ij=r_ij) if getattr(self, "compute_delta", False): all_results = self.add_delta(all_results) @@ -793,9 +739,7 @@ def run(self, class Painn_Complex(Painn): - - def __init__(self, - modelparams): + def __init__(self, modelparams): """ Args: modelparams (dict): dictionary of model parameters @@ -811,27 +755,26 @@ def __init__(self, activation = modelparams["activation"] readout_dropout = modelparams.get("readout_dropout", 0) - num_cmplx_readouts = (modelparams["num_conv"] if any(self.skip.values()) - else 1) + num_cmplx_readouts = modelparams["num_conv"] if any(self.skip.values()) else 1 self.readout_cmplx_blocks = nn.ModuleList( - [ReadoutBlock_Complex(feat_dim=feat_dim, - output_keys=self.output_cmplx_keys, - activation=activation, - dropout=readout_dropout) - for _ in range(num_cmplx_readouts)] + [ + ReadoutBlock_Complex( + feat_dim=feat_dim, + output_keys=self.output_cmplx_keys, + activation=activation, + dropout=readout_dropout, + ) + for _ in range(num_cmplx_readouts) + ] ) - def atomwise(self, - batch, - xyz=None): - + def atomwise(self, batch, xyz=None): # for backwards compatability if isinstance(self.skip, bool): - self.skip = {key: self.skip - for key in self.output_keys} + self.skip = {key: self.skip for key in self.output_keys} - nbrs, _ = make_directed(batch['nbr_list']) - nxyz = batch['nxyz'] + nbrs, _ = make_directed(batch["nbr_list"]) + nxyz = batch["nxyz"] if xyz is None: xyz = nxyz[:, 1:] @@ -842,28 +785,19 @@ def atomwise(self, # get r_ij including offsets and excluding # anything in the neighbor skin self.set_cutoff() - r_ij, nbrs = get_rij(xyz=xyz, - batch=batch, - nbrs=nbrs, - cutoff=self.cutoff) - - s_i, v_i = self.embed_block(z_numbers, - nbrs=nbrs, - r_ij=r_ij) + r_ij, nbrs = get_rij(xyz=xyz, batch=batch, nbrs=nbrs, cutoff=self.cutoff) + + s_i, v_i = self.embed_block(z_numbers, nbrs=nbrs, r_ij=r_ij) results = {} for i, message_block in enumerate(self.message_blocks): update_block = self.update_blocks[i] - ds_message, dv_message = message_block(s_j=s_i, - v_j=v_i, - r_ij=r_ij, - nbrs=nbrs) + ds_message, dv_message = message_block(s_j=s_i, v_j=v_i, r_ij=r_ij, nbrs=nbrs) s_i = s_i + ds_message v_i = v_i + dv_message - ds_update, dv_update = update_block(s_i=s_i, - v_i=v_i) + ds_update, dv_update = update_block(s_i=s_i, v_i=v_i) s_i = s_i + ds_update v_i = v_i + dv_update @@ -902,8 +836,8 @@ def atomwise(self, if not skip: results[key] = new_cmplx_results[key] - results['features'] = s_i - results['features_vec'] = v_i + results["features"] = s_i + results["features_vec"] = v_i return results, xyz, r_ij, nbrs @@ -927,13 +861,9 @@ def __init__(self, modelparams): readout_dropout = modelparams.get("readout_dropout", 0) # no skip connection in original paper - self.skip_tuple = modelparams.get( - "skip_tuple_connection", {key: False for key in self.output_tuple_keys} - ) + self.skip_tuple = modelparams.get("skip_tuple_connection", {key: False for key in self.output_tuple_keys}) - num_tuple_readouts = ( - modelparams["num_conv"] if any(self.skip_tuple.values()) else 1 - ) + num_tuple_readouts = modelparams["num_conv"] if any(self.skip_tuple.values()) else 1 self.readout_tuple_blocks = nn.ModuleList( [ ReadoutBlock_Tuple( @@ -974,9 +904,7 @@ def atomwise(self, batch, xyz=None): for i, message_block in enumerate(self.message_blocks): update_block = self.update_blocks[i] - ds_message, dv_message = message_block( - s_j=s_i, v_j=v_i, r_ij=r_ij, nbrs=nbrs - ) + ds_message, dv_message = message_block(s_j=s_i, v_j=v_i, r_ij=r_ij, nbrs=nbrs) s_i = s_i + ds_message v_i = v_i + dv_message @@ -1060,13 +988,9 @@ def __init__(self, modelparams): readout_dropout = modelparams.get("readout_dropout", 0) # no skip connection in original paper - self.skip_tuple = modelparams.get( - "skip_tuple_connection", {key: False for key in self.output_tuple_keys} - ) + self.skip_tuple = modelparams.get("skip_tuple_connection", {key: False for key in self.output_tuple_keys}) - num_tuple_readouts = ( - modelparams["num_conv"] if any(self.skip_tuple.values()) else 1 - ) + num_tuple_readouts = modelparams["num_conv"] if any(self.skip_tuple.values()) else 1 # overwrite what has been done before self.readout_tuple_blocks = nn.ModuleList( [ @@ -1102,15 +1026,11 @@ def adibatic_energies( omega = all_results[wCP_keys[0]] batch_size = len(omega) - C_mat0 = torch.zeros( - batch_size, num_states, num_states, device=omega.device - ) + C_mat0 = torch.zeros(batch_size, num_states, num_states, device=omega.device) for mat in C_mat0: mat.fill_diagonal_(1) - C_mat = C_mat0 * omega.reshape(-1, 1, 1) + torch.diag( - torch.ones(num_states - 1), -1 - ).to(omega.device) + C_mat = C_mat0 * omega.reshape(-1, 1, 1) + torch.diag(torch.ones(num_states - 1), -1).to(omega.device) for idx, coef in enumerate(wCP_keys[1:]): C_mat[:, idx, -1] = -all_results[coef] @@ -1158,19 +1078,13 @@ def run( inference=False, ) - all_results, xyz = self.adibatic_energies( - all_results=intermediate_results, xyz=xyz - ) + all_results, xyz = self.adibatic_energies(all_results=intermediate_results, xyz=xyz) if requires_embedding: - all_results = add_embedding( - atomwise_out=atomwise_out, all_results=all_results - ) + all_results = add_embedding(atomwise_out=atomwise_out, all_results=all_results) if requires_stress: - all_results = add_stress( - batch=batch, all_results=all_results, nbrs=nbrs, r_ij=r_ij - ) + all_results = add_stress(batch=batch, all_results=all_results, nbrs=nbrs, r_ij=r_ij) if getattr(self, "compute_delta", False): all_results = self.add_delta(all_results) @@ -1384,9 +1298,7 @@ def forward( continue val = results[key] split_vals = torch.split(val, batch["num_atoms"].tolist()) - final_vals = torch.stack( - [split_val.sum(0).reshape(3) for split_val in split_vals] - ) + final_vals = torch.stack([split_val.sum(0).reshape(3) for split_val in split_vals]) results[key] = final_vals return results diff --git a/nff/nn/models/schnet.py b/nff/nn/models/schnet.py index 2ab6334d..01861f1e 100644 --- a/nff/nn/models/schnet.py +++ b/nff/nn/models/schnet.py @@ -1,12 +1,7 @@ from torch import nn from nff.nn.layers import DEFAULT_DROPOUT_RATE -from nff.nn.modules import ( - SchNetConv, - NodeMultiTaskReadOut, - get_rij, - add_stress -) +from nff.nn.modules import SchNetConv, NodeMultiTaskReadOut, get_rij, add_stress from nff.nn.modules.diabat import DiabaticReadout @@ -17,7 +12,6 @@ class SchNet(nn.Module): - """SchNet implementation with continous filter. Attributes: @@ -87,8 +81,7 @@ def __init__(self, modelparams): self.atom_embed = nn.Embedding(100, n_atom_basis, padding_idx=0) - readoutdict = modelparams.get( - "readoutdict", get_default_readout(n_atom_basis)) + readoutdict = modelparams.get("readoutdict", get_default_readout(n_atom_basis)) post_readout = modelparams.get("post_readout", None) # convolutions @@ -107,22 +100,17 @@ def __init__(self, modelparams): ) # ReadOut - self.atomwisereadout = NodeMultiTaskReadOut( - multitaskdict=readoutdict, post_readout=post_readout - ) + self.atomwisereadout = NodeMultiTaskReadOut(multitaskdict=readoutdict, post_readout=post_readout) self.device = None self.cutoff = cutoff def set_cutoff(self): if hasattr(self, "cutoff"): return - gauss_centers = (self.convolutions[0].moduledict - ['message_edge_filter'][0].offsets) + gauss_centers = self.convolutions[0].moduledict["message_edge_filter"][0].offsets self.cutoff = gauss_centers[-1] - gauss_centers[0] - def convolve(self, - batch, - xyz=None): + def convolve(self, batch, xyz=None): """ Apply the convolutional layers to the batch. @@ -152,10 +140,7 @@ def convolve(self, # get r_ij including offsets and excluding # anything in the neighbor skin self.set_cutoff() - r_ij, a = get_rij(xyz=xyz, - batch=batch, - nbrs=a, - cutoff=self.cutoff) + r_ij, a = get_rij(xyz=xyz, batch=batch, nbrs=a, cutoff=self.cutoff) dist = r_ij.pow(2).sum(1).sqrt() e = dist[:, None] @@ -169,17 +154,12 @@ def convolve(self, return r, N, xyz, r_ij, a def V_ex(self, r_ij, nbr_list, xyz): - dist = (r_ij).pow(2).sum(1).sqrt() - potential = ((dist.reciprocal() * self.sigma).pow(self.power)) + potential = (dist.reciprocal() * self.sigma).pow(self.power) return scatter_add(potential, nbr_list[:, 0], dim_size=xyz.shape[0])[:, None] - def forward(self, - batch, - xyz=None, - requires_stress=False, - **kwargs): + def forward(self, batch, xyz=None, requires_stress=False, **kwargs): """Summary Args: batch (dict): dictionary of props @@ -196,47 +176,47 @@ def forward(self, if getattr(self, "excl_vol", None): # Excluded Volume interactions r_ex = self.V_ex(r_ij, a, xyz) - r['energy'] += r_ex + r["energy"] += r_ex results = batch_and_sum(r, N, list(batch.keys()), xyz) if requires_stress: - results = add_stress(batch=batch, - all_results=results, - nbrs=a, - r_ij=r_ij) + results = add_stress(batch=batch, all_results=results, nbrs=a, r_ij=r_ij) return results class SchNetDiabat(SchNet): def __init__(self, modelparams): - super().__init__(modelparams) self.diabatic_readout = DiabaticReadout( diabat_keys=modelparams["diabat_keys"], grad_keys=modelparams["grad_keys"], - energy_keys=modelparams["output_keys"]) - - def forward(self, - batch, - xyz=None, - add_nacv=False, - add_grad=True, - add_gap=True, - extra_grads=None, - try_speedup=False, - **kwargs): + energy_keys=modelparams["output_keys"], + ) + def forward( + self, + batch, + xyz=None, + add_nacv=False, + add_grad=True, + add_gap=True, + extra_grads=None, + try_speedup=False, + **kwargs, + ): r, N, xyz = self.convolve(batch, xyz) output = self.atomwisereadout(r) - results = self.diabatic_readout(batch=batch, - output=output, - xyz=xyz, - add_nacv=add_nacv, - add_grad=add_grad, - add_gap=add_gap, - extra_grads=extra_grads, - try_speedup=try_speedup) + results = self.diabatic_readout( + batch=batch, + output=output, + xyz=xyz, + add_nacv=add_nacv, + add_grad=add_grad, + add_gap=add_gap, + extra_grads=extra_grads, + try_speedup=try_speedup, + ) return results diff --git a/nff/nn/models/schnet_features.py b/nff/nn/models/schnet_features.py index d8fe6165..8bf70a5a 100644 --- a/nff/nn/models/schnet_features.py +++ b/nff/nn/models/schnet_features.py @@ -52,7 +52,7 @@ def __init__(self, modelparams): n_filters=n_filters, dropout_rate=dropout_rate, n_bond_hidden=n_bond_hidden, - activation=activation + activation=activation, ) for _ in range(n_convolutions) ] @@ -66,35 +66,23 @@ def __init__(self, modelparams): trainable_gauss=trainable_gauss, n_filters=n_filters, dropout_rate=dropout_rate, - activation=activation) + activation=activation, + ) # for converting bond features to hidden feature vectors self.bond_filter = Sequential( - Dense( - in_features=n_bond_features, - out_features=n_bond_hidden, - dropout_rate=dropout_rate), + Dense(in_features=n_bond_features, out_features=n_bond_hidden, dropout_rate=dropout_rate), layer_types[activation](), - Dense( - in_features=n_bond_hidden, - out_features=n_bond_hidden, - dropout_rate=dropout_rate) + Dense(in_features=n_bond_hidden, out_features=n_bond_hidden, dropout_rate=dropout_rate), ) self.atom_filter = Sequential( - Dense( - in_features=n_atom_basis, - out_features=n_atom_hidden, - dropout_rate=dropout_rate), + Dense(in_features=n_atom_basis, out_features=n_atom_hidden, dropout_rate=dropout_rate), layer_types[activation](), - Dense( - in_features=n_atom_hidden, - out_features=n_atom_hidden, - dropout_rate=dropout_rate) + Dense(in_features=n_atom_hidden, out_features=n_atom_hidden, dropout_rate=dropout_rate), ) - def find_bond_idx(self, - batch): + def find_bond_idx(self, batch): """ Get `bond_idx`, which map bond indices to indices in the neighbor list. @@ -110,19 +98,14 @@ def find_bond_idx(self, bond_idx = batch["bond_idx"] if not was_directed: nbr_dim = nbr_list.shape[0] - bond_idx = torch.cat([bond_idx, - bond_idx + nbr_dim // 2]) + bond_idx = torch.cat([bond_idx, bond_idx + nbr_dim // 2]) else: bonded_nbr_list = batch["bonded_nbr_list"] bonded_nbr_list, _ = make_directed(bonded_nbr_list) bond_idx = get_bond_idx(bonded_nbr_list, nbr_list) return bond_idx - def convolve_sub_batch(self, - batch, - xyz=None, - xyz_grad=False, - **kwargs): + def convolve_sub_batch(self, batch, xyz=None, xyz_grad=False, **kwargs): """ Apply the convolutional layers to a sub-batch. @@ -152,8 +135,7 @@ def convolve_sub_batch(self, bond_dim = bond_features.shape[1] num_pairs = a.shape[0] - bond_edge_features = torch.zeros(num_pairs, bond_dim - ).to(a.device) + bond_edge_features = torch.zeros(num_pairs, bond_dim).to(a.device) bond_idx = self.find_bond_idx(batch) bond_edge_features[bond_idx] = bond_features @@ -161,18 +143,16 @@ def convolve_sub_batch(self, # offsets take care of periodic boundary conditions offsets = batch.get("offsets", 0) # to deal with any shape mismatches - if hasattr(offsets, 'max') and offsets.max() == 0: + if hasattr(offsets, "max") and offsets.max() == 0: offsets = 0 if "distances" in batch: distances = batch["distances"][:, None] else: - distances = (xyz[a[:, 0]] - xyz[a[:, 1]] - - offsets).pow(2).sum(1).sqrt()[:, None] + distances = (xyz[a[:, 0]] - xyz[a[:, 1]] - offsets).pow(2).sum(1).sqrt()[:, None] distance_feats = self.distance_filter(distances) - e = torch.cat([bond_edge_features, distance_feats], - dim=-1) + e = torch.cat([bond_edge_features, distance_feats], dim=-1) r = self.atom_filter(batch["atom_features"]) diff --git a/nff/nn/models/spooky.py b/nff/nn/models/spooky.py index 445aea33..c9dbb8d3 100644 --- a/nff/nn/models/spooky.py +++ b/nff/nn/models/spooky.py @@ -3,11 +3,18 @@ from nff.utils.scatter import compute_grad from nff.utils.tools import make_directed from nff.utils import constants as const -from nff.nn.modules.spooky import (DEFAULT_DROPOUT, DEFAULT_ACTIVATION, - DEFAULT_MAX_Z, DEFAULT_RES_LAYERS, - CombinedEmbedding, InteractionBlock, - AtomwiseReadout, Electrostatics, - NuclearRepulsion, get_dipole) +from nff.nn.modules.spooky import ( + DEFAULT_DROPOUT, + DEFAULT_ACTIVATION, + DEFAULT_MAX_Z, + DEFAULT_RES_LAYERS, + CombinedEmbedding, + InteractionBlock, + AtomwiseReadout, + Electrostatics, + NuclearRepulsion, + get_dipole, +) from nff.nn.modules.schnet import get_rij, get_offsets @@ -20,23 +27,17 @@ def default(val, def_val): def parse_optional(modelparams): - dropout = default(modelparams.get('dropout'), - DEFAULT_DROPOUT) - activation = default(modelparams.get('activation'), - DEFAULT_ACTIVATION) - max_z = default(modelparams.get('max_z'), DEFAULT_MAX_Z) - residual_layers = default(modelparams.get('residual_layers'), - DEFAULT_RES_LAYERS) + dropout = default(modelparams.get("dropout"), DEFAULT_DROPOUT) + activation = default(modelparams.get("activation"), DEFAULT_ACTIVATION) + max_z = default(modelparams.get("max_z"), DEFAULT_MAX_Z) + residual_layers = default(modelparams.get("residual_layers"), DEFAULT_RES_LAYERS) return dropout, activation, max_z, residual_layers def parse_add_ons(modelparams): - add_nuc_keys = default(modelparams.get('add_nuc_keys'), - modelparams['output_keys']) - add_elec_keys = default(modelparams.get('add_elec_keys'), - modelparams['output_keys']) - add_disp_keys = default(modelparams.get('add_disp_keys'), - []) + add_nuc_keys = default(modelparams.get("add_nuc_keys"), modelparams["output_keys"]) + add_elec_keys = default(modelparams.get("add_elec_keys"), modelparams["output_keys"]) + add_disp_keys = default(modelparams.get("add_disp_keys"), []) return add_nuc_keys, add_elec_keys, add_disp_keys @@ -47,125 +48,95 @@ class SpookyNet(nn.Module): work properly """ - def __init__(self, - modelparams): - + def __init__(self, modelparams): super().__init__() - feat_dim = modelparams['feat_dim'] - r_cut = modelparams['r_cut'] + feat_dim = modelparams["feat_dim"] + r_cut = modelparams["r_cut"] optional = parse_optional(modelparams) dropout, activation, max_z, residual_layers = optional add_ons = parse_add_ons(modelparams) add_nuc_keys, add_elec_keys, add_disp_keys = add_ons - self.output_keys = modelparams['output_keys'] - self.grad_keys = modelparams['grad_keys'] - self.embedding = CombinedEmbedding(feat_dim=feat_dim, - activation=activation, - max_z=max_z, - residual_layers=residual_layers) - self.interactions = nn.ModuleList([ - InteractionBlock(feat_dim=feat_dim, - r_cut=r_cut, - gamma=modelparams['gamma'], - bern_k=modelparams['bern_k'], - activation=activation, - dropout=dropout, - max_z=max_z, - residual_layers=residual_layers, - l_max=default(modelparams.get("l_max"), 2), - fast_feats=modelparams.get("fast_feats")) - for _ in range(modelparams['num_conv']) - ]) - - self.atomwise_readout = nn.ModuleDict({ - key: AtomwiseReadout(feat_dim=feat_dim) - for key in self.output_keys - }) - - self.electrostatics = nn.ModuleDict({ - key: Electrostatics(feat_dim=feat_dim, - r_cut=r_cut, - max_z=max_z) - for key in add_elec_keys - }) - - self.nuc_repulsion = nn.ModuleDict({ - key: NuclearRepulsion(r_cut=r_cut) - for key in add_nuc_keys - }) + self.output_keys = modelparams["output_keys"] + self.grad_keys = modelparams["grad_keys"] + self.embedding = CombinedEmbedding( + feat_dim=feat_dim, activation=activation, max_z=max_z, residual_layers=residual_layers + ) + self.interactions = nn.ModuleList( + [ + InteractionBlock( + feat_dim=feat_dim, + r_cut=r_cut, + gamma=modelparams["gamma"], + bern_k=modelparams["bern_k"], + activation=activation, + dropout=dropout, + max_z=max_z, + residual_layers=residual_layers, + l_max=default(modelparams.get("l_max"), 2), + fast_feats=modelparams.get("fast_feats"), + ) + for _ in range(modelparams["num_conv"]) + ] + ) + + self.atomwise_readout = nn.ModuleDict({key: AtomwiseReadout(feat_dim=feat_dim) for key in self.output_keys}) + + self.electrostatics = nn.ModuleDict( + {key: Electrostatics(feat_dim=feat_dim, r_cut=r_cut, max_z=max_z) for key in add_elec_keys} + ) + + self.nuc_repulsion = nn.ModuleDict({key: NuclearRepulsion(r_cut=r_cut) for key in add_nuc_keys}) if add_disp_keys: raise NotImplementedError("Dispersion not implemented") self.r_cut = r_cut - def get_results(self, - z, - f, - num_atoms, - xyz, - charge, - nbrs, - offsets, - mol_offsets, - mol_nbrs): - + def get_results(self, z, f, num_atoms, xyz, charge, nbrs, offsets, mol_offsets, mol_nbrs): results = {} for key in self.output_keys: atomwise_readout = self.atomwise_readout[key] - energy = atomwise_readout(z=z, - f=f, - num_atoms=num_atoms) + energy = atomwise_readout(z=z, f=f, num_atoms=num_atoms) if key in self.electrostatics: electrostatics = self.electrostatics[key] - elec_e, q = electrostatics(f=f, - z=z, - xyz=xyz, - total_charge=charge, - num_atoms=num_atoms, - mol_nbrs=mol_nbrs, - mol_offsets=mol_offsets) + elec_e, q = electrostatics( + f=f, + z=z, + xyz=xyz, + total_charge=charge, + num_atoms=num_atoms, + mol_nbrs=mol_nbrs, + mol_offsets=mol_offsets, + ) energy += elec_e if key in self.nuc_repulsion: nuc_repulsion = self.nuc_repulsion[key] - nuc_e = nuc_repulsion(xyz=xyz, - z=z, - nbrs=nbrs, - num_atoms=num_atoms, - offsets=offsets) + nuc_e = nuc_repulsion(xyz=xyz, z=z, nbrs=nbrs, num_atoms=num_atoms, offsets=offsets) energy += nuc_e results.update({key: energy}) if key in self.electrostatics: - dipole = get_dipole(xyz=xyz, - q=q, - num_atoms=num_atoms) + dipole = get_dipole(xyz=xyz, q=q, num_atoms=num_atoms) suffix = "_" + key.split("_")[-1] if not any([i.isdigit() for i in suffix]): suffix = "" - results.update({f"dipole{suffix}": dipole, - f"q{suffix}": q}) + results.update({f"dipole{suffix}": dipole, f"q{suffix}": q}) return results - def add_grad(self, - xyz, - grad_keys, - results): - + def add_grad(self, xyz, grad_keys, results): if grad_keys is None: grad_keys = self.grad_keys for key in grad_keys: base_key = key.replace("_grad", "") - grad = compute_grad(inputs=xyz, - output=results[base_key]) + grad = compute_grad(inputs=xyz, output=results[base_key]) results[key] = grad return results @@ -176,60 +147,46 @@ def set_cutoff(self): interac = self.interactions[0] self.cutoff = interac.local.g_0.r_cut - def fwd(self, - batch, - xyz=None, - grad_keys=None): - - nxyz = batch['nxyz'] - nbrs, _ = make_directed(batch['nbr_list']) + def fwd(self, batch, xyz=None, grad_keys=None): + nxyz = batch["nxyz"] + nbrs, _ = make_directed(batch["nbr_list"]) z = nxyz[:, 0].long() if xyz is None: xyz = nxyz[:, 1:] xyz.requires_grad = True - charge = batch['charge'] - spin = batch['spin'] - num_atoms = batch['num_atoms'] - offsets = get_offsets(batch, 'offsets') - mol_offsets = get_offsets(batch, 'mol_offsets') - mol_nbrs = batch.get('mol_nbrs') + charge = batch["charge"] + spin = batch["spin"] + num_atoms = batch["num_atoms"] + offsets = get_offsets(batch, "offsets") + mol_offsets = get_offsets(batch, "mol_offsets") + mol_nbrs = batch.get("mol_nbrs") - x = self.embedding(charge=charge, - spin=spin, - z=z, - num_atoms=num_atoms) + x = self.embedding(charge=charge, spin=spin, z=z, num_atoms=num_atoms) # get r_ij including offsets and removing neighbor skin self.set_cutoff() - r_ij, nbrs = get_rij(xyz=xyz, - batch=batch, - nbrs=nbrs, - cutoff=self.cutoff) + r_ij, nbrs = get_rij(xyz=xyz, batch=batch, nbrs=nbrs, cutoff=self.cutoff) f = torch.zeros_like(x) for i, interaction in enumerate(self.interactions): - x, y_t = interaction(x=x, - xyz=xyz, - nbrs=nbrs, - num_atoms=num_atoms, - r_ij=r_ij) + x, y_t = interaction(x=x, xyz=xyz, nbrs=nbrs, num_atoms=num_atoms, r_ij=r_ij) f = f + y_t - results = self.get_results(z=z, - f=f, - num_atoms=num_atoms, - xyz=xyz, - charge=charge, - nbrs=nbrs, - offsets=offsets, - mol_offsets=mol_offsets, - mol_nbrs=mol_nbrs) + results = self.get_results( + z=z, + f=f, + num_atoms=num_atoms, + xyz=xyz, + charge=charge, + nbrs=nbrs, + offsets=offsets, + mol_offsets=mol_offsets, + mol_nbrs=mol_nbrs, + ) - results = self.add_grad(xyz=xyz, - grad_keys=grad_keys, - results=results) + results = self.add_grad(xyz=xyz, grad_keys=grad_keys, results=results) return results @@ -239,6 +196,7 @@ def forward(self, *args, **kwargs): except Exception as e: print(e) import pdb + pdb.post_mortem() @@ -247,9 +205,7 @@ class RealSpookyNet(SourceSpooky): Wrapper around the real source code for SpookyNet, so we can use it in NFF """ - def __init__(self, - params): - + def __init__(self, params): super().__init__(**params) self.int_dtype = torch.long @@ -260,16 +216,14 @@ def __init__(self, self.dip_key = params["dip_key"] self.charge_key = params["charge_key"] - def get_full_nbrs(self, - batch): - - idx_i = batch['mol_nbrs'][:, 0] - idx_j = batch['mol_nbrs'][:, 1] + def get_full_nbrs(self, batch): + idx_i = batch["mol_nbrs"][:, 0] + idx_j = batch["mol_nbrs"][:, 1] return idx_i, idx_j def get_regular_nbrs(self, batch): - nbrs = batch['nbr_list'] + nbrs = batch["nbr_list"] idx_i = nbrs[:, 0] idx_j = nbrs[:, 1] @@ -284,39 +238,42 @@ def device(self, val): self.to(val) def forward(self, batch): - full_nbrs = any([self.use_d4_dispersion, - self.use_electrostatics]) + full_nbrs = any([self.use_d4_dispersion, self.use_electrostatics]) if full_nbrs: idx_i, idx_j = self.get_full_nbrs(batch) - cell_offsets = batch.get('mol_offsets') + cell_offsets = batch.get("mol_offsets") else: idx_i, idx_j = self.get_regular_nbrs(batch) - cell_offsets = batch.get('offsets') + cell_offsets = batch.get("offsets") - nxyz = batch['nxyz'] + nxyz = batch["nxyz"] xyz = nxyz[:, 1:].to(self.float_dtype) xyz.requires_grad = True device = xyz.device Z = nxyz[:, 0].to(self.int_dtype) - num_atoms = batch['num_atoms'] + num_atoms = batch["num_atoms"] num_batch = len(num_atoms) - batch_seg = torch.cat([torch.ones(int(num_atoms)) * i for i, num_atoms in - enumerate(num_atoms)]).to(self.int_dtype - ).to(device) - - out = super().forward(Z=Z, - Q=batch['charge'].to(self.float_dtype), - S=batch['spin'].to(self.float_dtype), - R=xyz, - idx_i=idx_i, - idx_j=idx_j, - num_batch=num_batch, - batch_seg=batch_seg, - cell=batch.get('cell'), - cell_offsets=cell_offsets) + batch_seg = ( + torch.cat([torch.ones(int(num_atoms)) * i for i, num_atoms in enumerate(num_atoms)]) + .to(self.int_dtype) + .to(device) + ) + + out = super().forward( + Z=Z, + Q=batch["charge"].to(self.float_dtype), + S=batch["spin"].to(self.float_dtype), + R=xyz, + idx_i=idx_i, + idx_j=idx_j, + num_batch=num_batch, + batch_seg=batch_seg, + cell=batch.get("cell"), + cell_offsets=cell_offsets, + ) energy, forces, dipole, f, ea, qa, ea_rep, ea_ele, ea_vdw, pa, c6 = out @@ -335,7 +292,7 @@ def forward(self, batch): "atomic_zbl": ea_rep * const.EV_TO_KCAL_MOL, "atom_vwd": ea_vdw * const.EV_TO_KCAL_MOL, "polarizabilities": pa, - "c6": c6 + "c6": c6, } return results diff --git a/nff/nn/models/spooky_fast.py b/nff/nn/models/spooky_fast.py index d281db4f..66a330cb 100644 --- a/nff/nn/models/spooky_fast.py +++ b/nff/nn/models/spooky_fast.py @@ -2,11 +2,18 @@ from torch import nn from nff.utils.scatter import compute_grad from nff.utils.tools import make_directed, make_undirected -from nff.nn.modules.spooky_fast import (DEFAULT_DROPOUT, DEFAULT_ACTIVATION, - DEFAULT_MAX_Z, DEFAULT_RES_LAYERS, - CombinedEmbedding, InteractionBlock, - AtomwiseReadout, Electrostatics, - NuclearRepulsion, get_dipole) +from nff.nn.modules.spooky_fast import ( + DEFAULT_DROPOUT, + DEFAULT_ACTIVATION, + DEFAULT_MAX_Z, + DEFAULT_RES_LAYERS, + CombinedEmbedding, + InteractionBlock, + AtomwiseReadout, + Electrostatics, + NuclearRepulsion, + get_dipole, +) def default(val, def_val): @@ -15,182 +22,127 @@ def default(val, def_val): def parse_optional(modelparams): - dropout = default(modelparams.get('dropout'), - DEFAULT_DROPOUT) - activation = default(modelparams.get('activation'), - DEFAULT_ACTIVATION) - max_z = default(modelparams.get('max_z'), DEFAULT_MAX_Z) - residual_layers = default(modelparams.get('residual_layers'), - DEFAULT_RES_LAYERS) + dropout = default(modelparams.get("dropout"), DEFAULT_DROPOUT) + activation = default(modelparams.get("activation"), DEFAULT_ACTIVATION) + max_z = default(modelparams.get("max_z"), DEFAULT_MAX_Z) + residual_layers = default(modelparams.get("residual_layers"), DEFAULT_RES_LAYERS) return dropout, activation, max_z, residual_layers def parse_add_ons(modelparams): - add_nuc_keys = default(modelparams.get('add_nuc_keys'), - modelparams['output_keys']) - add_elec_keys = default(modelparams.get('add_elec_keys'), - modelparams['output_keys']) - add_disp_keys = default(modelparams.get('add_disp_keys'), - []) + add_nuc_keys = default(modelparams.get("add_nuc_keys"), modelparams["output_keys"]) + add_elec_keys = default(modelparams.get("add_elec_keys"), modelparams["output_keys"]) + add_disp_keys = default(modelparams.get("add_disp_keys"), []) return add_nuc_keys, add_elec_keys, add_disp_keys class SpookyNet(nn.Module): - def __init__(self, - modelparams): - + def __init__(self, modelparams): super().__init__() - feat_dim = modelparams['feat_dim'] - r_cut = modelparams['r_cut'] + feat_dim = modelparams["feat_dim"] + r_cut = modelparams["r_cut"] optional = parse_optional(modelparams) dropout, activation, max_z, residual_layers = optional add_ons = parse_add_ons(modelparams) add_nuc_keys, add_elec_keys, add_disp_keys = add_ons - self.output_keys = modelparams['output_keys'] - self.grad_keys = modelparams['grad_keys'] - self.embedding = CombinedEmbedding(feat_dim=feat_dim, - activation=activation, - max_z=max_z, - residual_layers=residual_layers) - self.interactions = nn.ModuleList([ - InteractionBlock(feat_dim=feat_dim, - r_cut=r_cut, - gamma=modelparams['gamma'], - bern_k=modelparams['bern_k'], - activation=activation, - dropout=dropout, - max_z=max_z, - residual_layers=residual_layers) - for _ in range(modelparams['num_conv']) - ]) - self.atomwise_readout = nn.ModuleDict({ - key: AtomwiseReadout(feat_dim=feat_dim) - for key in self.output_keys - }) - - self.electrostatics = nn.ModuleDict({ - key: Electrostatics(feat_dim=feat_dim, - r_cut=r_cut, - max_z=max_z) - for key in add_elec_keys - }) - - self.nuc_repulsion = nn.ModuleDict({ - key: NuclearRepulsion(r_cut=r_cut) - for key in add_nuc_keys - }) + self.output_keys = modelparams["output_keys"] + self.grad_keys = modelparams["grad_keys"] + self.embedding = CombinedEmbedding( + feat_dim=feat_dim, activation=activation, max_z=max_z, residual_layers=residual_layers + ) + self.interactions = nn.ModuleList( + [ + InteractionBlock( + feat_dim=feat_dim, + r_cut=r_cut, + gamma=modelparams["gamma"], + bern_k=modelparams["bern_k"], + activation=activation, + dropout=dropout, + max_z=max_z, + residual_layers=residual_layers, + ) + for _ in range(modelparams["num_conv"]) + ] + ) + self.atomwise_readout = nn.ModuleDict({key: AtomwiseReadout(feat_dim=feat_dim) for key in self.output_keys}) + + self.electrostatics = nn.ModuleDict( + {key: Electrostatics(feat_dim=feat_dim, r_cut=r_cut, max_z=max_z) for key in add_elec_keys} + ) + + self.nuc_repulsion = nn.ModuleDict({key: NuclearRepulsion(r_cut=r_cut) for key in add_nuc_keys}) if add_disp_keys: raise NotImplementedError("Dispersion not implemented") - def get_results(self, - z, - f, - num_atoms, - xyz, - charge, - mol_nbrs, - nbrs): - + def get_results(self, z, f, num_atoms, xyz, charge, mol_nbrs, nbrs): results = {} for key in self.output_keys: atomwise_readout = self.atomwise_readout[key] - energy = atomwise_readout(z=z, - f=f, - num_atoms=num_atoms) + energy = atomwise_readout(z=z, f=f, num_atoms=num_atoms) if key in self.electrostatics: electrostatics = self.electrostatics[key] - elec_e, q = electrostatics(f=f, - z=z, - xyz=xyz, - total_charge=charge, - num_atoms=num_atoms, - mol_nbrs=mol_nbrs) + elec_e, q = electrostatics( + f=f, z=z, xyz=xyz, total_charge=charge, num_atoms=num_atoms, mol_nbrs=mol_nbrs + ) energy += elec_e if key in self.nuc_repulsion: nuc_repulsion = self.nuc_repulsion[key] - nuc_e = nuc_repulsion(xyz=xyz, - z=z, - nbrs=nbrs, - num_atoms=num_atoms) + nuc_e = nuc_repulsion(xyz=xyz, z=z, nbrs=nbrs, num_atoms=num_atoms) energy += nuc_e results.update({key: energy}) if key in self.electrostatics: - dipole = get_dipole(xyz=xyz, - q=q, - num_atoms=num_atoms) + dipole = get_dipole(xyz=xyz, q=q, num_atoms=num_atoms) suffix = "_" + key.split("_")[-1] if not any([i.isdigit() for i in suffix]): suffix = "" - results.update({f"dipole{suffix}": dipole, - f"q{suffix}": q}) + results.update({f"dipole{suffix}": dipole, f"q{suffix}": q}) return results - def add_grad(self, - xyz, - grad_keys, - results): + def add_grad(self, xyz, grad_keys, results): if grad_keys is None: grad_keys = self.grad_keys for key in grad_keys: base_key = key.replace("_grad", "") - grad = compute_grad(inputs=xyz, - output=results[base_key]) + grad = compute_grad(inputs=xyz, output=results[base_key]) results[key] = grad return results - def fwd(self, - batch, - xyz=None, - grad_keys=None): - - nxyz = batch['nxyz'] - nbrs, _ = make_directed(batch['nbr_list']) - mol_nbrs = make_undirected(batch['mol_nbrs']) + def fwd(self, batch, xyz=None, grad_keys=None): + nxyz = batch["nxyz"] + nbrs, _ = make_directed(batch["nbr_list"]) + mol_nbrs = make_undirected(batch["mol_nbrs"]) z = nxyz[:, 0].long() if xyz is None: xyz = nxyz[:, 1:] xyz.requires_grad = True - charge = batch['charge'] - spin = batch['spin'] - num_atoms = batch['num_atoms'] + charge = batch["charge"] + spin = batch["spin"] + num_atoms = batch["num_atoms"] - x = self.embedding(charge=charge, - spin=spin, - z=z, - num_atoms=num_atoms) + x = self.embedding(charge=charge, spin=spin, z=z, num_atoms=num_atoms) f = torch.zeros_like(x) for i, interaction in enumerate(self.interactions): - x, y_t = interaction(x=x, - xyz=xyz, - nbrs=nbrs, - num_atoms=num_atoms) + x, y_t = interaction(x=x, xyz=xyz, nbrs=nbrs, num_atoms=num_atoms) f += y_t - results = self.get_results(z=z, - f=f, - num_atoms=num_atoms, - xyz=xyz, - charge=charge, - mol_nbrs=mol_nbrs, - nbrs=nbrs) + results = self.get_results(z=z, f=f, num_atoms=num_atoms, xyz=xyz, charge=charge, mol_nbrs=mol_nbrs, nbrs=nbrs) - results = self.add_grad(xyz=xyz, - grad_keys=grad_keys, - results=results) + results = self.add_grad(xyz=xyz, grad_keys=grad_keys, results=results) return results @@ -200,4 +152,5 @@ def forward(self, *args, **kwargs): except Exception as e: print(e) import pdb + pdb.post_mortem() diff --git a/nff/nn/models/spooky_net_source/functional.py b/nff/nn/models/spooky_net_source/functional.py index 0027acf1..630d612b 100644 --- a/nff/nn/models/spooky_net_source/functional.py +++ b/nff/nn/models/spooky_net_source/functional.py @@ -13,7 +13,7 @@ def shifted_softplus(x: torch.Tensor) -> torch.Tensor: - """ Shifted softplus activation function. """ + """Shifted softplus activation function.""" return torch.nn.functional.softplus(x) - math.log(2) @@ -25,15 +25,11 @@ def cutoff_function(x: torch.Tensor, cutoff: float) -> torch.Tensor: """ zeros = torch.zeros_like(x) x_ = torch.where(x < cutoff, x, zeros) # prevent nan in backprop - return torch.where( - x < cutoff, torch.exp(-(x_ ** 2) / ((cutoff - x_) * (cutoff + x_))), zeros - ) + return torch.where(x < cutoff, torch.exp(-(x_**2) / ((cutoff - x_) * (cutoff + x_))), zeros) -def _switch_component( - x: torch.Tensor, ones: torch.Tensor, zeros: torch.Tensor -) -> torch.Tensor: - """ Component of the switch function, only for internal use. """ +def _switch_component(x: torch.Tensor, ones: torch.Tensor, zeros: torch.Tensor) -> torch.Tensor: + """Component of the switch function, only for internal use.""" x_ = torch.where(x <= 0, ones, x) # prevent nan in backprop return torch.where(x <= 0, zeros, torch.exp(-ones / x_)) diff --git a/nff/nn/models/spooky_net_source/modules/attention.py b/nff/nn/models/spooky_net_source/modules/attention.py index 007629f4..34592de1 100644 --- a/nff/nn/models/spooky_net_source/modules/attention.py +++ b/nff/nn/models/spooky_net_source/modules/attention.py @@ -20,10 +20,8 @@ class Attention(nn.Module): this is 0, the exact attention matrix is computed. """ - def __init__( - self, dim_qk: int, dim_v: int, num_random_features: Optional[int] = None - ) -> None: - """ Initializes the Attention class. """ + def __init__(self, dim_qk: int, dim_v: int, num_random_features: Optional[int] = None) -> None: + """Initializes the Attention class.""" super(Attention, self).__init__() self.num_random_features = num_random_features if self.num_random_features is not None: @@ -34,11 +32,10 @@ def __init__( self.reset_parameters() def reset_parameters(self) -> None: - """ For compatibility with other modules. """ - pass + """For compatibility with other modules.""" def _omega(self, nrows: int, ncols: int) -> np.ndarray: - """ Return a (nrows x ncols) random feature matrix. """ + """Return a (nrows x ncols) random feature matrix.""" nblocks = int(nrows / ncols) blocks = [] for i in range(nblocks): @@ -63,11 +60,11 @@ def _phi( batch_seg: torch.Tensor, eps: float = 1e-4, ) -> torch.Tensor: - """ Normalize X and project into random feature space. """ + """Normalize X and project into random feature space.""" d = X.shape[-1] m = self.omega.shape[-1] - U = torch.matmul(X / d ** 0.25, self.omega) - h = torch.sum(X ** 2, dim=-1, keepdim=True) / (2 * d ** 0.5) # OLD + U = torch.matmul(X / d**0.25, self.omega) + h = torch.sum(X**2, dim=-1, keepdim=True) / (2 * d**0.5) # OLD # determine maximum (is subtracted to prevent numerical overflow) if is_query: maximum, _ = torch.max(U, dim=-1, keepdim=True) @@ -75,15 +72,11 @@ def _phi( if num_batch > 1: brow = batch_seg.view(1, -1, 1).expand(num_batch, -1, U.shape[-1]) bcol = ( - torch.arange( - num_batch, dtype=batch_seg.dtype, device=batch_seg.device - ) + torch.arange(num_batch, dtype=batch_seg.dtype, device=batch_seg.device) .view(-1, 1, 1) .expand(-1, U.shape[-2], U.shape[-1]) ) - mask = torch.where( - brow == bcol, torch.ones_like(U), torch.zeros_like(U) - ) + mask = torch.where(brow == bcol, torch.ones_like(U), torch.zeros_like(U)) tmp = U.unsqueeze(0).expand(num_batch, -1, -1) tmp, _ = torch.max(mask * tmp, dim=-1) tmp, _ = torch.max(tmp, dim=-1) @@ -104,10 +97,10 @@ def _exact_attention( batch_seg: torch.Tensor, eps: float = 1e-8, ): - """ Compute exact attention. """ + """Compute exact attention.""" d = Q.shape[-1] dot = Q @ K.T # dot product - A = torch.exp((dot - torch.max(dot)) / d ** 0.5) # attention matrix + A = torch.exp((dot - torch.max(dot)) / d**0.5) # attention matrix if num_batch > 1: # mask out entries of different batches brow = batch_seg.view(1, -1).expand(A.shape[-2], -1) bcol = batch_seg.view(-1, 1).expand(-1, A.shape[-1]) @@ -126,12 +119,12 @@ def _approximate_attention( mask: Optional[torch.Tensor] = None, eps: float = 1e-8, ) -> torch.Tensor: - """ Compute approximate attention. """ + """Compute approximate attention.""" Q = self._phi(Q, True, num_batch, batch_seg) # random projection of Q K = self._phi(K, False, num_batch, batch_seg) # random projection of K if num_batch > 1: d = Q.shape[-1] - n = batch_seg.shape[0] + batch_seg.shape[0] # compute norm idx = batch_seg.unsqueeze(-1).expand(-1, d) @@ -143,9 +136,7 @@ def _approximate_attention( # K[b==batch_seg].transpose(-1,-2)@V[b==batch_seg]) # for b in range(num_batch)])/norm if mask is None: # mask can be shared across multiple attentions - one_hot = nn.functional.one_hot(batch_seg).to( - dtype=V.dtype, device=V.device - ) + one_hot = nn.functional.one_hot(batch_seg).to(dtype=V.dtype, device=V.device) mask = one_hot @ one_hot.transpose(-1, -2) return ((mask * (K @ Q.transpose(-1, -2))).transpose(-1, -2) @ V) / norm else: diff --git a/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py b/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py index 192205a3..3c2501e6 100644 --- a/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py +++ b/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py @@ -21,7 +21,7 @@ class BernsteinPolynomials(nn.Module): """ def __init__(self, num_basis_functions: int, cutoff: float) -> None: - """ Initializes the BernsteinPolynomials class. """ + """Initializes the BernsteinPolynomials class.""" super(BernsteinPolynomials, self).__init__() # compute values to initialize buffers logfactorial = np.zeros((num_basis_functions)) @@ -38,8 +38,7 @@ def __init__(self, num_basis_functions: int, cutoff: float) -> None: self.reset_parameters() def reset_parameters(self) -> None: - """ For compatibility with other modules. """ - pass + """For compatibility with other modules.""" def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: """ diff --git a/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py b/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py index f2a57b66..550645ca 100644 --- a/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py +++ b/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py @@ -33,7 +33,7 @@ def __init__( Hartree: float = 27.211386024367243, # conversion to Hartree dtype: torch.dtype = torch.float32, ) -> None: - """ Initializes the D4DispersionEnergy class. """ + """Initializes the D4DispersionEnergy class.""" super(D4DispersionEnergy, self).__init__() # Grimme's D4 dispersion is only parametrized up to Rn (Z=86) assert Zmax <= 87 @@ -41,15 +41,9 @@ def __init__( self.register_parameter( "_s6", nn.Parameter(softplus_inverse(s6), requires_grad=False) ) # s6 is usually not fitted (correct long-range) - self.register_parameter( - "_s8", nn.Parameter(softplus_inverse(s8), requires_grad=True) - ) - self.register_parameter( - "_a1", nn.Parameter(softplus_inverse(a1), requires_grad=True) - ) - self.register_parameter( - "_a2", nn.Parameter(softplus_inverse(a2), requires_grad=True) - ) + self.register_parameter("_s8", nn.Parameter(softplus_inverse(s8), requires_grad=True)) + self.register_parameter("_a1", nn.Parameter(softplus_inverse(a1), requires_grad=True)) + self.register_parameter("_a2", nn.Parameter(softplus_inverse(a2), requires_grad=True)) self.register_parameter( "_scaleq", nn.Parameter(softplus_inverse(1.0), requires_grad=True) ) # for scaling charges of reference systems @@ -57,8 +51,8 @@ def __init__( self.Zmax = Zmax self.convert2Bohr = 1 / Bohr self.convert2eV = 0.5 * Hartree # factor of 0.5 prevents double counting - self.convert2Angstrom3 = Bohr ** 3 - self.convert2eVAngstrom6 = Hartree * Bohr ** 6 + self.convert2Angstrom3 = Bohr**3 + self.convert2eVAngstrom6 = Hartree * Bohr**6 self.set_cutoff(cutoff) self.g_a = g_a self.g_c = g_c @@ -75,20 +69,24 @@ def __init__( torch.load(os.path.join(directory, "refsys.pth"))[:Zmax], ) self.register_buffer( - "zeff", torch.load(os.path.join(directory, "zeff.pth"))[:Zmax] # [Zmax] + "zeff", + torch.load(os.path.join(directory, "zeff.pth"))[:Zmax], # [Zmax] ) self.register_buffer( "refh", # [Zmax,max_nref] torch.load(os.path.join(directory, "refh.pth"))[:Zmax], ) self.register_buffer( - "sscale", torch.load(os.path.join(directory, "sscale.pth")) # [18] + "sscale", + torch.load(os.path.join(directory, "sscale.pth")), # [18] ) self.register_buffer( - "secaiw", torch.load(os.path.join(directory, "secaiw.pth")) # [18,23] + "secaiw", + torch.load(os.path.join(directory, "secaiw.pth")), # [18,23] ) self.register_buffer( - "gam", torch.load(os.path.join(directory, "gam.pth"))[:Zmax] # [Zmax] + "gam", + torch.load(os.path.join(directory, "gam.pth"))[:Zmax], # [Zmax] ) self.register_buffer( "ascale", # [Zmax,max_nref] @@ -107,10 +105,12 @@ def __init__( torch.load(os.path.join(directory, "casimir_polder_weights.pth"))[:Zmax], ) self.register_buffer( - "rcov", torch.load(os.path.join(directory, "rcov.pth"))[:Zmax] # [Zmax] + "rcov", + torch.load(os.path.join(directory, "rcov.pth"))[:Zmax], # [Zmax] ) self.register_buffer( - "en", torch.load(os.path.join(directory, "en.pth"))[:Zmax] # [Zmax] + "en", + torch.load(os.path.join(directory, "en.pth"))[:Zmax], # [Zmax] ) self.register_buffer( "ncount_mask", # [Zmax,max_nref,max_ncount] @@ -145,11 +145,10 @@ def __init__( self.reset_parameters() def reset_parameters(self) -> None: - """ For compatibility with other modules. """ - pass + """For compatibility with other modules.""" def set_cutoff(self, cutoff: Optional[float] = None) -> None: - """ Can be used to change the cutoff. """ + """Can be used to change the cutoff.""" if cutoff is None: self.cutoff = None self.cuton = None @@ -178,24 +177,18 @@ def _compute_refc6(self) -> None: * self.secaiw[is_] * torch.where( qmod > 1e-8, - torch.exp( - self.g_a - * (1 - torch.exp(self.gam[is_] * self.g_c * (1 - qref / qmod_))) - ), + torch.exp(self.g_a * (1 - torch.exp(self.gam[is_] * self.g_c * (1 - qref / qmod_)))), math.exp(self.g_a) * ones_like_qmod, ).view(-1, self.max_nref, 1) ) alpha = torch.max( self.ascale[allZ, :].view(-1, self.max_nref, 1) - * ( - self.alphaiw[allZ, :, :] - - self.hcount[allZ, :].view(-1, self.max_nref, 1) * alpha - ), + * (self.alphaiw[allZ, :, :] - self.hcount[allZ, :].view(-1, self.max_nref, 1) * alpha), torch.zeros_like(alpha), ) - alpha_expanded = alpha.view( - alpha.size(0), 1, alpha.size(1), 1, -1 - ) * alpha.view(1, alpha.size(0), 1, alpha.size(1), -1) + alpha_expanded = alpha.view(alpha.size(0), 1, alpha.size(1), 1, -1) * alpha.view( + 1, alpha.size(0), 1, alpha.size(1), -1 + ) self.register_buffer( "refc6", 3.0 @@ -227,9 +220,7 @@ def forward( # calculate coordination numbers rco = self.k2 * (self.rcov[Zi] + self.rcov[Zj]) - den = self.k4 * torch.exp( - -((torch.abs(self.en[Zi] - self.en[Zj]) + self.k5) ** 2) / self.k6 - ) + den = self.k4 * torch.exp(-((torch.abs(self.en[Zi] - self.en[Zj]) + self.k5) ** 2) / self.k6) tmp = den * 0.5 * (1.0 + torch.erf(-self.kn * (rij - rco) / rco)) if self.cutoff is not None: tmp = tmp * switch_function(rij, self.cuton, self.cutoff) @@ -239,11 +230,7 @@ def forward( # calculate gaussian weights gweights = torch.sum( self.ncount_mask[Z] - * torch.exp( - -self.wf - * self.ncount_weight[Z] - * (covcn.view(-1, 1, 1) - self.cn[Z]) ** 2 - ), + * torch.exp(-self.wf * self.ncount_weight[Z] * (covcn.view(-1, 1, 1) - self.cn[Z]) ** 2), -1, ) norm = torch.sum(gweights, -1, True) @@ -261,15 +248,7 @@ def forward( zeta = ( torch.where( qmod > 1e-8, - torch.exp( - self.g_a - * ( - 1 - - torch.exp( - self.gam[Z].view(-1, 1) * self.g_c * (1 - qref / qmod_) - ) - ) - ), + torch.exp(self.g_a * (1 - torch.exp(self.gam[Z].view(-1, 1) * self.g_c * (1 - qref / qmod_)))), math.exp(self.g_a) * ones_like_qmod, ) * gweights @@ -281,49 +260,38 @@ def forward( zetai = torch.gather(zeta, 0, idx_i.view(-1, 1).expand(-1, zeta.size(1))) zetaj = torch.gather(zeta, 0, idx_j.view(-1, 1).expand(-1, zeta.size(1))) refc6ij = self.refc6[Zi, Zj, :, :] - zetaij = zetai.view(zetai.size(0), zetai.size(1), 1) * zetaj.view( - zetaj.size(0), 1, zetaj.size(1) - ) + zetaij = zetai.view(zetai.size(0), zetai.size(1), 1) * zetaj.view(zetaj.size(0), 1, zetaj.size(1)) c6ij = torch.sum((refc6ij * zetaij).view(refc6ij.size(0), -1), -1) sqrt_r4r2ij = math.sqrt(3) * self.sqrt_r4r2[Zi] * self.sqrt_r4r2[Zj] a1 = F.softplus(self._a1) a2 = F.softplus(self._a2) r0 = a1 * sqrt_r4r2ij + a2 if self.cutoff is None: - oor6 = 1 / (rij ** 6 + r0 ** 6) - oor8 = 1 / (rij ** 8 + r0 ** 8) + oor6 = 1 / (rij**6 + r0**6) + oor8 = 1 / (rij**8 + r0**8) else: - cut2 = self.cutoff ** 2 - cut6 = cut2 ** 3 + cut2 = self.cutoff**2 + cut6 = cut2**3 cut8 = cut2 * cut6 - tmp6 = r0 ** 6 - tmp8 = r0 ** 8 + tmp6 = r0**6 + tmp8 = r0**8 cut6tmp6 = cut6 + tmp6 cut8tmp8 = cut8 + tmp8 tmpc = rij / self.cutoff - 1 - oor6 = ( - 1 / (rij ** 6 + tmp6) - 1 / cut6tmp6 + 6 * cut6 / cut6tmp6 ** 2 * tmpc - ) - oor8 = ( - 1 / (rij ** 8 + tmp8) - 1 / cut8tmp8 + 8 * cut8 / cut8tmp8 ** 2 * tmpc - ) + oor6 = 1 / (rij**6 + tmp6) - 1 / cut6tmp6 + 6 * cut6 / cut6tmp6**2 * tmpc + oor8 = 1 / (rij**8 + tmp8) - 1 / cut8tmp8 + 8 * cut8 / cut8tmp8**2 * tmpc oor6 = torch.where(rij < self.cutoff, oor6, torch.zeros_like(oor6)) oor8 = torch.where(rij < self.cutoff, oor8, torch.zeros_like(oor8)) s6 = F.softplus(self._s6) s8 = F.softplus(self._s8) - pairwise = -c6ij * (s6 * oor6 + s8 * sqrt_r4r2ij ** 2 * oor8) * self.convert2eV + pairwise = -c6ij * (s6 * oor6 + s8 * sqrt_r4r2ij**2 * oor8) * self.convert2eV edisp = rij.new_zeros(N).index_add_(0, idx_i, pairwise) if compute_atomic_quantities: alpha = self.alpha[Z, :, 0] polarizabilities = torch.sum(zeta * alpha, -1) * self.convert2Angstrom3 refc6ii = self.refc6[Z, Z, :, :] - zetaii = zeta.view(zeta.size(0), zeta.size(1), 1) * zeta.view( - zeta.size(0), 1, zeta.size(1) - ) - c6_coefficients = ( - torch.sum((refc6ii * zetaii).view(refc6ii.size(0), -1), -1) - * self.convert2eVAngstrom6 - ) + zetaii = zeta.view(zeta.size(0), zeta.size(1), 1) * zeta.view(zeta.size(0), 1, zeta.size(1)) + c6_coefficients = torch.sum((refc6ii * zetaii).view(refc6ii.size(0), -1), -1) * self.convert2eVAngstrom6 else: polarizabilities = rij.new_zeros(N) c6_coefficients = rij.new_zeros(N) diff --git a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py index 82f047bb..17ec7088 100644 --- a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py @@ -38,7 +38,7 @@ def __init__( activation: str = "swish", is_charge: bool = False, ) -> None: - """ Initializes the ElectronicEmbedding class. """ + """Initializes the ElectronicEmbedding class.""" super(ElectronicEmbedding, self).__init__() self.is_charge = is_charge self.linear_q = nn.Linear(num_features, num_features) @@ -58,7 +58,7 @@ def __init__( self.reset_parameters() def reset_parameters(self) -> None: - """ Initialize parameters. """ + """Initialize parameters.""" nn.init.orthogonal_(self.linear_k.weight) nn.init.orthogonal_(self.linear_v.weight) nn.init.orthogonal_(self.linear_q.weight) diff --git a/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py b/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py index 242859fe..a347d2b2 100644 --- a/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py +++ b/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py @@ -32,25 +32,20 @@ def __init__( self.alpha2 = 0.0 self.two_pi = 2.0 * math.pi self.one_over_sqrtpi = 1 / math.sqrt(math.pi) - self.register_buffer( - "kmul", torch.Tensor(), persistent=False - ) + self.register_buffer("kmul", torch.Tensor(), persistent=False) self.reset_parameters() def reset_parameters(self) -> None: - """ For compatibility with other modules. """ - pass + """For compatibility with other modules.""" def set_lr_cutoff(self, lr_cutoff: Optional[float] = None) -> None: - """ Change the long range cutoff. """ + """Change the long range cutoff.""" self.lr_cutoff = lr_cutoff if self.lr_cutoff is not None: - self.lr_cutoff2 = lr_cutoff ** 2 + self.lr_cutoff2 = lr_cutoff**2 self.two_div_cut = 2.0 / lr_cutoff - self.rcutconstant = lr_cutoff / (lr_cutoff ** 2 + 1.0) ** (3.0 / 2.0) - self.cutconstant = (2 * lr_cutoff ** 2 + 1.0) / (lr_cutoff ** 2 + 1.0) ** ( - 3.0 / 2.0 - ) + self.rcutconstant = lr_cutoff / (lr_cutoff**2 + 1.0) ** (3.0 / 2.0) + self.cutconstant = (2 * lr_cutoff**2 + 1.0) / (lr_cutoff**2 + 1.0) ** (3.0 / 2.0) else: self.lr_cutoff2 = None self.two_div_cut = None @@ -58,7 +53,7 @@ def set_lr_cutoff(self, lr_cutoff: Optional[float] = None) -> None: self.cutconstant = None def set_kmax(self, Nxmax: int, Nymax: int, Nzmax: int) -> None: - """ Set integer reciprocal space cutoff for Ewald summation """ + """Set integer reciprocal space cutoff for Ewald summation""" kx = torch.arange(0, Nxmax + 1) kx = torch.cat([kx, -kx[1:]]) ky = torch.arange(0, Nymax + 1) @@ -67,16 +62,14 @@ def set_kmax(self, Nxmax: int, Nymax: int, Nzmax: int) -> None: kz = torch.cat([kz, -kz[1:]]) kmul = torch.cartesian_prod(kx, ky, kz)[1:] # 0th entry is 0 0 0 kmax = max(max(Nxmax, Nymax), Nzmax) - self.register_buffer( - "kmul", kmul[torch.sum(kmul ** 2, dim=-1) <= kmax ** 2], persistent=False - ) + self.register_buffer("kmul", kmul[torch.sum(kmul**2, dim=-1) <= kmax**2], persistent=False) def set_alpha(self, alpha: Optional[float] = None) -> None: - """ Set real space damping parameter for Ewald summation """ + """Set real space damping parameter for Ewald summation""" if alpha is None: # automatically determine alpha alpha = 4.0 / self.cutoff + 1e-3 self.alpha = alpha - self.alpha2 = alpha ** 2 + self.alpha2 = alpha**2 self.two_pi = 2.0 * math.pi self.one_over_sqrtpi = 1 / math.sqrt(math.pi) # print a warning if alpha is so small that the reciprocal space sum @@ -103,7 +96,7 @@ def _real_space( fac = self.kehalf * torch.gather(q, 0, idx_i) * torch.gather(q, 0, idx_j) f = switch_function(rij, self.cuton, self.cutoff) coulomb = 1.0 / rij - damped = 1.0 / (rij ** 2 + 1.0) ** (1.0 / 2.0) + damped = 1.0 / (rij**2 + 1.0) ** (1.0 / 2.0) pairwise = fac * (f * damped + (1 - f) * coulomb) * torch.erfc(self.alpha * rij) return q.new_zeros(N).index_add_(0, idx_i, pairwise) @@ -128,17 +121,11 @@ def _reciprocal_space( else: # gathering is faster on GPUs b = batch_seg.view(-1, 1, 1).expand(-1, k.shape[-2], k.shape[-1]) dot = torch.sum(torch.gather(k, 0, b) * R.unsqueeze(-2), dim=-1) - q_real = q.new_zeros(num_batch, dot.shape[-1]).index_add_( - 0, batch_seg, q.unsqueeze(-1) * torch.cos(dot) - ) - q_imag = q.new_zeros(num_batch, dot.shape[-1]).index_add_( - 0, batch_seg, q.unsqueeze(-1) * torch.sin(dot) - ) - qf = q_real ** 2 + q_imag ** 2 + q_real = q.new_zeros(num_batch, dot.shape[-1]).index_add_(0, batch_seg, q.unsqueeze(-1) * torch.cos(dot)) + q_imag = q.new_zeros(num_batch, dot.shape[-1]).index_add_(0, batch_seg, q.unsqueeze(-1) * torch.sin(dot)) + qf = q_real**2 + q_imag**2 # reciprocal energy - e_reciprocal = ( - self.two_pi / torch.prod(box_length, dim=1) * torch.sum(qf * qg, dim=-1) - ) + e_reciprocal = self.two_pi / torch.prod(box_length, dim=1) * torch.sum(qf * qg, dim=-1) # self interaction correction q2 = q * q e_self = self.alpha * self.one_over_sqrtpi * q2 @@ -184,7 +171,7 @@ def _coulomb( f = switch_function(rij, self.cuton, self.cutoff) if self.lr_cutoff is None: coulomb = 1.0 / rij - damped = 1.0 / (rij ** 2 + 1.0) ** (1.0 / 2.0) + damped = 1.0 / (rij**2 + 1.0) ** (1.0 / 2.0) else: coulomb = torch.where( rij < self.lr_cutoff, @@ -193,9 +180,7 @@ def _coulomb( ) damped = torch.where( rij < self.lr_cutoff, - 1.0 / (rij ** 2 + 1.0) ** (1.0 / 2.0) - + rij * self.rcutconstant - - self.cutconstant, + 1.0 / (rij**2 + 1.0) ** (1.0 / 2.0) + rij * self.rcutconstant - self.cutconstant, torch.zeros_like(rij), ) pairwise = fac * (f * damped + (1 - f) * coulomb) diff --git a/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py b/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py index 7e4a3a9c..bab050d4 100644 --- a/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py +++ b/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py @@ -40,7 +40,7 @@ def __init__( ini_alpha: float = 0.9448630629184640, exp_weighting: bool = False, ) -> None: - """ Initializes the ExponentialBernsteinPolynomials class. """ + """Initializes the ExponentialBernsteinPolynomials class.""" super(ExponentialBernsteinPolynomials, self).__init__() self.ini_alpha = ini_alpha self.exp_weighting = exp_weighting @@ -61,13 +61,11 @@ def __init__( self.register_buffer("logc", torch.tensor(logbinomial, dtype=torch.float64)) self.register_buffer("n", torch.tensor(n, dtype=torch.float64)) self.register_buffer("v", torch.tensor(v, dtype=torch.float64)) - self.register_parameter( - "_alpha", nn.Parameter(torch.tensor(1.0, dtype=torch.float64)) - ) + self.register_parameter("_alpha", nn.Parameter(torch.tensor(1.0, dtype=torch.float64))) self.reset_parameters() def reset_parameters(self) -> None: - """ Initialize exponential scaling parameter alpha. """ + """Initialize exponential scaling parameter alpha.""" nn.init.constant_(self._alpha, softplus_inverse(self.ini_alpha)) def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: diff --git a/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py b/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py index 5c188740..a8612487 100644 --- a/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py +++ b/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py @@ -32,7 +32,7 @@ def __init__( ini_alpha: float = 0.9448630629184640, exp_weighting: bool = False, ) -> None: - """ Initializes the ExponentialGaussianFunctions class. """ + """Initializes the ExponentialGaussianFunctions class.""" super(ExponentialGaussianFunctions, self).__init__() self.ini_alpha = ini_alpha self.exp_weighting = exp_weighting @@ -46,19 +46,13 @@ def __init__( torch.tensor(1.0 * (num_basis_functions + 1), dtype=torch.float64), ) else: - self.register_buffer( - "center", torch.linspace(1, 0, num_basis_functions, dtype=torch.float64) - ) - self.register_buffer( - "width", torch.tensor(1.0 * num_basis_functions, dtype=torch.float64) - ) - self.register_parameter( - "_alpha", nn.Parameter(torch.tensor(1.0, dtype=torch.float64)) - ) + self.register_buffer("center", torch.linspace(1, 0, num_basis_functions, dtype=torch.float64)) + self.register_buffer("width", torch.tensor(1.0 * num_basis_functions, dtype=torch.float64)) + self.register_parameter("_alpha", nn.Parameter(torch.tensor(1.0, dtype=torch.float64))) self.reset_parameters() def reset_parameters(self) -> None: - """ Initialize exponential scaling parameter alpha. """ + """Initialize exponential scaling parameter alpha.""" nn.init.constant_(self._alpha, softplus_inverse(self.ini_alpha)) def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: @@ -79,9 +73,7 @@ def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: Values of the radial basis functions for the distances r. """ expalphar = torch.exp(-F.softplus(self._alpha) * r.view(-1, 1)) - rbf = cutoff_values.view(-1, 1) * torch.exp( - -self.width * (expalphar - self.center) ** 2 - ) + rbf = cutoff_values.view(-1, 1) * torch.exp(-self.width * (expalphar - self.center) ** 2) if self.exp_weighting: return rbf * expalphar else: diff --git a/nff/nn/models/spooky_net_source/modules/gaussian_functions.py b/nff/nn/models/spooky_net_source/modules/gaussian_functions.py index 527be8d2..a751dc7e 100644 --- a/nff/nn/models/spooky_net_source/modules/gaussian_functions.py +++ b/nff/nn/models/spooky_net_source/modules/gaussian_functions.py @@ -20,21 +20,18 @@ class GaussianFunctions(nn.Module): """ def __init__(self, num_basis_functions: int, cutoff: float) -> None: - """ Initializes the GaussianFunctions class. """ + """Initializes the GaussianFunctions class.""" super(GaussianFunctions, self).__init__() self.register_buffer("cutoff", torch.tensor(cutoff, dtype=torch.float64)) self.register_buffer( "center", torch.linspace(0, cutoff, num_basis_functions, dtype=torch.float64), ) - self.register_buffer( - "width", torch.tensor(num_basis_functions / cutoff, dtype=torch.float64) - ) + self.register_buffer("width", torch.tensor(num_basis_functions / cutoff, dtype=torch.float64)) self.reset_parameters() def reset_parameters(self) -> None: - """ For compatibility with other modules. """ - pass + """For compatibility with other modules.""" def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: """ @@ -54,7 +51,5 @@ def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: rbf (FloatTensor [N, num_basis_functions]): Values of the radial basis functions for the distances r. """ - rbf = cutoff_values.view(-1, 1) * torch.exp( - -self.width * (r.view(-1, 1) - self.center) ** 2 - ) + rbf = cutoff_values.view(-1, 1) * torch.exp(-self.width * (r.view(-1, 1) - self.center) ** 2) return rbf diff --git a/nff/nn/models/spooky_net_source/modules/interaction_module.py b/nff/nn/models/spooky_net_source/modules/interaction_module.py index 0d23f018..48821fe0 100644 --- a/nff/nn/models/spooky_net_source/modules/interaction_module.py +++ b/nff/nn/models/spooky_net_source/modules/interaction_module.py @@ -57,7 +57,7 @@ def __init__( num_residual_output: int, activation: str = "swish", ) -> None: - """ Initializes the InteractionModule class. """ + """Initializes the InteractionModule class.""" super(InteractionModule, self).__init__() # initialize modules self.local_interaction = LocalInteraction( @@ -79,14 +79,11 @@ def __init__( ) self.residual_pre = ResidualStack(num_features, num_residual_pre, activation) self.residual_post = ResidualStack(num_features, num_residual_post, activation) - self.resblock = ResidualMLP( - num_features, num_residual_output, activation=activation - ) + self.resblock = ResidualMLP(num_features, num_residual_output, activation=activation) self.reset_parameters() def reset_parameters(self) -> None: - """ For compatibility with other modules. """ - pass + """For compatibility with other modules.""" def forward( self, diff --git a/nff/nn/models/spooky_net_source/modules/local_interaction.py b/nff/nn/models/spooky_net_source/modules/local_interaction.py index 55115dcc..f2d6b02f 100644 --- a/nff/nn/models/spooky_net_source/modules/local_interaction.py +++ b/nff/nn/models/spooky_net_source/modules/local_interaction.py @@ -39,7 +39,7 @@ def __init__( num_residual: int, activation: str = "swish", ) -> None: - """ Initializes the LocalInteraction class. """ + """Initializes the LocalInteraction class.""" super(LocalInteraction, self).__init__() self.radial_s = nn.Linear(num_basis_functions, num_features, bias=False) self.radial_p = nn.Linear(num_basis_functions, num_features, bias=False) @@ -50,13 +50,11 @@ def __init__( self.resblock_d = ResidualMLP(num_features, num_residual_d, activation) self.projection_p = nn.Linear(num_features, 2 * num_features, bias=False) self.projection_d = nn.Linear(num_features, 2 * num_features, bias=False) - self.resblock = ResidualMLP( - num_features, num_residual, activation, zero_init=True - ) + self.resblock = ResidualMLP(num_features, num_residual, activation, zero_init=True) self.reset_parameters() def reset_parameters(self) -> None: - """ Initialize parameters. """ + """Initialize parameters.""" nn.init.orthogonal_(self.radial_s.weight) nn.init.orthogonal_(self.radial_p.weight) nn.init.orthogonal_(self.radial_d.weight) diff --git a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py index 67306df7..0d5664f9 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py @@ -32,16 +32,12 @@ class NonlinearElectronicEmbedding(nn.Module): 'ssp': Shifted softplus activation function. """ - def __init__( - self, num_features: int, num_residual: int, activation: str = "swish" - ) -> None: - """ Initializes the NonlinearElectronicEmbedding class. """ + def __init__(self, num_features: int, num_residual: int, activation: str = "swish") -> None: + """Initializes the NonlinearElectronicEmbedding class.""" super(NonlinearElectronicEmbedding, self).__init__() self.linear_q = nn.Linear(num_features, num_features, bias=False) self.featurize_k = nn.Linear(1, num_features) - self.resblock_k = ResidualMLP( - num_features, num_residual, activation=activation, zero_init=True - ) + self.resblock_k = ResidualMLP(num_features, num_residual, activation=activation, zero_init=True) self.featurize_v = nn.Linear(1, num_features, bias=False) self.resblock_v = ResidualMLP( num_features, @@ -53,7 +49,7 @@ def __init__( self.reset_parameters() def reset_parameters(self) -> None: - """ Initialize parameters. """ + """Initialize parameters.""" nn.init.orthogonal_(self.linear_q.weight) nn.init.orthogonal_(self.featurize_k.weight) nn.init.zeros_(self.featurize_k.bias) @@ -84,11 +80,7 @@ def forward( # determine maximum dot product (for numerics) if num_batch > 1: if mask is None: - mask = ( - nn.functional.one_hot(batch_seg) - .to(dtype=x.dtype, device=x.device) - .transpose(-1, -2) - ) + mask = nn.functional.one_hot(batch_seg).to(dtype=x.dtype, device=x.device).transpose(-1, -2) tmp = dot.view(1, -1).expand(num_batch, -1) tmp, _ = torch.max(mask * tmp, dim=-1) if tmp.device.type == "cpu": # indexing is faster on CPUs @@ -99,7 +91,7 @@ def forward( maximum = torch.max(dot) # attention d = k.shape[-1] - a = torch.exp((dot - maximum) / d ** 0.5) + a = torch.exp((dot - maximum) / d**0.5) anorm = a.new_zeros(num_batch).index_add_(0, batch_seg, a) if a.device.type == "cpu": # indexing is faster on CPUs diff --git a/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py b/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py index 73c14d32..6617fde7 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py +++ b/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py @@ -38,23 +38,16 @@ def __init__( num_residual_v: int, activation: str = "swish", ) -> None: - """ Initializes the NonlocalInteraction class. """ + """Initializes the NonlocalInteraction class.""" super(NonlocalInteraction, self).__init__() - self.resblock_q = ResidualMLP( - num_features, num_residual_q, activation=activation, zero_init=True - ) - self.resblock_k = ResidualMLP( - num_features, num_residual_k, activation=activation, zero_init=True - ) - self.resblock_v = ResidualMLP( - num_features, num_residual_v, activation=activation, zero_init=True - ) + self.resblock_q = ResidualMLP(num_features, num_residual_q, activation=activation, zero_init=True) + self.resblock_k = ResidualMLP(num_features, num_residual_k, activation=activation, zero_init=True) + self.resblock_v = ResidualMLP(num_features, num_residual_v, activation=activation, zero_init=True) self.attention = Attention(num_features, num_features, num_features) self.reset_parameters() def reset_parameters(self) -> None: - """ For compatibility with other modules. """ - pass + """For compatibility with other modules.""" def forward( self, diff --git a/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py b/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py index 89003e29..9f102d8c 100644 --- a/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py @@ -24,26 +24,18 @@ class NuclearEmbedding(nn.Module): value (has minimal memory impact). """ - def __init__( - self, num_features: int, Zmax: int = 87, zero_init: bool = True - ) -> None: - """ Initializes the NuclearEmbedding class. """ + def __init__(self, num_features: int, Zmax: int = 87, zero_init: bool = True) -> None: + """Initializes the NuclearEmbedding class.""" super(NuclearEmbedding, self).__init__() self.num_features = num_features self.register_buffer("electron_config", torch.tensor(electron_config)) - self.register_parameter( - "element_embedding", nn.Parameter(torch.Tensor(Zmax, self.num_features)) - ) - self.register_buffer( - "embedding", torch.Tensor(Zmax, self.num_features), persistent=False - ) - self.config_linear = nn.Linear( - self.electron_config.size(1), self.num_features, bias=False - ) + self.register_parameter("element_embedding", nn.Parameter(torch.Tensor(Zmax, self.num_features))) + self.register_buffer("embedding", torch.Tensor(Zmax, self.num_features), persistent=False) + self.config_linear = nn.Linear(self.electron_config.size(1), self.num_features, bias=False) self.reset_parameters(zero_init) def reset_parameters(self, zero_init: bool = True) -> None: - """ Initialize parameters. """ + """Initialize parameters.""" if zero_init: nn.init.zeros_(self.element_embedding) nn.init.zeros_(self.config_linear.weight) @@ -52,13 +44,11 @@ def reset_parameters(self, zero_init: bool = True) -> None: nn.init.orthogonal_(self.config_linear.weight) def train(self, mode: bool = True) -> None: - """ Switch between training and evaluation mode. """ + """Switch between training and evaluation mode.""" super(NuclearEmbedding, self).train(mode=mode) if not self.training: with torch.no_grad(): - self.embedding = self.element_embedding + self.config_linear( - self.electron_config - ) + self.embedding = self.element_embedding + self.config_linear(self.electron_config) def forward(self, Z: torch.Tensor) -> torch.Tensor: """ @@ -75,12 +65,8 @@ def forward(self, Z: torch.Tensor) -> torch.Tensor: Embeddings of all atoms. """ if self.training: # during training, the embedding needs to be recomputed - self.embedding = self.element_embedding + self.config_linear( - self.electron_config - ) + self.embedding = self.element_embedding + self.config_linear(self.electron_config) if self.embedding.device.type == "cpu": # indexing is faster on CPUs return self.embedding[Z] else: # gathering is faster on GPUs - return torch.gather( - self.embedding, 0, Z.view(-1, 1).expand(-1, self.num_features) - ) + return torch.gather(self.embedding, 0, Z.view(-1, 1).expand(-1, self.num_features)) diff --git a/nff/nn/models/spooky_net_source/modules/residual.py b/nff/nn/models/spooky_net_source/modules/residual.py index 6a0b93c2..0132765e 100644 --- a/nff/nn/models/spooky_net_source/modules/residual.py +++ b/nff/nn/models/spooky_net_source/modules/residual.py @@ -26,7 +26,7 @@ def __init__( bias: bool = True, zero_init: bool = True, ) -> None: - """ Initializes the Residual class. """ + """Initializes the Residual class.""" super(Residual, self).__init__() # initialize attributes if activation == "ssp": @@ -45,7 +45,7 @@ def __init__( self.reset_parameters(bias, zero_init) def reset_parameters(self, bias: bool = True, zero_init: bool = True) -> None: - """ Initialize parameters to compute an identity mapping. """ + """Initialize parameters to compute an identity mapping.""" nn.init.orthogonal_(self.linear1.weight) if zero_init: nn.init.zeros_(self.linear2.weight) diff --git a/nff/nn/models/spooky_net_source/modules/residual_mlp.py b/nff/nn/models/spooky_net_source/modules/residual_mlp.py index 2961195a..8e5f4662 100644 --- a/nff/nn/models/spooky_net_source/modules/residual_mlp.py +++ b/nff/nn/models/spooky_net_source/modules/residual_mlp.py @@ -16,9 +16,7 @@ def __init__( zero_init: bool = False, ) -> None: super(ResidualMLP, self).__init__() - self.residual = ResidualStack( - num_features, num_residual, activation=activation, bias=bias, zero_init=True - ) + self.residual = ResidualStack(num_features, num_residual, activation=activation, bias=bias, zero_init=True) # initialize activation function if activation == "ssp": self.activation = ShiftedSoftplus(num_features) diff --git a/nff/nn/models/spooky_net_source/modules/residual_stack.py b/nff/nn/models/spooky_net_source/modules/residual_stack.py index 5c10838a..c90e6bb9 100644 --- a/nff/nn/models/spooky_net_source/modules/residual_stack.py +++ b/nff/nn/models/spooky_net_source/modules/residual_stack.py @@ -27,14 +27,9 @@ def __init__( bias: bool = True, zero_init: bool = True, ) -> None: - """ Initializes the ResidualStack class. """ + """Initializes the ResidualStack class.""" super(ResidualStack, self).__init__() - self.stack = nn.ModuleList( - [ - Residual(num_features, activation, bias, zero_init) - for i in range(num_residual) - ] - ) + self.stack = nn.ModuleList([Residual(num_features, activation, bias, zero_init) for i in range(num_residual)]) def forward(self, x: torch.Tensor) -> torch.Tensor: """ diff --git a/nff/nn/models/spooky_net_source/modules/shifted_softplus.py b/nff/nn/models/spooky_net_source/modules/shifted_softplus.py index a8750cf8..a3e68dea 100644 --- a/nff/nn/models/spooky_net_source/modules/shifted_softplus.py +++ b/nff/nn/models/spooky_net_source/modules/shifted_softplus.py @@ -21,10 +21,8 @@ class ShiftedSoftplus(nn.Module): Initial "temperature" beta of the softplus function. """ - def __init__( - self, num_features: int, initial_alpha: float = 1.0, initial_beta: float = 1.0 - ) -> None: - """ Initializes the ShiftedSoftplus class. """ + def __init__(self, num_features: int, initial_alpha: float = 1.0, initial_beta: float = 1.0) -> None: + """Initializes the ShiftedSoftplus class.""" super(ShiftedSoftplus, self).__init__() self._log2 = math.log(2) self.initial_alpha = initial_alpha @@ -34,7 +32,7 @@ def __init__( self.reset_parameters() def reset_parameters(self) -> None: - """ Initialize parameters alpha and beta. """ + """Initialize parameters alpha and beta.""" nn.init.constant_(self.alpha, self.initial_alpha) nn.init.constant_(self.beta, self.initial_beta) diff --git a/nff/nn/models/spooky_net_source/modules/sinc_functions.py b/nff/nn/models/spooky_net_source/modules/sinc_functions.py index 4da731cc..9df69ade 100644 --- a/nff/nn/models/spooky_net_source/modules/sinc_functions.py +++ b/nff/nn/models/spooky_net_source/modules/sinc_functions.py @@ -28,20 +28,16 @@ class SincFunctions(nn.Module): """ def __init__(self, num_basis_functions: int, cutoff: float) -> None: - """ Initializes the SincFunctions class. """ + """Initializes the SincFunctions class.""" super(SincFunctions, self).__init__() self.register_buffer( "factor", - torch.linspace( - 1, num_basis_functions, num_basis_functions, dtype=torch.float64 - ) - / cutoff, + torch.linspace(1, num_basis_functions, num_basis_functions, dtype=torch.float64) / cutoff, ) self.reset_parameters() def reset_parameters(self) -> None: - """ For compatibility with other modules. """ - pass + """For compatibility with other modules.""" def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: """ diff --git a/nff/nn/models/spooky_net_source/modules/swish.py b/nff/nn/models/spooky_net_source/modules/swish.py index 086796f8..7ff53dce 100644 --- a/nff/nn/models/spooky_net_source/modules/swish.py +++ b/nff/nn/models/spooky_net_source/modules/swish.py @@ -23,10 +23,8 @@ class Swish(nn.Module): (GELUs)." """ - def __init__( - self, num_features: int, initial_alpha: float = 1.0, initial_beta: float = 1.702 - ) -> None: - """ Initializes the Swish class. """ + def __init__(self, num_features: int, initial_alpha: float = 1.0, initial_beta: float = 1.702) -> None: + """Initializes the Swish class.""" super(Swish, self).__init__() self.initial_alpha = initial_alpha self.initial_beta = initial_beta @@ -35,7 +33,7 @@ def __init__( self.reset_parameters() def reset_parameters(self) -> None: - """ Initialize parameters alpha and beta. """ + """Initialize parameters alpha and beta.""" nn.init.constant_(self.alpha, self.initial_alpha) nn.init.constant_(self.beta, self.initial_beta) diff --git a/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py b/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py index 396fb23a..6b5e2525 100644 --- a/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py +++ b/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py @@ -20,10 +20,8 @@ class ZBLRepulsionEnergy(nn.Module): lengths in Angstrom and energy in electronvolt). """ - def __init__( - self, a0: float = 0.5291772105638411, ke: float = 14.399645351950548 - ) -> None: - """ Initializes the ZBLRepulsionEnergy class. """ + def __init__(self, a0: float = 0.5291772105638411, ke: float = 14.399645351950548) -> None: + """Initializes the ZBLRepulsionEnergy class.""" super(ZBLRepulsionEnergy, self).__init__() self.a0 = a0 self.ke = ke @@ -41,7 +39,7 @@ def __init__( self.reset_parameters() def reset_parameters(self) -> None: - """ Initialize parameters to the default ZBL potential. """ + """Initialize parameters to the default ZBL potential.""" nn.init.constant_(self._adiv, softplus_inverse(1 / (0.8854 * self.a0))) nn.init.constant_(self._apow, softplus_inverse(0.23)) nn.init.constant_(self._c1, softplus_inverse(0.18180)) diff --git a/nff/nn/models/spooky_net_source/spookynet.py b/nff/nn/models/spooky_net_source/spookynet.py index 8b41c972..96172d51 100644 --- a/nff/nn/models/spooky_net_source/spookynet.py +++ b/nff/nn/models/spooky_net_source/spookynet.py @@ -145,7 +145,7 @@ def __init__( zero_init=True, **kwargs, ) -> None: - """ Initializes the SpookyNet class. """ + """Initializes the SpookyNet class.""" super(SpookyNet, self).__init__() # load state from a file (if load_from is not None) and overwrite @@ -234,14 +234,10 @@ def __init__( # declare modules and parameters # element specific energy and charge bias - self.register_parameter( - "element_bias", nn.Parameter(torch.Tensor(self.Zmax, 2)) - ) + self.register_parameter("element_bias", nn.Parameter(torch.Tensor(self.Zmax, 2))) # embeddings - self.nuclear_embedding = NuclearEmbedding( - self.num_features, self.Zmax, zero_init=zero_init - ) + self.nuclear_embedding = NuclearEmbedding(self.num_features, self.Zmax, zero_init=zero_init) if self.use_nonlinear_embedding: self.charge_embedding = NonlinearElectronicEmbedding( self.num_features, self.num_residual_electron, activation @@ -273,17 +269,11 @@ def __init__( self.num_basis_functions, exp_weighting=self.exp_weighting ) elif self.basis_functions == "gaussian": - self.radial_basis_functions = GaussianFunctions( - self.num_basis_functions, self.cutoff - ) + self.radial_basis_functions = GaussianFunctions(self.num_basis_functions, self.cutoff) elif self.basis_functions == "bernstein": - self.radial_basis_functions = BernsteinPolynomials( - self.num_basis_functions, self.cutoff - ) + self.radial_basis_functions = BernsteinPolynomials(self.num_basis_functions, self.cutoff) elif self.basis_functions == "sinc": - self.radial_basis_functions = SincFunctions( - self.num_basis_functions, self.cutoff - ) + self.radial_basis_functions = SincFunctions(self.num_basis_functions, self.cutoff) else: raise ValueError( "Argument 'basis_functions' may only take the " @@ -347,9 +337,7 @@ def __init__( # runtime exception may happen if state_dict was saved with an older # version of the code, but it should be possible to convert it except RuntimeError: - self.load_state_dict( - self._convert_state_dict(saved_state["state_dict"]) - ) + self.load_state_dict(self._convert_state_dict(saved_state["state_dict"])) if use_d4_dispersion: self.d4_dispersion_energy._compute_refc6() @@ -357,7 +345,7 @@ def __init__( self.build_requires_grad_dict() def reset_parameters(self) -> None: - """ Initialize parameters randomly. """ + """Initialize parameters randomly.""" nn.init.orthogonal_(self.output.weight) nn.init.zeros_(self.element_bias) @@ -374,22 +362,22 @@ def set_lr_cutoff(self, lr_cutoff: Optional[float] = None) -> None: @property def dtype(self) -> torch.dtype: - """ Return torch.dtype of parameters (input tensors must match). """ + """Return torch.dtype of parameters (input tensors must match).""" return self.nuclear_embedding.element_embedding.dtype @property def device(self) -> torch.device: - """ Return torch.device of parameters (input tensors must match). """ + """Return torch.device of parameters (input tensors must match).""" return self.nuclear_embedding.element_embedding.device def train(self, mode: bool = True) -> None: - """ Turn on training mode. """ + """Turn on training mode.""" super(SpookyNet, self).train(mode=mode) for name, param in self.named_parameters(): param.requires_grad = self.requires_grad_dict[name] def eval(self) -> None: - """ Turn on evaluation mode (smaller memory footprint).""" + """Turn on evaluation mode (smaller memory footprint).""" super(SpookyNet, self).eval() for name, param in self.named_parameters(): param.requires_grad = False @@ -454,8 +442,9 @@ def _convert_state_dict(self, old_state_dict: dict) -> dict: Helper function to convert a state_dict saved with an old version of the code to the current version. """ + def prefix_postfix(string, pattern, prefix="resblock", sep=".", presep="_"): - """ Helper function for converting keys """ + """Helper function for converting keys""" parts = string.split(sep) for i, part in enumerate(parts): if pattern + presep in part: @@ -467,19 +456,11 @@ def prefix_postfix(string, pattern, prefix="resblock", sep=".", presep="_"): if old_key == "idx" or old_key == "mul": continue - if ( - "local_interaction.residual_" in old_key - or "embedding.residual_" in old_key - ): + if "local_interaction.residual_" in old_key or "embedding.residual_" in old_key: new_key = prefix_postfix(old_key, "residual") - elif ( - "local_interaction.activation_" in old_key - or "embedding.activation_" in old_key - ): + elif "local_interaction.activation_" in old_key or "embedding.activation_" in old_key: new_key = prefix_postfix(old_key, "activation") - elif ( - "local_interaction.linear_" in old_key or "embedding.linear_" in old_key - ): + elif "local_interaction.linear_" in old_key or "embedding.linear_" in old_key: if "embedding.linear_q" in old_key: new_key = old_key else: @@ -511,7 +492,7 @@ def prefix_postfix(string, pattern, prefix="resblock", sep=".", presep="_"): return new_state_dict def get_number_of_parameters(self) -> int: - """ Returns the total number of parameters. """ + """Returns the total number of parameters.""" num = 0 for param in self.parameters(): num += param.numel() @@ -567,9 +548,7 @@ def calculate_distances( else: # gathering is faster on GPUs Ri = torch.gather(R, 0, idx_i.view(-1, 1).expand(-1, 3)) Rj = torch.gather(R, 0, idx_j.view(-1, 1).expand(-1, 3)) - if ( - cell is not None and cell_offsets is not None and batch_seg is not None - ): # apply PBCs + if cell is not None and cell_offsets is not None and batch_seg is not None: # apply PBCs if cell.device.type == "cpu": # indexing is faster on CPUs cells = cell[batch_seg][idx_i] else: # gathering is faster on GPUs @@ -630,8 +609,7 @@ def _atomic_properties_static( self._sqrt3 * pij[:, 0] * pij[:, 2], # xz self._sqrt3 * pij[:, 1] * pij[:, 2], # yz 0.5 * (3 * pij[:, 2] * pij[:, 2] - 1.0), # z2 - self._sqrt3half - * (pij[:, 0] * pij[:, 0] - pij[:, 1] * pij[:, 1]), # x2-y2 + self._sqrt3half * (pij[:, 0] * pij[:, 0] - pij[:, 1] * pij[:, 1]), # x2-y2 ], dim=-1, ) @@ -653,9 +631,7 @@ def _atomic_properties_static( # mask for efficient attention if num_batch > 1 and batch_seg is not None: - one_hot = nn.functional.one_hot(batch_seg).to( - dtype=R.dtype, device=R.device - ) + one_hot = nn.functional.one_hot(batch_seg).to(dtype=R.dtype, device=R.device) mask = one_hot @ one_hot.transpose(-1, -2) else: mask = None @@ -714,11 +690,7 @@ def _atomic_properties_dynamic( # initialize feature vectors z = self.nuclear_embedding(Z) if num_batch > 1: - electronic_mask = ( - nn.functional.one_hot(batch_seg) - .to(dtype=rij.dtype, device=rij.device) - .transpose(-1, -2) - ) + electronic_mask = nn.functional.one_hot(batch_seg).to(dtype=rij.dtype, device=rij.device).transpose(-1, -2) else: electronic_mask = None q = self.charge_embedding(z, Q, num_batch, batch_seg, electronic_mask) @@ -731,9 +703,7 @@ def _atomic_properties_dynamic( # perform iterations over modules f = x.new_zeros(x.size()) # initialize output features to zero for module in self.module: - x, y = module( - x, rbf, pij, dij, sr_idx_i, sr_idx_j, num_batch, batch_seg, mask - ) + x, y = module(x, rbf, pij, dij, sr_idx_i, sr_idx_j, num_batch, batch_seg, mask) # apply dropout mask if self.training and self.module_keep_prob < 1.0: y = y * dropout_mask[batch_seg] @@ -773,16 +743,12 @@ def _atomic_properties_dynamic( # compute ZBL inspired short-range repulsive contributions if self.use_zbl_repulsion: - ea_rep = self.zbl_repulsion_energy( - N, Z.to(self.dtype), sr_rij, cutoff_values, sr_idx_i, sr_idx_j - ) + ea_rep = self.zbl_repulsion_energy(N, Z.to(self.dtype), sr_rij, cutoff_values, sr_idx_i, sr_idx_j) else: ea_rep = ea.new_zeros(N) # optimization when lr_cutoff is used - if self.lr_cutoff is not None and ( - self.use_electrostatics or self.use_d4_dispersion - ): + if self.lr_cutoff is not None and (self.use_electrostatics or self.use_d4_dispersion): mask = rij < self.lr_cutoff # select all entries below lr_cutoff rij = rij[mask] idx_i = idx_i[mask] @@ -790,16 +756,12 @@ def _atomic_properties_dynamic( # compute electrostatic contributions if self.use_electrostatics: - ea_ele = self.electrostatic_energy( - N, qa, rij, idx_i, idx_j, R, cell, num_batch, batch_seg - ) + ea_ele = self.electrostatic_energy(N, qa, rij, idx_i, idx_j, R, cell, num_batch, batch_seg) else: ea_ele = ea.new_zeros(N) # compute dispersion contributions if self.use_d4_dispersion: - ea_vdw, pa, c6 = self.d4_dispersion_energy( - N, Z, qa, rij, idx_i, idx_j, self.compute_d4_atomic - ) + ea_vdw, pa, c6 = self.d4_dispersion_energy(N, Z, qa, rij, idx_i, idx_j, self.compute_d4_atomic) else: ea_vdw, pa, c6 = ea.new_zeros(N), ea.new_zeros(N), ea.new_zeros(N) return (f, ea, qa, ea_rep, ea_ele, ea_vdw, pa, c6) @@ -986,9 +948,7 @@ def energy( num_batch=num_batch, batch_seg=batch_seg, ) - energy = ea.new_zeros(num_batch).index_add_( - 0, batch_seg, ea + ea_rep + ea_ele + ea_vdw - ) + energy = ea.new_zeros(num_batch).index_add_(0, batch_seg, ea + ea_rep + ea_ele + ea_vdw) return (energy, f, ea, qa, ea_rep, ea_ele, ea_vdw, pa, c6) @torch.jit.export @@ -1050,9 +1010,7 @@ def energy_and_forces( batch_seg=batch_seg, ) if idx_i.numel() > 0: # autograd will fail if there are no distances - grad = torch.autograd.grad( - [torch.sum(energy)], [R], create_graph=create_graph - )[0] + grad = torch.autograd.grad([torch.sum(energy)], [R], create_graph=create_graph)[0] if grad is not None: # necessary for torch.jit compatibility forces = -grad else: @@ -1244,9 +1202,7 @@ def forward( ) forces = torch.zeros_like(R) if use_dipole: - dipole = qa.new_zeros((num_batch, 3)).index_add_( - 0, batch_seg, qa.view(-1, 1) * R - ) + dipole = qa.new_zeros((num_batch, 3)).index_add_(0, batch_seg, qa.view(-1, 1) * R) else: dipole = qa.new_zeros((num_batch, 3)) return energy, forces, dipole, f, ea, qa, ea_rep, ea_ele, ea_vdw, pa, c6 diff --git a/nff/nn/models/spooky_net_source/spookynet_calculator.py b/nff/nn/models/spooky_net_source/spookynet_calculator.py index 39c49e89..b62c3426 100644 --- a/nff/nn/models/spooky_net_source/spookynet_calculator.py +++ b/nff/nn/models/spooky_net_source/spookynet_calculator.py @@ -12,6 +12,7 @@ class SpookyNetCalculator(Calculator): """ This module defines an ASE interface for SpookyNet. """ + implemented_properties = ["energy", "forces", "hessian", "dipole", "charges"] default_parameters = dict( @@ -23,32 +24,18 @@ class SpookyNetCalculator(Calculator): skin=0.3, # skin-distance for building neighborlists ) - def __init__( - self, - restart=None, - ignore_bad_restart_file=False, - label=None, - atoms=None, - **kwargs - ): - Calculator.__init__( - self, restart, ignore_bad_restart_file, label, atoms, **kwargs - ) + def __init__(self, restart=None, ignore_bad_restart_file=False, label=None, atoms=None, **kwargs): + Calculator.__init__(self, restart, ignore_bad_restart_file, label, atoms, **kwargs) self.lr_cutoff = self.parameters.lr_cutoff if type(self.parameters.load_from) is list: self.ensemble = True self.spookynet = SpookyNetEnsemble(models=self.parameters.load_from) sr_cutoff = self.spookynet.models[0].cutoff self.cutoff = sr_cutoff - self.use_lr = ( - self.spookynet.models[0].use_d4_dispersion - or self.spookynet.models[0].use_electrostatics - ) + self.use_lr = self.spookynet.models[0].use_d4_dispersion or self.spookynet.models[0].use_electrostatics for model in self.spookynet.models: assert sr_cutoff == model.cutoff - assert self.use_lr == ( - model.use_d4_dispersion or model.use_electrostatics - ) + assert self.use_lr == (model.use_d4_dispersion or model.use_electrostatics) if self.lr_cutoff is not None: # overwrite lr_cutoff if one is given model.set_lr_cutoff(self.lr_cutoff) if model.lr_cutoff is not None: @@ -61,9 +48,7 @@ def __init__( self.ensemble = False self.spookynet = SpookyNet(load_from=self.parameters.load_from) self.cutoff = self.spookynet.cutoff - self.use_lr = ( - self.spookynet.use_d4_dispersion or self.spookynet.use_electrostatics - ) + self.use_lr = self.spookynet.use_d4_dispersion or self.spookynet.use_electrostatics if self.lr_cutoff is not None: # overwrite lr_cutoff if one is given self.spookynet.set_lr_cutoff(self.lr_cutoff) if self.spookynet.lr_cutoff is not None: @@ -78,11 +63,9 @@ def __init__( self.calc_hessian = False self.converged = True # for compatibility with other calculators # for the neighborlist - self.skin2 = self.parameters.skin ** 2 + self.skin2 = self.parameters.skin**2 assert self.parameters.skin >= 0 - self.cutoff += ( - 2 * self.parameters.skin - ) # cutoff needs to be larger when skin is used + self.cutoff += 2 * self.parameters.skin # cutoff needs to be larger when skin is used self.N = 0 self.positions = None self.pbc = np.array([False]) @@ -120,10 +103,7 @@ def _periodic_neighborlist(self, atoms): self.cell_offsets = torch.tensor(cell_offsets, dtype=self.dtype) def _non_periodic_neighborlist(self, atoms): - if ( - self.N != len(atoms) - or ((self.positions - atoms.positions) ** 2).sum(-1).max() >= self.skin2 - ): + if self.N != len(atoms) or ((self.positions - atoms.positions) ** 2).sum(-1).max() >= self.skin2: self.N = len(atoms) self.positions = np.copy(atoms.positions) self.pbc = np.array([False]) @@ -161,9 +141,7 @@ def calculate(self, atoms=None, properties=["energy"], system_changes=all_change "R": torch.tensor(atoms.positions, dtype=self.dtype, requires_grad=True), "idx_i": self.idx_i, "idx_j": self.idx_j, - "cell": None - if not atoms.pbc.any() - else torch.tensor([atoms.cell], dtype=self.dtype), + "cell": None if not atoms.pbc.any() else torch.tensor([atoms.cell], dtype=self.dtype), "cell_offsets": self.cell_offsets, } @@ -217,29 +195,22 @@ def calculate(self, atoms=None, properties=["energy"], system_changes=all_change self.results["forces_std"] = forces[1].detach().cpu().numpy() self.results["charges"] = qa[0].detach().cpu().numpy() self.results["charges_std"] = qa[1].detach().cpu().numpy() - self.results["dipole"] = np.sum( - atoms.get_positions() * self.results["charges"][:, None], 0 - ) - self.results["dipole_std"] = np.sum( - atoms.get_positions() * self.results["charges_std"][:, None], 0 - ) + self.results["dipole"] = np.sum(atoms.get_positions() * self.results["charges"][:, None], 0) + self.results["dipole_std"] = np.sum(atoms.get_positions() * self.results["charges_std"][:, None], 0) else: self.results["features"] = f.detach().cpu().numpy() self.results["energy"] = energy.detach().cpu().item() self.results["forces"] = forces.detach().cpu().numpy() self.results["charges"] = qa.detach().cpu().numpy() - self.results["dipole"] = np.sum( - atoms.get_positions() * self.results["charges"][:, None], 0 - ) + self.results["dipole"] = np.sum(atoms.get_positions() * self.results["charges"][:, None], 0) def set_to_gradient_calculation(self): - """ For compatibility with other calculators. """ + """For compatibility with other calculators.""" self.calc_hessian = False def set_to_hessian_calculation(self): - """ For compatibility with other calculators. """ + """For compatibility with other calculators.""" self.calc_hessian = True def clear_restart_file(self): - """ For compatibility with scripts that use file i/o calculators. """ - pass + """For compatibility with scripts that use file i/o calculators.""" diff --git a/nff/nn/models/spooky_net_source/spookynet_ensemble.py b/nff/nn/models/spooky_net_source/spookynet_ensemble.py index 041b6b99..8b882bc2 100644 --- a/nff/nn/models/spooky_net_source/spookynet_ensemble.py +++ b/nff/nn/models/spooky_net_source/spookynet_ensemble.py @@ -16,7 +16,7 @@ class SpookyNetEnsemble(nn.Module): """ def __init__(self, models: List[str] = []) -> None: - """ Initializes the SpookyNetEnsemble class. """ + """Initializes the SpookyNetEnsemble class.""" super(SpookyNetEnsemble, self).__init__() assert len(models) > 1 self.models = nn.ModuleList([SpookyNet(load_from=model) for model in models]) @@ -25,12 +25,12 @@ def __init__(self, models: List[str] = []) -> None: @property def dtype(self) -> torch.dtype: - """ Return torch.dtype of parameters (input tensors must match). """ + """Return torch.dtype of parameters (input tensors must match).""" return self.models[0].dtype @property def device(self) -> torch.device: - """ Return torch.device of parameters (input tensors must match). """ + """Return torch.device of parameters (input tensors must match).""" return self.models[0].device def train(self, mode=True) -> None: @@ -43,7 +43,7 @@ def train(self, mode=True) -> None: model.train(mode) def eval(self) -> None: - """ Turn on evaluation mode (smaller memory footprint).""" + """Turn on evaluation mode (smaller memory footprint).""" super(SpookyNetEnsemble, self).eval() for model in self.models: model.eval() @@ -137,9 +137,7 @@ def atomic_properties( c6.append(c6_) return (f, ea, qa, ea_rep, ea_ele, ea_vdw, pa, c6) - def _mean_std_from_list( - self, x: List[torch.Tensor] - ) -> Tuple[torch.Tensor, torch.Tensor]: + def _mean_std_from_list(self, x: List[torch.Tensor]) -> Tuple[torch.Tensor, torch.Tensor]: """ Given a list of tensors, computes their mean and standard deviation. Only used internally. @@ -271,9 +269,7 @@ def energy_and_forces( else: forces_mean = torch.zeros_like(R) if calculate_forces_std: - grad_std = torch.autograd.grad( - [torch.sum(energy[1])], [R], create_graph=create_graph - )[0] + grad_std = torch.autograd.grad([torch.sum(energy[1])], [R], create_graph=create_graph)[0] if grad_std is not None: # necessary for torch.jit compatibility forces_std = torch.abs(grad_std) else: @@ -357,15 +353,11 @@ def energy_and_forces_and_hessian( for idx in range(s): # loop through entries of the hessian # retain graph when the index is smaller than the max index, # else computation fails - tmp = torch.autograd.grad( - [grad_mean[idx]], [R], retain_graph=(idx < s) - )[0] + tmp = torch.autograd.grad([grad_mean[idx]], [R], retain_graph=(idx < s))[0] if tmp is not None: # necessary for torch.jit compatibility hessian_mean[idx] = tmp.view(-1) if calculate_hessian_std and calculate_forces_std: - tmp = torch.autograd.grad( - [grad_std[idx]], [R], retain_graph=(idx < s) - )[0] + tmp = torch.autograd.grad([grad_std[idx]], [R], retain_graph=(idx < s))[0] if tmp is not None: # necessary for torch.jit compatibility hessian_std[idx] = tmp.view(-1) hessian = (hessian_mean, hessian_std) @@ -452,16 +444,8 @@ def forward( ) forces = (torch.zeros_like(R), torch.zeros_like(R)) if use_dipole: - dipole_mean = ( - qa[0] - .new_zeros((num_batch, 3)) - .index_add_(0, batch_seg, qa[0].view(-1, 1) * R) - ) - dipole_std = ( - qa[1] - .new_zeros((num_batch, 3)) - .index_add_(0, batch_seg, qa[1].view(-1, 1) * R) - ) + dipole_mean = qa[0].new_zeros((num_batch, 3)).index_add_(0, batch_seg, qa[0].view(-1, 1) * R) + dipole_std = qa[1].new_zeros((num_batch, 3)).index_add_(0, batch_seg, qa[1].view(-1, 1) * R) dipole = (dipole_mean, torch.abs(dipole_std)) else: dipole = (qa[0].new_zeros((num_batch, 3)), qa[1].new_zeros((num_batch, 3))) diff --git a/nff/nn/modules/diabat.py b/nff/nn/modules/diabat.py index 5e2a20f9..a59f1fdc 100644 --- a/nff/nn/modules/diabat.py +++ b/nff/nn/modules/diabat.py @@ -391,7 +391,7 @@ def add_nans(self, batch, results, nan_idx, train): for idx in nan_grad_idx: if train: continue - results[key][idx[0]: idx[1]] = results[key][idx[0]: idx[1]] * float("nan") + results[key][idx[0] : idx[1]] = results[key][idx[0] : idx[1]] * float("nan") def forward( self, diff --git a/nff/nn/modules/dimenet.py b/nff/nn/modules/dimenet.py index d33b09fb..114a998a 100644 --- a/nff/nn/modules/dimenet.py +++ b/nff/nn/modules/dimenet.py @@ -23,7 +23,6 @@ def get_dense(inp_dim, out_dim, activation, bias): class EdgeEmbedding(nn.Module): - """ Class to create an edge embedding from edge features and node emebeddings. @@ -44,11 +43,7 @@ def __init__(self, embed_dim, n_rbf, activation): # 3 * embed_dim (one each for h_i, h_j, and e_ij) # and output dimension embed_dim. - self.dense = get_dense( - 3 * embed_dim, - embed_dim, - activation=activation, - bias=True) + self.dense = get_dense(3 * embed_dim, embed_dim, activation=activation, bias=True) def forward(self, h, e, nbr_list): """ @@ -113,15 +108,10 @@ def __init__(self, n_rbf, embed_dim, activation): # create a dense layer to convert the basis # representation of the distances into a vector # of size embed_dim - self.edge_dense = get_dense(n_rbf, - embed_dim, - activation=None, - bias=False) + self.edge_dense = get_dense(n_rbf, embed_dim, activation=None, bias=False) # make node and edge embedding layers self.node_embedding = NodeEmbedding(embed_dim) - self.edge_embedding = EdgeEmbedding(embed_dim, - n_rbf, - activation) + self.edge_embedding = EdgeEmbedding(embed_dim, n_rbf, activation) def forward(self, e_rbf, z, nbr_list): """ @@ -137,14 +127,12 @@ def forward(self, e_rbf, z, nbr_list): e = self.edge_dense(e_rbf) h = self.node_embedding(z) - m_ji = self.edge_embedding(h=h, - e=e, - nbr_list=nbr_list) + m_ji = self.edge_embedding(h=h, e=e, nbr_list=nbr_list) return m_ji class ResidualBlock(nn.Module): - """ Residual block """ + """Residual block""" def __init__(self, embed_dim, n_rbf, activation): """ @@ -159,11 +147,7 @@ def __init__(self, embed_dim, n_rbf, activation): super().__init__() # create dense layers self.dense_layers = nn.ModuleList( - [get_dense(embed_dim, - embed_dim, - activation=activation, - bias=True) - for _ in range(2)] + [get_dense(embed_dim, embed_dim, activation=activation, bias=True) for _ in range(2)] ) def forward(self, m_ji): @@ -184,19 +168,12 @@ def forward(self, m_ji): class DirectedMessage(nn.Module): - """ Module for passing directed messages based on distances and angles. """ - def __init__(self, - activation, - embed_dim, - n_rbf, - n_spher, - l_spher, - n_bilinear): + def __init__(self, activation, embed_dim, n_rbf, n_spher, l_spher, n_bilinear): """ Args: activation (str): name of activation layer @@ -217,38 +194,23 @@ def __init__(self, # dense layer to apply to m's that are in the # neighborhood of those in your neighborhood - self.m_kj_dense = get_dense(embed_dim, - embed_dim, - activation=activation, - bias=True) + self.m_kj_dense = get_dense(embed_dim, embed_dim, activation=activation, bias=True) # dense layer to apply to the rbf representation of # the distances - self.e_dense = get_dense(n_rbf, - embed_dim, - activation=None, - bias=False) + self.e_dense = get_dense(n_rbf, embed_dim, activation=None, bias=False) # dense layer to apply to the sbf representation of # the angles and distances - self.a_dense = get_dense(n_spher * l_spher, - n_bilinear, - activation=None, - bias=False) + self.a_dense = get_dense(n_spher * l_spher, n_bilinear, activation=None, bias=False) # matrix that is used to aggregate the distance # and angle information - self.w = nn.Parameter(torch.empty( - embed_dim, n_bilinear, embed_dim)) + self.w = nn.Parameter(torch.empty(embed_dim, n_bilinear, embed_dim)) nn.init.xavier_uniform_(self.w) - def forward(self, - m_ji, - e_rbf, - a_sbf, - kj_idx, - ji_idx): + def forward(self, m_ji, e_rbf, a_sbf, kj_idx, ji_idx): """ Args: m_ji (torch.Tensor): edge vector @@ -296,64 +258,31 @@ def forward(self, # use `scatter_add` with indices `ji_idx`, and give the resulting # vector the same dimension as m_ji. - out = scatter_add(aggr.transpose(0, 1), - ji_idx, - dim_size=m_ji.shape[0] - ).transpose(0, 1) + out = scatter_add(aggr.transpose(0, 1), ji_idx, dim_size=m_ji.shape[0]).transpose(0, 1) return out class DirectedMessagePP(nn.Module): - def __init__(self, - activation, - embed_dim, - n_rbf, - n_spher, - l_spher, - int_dim, - basis_emb_dim): - + def __init__(self, activation, embed_dim, n_rbf, n_spher, l_spher, int_dim, basis_emb_dim): super().__init__() - self.m_kj_dense = get_dense(embed_dim, - embed_dim, - activation=activation, - bias=True) - self.e_dense = nn.Sequential(get_dense(n_rbf, - basis_emb_dim, - activation=None, - bias=False), - get_dense(basis_emb_dim, - embed_dim, - activation=None, - bias=False)) - - self.a_dense = nn.Sequential(get_dense(n_spher * l_spher, - basis_emb_dim, - activation=None, - bias=False), - get_dense(basis_emb_dim, - int_dim, - activation=None, - bias=False)) - - self.down_conv = get_dense(embed_dim, - int_dim, - activation=activation, - bias=False) - - self.up_conv = get_dense(int_dim, - embed_dim, - activation=activation, - bias=False) - - def forward(self, - m_ji, - e_rbf, - a_sbf, - kj_idx, - ji_idx): + self.m_kj_dense = get_dense(embed_dim, embed_dim, activation=activation, bias=True) + self.e_dense = nn.Sequential( + get_dense(n_rbf, basis_emb_dim, activation=None, bias=False), + get_dense(basis_emb_dim, embed_dim, activation=None, bias=False), + ) + + self.a_dense = nn.Sequential( + get_dense(n_spher * l_spher, basis_emb_dim, activation=None, bias=False), + get_dense(basis_emb_dim, int_dim, activation=None, bias=False), + ) + + self.down_conv = get_dense(embed_dim, int_dim, activation=activation, bias=False) + + self.up_conv = get_dense(int_dim, embed_dim, activation=activation, bias=False) + + def forward(self, m_ji, e_rbf, a_sbf, kj_idx, ji_idx): """ Args: m_ji (torch.Tensor): edge vector @@ -376,10 +305,7 @@ def forward(self, edge_message = self.down_conv(m_kj * e_ji) aggr = edge_message * a - out = self.up_conv(scatter_add(aggr.transpose(0, 1), - ji_idx, - dim_size=m_ji.shape[0] - ).transpose(0, 1)) + out = self.up_conv(scatter_add(aggr.transpose(0, 1), ji_idx, dim_size=m_ji.shape[0]).transpose(0, 1)) return out @@ -389,16 +315,9 @@ class InteractionBlock(nn.Module): Block for aggregating distance and angle information """ - def __init__(self, - embed_dim, - n_rbf, - activation, - n_spher, - l_spher, - n_bilinear, - int_dim=None, - basis_emb_dim=None, - use_pp=False): + def __init__( + self, embed_dim, n_rbf, activation, n_spher, l_spher, n_bilinear, int_dim=None, basis_emb_dim=None, use_pp=False + ): """ Args: embed_dim (int): embedding size @@ -419,10 +338,7 @@ def __init__(self, # make the three residual blocks self.residual_blocks = nn.ModuleList( - [ResidualBlock( - embed_dim=embed_dim, - n_rbf=n_rbf, - activation=activation) for _ in range(3)] + [ResidualBlock(embed_dim=embed_dim, n_rbf=n_rbf, activation=activation) for _ in range(3)] ) # make a block for getting the directed messages @@ -435,7 +351,8 @@ def __init__(self, n_spher=n_spher, l_spher=l_spher, int_dim=int_dim, - basis_emb_dim=basis_emb_dim) + basis_emb_dim=basis_emb_dim, + ) else: self.directed_block = DirectedMessage( @@ -444,26 +361,16 @@ def __init__(self, n_rbf=n_rbf, n_spher=n_spher, l_spher=l_spher, - n_bilinear=n_bilinear) + n_bilinear=n_bilinear, + ) # dense layers for m_ji and for what comes after # the residual blocks - self.m_ji_dense = get_dense(embed_dim, - embed_dim, - activation=activation, - bias=True) - - self.post_res_dense = get_dense(embed_dim, - embed_dim, - activation=activation, - bias=True) - - def forward(self, - m_ji, - e_rbf, - a_sbf, - kj_idx, - ji_idx): + self.m_ji_dense = get_dense(embed_dim, embed_dim, activation=activation, bias=True) + + self.post_res_dense = get_dense(embed_dim, embed_dim, activation=activation, bias=True) + + def forward(self, m_ji, e_rbf, a_sbf, kj_idx, ji_idx): """ Args: m_ji (torch.Tensor): edge vector @@ -482,18 +389,13 @@ def forward(self, """ # get the directed message - directed_out = self.directed_block(m_ji=m_ji, - e_rbf=e_rbf, - a_sbf=a_sbf, - kj_idx=kj_idx, - ji_idx=ji_idx) + directed_out = self.directed_block(m_ji=m_ji, e_rbf=e_rbf, a_sbf=a_sbf, kj_idx=kj_idx, ji_idx=ji_idx) # put m_ji through dense layer and add to directed # message dense_m_ji = self.m_ji_dense(m_ji) output = directed_out + dense_m_ji # put through one dense layer and add back m_ji - output = self.post_res_dense( - self.residual_blocks[0](output)) + m_ji + output = self.post_res_dense(self.residual_blocks[0](output)) + m_ji # put through remaining dense layers for res_block in self.residual_blocks[1:]: output = res_block(output) @@ -506,12 +408,7 @@ class OutputBlock(nn.Module): Block to convert edge messages to atomic fingerprints """ - def __init__(self, - embed_dim, - n_rbf, - activation, - use_pp=False, - out_dim=None): + def __init__(self, embed_dim, n_rbf, activation, use_pp=False, out_dim=None): """ Args: embed_dim (int): embedding size @@ -524,32 +421,18 @@ def __init__(self, # dense layer to convert rbf edge representation # to dimension embed_dim - self.edge_dense = get_dense(n_rbf, - embed_dim, - activation=None, - bias=False) + self.edge_dense = get_dense(n_rbf, embed_dim, activation=None, bias=False) out_dense = [] if use_pp: - out_dense.append(get_dense(embed_dim, - out_dim, - activation=None, - bias=False)) + out_dense.append(get_dense(embed_dim, out_dim, activation=None, bias=False)) else: out_dim = embed_dim - out_dense += [get_dense(out_dim, - out_dim, - activation=activation, - bias=True) - for _ in range(3)] - out_dense.append(get_dense(out_dim, - out_dim, - activation=None, - bias=False)) + out_dense += [get_dense(out_dim, out_dim, activation=activation, bias=True) for _ in range(3)] + out_dense.append(get_dense(out_dim, out_dim, activation=None, bias=False)) self.out_dense = nn.Sequential(*out_dense) def forward(self, m_ji, e_rbf, nbr_list, num_atoms): - # product of e and m prod = self.edge_dense(e_rbf) * m_ji @@ -563,9 +446,7 @@ def forward(self, m_ji, e_rbf, nbr_list, num_atoms): # and the last two to index 0. This means we use # nbr_list[:, 1] in the scatter addition. - node_feats = scatter_add(prod.transpose(0, 1), - nbr_list[:, 1], - dim_size=num_atoms).transpose(0, 1) + node_feats = scatter_add(prod.transpose(0, 1), nbr_list[:, 1], dim_size=num_atoms).transpose(0, 1) # Apply the dense layers node_feats = self.out_dense(node_feats) diff --git a/nff/nn/modules/painn.py b/nff/nn/modules/painn.py index 8e6215f5..08f38707 100644 --- a/nff/nn/modules/painn.py +++ b/nff/nn/modules/painn.py @@ -2,8 +2,7 @@ from torch import nn from nff.utils.tools import layer_types -from nff.nn.layers import (PainnRadialBasis, CosineEnvelope, - ExpNormalBasis, Dense) +from nff.nn.layers import PainnRadialBasis, CosineEnvelope, ExpNormalBasis, Dense from nff.utils.scatter import scatter_add from nff.nn.modules.schnet import ScaleShift from nff.nn.modules.torchmd_net import MessageBlock as MDMessage @@ -13,7 +12,7 @@ def norm(vec): - result = ((vec ** 2 + EPS).sum(-1)) ** 0.5 + result = ((vec**2 + EPS).sum(-1)) ** 0.5 return result @@ -33,20 +32,12 @@ def to_module(activation): class InvariantDense(nn.Module): - def __init__(self, - dim, - dropout, - activation='swish'): + def __init__(self, dim, dropout, activation="swish"): super().__init__() - self.layers = nn.Sequential(Dense(in_features=dim, - out_features=dim, - bias=True, - dropout_rate=dropout, - activation=to_module(activation)), - Dense(in_features=dim, - out_features=3 * dim, - bias=True, - dropout_rate=dropout)) + self.layers = nn.Sequential( + Dense(in_features=dim, out_features=dim, bias=True, dropout_rate=dropout, activation=to_module(activation)), + Dense(in_features=dim, out_features=3 * dim, bias=True, dropout_rate=dropout), + ) def forward(self, s_j): output = self.layers(s_j) @@ -54,22 +45,11 @@ def forward(self, s_j): class DistanceEmbed(nn.Module): - def __init__(self, - n_rbf, - cutoff, - feat_dim, - learnable_k, - dropout): - + def __init__(self, n_rbf, cutoff, feat_dim, learnable_k, dropout): super().__init__() - rbf = PainnRadialBasis(n_rbf=n_rbf, - cutoff=cutoff, - learnable_k=learnable_k) - - dense = Dense(in_features=n_rbf, - out_features=3 * feat_dim, - bias=True, - dropout_rate=dropout) + rbf = PainnRadialBasis(n_rbf=n_rbf, cutoff=cutoff, learnable_k=learnable_k) + + dense = Dense(in_features=n_rbf, out_features=3 * feat_dim, bias=True, dropout_rate=dropout) self.block = nn.Sequential(rbf, dense) self.f_cut = CosineEnvelope(cutoff=cutoff) @@ -82,29 +62,15 @@ def forward(self, dist): class InvariantMessage(nn.Module): - def __init__(self, - feat_dim, - activation, - n_rbf, - cutoff, - learnable_k, - dropout): + def __init__(self, feat_dim, activation, n_rbf, cutoff, learnable_k, dropout): super().__init__() - self.inv_dense = InvariantDense(dim=feat_dim, - activation=activation, - dropout=dropout) - self.dist_embed = DistanceEmbed(n_rbf=n_rbf, - cutoff=cutoff, - feat_dim=feat_dim, - learnable_k=learnable_k, - dropout=dropout) - - def forward(self, - s_j, - dist, - nbrs): + self.inv_dense = InvariantDense(dim=feat_dim, activation=activation, dropout=dropout) + self.dist_embed = DistanceEmbed( + n_rbf=n_rbf, cutoff=cutoff, feat_dim=feat_dim, learnable_k=learnable_k, dropout=dropout + ) + def forward(self, s_j, dist, nbrs): phi = self.inv_dense(s_j)[nbrs[:, 1]] w_s = self.dist_embed(dist) output = phi * w_s @@ -119,17 +85,9 @@ def forward(self, class MessageBase(nn.Module): - - def forward(self, - s_j, - v_j, - r_ij, - nbrs): - + def forward(self, s_j, v_j, r_ij, nbrs): dist, unit = preprocess_r(r_ij) - inv_out = self.inv_message(s_j=s_j, - dist=dist, - nbrs=nbrs) + inv_out = self.inv_message(s_j=s_j, dist=dist, nbrs=nbrs) split_0 = inv_out[:, 0, :].unsqueeze(-1) split_1 = inv_out[:, 1, :] @@ -142,47 +100,28 @@ def forward(self, # add results from neighbors of each node graph_size = s_j.shape[0] - delta_v_i = scatter_add(src=delta_v_ij, - index=nbrs[:, 0], - dim=0, - dim_size=graph_size) + delta_v_i = scatter_add(src=delta_v_ij, index=nbrs[:, 0], dim=0, dim_size=graph_size) - delta_s_i = scatter_add(src=delta_s_ij, - index=nbrs[:, 0], - dim=0, - dim_size=graph_size) + delta_s_i = scatter_add(src=delta_s_ij, index=nbrs[:, 0], dim=0, dim_size=graph_size) return delta_s_i, delta_v_i class MessageBlock(MessageBase): - def __init__(self, - feat_dim, - activation, - n_rbf, - cutoff, - learnable_k, - dropout, - **kwargs): + def __init__(self, feat_dim, activation, n_rbf, cutoff, learnable_k, dropout, **kwargs): super().__init__() - self.inv_message = InvariantMessage(feat_dim=feat_dim, - activation=activation, - n_rbf=n_rbf, - cutoff=cutoff, - learnable_k=learnable_k, - dropout=dropout) - - def forward(self, - s_j, - v_j, - r_ij, - nbrs, - **kwargs): + self.inv_message = InvariantMessage( + feat_dim=feat_dim, + activation=activation, + n_rbf=n_rbf, + cutoff=cutoff, + learnable_k=learnable_k, + dropout=dropout, + ) + def forward(self, s_j, v_j, r_ij, nbrs, **kwargs): dist, unit = preprocess_r(r_ij) - inv_out = self.inv_message(s_j=s_j, - dist=dist, - nbrs=nbrs) + inv_out = self.inv_message(s_j=s_j, dist=dist, nbrs=nbrs) split_0 = inv_out[:, 0, :].unsqueeze(-1) split_1 = inv_out[:, 1, :] @@ -195,95 +134,54 @@ def forward(self, # add results from neighbors of each node graph_size = s_j.shape[0] - delta_v_i = scatter_add(src=delta_v_ij, - index=nbrs[:, 0], - dim=0, - dim_size=graph_size) + delta_v_i = scatter_add(src=delta_v_ij, index=nbrs[:, 0], dim=0, dim_size=graph_size) - delta_s_i = scatter_add(src=delta_s_ij, - index=nbrs[:, 0], - dim=0, - dim_size=graph_size) + delta_s_i = scatter_add(src=delta_s_ij, index=nbrs[:, 0], dim=0, dim_size=graph_size) return delta_s_i, delta_v_i class InvariantTransformerMessage(nn.Module): - def __init__(self, - rbf, - num_heads, - feat_dim, - activation, - layer_norm): - + def __init__(self, rbf, num_heads, feat_dim, activation, layer_norm): super().__init__() - self.msg_layer = MDMessage(feat_dim=feat_dim, - num_heads=num_heads, - activation=activation, - rbf=rbf) - - self.dense = Dense(in_features=(num_heads * feat_dim), - out_features=(3 * feat_dim), - bias=True, - activation=None) - self.layer_norm = nn.LayerNorm(feat_dim) if (layer_norm) else None + self.msg_layer = MDMessage(feat_dim=feat_dim, num_heads=num_heads, activation=activation, rbf=rbf) - def forward(self, - s_j, - dist, - nbrs): + self.dense = Dense(in_features=(num_heads * feat_dim), out_features=(3 * feat_dim), bias=True, activation=None) + self.layer_norm = nn.LayerNorm(feat_dim) if (layer_norm) else None + def forward(self, s_j, dist, nbrs): inp = self.layer_norm(s_j) if self.layer_norm else s_j - output = self.dense(self.msg_layer(dist=dist, - nbrs=nbrs, - x_i=inp)) + output = self.dense(self.msg_layer(dist=dist, nbrs=nbrs, x_i=inp)) out_reshape = output.reshape(output.shape[0], 3, -1) return out_reshape class TransformerMessageBlock(MessageBase): - def __init__(self, - rbf, - num_heads, - feat_dim, - activation, - layer_norm): + def __init__(self, rbf, num_heads, feat_dim, activation, layer_norm): super().__init__() self.inv_message = InvariantTransformerMessage( - rbf=rbf, - num_heads=num_heads, - feat_dim=feat_dim, - activation=activation, - layer_norm=layer_norm) + rbf=rbf, num_heads=num_heads, feat_dim=feat_dim, activation=activation, layer_norm=layer_norm + ) class UpdateBlock(nn.Module): - def __init__(self, - feat_dim, - activation, - dropout): + def __init__(self, feat_dim, activation, dropout): super().__init__() - self.u_mat = Dense(in_features=feat_dim, - out_features=feat_dim, - bias=False) - self.v_mat = Dense(in_features=feat_dim, - out_features=feat_dim, - bias=False) - self.s_dense = nn.Sequential(Dense(in_features=2 * feat_dim, - out_features=feat_dim, - bias=True, - dropout_rate=dropout, - activation=to_module(activation)), - Dense(in_features=feat_dim, - out_features=3 * feat_dim, - bias=True, - dropout_rate=dropout)) - - def forward(self, - s_i, - v_i): + self.u_mat = Dense(in_features=feat_dim, out_features=feat_dim, bias=False) + self.v_mat = Dense(in_features=feat_dim, out_features=feat_dim, bias=False) + self.s_dense = nn.Sequential( + Dense( + in_features=2 * feat_dim, + out_features=feat_dim, + bias=True, + dropout_rate=dropout, + activation=to_module(activation), + ), + Dense(in_features=feat_dim, out_features=3 * feat_dim, bias=True, dropout_rate=dropout), + ) + def forward(self, s_i, v_i): # v_i = (num_atoms, num_feats, 3) # v_i.transpose(1, 2).reshape(-1, v_i.shape[1]) # = (num_atoms, 3, num_feats).reshape(-1, num_feats) @@ -298,16 +196,13 @@ def forward(self, # to get (num_atoms, num_feats, 3) num_feats = v_i.shape[1] - u_v = (self.u_mat(v_tranpose).reshape(-1, 3, num_feats) - .transpose(1, 2)) - v_v = (self.v_mat(v_tranpose).reshape(-1, 3, num_feats) - .transpose(1, 2)) + u_v = self.u_mat(v_tranpose).reshape(-1, 3, num_feats).transpose(1, 2) + v_v = self.v_mat(v_tranpose).reshape(-1, 3, num_feats).transpose(1, 2) v_v_norm = norm(v_v) s_stack = torch.cat([s_i, v_v_norm], dim=-1) - split = (self.s_dense(s_stack) - .reshape(s_i.shape[0], 3, -1)) + split = self.s_dense(s_stack).reshape(s_i.shape[0], 3, -1) # delta v update a_vv = split[:, 0, :].unsqueeze(-1) @@ -324,96 +219,65 @@ def forward(self, class EmbeddingBlock(nn.Module): - def __init__(self, - feat_dim): - + def __init__(self, feat_dim): super().__init__() self.atom_embed = nn.Embedding(100, feat_dim, padding_idx=0) self.feat_dim = feat_dim - def forward(self, - z_number, - **kwargs): - + def forward(self, z_number, **kwargs): num_atoms = z_number.shape[0] s_i = self.atom_embed(z_number) - v_i = (torch.zeros(num_atoms, self.feat_dim, 3) - .to(s_i.device)) + v_i = torch.zeros(num_atoms, self.feat_dim, 3).to(s_i.device) return s_i, v_i class NbrEmbeddingBlock(nn.Module): - def __init__(self, - feat_dim, - dropout, - rbf): - + def __init__(self, feat_dim, dropout, rbf): super().__init__() - self.embedding = MDEmbedding(feat_dim=feat_dim, - dropout=dropout, - rbf=rbf) + self.embedding = MDEmbedding(feat_dim=feat_dim, dropout=dropout, rbf=rbf) self.feat_dim = feat_dim - def forward(self, - z_number, - nbrs, - r_ij): - + def forward(self, z_number, nbrs, r_ij): num_atoms = z_number.shape[0] dist, _ = preprocess_r(r_ij) - s_i = self.embedding(z_number=z_number, - nbrs=nbrs, - dist=dist) + s_i = self.embedding(z_number=z_number, nbrs=nbrs, dist=dist) - v_i = (torch.zeros(num_atoms, self.feat_dim, 3) - .to(s_i.device)) + v_i = torch.zeros(num_atoms, self.feat_dim, 3).to(s_i.device) return s_i, v_i class GatedEquivariantBlock(nn.Module): - def __init__(self, - feat_dim, - activation, - dropout_rate): - + def __init__(self, feat_dim, activation, dropout_rate): super().__init__() - self.W1 = Dense(in_features=feat_dim, - out_features=feat_dim, - bias=False) - self.W2 = Dense(in_features=feat_dim, - out_features=feat_dim, - bias=False) - self.s_dense = nn.Sequential(Dense(in_features=2 * feat_dim, - out_features=feat_dim, - bias=True, - dropout_rate=dropout_rate, - activation=to_module(activation)), - Dense(in_features=feat_dim, - out_features=2 * feat_dim, - bias=True, - dropout_rate=dropout_rate)) - - def forward(self, - sv_tuple): + self.W1 = Dense(in_features=feat_dim, out_features=feat_dim, bias=False) + self.W2 = Dense(in_features=feat_dim, out_features=feat_dim, bias=False) + self.s_dense = nn.Sequential( + Dense( + in_features=2 * feat_dim, + out_features=feat_dim, + bias=True, + dropout_rate=dropout_rate, + activation=to_module(activation), + ), + Dense(in_features=feat_dim, out_features=2 * feat_dim, bias=True, dropout_rate=dropout_rate), + ) + def forward(self, sv_tuple): s_i, v_i = sv_tuple v_tranpose = v_i.transpose(1, 2).reshape(-1, v_i.shape[1]) num_feats = v_i.shape[1] - W1_v = (self.W1(v_tranpose).reshape(-1, 3, num_feats) - .transpose(1, 2)) - W2_v = (self.W2(v_tranpose).reshape(-1, 3, num_feats) - .transpose(1, 2)) + W1_v = self.W1(v_tranpose).reshape(-1, 3, num_feats).transpose(1, 2) + W2_v = self.W2(v_tranpose).reshape(-1, 3, num_feats).transpose(1, 2) W2_v_norm = norm(W2_v) s_stack = torch.cat([s_i, W2_v_norm], dim=-1) - split = (self.s_dense(s_stack) - .reshape(s_i.shape[0], 2, -1)) + split = self.s_dense(s_stack).reshape(s_i.shape[0], 2, -1) # delta v update new_v = W1_v * split[:, 0, :].unsqueeze(-1) @@ -425,31 +289,26 @@ def forward(self, class ReadoutBlock(nn.Module): - def __init__(self, - feat_dim, - output_keys, - activation, - dropout, - means=None, - stddevs=None): + def __init__(self, feat_dim, output_keys, activation, dropout, means=None, stddevs=None): super().__init__() self.readoutdict = nn.ModuleDict( - {key: nn.Sequential( - Dense(in_features=feat_dim, - out_features=feat_dim // 2, - bias=True, - dropout_rate=dropout, - activation=to_module(activation)), - Dense(in_features=feat_dim // 2, - out_features=1, - bias=True, - dropout_rate=dropout)) - for key in output_keys} + { + key: nn.Sequential( + Dense( + in_features=feat_dim, + out_features=feat_dim // 2, + bias=True, + dropout_rate=dropout, + activation=to_module(activation), + ), + Dense(in_features=feat_dim // 2, out_features=1, bias=True, dropout_rate=dropout), + ) + for key in output_keys + } ) - self.scale_shift = ScaleShift(means=means, - stddevs=stddevs) + self.scale_shift = ScaleShift(means=means, stddevs=stddevs) def forward(self, s_i): """ @@ -467,43 +326,47 @@ def forward(self, s_i): class ReadoutBlock_Tuple(nn.Module): - def __init__(self, - feat_dim, - output_keys, - activation, - dropout, - means=None, - stddevs=None): + def __init__(self, feat_dim, output_keys, activation, dropout, means=None, stddevs=None): super().__init__() self.output_keys = output_keys self.readoutdict = nn.ModuleDict( - {key_tuple: nn.Sequential( - Dense(in_features=feat_dim, - out_features=feat_dim // 2, - bias=True, - dropout_rate=dropout, - activation=to_module(activation)), - Dense(in_features=feat_dim // 2, - out_features=feat_dim // 4, - bias=True, - dropout_rate=dropout, - activation=to_module(activation)), - Dense(in_features=feat_dim // 4, - out_features=feat_dim // 8, - bias=True, - dropout_rate=dropout, - activation=to_module(activation)), - Dense(in_features=feat_dim // 8, - out_features=len(key_tuple.split("+")), - bias=True, - dropout_rate=dropout)) - for key_tuple in output_keys} + { + key_tuple: nn.Sequential( + Dense( + in_features=feat_dim, + out_features=feat_dim // 2, + bias=True, + dropout_rate=dropout, + activation=to_module(activation), + ), + Dense( + in_features=feat_dim // 2, + out_features=feat_dim // 4, + bias=True, + dropout_rate=dropout, + activation=to_module(activation), + ), + Dense( + in_features=feat_dim // 4, + out_features=feat_dim // 8, + bias=True, + dropout_rate=dropout, + activation=to_module(activation), + ), + Dense( + in_features=feat_dim // 8, + out_features=len(key_tuple.split("+")), + bias=True, + dropout_rate=dropout, + ), + ) + for key_tuple in output_keys + } ) - self.scale_shift = ScaleShift(means=means, - stddevs=stddevs) + self.scale_shift = ScaleShift(means=means, stddevs=stddevs) def forward(self, s_i): """ @@ -514,7 +377,7 @@ def forward(self, s_i): for keys, readoutdict in self.readoutdict.items(): outputs = readoutdict(s_i) - for ii, key in enumerate(keys.split('+')): + for ii, key in enumerate(keys.split("+")): output = self.scale_shift(outputs[..., ii], key) results[key] = output @@ -522,27 +385,23 @@ def forward(self, s_i): class ReadoutBlock_Complex(nn.Module): - def __init__(self, - feat_dim, - output_keys, - activation, - dropout, - means=None, - stddevs=None): + def __init__(self, feat_dim, output_keys, activation, dropout, means=None, stddevs=None): super().__init__() self.readoutdict = nn.ModuleDict( - {key: nn.Sequential( - Dense(in_features=feat_dim, - out_features=feat_dim // 2, - bias=True, - dropout_rate=dropout, - activation=to_module(activation)), - Dense(in_features=feat_dim // 2, - out_features=2, - bias=True, - dropout_rate=dropout)) - for key in output_keys} + { + key: nn.Sequential( + Dense( + in_features=feat_dim, + out_features=feat_dim // 2, + bias=True, + dropout_rate=dropout, + activation=to_module(activation), + ), + Dense(in_features=feat_dim // 2, out_features=2, bias=True, dropout_rate=dropout), + ) + for key in output_keys + } ) def forward(self, s_i): @@ -560,56 +419,56 @@ def forward(self, s_i): class ReadoutBlock_Vec(nn.Module): - def __init__(self, - feat_dim, - # out_dims, # right now we can only get Natomsx3 but what if we just want 1x3? - output_keys, - activation, - dropout, - means=None, - stddevs=None): + def __init__( + self, + feat_dim, + # out_dims, # right now we can only get Natomsx3 but what if we just want 1x3? + output_keys, + activation, + dropout, + means=None, + stddevs=None, + ): super().__init__() self.umat_dict = nn.ModuleDict( - {key: Dense(in_features=feat_dim, - out_features=feat_dim, - bias=False) - for key in output_keys} + {key: Dense(in_features=feat_dim, out_features=feat_dim, bias=False) for key in output_keys} ) self.vmat_dict = nn.ModuleDict( - {key: Dense(in_features=feat_dim, - out_features=feat_dim, - bias=False) - for key in output_keys} + {key: Dense(in_features=feat_dim, out_features=feat_dim, bias=False) for key in output_keys} ) self.sdense_dict = nn.ModuleDict( - {key: nn.Sequential(Dense(in_features=2 * feat_dim, - out_features=feat_dim, - bias=True, - dropout_rate=dropout, - activation=to_module(activation)), - Dense(in_features=feat_dim, - out_features=feat_dim, - bias=True, - dropout_rate=dropout)) - for key in output_keys} + { + key: nn.Sequential( + Dense( + in_features=2 * feat_dim, + out_features=feat_dim, + bias=True, + dropout_rate=dropout, + activation=to_module(activation), + ), + Dense(in_features=feat_dim, out_features=feat_dim, bias=True, dropout_rate=dropout), + ) + for key in output_keys + } ) # figure out how to do the collapsing self.readoutdict = nn.ModuleDict( - {key: - Dense(in_features=feat_dim, - out_features=1, - bias=False, - dropout_rate=dropout,) - for key in output_keys} + { + key: Dense( + in_features=feat_dim, + out_features=1, + bias=False, + dropout_rate=dropout, + ) + for key in output_keys + } ) - def forward(self, - s_i, - v_i): + def forward(self, s_i, v_i): """ Note: no atomwise summation. That's done in the model itself """ @@ -629,11 +488,8 @@ def forward(self, v_tranpose = v_i.transpose(1, 2).reshape(-1, num_feats) for key, readoutdict in self.readoutdict.items(): - - u_v = (self.umat_dict[key](v_tranpose).reshape(-1, 3, num_feats) - .transpose(1, 2)) - v_v = (self.vmat_dict[key](v_tranpose).reshape(-1, 3, num_feats) - .transpose(1, 2)) + u_v = self.umat_dict[key](v_tranpose).reshape(-1, 3, num_feats).transpose(1, 2) + v_v = self.vmat_dict[key](v_tranpose).reshape(-1, 3, num_feats).transpose(1, 2) # now reshape it to (num_atoms, 3, num_feats) and transpose # to get (num_atoms, num_feats, 3) @@ -641,8 +497,7 @@ def forward(self, v_v_norm = norm(v_v) s_stack = torch.cat([s_i, v_v_norm], dim=-1) - a_vv = self.sdense_dict[key](s_stack).reshape( - s_i.shape[0], -1).unsqueeze(-1) + a_vv = self.sdense_dict[key](s_stack).reshape(s_i.shape[0], -1).unsqueeze(-1) new_v_i = u_v * a_vv # (num_atoms, num_feats, 3) new_v_i = new_v_i.transpose(1, 2) # (num_atoms, 3, num_feats) @@ -656,39 +511,42 @@ def forward(self, class ReadoutBlock_Vec2(nn.Module): # this does not use part of the update block but n gated equivariant blocks # as shown in the original PaiNN paper in Fig. 3 - def __init__(self, - feat_dim, - # out_dims, # right now we can only get Natomsx3 but what if we just want 1x3? - output_keys, - activation, - dropout, - means=None, - stddevs=None): + def __init__( + self, + feat_dim, + # out_dims, # right now we can only get Natomsx3 but what if we just want 1x3? + output_keys, + activation, + dropout, + means=None, + stddevs=None, + ): super().__init__() self.gated_dict = nn.ModuleDict( - {key: nn.Sequential(GatedEquivariantBlock(feat_dim=feat_dim, - dropout_rate=dropout, - activation=activation), - GatedEquivariantBlock(feat_dim=feat_dim, - dropout_rate=dropout, - activation=activation)) - for key in output_keys} + { + key: nn.Sequential( + GatedEquivariantBlock(feat_dim=feat_dim, dropout_rate=dropout, activation=activation), + GatedEquivariantBlock(feat_dim=feat_dim, dropout_rate=dropout, activation=activation), + ) + for key in output_keys + } ) # figure out how to do the collapsing self.readoutdict = nn.ModuleDict( - {key: - Dense(in_features=feat_dim, - out_features=1, - bias=False, - dropout_rate=dropout,) - for key in output_keys} + { + key: Dense( + in_features=feat_dim, + out_features=1, + bias=False, + dropout_rate=dropout, + ) + for key in output_keys + } ) - def forward(self, - s_i, - v_i): + def forward(self, s_i, v_i): """ Note: no atomwise summation. That's done in the model itself """ @@ -696,7 +554,6 @@ def forward(self, results = {} for key, readoutdict in self.readoutdict.items(): - new_s_i, new_v_i = self.gated_dict[key]((s_i, v_i)) new_v_i = new_v_i.transpose(1, 2) # (num_atoms, 3, num_feats) output = readoutdict(new_v_i).sum(dim=2) # (num_atoms, 3, 1) -> (num_atoms, 3) diff --git a/nff/nn/modules/schnet.py b/nff/nn/modules/schnet.py index bb6d801c..9d4f7dc5 100644 --- a/nff/nn/modules/schnet.py +++ b/nff/nn/modules/schnet.py @@ -1313,7 +1313,6 @@ def testSchNetMPNN(self): n_filters = 10 n_gaussians = 10 num_nodes = 6 - cutoff = 0.5 e = torch.rand(5, n_atom_basis) r_in = torch.rand(num_nodes, n_atom_basis) @@ -1447,7 +1446,7 @@ def testmultitask(self): } model = NodeMultiTaskReadOut(multitaskdict) - output = model(r) + model(r) if __name__ == "__main__": diff --git a/nff/nn/modules/spooky.py b/nff/nn/modules/spooky.py index 2baf8572..5889ed04 100644 --- a/nff/nn/modules/spooky.py +++ b/nff/nn/modules/spooky.py @@ -254,7 +254,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.resmlp(av) - e_psi[counter: counter + num_atoms[j]] = this_e_psi + e_psi[counter : counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi @@ -636,7 +636,7 @@ def get_charge(self, f, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = charge[counter: counter + n] + old_val = charge[counter : counter + n] new_val = old_val + correction[i] new_charges.append(new_val) diff --git a/nff/nn/modules/spooky_fast.py b/nff/nn/modules/spooky_fast.py index 10fe9ac7..249aa641 100644 --- a/nff/nn/modules/spooky_fast.py +++ b/nff/nn/modules/spooky_fast.py @@ -1,7 +1,6 @@ import torch from torch import nn -from nff.nn.layers import (PreActivation, Dense, zeros_initializer, - BatchedPreActivation) +from nff.nn.layers import PreActivation, Dense, zeros_initializer, BatchedPreActivation from nff.utils.tools import layer_types, make_undirected from nff.utils.scatter import scatter_add from nff.utils.constants import ELEC_CONFIG, KE_KCAL, BOHR_RADIUS @@ -10,7 +9,7 @@ import time EPS = 1e-15 -DEFAULT_ACTIVATION = 'learnable_swish' +DEFAULT_ACTIVATION = "learnable_swish" DEFAULT_MAX_Z = 86 DEFAULT_DROPOUT = 0 DEFAULT_RES_LAYERS = 2 @@ -48,7 +47,7 @@ def norm(vec): For stable norm calculation. PyTorch's implementation can be unstable """ - result = ((vec ** 2 + EPS).sum(-1)) ** 0.5 + result = ((vec**2 + EPS).sum(-1)) ** 0.5 return result @@ -56,7 +55,7 @@ def get_elec_config(max_z): max_z_config = torch.Tensor([max_z] + ELEC_CONFIG[max_z]) # nan ensures we get nan results for any elements not # in ELEC_CONFIG - elec_config = torch.ones(max_z + 1, 20) * float('nan') + elec_config = torch.ones(max_z + 1, 20) * float("nan") for z, val in ELEC_CONFIG.items(): elec_config[z] = torch.Tensor([z] + val) / max_z_config return elec_config @@ -96,8 +95,8 @@ def get_elec_config(max_z): # return out -def scatter_mol(atomwise, - num_atoms): + +def scatter_mol(atomwise, num_atoms): """ Add atomic contributions in a batch to their respective geometries. A simple sum is much faster than doing scatter_add @@ -114,9 +113,7 @@ def scatter_mol(atomwise, return out -def scatter_pairwise(pairwise, - num_atoms, - nbrs): +def scatter_pairwise(pairwise, num_atoms, nbrs): """ Add pair-wise contributions in a batch to their respective geometries @@ -136,41 +133,35 @@ def scatter_pairwise(pairwise, for i, num in enumerate(num_atoms): mol_idx += [i] * int(num) - mol_idx = (torch.LongTensor(mol_idx) - .to(pairwise.device)) + mol_idx = torch.LongTensor(mol_idx).to(pairwise.device) nbr_to_mol = mol_idx[nbrs[:, 0]] - out = scatter_add(src=pairwise, - index=nbr_to_mol, - dim=0, - dim_size=len(num_atoms)) + out = scatter_add(src=pairwise, index=nbr_to_mol, dim=0, dim_size=len(num_atoms)) return out class Residual(nn.Module): - def __init__(self, - feat_dim, - activation=DEFAULT_ACTIVATION, - dropout=DEFAULT_DROPOUT, - num_layers=DEFAULT_RES_LAYERS, - bias=True): - + def __init__( + self, feat_dim, activation=DEFAULT_ACTIVATION, dropout=DEFAULT_DROPOUT, num_layers=DEFAULT_RES_LAYERS, bias=True + ): super().__init__() block = [ - PreActivation(in_features=feat_dim, - out_features=feat_dim, - activation=activation, - dropout_rate=dropout, - bias=bias) + PreActivation( + in_features=feat_dim, out_features=feat_dim, activation=activation, dropout_rate=dropout, bias=bias + ) for _ in range(num_layers - 1) ] - block.append(PreActivation(in_features=feat_dim, - out_features=feat_dim, - activation=activation, - dropout_rate=dropout, - bias=bias, - weight_init=zeros_initializer)) + block.append( + PreActivation( + in_features=feat_dim, + out_features=feat_dim, + activation=activation, + dropout_rate=dropout, + bias=bias, + weight_init=zeros_initializer, + ) + ) self.block = nn.Sequential(*block) def forward(self, x): @@ -179,24 +170,21 @@ def forward(self, x): class ResidualMLP(nn.Module): - def __init__(self, - feat_dim, - activation=DEFAULT_ACTIVATION, - dropout=DEFAULT_DROPOUT, - bias=True, - residual_layers=DEFAULT_RES_LAYERS): - + def __init__( + self, + feat_dim, + activation=DEFAULT_ACTIVATION, + dropout=DEFAULT_DROPOUT, + bias=True, + residual_layers=DEFAULT_RES_LAYERS, + ): super().__init__() - residual = Residual(feat_dim=feat_dim, - activation=activation, - dropout=dropout, - bias=bias, - num_layers=residual_layers) - self.block = nn.Sequential(residual, - layer_types[activation](), - Dense(in_features=feat_dim, - out_features=feat_dim, - bias=bias)) + residual = Residual( + feat_dim=feat_dim, activation=activation, dropout=dropout, bias=bias, num_layers=residual_layers + ) + self.block = nn.Sequential( + residual, layer_types[activation](), Dense(in_features=feat_dim, out_features=feat_dim, bias=bias) + ) def forward(self, x): output = self.block(x) @@ -204,31 +192,38 @@ def forward(self, x): class BatchedResidual(nn.Module): - def __init__(self, - feat_dim, - num_out, - activation=DEFAULT_ACTIVATION, - dropout=DEFAULT_DROPOUT, - num_layers=DEFAULT_RES_LAYERS, - bias=True): - + def __init__( + self, + feat_dim, + num_out, + activation=DEFAULT_ACTIVATION, + dropout=DEFAULT_DROPOUT, + num_layers=DEFAULT_RES_LAYERS, + bias=True, + ): super().__init__() block = [ - BatchedPreActivation(in_features=feat_dim, - out_features=feat_dim, - num_out=num_out, - activation=activation, - dropout_rate=dropout, - bias=bias) + BatchedPreActivation( + in_features=feat_dim, + out_features=feat_dim, + num_out=num_out, + activation=activation, + dropout_rate=dropout, + bias=bias, + ) for _ in range(num_layers - 1) ] - block.append(BatchedPreActivation(in_features=feat_dim, - out_features=feat_dim, - num_out=num_out, - activation=activation, - dropout_rate=dropout, - bias=bias, - weight_init=zeros_initializer)) + block.append( + BatchedPreActivation( + in_features=feat_dim, + out_features=feat_dim, + num_out=num_out, + activation=activation, + dropout_rate=dropout, + bias=bias, + weight_init=zeros_initializer, + ) + ) self.block = nn.Sequential(*block) self.num_out = num_out @@ -238,32 +233,35 @@ def forward(self, x): class BatchedResidualMLP(nn.Module): - def __init__(self, - feat_dim, - num_out, - activation=DEFAULT_ACTIVATION, - dropout=DEFAULT_DROPOUT, - bias=True, - residual_layers=DEFAULT_RES_LAYERS): - + def __init__( + self, + feat_dim, + num_out, + activation=DEFAULT_ACTIVATION, + dropout=DEFAULT_DROPOUT, + bias=True, + residual_layers=DEFAULT_RES_LAYERS, + ): super().__init__() - residual = BatchedResidual(feat_dim=feat_dim, - num_out=num_out, - activation=activation, - dropout=dropout, - bias=bias, - num_layers=residual_layers) + residual = BatchedResidual( + feat_dim=feat_dim, + num_out=num_out, + activation=activation, + dropout=dropout, + bias=bias, + num_layers=residual_layers, + ) nonlinear = layer_types[activation]() - linear = BatchedPreActivation(in_features=feat_dim, - out_features=feat_dim, - num_out=num_out, - activation=None, - dropout_rate=dropout, - bias=bias) - - self.block = nn.Sequential(residual, - nonlinear, - linear) + linear = BatchedPreActivation( + in_features=feat_dim, + out_features=feat_dim, + num_out=num_out, + activation=None, + dropout_rate=dropout, + bias=bias, + ) + + self.block = nn.Sequential(residual, nonlinear, linear) self.num_out = num_out def forward(self, x): @@ -272,17 +270,12 @@ def forward(self, x): class NuclearEmbedding(nn.Module): - def __init__(self, - feat_dim, - max_z=DEFAULT_MAX_Z): - + def __init__(self, feat_dim, max_z=DEFAULT_MAX_Z): super().__init__() self.elec_config = get_elec_config(max_z) - self.m_mat = Dense(in_features=20, - out_features=feat_dim, - bias=False, - activation=None, - weight_init=zeros_initializer) + self.m_mat = Dense( + in_features=20, out_features=feat_dim, bias=False, activation=None, weight_init=zeros_initializer + ) self.z_embed = nn.Embedding(max_z, feat_dim, padding_idx=0) def forward(self, z): @@ -294,33 +287,21 @@ def forward(self, z): class ElectronicEmbedding(nn.Module): - def __init__(self, - feat_dim, - activation=DEFAULT_ACTIVATION, - dropout=DEFAULT_DROPOUT, - residual_layers=DEFAULT_RES_LAYERS): + def __init__( + self, feat_dim, activation=DEFAULT_ACTIVATION, dropout=DEFAULT_DROPOUT, residual_layers=DEFAULT_RES_LAYERS + ): super().__init__() - self.linear = Dense(in_features=feat_dim, - out_features=feat_dim, - bias=True, - activation=None) + self.linear = Dense(in_features=feat_dim, out_features=feat_dim, bias=True, activation=None) self.feat_dim = feat_dim - self.resmlp = ResidualMLP(feat_dim=feat_dim, - activation=activation, - dropout=dropout, - bias=False, - residual_layers=residual_layers) - names = ['k_plus', 'k_minus', 'v_plus', 'v_minus'] + self.resmlp = ResidualMLP( + feat_dim=feat_dim, activation=activation, dropout=dropout, bias=False, residual_layers=residual_layers + ) + names = ["k_plus", "k_minus", "v_plus", "v_minus"] for name in names: - val = nn.Parameter(torch.zeros(feat_dim, 1, - dtype=torch.float32)) + val = nn.Parameter(torch.zeros(feat_dim, 1, dtype=torch.float32)) setattr(self, name, val) - def forward(self, - psi, - e_z, - num_atoms): - + def forward(self, psi, e_z, num_atoms): q = self.linear(e_z) split_qs = torch.split(q, num_atoms.tolist()) e_psi = torch.zeros_like(e_z) @@ -332,8 +313,7 @@ def forward(self, k = self.k_plus if (mol_psi >= 0) else self.k_minus # mol_q has dimension atoms_in_mol x F # k has dimension F x 1 - arg = (torch.einsum('ij, jk -> i', mol_q, k) - / self.feat_dim ** 0.5) + arg = torch.einsum("ij, jk -> i", mol_q, k) / self.feat_dim**0.5 num = torch.log(1 + torch.exp(arg)) denom = num.sum() @@ -345,45 +325,29 @@ def forward(self, # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.resmlp(av) - e_psi[counter: counter + num_atoms[j]] = this_e_psi + e_psi[counter : counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi class CombinedEmbedding(nn.Module): - def __init__(self, - feat_dim, - activation=DEFAULT_ACTIVATION, - max_z=DEFAULT_MAX_Z, - residual_layers=DEFAULT_RES_LAYERS): - + def __init__( + self, feat_dim, activation=DEFAULT_ACTIVATION, max_z=DEFAULT_MAX_Z, residual_layers=DEFAULT_RES_LAYERS + ): super().__init__() - self.nuc_embedding = NuclearEmbedding( - feat_dim=feat_dim, - max_z=max_z) + self.nuc_embedding = NuclearEmbedding(feat_dim=feat_dim, max_z=max_z) self.charge_embedding = ElectronicEmbedding( - feat_dim=feat_dim, - activation=activation, - residual_layers=residual_layers) + feat_dim=feat_dim, activation=activation, residual_layers=residual_layers + ) self.spin_embedding = ElectronicEmbedding( - feat_dim=feat_dim, - activation=activation, - residual_layers=residual_layers) - - def forward(self, - charge, - spin, - z, - num_atoms): + feat_dim=feat_dim, activation=activation, residual_layers=residual_layers + ) + def forward(self, charge, spin, z, num_atoms): e_z = self.nuc_embedding(z) - e_q = self.charge_embedding(psi=charge, - e_z=e_z, - num_atoms=num_atoms) - e_s = self.charge_embedding(psi=spin, - e_z=e_z, - num_atoms=num_atoms) + e_q = self.charge_embedding(psi=charge, e_z=e_z, num_atoms=num_atoms) + e_s = self.charge_embedding(psi=spin, e_z=e_z, num_atoms=num_atoms) x_0 = e_z + e_q + e_s @@ -391,11 +355,7 @@ def forward(self, class GBlock(nn.Module): - def __init__(self, - l, - r_cut, - bern_k, - gamma): + def __init__(self, l, r_cut, bern_k, gamma): super().__init__() self.l = l self.r_cut = r_cut @@ -404,21 +364,16 @@ def __init__(self, self.y_lm_fn = make_y_lm(l) def forward(self, r_ij): - r = norm(r_ij).reshape(-1, 1) n_pairs = r_ij.shape[0] device = r_ij.device m_vals = list(range(-self.l, self.l + 1)) # is this for-loop slow? - y = torch.stack([self.y_lm_fn(r_ij, r, self.l, m) for m in - m_vals]).transpose(0, 1) + y = torch.stack([self.y_lm_fn(r_ij, r, self.l, m) for m in m_vals]).transpose(0, 1) gamma = self.gamma.clamp(0) rho = rho_k(r, self.r_cut, self.bern_k, gamma) - g = torch.ones(n_pairs, - self.bern_k, - len(m_vals), - device=device) + g = torch.ones(n_pairs, self.bern_k, len(m_vals), device=device) g = g * rho.reshape(n_pairs, -1, 1) g = g * y.reshape(n_pairs, 1, -1) @@ -426,16 +381,17 @@ def forward(self, r_ij): class LocalInteraction(nn.Module): - def __init__(self, - feat_dim, - bern_k, - gamma, - r_cut, - activation=DEFAULT_ACTIVATION, - max_z=DEFAULT_MAX_Z, - dropout=DEFAULT_DROPOUT, - residual_layers=DEFAULT_RES_LAYERS): - + def __init__( + self, + feat_dim, + bern_k, + gamma, + r_cut, + activation=DEFAULT_ACTIVATION, + max_z=DEFAULT_MAX_Z, + dropout=DEFAULT_DROPOUT, + residual_layers=DEFAULT_RES_LAYERS, + ): super().__init__() # for letter in ["c", "s", "p", "d", "l"]: @@ -447,42 +403,35 @@ def __init__(self, # setattr(self, key, val) num_orbs = 3 - self.num_channels = (num_orbs + 1) - self.resmlp = BatchedResidualMLP(feat_dim=feat_dim, - num_out=self.num_channels, - activation=activation, - dropout=dropout, - residual_layers=residual_layers) - self.resmlp_l = ResidualMLP(feat_dim=feat_dim, - activation=activation, - dropout=dropout, - residual_layers=residual_layers) + self.num_channels = num_orbs + 1 + self.resmlp = BatchedResidualMLP( + feat_dim=feat_dim, + num_out=self.num_channels, + activation=activation, + dropout=dropout, + residual_layers=residual_layers, + ) + self.resmlp_l = ResidualMLP( + feat_dim=feat_dim, activation=activation, dropout=dropout, residual_layers=residual_layers + ) for key in ["G_s", "G_p", "G_d"]: - val = nn.Parameter(torch.ones(feat_dim, - bern_k)) + val = nn.Parameter(torch.ones(feat_dim, bern_k)) nn.init.xavier_uniform_(val) setattr(self, key, val) for key in ["P_1", "P_2", "D_1", "D_2"]: - val = nn.Parameter(torch.ones(feat_dim, - feat_dim)) + val = nn.Parameter(torch.ones(feat_dim, feat_dim)) nn.init.xavier_uniform_(val) setattr(self, key, val) letters = {0: "s", 1: "p", 2: "d"} for l, letter in letters.items(): key = f"g_{letter}" - g_block = GBlock(l=l, - r_cut=r_cut, - bern_k=bern_k, - gamma=gamma) + g_block = GBlock(l=l, r_cut=r_cut, bern_k=bern_k, gamma=gamma) setattr(self, key, g_block) - def g_matmul(self, - r_ij, - orbital): - + def g_matmul(self, r_ij, orbital): g_func = getattr(self, f"g_{orbital}") g = g_func(r_ij) G = getattr(self, f"G_{orbital}") @@ -490,17 +439,18 @@ def g_matmul(self, # G: F x K # output: N_nbrs x F x (1, 3, or 5) - out = torch.einsum('ik, jkl -> jil', G, g) + out = torch.einsum("ik, jkl -> jil", G, g) return out - def make_quant(self, - r_ij, - # x_j, - nbrs, - graph_size, - orbital, - res_out): - + def make_quant( + self, + r_ij, + # x_j, + nbrs, + graph_size, + orbital, + res_out, + ): # res_block = getattr(self, f"resmlp_{orbital}") n_nbrs = nbrs.shape[0] @@ -509,20 +459,13 @@ def make_quant(self, # per_nbr = (resmlp.reshape(n_nbrs, -1, 1) # * matmul) - per_nbr = (res_out.reshape(n_nbrs, -1, 1) - * matmul) + per_nbr = res_out.reshape(n_nbrs, -1, 1) * matmul - out = scatter_add(src=per_nbr, - index=nbrs[:, 0], - dim=0, - dim_size=graph_size) + out = scatter_add(src=per_nbr, index=nbrs[:, 0], dim=0, dim_size=graph_size) return out - def take_inner(self, - quant, - orbital): - + def take_inner(self, quant, orbital): name = orbital.upper() # dimensions F x F @@ -532,10 +475,8 @@ def take_inner(self, # quant has dimension n_atoms x F x (3 or 5) # term has dimension n_atoms x F x (3 or 5) - term_1 = torch.einsum("ij, kjm->kim", - mat_1, quant) - term_2 = torch.einsum("ij, kjm->kim", - mat_2, quant) + term_1 = torch.einsum("ij, kjm->kim", mat_1, quant) + term_2 = torch.einsum("ij, kjm->kim", mat_2, quant) # inner product multiplies elementwise and # sums over the last dimension @@ -544,11 +485,7 @@ def take_inner(self, return inner - def forward(self, - xyz, - x_tilde, - nbrs): - + def forward(self, xyz, x_tilde, nbrs): inp = repeat_inp(x_tilde, self.num_channels) # inp = torch.stack([x_tilde for _ in range(self.num_channels)]) res_outs = self.resmlp(inp) @@ -556,26 +493,26 @@ def forward(self, # import pdb # pdb.set_trace() - orbitals = ['s', 'p', 'd'] + orbitals = ["s", "p", "d"] r_ij = xyz[nbrs[:, 1]] - xyz[nbrs[:, 0]] graph_size = xyz.shape[0] quants = [] for orbital, res_out in zip(orbitals, res_outs[1:]): - quant = self.make_quant(r_ij=r_ij, - # x_j=x_j, - nbrs=nbrs, - graph_size=graph_size, - orbital=orbital, - res_out=res_out[nbrs[:, 1]]) + quant = self.make_quant( + r_ij=r_ij, + # x_j=x_j, + nbrs=nbrs, + graph_size=graph_size, + orbital=orbital, + res_out=res_out[nbrs[:, 1]], + ) quants.append(quant) invariants = [] - for quant, orbital in zip(quants[1:], - orbitals[1:]): - invariant = self.take_inner(quant, - orbital) + for quant, orbital in zip(quants[1:], orbitals[1:]): + invariant = self.take_inner(quant, orbital) invariants.append(invariant) s_i = quants[0].reshape(graph_size, -1) @@ -588,12 +525,9 @@ def forward(self, class NonLocalInteraction(nn.Module): - def __init__(self, - feat_dim, - activation=DEFAULT_ACTIVATION, - dropout=DEFAULT_DROPOUT, - residual_layers=DEFAULT_RES_LAYERS): - + def __init__( + self, feat_dim, activation=DEFAULT_ACTIVATION, dropout=DEFAULT_DROPOUT, residual_layers=DEFAULT_RES_LAYERS + ): from performer_pytorch import FastAttention super().__init__() @@ -601,15 +535,11 @@ def __init__(self, # no redraw should happen here - only if # you call self attention of cross attention # as wrappers - self.attn = FastAttention(dim_heads=feat_dim, - nb_features=feat_dim, - causal=False) + self.attn = FastAttention(dim_heads=feat_dim, nb_features=feat_dim, causal=False) self.feat_dim = feat_dim - self.resmlp = BatchedResidualMLP(feat_dim=feat_dim, - num_out=3, - activation=activation, - dropout=dropout, - residual_layers=residual_layers) + self.resmlp = BatchedResidualMLP( + feat_dim=feat_dim, num_out=3, activation=activation, dropout=dropout, residual_layers=residual_layers + ) # for letter in ['q', 'k', 'v']: # key = f'resmlp_{letter}' @@ -619,10 +549,7 @@ def __init__(self, # residual_layers=residual_layers) # setattr(self, key, val) - def forward(self, - x_tilde, - num_atoms): - + def forward(self, x_tilde, num_atoms): # x_tilde has dimension N x F # N = number of nodes, F = feature dimension @@ -655,15 +582,12 @@ def forward(self, # k_stack = torch.stack(k_stack) # v_stack = torch.stack(v_stack) - out = torch.zeros(num_nodes, - self.feat_dim, - device=x_tilde.device) + out = torch.zeros(num_nodes, self.feat_dim, device=x_tilde.device) for i, num in enumerate(num_atoms): q = q_split[i].reshape(1, 1, -1, self.feat_dim) k = k_split[i].reshape(1, 1, -1, self.feat_dim) v = v_split[i].reshape(1, 1, -1, self.feat_dim) - att = (self.attn(q, k, v) - .reshape(-1, self.feat_dim)) + att = self.attn(q, k, v).reshape(-1, self.feat_dim) ### # real_q = q.reshape(-1, self.feat_dim) @@ -691,61 +615,51 @@ def forward(self, ### counter = sum(num_atoms[:i]) - out[counter: counter + num] = att + out[counter : counter + num] = att - import pdb # pdb.set_trace() return out class InteractionBlock(nn.Module): - def __init__(self, - feat_dim, - r_cut, - gamma, - bern_k, - activation=DEFAULT_ACTIVATION, - dropout=DEFAULT_DROPOUT, - max_z=DEFAULT_MAX_Z, - residual_layers=DEFAULT_RES_LAYERS): + def __init__( + self, + feat_dim, + r_cut, + gamma, + bern_k, + activation=DEFAULT_ACTIVATION, + dropout=DEFAULT_DROPOUT, + max_z=DEFAULT_MAX_Z, + residual_layers=DEFAULT_RES_LAYERS, + ): super().__init__() - self.residual_1 = Residual(feat_dim=feat_dim, - activation=activation, - dropout=dropout, - num_layers=residual_layers) - self.residual_2 = Residual(feat_dim=feat_dim, - activation=activation, - dropout=dropout, - num_layers=residual_layers) - self.resmlp = ResidualMLP(feat_dim=feat_dim, - activation=activation, - dropout=dropout, - residual_layers=residual_layers) - self.local = LocalInteraction(feat_dim=feat_dim, - bern_k=bern_k, - gamma=gamma, - r_cut=r_cut, - activation=activation, - max_z=max_z, - dropout=dropout) - self.non_local = NonLocalInteraction(feat_dim=feat_dim, - activation=activation, - dropout=dropout) - - def forward(self, - x, - xyz, - nbrs, - num_atoms): + self.residual_1 = Residual( + feat_dim=feat_dim, activation=activation, dropout=dropout, num_layers=residual_layers + ) + self.residual_2 = Residual( + feat_dim=feat_dim, activation=activation, dropout=dropout, num_layers=residual_layers + ) + self.resmlp = ResidualMLP( + feat_dim=feat_dim, activation=activation, dropout=dropout, residual_layers=residual_layers + ) + self.local = LocalInteraction( + feat_dim=feat_dim, + bern_k=bern_k, + gamma=gamma, + r_cut=r_cut, + activation=activation, + max_z=max_z, + dropout=dropout, + ) + self.non_local = NonLocalInteraction(feat_dim=feat_dim, activation=activation, dropout=dropout) + def forward(self, x, xyz, nbrs, num_atoms): x_tilde = self.residual_1(x) - l = self.local(xyz=xyz, - x_tilde=x_tilde, - nbrs=nbrs) - n = self.non_local(x_tilde=x_tilde, - num_atoms=num_atoms) + l = self.local(xyz=xyz, x_tilde=x_tilde, nbrs=nbrs) + n = self.non_local(x_tilde=x_tilde, num_atoms=num_atoms) x_t = self.residual_2(x_tilde + l + n) # x_t = self.residual_2(x_tilde + l ) @@ -755,7 +669,6 @@ def forward(self, def get_f_switch(r, r_on, r_off): - arg = (r - r_on) / (r_off - r_on) x = arg y = 1 - arg @@ -782,43 +695,29 @@ def get_f_switch(r, r_on, r_off): class Electrostatics(nn.Module): - def __init__(self, - feat_dim, - r_cut, - max_z=DEFAULT_MAX_Z): + def __init__(self, feat_dim, r_cut, max_z=DEFAULT_MAX_Z): super().__init__() - self.w = Dense(in_features=feat_dim, - out_features=1, - bias=False, - activation=None) + self.w = Dense(in_features=feat_dim, out_features=1, bias=False, activation=None) self.z_embed = nn.Embedding(max_z, 1, padding_idx=0) self.r_on = r_cut / 4 self.r_off = 3 * r_cut / 4 def f_switch(self, r): - out = get_f_switch(r=r, - r_on=self.r_on, - r_off=self.r_off) + out = get_f_switch(r=r, r_on=self.r_on, r_off=self.r_off) return out - def get_charge(self, - f, - z, - total_charge, - num_atoms): - + def get_charge(self, f, z, total_charge, num_atoms): w_f = self.w(f) q_z = self.z_embed(z) charge = w_f + q_z - mol_sum = scatter_mol(atomwise=charge, - num_atoms=num_atoms).reshape(-1) + mol_sum = scatter_mol(atomwise=charge, num_atoms=num_atoms).reshape(-1) correction = 1 / num_atoms * (total_charge - mol_sum) new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = charge[counter: counter + n] + old_val = charge[counter : counter + n] new_val = old_val + correction[i] new_charges.append(new_val) @@ -826,44 +725,22 @@ def get_charge(self, return new_charges - def get_en(self, - q, - xyz, - num_atoms, - mol_nbrs): - + def get_en(self, q, xyz, num_atoms, mol_nbrs): r_ij = norm(xyz[mol_nbrs[:, 0]] - xyz[mol_nbrs[:, 1]]) q_i = q[mol_nbrs[:, 0]].reshape(-1) q_j = q[mol_nbrs[:, 1]].reshape(-1) - arg_0 = (self.f_switch(r_ij) - / (r_ij ** 2 + BOHR_RADIUS ** 2) ** 0.5) + arg_0 = self.f_switch(r_ij) / (r_ij**2 + BOHR_RADIUS**2) ** 0.5 arg_1 = (1 - self.f_switch(r_ij)) / r_ij - pairwise = (KE_KCAL * q_i * q_j * (arg_0 + arg_1)) + pairwise = KE_KCAL * q_i * q_j * (arg_0 + arg_1) - energy = (scatter_pairwise(pairwise=pairwise, - num_atoms=num_atoms, - nbrs=mol_nbrs) - .reshape(-1, 1)) + energy = scatter_pairwise(pairwise=pairwise, num_atoms=num_atoms, nbrs=mol_nbrs).reshape(-1, 1) return energy - def forward(self, - f, - z, - xyz, - total_charge, - num_atoms, - mol_nbrs): - - q = self.get_charge(f=f, - z=z, - total_charge=total_charge, - num_atoms=num_atoms) - energy = self.get_en(q=q, - xyz=xyz, - num_atoms=num_atoms, - mol_nbrs=mol_nbrs) + def forward(self, f, z, xyz, total_charge, num_atoms, mol_nbrs): + q = self.get_charge(f=f, z=z, total_charge=total_charge, num_atoms=num_atoms) + energy = self.get_en(q=q, xyz=xyz, num_atoms=num_atoms, mol_nbrs=mol_nbrs) return energy, q @@ -882,45 +759,28 @@ def __init__(self, r_cut): new_val = nn.Parameter(val.reshape(-1, 1)) setattr(self, key, new_val) - def zbl_phi(self, - r_ij, - z_i, - z_j): - + def zbl_phi(self, r_ij, z_i, z_j): d = self.d.clamp(0) z_exp = self.z_exp.clamp(0) c = self.c.clamp(0) c = c / c.sum() exponents = self.exponents.clamp(0) - a = ((d / (z_i ** z_exp + z_j ** z_exp)) - .reshape(-1)) + a = (d / (z_i**z_exp + z_j**z_exp)).reshape(-1) - out = (c * torch.exp(-exponents * r_ij.reshape(-1) / a) - ).sum(0) + out = (c * torch.exp(-exponents * r_ij.reshape(-1) / a)).sum(0) return out - def forward(self, - xyz, - z, - nbrs, - num_atoms): - + def forward(self, xyz, z, nbrs, num_atoms): undirec = make_undirected(nbrs) z_i = z[undirec[:, 0]].to(torch.float32) z_j = z[undirec[:, 1]].to(torch.float32) r_ij = norm(xyz[undirec[:, 0]] - xyz[undirec[:, 1]]) - phi = self.zbl_phi(r_ij=r_ij, - z_i=z_i, - z_j=z_j) - pairwise = (KE_KCAL * z_i * z_j / r_ij - * phi - * spooky_f_cut(r_ij, self.r_cut)) - energy = scatter_pairwise(pairwise=pairwise, - num_atoms=num_atoms, - nbrs=undirec).reshape(-1, 1) + phi = self.zbl_phi(r_ij=r_ij, z_i=z_i, z_j=z_j) + pairwise = KE_KCAL * z_i * z_j / r_ij * phi * spooky_f_cut(r_ij, self.r_cut) + energy = scatter_pairwise(pairwise=pairwise, num_atoms=num_atoms, nbrs=undirec).reshape(-1, 1) # this_z_i = z[undirec[:, 0][:36]] # this_z_j = z[undirec[:, 1][:36]] @@ -961,34 +821,20 @@ def forward(self, class AtomwiseReadout(nn.Module): - def __init__(self, - feat_dim, - max_z=DEFAULT_MAX_Z): + def __init__(self, feat_dim, max_z=DEFAULT_MAX_Z): super().__init__() - self.w_e = Dense(in_features=feat_dim, - out_features=1, - bias=False, - activation=None) + self.w_e = Dense(in_features=feat_dim, out_features=1, bias=False, activation=None) self.z_bias = nn.Embedding(max_z, 1, padding_idx=0) - def forward(self, - z, - f, - num_atoms): - + def forward(self, z, f, num_atoms): atomwise = self.w_e(f) + self.z_bias(z) - e_total = scatter_mol(atomwise=atomwise, - num_atoms=num_atoms) + e_total = scatter_mol(atomwise=atomwise, num_atoms=num_atoms) return e_total -def get_dipole(xyz, - q, - num_atoms): - +def get_dipole(xyz, q, num_atoms): qr = q * xyz - dipole = scatter_mol(atomwise=qr, - num_atoms=num_atoms) + dipole = scatter_mol(atomwise=qr, num_atoms=num_atoms) return dipole diff --git a/nff/nn/modules/spooky_painn.py b/nff/nn/modules/spooky_painn.py index 1630c39b..ac32b183 100644 --- a/nff/nn/modules/spooky_painn.py +++ b/nff/nn/modules/spooky_painn.py @@ -212,7 +212,7 @@ def charge_and_dip(self, xyz, s_i, v_i, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = atom_charges[counter: counter + n] + old_val = atom_charges[counter : counter + n] new_val = old_val + correction[i] new_charges.append(new_val) @@ -358,7 +358,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.dense(av) - e_psi[counter: counter + num_atoms[j]] = this_e_psi + e_psi[counter : counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi diff --git a/nff/nn/modules/torchmd_net.py b/nff/nn/modules/torchmd_net.py index bc0dc515..940a9628 100644 --- a/nff/nn/modules/torchmd_net.py +++ b/nff/nn/modules/torchmd_net.py @@ -1,26 +1,17 @@ import torch from torch import nn -from nff.nn.layers import (CosineEnvelope, Dense) +from nff.nn.layers import CosineEnvelope, Dense from nff.utils.scatter import scatter_add from nff.utils.tools import layer_types class DistanceEmbeding(nn.Module): - - def __init__(self, - feat_dim, - dropout, - rbf, - bias=False): - + def __init__(self, feat_dim, dropout, rbf, bias=False): super().__init__() n_rbf = rbf.mu.shape[0] cutoff = rbf.cutoff - dense = Dense(in_features=n_rbf, - out_features=feat_dim, - bias=bias, - dropout_rate=dropout) + dense = Dense(in_features=n_rbf, out_features=feat_dim, bias=bias, dropout_rate=dropout) self.block = nn.Sequential(rbf, dense) self.f_cut = CosineEnvelope(cutoff=cutoff) @@ -33,53 +24,31 @@ def forward(self, dist): class EmbeddingBlock(nn.Module): - def __init__(self, - feat_dim, - dropout, - rbf): - + def __init__(self, feat_dim, dropout, rbf): super().__init__() self.atom_embed = nn.Embedding(100, feat_dim, padding_idx=0) self.feat_dim = feat_dim - self.distance_embed = DistanceEmbeding(feat_dim=feat_dim, - dropout=dropout, - rbf=rbf, - bias=False) - - self.concat_dense = Dense(in_features=2 * feat_dim, - out_features=feat_dim, - dropout_rate=dropout, - activation=None) + self.distance_embed = DistanceEmbeding(feat_dim=feat_dim, dropout=dropout, rbf=rbf, bias=False) - def forward(self, - z_number, - nbrs, - dist): + self.concat_dense = Dense( + in_features=2 * feat_dim, out_features=feat_dim, dropout_rate=dropout, activation=None + ) + def forward(self, z_number, nbrs, dist): num_atoms = z_number.shape[0] node_embeddings = self.atom_embed(z_number) nbr_embeddings = self.atom_embed(z_number[nbrs[:, 1]]) edge_feats = self.distance_embed(dist) * nbr_embeddings - aggr_embeddings = scatter_add(src=edge_feats, - index=nbrs[:, 0], - dim=0, - dim_size=num_atoms) + aggr_embeddings = scatter_add(src=edge_feats, index=nbrs[:, 0], dim=0, dim_size=num_atoms) - final_embeddings = self.concat_dense(torch.cat([node_embeddings, - aggr_embeddings], - dim=-1)) + final_embeddings = self.concat_dense(torch.cat([node_embeddings, aggr_embeddings], dim=-1)) return final_embeddings class AttentionHeads(nn.Module): - def __init__(self, - feat_dim, - activation, - num_heads, - rbf): - + def __init__(self, feat_dim, activation, num_heads, rbf): super().__init__() self.rbf = rbf @@ -89,35 +58,26 @@ def __init__(self, self.dk_layer = nn.Sequential( nn.Conv1d( - in_channels=n_rbf * num_heads, - out_channels=feat_dim * num_heads, - kernel_size=1, - groups=num_heads), - layer_types[activation]() + in_channels=n_rbf * num_heads, out_channels=feat_dim * num_heads, kernel_size=1, groups=num_heads + ), + layer_types[activation](), ) - self.query_layer = nn.Conv1d(in_channels=feat_dim * num_heads, - out_channels=feat_dim * num_heads, - kernel_size=1, - groups=num_heads) + self.query_layer = nn.Conv1d( + in_channels=feat_dim * num_heads, out_channels=feat_dim * num_heads, kernel_size=1, groups=num_heads + ) - self.key_layer = nn.Conv1d(in_channels=feat_dim * num_heads, - out_channels=feat_dim * num_heads, - kernel_size=1, - groups=num_heads) + self.key_layer = nn.Conv1d( + in_channels=feat_dim * num_heads, out_channels=feat_dim * num_heads, kernel_size=1, groups=num_heads + ) self.activation = layer_types[activation]() self.num_heads = num_heads - def forward(self, - dist, - nbrs, - x_i): - + def forward(self, dist, nbrs, x_i): x_i_nbrs = x_i[nbrs[:, 0]] x_j = x_i[nbrs[:, 1]] - edge_feats = (self.rbf(dist) - * self.f_cut(dist).reshape(-1, 1)) + edge_feats = self.rbf(dist) * self.f_cut(dist).reshape(-1, 1) x_i_inp = x_i_nbrs.repeat(1, self.num_heads).unsqueeze(-1) x_j_inp = x_j.repeat(1, self.num_heads).unsqueeze(-1) @@ -136,46 +96,30 @@ def forward(self, class MessageBlock(nn.Module): - def __init__(self, - feat_dim, - num_heads, - activation, - rbf): - + def __init__(self, feat_dim, num_heads, activation, rbf): super().__init__() n_rbf = rbf.mu.shape[0] - self.attention_heads = AttentionHeads(feat_dim=feat_dim, - activation=activation, - num_heads=num_heads, - rbf=rbf) + self.attention_heads = AttentionHeads(feat_dim=feat_dim, activation=activation, num_heads=num_heads, rbf=rbf) - self.v_layer = nn.Conv1d(in_channels=feat_dim * num_heads, - out_channels=feat_dim * num_heads, - kernel_size=1, - groups=num_heads) + self.v_layer = nn.Conv1d( + in_channels=feat_dim * num_heads, out_channels=feat_dim * num_heads, kernel_size=1, groups=num_heads + ) self.dv_layer = nn.Sequential( nn.Conv1d( - in_channels=n_rbf * num_heads, - out_channels=feat_dim * num_heads, - kernel_size=1, - groups=num_heads), - layer_types[activation]() + in_channels=n_rbf * num_heads, out_channels=feat_dim * num_heads, kernel_size=1, groups=num_heads + ), + layer_types[activation](), ) self.rbf = self.attention_heads.rbf self.f_cut = self.attention_heads.f_cut self.num_heads = num_heads - def forward(self, - dist, - nbrs, - x_i): - + def forward(self, dist, nbrs, x_i): x_j = x_i[nbrs[:, 1]] - edge_feats = (self.rbf(dist) - * self.f_cut(dist).reshape(-1, 1)) + edge_feats = self.rbf(dist) * self.f_cut(dist).reshape(-1, 1) x_j_inp = x_j.repeat(1, self.num_heads).unsqueeze(-1) edge_inp = edge_feats.repeat(1, self.num_heads).unsqueeze(-1) @@ -185,14 +129,10 @@ def forward(self, prod_v = v_feats * d_v - weights = self.attention_heads(dist=dist, - nbrs=nbrs, - x_i=x_i) + weights = self.attention_heads(dist=dist, nbrs=nbrs, x_i=x_i) # dimension num_edges x num_heads x num_features - scaled_v = (prod_v.reshape(prod_v.shape[0], - self.num_heads, -1) * - weights.unsqueeze(-1)) + scaled_v = prod_v.reshape(prod_v.shape[0], self.num_heads, -1) * weights.unsqueeze(-1) # reshape it into a concatenation, i.e. dimension # num_edges x (num_heads * num_features) @@ -203,28 +143,16 @@ def forward(self, class UpdateBlock(nn.Module): - def __init__(self, - num_heads, - feat_dim, - dropout): + def __init__(self, num_heads, feat_dim, dropout): super().__init__() - self.concat_dense = Dense(in_features=(num_heads * feat_dim), - out_features=feat_dim, - bias=True, - dropout_rate=dropout, - activation=None) - - def forward(self, - nbrs, - x_i, - scaled_v): + self.concat_dense = Dense( + in_features=(num_heads * feat_dim), out_features=feat_dim, bias=True, dropout_rate=dropout, activation=None + ) + def forward(self, nbrs, x_i, scaled_v): # dimension num_nodes x num_heads x num_features - x_i_prime = scatter_add(src=scaled_v, - index=nbrs[:, 0], - dim=0, - dim_size=x_i.shape[0]) + x_i_prime = scatter_add(src=scaled_v, index=nbrs[:, 0], dim=0, dim_size=x_i.shape[0]) x_i = x_i + self.concat_dense(x_i_prime) return x_i diff --git a/nff/nn/tensorgrad.py b/nff/nn/tensorgrad.py index 3f55222b..36e8b2e0 100644 --- a/nff/nn/tensorgrad.py +++ b/nff/nn/tensorgrad.py @@ -1,5 +1,5 @@ -"""Summary -""" +"""Summary""" + import numpy as np import copy import inspect @@ -46,31 +46,31 @@ def compute_jacobian(inputs, output, device): return torch.transpose(jacobian, dim0=0, dim1=1) -def compute_grad(inputs, - output, - allow_unused=False): - ''' +def compute_grad(inputs, output, allow_unused=False): + """ Args: inputs (torch.Tensor): size (N_in, ) output (torch.Tensor): size (..., -1) Returns: torch.Tensor: size (N_in, ) - ''' + """ assert inputs.requires_grad - gradspred, = grad(output, - inputs, - grad_outputs=output.data.new(output.shape).fill_(1), - create_graph=True, - retain_graph=True, - allow_unused=allow_unused) + (gradspred,) = grad( + output, + inputs, + grad_outputs=output.data.new(output.shape).fill_(1), + create_graph=True, + retain_graph=True, + allow_unused=allow_unused, + ) return gradspred def compute_hess(inputs, output, device): - ''' + """ Compute Hessians for arbitary model Args: @@ -80,7 +80,7 @@ def compute_hess(inputs, output, device): Returns: torch.Tensor: N_in, N_in, N_out - ''' + """ gradient = compute_grad(inputs, output) hess = compute_jacobian(inputs, gradient, device=device) @@ -95,7 +95,7 @@ def get_schnet_hessians(batch, model, device=0): model (TYPE): Description device (int, optional): Description """ - N_atom = batch['nxyz'].shape[0] + N_atom = batch["nxyz"].shape[0] xyz_reshape = batch["nxyz"][:, 1:].reshape(1, N_atom * 3) xyz_reshape.requires_grad = True xyz_input = xyz_reshape.reshape(N_atom, 3) @@ -117,7 +117,7 @@ def get_painn_hessians(batch, model, device=0): model (TYPE): Description device (int, optional): Description """ - N_atom = batch['nxyz'].shape[0] + N_atom = batch["nxyz"].shape[0] xyz_reshape = batch["nxyz"][:, 1:].reshape(1, N_atom * 3) xyz_reshape.requires_grad = True xyz_input = xyz_reshape.reshape(N_atom, 3) @@ -130,13 +130,11 @@ def get_painn_hessians(batch, model, device=0): def adj_nbrs_and_z(batch, xyz, max_dim, stacked): - nan_dims = [i for i, row in enumerate(xyz) if torch.isnan(row).all()] new_nbrs = copy.deepcopy(batch["nbr_list"]) new_z = copy.deepcopy(batch["nxyz"][:, 0]) for dim in nan_dims: - # adjust the neighbor list to account for the increased length # of the nxyz @@ -144,10 +142,14 @@ def adj_nbrs_and_z(batch, xyz, max_dim, stacked): new_nbrs[mask] += 1 # add dummy atomic numbers for these new nan's - new_z = torch.cat([new_z[:dim], - torch.Tensor([float("nan")]).to(new_z.device), - # torch.Tensor([float("1")]).to(new_z.device), - new_z[dim:]]) + new_z = torch.cat( + [ + new_z[:dim], + torch.Tensor([float("nan")]).to(new_z.device), + # torch.Tensor([float("1")]).to(new_z.device), + new_z[dim:], + ] + ) # change the neighbor list in the batch batch["real_nbrs"] = copy.deepcopy(batch["nbr_list"]) @@ -155,8 +157,7 @@ def adj_nbrs_and_z(batch, xyz, max_dim, stacked): # change the nxyz in the batch batch["real_nxyz"] = copy.deepcopy(batch["nxyz"]) - batch["nxyz"] = torch.cat([new_z.reshape(-1, 1), xyz], - dim=-1) + batch["nxyz"] = torch.cat([new_z.reshape(-1, 1), xyz], dim=-1) # change the number of atoms in the batch batch["real_num_atoms"] = copy.deepcopy(batch["num_atoms"]) @@ -170,7 +171,6 @@ def adj_nbrs_and_z(batch, xyz, max_dim, stacked): def pad(batch): - nxyz = batch["nxyz"] N = batch["num_atoms"].tolist() @@ -184,10 +184,7 @@ def pad(batch): num_pads = [max_dim - i.shape[0] for i in reshaped] # pad each geometry and stack the resulting nxyz's - stacked = torch.stack([F.pad(i, [0, num_pad], - value=nan) - for i, num_pad in - zip(reshaped, num_pads)]) + stacked = torch.stack([F.pad(i, [0, num_pad], value=nan) for i, num_pad in zip(reshaped, num_pads)]) # Get the stacked `xyz` by applying a mask to # remove the atomic numbers in the nxyz. We need @@ -219,7 +216,6 @@ def pad(batch): def hess_from_pad(stacked, output, device, N): - gradient = compute_grad(stacked, output) pad_hess = compute_jacobian(stacked, gradient, device=device) hess_list = [] @@ -231,11 +227,7 @@ def hess_from_pad(stacked, output, device, N): return hess_list -def schnet_batched_hessians(batch, - model, - device=0, - energy_keys=["energy"]): - +def schnet_batched_hessians(batch, model, device=0, energy_keys=["energy"]): from nff.nn.graphop import batch_and_sum stack_xyz, xyz, batch = pad(batch) @@ -247,10 +239,7 @@ def schnet_batched_hessians(batch, for key in energy_keys: output = results[key] - hess = hess_from_pad(stacked=stack_xyz, - output=output, - device=device, - N=N) + hess = hess_from_pad(stacked=stack_xyz, output=output, device=device, N=N) hess_dic[key + "_hess"] = hess # change these keys back to their original values @@ -266,12 +255,8 @@ def schnet_batched_hessians(batch, return hess_dic -def results_from_stack(batch, - model=None, - forward=None, - **kwargs): - - batch['nxyz'] = batch['nxyz'].detach() +def results_from_stack(batch, model=None, forward=None, **kwargs): + batch["nxyz"] = batch["nxyz"].detach() stack_xyz, xyz, batch = pad(batch) # Make sure the model takes `xyz` as an input @@ -284,33 +269,22 @@ def results_from_stack(batch, forward = model.forward info = inspect.getargspec(forward) - if 'xyz' not in info.args: - raise Exception(("Model does not take xyz as input. " - "Please modify the model so that it can take " - "an external xyz.")) - results = forward(batch=batch, - xyz=xyz, - **kwargs) + if "xyz" not in info.args: + raise Exception( + ("Model does not take xyz as input. " "Please modify the model so that it can take " "an external xyz.") + ) + results = forward(batch=batch, xyz=xyz, **kwargs) return xyz, stack_xyz, results -def hess_from_results(results, - xyz, - stack_xyz, - keys, - batch, - device): - +def hess_from_results(results, xyz, stack_xyz, keys, batch, device): hess_dic = {} - N = batch['real_num_atoms'] + N = batch["real_num_atoms"] for key in keys: output = results[key] - hess = hess_from_pad(stacked=stack_xyz, - output=output, - device=device, - N=N) + hess = hess_from_pad(stacked=stack_xyz, output=output, device=device, N=N) hess_dic[key + "_hess"] = hess # change these keys back to their original values @@ -328,27 +302,13 @@ def hess_from_results(results, return results -def general_batched_hessian(batch, - keys, - device, - model=None, - forward=None, - **kwargs): - +def general_batched_hessian(batch, keys, device, model=None, forward=None, **kwargs): # doesn't seem to work for painn, at least with non-locality assert any([i is not None for i in [model, forward]]) - xyz, stack_xyz, results = results_from_stack(batch=batch, - model=model, - forward=forward, - **kwargs) - - results = hess_from_results(results=results, - xyz=xyz, - stack_xyz=stack_xyz, - keys=keys, - batch=batch, - device=device) + xyz, stack_xyz, results = results_from_stack(batch=batch, model=model, forward=forward, **kwargs) + + results = hess_from_results(results=results, xyz=xyz, stack_xyz=stack_xyz, keys=keys, batch=batch, device=device) return results @@ -378,8 +338,7 @@ def hess_from_atoms(atoms): n = atoms.get_atomic_numbers().reshape(-1, 1) nxyz = np.concatenate([n, xyz], axis=-1) dset = Dataset(props={"nxyz": [nxyz]}) - dset.generate_neighbor_list(cutoff, - undirected=(not directed)) + dset.generate_neighbor_list(cutoff, undirected=(not directed)) loader = DataLoader(dset, collate_fn=collate_dicts) batch = next(iter(loader)) @@ -389,17 +348,12 @@ def hess_from_atoms(atoms): # get the results key = getattr(atoms.calc, "en_key", "energy") - results = general_batched_hessian(batch=batch, - keys=[key], - device=device, - model=model) + results = general_batched_hessian(batch=batch, keys=[key], device=device, model=model) hess_key = key + "_hess" hessian = torch.stack(results[hess_key]) hessian = hessian.reshape(*hessian.shape[1:]) - hessian = (hessian.detach().cpu().numpy() * - const.KCAL_TO_AU['energy'] * - const.BOHR_RADIUS ** 2) + hessian = hessian.detach().cpu().numpy() * const.KCAL_TO_AU["energy"] * const.BOHR_RADIUS**2 return hessian diff --git a/nff/nn/utils.py b/nff/nn/utils.py index c5e18b5b..a7a67de4 100644 --- a/nff/nn/utils.py +++ b/nff/nn/utils.py @@ -1,4 +1,5 @@ """Tools to build layers""" + import collections import numpy as np import torch @@ -40,8 +41,7 @@ def construct_sequential(layers): """ return Sequential( collections.OrderedDict( - [layer["name"] + str(i), layer_types[layer["name"]](**layer["param"])] - for i, layer in enumerate(layers) + [layer["name"] + str(i), layer_types[layer["name"]](**layer["param"])] for i, layer in enumerate(layers) ) ) @@ -148,9 +148,7 @@ def clean_matrix(matrix, eps=1e-12): return matrix -def torch_nbr_list( - atomsobject, cutoff, device="cuda:0", directed=True, requires_large_offsets=True -): +def torch_nbr_list(atomsobject, cutoff, device="cuda:0", directed=True, requires_large_offsets=True): """Pytorch implementations of nbr_list for minimum image convention, the offsets are only limited to 0, 1, -1: it means that no pair interactions is allowed for more than 1 periodic box length. It is so much faster than neighbor_list algorithm in ase. @@ -170,10 +168,7 @@ def torch_nbr_list( # otherwise, default to the "robust" nbr_list function below for small cells if ( np.all(2 * cutoff < atomsobject.cell.cellpar()[:3]) - and not np.count_nonzero( - atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T)) - ) - != 0 + and not np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) != 0 ): # "fast" nbr_list function for large cells (pbc) xyz = torch.Tensor(atomsobject.get_positions(wrap=False)).to(device) @@ -183,17 +178,13 @@ def torch_nbr_list( shift = torch.round(torch.divide(dis_mat, cell_dim)) offsets = -shift else: - offsets = -dis_mat.ge(0.5 * cell_dim).to(torch.float) + dis_mat.lt( - -0.5 * cell_dim - ).to(torch.float) + offsets = -dis_mat.ge(0.5 * cell_dim).to(torch.float) + dis_mat.lt(-0.5 * cell_dim).to(torch.float) dis_mat = dis_mat + offsets * cell_dim dis_sq = dis_mat.pow(2).sum(-1) mask = (dis_sq < cutoff**2) & (dis_sq != 0) nbr_list = mask.nonzero(as_tuple=False) - offsets = ( - offsets[nbr_list[:, 0], nbr_list[:, 1], :].detach().to("cpu").numpy() - ) + offsets = offsets[nbr_list[:, 0], nbr_list[:, 1], :].detach().to("cpu").numpy() else: # "robust" nbr_list function for all cells (pbc) @@ -205,9 +196,7 @@ def torch_nbr_list( unwrapped_positions = atomsobject.get_positions(wrap=False) shift = positions - unwrapped_positions cell = atomsobject.cell - cell = np.broadcast_to( - cell.T, (shift.shape[0], cell.shape[0], cell.shape[1]) - ) + cell = np.broadcast_to(cell.T, (shift.shape[0], cell.shape[0], cell.shape[1])) shift = np.linalg.solve(cell, shift).round().astype(int) # estimate getting close to the cutoff with supercell expansion @@ -222,12 +211,8 @@ def torch_nbr_list( lattice_points_frac = lattice_points_in_supercell(supercell_matrix) lattice_points = np.dot(lattice_points_frac, supercell) # need to get all negative lattice translation vectors but remove duplicate 0 vector - zero_idx = np.where( - np.all(lattice_points.__eq__(np.array([0, 0, 0])), axis=1) - )[0][0] - lattice_points = np.concatenate( - [lattice_points[zero_idx:, :], lattice_points[:zero_idx, :]] - ) + zero_idx = np.where(np.all(lattice_points.__eq__(np.array([0, 0, 0])), axis=1))[0][0] + lattice_points = np.concatenate([lattice_points[zero_idx:, :], lattice_points[:zero_idx, :]]) N = len(lattice_points) # perform lattice translation vectors on positions @@ -247,9 +232,7 @@ def torch_nbr_list( ] # get offsets as original integer multiples of lattice vectors - cell = np.broadcast_to( - cell.T, (offsets.shape[0], cell.shape[0], cell.shape[1]) - ) + cell = np.broadcast_to(cell.T, (offsets.shape[0], cell.shape[0], cell.shape[1])) offsets = offsets.detach().to("cpu").numpy() offsets = np.linalg.solve(cell, offsets).round().astype(int) @@ -488,9 +471,7 @@ def chemprop_msg_to_node(h, nbrs, num_nodes): h_to_add = h[good_idx] # add together - node_features = scatter_add( - src=h_to_add, index=match_idx, dim=0, dim_size=num_nodes - ) + node_features = scatter_add(src=h_to_add, index=match_idx, dim=0, dim_size=num_nodes) return node_features diff --git a/nff/opt/algos.py b/nff/opt/algos.py index 622a43d5..ddfa7353 100644 --- a/nff/opt/algos.py +++ b/nff/opt/algos.py @@ -3,8 +3,6 @@ import scipy.optimize as opt import numpy as np -from warnings import warn - class Converged(Exception): pass @@ -15,28 +13,26 @@ class OptimizerConvergenceError(Exception): class NeuralCG(SciPyFminCG): - def call_fmin(self, fmax, steps): - output = opt.fmin_cg(self.f, - self.x0(), - fprime=self.fprime, - # args=(), - gtol=fmax * 0.1, # Should never be reached - norm=np.inf, - # epsilon= - maxiter=steps, - full_output=1, - disp=0, - # retall=0, - callback=self.callback) + output = opt.fmin_cg( + self.f, + self.x0(), + fprime=self.fprime, + # args=(), + gtol=fmax * 0.1, # Should never be reached + norm=np.inf, + # epsilon= + maxiter=steps, + full_output=1, + disp=0, + # retall=0, + callback=self.callback, + ) warnflag = output[-1] if warnflag == 2: - raise OptimizerConvergenceError( - 'Warning: Desired error not necessarily achieved ' - 'due to precision loss') + raise OptimizerConvergenceError("Warning: Desired error not necessarily achieved " "due to precision loss") def run(self, fmax=0.05, steps=100000000): - if self.force_consistent is None: self.set_force_consistent() self.fmax = fmax @@ -54,9 +50,7 @@ def run(self, fmax=0.05, steps=100000000): class NeuralBFGS(SciPyFminBFGS): - def run(self, fmax=0.05, steps=100000000): - if self.force_consistent is None: self.set_force_consistent() self.fmax = fmax @@ -73,7 +67,6 @@ def run(self, fmax=0.05, steps=100000000): class NeuralAseBFGS(BFGS): - def step(self, f=None): atoms = self.atoms @@ -87,6 +80,7 @@ def step(self, f=None): self.update(r.flat, f, self.r0, self.f0) from numpy.linalg import eigh + omega, V = eigh(self.H) # FUTURE: Log this properly @@ -102,7 +96,7 @@ def step(self, f=None): # self.logfile.flush() dr = np.dot(V, np.dot(f, V) / np.fabs(omega)).reshape((-1, 3)) - steplengths = (dr**2).sum(1)**0.5 + steplengths = (dr**2).sum(1) ** 0.5 dr = self.determine_step(dr, steplengths) atoms.set_positions(r + dr) self.r0 = r.flat.copy() diff --git a/nff/qm/integrals/overlap.py b/nff/qm/integrals/overlap.py index dfedf5c3..ed730fd3 100644 --- a/nff/qm/integrals/overlap.py +++ b/nff/qm/integrals/overlap.py @@ -16,10 +16,7 @@ # @torch.jit.script -def horizontal(s: torch.Tensor, - p: float, - r_pa: torch.Tensor): - +def horizontal(s: torch.Tensor, p: float, r_pa: torch.Tensor): num = s.shape[0] for i in range(1, num): @@ -33,11 +30,7 @@ def horizontal(s: torch.Tensor, # @torch.jit.script -def vertical(s: torch.Tensor, - r_pb: torch.Tensor, - p: float, - device: int): - +def vertical(s: torch.Tensor, r_pb: torch.Tensor, p: float, device: int): l_1 = s.shape[2] i_range = torch.arange(s.shape[1]).to(device) @@ -46,12 +39,11 @@ def vertical(s: torch.Tensor, zeros = torch.zeros(3, 1).to(device) for j in range(1, l_1): - s_term = r_pb_shape * s[:, :, j - 1].clone() new_s = torch.cat((zeros, s[:, :-1, j - 1]), dim=1) i_term = i_range / (2 * p) * new_s - s[:, :, j] = (s_term + i_term) + s[:, :, j] = s_term + i_term if j > 1: j_term = (j - 1) / (2 * p) * s[:, :, j - 2] @@ -61,11 +53,7 @@ def vertical(s: torch.Tensor, # @torch.jit.script -def get_prelims(r_a: torch.Tensor, - r_b: torch.Tensor, - a: float, - b: float): - +def get_prelims(r_a: torch.Tensor, r_b: torch.Tensor, a: float, b: float): p = a + b mu = a * b / (a + b) @@ -75,20 +63,12 @@ def get_prelims(r_a: torch.Tensor, r_pa = big_p - r_a r_pb = big_p - r_b - s_0 = (torch.sqrt(torch.tensor(np.pi / p)) - * torch.exp(-mu * r_ab ** 2)) + s_0 = torch.sqrt(torch.tensor(np.pi / p)) * torch.exp(-mu * r_ab**2) return r_pa, r_pb, s_0, p -def compute_overlaps(l_0, - l_1, - p, - r_pa, - r_pb, - s_0, - device): - +def compute_overlaps(l_0, l_1, p, r_pa, r_pb, s_0, device): r_pa = r_pa.to(device) r_pb = r_pb.to(device) @@ -96,24 +76,16 @@ def compute_overlaps(l_0, s[0, :] = s_0.to(device) s = horizontal(s, p, r_pa) - s_t = (s.transpose(0, 1).reshape(3, 1, -1) - .transpose(1, 2)) + s_t = s.transpose(0, 1).reshape(3, 1, -1).transpose(1, 2) - zeros = (torch.zeros((3, l_0, l_1 - 1)) - .to(device)) + zeros = torch.zeros((3, l_0, l_1 - 1)).to(device) s = torch.cat([s_t, zeros], dim=2) s = vertical(s, r_pb, p, device) return s -def pos_to_overlaps(r_a, - r_b, - a, - b, - l_0, - l_1, - device): +def pos_to_overlaps(r_a, r_b, a, b, l_0, l_1, device): """ Overlaps between the Cartesian Gaussian orbitals of two atoms at r_a and r_b, respectively, @@ -121,18 +93,9 @@ def pos_to_overlaps(r_a, and maximum angular momenta l_0 and l_1. """ - r_pa, r_pb, s_0, p = get_prelims(r_a=r_a, - r_b=r_b, - a=a, - b=b) + r_pa, r_pb, s_0, p = get_prelims(r_a=r_a, r_b=r_b, a=a, b=b) - s = compute_overlaps(l_0=l_0, - l_1=l_1, - p=p, - r_pa=r_pa, - r_pb=r_pb, - s_0=s_0, - device=device) + s = compute_overlaps(l_0=l_0, l_1=l_1, p=p, r_pa=r_pa, r_pb=r_pb, s_0=s_0, device=device) return s @@ -150,13 +113,7 @@ def test(): l_1 = 5 start = time.time() - s = pos_to_overlaps(r_a, - r_b, - a, - b, - l_0, - l_1, - device='cpu') + s = pos_to_overlaps(r_a, r_b, a, b, l_0, l_1, device="cpu") end = time.time() delta = end - start print("%.5e seconds" % delta) @@ -173,8 +130,7 @@ def test(): targs = [0.167162, 7.52983e-5, -0.0320324] for i, idx in enumerate(idx_pairs): print(idx) - print("Predicted value: %.5e" % - (s[idx[0], idx[1], idx[2]])) + print("Predicted value: %.5e" % (s[idx[0], idx[1], idx[2]])) print("Target value: %.5e" % targs[i]) diff --git a/nff/reactive_tools/ev_following.py b/nff/reactive_tools/ev_following.py index 1ed80585..d694bffd 100644 --- a/nff/reactive_tools/ev_following.py +++ b/nff/reactive_tools/ev_following.py @@ -30,11 +30,7 @@ def powell_update(hessian_old, h, gradient_old, gradient_new): update = ( torch.mm(V.reshape(-1, 1), h.reshape(1, -1)) + torch.mm(h.reshape(-1, 1), V.reshape(1, -1)) - - ( - torch.dot(V, h) - / torch.dot(h, h) - * torch.mm(h.reshape(-1, 1), h.reshape(1, -1)) - ) + - (torch.dot(V, h) / torch.dot(h, h) * torch.mm(h.reshape(-1, 1), h.reshape(1, -1))) ) / torch.dot(h, h) powell_hessian = hessian_old + update @@ -92,9 +88,7 @@ def eigvec_following( lambda_n = torch.linalg.eigvalsh(matrix_n, UPLO="U")[0] - lambda_n = lambda_n.new_full((Ndim * len(old_xyz[0]) - 1,), lambda_n.item()).to( - device - ) + lambda_n = lambda_n.new_full((Ndim * len(old_xyz[0]) - 1,), lambda_n.item()).to(device) h_p = -1.0 * F[0] * eigvecs_t[0] / (eigenvalues[0] - lambda_p) h_n = -1.0 * F[1:] * eigvecs_t[1:] / ((eigenvalues[1:] - lambda_n).reshape(-1, 1)) @@ -138,9 +132,7 @@ def ev_run( rmslist = [] maxlist = [] - calc_kwargs = get_calc_kwargs( - calc_kwargs=calc_kwargs, device=device, nff_dir=nff_dir - ) + calc_kwargs = get_calc_kwargs(calc_kwargs=calc_kwargs, device=device, nff_dir=nff_dir) nff = NeuralFF.from_file(**calc_kwargs) ev_atoms.set_calculator(nff) @@ -155,9 +147,7 @@ def ev_run( else: args = [hessian, grad, h] - xyz, grad, hessian, h = eigvec_following( - ev_atoms, step, maxstepsize, device, method, *args - ) + xyz, grad, hessian, h = eigvec_following(ev_atoms, step, maxstepsize, device, method, *args) if step == 0: xyz_all = xyz @@ -166,11 +156,7 @@ def ev_run( rmslist.append(grad.pow(2).sqrt().mean()) maxlist.append(grad.pow(2).sqrt().max()) - print( - "RMS: {}, MAX: {}".format( - grad.pow(2).sqrt().mean(), grad.pow(2).sqrt().max() - ) - ) + print("RMS: {}, MAX: {}".format(grad.pow(2).sqrt().mean(), grad.pow(2).sqrt().max())) if grad.pow(2).sqrt().max() < convergence: print(CONVG_LINE) diff --git a/nff/reactive_tools/kabsch.py b/nff/reactive_tools/kabsch.py index 0c4571a1..da90d74d 100644 --- a/nff/reactive_tools/kabsch.py +++ b/nff/reactive_tools/kabsch.py @@ -6,10 +6,7 @@ from acore import settings import acore as ac except ModuleNotFoundError: - print( - "You need to install the group's fork of aRMSD and put it in your path " - "https://github.mit.edu/MLMat/aRMSD" - ) + print("You need to install the group's fork of aRMSD and put it in your path " "https://github.mit.edu/MLMat/aRMSD") VERSION, YEAR = "0.9.4", "2017" @@ -77,9 +74,7 @@ def kabsch(rxn, indexedproductgeom_raw, reactantgeom_raw, rid, pid): idp_element_symbol, idp_element_xyz = ac.read_xyz_file(logger, idp_data) idp_element_xyz_std = None # Create a molecule object - molecule1 = ac.Molecule( - idp_mol_name, idp_element_symbol, idp_element_xyz, idp_element_xyz_std - ) + molecule1 = ac.Molecule(idp_mol_name, idp_element_symbol, idp_element_xyz, idp_element_xyz_std) molecule1.get_charge() molecule1.get_mass() molecule1.calc_com(calc_for="molecule") @@ -95,9 +90,7 @@ def kabsch(rxn, indexedproductgeom_raw, reactantgeom_raw, rid, pid): rxt_element_symbol, rxt_element_xyz = ac.read_xyz_file(logger, rxt_data) rxt_element_xyz_std = None # Create a molecule object - molecule2 = ac.Molecule( - rxt_mol_name, rxt_element_symbol, rxt_element_xyz, rxt_element_xyz_std - ) + molecule2 = ac.Molecule(rxt_mol_name, rxt_element_symbol, rxt_element_xyz, rxt_element_xyz_std) molecule2.get_charge() molecule2.get_mass() molecule2.calc_com(calc_for="molecule") diff --git a/nff/reactive_tools/nms.py b/nff/reactive_tools/nms.py index 73e40cda..356c9f6e 100644 --- a/nff/reactive_tools/nms.py +++ b/nff/reactive_tools/nms.py @@ -8,24 +8,24 @@ AMU_2_AU = 1822.88985136 k_B = 1.38064852e-23 PLANCKS_CONS = 6.62607015e-34 -HA2J = 4.359744E-18 +HA2J = 4.359744e-18 BOHRS2ANG = 0.529177 -SPEEDOFLIGHT = 2.99792458E8 -AMU2KG = 1.660538782E-27 +SPEEDOFLIGHT = 2.99792458e8 +AMU2KG = 1.660538782e-27 class Boltzmann_gen(rv_discrete): "Boltzmann distribution" def _pmf(self, k, nu, temperature): - return ((np.exp(-(k * PLANCKS_CONS * nu) / (k_B * temperature))) * - (1 - np.exp(-(PLANCKS_CONS * nu) / (k_B * temperature)))) + return (np.exp(-(k * PLANCKS_CONS * nu) / (k_B * temperature))) * ( + 1 - np.exp(-(PLANCKS_CONS * nu) / (k_B * temperature)) + ) -def reactive_normal_mode_sampling(xyz, force_constants_J_m_2, - proj_vib_freq_cm_1, proj_hessian_eigvec, - temperature, - kick=1): +def reactive_normal_mode_sampling( + xyz, force_constants_J_m_2, proj_vib_freq_cm_1, proj_hessian_eigvec, temperature, kick=1 +): """Normal Mode Sampling for Transition States. Takes in xyz(1,N,3), force_constants(3N-6) in J/m^2, projected vibrational frequencies(3N-6) in cm^-1,mass-weighted projected hessian eigenvectors(3N-6,3N) ,temperature in K, and scaling factor of initial velocity of the lowest imaginary mode. @@ -36,18 +36,15 @@ def reactive_normal_mode_sampling(xyz, force_constants_J_m_2, boltzmann = Boltzmann_gen(a=0, b=1000000, name="boltzmann") for i, nu in enumerate(proj_vib_freq_cm_1): if nu > 50: - occ_vib_modes.append(boltzmann.rvs(nu * SPEEDOFLIGHT * 100, - temperature)) + occ_vib_modes.append(boltzmann.rvs(nu * SPEEDOFLIGHT * 100, temperature)) elif i == 0: - occ_vib_modes.append(boltzmann.rvs(-1 * nu * SPEEDOFLIGHT * 100, - temperature)) + occ_vib_modes.append(boltzmann.rvs(-1 * nu * SPEEDOFLIGHT * 100, temperature)) else: occ_vib_modes.append(-1) # Determine maximum displacement (amplitude) of each mode amplitudes = [] - freqs = [] for i, occ in enumerate(occ_vib_modes): if occ >= 0: energy = proj_vib_freq_cm_1[i] * SPEEDOFLIGHT * 100 * PLANCKS_CONS # cm-1 to Joules @@ -60,31 +57,41 @@ def reactive_normal_mode_sampling(xyz, force_constants_J_m_2, velocities = [] random_0_1 = [np.random.normal(0, 1) for i in range(len(amplitudes))] for i, amplitude in enumerate(amplitudes): - if force_constants_J_m_2[i] > 0: - - displacements.append(amplitude - * np.cos(2 * np.pi * random_0_1[i]) - * proj_hessian_eigvec[i]) - - velocities.append(-1 * proj_vib_freq_cm_1[i] * SPEEDOFLIGHT * 100 * 2 * np.pi - * amplitude - * np.sin(2 * np.pi * random_0_1[i]) - * proj_hessian_eigvec[i] / Bohr**2) + displacements.append(amplitude * np.cos(2 * np.pi * random_0_1[i]) * proj_hessian_eigvec[i]) + + velocities.append( + -1 + * proj_vib_freq_cm_1[i] + * SPEEDOFLIGHT + * 100 + * 2 + * np.pi + * amplitude + * np.sin(2 * np.pi * random_0_1[i]) + * proj_hessian_eigvec[i] + / Bohr**2 + ) elif i == 0: - displacements.append(0) velocities.append(0) # Extra kick for lowest imagninary mode(s) - velocities.append(-1 * proj_vib_freq_cm_1[i] * SPEEDOFLIGHT * 100 * 2 * np.pi - * amplitude - * np.sin(2 * np.pi * random_0_1[i]) - * proj_hessian_eigvec[i] / Bohr**2) + velocities.append( + -1 + * proj_vib_freq_cm_1[i] + * SPEEDOFLIGHT + * 100 + * 2 + * np.pi + * amplitude + * np.sin(2 * np.pi * random_0_1[i]) + * proj_hessian_eigvec[i] + / Bohr**2 + ) else: - displacements.append(0) velocities.append(0) diff --git a/nff/reactive_tools/reactive_langevin.py b/nff/reactive_tools/reactive_langevin.py index 8014a4c2..9e260aaf 100644 --- a/nff/reactive_tools/reactive_langevin.py +++ b/nff/reactive_tools/reactive_langevin.py @@ -6,13 +6,12 @@ class Reactive_Dynamics: - - def __init__(self, - atomsbatch, - nms_vel, - mdparam, - ): - + def __init__( + self, + atomsbatch, + nms_vel, + mdparam, + ): # initialize the atoms batch system self.atomsbatch = atomsbatch self.mdparam = mdparam @@ -20,9 +19,9 @@ def __init__(self, # initialize velocity from nms self.vel = nms_vel - self.temperature = self.mdparam['T_init'] + self.temperature = self.mdparam["T_init"] - self.friction = self.mdparam['friction'] + self.friction = self.mdparam["friction"] # todo: structure optimization before starting @@ -30,44 +29,41 @@ def __init__(self, self.atomsbatch.set_velocities(self.vel.reshape(-1, 3) * Ang / second) # set thermostats - integrator = self.mdparam['thermostat'] + integrator = self.mdparam["thermostat"] - self.integrator = integrator(self.atomsbatch, - self.mdparam['time_step'] * fs, - self.temperature * kB, - self.friction) + self.integrator = integrator( + self.atomsbatch, self.mdparam["time_step"] * fs, self.temperature * kB, self.friction + ) # attach trajectory dump - self.traj = Trajectory(self.mdparam['traj_filename'], 'w', self.atomsbatch) - self.integrator.attach(self.traj.write, interval=mdparam['save_frequency']) + self.traj = Trajectory(self.mdparam["traj_filename"], "w", self.atomsbatch) + self.integrator.attach(self.traj.write, interval=mdparam["save_frequency"]) # attach log file - self.integrator.attach(NeuralMDLogger(self.integrator, - self.atomsbatch, - self.mdparam['thermo_filename'], - mode='a'), interval=mdparam['save_frequency']) + self.integrator.attach( + NeuralMDLogger(self.integrator, self.atomsbatch, self.mdparam["thermo_filename"], mode="a"), + interval=mdparam["save_frequency"], + ) def run(self): - - self.integrator.run(self.mdparam['steps']) + self.integrator.run(self.mdparam["steps"]) # self.traj.close() def save_as_xyz(self, filename): - ''' + """ TODO: save time information TODO: subclass TrajectoryReader/TrajectoryReader to digest AtomsBatch instead of Atoms? TODO: other system variables in .xyz formats - ''' - traj = Trajectory(self.mdparam['traj_filename'], mode='r') + """ + traj = Trajectory(self.mdparam["traj_filename"], mode="r") xyz = [] for snapshot in traj: - frames = np.concatenate([ - snapshot.get_atomic_numbers().reshape(-1, 1), - snapshot.get_positions().reshape(-1, 3) - ], axis=1) + frames = np.concatenate( + [snapshot.get_atomic_numbers().reshape(-1, 1), snapshot.get_positions().reshape(-1, 3)], axis=1 + ) xyz.append(frames) diff --git a/nff/reactive_tools/utils.py b/nff/reactive_tools/utils.py index 6d4891e8..2c11c4b1 100644 --- a/nff/reactive_tools/utils.py +++ b/nff/reactive_tools/utils.py @@ -56,9 +56,7 @@ def xyz_to_ase_atoms(xyz_file): def moi_tensor(massvec, expmassvec, xyz): # Center of Mass - com = np.sum(expmassvec.reshape(-1, 3) * xyz.reshape(-1, 3), axis=0) / np.sum( - massvec - ) + com = np.sum(expmassvec.reshape(-1, 3) * xyz.reshape(-1, 3), axis=0) / np.sum(massvec) # xyz shifted to COM xyz_com = xyz.reshape(-1, 3) - com @@ -111,24 +109,18 @@ def trans_rot_vec(massvec, xyz_com, moi_eigvec): big_p = np.matmul(xyz_com, moi_eigvec) d4 = ( - np.repeat(big_p[:, 1], 3).reshape(-1) - * np.tile(moi_eigvec[:, 2], len(massvec)).reshape(-1) - - np.repeat(big_p[:, 2], 3).reshape(-1) - * np.tile(moi_eigvec[:, 1], len(massvec)).reshape(-1) + np.repeat(big_p[:, 1], 3).reshape(-1) * np.tile(moi_eigvec[:, 2], len(massvec)).reshape(-1) + - np.repeat(big_p[:, 2], 3).reshape(-1) * np.tile(moi_eigvec[:, 1], len(massvec)).reshape(-1) ) * expsqrtmassvec d5 = ( - np.repeat(big_p[:, 2], 3).reshape(-1) - * np.tile(moi_eigvec[:, 0], len(massvec)).reshape(-1) - - np.repeat(big_p[:, 0], 3).reshape(-1) - * np.tile(moi_eigvec[:, 2], len(massvec)).reshape(-1) + np.repeat(big_p[:, 2], 3).reshape(-1) * np.tile(moi_eigvec[:, 0], len(massvec)).reshape(-1) + - np.repeat(big_p[:, 0], 3).reshape(-1) * np.tile(moi_eigvec[:, 2], len(massvec)).reshape(-1) ) * expsqrtmassvec d6 = ( - np.repeat(big_p[:, 0], 3).reshape(-1) - * np.tile(moi_eigvec[:, 1], len(massvec)).reshape(-1) - - np.repeat(big_p[:, 1], 3).reshape(-1) - * np.tile(moi_eigvec[:, 0], len(massvec)).reshape(-1) + np.repeat(big_p[:, 0], 3).reshape(-1) * np.tile(moi_eigvec[:, 1], len(massvec)).reshape(-1) + - np.repeat(big_p[:, 1], 3).reshape(-1) * np.tile(moi_eigvec[:, 0], len(massvec)).reshape(-1) ) * expsqrtmassvec d1_norm = d1 / np.linalg.norm(d1) @@ -148,12 +140,7 @@ def vib_analy(r, xyz, hessian): # xyz is the cartesian coordinates in Angstrom # Hessian elements in atomic units (Ha/bohr^2) - massvec = np.array( - [ - PT.GetAtomicWeight(i.item()) * AMU2KG - for i in list(np.array(r.reshape(-1)).astype(int)) - ] - ) + massvec = np.array([PT.GetAtomicWeight(i.item()) * AMU2KG for i in list(np.array(r.reshape(-1)).astype(int))]) expmassvec = np.repeat(massvec, 3) sqrtinvmassvec = np.divide(1.0, np.sqrt(expmassvec)) hessian_mwc = np.einsum("i,ij,j->ij", sqrtinvmassvec, hessian, sqrtinvmassvec) @@ -178,9 +165,7 @@ def vib_analy(r, xyz, hessian): hessian_eigval_abs = np.abs(hessian_eigval) - pre_vib_freq_cm_1 = np.sqrt(hessian_eigval_abs * HA2J * 10e19) / ( - SPEEDOFLIGHT * 2 * np.pi * BOHRS2ANG * 100 - ) + pre_vib_freq_cm_1 = np.sqrt(hessian_eigval_abs * HA2J * 10e19) / (SPEEDOFLIGHT * 2 * np.pi * BOHRS2ANG * 100) vib_freq_cm_1 = pre_vib_freq_cm_1.copy() @@ -193,9 +178,7 @@ def vib_analy(r, xyz, hessian): if np.abs(freq) < 1.0: trans_rot_elms.append(i) - force_constants_J_m_2 = np.delete( - hessian_eigval * HA2J * 1e20 / (BOHRS2ANG**2) * AMU2KG, trans_rot_elms - ) + force_constants_J_m_2 = np.delete(hessian_eigval * HA2J * 1e20 / (BOHRS2ANG**2) * AMU2KG, trans_rot_elms) proj_vib_freq_cm_1 = np.delete(vib_freq_cm_1, trans_rot_elms) proj_hessian_eigvec = np.delete(hessian_eigvec.T, trans_rot_elms, 0) diff --git a/nff/tests/conftest.py b/nff/tests/conftest.py index 148fd0e0..9082d8b5 100644 --- a/nff/tests/conftest.py +++ b/nff/tests/conftest.py @@ -1,4 +1,3 @@ - import os import pytest import torch diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index 8e7ae935..eead469c 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -1,14 +1,9 @@ -import os import numpy as np import random -import json -import pdb -import logging from datetime import datetime from pytz import timezone import torch import copy -import csv import pickle from ase.md.md import MolecularDynamics @@ -31,14 +26,10 @@ LOG_FILE = "trj.log" -METHOD_DIC = { - "nosehoover": NoseHoover, - "nosehooverchain": NoseHooverChain -} +METHOD_DIC = {"nosehoover": NoseHoover, "nosehooverchain": NoseHooverChain} class ZhuNakamuraDynamics(ZhuNakamuraLogger): - """ Class for running Zhu-Nakamura surface-hopping dynamics. This method follows the description in Yu et. al, "Trajectory based nonadiabatic molecular dynamics without calculating nonadiabatic @@ -115,16 +106,18 @@ class ZhuNakamuraDynamics(ZhuNakamuraLogger): self.hopping_probability_list """ - def __init__(self, - atoms, - timestep, - max_time, - initial_time=0.0, - initial_surf=1, - num_states=2, - out_file=OUT_FILE, - log_file=LOG_FILE, - **kwargs): + def __init__( + self, + atoms, + timestep, + max_time, + initial_time=0.0, + initial_surf=1, + num_states=2, + out_file=OUT_FILE, + log_file=LOG_FILE, + **kwargs, + ): """ Initializes a ZhuNakamura instance. @@ -186,8 +179,16 @@ def __init__(self, self.ke_parallel = 0.0 self.ke = 0.0 - save_keys = ["position_list", "velocity_list", "force_list", "energy_list", "surf_list", "in_trj_list", - "hopping_probability_list", "time_list"] + save_keys = [ + "position_list", + "velocity_list", + "force_list", + "energy_list", + "surf_list", + "in_trj_list", + "hopping_probability_list", + "time_list", + ] super().__init__(save_keys=save_keys, **self.__dict__) @@ -366,11 +367,10 @@ def get_accel(self): # the force is force acting on the current state force = self.forces[self.surf] - accel = (force / self.get_masses().reshape(-1, 1)) + accel = force / self.get_masses().reshape(-1, 1) return accel def position_step(self): - # get current acceleration and velocity accel = self.get_accel() self.old_accel = accel @@ -380,11 +380,9 @@ def position_step(self): # Note also that we don't use += here, because that causes problems with # setters. - self.positions = self.positions + (self.velocities * self.dt + 1 / - 2 * accel * self.dt ** 2) * BOHR_RADIUS + self.positions = self.positions + (self.velocities * self.dt + 1 / 2 * accel * self.dt**2) * BOHR_RADIUS def velocity_step(self): - new_accel = self.get_accel() self.velocities = self.velocities + 1 / 2 * (new_accel + self.old_accel) * self.dt # assume the current frame is in the trajectory until finding out otherwise @@ -392,10 +390,12 @@ def velocity_step(self): # update surf (which also appends to surf_list) self.surf = self.surf self.time = self.time + self.dt - self.log("Completed step {}. Currently in state {}.".format( - int(self.time / self.dt), self.surf)) - self.log("Relative energies are {} eV".format(", ".join( - ((self.energies - self.energies[0]) * 27.2).reshape(-1).astype("str").tolist()))) + self.log("Completed step {}. Currently in state {}.".format(int(self.time / self.dt), self.surf)) + self.log( + "Relative energies are {} eV".format( + ", ".join(((self.energies - self.energies[0]) * 27.2).reshape(-1).astype("str").tolist()) + ) + ) def md_step(self): """ @@ -435,8 +435,7 @@ def check_crossing(self): if i == self.surf: continue # list of energy gaps - gaps = [abs(energies[i] - energies[self.surf]) - for energies in self.energy_list[-3:]] + gaps = [abs(energies[i] - energies[self.surf]) for energies in self.energy_list[-3:]] # whether or not the middle gap is the smallest of the three gap_min = gaps[0] > gaps[1] and gaps[2] > gaps[1] if gap_min: @@ -464,23 +463,25 @@ def update_diabatic_quants(self, lower_state, upper_state): r_12 = self.position_list[-2] - self.position_list[-1] # diabatic forecs on the lower state - lower_diabatic_forces = -(-self.force_list[-1][lower_state] * r_10 + - self.force_list[-3][upper_state] * r_12) / r_20 + lower_diabatic_forces = ( + -(-self.force_list[-1][lower_state] * r_10 + self.force_list[-3][upper_state] * r_12) / r_20 + ) # diabatic forces on the upper state - upper_diabatic_forces = -(-self.force_list[-1][upper_state] * r_10 + - self.force_list[-3][lower_state] * r_12) / r_20 + upper_diabatic_forces = ( + -(-self.force_list[-1][upper_state] * r_10 + self.force_list[-3][lower_state] * r_12) / r_20 + ) # array of forces on the lower and upper diabatic states - self.diabatic_forces = np.append([lower_diabatic_forces], [ - upper_diabatic_forces], axis=0) + self.diabatic_forces = np.append([lower_diabatic_forces], [upper_diabatic_forces], axis=0) # update diabatic coupling self.diabatic_coupling = ( - self.energy_list[-2][upper_state].item() - self.energy_list[-2][lower_state].item()) / 2 + self.energy_list[-2][upper_state].item() - self.energy_list[-2][lower_state].item() + ) / 2 # update Zhu difference parameter norm_vec = mol_norm(self.diabatic_forces[1] - self.diabatic_forces[0]) - self.zhu_difference = np.sum(norm_vec ** 2 / self.get_masses()) ** 0.5 + self.zhu_difference = np.sum(norm_vec**2 / self.get_masses()) ** 0.5 # update Zhu product parameter and the Zhu sign parameter prods = self.diabatic_forces[0] * self.diabatic_forces[1] @@ -490,16 +491,13 @@ def update_diabatic_quants(self, lower_state, upper_state): # get parallel component of velocity and the associated KE # First normalize s-vector to give n-vector - s = (self.diabatic_forces[1] - self.diabatic_forces[0] - ) / self.get_masses().reshape(-1, 1) ** 0.5 + s = (self.diabatic_forces[1] - self.diabatic_forces[0]) / self.get_masses().reshape(-1, 1) ** 0.5 self.n_vector = s / mol_norm(s).reshape(-1, 1) # Then get ke's self.v_parallel = mol_dot(self.velocity_list[-2], self.n_vector) - self.ke_parallel = np.sum( - self.get_masses() * (self.v_parallel ** 2) / 2) - self.ke = np.sum(self.get_masses() * - mol_norm(self.velocity_list[-2]) ** 2 / 2) + self.ke_parallel = np.sum(self.get_masses() * (self.v_parallel**2) / 2) + self.ke = np.sum(self.get_masses() * mol_norm(self.velocity_list[-2]) ** 2 / 2) def rescale_v(self, old_surf, new_surf): """ @@ -518,16 +516,13 @@ def rescale_v(self, old_surf, new_surf): v_par_vec = self.n_vector * (self.v_parallel).reshape(-1, 1) # the scaling factor for the velocities - scale_arg = (((energy[old_surf] + (self.ke_parallel)) - - energy[new_surf]) / (self.ke_parallel)) + scale_arg = ((energy[old_surf] + (self.ke_parallel)) - energy[new_surf]) / (self.ke_parallel) if scale_arg < 0: return "err" - scale = (((energy[old_surf] + (self.ke_parallel)) - - energy[new_surf]) / (self.ke_parallel)) ** 0.5 - self.velocities = scale * v_par_vec + \ - (self.velocity_list[-2] - v_par_vec) + scale = (((energy[old_surf] + (self.ke_parallel)) - energy[new_surf]) / (self.ke_parallel)) ** 0.5 + self.velocities = scale * v_par_vec + (self.velocity_list[-2] - v_par_vec) def update_probabilities(self): """ @@ -542,44 +537,39 @@ def update_probabilities(self): return # if the molecule's exploded then move on - if 'nan' in self.positions.astype("str") or 'nan' in self.forces.astype("str"): + if "nan" in self.positions.astype("str") or "nan" in self.forces.astype("str"): self.hopping_probabilities = hopping_probabilities return for new_surf in new_surfs: - # get the upper and lower state by sorting the current surface and the new one lower_state, upper_state = sorted((self.surf, new_surf)) self.update_diabatic_quants(lower_state, upper_state) # use context manager to ignore any divide by 0's - with np.errstate(divide='ignore', invalid='ignore'): - + with np.errstate(divide="ignore", invalid="ignore"): # calculate the zhu a parameter - a_numerator = HBAR ** 2 / 2 * self.zhu_product * self.zhu_difference + a_numerator = HBAR**2 / 2 * self.zhu_product * self.zhu_difference a_denominator = (2 * self.diabatic_coupling) ** 3 - zhu_a = np.nan_to_num( - np.divide(a_numerator, a_denominator) ** 0.5) + zhu_a = np.nan_to_num(np.divide(a_numerator, a_denominator) ** 0.5) # calculate the zhu b parameter, starting with Et and Ex et = self.ke_parallel + self.energy_list[-2][self.surf].item() - ex = (self.energy_list[-2][upper_state].item() + - self.energy_list[-2][lower_state].item()) / 2 - b_numerator = (et - ex) * self.zhu_difference / \ - self.zhu_product + ex = (self.energy_list[-2][upper_state].item() + self.energy_list[-2][lower_state].item()) / 2 + b_numerator = (et - ex) * self.zhu_difference / self.zhu_product b_denominator = 2 * self.diabatic_coupling - zhu_b = np.nan_to_num( - np.divide(b_numerator, b_denominator) ** 0.5) + zhu_b = np.nan_to_num(np.divide(b_numerator, b_denominator) ** 0.5) # calculating the hopping probability - zhu_p = np.nan_to_num(np.exp(-np.pi / 4 / zhu_a * (2 / (zhu_b ** 2 + - (abs((zhu_b ** 4) + ( - self.zhu_sign) * 1.0)) ** 0.5)) ** 0.5)) + zhu_p = np.nan_to_num( + np.exp( + -np.pi / 4 / zhu_a * (2 / (zhu_b**2 + (abs((zhu_b**4) + (self.zhu_sign) * 1.0)) ** 0.5)) ** 0.5 + ) + ) # add this info to the list of hopping probabilities - hopping_probabilities.append( - {"zhu_a": zhu_a, "zhu_b": zhu_b, "zhu_p": zhu_p, "new_surf": new_surf}) + hopping_probabilities.append({"zhu_a": zhu_a, "zhu_b": zhu_b, "zhu_p": zhu_p, "new_surf": new_surf}) self.hopping_probabilities = hopping_probabilities @@ -665,14 +655,16 @@ def full_step(self, compute_internal_forces=True): # loop through sets of states to hop between for probability_dic in self.hopping_probabilities: - zhu_a = probability_dic["zhu_a"] zhu_b = probability_dic["zhu_b"] zhu_p = probability_dic["zhu_p"] new_surf = probability_dic["new_surf"] - self.log("Attempting hop from state {} to state {}. Probability is {}.".format( - self.surf, probability_dic["new_surf"], zhu_p)) + self.log( + "Attempting hop from state {} to state {}. Probability is {}.".format( + self.surf, probability_dic["new_surf"], zhu_p + ) + ) # decide whether or not to hop based on Zhu a, b, and p will_hop = self.should_hop(zhu_a, zhu_b, zhu_p) @@ -681,15 +673,12 @@ def full_step(self, compute_internal_forces=True): if will_hop: out = self.hop(new_surf) if out != "err": - self.log("Hopped from from state {} to state {}.".format( - self.surf, probability_dic["new_surf"])) + self.log("Hopped from from state {} to state {}.".format(self.surf, probability_dic["new_surf"])) return else: - self.log("Did not hop from from state {} to state {}.".format( - self.surf, probability_dic["new_surf"])) + self.log("Did not hop from from state {} to state {}.".format(self.surf, probability_dic["new_surf"])) def run(self): - # save intitial conditions self.update_energies() @@ -697,8 +686,11 @@ def run(self): self.save() self.log("Beginning surface hopping at {}.".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))) - self.log("Relative energies are {} eV".format(", ".join( - ((self.energies - self.energies[0]) * 27.2).reshape(-1).astype("str").tolist()))) + self.log( + "Relative energies are {} eV".format( + ", ".join(((self.energies - self.energies[0]) * 27.2).reshape(-1).astype("str").tolist()) + ) + ) while self.time < self.max_time: self.step() @@ -709,7 +701,6 @@ def run(self): class BatchedZhuNakamura: - """ A class for running several Zhu Nakamura trajectories at once. This is done by taking a half step for each trajectory, combining all the xyz's into a dataset and batching it for the network, and then de-batching to put the forces and energies @@ -773,7 +764,6 @@ def make_zhu_trjs(self, props, atoms_list, zhu_params): zhu_trjs = [] for i, atoms in enumerate(atoms_list): - these_params = copy.deepcopy(zhu_params) these_params["out_file"] = "{}_{}.csv".format(base_out_name, i) these_params["log_file"] = "{}_{}.log".format(base_log_name, i) @@ -818,7 +808,7 @@ def update_energies_forces(self, trjs, get_new_neighbors): nxyz_data = [atoms_to_nxyz(trj.atoms) for trj in trjs] self.props.update({"nxyz": nxyz_data}) - dataset = Dataset(props=self.props.copy(), units='kcal/mol') + dataset = Dataset(props=self.props.copy(), units="kcal/mol") if get_new_neighbors: dataset.generate_neighbor_list(cutoff=self.cutoff) @@ -828,7 +818,6 @@ def update_energies_forces(self, trjs, get_new_neighbors): loader = DataLoader(dataset, batch_size=self.batch_size, collate_fn=collate_dicts) for i, batch in enumerate(loader): - batch = batch_to(batch, self.device) results = self.model(batch) @@ -838,13 +827,16 @@ def update_energies_forces(self, trjs, get_new_neighbors): current_trj = i * self.batch_size - for j, trj in enumerate(trjs[current_trj:current_trj + self.batch_size]): + for j, trj in enumerate(trjs[current_trj : current_trj + self.batch_size]): energies = [] forces = [] for key in self.energy_keys: energy = (results[key][j].item()) * KCAL_TO_AU["energy"] - force = ((-results[key + "_grad"][j]).detach().cpu().numpy()) * \ - KCAL_TO_AU["energy"] * KCAL_TO_AU["_grad"] + force = ( + ((-results[key + "_grad"][j]).detach().cpu().numpy()) + * KCAL_TO_AU["energy"] + * KCAL_TO_AU["_grad"] + ) energies.append(energy) forces.append(force) @@ -892,7 +884,6 @@ def run(self): num_steps = 0 while not complete: - num_steps += 1 if np.mod(num_steps, self.nbr_update_period) == 0: get_new_neighbors = True @@ -909,7 +900,6 @@ def run(self): class CombinedZhuNakamura: - """ Class for combining an initial ground state MD simulation with BatchedZhuNakamura. Attributes: @@ -953,8 +943,7 @@ def __init__(self, atoms, zhu_params, batched_params, ground_params, props): self.ground_params = ground_params def sample_ground_geoms(self): - - with open('atoms.pickle', 'rb') as f: + with open("atoms.pickle", "rb") as f: atoms = pickle.load(f) return [atoms] * self.num_trj @@ -986,7 +975,8 @@ def run(self): """ atoms_list = self.sample_ground_geoms() - batched_zn = BatchedZhuNakamura(atoms_list=atoms_list, props=self.props, batched_params=self.batched_params, - zhu_params=self.zhu_params) + batched_zn = BatchedZhuNakamura( + atoms_list=atoms_list, props=self.props, batched_params=self.batched_params, zhu_params=self.zhu_params + ) batched_zn.run() diff --git a/nff/tests/test_ase.py b/nff/tests/test_ase.py index e5b7971a..c98fdb1d 100644 --- a/nff/tests/test_ase.py +++ b/nff/tests/test_ase.py @@ -217,9 +217,10 @@ def setUp(self): [0.0, 0.0, 5.51891759], ] ) - self.quartz = AtomsBatch(nxyz[:, 0].astype(int), positions=nxyz[:, 1:], cell=lattice, pbc=True, - device=self._test_fixture_device) - + self.quartz = AtomsBatch( + nxyz[:, 0].astype(int), positions=nxyz[:, 1:], cell=lattice, pbc=True, device=self._test_fixture_device + ) + @pytest.fixture(autouse=True) def inject_device(self, device): # Automatically set the fixture value to an attribute diff --git a/nff/tests/test_data/test_stats.py b/nff/tests/test_data/test_stats.py index 682d4310..c0ed4fb1 100644 --- a/nff/tests/test_data/test_stats.py +++ b/nff/tests/test_data/test_stats.py @@ -1,4 +1,3 @@ -import os import unittest from pathlib import Path @@ -53,7 +52,7 @@ def test_remove_outliers_scalar(self): new_array = new_dset.props[TEST_KEY].cpu().numpy() ref_std = np.std(array) - ref_mean = np.mean(array) + np.mean(array) assert np.max(new_array) - np.min(new_array) <= 2 * STD_AWAY * ref_std, "range is not working" @@ -68,7 +67,7 @@ def test_remove_outliers_tensor(self): stats_array = torch.cat(array, dim=0).flatten().cpu().numpy() ref_std = np.std(stats_array) - ref_mean = np.mean(stats_array) + np.mean(stats_array) new_stats_array = torch.cat(new_array, dim=0).flatten().cpu().numpy() diff --git a/nff/tests/test_excited_states_training.py b/nff/tests/test_excited_states_training.py index 9b89e705..75492e05 100644 --- a/nff/tests/test_excited_states_training.py +++ b/nff/tests/test_excited_states_training.py @@ -1,4 +1,3 @@ - import os import pathlib @@ -53,7 +52,6 @@ def test_excited_training(device, tmpdir): loss_fn = loss.build_multi_loss(loss_dict) - # ## Making the model # # Now let's make the model. To do this we can use `get_model`, together with the model parameters and model type. @@ -110,7 +108,6 @@ def test_excited_training(device, tmpdir): ), ] - # ## Dataset dset = Dataset.from_file(os.path.join(pathlib.Path(__file__).parent.absolute(), "data/azo_diabat.pth.tar")) train, val, test = split_train_validation_test(dset, val_size=0.1, test_size=0.1) @@ -120,7 +117,6 @@ def test_excited_training(device, tmpdir): val_loader = DataLoader(val, batch_size=batch_size, collate_fn=collate_dicts) test_loader = DataLoader(test, batch_size=batch_size, collate_fn=collate_dicts) - # ## Training T = Trainer( diff --git a/nff/tests/test_training.py b/nff/tests/test_training.py index 40140e5f..a8c3b291 100644 --- a/nff/tests/test_training.py +++ b/nff/tests/test_training.py @@ -22,18 +22,17 @@ def test_training(device, tmpdir): # series of convolution layers with continuous filters. Here, we are going to create a simple model using the # hyperparameters given on `params`: params = { - "n_atom_basis": 256, - "n_filters": 256, - "n_gaussians": 32, - "n_convolutions": 4, - "cutoff": 5.0, - "trainable_gauss": True, - "dropout_rate": 0.2, + "n_atom_basis": 256, + "n_filters": 256, + "n_gaussians": 32, + "n_convolutions": 4, + "cutoff": 5.0, + "trainable_gauss": True, + "dropout_rate": 0.2, } model = get_model(params) - # ## Creating a trainer # To train our model with the data provided, we have to create a loss function. diff --git a/nff/train/builders/trainer.py b/nff/train/builders/trainer.py index b12fab74..a0ee561a 100644 --- a/nff/train/builders/trainer.py +++ b/nff/train/builders/trainer.py @@ -2,6 +2,7 @@ Adapted from https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/training.py """ + import os import json diff --git a/nff/train/chgnet.py b/nff/train/chgnet.py index aa0c512b..93f7efe8 100644 --- a/nff/train/chgnet.py +++ b/nff/train/chgnet.py @@ -39,12 +39,8 @@ def forward(self, targets: Dict[str, Tensor], predictions: Dict[str, Tensor], ke targets = {k: self.split_props(k, v, detach(targets["num_atoms"]).tolist()) for k, v in targets.items()} predictions = { - k: self.split_props( - k, - v, - detach( - predictions["num_atoms"]).tolist()) for k, - v in predictions.items()} + k: self.split_props(k, v, detach(predictions["num_atoms"]).tolist()) for k, v in predictions.items() + } if key_style == "nff": targets = {self.key_mappings.get(k, k): self.negate_value(k, v) for k, v in targets.items()} @@ -71,9 +67,7 @@ def negate_value(self, key: str, value: Iterable) -> Union[list, Tensor]: return -value return value - def split_props( - self, key: str, value: Union[list, Tensor], num_atoms: Union[list, Tensor] - ) -> Union[list, Tensor]: + def split_props(self, key: str, value: Union[list, Tensor], num_atoms: Union[list, Tensor]) -> Union[list, Tensor]: """Split the properties if the key is in the split_keys list. Args: diff --git a/nff/train/evaluate.py b/nff/train/evaluate.py index 3b5c88df..ebb428f2 100644 --- a/nff/train/evaluate.py +++ b/nff/train/evaluate.py @@ -27,9 +27,7 @@ def get_results(batch, model, device, submodel, loss_fn, **kwargs): results = batch_to(batch_detach(results), device) if "forces" in results and "energy_grad" not in results: results["energy_grad"] = ( - [-x for x in results["forces"]] - if isinstance(results["forces"], list) - else -results["forces"] + [-x for x in results["forces"]] if isinstance(results["forces"], list) else -results["forces"] ) eval_batch_loss = loss_fn(batch, results).data.cpu().numpy() diff --git a/nff/train/hooks/base_hook.py b/nff/train/hooks/base_hook.py index 3f55745b..bcb108f3 100644 --- a/nff/train/hooks/base_hook.py +++ b/nff/train/hooks/base_hook.py @@ -31,7 +31,6 @@ def on_epoch_begin(self, trainer): trainer (Trainer): instance of schnetpack.train.trainer.Trainer class. """ - pass def on_batch_begin(self, trainer, train_batch): """Log at the beginning of train batch. @@ -41,7 +40,6 @@ def on_batch_begin(self, trainer, train_batch): train_batch (dict of torch.Tensor): SchNetPack dictionary of input tensors. """ - pass def on_batch_end(self, trainer, train_batch, result, loss): pass diff --git a/nff/train/hooks/logging.py b/nff/train/hooks/logging.py index b65ee761..696c7f6e 100644 --- a/nff/train/hooks/logging.py +++ b/nff/train/hooks/logging.py @@ -11,7 +11,7 @@ import sys from nff.train.hooks import Hook -from nff.train.metrics import (RootMeanSquaredError, PrAuc, RocAuc) +from nff.train.metrics import RootMeanSquaredError, PrAuc, RocAuc class LoggingHook(Hook): @@ -37,7 +37,7 @@ def __init__( log_learning_rate=True, mini_batches=1, global_rank=0, - world_size=1 + world_size=1, ): self.log_train_loss = log_train_loss self.log_validation_loss = log_validation_loss @@ -70,14 +70,12 @@ def on_epoch_begin(self, trainer): self._train_loss = None def on_batch_end(self, trainer, train_batch, result, loss): - if self.log_train_loss: n_samples = self._batch_size(result) self._train_loss += float(loss.data) * n_samples self._counter += n_samples def _batch_size(self, result): - if type(result) is dict: n_samples = list(result.values())[0].size(0) elif type(result) in [list, tuple]: @@ -127,8 +125,7 @@ def get_par_folders(self): """ base_folder = self.get_base_folder() - par_folders = [os.path.join(base_folder, str(i)) - for i in range(self.world_size)] + par_folders = [os.path.join(base_folder, str(i)) for i in range(self.world_size)] return par_folders def save_metrics(self, epoch, test): @@ -143,8 +140,7 @@ def save_metrics(self, epoch, test): # save metrics to json file par_folder = self.par_folders[self.global_rank] if test: - json_file = os.path.join( - par_folder, "epoch_{}_test.json".format(epoch)) + json_file = os.path.join(par_folder, "epoch_{}_test.json".format(epoch)) else: json_file = os.path.join(par_folder, "epoch_{}.json".format(epoch)) @@ -159,8 +155,7 @@ def save_metrics(self, epoch, test): # update with metrics for metric in self.metrics: if type(metric) in [RocAuc, PrAuc]: - m = {"y_true": metric.actual, - "y_pred": metric.pred} + m = {"y_true": metric.actual, "y_pred": metric.pred} else: m = metric.aggregate() dic[metric.name] = m @@ -194,11 +189,9 @@ def avg_parallel_metrics(self, epoch, test): while None in par_dic.values(): for folder in self.par_folders: if test: - path = os.path.join( - folder, "epoch_{}_test.json".format(epoch)) + path = os.path.join(folder, "epoch_{}_test.json".format(epoch)) else: - path = os.path.join( - folder, "epoch_{}.json".format(epoch)) + path = os.path.join(folder, "epoch_{}.json".format(epoch)) try: with open(path, "r") as f: path_dic = json.load(f) @@ -209,8 +202,7 @@ def avg_parallel_metrics(self, epoch, test): # average appropriately if isinstance(metric, RootMeanSquaredError): - metric_val = np.mean( - np.array(list(par_dic.values)) ** 2) ** 0.5 + metric_val = np.mean(np.array(list(par_dic.values)) ** 2) ** 0.5 elif type(metric) in [RocAuc, PrAuc]: y_true = [] y_pred = [] @@ -239,8 +231,7 @@ def aggregate(self, trainer, test=False): # if parallel, average over parallel metrics if self.parallel: - metric_dic = self.avg_parallel_metrics(epoch=trainer.epoch, - test=test) + metric_dic = self.avg_parallel_metrics(epoch=trainer.epoch, test=test) # otherwise aggregate as usual else: @@ -276,19 +267,24 @@ def __init__( every_n_epochs=1, mini_batches=1, global_rank=0, - world_size=1 + world_size=1, ): log_path = os.path.join(log_path, "log.csv") super().__init__( - log_path, metrics, log_train_loss, log_validation_loss, - log_learning_rate, mini_batches, global_rank, world_size + log_path, + metrics, + log_train_loss, + log_validation_loss, + log_learning_rate, + mini_batches, + global_rank, + world_size, ) self._offset = 0 self._restart = False self.every_n_epochs = every_n_epochs def on_train_begin(self, trainer): - if os.path.exists(self.log_path): remove_file = False with open(self.log_path, "r") as f: @@ -393,13 +389,19 @@ def __init__( log_histogram=False, mini_batches=1, global_rank=0, - world_size=1 + world_size=1, ): from tensorboardX import SummaryWriter super().__init__( - log_path, metrics, log_train_loss, log_validation_loss, - log_learning_rate, mini_batches, global_rank, world_size + log_path, + metrics, + log_train_loss, + log_validation_loss, + log_learning_rate, + mini_batches, + global_rank, + world_size, ) self.writer = SummaryWriter(self.log_path) self.every_n_epochs = every_n_epochs @@ -409,10 +411,7 @@ def __init__( def on_epoch_end(self, trainer): if trainer.epoch % self.every_n_epochs == 0: if self.log_train_loss: - self.writer.add_scalar( - "train/loss", - self._train_loss / self._counter, trainer.epoch - ) + self.writer.add_scalar("train/loss", self._train_loss / self._counter, trainer.epoch) if self.log_learning_rate: self.writer.add_scalar( "train/learning_rate", @@ -427,9 +426,7 @@ def on_validation_end(self, trainer, val_loss): m = metric_dic[metric.name] if np.isscalar(m): - self.writer.add_scalar( - "metrics/%s" % metric.name, float(m), trainer.epoch - ) + self.writer.add_scalar("metrics/%s" % metric.name, float(m), trainer.epoch) elif m.ndim == 2: if trainer.epoch % self.img_every_n_epochs == 0: import matplotlib.pyplot as plt @@ -442,28 +439,19 @@ def on_validation_end(self, trainer, val_loss): plt.colorbar(plt.pcolor(m)) fig.canvas.draw() - np_image = np.fromstring( - fig.canvas.tostring_rgb(), dtype="uint8" - ) - np_image = np_image.reshape( - fig.canvas.get_width_height()[::-1] + (3,) - ) + np_image = np.fromstring(fig.canvas.tostring_rgb(), dtype="uint8") + np_image = np_image.reshape(fig.canvas.get_width_height()[::-1] + (3,)) plt.close(fig) - self.writer.add_image( - "metrics/%s" % metric.name, np_image, trainer.epoch - ) + self.writer.add_image("metrics/%s" % metric.name, np_image, trainer.epoch) if self.log_validation_loss: - self.writer.add_scalar( - "train/val_loss", float(val_loss), trainer.step) + self.writer.add_scalar("train/val_loss", float(val_loss), trainer.step) if self.log_histogram: for name, param in trainer._model.named_parameters(): - self.writer.add_histogram( - name, param.detach().cpu().numpy(), trainer.epoch - ) + self.writer.add_histogram(name, param.detach().cpu().numpy(), trainer.epoch) def on_train_ends(self, trainer): self.writer.close() @@ -496,18 +484,23 @@ def __init__( log_learning_rate=True, log_memory=True, every_n_epochs=1, - separator=' ', - time_strf=r'%Y-%m-%d %H:%M:%S', - str_format=r'{1:>{0}}', + separator=" ", + time_strf=r"%Y-%m-%d %H:%M:%S", + str_format=r"{1:>{0}}", mini_batches=1, global_rank=0, - world_size=1 + world_size=1, ): - log_path = os.path.join(log_path, "log_human_read.csv") super().__init__( - log_path, metrics, log_train_loss, log_validation_loss, - log_learning_rate, mini_batches, global_rank, world_size + log_path, + metrics, + log_train_loss, + log_validation_loss, + log_learning_rate, + mini_batches, + global_rank, + world_size, ) self.every_n_epochs = every_n_epochs @@ -516,12 +509,12 @@ def __init__( self._separator = separator self.time_strf = time_strf self._headers = { - 'time': 'Time', - 'epoch': 'Epoch', - 'lr': 'Learning rate', - 'train_loss': 'Train loss', - 'val_loss': 'Validation loss', - 'memory': 'GPU Memory (MB)' + "time": "Time", + "epoch": "Epoch", + "lr": "Learning rate", + "train_loss": "Train loss", + "val_loss": "Validation loss", + "memory": "GPU Memory (MB)", } self.str_format = str_format self.log_memory = log_memory @@ -533,39 +526,27 @@ def print(self, log): sys.stdout.flush() def on_train_begin(self, trainer): - log_dir = os.path.dirname(self.log_path) if not os.path.exists(log_dir): os.makedirs(log_dir) - log = self.str_format.format( - len(time.strftime(self.time_strf)), - self._headers['time'] - ) + log = self.str_format.format(len(time.strftime(self.time_strf)), self._headers["time"]) if self.log_epoch: log += self._separator - log += self.str_format.format( - len(self._headers['epoch']), self._headers['epoch'] - ) + log += self.str_format.format(len(self._headers["epoch"]), self._headers["epoch"]) if self.log_learning_rate: log += self._separator - log += self.str_format.format( - len(self._headers['lr']), self._headers['lr'] - ) + log += self.str_format.format(len(self._headers["lr"]), self._headers["lr"]) if self.log_train_loss: log += self._separator - log += self.str_format.format( - len(self._headers['train_loss']), self._headers['train_loss'] - ) + log += self.str_format.format(len(self._headers["train_loss"]), self._headers["train_loss"]) if self.log_validation_loss: log += self._separator - log += self.str_format.format( - len(self._headers['val_loss']), self._headers['val_loss'] - ) + log += self.str_format.format(len(self._headers["val_loss"]), self._headers["val_loss"]) if len(self.metrics) > 0: log += self._separator @@ -576,44 +557,33 @@ def on_train_begin(self, trainer): log += self._separator if self.log_memory: - log += self.str_format.format( - len(self._headers['memory']), self._headers['memory'] - ) + log += self.str_format.format(len(self._headers["memory"]), self._headers["memory"]) self.print(log) def on_validation_end(self, trainer, val_loss): if trainer.epoch % self.every_n_epochs == 0: - log = time.strftime(self.time_strf) if self.log_epoch: log += self._separator - log += self.str_format.format( - len(self._headers['epoch']), - '%d' % trainer.epoch - ) + log += self.str_format.format(len(self._headers["epoch"]), "%d" % trainer.epoch) if self.log_learning_rate: log += self._separator log += self.str_format.format( - len(self._headers['lr']), - '%.3e' % trainer.optimizer.param_groups[0]['lr'] + len(self._headers["lr"]), "%.3e" % trainer.optimizer.param_groups[0]["lr"] ) if self.log_train_loss: log += self._separator log += self.str_format.format( - len(self._headers['train_loss']), - '%.4f' % (self._train_loss / self._counter) + len(self._headers["train_loss"]), "%.4f" % (self._train_loss / self._counter) ) if self.log_validation_loss: log += self._separator - log += self.str_format.format( - len(self._headers['val_loss']), - '%.4f' % val_loss - ) + log += self.str_format.format(len(self._headers["val_loss"]), "%.4f" % val_loss) if len(self.metrics) > 0: log += self._separator @@ -621,24 +591,18 @@ def on_validation_end(self, trainer, val_loss): metric_dic = self.aggregate(trainer) for i, metric in enumerate(self.metrics): m = metric_dic[metric.name] - if hasattr(m, '__iter__'): + if hasattr(m, "__iter__"): log += self._separator.join([str(j) for j in m]) else: - log += self.str_format.format( - len(metric.name), - '%.4f' % m - ) + log += self.str_format.format(len(metric.name), "%.4f" % m) log += self._separator if self.log_memory: memory = torch.cuda.max_memory_allocated(device=None) * 1e-6 - log += self.str_format.format( - len(self._headers['memory']), - '%d' % memory - ) + log += self.str_format.format(len(self._headers["memory"]), "%d" % memory) self.print(log) def on_train_failed(self, trainer): - self.print('the training has failed') + self.print("the training has failed") diff --git a/nff/train/hooks/scheduling.py b/nff/train/hooks/scheduling.py index dedfe492..6084eac7 100644 --- a/nff/train/hooks/scheduling.py +++ b/nff/train/hooks/scheduling.py @@ -52,7 +52,6 @@ def on_validation_end(self, trainer, val_loss): class WarmRestartHook(Hook): - def __init__( self, optimizer, @@ -108,9 +107,7 @@ def on_validation_end(self, trainer, val_loss): self.Tmax *= self.Tmult self.scheduler.last_epoch = -1 self.scheduler.T_max = self.Tmax - self.scheduler.base_lrs = [ - base_lr * self.lr_factor for base_lr in self.scheduler.base_lrs - ] + self.scheduler.base_lrs = [base_lr * self.lr_factor for base_lr in self.scheduler.base_lrs] trainer.optimizer.load_state_dict(self.init_opt_state) if self.best_current > self.best_previous: @@ -318,9 +315,7 @@ def on_batch_end(self, trainer, train_batch, result, loss): class WarmUpLR(_LRScheduler): - def __init__(self, optimizer, n_steps, max_lr, last_epoch=-1, verbose=False): - self.n_steps = n_steps self.max_lr = max_lr super(WarmUpLR, self).__init__(optimizer, last_epoch, verbose) @@ -345,7 +340,6 @@ def __init__(self, optimizer, n_steps, max_lr): self.scheduler = WarmUpLR(optimizer=optimizer, n_steps=n_steps, max_lr=max_lr) def on_batch_end(self, trainer, train_batch, result, loss): - self.scheduler.step() if self.scheduler._step_count >= self.scheduler.n_steps: trainer._stop = True diff --git a/nff/train/metrics.py b/nff/train/metrics.py index a1bcc405..58d4c0ac 100644 --- a/nff/train/metrics.py +++ b/nff/train/metrics.py @@ -33,7 +33,7 @@ def reset(self): self.n_entries = 0.0 def add_batch(self, batch, results): - """ Add a batch to calculate the metric on """ + """Add a batch to calculate the metric on""" y = batch[self.target] yp = results[self.target] @@ -96,9 +96,7 @@ def __init__( name=None, ): name = "RMSE_" + target if name is None else name - super().__init__( - target, name - ) + super().__init__(target, name) def aggregate(self): """Aggregate metric over all previously added batches.""" @@ -129,7 +127,6 @@ def __init__( @staticmethod def loss_fn(y, yp): - # select only properties which are given yp = yp.reshape(*y.shape) @@ -167,7 +164,6 @@ def __init__( @staticmethod def loss_fn(y, yp): - # select only properties which are given yp = yp.reshape(*y.shape) @@ -179,9 +175,7 @@ def loss_fn(y, yp): pos_delta = (abs(y - yp)).mean(-1) neg_delta = (abs(y + yp)).mean(-1) - signs = (torch.ones(pos_delta.shape[0], - dtype=torch.long) - .to(pos_delta.device)) + signs = torch.ones(pos_delta.shape[0], dtype=torch.long).to(pos_delta.device) signs[neg_delta < pos_delta] = -1 y = y * signs.reshape(-1, 1) @@ -191,7 +185,7 @@ def loss_fn(y, yp): class Classifier(Metric): - """" Metric for binary classification.""" + """ " Metric for binary classification.""" def __init__( self, @@ -205,7 +199,7 @@ def __init__( ) def add_batch(self, batch, results): - """ Add a batch to calculate the metric on """ + """Add a batch to calculate the metric on""" y = batch[self.target] yp = results[self.target] @@ -216,7 +210,6 @@ def add_batch(self, batch, results): self.loss += loss def non_nan(self): - actual = torch.Tensor(self.actual) pred = torch.Tensor(self.pred) @@ -229,7 +222,7 @@ def non_nan(self): def aggregate(self): """Aggregate metric over all previously added batches.""" if self.n_entries == 0: - result = float('nan') + result = float("nan") else: result = self.loss / self.n_entries return result @@ -254,13 +247,11 @@ def __init__( @staticmethod def loss_fn(y, yp): - actual = y.detach().cpu().numpy().round().reshape(-1) pred = yp.detach().cpu().numpy().round().reshape(-1) all_positives = [i for i, item in enumerate(pred) if item == 1] - false_positives = [i for i in range(len(pred)) if pred[i] - == 1 and pred[i] != actual[i]] + false_positives = [i for i in range(len(pred)) if pred[i] == 1 and pred[i] != actual[i]] # number of predicted negatives num_pred = len(all_positives) @@ -270,7 +261,6 @@ def loss_fn(y, yp): class FalseNegatives(Classifier): - """ Percentage of claimed negatives that are actually wrong for a binary classifier. @@ -289,13 +279,11 @@ def __init__( @staticmethod def loss_fn(y, yp): - actual = y.detach().cpu().numpy().round().reshape(-1) pred = yp.detach().cpu().numpy().round().reshape(-1) all_negatives = [i for i, item in enumerate(pred) if item == 0] - false_negatives = [i for i in range(len(pred)) if pred[i] - == 0 and pred[i] != actual[i]] + false_negatives = [i for i in range(len(pred)) if pred[i] == 0 and pred[i] != actual[i]] # number of predicted negatives num_pred = len(all_negatives) num_pred_correct = len(false_negatives) @@ -304,7 +292,6 @@ def loss_fn(y, yp): class TruePositives(Classifier): - """ Percentage of claimed positives that are actually right for a binary classifier. @@ -323,13 +310,11 @@ def __init__( @staticmethod def loss_fn(y, yp): - actual = y.detach().cpu().numpy().round().reshape(-1) pred = yp.detach().cpu().numpy().round().reshape(-1) all_positives = [i for i, item in enumerate(pred) if item == 1] - true_positives = [i for i in range(len(pred)) if pred[i] - == 1 and pred[i] == actual[i]] + true_positives = [i for i in range(len(pred)) if pred[i] == 1 and pred[i] == actual[i]] # number of predicted negatives num_pred = len(all_positives) @@ -339,7 +324,6 @@ def loss_fn(y, yp): class TrueNegatives(Classifier): - """ Percentage of claimed negatives that are actually right for a binary classifier. @@ -358,13 +342,11 @@ def __init__( @staticmethod def loss_fn(y, yp): - actual = y.detach().cpu().numpy().round().reshape(-1) pred = yp.detach().cpu().numpy().round().reshape(-1) all_negatives = [i for i, item in enumerate(pred) if item == 0] - true_negatives = [i for i in range(len(pred)) if pred[i] - == 0 and pred[i] == actual[i]] + true_negatives = [i for i in range(len(pred)) if pred[i] == 0 and pred[i] == actual[i]] # number of predicted negatives num_pred = len(all_negatives) @@ -374,7 +356,6 @@ def loss_fn(y, yp): class RocAuc(Classifier): - """ AUC metric (area under true-positive vs. false-positive curve). """ @@ -411,7 +392,7 @@ def loss_fn(self, y, yp): return actual, pred def add_batch(self, batch, results): - """ Add a batch to calculate the metric on """ + """Add a batch to calculate the metric on""" y = batch[self.target] yp = results[self.target] @@ -434,7 +415,6 @@ def aggregate(self): class PrAuc(Classifier): - """ AUC metric (area under true-positive vs. false-positive curve). """ @@ -471,7 +451,7 @@ def loss_fn(self, y, yp): return actual, pred def add_batch(self, batch, results): - """ Add a batch to calculate the metric on """ + """Add a batch to calculate the metric on""" y = batch[self.target] yp = results[self.target] @@ -487,8 +467,7 @@ def aggregate(self): pred, actual = self.non_nan() try: - precision, recall, thresholds = precision_recall_curve( - y_true=actual, probas_pred=pred) + precision, recall, thresholds = precision_recall_curve(y_true=actual, probas_pred=pred) pr_auc = auc(recall, precision) except ValueError: @@ -498,7 +477,6 @@ def aggregate(self): class Accuracy(Classifier): - """ Overall accuracy of classifier. """ @@ -516,7 +494,6 @@ def __init__( @staticmethod def loss_fn(y, yp): - actual = y.detach().cpu().numpy().round().reshape(-1) pred = yp.detach().cpu().numpy().round().reshape(-1) diff --git a/nff/train/parallel.py b/nff/train/parallel.py index 06ff7cf5..ebec5a9c 100644 --- a/nff/train/parallel.py +++ b/nff/train/parallel.py @@ -8,11 +8,10 @@ def get_grad(optimizer): - grad_list = [] for group in optimizer.param_groups: grad_list.append([]) - for param in group['params']: + for param in group["params"]: if param.grad is None: grad_list[-1].append(param.grad) else: @@ -20,31 +19,15 @@ def get_grad(optimizer): return grad_list -def save_grad(optimizer, - loss_size, - rank, - weight_path, - batch_num, - epoch): - +def save_grad(optimizer, loss_size, rank, weight_path, batch_num, epoch): grad_list = get_grad(optimizer) save_dic = {"grad": grad_list, "loss_size": loss_size} - save_path = os.path.join(weight_path, str(rank), - "grad_{}_{}.pickle".format( - epoch, batch_num)) + save_path = os.path.join(weight_path, str(rank), "grad_{}_{}.pickle".format(epoch, batch_num)) with open(save_path, "wb") as f: pickle.dump(save_dic, f) -def add_grads(optimizer, - loss_size, - weight_path, - rank, - world_size, - batch_num, - epoch, - device): - +def add_grads(optimizer, loss_size, weight_path, rank, world_size, batch_num, epoch, device): # Set the optimizer to have zero gradient and then load in all # the grads. This ensures no differences in the gradients between the # different processes, which would occur due to loss of precision @@ -54,15 +37,15 @@ def add_grads(optimizer, # paths to all pickle files - paths = [os.path.join(weight_path, str(index), - "grad_{}_{}.pickle".format(epoch, batch_num)) - for index in range(world_size)] + paths = [ + os.path.join(weight_path, str(index), "grad_{}_{}.pickle".format(epoch, batch_num)) + for index in range(world_size) + ] loaded_grads = {path: None for path in paths} while None in loaded_grads.values(): - missing_paths = [key for key, val - in loaded_grads.items() if val is None] + missing_paths = [key for key, val in loaded_grads.items() if val is None] for path in missing_paths: try: with open(path, "rb") as f: @@ -71,13 +54,11 @@ def add_grads(optimizer, continue # total size is the sum of all sizes from each process - total_size = sum([grad_dic["loss_size"] for - grad_dic in loaded_grads.values()] - ) + total_size = sum([grad_dic["loss_size"] for grad_dic in loaded_grads.values()]) for k, grad_dic in enumerate(loaded_grads.values()): for i, group in enumerate(optimizer.param_groups): - for j, param in enumerate(group['params']): + for j, param in enumerate(group["params"]): if param.grad is None: continue param.grad += grad_dic["grad"][i][j].to(device) @@ -91,13 +72,7 @@ def add_grads(optimizer, return optimizer -def del_grad(rank, - epoch, - batch_num, - weight_path, - del_interval, - max_batch_iters): - +def del_grad(rank, epoch, batch_num, weight_path, del_interval, max_batch_iters): # epoch starts counting from 1 and batch_num starts # counting from 0 @@ -113,37 +88,30 @@ def del_grad(rank, os.remove(file_path) -def update_optim(optimizer, - loss_size, - rank, - world_size, - weight_path, - batch_num, - epoch, - del_interval, - device, - max_batch_iters): - - save_grad(optimizer=optimizer, - loss_size=loss_size, - rank=rank, - weight_path=weight_path, - batch_num=batch_num, - epoch=epoch) - - optimizer = add_grads(optimizer=optimizer, - loss_size=loss_size, - weight_path=weight_path, - rank=rank, - world_size=world_size, - batch_num=batch_num, - epoch=epoch, - device=device) - del_grad(rank=rank, - epoch=epoch, - batch_num=batch_num, - weight_path=weight_path, - del_interval=del_interval, - max_batch_iters=max_batch_iters) +def update_optim( + optimizer, loss_size, rank, world_size, weight_path, batch_num, epoch, del_interval, device, max_batch_iters +): + save_grad( + optimizer=optimizer, loss_size=loss_size, rank=rank, weight_path=weight_path, batch_num=batch_num, epoch=epoch + ) + + optimizer = add_grads( + optimizer=optimizer, + loss_size=loss_size, + weight_path=weight_path, + rank=rank, + world_size=world_size, + batch_num=batch_num, + epoch=epoch, + device=device, + ) + del_grad( + rank=rank, + epoch=epoch, + batch_num=batch_num, + weight_path=weight_path, + del_interval=del_interval, + max_batch_iters=max_batch_iters, + ) return optimizer diff --git a/nff/train/trainer.py b/nff/train/trainer.py index 20bb9d80..b347d237 100644 --- a/nff/train/trainer.py +++ b/nff/train/trainer.py @@ -118,9 +118,7 @@ def __init__( # how many times you've called loss.backward() self.back_count = 0 # maximum number of batches to iterate through - self.max_batch_iters = ( - max_batch_iters if (max_batch_iters is not None) else len(self.train_loader) - ) + self.max_batch_iters = max_batch_iters if (max_batch_iters is not None) else len(self.train_loader) self.model_kwargs = model_kwargs if (model_kwargs is not None) else {} self.batch_stop = False self.nloss = 0 @@ -165,9 +163,7 @@ def to(self, device): def _check_is_parallel(self): data_par = isinstance(self._model, torch.nn.DataParallel) - dist_dat_par = isinstance( - self._model, torch.nn.parallel.DistributedDataParallel - ) + dist_dat_par = isinstance(self._model, torch.nn.parallel.DistributedDataParallel) return any((data_par, dist_dat_par)) def _load_model_state_dict(self, state_dict): @@ -227,9 +223,7 @@ def state_dict(self, state_dict): hook.scheduler.optimizer = self.optimizer def store_checkpoint(self): - chkpt = os.path.join( - self.checkpoint_path, "checkpoint-" + str(self.epoch) + ".pth.tar" - ) + chkpt = os.path.join(self.checkpoint_path, "checkpoint-" + str(self.epoch) + ".pth.tar") torch.save(self.state_dict, chkpt) chpts = [f for f in os.listdir(self.checkpoint_path) if f.endswith(".pth.tar")] @@ -249,9 +243,7 @@ def restore_checkpoint(self, epoch=None): ] ) - chkpt = os.path.join( - self.checkpoint_path, "checkpoint-" + str(epoch) + ".pth.tar" - ) + chkpt = os.path.join(self.checkpoint_path, "checkpoint-" + str(epoch) + ".pth.tar") self.state_dict = torch.load(chkpt, map_location="cpu") def loss_backward(self, loss): @@ -387,9 +379,7 @@ def train(self, device, n_epochs=MAX_EPOCHS): for hook in self.hooks: hook.on_batch_begin(self, batch) - batch, results, mini_loss, _ = self.call_and_loss( - batch=batch, device=device, calc_loss=True - ) + batch, results, mini_loss, _ = self.call_and_loss(batch=batch, device=device, calc_loss=True) if not torch.isnan(mini_loss): loss += mini_loss.cpu().detach().to(device) @@ -468,9 +458,7 @@ def get_par_folders(self): # each parallel folder just has the name of its global rank - par_folders = [ - os.path.join(self.model_path, str(i)) for i in range(self.world_size) - ] + par_folders = [os.path.join(self.model_path, str(i)) for i in range(self.world_size)] self_folder = par_folders[self.global_rank] # if the folder of this global rank doesn't exist yet then @@ -543,9 +531,7 @@ def load_val_loss(self): # average the losses according to number of atoms # or molecules in each denom = sum(list(n_vals.values())) - avg_loss = ( - sum([n_vals[key] * loaded_vals[key] for key in n_vals.keys()]) / denom - ) + avg_loss = sum([n_vals[key] * loaded_vals[key] for key in n_vals.keys()]) / denom else: # add the losses avg_loss = np.sum(list(loaded_vals.values())) @@ -613,9 +599,7 @@ def validate(self, device, test=False): vsize = val_batch["nxyz"].size(0) n_val += vsize - val_batch, results, _, use_device = self.call_and_loss( - batch=val_batch, device=device, calc_loss=False - ) + val_batch, results, _, use_device = self.call_and_loss(batch=val_batch, device=device, calc_loss=False) # detach from the graph results = batch_to(batch_detach(results), use_device) diff --git a/nff/train/transfer.py b/nff/train/transfer.py index 883618e0..ab968e0a 100644 --- a/nff/train/transfer.py +++ b/nff/train/transfer.py @@ -69,7 +69,6 @@ def model_tl( """ Function to transfer learn a model. Defined in the subclasses. """ - pass class PainnLayerFreezer(LayerFreezer): @@ -130,9 +129,7 @@ def model_tl( class PainnDiabatLayerFreezer(PainnLayerFreezer): """Class to handle freezing layers in PaiNN models with diabatic readout.""" - def unfreeze_diabat_readout( - self, model: torch.nn.Module, freeze_gap_embedding: bool - ) -> None: + def unfreeze_diabat_readout(self, model: torch.nn.Module, freeze_gap_embedding: bool) -> None: """Unfreeze the diabatic readout layers in a PaiNN model. Args: @@ -170,9 +167,7 @@ def model_tl( """ self.freeze_parameters(model) self.unfreeze_painn_readout(model=model, freeze_skip=freeze_skip) - self.unfreeze_diabat_readout( - model=model, freeze_gap_embedding=freeze_gap_embedding - ) + self.unfreeze_diabat_readout(model=model, freeze_gap_embedding=freeze_gap_embedding) unfreeze_pool = not freeze_pooling if unfreeze_pool: @@ -189,10 +184,7 @@ def unfreeze_mace_interaction_linears(self, model: torch.nn.Module) -> None: Args: model (torch.nn.Module): model to be transfer learned """ - interaction_linears = [ - f"interactions.{i}.linear.weight" - for i in range(model.num_interactions.item()) - ] + interaction_linears = [f"interactions.{i}.linear.weight" for i in range(model.num_interactions.item())] self.custom_unfreeze(model, interaction_linears) def unfreeze_mace_produce_linears(self, model: torch.nn.Module) -> None: @@ -202,10 +194,7 @@ def unfreeze_mace_produce_linears(self, model: torch.nn.Module) -> None: Args: model (torch.nn.Module): model to be transfer learned """ - product_linears = [ - f"products.{i}.linear.weight" - for i in range(model.num_interactions.item()) - ] + product_linears = [f"products.{i}.linear.weight" for i in range(model.num_interactions.item())] self.custom_unfreeze(model, product_linears) def unfreeze_mace_pooling(self, model: torch.nn.Module) -> None: @@ -300,9 +289,7 @@ def unfreeze_chgnet_pooling(self, model: torch.nn.Module) -> None: """ self.unfreeze_parameters(model.pooling) - def unfreeze_chgnet_readout( - self, model: torch.nn.Module, freeze_skip: bool = False - ) -> None: + def unfreeze_chgnet_readout(self, model: torch.nn.Module, freeze_skip: bool = False) -> None: """Unfreeze the "site_wise", "readout_norm", and last MLP layers in a CHGNet model. Similar to readout layers in other models. diff --git a/nff/train/uncertainty.py b/nff/train/uncertainty.py index 6940aa88..786c1a6c 100644 --- a/nff/train/uncertainty.py +++ b/nff/train/uncertainty.py @@ -55,16 +55,12 @@ def set_min_uncertainty(self, min_uncertainty: float, force: bool = False) -> No if getattr(self, "umin") is None: self.umin = min_uncertainty elif force: - warnings.warn( - f"Uncertainty: min_uncertainty already set to {self.umin}. Overwriting." - ) + warnings.warn(f"Uncertainty: min_uncertainty already set to {self.umin}. Overwriting.") self.umin = min_uncertainty else: raise Exception(f"Uncertainty: min_uncertainty already set to {self.umin}") - def scale_to_min_uncertainty( - self, uncertainty: Union[np.ndarray, torch.Tensor] - ) -> Union[np.ndarray, torch.Tensor]: + def scale_to_min_uncertainty(self, uncertainty: Union[np.ndarray, torch.Tensor]) -> Union[np.ndarray, torch.Tensor]: """ Scale the uncertainty to the minimum value. """ @@ -99,9 +95,7 @@ def calibrate_uncertainty( return cp_uncertainty - def get_system_uncertainty( - self, uncertainty: torch.Tensor, num_atoms: List[int] - ) -> torch.Tensor: + def get_system_uncertainty(self, uncertainty: torch.Tensor, num_atoms: List[int]) -> torch.Tensor: """ Get the uncertainty for the entire system. """ @@ -109,9 +103,7 @@ def get_system_uncertainty( assert len(uncertainty) == len(num_atoms), "Number of systems do not match" - assert all( - [len(u) == n for u, n in zip(uncertainty, num_atoms)] - ), "Number of atoms in each system do not match" + assert all([len(u) == n for u, n in zip(uncertainty, num_atoms)]), "Number of atoms in each system do not match" if self.order == "system_sum": uncertainty = uncertainty.sum(dim=-1) @@ -155,9 +147,7 @@ def fit( scores = np.array(scores) n = len(residuals_calib) - qhat = torch.quantile( - torch.from_numpy(scores), np.ceil((n + 1) * (1 - self.alpha)) / n - ) + qhat = torch.quantile(torch.from_numpy(scores), np.ceil((n + 1) * (1 - self.alpha)) / n) qhat_value = np.float64(qhat.numpy()).item() self.qhat = qhat_value @@ -198,9 +188,7 @@ def __init__( self.targ_unit = targ_unit self.std_or_var = std_or_var - def convert_units( - self, value: Union[float, np.ndarray], orig_unit: str, targ_unit: str - ): + def convert_units(self, value: Union[float, np.ndarray], orig_unit: str, targ_unit: str): """ Convert the energy/forces units of the value from orig_unit to targ_unit. """ @@ -224,9 +212,7 @@ def get_energy_uncertainty( Get the uncertainty for the energy. """ if self.orig_unit is not None and self.targ_unit is not None: - results[self.q] = self.convert_units( - results[self.q], orig_unit=self.orig_unit, targ_unit=self.targ_unit - ) + results[self.q] = self.convert_units(results[self.q], orig_unit=self.orig_unit, targ_unit=self.targ_unit) if self.std_or_var == "std": val = results[self.q].std(-1) @@ -244,9 +230,7 @@ def get_forces_uncertainty( Get the uncertainty for the forces. """ if self.orig_unit is not None and self.targ_unit is not None: - results[self.q] = self.convert_units( - results[self.q], orig_unit=self.orig_unit, targ_unit=self.targ_unit - ) + results[self.q] = self.convert_units(results[self.q], orig_unit=self.orig_unit, targ_unit=self.targ_unit) splits = torch.split(results[self.q], list(num_atoms)) stack_split = torch.stack(splits, dim=0) @@ -263,9 +247,7 @@ def get_forces_uncertainty( return val - def get_uncertainty( - self, results: dict, num_atoms: Union[List[int], None] = None, *args, **kwargs - ): + def get_uncertainty(self, results: dict, num_atoms: Union[List[int], None] = None, *args, **kwargs): if self.q == "energy": val = self.get_energy_uncertainty(results=results) elif self.q in ["energy_grad", "forces"]: @@ -308,9 +290,7 @@ def __init__( self.shared_v = shared_v self.source = source - def check_params( - self, results: dict, num_atoms=None - ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: + def check_params(self, results: dict, num_atoms=None) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: """ Check if the parameters are present in the results, if the shapes are correct. If the order is "atomic" and shared_v is True, then the v @@ -332,9 +312,7 @@ def check_params( return v, alpha, beta - def get_uncertainty( - self, results: dict, num_atoms: Union[List[int], None] = None, *args, **kwargs - ) -> torch.Tensor: + def get_uncertainty(self, results: dict, num_atoms: Union[List[int], None] = None, *args, **kwargs) -> torch.Tensor: v, alpha, beta = self.check_params(results=results, num_atoms=num_atoms) if self.source == "aleatoric": @@ -348,9 +326,7 @@ def get_uncertainty( splits = torch.split(uncertainty, list(num_atoms)) stack_split = torch.stack(splits, dim=0) - uncertainty = self.get_system_uncertainty( - uncertainty=stack_split, num_atoms=num_atoms - ) + uncertainty = self.get_system_uncertainty(uncertainty=stack_split, num_atoms=num_atoms) uncertainty = self.scale_to_min_uncertainty(uncertainty) @@ -378,9 +354,7 @@ def __init__( self.vkey = variance_key self.q = quantity - def get_uncertainty( - self, results: dict, num_atoms: Union[List[int], None] = None, *args, **kwargs - ) -> torch.Tensor: + def get_uncertainty(self, results: dict, num_atoms: Union[List[int], None] = None, *args, **kwargs) -> torch.Tensor: var = results[self.vkey].squeeze() assert results[self.q].shape[0] == var.shape[0] @@ -388,9 +362,7 @@ def get_uncertainty( splits = torch.split(var, list(num_atoms)) stack_split = torch.stack(splits, dim=0) - var = self.get_system_uncertainty( - uncertainty=stack_split, num_atoms=num_atoms - ) + var = self.get_system_uncertainty(uncertainty=stack_split, num_atoms=num_atoms) var = self.scale_to_min_uncertainty(var) @@ -503,9 +475,7 @@ def _set_gmm_params(self) -> None: raise Exception("GMMUncertainty: GMM does not exist/is not fitted") self.means = self._check_tensor(self.gm_model.means_) - self.precisions_cholesky = self._check_tensor( - self.gm_model.precisions_cholesky_ - ) + self.precisions_cholesky = self._check_tensor(self.gm_model.precisions_cholesky_) self.weights = self._check_tensor(self.gm_model.weights_) def estimate_log_prob(self, X: torch.Tensor) -> torch.Tensor: @@ -518,9 +488,7 @@ def estimate_log_prob(self, X: torch.Tensor) -> torch.Tensor: n_clusters, _ = self.means.shape log_det = torch.sum( - torch.log( - self.precisions_cholesky.reshape(n_clusters, -1)[:, :: n_features + 1] - ), + torch.log(self.precisions_cholesky.reshape(n_clusters, -1)[:, :: n_features + 1]), dim=1, ) @@ -552,9 +520,7 @@ def log_likelihood(self, X: torch.Tensor) -> torch.Tensor: # below, the calculation below makes it stable # log(sum_i(a_i)) = log(exp(a_max) * sum_i(exp(a_i - a_max))) = a_max + log(sum_i(exp(a_i - a_max))) wlp_stable = weighted_log_prob - weighted_log_prob_max.reshape(-1, 1) - logsumexp = weighted_log_prob_max + torch.log( - torch.sum(torch.exp(wlp_stable), dim=1) - ) + logsumexp = weighted_log_prob_max + torch.log(torch.sum(torch.exp(wlp_stable), dim=1)) return logsumexp @@ -599,9 +565,7 @@ def get_uncertainty( splits = torch.split(uncertainty, list(num_atoms)) stack_split = torch.stack(splits, dim=0) - uncertainty = self.get_system_uncertainty( - uncertainty=stack_split, num_atoms=num_atoms - ).squeeze() + uncertainty = self.get_system_uncertainty(uncertainty=stack_split, num_atoms=num_atoms).squeeze() uncertainty = self.scale_to_min_uncertainty(uncertainty) diff --git a/nff/utils/cellfilters.py b/nff/utils/cellfilters.py index d963ebe0..af5bb1f4 100644 --- a/nff/utils/cellfilters.py +++ b/nff/utils/cellfilters.py @@ -39,9 +39,7 @@ def set_velocities(self, velocities): return self.atoms.set_velocities(velocities=velocities) def set_cell(self, cell, scale_atoms=False, apply_constraint=True): - return self.atoms.set_cell( - cell, scale_atoms=scale_atoms, apply_constraint=apply_constraint - ) + return self.atoms.set_cell(cell, scale_atoms=scale_atoms, apply_constraint=apply_constraint) def get_cell(self, complete=False): return self.atoms.get_cell(complete=complete) @@ -60,9 +58,7 @@ def get_stress(self, voigt=True, apply_constraint=True, include_ideal_gas=False) ) volume = self.atoms.get_volume() - virial = -volume * ( - voigt_6_to_full_3x3_stress(stress) + np.diag([self.scalar_pressure] * 3) - ) + virial = -volume * (voigt_6_to_full_3x3_stress(stress) + np.diag([self.scalar_pressure] * 3)) cur_deform_grad = self.deform_grad() virial = np.linalg.solve(cur_deform_grad, virial.T).T @@ -97,9 +93,7 @@ def get_forces(self, **kwargs): return forces def get_potential_energy(self, force_consistent=False, apply_constraint=True): - return self.atoms.get_potential_energy( - force_consistent=force_consistent, apply_constraint=apply_constraint - ) + return self.atoms.get_potential_energy(force_consistent=force_consistent, apply_constraint=apply_constraint) def get_global_number_of_atoms(self): return self.atoms.get_global_number_of_atoms() diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index 2e7be7b7..d25762b2 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -8,15 +8,15 @@ import json import pickle import copy -import math - -from rdkit.Chem import (AddHs, MolFromSmiles, inchi, GetPeriodicTable, - Conformer, MolToSmiles) -from rdkit.Chem.AllChem import (EmbedMultipleConfs, - UFFGetMoleculeForceField, - MMFFGetMoleculeForceField, - MMFFGetMoleculeProperties, - GetConformerRMS) + +from rdkit.Chem import AddHs, MolFromSmiles, inchi, GetPeriodicTable, Conformer, MolToSmiles +from rdkit.Chem.AllChem import ( + EmbedMultipleConfs, + UFFGetMoleculeForceField, + MMFFGetMoleculeForceField, + MMFFGetMoleculeProperties, + GetConformerRMS, +) from rdkit.Chem.rdmolops import RemoveHs, GetFormalCharge from nff.utils.misc import read_csv, tqdm_enum @@ -24,7 +24,7 @@ PERIODICTABLE = GetPeriodicTable() -UFF_ELEMENTS = ['B', 'Al'] +UFF_ELEMENTS = ["B", "Al"] DEFAULT_GEOM_COMPARE_TIMEOUT = 300 XYZ_NAME = "{0}_Conf_{1}.xyz" MAX_CONFS = 10000 @@ -35,60 +35,64 @@ def write_xyz(coords, filename, comment): - ''' + """ Write an xyz file from coords - ''' + """ with open(filename, "w") as f_p: f_p.write(str(len(coords)) + "\n") f_p.write(str(comment) + "\n") for atom in coords: - f_p.write("%s %.4f %.4f %.4f\n" % - (atom[0], atom[1][0], atom[1][1], atom[1][2])) + f_p.write("%s %.4f %.4f %.4f\n" % (atom[0], atom[1][0], atom[1][1], atom[1][2])) def obfit_rmsd(file1, file2, smarts, path): - cmd = ["obfit", "'" + str(smarts) + "'", - os.path.join(path, file1 + '.xyz'), - os.path.join(path, file2 + '.xyz')] - ret = subprocess.check_output(" ".join(cmd), - stdin=None, - stderr=subprocess.STDOUT, - shell=True, - universal_newlines=False, - timeout=DEFAULT_GEOM_COMPARE_TIMEOUT) - rmsd = float(ret.decode('utf-8')[5:13]) + cmd = ["obfit", "'" + str(smarts) + "'", os.path.join(path, file1 + ".xyz"), os.path.join(path, file2 + ".xyz")] + ret = subprocess.check_output( + " ".join(cmd), + stdin=None, + stderr=subprocess.STDOUT, + shell=True, + universal_newlines=False, + timeout=DEFAULT_GEOM_COMPARE_TIMEOUT, + ) + rmsd = float(ret.decode("utf-8")[5:13]) return rmsd def align_rmsd(file1, file2, path, smarts=None): - cmd = ["obabel", - os.path.join(path, file1 + '.xyz'), - os.path.join(path, file2 + '.xyz'), - '-o', 'smi', - '--align', - '--append', - 'rmsd'] + cmd = [ + "obabel", + os.path.join(path, file1 + ".xyz"), + os.path.join(path, file2 + ".xyz"), + "-o", + "smi", + "--align", + "--append", + "rmsd", + ] if smarts: - cmd += ['-s', str(smarts)] - ret = subprocess.check_output(cmd, - stdin=None, - stderr=subprocess.STDOUT, - shell=False, - universal_newlines=False, - timeout=DEFAULT_GEOM_COMPARE_TIMEOUT) - rmsd = ret.decode('utf-8').split()[-1] + cmd += ["-s", str(smarts)] + ret = subprocess.check_output( + cmd, + stdin=None, + stderr=subprocess.STDOUT, + shell=False, + universal_newlines=False, + timeout=DEFAULT_GEOM_COMPARE_TIMEOUT, + ) + rmsd = ret.decode("utf-8").split()[-1] return float(rmsd) class ConformerGenerator(object): - ''' + """ Generates conformations of molecules from 2D representation. - ''' + """ def __init__(self, smiles, forcefield="mmff"): - ''' + """ Initialises the class - ''' + """ self.mol = MolFromSmiles(smiles) self.full_clusters = [] self.forcefield = forcefield @@ -96,18 +100,15 @@ def __init__(self, smiles, forcefield="mmff"): self.initial_confs = None self.smiles = smiles - def generate(self, - max_generated_conformers=50, - prune_thresh=0.01, - maxattempts_per_conformer=5, - output=None, - threads=1): - ''' + def generate( + self, max_generated_conformers=50, prune_thresh=0.01, maxattempts_per_conformer=5, output=None, threads=1 + ): + """ Generates conformers Note the number max_generated _conformers required is related to the number of rotatable bonds - ''' + """ self.mol = AddHs(self.mol, addCoords=True) self.initial_confs = EmbedMultipleConfs( self.mol, @@ -118,14 +119,11 @@ def generate(self, # Despite what the documentation says -1 is a seed!! # It doesn't mean random generation numThreads=threads, - randomSeed=random.randint( - 1, 10000000) + randomSeed=random.randint(1, 10000000), ) if len(self.initial_confs) == 0: - output.write((f"Generated {len(self.initial_confs)} " - "initial confs\n")) - output.write((f"Trying again with {max_generated_conformers * 10} " - "attempts and random coords\n")) + output.write((f"Generated {len(self.initial_confs)} " "initial confs\n")) + output.write((f"Trying again with {max_generated_conformers * 10} " "attempts and random coords\n")) self.initial_confs = EmbedMultipleConfs( self.mol, @@ -137,26 +135,20 @@ def generate(self, # It doesn't mean random # generatrion numThreads=threads, - randomSeed=random.randint( - 1, 10000000) + randomSeed=random.randint(1, 10000000), ) - output.write("Generated " + - str(len(self.initial_confs)) + " initial confs\n") + output.write("Generated " + str(len(self.initial_confs)) + " initial confs\n") return self.initial_confs - def minimise(self, - output=None, - minimize=True): - ''' + def minimise(self, output=None, minimize=True): + """ Minimises conformers using a force field - ''' + """ if "\\" in self.smiles or "/" in self.smiles: - output.write(("WARNING: Smiles string contains slashes, " - "which specify cis/trans stereochemistry.\n")) - output.write(("Bypassing force-field minimization to avoid generating " - "incorrect isomer.\n")) + output.write(("WARNING: Smiles string contains slashes, " "which specify cis/trans stereochemistry.\n")) + output.write(("Bypassing force-field minimization to avoid generating " "incorrect isomer.\n")) minimize = False if self.forcefield != "mmff" and self.forcefield != "uff": @@ -164,8 +156,7 @@ def minimise(self, if self.forcefield == "mmff": props = MMFFGetMoleculeProperties(self.mol) for i in range(0, len(self.initial_confs)): - potential = MMFFGetMoleculeForceField( - self.mol, props, confId=i) + potential = MMFFGetMoleculeForceField(self.mol, props, confId=i) if potential is None: output.write("MMFF not available, using UFF\n") potential = UFFGetMoleculeForceField(self.mol, confId=i) @@ -188,15 +179,10 @@ def minimise(self, self.conf_energies = sorted(self.conf_energies, key=lambda tup: tup[1]) return self.mol - def cluster(self, - rms_tolerance=0.1, - max_ranked_conformers=10, - energy_window=5, - Report_e_tol=10, - output=None): - ''' + def cluster(self, rms_tolerance=0.1, max_ranked_conformers=10, energy_window=5, Report_e_tol=10, output=None): + """ Removes duplicates after minimization - ''' + """ self.counter = 0 self.factormax = 3 self.mol_no_h = RemoveHs(self.mol) @@ -209,13 +195,16 @@ def cluster(self, for i, pair_1 in enumerate(confs): if i == 0: index_0, energy_0 = pair_1 - output.write((f"clustering cluster {i} of " - f"{len(self.conf_energies)}\n")) + output.write((f"clustering cluster {i} of " f"{len(self.conf_energies)}\n")) index_1, energy_1 = pair_1 if abs(energy_1 - energy_0) > Report_e_tol: - output.write(("Breaking because hit Report Energy Window, " - f"E was {energy_1} kcal/mol " - f"and minimum was {energy_0} \n")) + output.write( + ( + "Breaking because hit Report Energy Window, " + f"E was {energy_1} kcal/mol " + f"and minimum was {energy_0} \n" + ) + ) break if i in ignore: @@ -223,7 +212,7 @@ def cluster(self, continue self.counter += 1 if self.counter == self.factormax * max_ranked_conformers: - output.write('Breaking because hit MaxNConfs \n') + output.write("Breaking because hit MaxNConfs \n") break clustered = [[self.mol.GetConformer(id=index_1), energy_1, 0.00]] ignore.append(i) @@ -236,22 +225,16 @@ def cluster(self, if abs(energy_1 - energy_2) > energy_window: break if abs(energy_1 - energy_2) <= 1e-3: - clustered.append([self.mol.GetConformer(id=index_2), - energy_2, 0.00]) + clustered.append([self.mol.GetConformer(id=index_2), energy_2, 0.00]) ignore.append(j) - rms = GetConformerRMS(self.mol_no_h, - index_1, - index_2) + rms = GetConformerRMS(self.mol_no_h, index_1, index_2) calcs_performed += 1 if rms <= rms_tolerance: - clustered.append( - [self.mol.GetConformer(id=index_2), - energy_2, rms]) + clustered.append([self.mol.GetConformer(id=index_2), energy_2, rms]) ignore.append(j) self.full_clusters.append(clustered) output.write(f"{ignored} ignore passes made\n") - output.write((f"{calcs_performed} overlays needed out " - f"of a possible {len(self.conf_energies) ** 2}\n")) + output.write((f"{calcs_performed} overlays needed out " f"of a possible {len(self.conf_energies) ** 2}\n")) ranked_clusters = [] for i, cluster in enumerate(self.full_clusters): @@ -260,16 +243,18 @@ def cluster(self, return ranked_clusters - def recluster(self, - path, - rms_tolerance=0.1, - max_ranked_conformers=10, - energy_window=5, - output=None, - clustered_confs=[], - molecule=None, - key=None, - fallback_to_align=False): + def recluster( + self, + path, + rms_tolerance=0.1, + max_ranked_conformers=10, + energy_window=5, + output=None, + clustered_confs=[], + molecule=None, + key=None, + fallback_to_align=False, + ): self.removed = [] self.counter = 0 i = -1 @@ -280,60 +265,47 @@ def recluster(self, for k in range(i, len(clustered_confs)): if os.path.isfile(key + "_Conf_" + str(k + 1) + ".xyz"): os.remove(key + "_Conf_" + str(k + 1) + ".xyz") - output.write("Removed " + key + - "_Conf_" + str(k + 1) + ".xyz\n") + output.write("Removed " + key + "_Conf_" + str(k + 1) + ".xyz\n") break if i in self.removed: continue self.counter += 1 - for conf_b in clustered_confs[i + 1:]: + for conf_b in clustered_confs[i + 1 :]: j += 1 if conf_b[1] - conf_a[1] > energy_window: break if j in self.removed: continue try: - rms = obfit_rmsd(key + "_Conf_" + str(i + 1), - key + "_Conf_" + str(j + 1), - str(molecule), - path=path) - except (subprocess.CalledProcessError, ValueError, - subprocess.TimeoutExpired) as e: + rms = obfit_rmsd(key + "_Conf_" + str(i + 1), key + "_Conf_" + str(j + 1), str(molecule), path=path) + except (subprocess.CalledProcessError, ValueError, subprocess.TimeoutExpired) as e: if fallback_to_align: - output.write( - 'obfit failed, falling back to obabel --align') - output.write(f'Exception {e}\n') + output.write("obfit failed, falling back to obabel --align") + output.write(f"Exception {e}\n") try: - rms = align_rmsd(f"{key}_Conf_{str(i + 1)}", - f"{key}_Conf_{str(j + 1)}", - path) + rms = align_rmsd(f"{key}_Conf_{str(i + 1)}", f"{key}_Conf_{str(j + 1)}", path) except (ValueError, subprocess.TimeoutExpired): continue else: continue - output.write("Comparing " + str(i + 1) + " " + - str(j + 1) + ' RMSD ' + str(rms) + "\n") + output.write("Comparing " + str(i + 1) + " " + str(j + 1) + " RMSD " + str(rms) + "\n") if rms > rms_tolerance: pos = _atomic_pos_from_conformer(conf_b[0]) elements = _extract_atomic_type(conf_b[0]) pos = [[-float(coor[k]) for k in range(3)] for coor in pos] coords = list(zip(elements, pos)) - filename = os.path.join(path, key + "_Conf_" + - str(j + 1) + "_inv.xyz") - write_xyz(coords=coords, filename=filename, - comment=conf_b[1]) + filename = os.path.join(path, key + "_Conf_" + str(j + 1) + "_inv.xyz") + write_xyz(coords=coords, filename=filename, comment=conf_b[1]) try: file1 = key + "_Conf_" + str(i + 1) file2 = key + "_Conf_" + str(j + 1) + "_inv" rmsinv = obfit_rmsd(file1, file2, str(molecule)) - except (subprocess.CalledProcessError, ValueError, - subprocess.TimeoutExpired) as e: + except (subprocess.CalledProcessError, ValueError, subprocess.TimeoutExpired) as e: if fallback_to_align: - output.write( - 'obfit failed, falling back to obabel --align') - output.write(f'Exception {e}\n') + output.write("obfit failed, falling back to obabel --align") + output.write(f"Exception {e}\n") try: i_key = f"{key}_Conf_{str(i + 1)}" inv_key = f"{key}_Conf_{str(j + 1)}_inv" @@ -345,8 +317,7 @@ def recluster(self, rms = min([rms, rmsinv]) os.remove(key + "_Conf_" + str(j + 1) + "_inv.xyz") - output.write((f"Comparing {i + 1} {j + 1} " - f"RMSD after checking inversion {rms}\n")) + output.write((f"Comparing {i + 1} {j + 1} " f"RMSD after checking inversion {rms}\n")) if rms <= rms_tolerance: self.removed.append(j) output.write("Removed Conf_" + str(j + 1) + "\n") @@ -354,10 +325,10 @@ def recluster(self, def _extract_atomic_type(confomer): - ''' + """ Extracts the elements associated with a conformer, in order that prune_threshy are read in - ''' + """ elements = [] mol = confomer.GetOwningMol() for atom in mol.GetAtoms(): @@ -366,11 +337,11 @@ def _extract_atomic_type(confomer): def _atomic_pos_from_conformer(conformer): - ''' + """ Extracts the atomic positions for an RDKit conformer object, to allow writing of input files, uploading to databases, etc. Returns a list of lists - ''' + """ atom_positions = [] natoms = conformer.GetNumAtoms() for atom_num in range(0, natoms): @@ -384,13 +355,12 @@ def rename_xyz_files(path): flist = os.listdir(path) for filename in flist: if filename.endswith(".xyz"): - num = int(filename.split('_')[-1][:-4]) + num = int(filename.split("_")[-1][:-4]) namedict[num] = filename keys = namedict.keys() for i, num in enumerate(sorted(keys)): oldfilename = namedict[num] - newfilename = '_'.join(oldfilename.split( - '_')[:-1]) + '_' + str(i + 1) + ".xyz" + newfilename = "_".join(oldfilename.split("_")[:-1]) + "_" + str(i + 1) + ".xyz" oldfilepath = os.path.join(path, oldfilename) newfilepath = os.path.join(path, newfilename) os.rename(oldfilepath, newfilepath) @@ -398,111 +368,80 @@ def rename_xyz_files(path): def clean(molecule): molecule = str(molecule.split()[0]) - molecule = re.sub('Cl', '[#17]', molecule) - molecule = re.sub('C', '[#6]', molecule) - molecule = re.sub('c', '[#6]', molecule) - molecule = re.sub('\\[N-\\]', '[#7-]', molecule) - molecule = re.sub('N', '[#7]', molecule) - molecule = re.sub('n', '[#7]', molecule) - molecule = re.sub('\\[\\[', '[', molecule) - molecule = re.sub('\\]\\]', ']', molecule) - molecule = re.sub('\\]H\\]', 'H]', molecule) - molecule = re.sub('=', '~', molecule) + molecule = re.sub("Cl", "[#17]", molecule) + molecule = re.sub("C", "[#6]", molecule) + molecule = re.sub("c", "[#6]", molecule) + molecule = re.sub("\\[N-\\]", "[#7-]", molecule) + molecule = re.sub("N", "[#7]", molecule) + molecule = re.sub("n", "[#7]", molecule) + molecule = re.sub("\\[\\[", "[", molecule) + molecule = re.sub("\\]\\]", "]", molecule) + molecule = re.sub("\\]H\\]", "H]", molecule) + molecule = re.sub("=", "~", molecule) return molecule -def minimize(output, - molecule, - forcefield, - nconf_gen, - prun_tol, - e_window, - rms_tol, - rep_e_window): - +def minimize(output, molecule, forcefield, nconf_gen, prun_tol, e_window, rms_tol, rep_e_window): output.write(f"Analysing smiles string {molecule}\n") MolFromSmiles(molecule) # print "There are", NumRotatableBonds(mol) output.write("Generating initial conformations\n") - confgen = ConformerGenerator( - smiles=molecule, forcefield=forcefield) - output.write((f"Minimising conformations using the {forcefield} " - "force field\n")) - confgen.generate(max_generated_conformers=int(nconf_gen), - prune_thresh=float(prun_tol), - output=output) + confgen = ConformerGenerator(smiles=molecule, forcefield=forcefield) + output.write((f"Minimising conformations using the {forcefield} " "force field\n")) + confgen.generate(max_generated_conformers=int(nconf_gen), prune_thresh=float(prun_tol), output=output) gen_time = time.time() confgen.minimise(output=output) min_time = time.time() - output.write(("Minimisation complete, generated conformations " - "with the following energies:\n")) - output.write("\n".join([str(energy[1]) - for energy in confgen.conf_energies]) + "\n") - msg = (f"Clustering structures using an energy window of " - f"{e_window} and an rms tolerance of {rms_tol} and a " - f"Report Energy Window of {rep_e_window}\n") + output.write(("Minimisation complete, generated conformations " "with the following energies:\n")) + output.write("\n".join([str(energy[1]) for energy in confgen.conf_energies]) + "\n") + msg = ( + f"Clustering structures using an energy window of " + f"{e_window} and an rms tolerance of {rms_tol} and a " + f"Report Energy Window of {rep_e_window}\n" + ) output.write(msg) return confgen, gen_time, min_time -def write_clusters(output, - idx, - conformer, - inchikey, - path): +def write_clusters(output, idx, conformer, inchikey, path): output.write(f"Cluster {idx} has energy {conformer[1]}\n") pos = _atomic_pos_from_conformer(conformer[0]) elements = _extract_atomic_type(conformer[0]) coords = list(zip(elements, pos)) xyz_file = os.path.join(path, f"{inchikey}_Conf_{(idx + 1)}.xyz") - write_xyz(coords=coords, filename=xyz_file, - comment=conformer[1]) + write_xyz(coords=coords, filename=xyz_file, comment=conformer[1]) -def run_obabel(inchikey, - idx): +def run_obabel(inchikey, idx): try: cmd = ["obabel", f"{inchikey}_Conf_{(idx+1)}.xyz", "-osmi"] except UnboundLocalError as err: print(f"Did not produce any geometries for {inchikey} {err}") raise - molecule = subprocess.check_output(cmd, - stdin=None, - stderr=subprocess.STDOUT, - shell=False, - universal_newlines=False - ).decode('utf-8') + molecule = subprocess.check_output( + cmd, stdin=None, stderr=subprocess.STDOUT, shell=False, universal_newlines=False + ).decode("utf-8") molecule = clean(molecule) return molecule -def summarize(output, - gen_time, - start_time, - min_time, - cluster_time): - +def summarize(output, gen_time, start_time, min_time, cluster_time): recluster_time = time.time() output.write(socket.gethostname() + "\n") - output.write('gen time {0:1f} sec\n'.format( - gen_time - start_time)) - output.write('min time {0:1f} sec\n'.format(min_time - gen_time)) - output.write('cluster time {0:1f} sec\n'.format( - cluster_time - min_time)) - output.write('recluster time {0:1f} sec\n'.format( - recluster_time - cluster_time)) - output.write('total time {0:1f} sec\n'.format( - time.time() - start_time)) - output.write('Terminated successfully\n') + output.write("gen time {0:1f} sec\n".format(gen_time - start_time)) + output.write("min time {0:1f} sec\n".format(min_time - gen_time)) + output.write("cluster time {0:1f} sec\n".format(cluster_time - min_time)) + output.write("recluster time {0:1f} sec\n".format(recluster_time - cluster_time)) + output.write("total time {0:1f} sec\n".format(time.time() - start_time)) + output.write("Terminated successfully\n") def get_mol(smiles): - mol = MolFromSmiles(MolToSmiles( - MolFromSmiles(smiles))) + mol = MolFromSmiles(MolToSmiles(MolFromSmiles(smiles))) return mol @@ -519,9 +458,7 @@ def xyz_to_rdmol(nxyz, smiles): return mol -def update_with_boltz(geom_list, - temp): - +def update_with_boltz(geom_list, temp): rel_ens = np.array([i["relativeenergy"] for i in geom_list]) degens = np.array([i["degeneracy"] for i in geom_list]) k_t = temp * KB_KCAL @@ -547,11 +484,7 @@ def parse_nxyz(lines): return nxyz -def make_geom_dic(lines, - smiles, - geom_list, - idx): - +def make_geom_dic(lines, smiles, geom_list, idx): nxyz = parse_nxyz(lines) energy_kcal = float(lines[1]) # total energy in au @@ -561,18 +494,18 @@ def make_geom_dic(lines, if idx == 0: rel_energy = 0 else: - ref_energy_kcal = (geom_list[0]["totalenergy"] - * AU_TO_KCAL) + ref_energy_kcal = geom_list[0]["totalenergy"] * AU_TO_KCAL rel_energy = energy_kcal - ref_energy_kcal - rd_mol = xyz_to_rdmol(nxyz=nxyz, - smiles=smiles) + rd_mol = xyz_to_rdmol(nxyz=nxyz, smiles=smiles) - geom = {"confnum": idx + 1, - "totalenergy": energy_au, - "relativeenergy": rel_energy, - "degeneracy": 1, - "rd_mol": rd_mol} + geom = { + "confnum": idx + 1, + "totalenergy": energy_au, + "relativeenergy": rel_energy, + "degeneracy": 1, + "rd_mol": rd_mol, + } return geom @@ -583,42 +516,30 @@ def get_charge(smiles): return charge -def combine_geom_dics(geom_list, - temp, - other_props, - smiles): - - totalconfs = sum([i["degeneracy"] - for i in geom_list]) +def combine_geom_dics(geom_list, temp, other_props, smiles): + totalconfs = sum([i["degeneracy"] for i in geom_list]) uniqueconfs = len(geom_list) lowestenergy = geom_list[0]["totalenergy"] - poplowestpct = (geom_list[0]["boltzmannweight"] - * 100) + poplowestpct = geom_list[0]["boltzmannweight"] * 100 charge = get_charge(smiles) - combination = {"totalconfs": totalconfs, - "uniqueconfs": uniqueconfs, - "temperature": temp, - "lowestenergy": lowestenergy, - "poplowestpct": poplowestpct, - "charge": charge, - "conformers": geom_list, - "smiles": smiles} + combination = { + "totalconfs": totalconfs, + "uniqueconfs": uniqueconfs, + "temperature": temp, + "lowestenergy": lowestenergy, + "poplowestpct": poplowestpct, + "charge": charge, + "conformers": geom_list, + "smiles": smiles, + } if other_props is not None: combination.update(other_props) return combination -def parse_results(job_dir, - log_file, - inchikey, - smiles, - max_confs, - other_props, - temp, - clean_up): - +def parse_results(job_dir, log_file, inchikey, smiles, max_confs, other_props, temp, clean_up): # import pdb # pdb.set_trace() @@ -628,8 +549,7 @@ def parse_results(job_dir, loglines = f_p.readlines() if loglines[-1].strip() != "Terminated successfully": - msg = ("'Terminated successfully' not found " - "at end of conformer output") + msg = "'Terminated successfully' not found " "at end of conformer output" raise Exception(msg) geom_list = [] @@ -637,21 +557,14 @@ def parse_results(job_dir, path = os.path.join(job_dir, XYZ_NAME.format(inchikey, i + 1)) if not os.path.isfile(path): continue - with open(path, 'r') as f_p: + with open(path, "r") as f_p: lines = f_p.readlines() - geom = make_geom_dic(lines=lines, - smiles=smiles, - geom_list=geom_list, - idx=i) + geom = make_geom_dic(lines=lines, smiles=smiles, geom_list=geom_list, idx=i) geom_list.append(geom) - geom_list = update_with_boltz(geom_list=geom_list, - temp=temp) - summary_dic = combine_geom_dics(geom_list=geom_list, - temp=temp, - other_props=other_props, - smiles=smiles) + geom_list = update_with_boltz(geom_list=geom_list, temp=temp) + summary_dic = combine_geom_dics(geom_list=geom_list, temp=temp, other_props=other_props, smiles=smiles) if clean_up: for file in os.listdir(job_dir): @@ -663,103 +576,102 @@ def parse_results(job_dir, return summary_dic -def one_species_confs(molecule, - log, - other_props, - max_confs, - forcefield, - nconf_gen, - e_window, - rms_tol, - prun_tol, - job_dir, - log_file, - rep_e_window, - fallback_to_align, - temp, - clean_up, - start_time): - +def one_species_confs( + molecule, + log, + other_props, + max_confs, + forcefield, + nconf_gen, + e_window, + rms_tol, + prun_tol, + job_dir, + log_file, + rep_e_window, + fallback_to_align, + temp, + clean_up, + start_time, +): smiles = copy.deepcopy(molecule) with open(log, "w") as output: output.write("The smiles strings that will be run are:\n") output.write("\n".join([molecule]) + "\n") if any([element in molecule for element in UFF_ELEMENTS]): - output.write(("Switching to UFF, since MMFF94 does " - "not have boron and/or aluminum\n")) - forcefield = 'uff' - - confgen, gen_time, min_time = minimize(output=output, - molecule=molecule, - forcefield=forcefield, - nconf_gen=nconf_gen, - prun_tol=prun_tol, - e_window=e_window, - rms_tol=rms_tol, - rep_e_window=rep_e_window) - clustered_confs = confgen.cluster(rms_tolerance=float(rms_tol), - max_ranked_conformers=int( - max_confs), - energy_window=float(e_window), - Report_e_tol=float(rep_e_window), - output=output) + output.write(("Switching to UFF, since MMFF94 does " "not have boron and/or aluminum\n")) + forcefield = "uff" + + confgen, gen_time, min_time = minimize( + output=output, + molecule=molecule, + forcefield=forcefield, + nconf_gen=nconf_gen, + prun_tol=prun_tol, + e_window=e_window, + rms_tol=rms_tol, + rep_e_window=rep_e_window, + ) + clustered_confs = confgen.cluster( + rms_tolerance=float(rms_tol), + max_ranked_conformers=int(max_confs), + energy_window=float(e_window), + Report_e_tol=float(rep_e_window), + output=output, + ) cluster_time = time.time() - inchikey = inchi.MolToInchiKey(get_mol(molecule), - options=INCHI_OPTIONS) + inchikey = inchi.MolToInchiKey(get_mol(molecule), options=INCHI_OPTIONS) for i, conformer in enumerate(clustered_confs): - write_clusters(output=output, - idx=i, - conformer=conformer, - inchikey=inchikey, - path=job_dir) - - molecule = run_obabel(inchikey=inchikey, - idx=i) - confgen.recluster(path=job_dir, - rms_tolerance=float(rms_tol), - max_ranked_conformers=int(max_confs), - energy_window=float(e_window), - output=output, - clustered_confs=clustered_confs, - molecule=molecule, - key=inchikey, - fallback_to_align=fallback_to_align) + write_clusters(output=output, idx=i, conformer=conformer, inchikey=inchikey, path=job_dir) + + molecule = run_obabel(inchikey=inchikey, idx=i) + confgen.recluster( + path=job_dir, + rms_tolerance=float(rms_tol), + max_ranked_conformers=int(max_confs), + energy_window=float(e_window), + output=output, + clustered_confs=clustered_confs, + molecule=molecule, + key=inchikey, + fallback_to_align=fallback_to_align, + ) rename_xyz_files(path=job_dir) - summarize(output=output, - gen_time=gen_time, - start_time=start_time, - min_time=min_time, - cluster_time=cluster_time) - - conf_dic = parse_results(job_dir=job_dir, - log_file=log_file, - inchikey=inchikey, - max_confs=max_confs, - other_props=other_props, - temp=temp, - smiles=smiles, - clean_up=clean_up) + summarize(output=output, gen_time=gen_time, start_time=start_time, min_time=min_time, cluster_time=cluster_time) + + conf_dic = parse_results( + job_dir=job_dir, + log_file=log_file, + inchikey=inchikey, + max_confs=max_confs, + other_props=other_props, + temp=temp, + smiles=smiles, + clean_up=clean_up, + ) return conf_dic -def run_generator(smiles_list, - other_props=None, - max_confs=MAX_CONFS, - forcefield="mmff", - nconf_gen=(10 * MAX_CONFS), - e_window=5.0, - rms_tol=0.1, - prun_tol=0.01, - job_dir="confs", - log_file="confgen.log", - rep_e_window=5.0, - fallback_to_align=False, - temp=298.15, - clean_up=True, - **kwargs): +def run_generator( + smiles_list, + other_props=None, + max_confs=MAX_CONFS, + forcefield="mmff", + nconf_gen=(10 * MAX_CONFS), + e_window=5.0, + rms_tol=0.1, + prun_tol=0.01, + job_dir="confs", + log_file="confgen.log", + rep_e_window=5.0, + fallback_to_align=False, + temp=298.15, + clean_up=True, + **kwargs, +): """ Args: smiles_list (list[str]): list of SMILES strings @@ -786,36 +698,33 @@ def run_generator(smiles_list, conf_dics = [] for molecule in smiles_list: - conf_dic = one_species_confs(molecule=molecule, - log=log, - other_props=other_props, - max_confs=max_confs, - forcefield=forcefield, - nconf_gen=nconf_gen, - e_window=e_window, - rms_tol=rms_tol, - prun_tol=prun_tol, - job_dir=job_dir, - log_file=log_file, - rep_e_window=rep_e_window, - fallback_to_align=fallback_to_align, - temp=temp, - clean_up=clean_up, - start_time=start_time) + conf_dic = one_species_confs( + molecule=molecule, + log=log, + other_props=other_props, + max_confs=max_confs, + forcefield=forcefield, + nconf_gen=nconf_gen, + e_window=e_window, + rms_tol=rms_tol, + prun_tol=prun_tol, + job_dir=job_dir, + log_file=log_file, + rep_e_window=rep_e_window, + fallback_to_align=fallback_to_align, + temp=temp, + clean_up=clean_up, + start_time=start_time, + ) conf_dics.append(conf_dic) return conf_dics -def add_to_summary(summary_dic, - conf_dic, - smiles, - save_dir): - inchikey = inchi.MolToInchiKey(get_mol(smiles), - options=INCHI_OPTIONS) +def add_to_summary(summary_dic, conf_dic, smiles, save_dir): + inchikey = inchi.MolToInchiKey(get_mol(smiles), options=INCHI_OPTIONS) pickle_path = os.path.join(os.path.abspath(save_dir), f"{inchikey}.pickle") - summary_dic[smiles] = {key: val for key, val in - conf_dic.items() if key != "conformers"} + summary_dic[smiles] = {key: val for key, val in conf_dic.items() if key != "conformers"} summary_dic[smiles].update({"pickle_path": pickle_path}) return summary_dic, pickle_path @@ -837,16 +746,12 @@ def confs_and_save(config_path): print(f"Saving pickle files to directory {save_dir}") for i, smiles in tqdm_enum(smiles_dic["smiles"]): - other_props = {key: val[i] for key, val in smiles_dic.items() - if key != 'smiles'} + other_props = {key: val[i] for key, val in smiles_dic.items() if key != "smiles"} smiles_list = [smiles] - conf_dic = run_generator(smiles_list=smiles_list, - other_props=other_props, - **info)[0] - summary_dic, pickle_path = add_to_summary(summary_dic=summary_dic, - conf_dic=conf_dic, - smiles=smiles, - save_dir=save_dir) + conf_dic = run_generator(smiles_list=smiles_list, other_props=other_props, **info)[0] + summary_dic, pickle_path = add_to_summary( + summary_dic=summary_dic, conf_dic=conf_dic, smiles=smiles, save_dir=save_dir + ) with open(pickle_path, "wb") as f_open: pickle.dump(conf_dic, f_open) diff --git a/nff/utils/confs.py b/nff/utils/confs.py index 15e4bc30..f0674ca9 100644 --- a/nff/utils/confs.py +++ b/nff/utils/confs.py @@ -25,14 +25,11 @@ def assert_ordered(batch): """ weights = batch["weights"].reshape(-1).tolist() - sort_weights = sorted(weights, - key=lambda x: -x) + sort_weights = sorted(weights, key=lambda x: -x) assert weights == sort_weights -def get_batch_dic(batch, - idx_dic, - num_confs): +def get_batch_dic(batch, idx_dic, num_confs): """ Get some conformer information about the batch. Args: @@ -56,11 +53,9 @@ def get_batch_dic(batch, confs_in_batch = old_num_atoms // mol_size # new number of atoms after trimming - new_num_atoms = int(mol_size * min( - confs_in_batch, num_confs)) + new_num_atoms = int(mol_size * min(confs_in_batch, num_confs)) if idx_dic is None: - assert_ordered(batch) # new number of conformers after trimming real_num_confs = min(confs_in_batch, num_confs) @@ -71,12 +66,14 @@ def get_batch_dic(batch, conf_idx = idx_dic[smiles] real_num_confs = len(conf_idx) - info_dic = {"conf_idx": conf_idx, - "real_num_confs": real_num_confs, - "old_num_atoms": old_num_atoms, - "new_num_atoms": new_num_atoms, - "confs_in_batch": confs_in_batch, - "mol_size": mol_size} + info_dic = { + "conf_idx": conf_idx, + "real_num_confs": real_num_confs, + "old_num_atoms": old_num_atoms, + "new_num_atoms": new_num_atoms, + "confs_in_batch": confs_in_batch, + "mol_size": mol_size, + } return info_dic @@ -108,7 +105,6 @@ def to_xyz_idx(batch_dic): # and append them to xyz_conf_all_idx for conf_num in conf_idx: - start_idx = xyz_conf_start_idx[conf_num] end_idx = xyz_conf_start_idx[conf_num + 1] full_idx = torch.arange(start_idx, end_idx) @@ -121,10 +117,7 @@ def to_xyz_idx(batch_dic): return xyz_conf_all_idx -def split_nbrs(nbrs, - mol_size, - confs_in_batch, - conf_idx): +def split_nbrs(nbrs, mol_size, confs_in_batch, conf_idx): """ Get the indices of the neighbor list that correspond to conformers we're keeping. @@ -143,7 +136,6 @@ def split_nbrs(nbrs, cutoffs = [i * mol_size - 1 for i in range(1, confs_in_batch + 1)] for i in conf_idx: - # start index of the conformer start = cutoffs[i] - mol_size + 1 # end index of the conformer @@ -178,10 +170,7 @@ def to_nbr_idx(batch_dic, nbrs): confs_in_batch = batch_dic["confs_in_batch"] conf_idx = batch_dic["conf_idx"] - split_nbr_idx = split_nbrs(nbrs=nbrs, - mol_size=mol_size, - confs_in_batch=confs_in_batch, - conf_idx=conf_idx) + split_nbr_idx = split_nbrs(nbrs=nbrs, mol_size=mol_size, confs_in_batch=confs_in_batch, conf_idx=conf_idx) return split_nbr_idx @@ -227,10 +216,9 @@ def update_nbr_idx_keys(dset, batch, i, old_nbrs, num_confs): # make a mask for the neighbor list indices that are being kept - mol_size = batch['mol_size'] + mol_size = batch["mol_size"] for j in range(num_confs): - mask = (old_nbrs[:, 0] < (j + 1) * mol_size - ) * (old_nbrs[:, 0] >= j * mol_size) + mask = (old_nbrs[:, 0] < (j + 1) * mol_size) * (old_nbrs[:, 0] >= j * mol_size) if j == 0: total_mask = copy.deepcopy(mask) else: @@ -249,7 +237,7 @@ def update_nbr_idx_keys(dset, batch, i, old_nbrs, num_confs): def update_per_conf(dataset, i, old_num_atoms, new_n_confs): - mol_size = dataset.props["mol_size"][i] + dataset.props["mol_size"][i] for key in PER_CONF_KEYS: if key not in dataset.props: continue @@ -300,26 +288,18 @@ def update_dset(batch, batch_dic, dataset, i): dataset.props["atom_features"][i] = atom_feats[conf_xyz_idx] # renormalize weights - dataset.props["weights"][i] = update_weights(batch, - batch_dic) + dataset.props["weights"][i] = update_weights(batch, batch_dic) # update anything else that's a per-conformer quantity update_per_conf(dataset, i, old_num_atoms, batch_dic["real_num_confs"]) # update anything that depends on the indexing of the nbr list - update_nbr_idx_keys(dset=dataset, - batch=batch, - i=i, - old_nbrs=nbr_list, - num_confs=batch_dic["real_num_confs"]) + update_nbr_idx_keys(dset=dataset, batch=batch, i=i, old_nbrs=nbr_list, num_confs=batch_dic["real_num_confs"]) return dataset -def trim_confs(dataset, - num_confs, - idx_dic, - enum_func=None): +def trim_confs(dataset, num_confs, idx_dic, enum_func=None): """ Trim conformers for the entire dataset. Args: @@ -341,23 +321,14 @@ def trim_confs(dataset, enum_func = tqdm_enum for i, batch in tqdm_enum(dataset): + batch_dic = get_batch_dic(batch=batch, idx_dic=idx_dic, num_confs=num_confs) - batch_dic = get_batch_dic(batch=batch, - idx_dic=idx_dic, - num_confs=num_confs) - - dataset = update_dset(batch=batch, - batch_dic=batch_dic, - dataset=dataset, - i=i) + dataset = update_dset(batch=batch, batch_dic=batch_dic, dataset=dataset, i=i) return dataset -def make_split_nbrs(nbr_list, - mol_size, - num_confs, - confs_per_split): +def make_split_nbrs(nbr_list, mol_size, num_confs, confs_per_split): """ Split neighbor list of a species into chunks for each sub-batch. Args: @@ -382,8 +353,7 @@ def make_split_nbrs(nbr_list, # mask = (nbr_list[:, 0] <= (i + 1) * mol_size # ) * (nbr_list[:, 1] <= (i + 1) * mol_size) - mask = (nbr_list[:, 0] < (i + 1) * mol_size - ) * (nbr_list[:, 0] >= i * mol_size) + mask = (nbr_list[:, 0] < (i + 1) * mol_size) * (nbr_list[:, 0] >= i * mol_size) new_nbrs.append(nbr_list[mask]) masks.append(mask) @@ -394,7 +364,6 @@ def make_split_nbrs(nbr_list, sub_batch_masks = [] for i, num in enumerate(confs_per_split): - # neighbor first prev_idx = sum(confs_per_split[:i]) nbr_idx = list(range(prev_idx, prev_idx + num)) @@ -405,18 +374,13 @@ def make_split_nbrs(nbr_list, all_grouped_nbrs.append(grouped_nbrs) # then add together all the masks - mask = sum(masks[i] for i in range(prev_idx, - prev_idx + num)).to(torch.bool) + mask = sum(masks[i] for i in range(prev_idx, prev_idx + num)).to(torch.bool) sub_batch_masks.append(mask) return all_grouped_nbrs, sub_batch_masks -def add_split_nbrs(batch, - mol_size, - num_confs, - confs_per_split, - sub_batches): +def add_split_nbrs(batch, mol_size, num_confs, confs_per_split, sub_batches): """ Add split-up neighbor lists to each sub-batch. Args: @@ -443,10 +407,9 @@ def add_split_nbrs(batch, if key not in batch: continue nbr_list = batch[key] - split_nbrs, masks = make_split_nbrs(nbr_list=nbr_list, - mol_size=mol_size, - num_confs=num_confs, - confs_per_split=confs_per_split) + split_nbrs, masks = make_split_nbrs( + nbr_list=nbr_list, mol_size=mol_size, num_confs=num_confs, confs_per_split=confs_per_split + ) if key == "nbr_list": nbr_masks = masks @@ -457,9 +420,7 @@ def add_split_nbrs(batch, return sub_batches, nbr_masks -def get_confs_per_split(batch, - num_confs, - sub_batch_size): +def get_confs_per_split(batch, num_confs, sub_batch_size): """ Get the number of conformers per sub-batch. Args: @@ -474,8 +435,7 @@ def get_confs_per_split(batch, val_len = len(batch["nxyz"]) inherent_val_len = val_len // num_confs - split_list = [sub_batch_size * inherent_val_len] * math.floor( - num_confs / sub_batch_size) + split_list = [sub_batch_size * inherent_val_len] * math.floor(num_confs / sub_batch_size) # if there's a remainder @@ -487,9 +447,7 @@ def get_confs_per_split(batch, return confs_per_split -def fix_nbr_idx(batch, - masks, - sub_batches): +def fix_nbr_idx(batch, masks, sub_batches): """ Fix anything that is defined with respect to positions of pairs in a neighbor list (e.g. `bond_idx`, `kj_idx`, @@ -504,7 +462,7 @@ def fix_nbr_idx(batch, sub_batches (list[dict]): corrected sub batches of the batch """ - old_nbr_list = batch['nbr_list'] + old_nbr_list = batch["nbr_list"] new_idx_list = [] for mask in masks: @@ -512,8 +470,7 @@ def fix_nbr_idx(batch, # make everything not in this batch equal to -1 so we # know what's actually not in this batch new_idx = -torch.ones_like(old_nbr_list)[:, 0] - new_idx[mask] = (torch.arange(num_new_nbrs) - .to(mask.device)) + new_idx[mask] = torch.arange(num_new_nbrs).to(mask.device) new_idx_list.append(new_idx) for new_idx, sub_batch in zip(new_idx_list, sub_batches): @@ -529,8 +486,7 @@ def fix_nbr_idx(batch, return sub_batches -def split_batch(batch, - sub_batch_size): +def split_batch(batch, sub_batch_size): """ Split a batch into sub-batches. Args: @@ -545,10 +501,7 @@ def split_batch(batch, num_confs = len(batch["nxyz"]) // mol_size sub_batch_dic = {} - confs_per_split = get_confs_per_split( - batch=batch, - num_confs=num_confs, - sub_batch_size=sub_batch_size) + confs_per_split = get_confs_per_split(batch=batch, num_confs=num_confs, sub_batch_size=sub_batch_size) num_splits = len(confs_per_split) @@ -561,8 +514,7 @@ def split_batch(batch, continue elif np.mod(val_len, num_confs) != 0 or val_len == 1: if key == "num_atoms": - sub_batch_dic[key] = [int(val * num / num_confs) - for num in confs_per_split] + sub_batch_dic[key] = [int(val * num / num_confs) for num in confs_per_split] else: sub_batch_dic[key] = [val] * num_splits continue @@ -575,26 +527,20 @@ def split_batch(batch, # use this to determine the number of items in each # section of the split list - split_list = [inherent_val_len * num - for num in confs_per_split] + split_list = [inherent_val_len * num for num in confs_per_split] # split the value accordingly split_val = torch.split(val, split_list) sub_batch_dic[key] = split_val - sub_batches = [{key: sub_batch_dic[key][i] for key in - sub_batch_dic.keys()} for i in range(num_splits)] + sub_batches = [{key: sub_batch_dic[key][i] for key in sub_batch_dic.keys()} for i in range(num_splits)] # fix neighbor list indexing - sub_batches, masks = add_split_nbrs(batch=batch, - mol_size=mol_size, - num_confs=num_confs, - confs_per_split=confs_per_split, - sub_batches=sub_batches) + sub_batches, masks = add_split_nbrs( + batch=batch, mol_size=mol_size, num_confs=num_confs, confs_per_split=confs_per_split, sub_batches=sub_batches + ) # fix anything that relies on the position of a neighbor list pair - sub_batches = fix_nbr_idx(batch=batch, - masks=masks, - sub_batches=sub_batches) + sub_batches = fix_nbr_idx(batch=batch, masks=masks, sub_batches=sub_batches) return sub_batches diff --git a/nff/utils/constants.py b/nff/utils/constants.py index c94a7b11..4238a5d9 100644 --- a/nff/utils/constants.py +++ b/nff/utils/constants.py @@ -35,16 +35,16 @@ AU_TO_KCAL = { "energy": HARTREE_TO_KCAL_MOL, "_grad": 1.0 / BOHR_RADIUS, - "stress": HARTREE_TO_KCAL_MOL * ((1.0 / BOHR_RADIUS)**3), - "_volume": 1 / ((1.0 / BOHR_RADIUS)**3), + "stress": HARTREE_TO_KCAL_MOL * ((1.0 / BOHR_RADIUS) ** 3), + "_volume": 1 / ((1.0 / BOHR_RADIUS) ** 3), } AU_TO_EV = { "energy": HARTREE_TO_EV, "_grad": 1.0 / BOHR_RADIUS, - "stress": HARTREE_TO_EV * ((1.0 / BOHR_RADIUS)**3), - "_volume": 1 / ((1.0 / BOHR_RADIUS)**3), + "stress": HARTREE_TO_EV * ((1.0 / BOHR_RADIUS) ** 3), + "_volume": 1 / ((1.0 / BOHR_RADIUS) ** 3), } @@ -244,11 +244,7 @@ def exc_ev_to_hartree(props: dict, add_ground_energy: bool = False) -> dict: new_props (dict): dictionary with properties converted. """ assert "energy_0" in props - exc_keys = [ - key - for key in props - if key.startswith("energy") and "grad" not in key and key != "energy_0" - ] + exc_keys = [key for key in props if key.startswith("energy") and "grad" not in key and key != "energy_0"] energy_0 = props["energy_0"] new_props = copy.deepcopy(props) diff --git a/nff/utils/dispersion.py b/nff/utils/dispersion.py index 14cba679..815c7518 100644 --- a/nff/utils/dispersion.py +++ b/nff/utils/dispersion.py @@ -19,11 +19,10 @@ from ase import Atoms from ase.calculators.dftd3 import DFTD3 -base_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), - 'table_data') -c6_ref_path = os.path.join(base_dir, 'c6ab.npy') -r_cov_path = os.path.join(base_dir, 'rcov.npy') -r2r4_path = os.path.join(base_dir, 'r2r4.npy') +base_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "table_data") +c6_ref_path = os.path.join(base_dir, "c6ab.npy") +r_cov_path = os.path.join(base_dir, "rcov.npy") +r2r4_path = os.path.join(base_dir, "r2r4.npy") func_path = os.path.join(base_dir, "functional_params.json") # reference C6 data for pairs of atom types AB in different reference systems @@ -43,11 +42,7 @@ FUNC_PARAMS = json.load(f) -def get_periodic_nbrs(batch, - xyz, - r_cut=95, - nbrs_info=None, - mol_idx=None): +def get_periodic_nbrs(batch, xyz, r_cut=95, nbrs_info=None, mol_idx=None): """ Get the neighbor list connecting every atom to its neighbor within a given geometry, but not to itself or to atoms in other geometries. @@ -57,13 +52,12 @@ def get_periodic_nbrs(batch, device = xyz.device - num_atoms = batch['num_atoms'] + num_atoms = batch["num_atoms"] if not isinstance(num_atoms, list): num_atoms = num_atoms.tolist() if nbrs_info is None: - - nxyz_list = torch.split(batch['nxyz'], num_atoms) + nxyz_list = torch.split(batch["nxyz"], num_atoms) xyzs = torch.split(xyz, num_atoms) nbrs = [] @@ -78,22 +72,14 @@ def get_periodic_nbrs(batch, num_atoms = [] for _xyz, nxyz in zip(xyzs, nxyz_list): # only works if the cell for all crystals in batch are the same - cell = batch['cell'].cpu().numpy() + cell = batch["cell"].cpu().numpy() # cutoff specified by r_cut in Bohr (a.u.) # estimate getting close to the cutoff with supercell expansion - a_mul = int(np.ceil( - (r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[0]) - )) - b_mul = int(np.ceil( - (r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[1]) - )) - c_mul = int(np.ceil( - (r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[2]) - )) - supercell_matrix = np.array([[a_mul, 0, 0], - [0, b_mul, 0], - [0, 0, c_mul]]) + a_mul = int(np.ceil((r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[0]))) + b_mul = int(np.ceil((r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[1]))) + c_mul = int(np.ceil((r_cut * const.BOHR_RADIUS) / np.linalg.norm(cell[2]))) + supercell_matrix = np.array([[a_mul, 0, 0], [0, b_mul, 0], [0, 0, c_mul]]) supercell = clean_matrix(supercell_matrix @ cell) # cartesian lattice points @@ -102,36 +88,27 @@ def get_periodic_nbrs(batch, # need to get all negative lattice translation vectors # but remove duplicate 0 vector - zero_idx = np.where( - np.all(_lattice_points.__eq__(np.array([0, 0, 0])), - axis=1) - )[0][0] - _lattice_points = np.concatenate([_lattice_points[zero_idx:, :], - _lattice_points[:zero_idx, :]]) + zero_idx = np.where(np.all(_lattice_points.__eq__(np.array([0, 0, 0])), axis=1))[0][0] + _lattice_points = np.concatenate([_lattice_points[zero_idx:, :], _lattice_points[:zero_idx, :]]) _z = nxyz[:, 0].long().to(device) _N = len(_lattice_points) # perform lattice translations on positions - lattice_points_T = (torch.tile( - torch.from_numpy(_lattice_points), - ((len(_xyz),) + - (1,) * (len(_lattice_points.shape) - 1)) - ) / const.BOHR_RADIUS).to(device) - _xyz_T = ((torch.repeat_interleave(_xyz, _N, dim=0) - / const.BOHR_RADIUS).to(device)) + lattice_points_T = ( + torch.tile(torch.from_numpy(_lattice_points), ((len(_xyz),) + (1,) * (len(_lattice_points.shape) - 1))) + / const.BOHR_RADIUS + ).to(device) + _xyz_T = (torch.repeat_interleave(_xyz, _N, dim=0) / const.BOHR_RADIUS).to(device) _xyz_T = _xyz_T + lattice_points_T # get valid indices within the cutoff num = _xyz.shape[0] idx = torch.arange(num) x, y = torch.meshgrid(idx, idx) - _nbrs = torch.cat([x.reshape(-1, 1), y.reshape(-1, 1)], - dim=1).to(device) - _lattice_points = (torch.tile( - torch.from_numpy(_lattice_points).to(device), - ((len(_nbrs),) + - (1,) * (len(_lattice_points.shape) - 1)) - )) + _nbrs = torch.cat([x.reshape(-1, 1), y.reshape(-1, 1)], dim=1).to(device) + _lattice_points = torch.tile( + torch.from_numpy(_lattice_points).to(device), ((len(_nbrs),) + (1,) * (len(_lattice_points.shape) - 1)) + ) # convert everything from Angstroms to Bohr _xyz = _xyz / const.BOHR_RADIUS @@ -162,42 +139,31 @@ def get_periodic_nbrs(batch, num_atoms.append(len(_xyz)) else: - nxyz_list = torch.split(batch['nxyz'], num_atoms) + nxyz_list = torch.split(batch["nxyz"], num_atoms) xyzs = torch.split(xyz, num_atoms) nbrs_T, nbrs, z, N, lattice_points, mask_applied = nbrs_info _xyzs = [] num_atoms = [] for _xyz, nxyz in zip(xyzs, nxyz_list): - _xyz = _xyz / const.BOHR_RADIUS # convert to Bohr + _xyz = _xyz / const.BOHR_RADIUS # convert to Bohr _xyzs.append(_xyz) num_atoms.append(len(_xyz)) if mol_idx is None: - mol_idx = torch.cat([torch.zeros(num) + i - for i, num in enumerate(num_atoms)] - ).long().to(_xyz.device) - - return nbrs_T, nbrs, z, _xyzs, N, lattice_points, mask_applied, \ - r_cut, mol_idx - - -def get_periodic_coordination(xyz, - z, - nbrs_T, - lattice_points, - r_cov, - k1, - k2, - cn_cut=40): + mol_idx = torch.cat([torch.zeros(num) + i for i, num in enumerate(num_atoms)]).long().to(_xyz.device) + + return nbrs_T, nbrs, z, _xyzs, N, lattice_points, mask_applied, r_cut, mol_idx + + +def get_periodic_coordination(xyz, z, nbrs_T, lattice_points, r_cov, k1, k2, cn_cut=40): """ Get coordination numbers for each atom in periodic system """ # r_ij with all lattice translation vectors # vector btwn pairs of atoms - r_ij_T = ((xyz[nbrs_T[:, 0]] - xyz[nbrs_T[:, 1]]) - + lattice_points).to(xyz.device) + r_ij_T = ((xyz[nbrs_T[:, 0]] - xyz[nbrs_T[:, 1]]) + lattice_points).to(xyz.device) # r_ab with all lattice translations # distance (scalar) btwn pairs of atoms @@ -212,32 +178,24 @@ def get_periodic_coordination(xyz, # calculate covalent radii (for coordination number calculation) ra_cov_T = r_cov[z[nbrs_T_cn[:, 0]]].to(r_ab_T.device) rb_cov_T = r_cov[z[nbrs_T_cn[:, 1]]].to(r_ab_T.device) - cn_ab_T = ((1 / (1 + torch.exp( - -k1 * (k2 * (ra_cov_T + rb_cov_T) / r_ab_T_cn - 1)))) - .to(r_ab_T.device)) - cn = scatter_add(cn_ab_T, - nbrs_T_cn[:, 0], - dim_size=xyz.shape[0]) + cn_ab_T = (1 / (1 + torch.exp(-k1 * (k2 * (ra_cov_T + rb_cov_T) / r_ab_T_cn - 1)))).to(r_ab_T.device) + cn = scatter_add(cn_ab_T, nbrs_T_cn[:, 0], dim_size=xyz.shape[0]) return r_ab_T, r_ij_T, cn -def get_nbrs(batch, - xyz, - nbrs=None, - mol_idx=None): +def get_nbrs(batch, xyz, nbrs=None, mol_idx=None): """ Get the directed neighbor list connecting every atom to its neighbor within a given geometry, but not to itself or to atoms in other geometries. """ - num_atoms = batch['num_atoms'] + num_atoms = batch["num_atoms"] if not isinstance(num_atoms, list): num_atoms = num_atoms.tolist() if nbrs is None: - - nxyz_list = torch.split(batch['nxyz'], num_atoms) + nxyz_list = torch.split(batch["nxyz"], num_atoms) counter = 0 nbrs = [] @@ -256,45 +214,31 @@ def get_nbrs(batch, nbrs = torch.cat(nbrs).to(xyz.device) - z = batch['nxyz'][:, 0].long().to(xyz.device) + z = batch["nxyz"][:, 0].long().to(xyz.device) if mol_idx is None: - mol_idx = torch.cat([torch.zeros(num) + i - for i, num in enumerate(num_atoms)] - ).long().to(xyz.device) + mol_idx = torch.cat([torch.zeros(num) + i for i, num in enumerate(num_atoms)]).long().to(xyz.device) return nbrs, mol_idx, z -def get_coordination(xyz, - z, - nbrs, - r_cov, - k1, - k2): +def get_coordination(xyz, z, nbrs, r_cov, k1, k2): """ Get coordination numbers for each atom """ # distances in Bohr radii (atomic units) - r_ab = ((xyz[nbrs[:, 0]] - xyz[nbrs[:, 1]]) - .pow(2).sum(1).sqrt() / const.BOHR_RADIUS) + r_ab = (xyz[nbrs[:, 0]] - xyz[nbrs[:, 1]]).pow(2).sum(1).sqrt() / const.BOHR_RADIUS ra_cov = r_cov[z[nbrs[:, 0]]].to(r_ab.device) rb_cov = r_cov[z[nbrs[:, 1]]].to(r_ab.device) cn_ab = 1 / (1 + torch.exp(-k1 * (k2 * (ra_cov + rb_cov) / r_ab - 1))) - cn = scatter_add(cn_ab, - nbrs[:, 0], - dim_size=xyz.shape[0]) + cn = scatter_add(cn_ab, nbrs[:, 0], dim_size=xyz.shape[0]) return cn, r_ab -def get_c6(z, - cn, - nbrs, - c6_ref, - k3): +def get_c6(z, cn, nbrs, c6_ref, k3): """ Get the C6 parameter for each atom pair """ @@ -307,15 +251,13 @@ def get_c6(z, cn_a = c6ab_ref[..., 1] cn_b = c6ab_ref[..., 2] - r = ((cn_a - cn_a_i.reshape(-1, 1, 1)) ** 2 + - (cn_b - cn_b_j.reshape(-1, 1, 1)) ** 2) + r = (cn_a - cn_a_i.reshape(-1, 1, 1)) ** 2 + (cn_b - cn_b_j.reshape(-1, 1, 1)) ** 2 l_ij = torch.zeros_like(r) # exclude any info that doesn't exist for this (i, j) combination -- # signified in the tables by c6_ab_ref = -1 - valid_idx = torch.bitwise_and(torch.bitwise_and(cn_a >= 0, cn_b >= 0), - c6_ab_ref_ij >= 0) + valid_idx = torch.bitwise_and(torch.bitwise_and(cn_a >= 0, cn_b >= 0), c6_ab_ref_ij >= 0) l_ij[valid_idx] = torch.exp(-k3 * r[valid_idx]) w = l_ij.sum((1, 2)) @@ -325,10 +267,7 @@ def get_c6(z, return c6 -def get_c8(z, - nbrs, - c6, - r2r4): +def get_c8(z, nbrs, c6, r2r4): """ Get the C6 parameter for each atom pair """ @@ -338,88 +277,65 @@ def get_c8(z, return c8 -def disp_from_data(r_ab, - c6, - c8, - s6, - s8, - a1, - a2, - xyz, - nbrs, - mol_idx): - +def disp_from_data(r_ab, c6, c8, s6, s8, a1, a2, xyz, nbrs, mol_idx): r0_ab = (c8 / c6) ** 0.5 f = a1 * r0_ab + a2 - e_ab = -1 / 2 * (s6 * c6 / (r_ab ** 6 + f ** 6) + - s8 * c8 / (r_ab ** 8 + f ** 8)) + e_ab = -1 / 2 * (s6 * c6 / (r_ab**6 + f**6) + s8 * c8 / (r_ab**8 + f**8)) - e_a = scatter_add(e_ab, - nbrs[:, 0], - dim_size=xyz.shape[0]) + e_a = scatter_add(e_ab, nbrs[:, 0], dim_size=xyz.shape[0]) - e_disp = scatter_add(e_a, - mol_idx, - dim_size=int(1 + mol_idx.max())) + e_disp = scatter_add(e_a, mol_idx, dim_size=int(1 + mol_idx.max())) return e_disp -def get_func_info(functional, - disp_type, - func_params): - +def get_func_info(functional, disp_type, func_params): msg = "Parameters not present for dispersion type %s" % disp_type func_params = {key.lower(): val for key, val in func_params.items()} assert disp_type.lower() in func_params, msg - msg = ("Parameters not present for functional %s with dispersion type %s" - % (functional, disp_type)) + msg = "Parameters not present for functional %s with dispersion type %s" % (functional, disp_type) - sub_params = {key.lower(): val for key, val in - func_params[disp_type.lower()].items()} + sub_params = {key.lower(): val for key, val in func_params[disp_type.lower()].items()} assert functional.lower() in sub_params, msg all_params = sub_params[functional.lower()] - all_params.update(sub_params['universal']) + all_params.update(sub_params["universal"]) return all_params -def get_dispersion(batch, - xyz, - disp_type, - functional, - c6_ref=C6_REF, - r_cov=R_COV, - r2r4=R2R4, - func_params=FUNC_PARAMS, - nbrs=None, - mol_idx=None): - - params = get_func_info(functional=functional, - disp_type=disp_type, - func_params=func_params) - - periodic = (batch.get('cell', None) is not None) +def get_dispersion( + batch, + xyz, + disp_type, + functional, + c6_ref=C6_REF, + r_cov=R_COV, + r2r4=R2R4, + func_params=FUNC_PARAMS, + nbrs=None, + mol_idx=None, +): + params = get_func_info(functional=functional, disp_type=disp_type, func_params=func_params) + + periodic = batch.get("cell", None) is not None device = xyz.device if periodic: - (nbrs_T, nbrs, z, _xyzs, N, - lattice_points, mask_applied, - r_cut, mol_idx) = get_periodic_nbrs(batch=batch, - xyz=xyz, - nbrs_info=nbrs, - mol_idx=mol_idx) + (nbrs_T, nbrs, z, _xyzs, N, lattice_points, mask_applied, r_cut, mol_idx) = get_periodic_nbrs( + batch=batch, xyz=xyz, nbrs_info=nbrs, mol_idx=mol_idx + ) r_ij_T = [] c6 = [] c8 = [] filtered_nbrs_T = [] - for _nbrs_T, _nbrs, _z, _xyz, _N, _lattice_points, _mask_applied \ - in zip(nbrs_T, nbrs, z, _xyzs, N, lattice_points, mask_applied): + for _nbrs_T, _nbrs, _z, _xyz, _N, _lattice_points, _mask_applied in zip( + nbrs_T, nbrs, z, _xyzs, N, lattice_points, mask_applied + ): _r_ab_T, _r_ij_T, cn = get_periodic_coordination( xyz=_xyz, z=_z, @@ -427,19 +343,12 @@ def get_dispersion(batch, lattice_points=_lattice_points, r_cov=r_cov, k1=params["k1"], - k2=params["k2"] + k2=params["k2"], ) - _c6 = get_c6(z=_z, - cn=cn, - nbrs=_nbrs, - c6_ref=c6_ref, - k3=params["k3"]) + _c6 = get_c6(z=_z, cn=cn, nbrs=_nbrs, c6_ref=c6_ref, k3=params["k3"]) - _c8 = get_c8(z=_z, - nbrs=_nbrs, - c6=_c6, - r2r4=r2r4) + _c8 = get_c8(z=_z, nbrs=_nbrs, c6=_c6, r2r4=r2r4) # get original pairwise interactions from within unit cell # change shape of all tensors to account for the fake expansion @@ -472,55 +381,45 @@ def get_dispersion(batch, counter.append(count) count += len(_xyz) - filtered_nbrs_T = [_nbrs_T + count for _nbrs_T, count - in zip(filtered_nbrs_T, counter)] + filtered_nbrs_T = [_nbrs_T + count for _nbrs_T, count in zip(filtered_nbrs_T, counter)] nbrs_T = torch.cat(filtered_nbrs_T).to(device) xyzs = torch.cat(_xyzs).to(device) - e_disp = disp_from_data(r_ab=r_ab_T, - c6=c6, - c8=c8, - s6=params["s6"], - s8=params["s8"], - a1=params["a1"], - a2=params["a2"], - xyz=xyzs, - nbrs=nbrs_T, - mol_idx=mol_idx) + e_disp = disp_from_data( + r_ab=r_ab_T, + c6=c6, + c8=c8, + s6=params["s6"], + s8=params["s8"], + a1=params["a1"], + a2=params["a2"], + xyz=xyzs, + nbrs=nbrs_T, + mol_idx=mol_idx, + ) else: - nbrs, mol_idx, z = get_nbrs(batch=batch, - xyz=xyz, - nbrs=nbrs, - mol_idx=mol_idx) - cn, r_ab = get_coordination(xyz=xyz, - z=z, - nbrs=nbrs, - r_cov=r_cov.to(xyz.device), - k1=params["k1"], - k2=params["k2"]) - - c6 = get_c6(z=z, - cn=cn, - nbrs=nbrs, - c6_ref=c6_ref.to(xyz.device), - k3=params["k3"]) - - c8 = get_c8(z=z, - nbrs=nbrs, - c6=c6, - r2r4=r2r4) - - e_disp = disp_from_data(r_ab=r_ab, - c6=c6, - c8=c8, - s6=params["s6"], - s8=params["s8"], - a1=params["a1"], - a2=params["a2"], - xyz=xyz, - nbrs=nbrs, - mol_idx=mol_idx) + nbrs, mol_idx, z = get_nbrs(batch=batch, xyz=xyz, nbrs=nbrs, mol_idx=mol_idx) + cn, r_ab = get_coordination( + xyz=xyz, z=z, nbrs=nbrs, r_cov=r_cov.to(xyz.device), k1=params["k1"], k2=params["k2"] + ) + + c6 = get_c6(z=z, cn=cn, nbrs=nbrs, c6_ref=c6_ref.to(xyz.device), k3=params["k3"]) + + c8 = get_c8(z=z, nbrs=nbrs, c6=c6, r2r4=r2r4) + + e_disp = disp_from_data( + r_ab=r_ab, + c6=c6, + c8=c8, + s6=params["s6"], + s8=params["s8"], + a1=params["a1"], + a2=params["a2"], + xyz=xyz, + nbrs=nbrs, + mol_idx=mol_idx, + ) r_ij_T = None nbrs_T = None @@ -528,11 +427,13 @@ def get_dispersion(batch, def grimme_dispersion(batch, xyz, disp_type, functional): - - d3 = DFTD3(xc='pbe', damping='bj', grad=True) - atoms = Atoms(cell=batch.get('cell', None).detach().cpu().numpy(), - numbers=batch['nxyz'][:, 0].detach().cpu().numpy(), - positions=xyz.detach().cpu().numpy(), pbc=True) + d3 = DFTD3(xc="pbe", damping="bj", grad=True) + atoms = Atoms( + cell=batch.get("cell", None).detach().cpu().numpy(), + numbers=batch["nxyz"][:, 0].detach().cpu().numpy(), + positions=xyz.detach().cpu().numpy(), + pbc=True, + ) atoms.calc = d3 e_disp = atoms.get_potential_energy() stress_disp = atoms.get_stress(voigt=False) diff --git a/nff/utils/fast_attention.py b/nff/utils/fast_attention.py index e9f24b08..710923f6 100644 --- a/nff/utils/fast_attention.py +++ b/nff/utils/fast_attention.py @@ -2,9 +2,7 @@ import numpy as np -def make_w(feat_dim, - rand_dim): - +def make_w(feat_dim, rand_dim): w = np.random.rand(rand_dim, feat_dim) q, r = np.linalg.qr(w) iid = np.random.randn(q.shape[1]).reshape(1, -1) @@ -13,12 +11,10 @@ def make_w(feat_dim, return orth -def phi_pos(w, - x): - +def phi_pos(w, x): rand_dim = w.shape[0] - h = torch.exp(-(x ** 2).sum(-1) / 2) - pref = h / rand_dim ** 0.5 + h = torch.exp(-(x**2).sum(-1) / 2) + pref = h / rand_dim**0.5 arg = torch.exp(torch.matmul(w, x)) out = pref * arg diff --git a/nff/utils/functions.py b/nff/utils/functions.py index 7ba7bdce..56720a9a 100644 --- a/nff/utils/functions.py +++ b/nff/utils/functions.py @@ -20,6 +20,7 @@ # DimeNet + def Jn(r, n): """ numerical spherical bessel functions of order n @@ -49,13 +50,13 @@ def spherical_bessel_formulas(n): """ Computes the sympy formulas for the spherical bessel functions up to order n (excluded) """ - x = sym.symbols('x') + x = sym.symbols("x") f = [sym.sin(x) / x] a = sym.sin(x) / x for i in range(1, n): b = sym.diff(a, x) / x - f += [sym.simplify(b * (-x)**i)] + f += [sym.simplify(b * (-x) ** i)] a = sym.simplify(b) return f @@ -71,19 +72,17 @@ def bessel_basis(n, k): for order in range(n): normalizer_tmp = [] for i in range(k): - normalizer_tmp += [0.5 * Jn(zeros[order, i], order + 1)**2] - normalizer_tmp = 1 / np.array(normalizer_tmp)**0.5 + normalizer_tmp += [0.5 * Jn(zeros[order, i], order + 1) ** 2] + normalizer_tmp = 1 / np.array(normalizer_tmp) ** 0.5 normalizer += [normalizer_tmp] f = spherical_bessel_formulas(n) - x = sym.symbols('x') + x = sym.symbols("x") bess_basis = [] for order in range(n): bess_basis_tmp = [] for i in range(k): - bess_basis_tmp += [sym.simplify(normalizer[order] - [i] * f[order].subs( - x, zeros[order, i] * x))] + bess_basis_tmp += [sym.simplify(normalizer[order][i] * f[order].subs(x, zeros[order, i] * x))] bess_basis += [bess_basis_tmp] return bess_basis @@ -95,15 +94,14 @@ def sph_harm_prefactor(l, m): l: int, l>=0 m: int, -l<=m<=l """ - return ((2 * l + 1) * np.math.factorial(l - abs(m)) - / (4 * np.pi * np.math.factorial(l + abs(m))))**0.5 + return ((2 * l + 1) * np.math.factorial(l - abs(m)) / (4 * np.pi * np.math.factorial(l + abs(m)))) ** 0.5 def associated_legendre_polynomials(l, zero_m_only=True): """ Computes sympy formulas of the associated legendre polynomials up to order l (excluded). """ - z = sym.symbols('z') + z = sym.symbols("z") P_l_m = [[0] * (j + 1) for j in range(l)] P_l_m[0][0] = 1 @@ -111,8 +109,7 @@ def associated_legendre_polynomials(l, zero_m_only=True): P_l_m[1][0] = z for j in range(2, l): - P_l_m[j][0] = sym.simplify( - ((2 * j - 1) * z * P_l_m[j - 1][0] - (j - 1) * P_l_m[j - 2][0]) / j) + P_l_m[j][0] = sym.simplify(((2 * j - 1) * z * P_l_m[j - 1][0] - (j - 1) * P_l_m[j - 2][0]) / j) if not zero_m_only: for i in range(1, l): P_l_m[i][i] = sym.simplify((1 - 2 * i) * P_l_m[i - 1][i - 1]) @@ -120,15 +117,13 @@ def associated_legendre_polynomials(l, zero_m_only=True): P_l_m[i + 1][i] = sym.simplify((2 * i + 1) * z * P_l_m[i][i]) for j in range(i + 2, l): P_l_m[j][i] = sym.simplify( - ((2 * j - 1) * z * P_l_m[j - 1][i] - - (i + j - 1) * P_l_m[j - 2][i]) / (j - i)) + ((2 * j - 1) * z * P_l_m[j - 1][i] - (i + j - 1) * P_l_m[j - 2][i]) / (j - i) + ) return P_l_m -def real_sph_harm(l, - zero_m_only=True, - spherical_coordinates=True): +def real_sph_harm(l, zero_m_only=True, spherical_coordinates=True): """ Computes formula strings of the the real part of the spherical harmonics up to order l (excluded). Variables are either cartesian coordinates x,y,z on the unit sphere or spherical coordinates phi and theta. @@ -137,58 +132,52 @@ def real_sph_harm(l, S_m = [0] C_m = [1] for i in range(1, l): - x = sym.symbols('x') - y = sym.symbols('y') + x = sym.symbols("x") + y = sym.symbols("y") S_m += [x * S_m[i - 1] + y * C_m[i - 1]] C_m += [x * C_m[i - 1] - y * S_m[i - 1]] P_l_m = associated_legendre_polynomials(l, zero_m_only) if spherical_coordinates: - theta = sym.symbols('theta') - z = sym.symbols('z') + theta = sym.symbols("theta") + z = sym.symbols("z") for i in range(len(P_l_m)): for j in range(len(P_l_m[i])): if not isinstance(P_l_m[i][j], int): P_l_m[i][j] = P_l_m[i][j].subs(z, sym.cos(theta)) if not zero_m_only: - phi = sym.symbols('phi') + phi = sym.symbols("phi") for i in range(len(S_m)): - S_m[i] = S_m[i].subs(x, sym.sin( - theta) * sym.cos(phi)).subs(y, sym.sin(theta) * sym.sin(phi)) + S_m[i] = S_m[i].subs(x, sym.sin(theta) * sym.cos(phi)).subs(y, sym.sin(theta) * sym.sin(phi)) for i in range(len(C_m)): - C_m[i] = C_m[i].subs(x, sym.sin( - theta) * sym.cos(phi)).subs(y, sym.sin(theta) * sym.sin(phi)) + C_m[i] = C_m[i].subs(x, sym.sin(theta) * sym.cos(phi)).subs(y, sym.sin(theta) * sym.sin(phi)) - Y_func_l_m = [['0'] *(2 *j + 1) for j in range(l)] + Y_func_l_m = [["0"] * (2 * j + 1) for j in range(l)] for i in range(l): Y_func_l_m[i][0] = sym.simplify(sph_harm_prefactor(i, 0) * P_l_m[i][0]) if not zero_m_only: for i in range(1, l): for j in range(1, i + 1): - Y_func_l_m[i][j] = sym.simplify( - 2**0.5 * sph_harm_prefactor(i, j) * C_m[j] * P_l_m[i][j]) + Y_func_l_m[i][j] = sym.simplify(2**0.5 * sph_harm_prefactor(i, j) * C_m[j] * P_l_m[i][j]) for i in range(1, l): for j in range(1, i + 1): - Y_func_l_m[i][-j] = sym.simplify( - 2**0.5 * sph_harm_prefactor(i, -j) * S_m[j] * P_l_m[i][j]) + Y_func_l_m[i][-j] = sym.simplify(2**0.5 * sph_harm_prefactor(i, -j) * S_m[j] * P_l_m[i][j]) return Y_func_l_m # SpookyNet + def A_m(x, y, m): device = x.device - p_vals = torch.arange(0, m + 1, - device=device) + p_vals = torch.arange(0, m + 1, device=device) q_vals = m - p_vals x_p = x.reshape(-1, 1) ** p_vals y_q = y.reshape(-1, 1) ** q_vals sin = torch.sin(np.pi / 2 * (m - p_vals)) - binoms = (torch.Tensor([sp.binom(m, int(p)) - for p in p_vals]) - .to(device)) + binoms = torch.Tensor([sp.binom(m, int(p)) for p in p_vals]).to(device) out = (binoms * x_p * y_q * sin).sum(-1) return out @@ -196,26 +185,26 @@ def A_m(x, y, m): def B_m(x, y, m): device = x.device - p_vals = torch.arange(0, m + 1, - device=device) + p_vals = torch.arange(0, m + 1, device=device) q_vals = m - p_vals x_p = x.reshape(-1, 1) ** p_vals y_q = y.reshape(-1, 1) ** q_vals cos = torch.cos(np.pi / 2 * (m - p_vals)) - binoms = (torch.Tensor([sp.binom(m, int(p)) for p in p_vals]) - .to(device)) + binoms = torch.Tensor([sp.binom(m, int(p)) for p in p_vals]).to(device) out = (binoms * x_p * y_q * cos).sum(-1) return out def c_plm(p, l, m): - terms = [(-1) ** p, - 1 / (2 ** l), - sp.binom(l, p), - sp.binom(2 * l - 2 * p, l), - sp.factorial(l - 2 * p), - 1 / sp.factorial(l - 2 * p - m)] + terms = [ + (-1) ** p, + 1 / (2**l), + sp.binom(l, p), + sp.binom(2 * l - 2 * p, l), + sp.factorial(l - 2 * p), + 1 / sp.factorial(l - 2 * p - m), + ] out = torch.Tensor(terms).prod() return out @@ -223,27 +212,18 @@ def c_plm(p, l, m): def make_c_table(l_max): c_table = {} for l in range(l_max + 1): - for m in range(-l, l +1): + for m in range(-l, l + 1): for p in range(0, math.floor((l - m) / 2) + 1): c_table[(p, l, m)] = c_plm(p, l, m) return c_table -def pi_l_m(r, - z, - l, - m, - c_table): - +def pi_l_m(r, z, l, m, c_table): device = r.device pref = (sp.factorial(l - m) / sp.factorial(l + m)) ** 0.5 - p_vals = (torch.arange(0, math.floor((l - m) / 2) + 1, - device=device, - dtype=torch.float)) + p_vals = torch.arange(0, math.floor((l - m) / 2) + 1, device=device, dtype=torch.float) - c_coefs = (torch.Tensor([c_table[(int(p), l, m)] - for p in p_vals]) - .to(device)) + c_coefs = torch.Tensor([c_table[(int(p), l, m)] for p in p_vals]).to(device) r_p = r.reshape(-1, 1) ** (2 * p_vals - l) z_q = z.reshape(-1, 1) ** (l - 2 * p_vals - m) @@ -253,34 +233,25 @@ def pi_l_m(r, def norm(vec): - result = ((vec ** 2 + EPS).sum(-1)) ** 0.5 + result = ((vec**2 + EPS).sum(-1)) ** 0.5 return result -def y_lm(r_ij, - r, - l, - m, - c_table): - +def y_lm(r_ij, r, l, m, c_table): x = r_ij[:, 0].reshape(-1, 1) y = r_ij[:, 1].reshape(-1, 1) z = r_ij[:, 2].reshape(-1, 1) - pi = pi_l_m(r=r, - z=z, - l=l, - m=abs(m), - c_table=c_table) + pi = pi_l_m(r=r, z=z, l=l, m=abs(m), c_table=c_table) if m < 0: a = A_m(x, y, abs(m)) - out = (2 ** 0.5) * pi * a + out = (2**0.5) * pi * a elif m == 0: out = pi elif m > 0: b = B_m(x, y, abs(m)) - out = (2 ** 0.5) * pi * b + out = (2**0.5) * pi * b return out @@ -289,72 +260,47 @@ def make_y_lm(l_max): c_table = make_c_table(l_max) def func(r_ij, r, l, m): - out = y_lm(r_ij=r_ij, - r=r, - l=l, - m=m, - c_table=c_table) + out = y_lm(r_ij=r_ij, r=r, l=l, m=m, c_table=c_table) return out + return func def spooky_f_cut(r, r_cut): - arg = r ** 2 / ((r_cut - r) * (r_cut + r)) + arg = r**2 / ((r_cut - r) * (r_cut + r)) # arg < 20 is for numerical stability # Anything > 20 will give under 1e-9 - output = torch.where( - (r < r_cut) * (arg < 20), - torch.exp(-arg), - torch.Tensor([0]).to(r.device) - ) + output = torch.where((r < r_cut) * (arg < 20), torch.exp(-arg), torch.Tensor([0]).to(r.device)) return output -def b_k(x, - bern_k): +def b_k(x, bern_k): device = x.device - k_vals = (torch.arange(0, bern_k, device=device) - .to(torch.float)) - binoms = (torch.Tensor([sp.binom(bern_k - 1, int(k)) - for k in k_vals]) - .to(device)) - out = binoms * (x ** k_vals) * (1 -x) ** (bern_k - 1 - k_vals) + k_vals = torch.arange(0, bern_k, device=device).to(torch.float) + binoms = torch.Tensor([sp.binom(bern_k - 1, int(k)) for k in k_vals]).to(device) + out = binoms * (x**k_vals) * (1 - x) ** (bern_k - 1 - k_vals) return out -def rho_k(r, - r_cut, - bern_k, - gamma): - +def rho_k(r, r_cut, bern_k, gamma): arg = torch.exp(-gamma * r) out = b_k(arg, bern_k) * spooky_f_cut(r, r_cut) return out -def get_g_func(l, - r_cut, - bern_k, - gamma, - y_lm_fn): - +def get_g_func(l, r_cut, bern_k, gamma, y_lm_fn): def fn(r_ij): - r = norm(r_ij).reshape(-1, 1) n_pairs = r_ij.shape[0] device = r_ij.device m_vals = list(range(-l, l + 1)) - y = torch.stack([y_lm_fn(r_ij, r, l, m) for m in - m_vals]).transpose(0, 1) + y = torch.stack([y_lm_fn(r_ij, r, l, m) for m in m_vals]).transpose(0, 1) rho = rho_k(r, r_cut, bern_k, gamma) - g = torch.ones(n_pairs, - bern_k, - len(m_vals), - device=device) + g = torch.ones(n_pairs, bern_k, len(m_vals), device=device) g = g * rho.reshape(n_pairs, -1, 1) g = g * y.reshape(n_pairs, 1, -1) @@ -363,23 +309,15 @@ def fn(r_ij): return fn -def make_g_funcs(bern_k, - gamma, - r_cut, - l_max=2): +def make_g_funcs(bern_k, gamma, r_cut, l_max=2): y_lm_fn = make_y_lm(l_max) g_funcs = {} letters = {0: "s", 1: "p", 2: "d"} for l in range(0, l_max + 1): - letter = letters[l] name = f"g_{letter}" - g_func = get_g_func(l=l, - r_cut=r_cut, - bern_k=bern_k, - gamma=gamma, - y_lm_fn=y_lm_fn) + g_func = get_g_func(l=l, r_cut=r_cut, bern_k=bern_k, gamma=gamma, y_lm_fn=y_lm_fn) g_funcs[name] = copy.deepcopy(g_func) return g_funcs diff --git a/nff/utils/geom.py b/nff/utils/geom.py index dee380e2..1364b197 100644 --- a/nff/utils/geom.py +++ b/nff/utils/geom.py @@ -12,30 +12,33 @@ def quaternion_to_matrix(q): - q0 = q[:, 0] q1 = q[:, 1] q2 = q[:, 2] q3 = q[:, 3] - R_q = torch.stack([q0**2 + q1**2 - q2**2 - q3**2, - 2 * (q1 * q2 - q0 * q3), - 2 * (q1 * q3 + q0 * q2), - 2 * (q1 * q2 + q0 * q3), - q0**2 - q1**2 + q2**2 - q3**2, - 2 * (q2 * q3 - q0 * q1), - 2 * (q1 * q3 - q0 * q2), - 2 * (q2 * q3 + q0 * q1), - q0**2 - q1**2 - q2**2 + q3**2] - ).transpose(0, 1).reshape(-1, 3, 3) + R_q = ( + torch.stack( + [ + q0**2 + q1**2 - q2**2 - q3**2, + 2 * (q1 * q2 - q0 * q3), + 2 * (q1 * q3 + q0 * q2), + 2 * (q1 * q2 + q0 * q3), + q0**2 - q1**2 + q2**2 - q3**2, + 2 * (q2 * q3 - q0 * q1), + 2 * (q1 * q3 - q0 * q2), + 2 * (q2 * q3 + q0 * q1), + q0**2 - q1**2 - q2**2 + q3**2, + ] + ) + .transpose(0, 1) + .reshape(-1, 3, 3) + ) return R_q -def rotation_matrix_from_points(m0, - m1, - store_grad=False): - +def rotation_matrix_from_points(m0, m1, store_grad=False): v0 = m0[:, None, :, :] # don't have to clone this because we don't modify its actual value below v1 = m1 @@ -45,23 +48,40 @@ def rotation_matrix_from_points(m0, r_22 = out_0[:, 1] r_33 = out_0[:, 2] - out_1 = torch.sum(v0 * torch.roll(v1, -1, dims=1), dim=-1 - ).reshape(-1, 3) + out_1 = torch.sum(v0 * torch.roll(v1, -1, dims=1), dim=-1).reshape(-1, 3) r_12 = out_1[:, 0] r_23 = out_1[:, 1] r_31 = out_1[:, 2] - out_2 = torch.sum(v0 * torch.roll(v1, -2, dims=1), dim=-1 - ).reshape(-1, 3) + out_2 = torch.sum(v0 * torch.roll(v1, -2, dims=1), dim=-1).reshape(-1, 3) r_13 = out_2[:, 0] r_21 = out_2[:, 1] r_32 = out_2[:, 2] - f = torch.stack([r_11 + r_22 + r_33, r_23 - r_32, r_31 - r_13, r_12 - r_21, - r_23 - r_32, r_11 - r_22 - r_33, r_12 + r_21, r_13 + r_31, - r_31 - r_13, r_12 + r_21, -r_11 + r_22 - r_33, r_23 + r_32, - r_12 - r_21, r_13 + r_31, r_23 + r_32, -r_11 - r_22 + r_33] - ).transpose(0, 1).reshape(-1, 4, 4) + f = ( + torch.stack( + [ + r_11 + r_22 + r_33, + r_23 - r_32, + r_31 - r_13, + r_12 - r_21, + r_23 - r_32, + r_11 - r_22 - r_33, + r_12 + r_21, + r_13 + r_31, + r_31 - r_13, + r_12 + r_21, + -r_11 + r_22 - r_33, + r_23 + r_32, + r_12 - r_21, + r_13 + r_31, + r_23 + r_32, + -r_11 - r_22 + r_33, + ] + ) + .transpose(0, 1) + .reshape(-1, 4, 4) + ) # Really slow on a GPU / with torch for some reason. # See https://github.com/pytorch/pytorch/issues/22573: @@ -115,10 +135,7 @@ def rotation_matrix_from_points(m0, return r_with_nan -def minimize_rotation_and_translation(targ_nxyz, - this_nxyz, - store_grad=False): - +def minimize_rotation_and_translation(targ_nxyz, this_nxyz, store_grad=False): base_p = this_nxyz[:, :, 1:] if store_grad: base_p.requires_grad = True @@ -130,9 +147,7 @@ def minimize_rotation_and_translation(targ_nxyz, c0 = p0.mean(1).reshape(-1, 1, 3) p0 -= c0 - R = rotation_matrix_from_points(p.transpose(1, 2), - p0.transpose(1, 2), - store_grad=store_grad) + R = rotation_matrix_from_points(p.transpose(1, 2), p0.transpose(1, 2), store_grad=store_grad) num_repeats = targ_nxyz.shape[0] p_repeat = torch.repeat_interleave(p, num_repeats, dim=0) @@ -142,14 +157,11 @@ def minimize_rotation_and_translation(targ_nxyz, return new_p, p0, R, base_p -def compute_rmsd(targ_nxyz, - this_nxyz): - +def compute_rmsd(targ_nxyz, this_nxyz): targ_nxyz = torch.Tensor(targ_nxyz).reshape(1, -1, 4) this_nxyz = torch.Tensor(this_nxyz).reshape(1, -1, 4) - out = minimize_rotation_and_translation(targ_nxyz=targ_nxyz, - this_nxyz=this_nxyz) + out = minimize_rotation_and_translation(targ_nxyz=targ_nxyz, this_nxyz=this_nxyz) xyz_0, new_targ, _, _ = out num_mols_1 = targ_nxyz.shape[0] @@ -160,20 +172,13 @@ def compute_rmsd(targ_nxyz, delta_sq = (xyz_0 - xyz_1) ** 2 num_atoms = delta_sq.shape[1] - distances = (((delta_sq.sum((1, 2)) / num_atoms) ** 0.5) - .reshape(num_mols_0, num_mols_1) - .cpu().reshape(-1).item()) + distances = ((delta_sq.sum((1, 2)) / num_atoms) ** 0.5).reshape(num_mols_0, num_mols_1).cpu().reshape(-1).item() return distances -def compute_distance(targ_nxyz, - atom_nxyz, - store_grad=False): - - out = minimize_rotation_and_translation(targ_nxyz=targ_nxyz, - this_nxyz=atom_nxyz, - store_grad=store_grad) +def compute_distance(targ_nxyz, atom_nxyz, store_grad=False): + out = minimize_rotation_and_translation(targ_nxyz=targ_nxyz, this_nxyz=atom_nxyz, store_grad=store_grad) xyz_0, new_targ, R, base_p = out @@ -185,8 +190,7 @@ def compute_distance(targ_nxyz, delta_sq = (xyz_0 - xyz_1) ** 2 num_atoms = delta_sq.shape[1] - distances = ((delta_sq.sum((1, 2)) / num_atoms) ** - 0.5).reshape(num_mols_0, num_mols_1).cpu() + distances = ((delta_sq.sum((1, 2)) / num_atoms) ** 0.5).reshape(num_mols_0, num_mols_1).cpu() R = R.cpu() if store_grad: @@ -195,12 +199,7 @@ def compute_distance(targ_nxyz, return distances.detach(), R -def compute_distances(dataset, - device, - batch_size=BATCH_SIZE, - dataset_1=None, - store_grad=False, - collate_dicts=None): +def compute_distances(dataset, device, batch_size=BATCH_SIZE, dataset_1=None, store_grad=False, collate_dicts=None): """ Compute distances between different configurations for one molecule. """ @@ -216,36 +215,26 @@ def compute_distances(dataset, shape += [3, 3] R_mat = torch.zeros(tuple(shape)) - loader_0 = DataLoader(dataset, - batch_size=batch_size, - collate_fn=collate_dicts) + loader_0 = DataLoader(dataset, batch_size=batch_size, collate_fn=collate_dicts) - loader_1 = DataLoader(dataset_1, - batch_size=batch_size, - collate_fn=collate_dicts) + loader_1 = DataLoader(dataset_1, batch_size=batch_size, collate_fn=collate_dicts) i_start = 0 xyz_list = [] for batch_0 in loader_0: - j_start = 0 for batch_1 in loader_1: - num_mols_0 = len(batch_0["num_atoms"]) num_mols_1 = len(batch_1["num_atoms"]) - targ_nxyz = (batch_0["nxyz"] - .reshape(num_mols_0, -1, 4).to(device)) - atom_nxyz = (batch_1["nxyz"] - .reshape(num_mols_1, -1, 4).to(device)) + targ_nxyz = batch_0["nxyz"].reshape(num_mols_0, -1, 4).to(device) + atom_nxyz = batch_1["nxyz"].reshape(num_mols_1, -1, 4).to(device) - out = compute_distance(targ_nxyz=targ_nxyz, - atom_nxyz=atom_nxyz, - store_grad=store_grad) + out = compute_distance(targ_nxyz=targ_nxyz, atom_nxyz=atom_nxyz, store_grad=store_grad) if store_grad: distances, R, xyz_0 = out - num_atoms = batch_1["num_atoms"].tolist() + batch_1["num_atoms"].tolist() xyz_list.append(xyz_0) else: @@ -253,18 +242,14 @@ def compute_distances(dataset, distances = distances.transpose(0, 1) - all_indices = (torch.ones_like(distances) - .nonzero(as_tuple=False) - .cpu()) + all_indices = torch.ones_like(distances).nonzero(as_tuple=False).cpu() all_indices[:, 0] += i_start all_indices[:, 1] += j_start - distance_mat[all_indices[:, 0], - all_indices[:, 1]] = distances.reshape(-1) + distance_mat[all_indices[:, 0], all_indices[:, 1]] = distances.reshape(-1) - R_mat[all_indices[:, 0], - all_indices[:, 1]] = R.detach() + R_mat[all_indices[:, 0], all_indices[:, 1]] = R.detach() j_start += num_mols_1 @@ -286,10 +271,7 @@ def compute_distances(dataset, """ -def batched_translate(ref_xyz, - query_xyz, - mol_idx, - num_atoms_tensor): +def batched_translate(ref_xyz, query_xyz, mol_idx, num_atoms_tensor): """ Translate a set of batched atomic coordinates concatenated together from different molecules, so they align with the COM of the reference molecule. @@ -307,60 +289,40 @@ def batched_translate(ref_xyz, num_atoms_tensor (torch.LongTensor): tensor of number of atoms in each molecule """ - ref_sum = scatter_add(src=ref_xyz, - index=mol_idx, - dim=0, - dim_size=mol_idx.max() + 1) + ref_sum = scatter_add(src=ref_xyz, index=mol_idx, dim=0, dim_size=mol_idx.max() + 1) ref_com = ref_sum / num_atoms_tensor.reshape(-1, 1) - query_sum = scatter_add(src=query_xyz, - index=mol_idx, - dim=1, - dim_size=mol_idx.max() + 1) + query_sum = scatter_add(src=query_xyz, index=mol_idx, dim=1, dim_size=mol_idx.max() + 1) query_com = query_sum / num_atoms_tensor.reshape(-1, 1) - ref_centered = ref_xyz - torch.repeat_interleave(ref_com, - num_atoms_tensor, - dim=0) + ref_centered = ref_xyz - torch.repeat_interleave(ref_com, num_atoms_tensor, dim=0) # reshape to match query ref_centered = ref_centered.unsqueeze(0) - query_centered = query_xyz - torch.repeat_interleave(query_com, - num_atoms_tensor, - dim=1) + query_centered = query_xyz - torch.repeat_interleave(query_com, num_atoms_tensor, dim=1) return ref_centered, query_centered -def rmat_from_batched_points(ref_centered, - query_centered, - mol_idx, - num_atoms_tensor, - store_grad=False): +def rmat_from_batched_points(ref_centered, query_centered, mol_idx, num_atoms_tensor, store_grad=False): """ Rotation matrix from a set of atomic coordinates concatenated together from different molecules. """ - out_0 = scatter_add(src=(ref_centered * query_centered), - index=mol_idx, - dim=1) + out_0 = scatter_add(src=(ref_centered * query_centered), index=mol_idx, dim=1) r_11 = out_0[:, :, 0] r_22 = out_0[:, :, 1] r_33 = out_0[:, :, 2] - out_1 = scatter_add(src=(ref_centered * torch.roll(query_centered, -1, dims=2)), - index=mol_idx, - dim=1) + out_1 = scatter_add(src=(ref_centered * torch.roll(query_centered, -1, dims=2)), index=mol_idx, dim=1) r_12 = out_1[:, :, 0] r_23 = out_1[:, :, 1] r_31 = out_1[:, :, 2] - out_2 = scatter_add(src=(ref_centered * torch.roll(query_centered, -2, dims=2)), - index=mol_idx, - dim=1) + out_2 = scatter_add(src=(ref_centered * torch.roll(query_centered, -2, dims=2)), index=mol_idx, dim=1) r_13 = out_2[:, :, 0] r_21 = out_2[:, :, 1] @@ -368,15 +330,14 @@ def rmat_from_batched_points(ref_centered, f_0 = [r_11 + r_22 + r_33, r_23 - r_32, r_31 - r_13, r_12 - r_21] f_1 = [r_23 - r_32, r_11 - r_22 - r_33, r_12 + r_21, r_13 + r_31] - f_2 = [r_31 - r_13, r_12 + r_21, - r_11 + r_22 - r_33, r_23 + r_32] + f_2 = [r_31 - r_13, r_12 + r_21, -r_11 + r_22 - r_33, r_23 + r_32] f_3 = [r_12 - r_21, r_13 + r_31, r_23 + r_32, -r_11 - r_22 + r_33] - f = torch.stack( - [torch.stack(f_0), - torch.stack(f_1), - torch.stack(f_2), - torch.stack(f_3)] - ).permute(2, 3, 0, 1).reshape(-1, 4, 4) + f = ( + torch.stack([torch.stack(f_0), torch.stack(f_1), torch.stack(f_2), torch.stack(f_3)]) + .permute(2, 3, 0, 1) + .reshape(-1, 4, 4) + ) if store_grad: w, V = torch.linalg.eigh(f) @@ -398,52 +359,42 @@ def rmat_from_batched_points(ref_centered, raise NotImplementedError("Not yet implemented in numpy") -def batch_minimize_rot_trans(ref_nxyz, - query_nxyz, - mol_idx, - num_atoms_tensor, - store_grad=False): - +def batch_minimize_rot_trans(ref_nxyz, query_nxyz, mol_idx, num_atoms_tensor, store_grad=False): ref_xyz = ref_nxyz[:, 1:] if store_grad: ref_xyz.requires_grad = True query_xyz = query_nxyz[:, :, 1:] - ref_centered, query_centered = batched_translate(ref_xyz=ref_xyz, - query_xyz=query_xyz, - mol_idx=mol_idx, - num_atoms_tensor=num_atoms_tensor) + ref_centered, query_centered = batched_translate( + ref_xyz=ref_xyz, query_xyz=query_xyz, mol_idx=mol_idx, num_atoms_tensor=num_atoms_tensor + ) - r = rmat_from_batched_points(ref_centered=ref_centered, - query_centered=query_centered, - mol_idx=mol_idx, - num_atoms_tensor=num_atoms_tensor, - store_grad=store_grad) + r = rmat_from_batched_points( + ref_centered=ref_centered, + query_centered=query_centered, + mol_idx=mol_idx, + num_atoms_tensor=num_atoms_tensor, + store_grad=store_grad, + ) - query_center_rot = torch.einsum('...kj,...k->...j', r, query_centered) + query_center_rot = torch.einsum("...kj,...k->...j", r, query_centered) return ref_xyz, ref_centered, query_center_rot, r -def batch_compute_distance(ref_nxyz, - query_nxyz, - mol_idx, - num_atoms_tensor, - store_grad=False): - - out = batch_minimize_rot_trans(ref_nxyz=ref_nxyz, - query_nxyz=query_nxyz, - mol_idx=mol_idx, - num_atoms_tensor=num_atoms_tensor, - store_grad=store_grad) +def batch_compute_distance(ref_nxyz, query_nxyz, mol_idx, num_atoms_tensor, store_grad=False): + out = batch_minimize_rot_trans( + ref_nxyz=ref_nxyz, + query_nxyz=query_nxyz, + mol_idx=mol_idx, + num_atoms_tensor=num_atoms_tensor, + store_grad=store_grad, + ) ref_xyz, ref_centered, query_center_rot, r = out delta_sq = (ref_centered - query_center_rot) ** 2 - delta_sq_sum = scatter_add(src=delta_sq, - index=mol_idx, - dim=1, - dim_size=mol_idx.max() + 1).sum(-1) + delta_sq_sum = scatter_add(src=delta_sq, index=mol_idx, dim=1, dim_size=mol_idx.max() + 1).sum(-1) delta_sq_mean = delta_sq_sum / num_atoms_tensor.reshape(1, -1) - rmsd = delta_sq_mean ** 0.5 + rmsd = delta_sq_mean**0.5 return rmsd, ref_xyz diff --git a/nff/utils/misc.py b/nff/utils/misc.py index cfa14fb9..1d2e1b21 100644 --- a/nff/utils/misc.py +++ b/nff/utils/misc.py @@ -327,7 +327,7 @@ def prop_split(max_specs, dataset_type, props, sample_dic, seed): else: random.shuffle(underrep) random.shuffle(overrep) - keep_smiles = underrep[: max_specs // 2] + overrep[max_specs // 2:] + keep_smiles = underrep[: max_specs // 2] + overrep[max_specs // 2 :] else: keep_smiles = list(sample_dic.keys()) diff --git a/nff/utils/scatter.py b/nff/utils/scatter.py index 1ea928c0..3d8206cc 100644 --- a/nff/utils/scatter.py +++ b/nff/utils/scatter.py @@ -2,9 +2,7 @@ from torch.autograd import grad -def compute_grad(inputs, - output, - allow_unused=False): +def compute_grad(inputs, output, allow_unused=False): """Compute gradient of the scalar output with respect to inputs. Args: @@ -17,22 +15,19 @@ def compute_grad(inputs, assert inputs.requires_grad - gradspred, = grad(output, - inputs, - grad_outputs=output.data.new(output.shape).fill_(1), - create_graph=True, - retain_graph=True, - allow_unused=allow_unused) + (gradspred,) = grad( + output, + inputs, + grad_outputs=output.data.new(output.shape).fill_(1), + create_graph=True, + retain_graph=True, + allow_unused=allow_unused, + ) return gradspred -def gen(src, - index, - dim=-1, - out=None, - dim_size=None, - fill_value=0): +def gen(src, index, dim=-1, out=None, dim_size=None, fill_value=0): dim = range(src.dim())[dim] # Get real dim value. # Automatically expand index tensor to the right dimensions. @@ -51,19 +46,8 @@ def gen(src, return src, out, index, dim -def scatter_add(src, - index, - dim=-1, - out=None, - dim_size=None, - fill_value=0): - - src, out, index, dim = gen(src=src, - index=index, - dim=dim, - out=out, - dim_size=dim_size, - fill_value=fill_value) +def scatter_add(src, index, dim=-1, out=None, dim_size=None, fill_value=0): + src, out, index, dim = gen(src=src, index=index, dim=dim, out=out, dim_size=dim_size, fill_value=fill_value) output = out.scatter_add_(dim, index, src) return output diff --git a/nff/utils/script_utils/loaders.py b/nff/utils/script_utils/loaders.py index b1357db1..8e8aff91 100644 --- a/nff/utils/script_utils/loaders.py +++ b/nff/utils/script_utils/loaders.py @@ -7,13 +7,12 @@ def get_loaders(args, logging=None): - if logging is not None: logging.info("loading dataset...") dataset = torch.load(args.data_path) - if args.mode == 'eval': + if args.mode == "eval": test_loader = DataLoader( dataset, batch_size=args.batch_size, @@ -22,15 +21,12 @@ def get_loaders(args, logging=None): return test_loader - elif args.mode == 'train': - + elif args.mode == "train": if logging is not None: logging.info("creating splits...") train, val, test = nff.data.split_train_validation_test( - dataset, - val_size=args.split[0], - test_size=args.split[1] + dataset, val_size=args.split[0], test_size=args.split[1] ) if logging is not None: @@ -41,19 +37,9 @@ def get_loaders(args, logging=None): batch_size=args.batch_size, num_workers=args.workers, collate_fn=collate_dicts, - sampler=RandomSampler(train) - ) - val_loader = DataLoader( - val, - batch_size=args.batch_size, - num_workers=args.workers, - collate_fn=collate_dicts - ) - test_loader = DataLoader( - test, - batch_size=args.batch_size, - num_workers=args.workers, - collate_fn=collate_dicts + sampler=RandomSampler(train), ) + val_loader = DataLoader(val, batch_size=args.batch_size, num_workers=args.workers, collate_fn=collate_dicts) + test_loader = DataLoader(test, batch_size=args.batch_size, num_workers=args.workers, collate_fn=collate_dicts) return train_loader, val_loader, test_loader diff --git a/nff/utils/script_utils/parsers.py b/nff/utils/script_utils/parsers.py index 0679b10f..2c6db5aa 100644 --- a/nff/utils/script_utils/parsers.py +++ b/nff/utils/script_utils/parsers.py @@ -6,18 +6,17 @@ def get_main_parser(): - """ Setup parser for command line arguments """ + """Setup parser for command line arguments""" # command-specific cmd_parser = argparse.ArgumentParser(add_help=False) cmd_parser.add_argument( "--device", - default='cuda', + default="cuda", help="Device to use", ) cmd_parser.add_argument( "--parallel", - help="Run data-parallel on all available GPUs (specify with environment" - " variable CUDA_VISIBLE_DEVICES)", + help="Run data-parallel on all available GPUs (specify with environment" " variable CUDA_VISIBLE_DEVICES)", action="store_true", ) cmd_parser.add_argument( @@ -34,12 +33,8 @@ def add_subparsers(cmd_parser, defaults={}): train_parser = argparse.ArgumentParser(add_help=False, parents=[cmd_parser]) train_parser.add_argument("data_path", help="Dataset to use") train_parser.add_argument("model_path", help="Destination for models and logs") - train_parser.add_argument( - "--seed", type=int, default=None, help="Set random seed for torch and numpy." - ) - train_parser.add_argument( - "--overwrite", help="Remove previous model directory.", action="store_true" - ) + train_parser.add_argument("--seed", type=int, default=None, help="Set random seed for torch and numpy.") + train_parser.add_argument("--overwrite", help="Remove previous model directory.", action="store_true") train_parser.add_argument( "--split", @@ -57,8 +52,7 @@ def add_subparsers(cmd_parser, defaults={}): train_parser.add_argument( "--lr_patience", type=int, - help="Epochs without improvement before reducing the learning rate " - "(default: %(default)s)", + help="Epochs without improvement before reducing the learning rate " "(default: %(default)s)", default=25 if "lr_patience" not in defaults.keys() else defaults["lr_patience"], ) train_parser.add_argument( @@ -115,13 +109,13 @@ def add_subparsers(cmd_parser, defaults={}): eval_parser = argparse.ArgumentParser(add_help=False, parents=[cmd_parser]) eval_parser.add_argument("data_path", help="Dataset to use") eval_parser.add_argument("model_path", help="Path of stored model") -# eval_parser.add_argument( -# "--split", -# help="Evaluate trained model on given split", -# choices=["train", "validation", "test"], -# default=["test"], -# nargs="+", -# ) + # eval_parser.add_argument( + # "--split", + # help="Evaluate trained model on given split", + # choices=["train", "validation", "test"], + # default=["test"], + # nargs="+", + # ) # model-specific parsers model_parser = argparse.ArgumentParser(add_help=False) @@ -134,18 +128,14 @@ def add_subparsers(cmd_parser, defaults={}): help="Size of atom-wise representation", default=256, ) - schnet_parser.add_argument( - "--n_filters", type=int, help="Size of atom-wise representation", default=25 - ) + schnet_parser.add_argument("--n_filters", type=int, help="Size of atom-wise representation", default=25) schnet_parser.add_argument( "--n_gaussians", type=int, default=25, help="Number of Gaussians to expand distances (default: %(default)s)", ) - schnet_parser.add_argument( - "--n_convolutions", type=int, help="Number of interaction blocks", default=6 - ) + schnet_parser.add_argument("--n_convolutions", type=int, help="Number of interaction blocks", default=6) schnet_parser.add_argument( "--cutoff", type=float, @@ -154,7 +144,7 @@ def add_subparsers(cmd_parser, defaults={}): ) schnet_parser.add_argument( "--trainable_gauss", - action='store_true', + action="store_true", help="If set, sets gaussians as learnable parameters (default: False)", ) schnet_parser.add_argument( @@ -165,9 +155,7 @@ def add_subparsers(cmd_parser, defaults={}): ) # setup subparser structure - cmd_subparsers = cmd_parser.add_subparsers( - dest="mode", help="Command-specific arguments" - ) + cmd_subparsers = cmd_parser.add_subparsers(dest="mode", help="Command-specific arguments") cmd_subparsers.required = True subparser_train = cmd_subparsers.add_parser("train", help="Training help") subparser_eval = cmd_subparsers.add_parser("eval", help="Eval help") @@ -175,22 +163,12 @@ def add_subparsers(cmd_parser, defaults={}): subparser_export = cmd_subparsers.add_parser("export", help="Export help") subparser_export.add_argument("data_path", help="Dataset to use") subparser_export.add_argument("model_path", help="Path of stored model") - subparser_export.add_argument( - "dest_path", help="Destination path for exported model" - ) + subparser_export.add_argument("dest_path", help="Destination path for exported model") - train_subparsers = subparser_train.add_subparsers( - dest="model", help="Model-specific arguments" - ) + train_subparsers = subparser_train.add_subparsers(dest="model", help="Model-specific arguments") train_subparsers.required = True - train_subparsers.add_parser( - "schnet", help="SchNet help", parents=[train_parser, schnet_parser] - ) + train_subparsers.add_parser("schnet", help="SchNet help", parents=[train_parser, schnet_parser]) - eval_subparsers = subparser_eval.add_subparsers( - dest="model", help="Model-specific arguments" - ) + eval_subparsers = subparser_eval.add_subparsers(dest="model", help="Model-specific arguments") eval_subparsers.required = True - eval_subparsers.add_parser( - "schnet", help="SchNet help", parents=[eval_parser, schnet_parser] - ) + eval_subparsers.add_parser("schnet", help="SchNet help", parents=[eval_parser, schnet_parser]) diff --git a/nff/utils/script_utils/setup.py b/nff/utils/script_utils/setup.py index 89a8d8e4..85db850b 100644 --- a/nff/utils/script_utils/setup.py +++ b/nff/utils/script_utils/setup.py @@ -2,6 +2,7 @@ Adapted from https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/setup.py """ + import os import logging from shutil import rmtree @@ -16,8 +17,8 @@ def setup_run(args): jsonpath = os.path.join(args.model_path, "args.json") # absolute paths - argparse_dict['data_path'] = os.path.abspath(argparse_dict['data_path']) - argparse_dict['model_path'] = os.path.abspath(argparse_dict['model_path']) + argparse_dict["data_path"] = os.path.abspath(argparse_dict["data_path"]) + argparse_dict["model_path"] = os.path.abspath(argparse_dict["model_path"]) if args.mode == "train": if args.overwrite and os.path.exists(args.model_path): diff --git a/nff/utils/tools.py b/nff/utils/tools.py index 4baed084..e17e59cd 100644 --- a/nff/utils/tools.py +++ b/nff/utils/tools.py @@ -1,6 +1,7 @@ """Assorted tools in the package. Adapted from https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/spk_utils.py """ + import json import logging import collections @@ -10,8 +11,7 @@ import torch from torch.nn import ModuleDict, Sequential -from nff.nn.activations import (shifted_softplus, Swish, - LearnableSwish) +from nff.nn.activations import shifted_softplus, Swish, LearnableSwish from nff.nn.layers import Dense @@ -34,7 +34,7 @@ "ELU": torch.nn.ELU, "swish": Swish, "learnable_swish": LearnableSwish, - "softplus": torch.nn.Softplus + "softplus": torch.nn.Softplus, } @@ -52,10 +52,11 @@ def construct_Sequential(layers): Sequential: Stacked Sequential Model """ - return Sequential(collections.OrderedDict([layer['name'] + str(i), - layer_types[layer['name']]( - **layer['param']) - ] for i, layer in enumerate(layers))) + return Sequential( + collections.OrderedDict( + [layer["name"] + str(i), layer_types[layer["name"]](**layer["param"])] for i, layer in enumerate(layers) + ) + ) def construct_ModuleDict(moduledict): @@ -146,7 +147,6 @@ def read_from_json(jsonpath): def make_directed(nbr_list): - gtr_ij = (nbr_list[:, 0] > nbr_list[:, 1]).any().item() gtr_ji = (nbr_list[:, 1] > nbr_list[:, 0]).any().item() directed = gtr_ij and gtr_ji diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index b1d3f1dc..971001cb 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -21,6 +21,7 @@ from rdkit.Chem import rdmolops + try: from rdkit.Chem import rdEHTTools # requires RDKit 2019.9.1 or later except ImportError: @@ -37,18 +38,102 @@ global __ATOM_LIST__ -__ATOM_LIST__ = \ - ['h', 'he', - 'li', 'be', 'b', 'c', 'n', 'o', 'f', 'ne', - 'na', 'mg', 'al', 'si', 'p', 's', 'cl', 'ar', - 'k', 'ca', 'sc', 'ti', 'v ', 'cr', 'mn', 'fe', 'co', 'ni', 'cu', - 'zn', 'ga', 'ge', 'as', 'se', 'br', 'kr', - 'rb', 'sr', 'y', 'zr', 'nb', 'mo', 'tc', 'ru', 'rh', 'pd', 'ag', - 'cd', 'in', 'sn', 'sb', 'te', 'i', 'xe', - 'cs', 'ba', 'la', 'ce', 'pr', 'nd', 'pm', 'sm', 'eu', 'gd', 'tb', 'dy', - 'ho', 'er', 'tm', 'yb', 'lu', 'hf', 'ta', 'w', 're', 'os', 'ir', 'pt', - 'au', 'hg', 'tl', 'pb', 'bi', 'po', 'at', 'rn', - 'fr', 'ra', 'ac', 'th', 'pa', 'u', 'np', 'pu'] +__ATOM_LIST__ = [ + "h", + "he", + "li", + "be", + "b", + "c", + "n", + "o", + "f", + "ne", + "na", + "mg", + "al", + "si", + "p", + "s", + "cl", + "ar", + "k", + "ca", + "sc", + "ti", + "v ", + "cr", + "mn", + "fe", + "co", + "ni", + "cu", + "zn", + "ga", + "ge", + "as", + "se", + "br", + "kr", + "rb", + "sr", + "y", + "zr", + "nb", + "mo", + "tc", + "ru", + "rh", + "pd", + "ag", + "cd", + "in", + "sn", + "sb", + "te", + "i", + "xe", + "cs", + "ba", + "la", + "ce", + "pr", + "nd", + "pm", + "sm", + "eu", + "gd", + "tb", + "dy", + "ho", + "er", + "tm", + "yb", + "lu", + "hf", + "ta", + "w", + "re", + "os", + "ir", + "pt", + "au", + "hg", + "tl", + "pb", + "bi", + "po", + "at", + "rn", + "fr", + "ra", + "ac", + "th", + "pa", + "u", + "np", + "pu", +] global atomic_valence @@ -121,8 +206,7 @@ def int_atom(atom): def get_UA(maxValence_list, valence_list): - """ - """ + """ """ UA = [] DU = [] for i, (maxValence, valence) in enumerate(zip(maxValence_list, valence_list)): @@ -134,8 +218,7 @@ def get_UA(maxValence_list, valence_list): def get_BO(AC, UA, DU, valences, UA_pairs, use_graph=True): - """ - """ + """ """ BO = AC.copy() DU_save = [] @@ -153,8 +236,7 @@ def get_BO(AC, UA, DU, valences, UA_pairs, use_graph=True): def valences_not_too_large(BO, valences): - """ - """ + """ """ number_of_bonds_list = BO.sum(axis=1) for valence, number_of_bonds in zip(valences, number_of_bonds_list): if number_of_bonds > valence: @@ -163,8 +245,7 @@ def valences_not_too_large(BO, valences): return True -def BO_is_OK(BO, AC, charge, DU, atomic_valence_electrons, atoms, valances, - allow_charged_fragments=True): +def BO_is_OK(BO, AC, charge, DU, atomic_valence_electrons, atoms, valances, allow_charged_fragments=True): """ Sanity of bond-orders @@ -193,11 +274,9 @@ def BO_is_OK(BO, AC, charge, DU, atomic_valence_electrons, atoms, valances, q_list = [] if allow_charged_fragments: - BO_valences = list(BO.sum(axis=1)) for i, atom in enumerate(atoms): - q = get_atomic_charge( - atom, atomic_valence_electrons[atom], BO_valences[i]) + q = get_atomic_charge(atom, atomic_valence_electrons[atom], BO_valences[i]) Q += q if atom == 6: number_of_single_bonds_to_C = list(BO[i, :]).count(1) @@ -222,8 +301,7 @@ def BO_is_OK(BO, AC, charge, DU, atomic_valence_electrons, atoms, valances, def get_atomic_charge(atom, atomic_valence_electrons, BO_valence): - """ - """ + """ """ if atom == 1: charge = 1 - BO_valence @@ -254,10 +332,12 @@ def clean_charges(mol): # '[O:1]=[c:2][c-:3]>>[*-:1][*:2][*+0:3]', # '[O:1]=[C:2][C-:3]>>[*-:1][*:2]=[*+0:3]'] - rxn_smarts = ['[#6,#7:1]1=[#6,#7:2][#6,#7:3]=[#6,#7:4][CX3-,NX3-:5][#6,#7:6]1=[#6,#7:7]>>' - '[#6,#7:1]1=[#6,#7:2][#6,#7:3]=[#6,#7:4][-0,-0:5]=[#6,#7:6]1[#6-,#7-:7]', - '[#6,#7:1]1=[#6,#7:2][#6,#7:3](=[#6,#7:4])[#6,#7:5]=[#6,#7:6][CX3-,NX3-:7]1>>' - '[#6,#7:1]1=[#6,#7:2][#6,#7:3]([#6-,#7-:4])=[#6,#7:5][#6,#7:6]=[-0,-0:7]1'] + rxn_smarts = [ + "[#6,#7:1]1=[#6,#7:2][#6,#7:3]=[#6,#7:4][CX3-,NX3-:5][#6,#7:6]1=[#6,#7:7]>>" + "[#6,#7:1]1=[#6,#7:2][#6,#7:3]=[#6,#7:4][-0,-0:5]=[#6,#7:6]1[#6-,#7-:7]", + "[#6,#7:1]1=[#6,#7:2][#6,#7:3](=[#6,#7:4])[#6,#7:5]=[#6,#7:6][CX3-,NX3-:7]1>>" + "[#6,#7:1]1=[#6,#7:2][#6,#7:3]([#6-,#7-:4])=[#6,#7:5][#6,#7:6]=[-0,-0:7]1", + ] fragments = Chem.GetMolFrags(mol, asMols=True, sanitizeFrags=False) @@ -277,8 +357,7 @@ def clean_charges(mol): return mol -def BO2mol(mol, BO_matrix, atoms, atomic_valence_electrons, - mol_charge, allow_charged_fragments=True): +def BO2mol(mol, BO_matrix, atoms, atomic_valence_electrons, mol_charge, allow_charged_fragments=True): """ based on code written by Paolo Toscani @@ -304,22 +383,17 @@ def BO2mol(mol, BO_matrix, atoms, atomic_valence_electrons, l2 = len(atoms) BO_valences = list(BO_matrix.sum(axis=1)) - if (l != l2): - raise RuntimeError( - 'sizes of adjMat ({0:d}) and Atoms {1:d} differ'.format(l, l2)) + if l != l2: + raise RuntimeError("sizes of adjMat ({0:d}) and Atoms {1:d} differ".format(l, l2)) rwMol = Chem.RWMol(mol) - bondTypeDict = { - 1: Chem.BondType.SINGLE, - 2: Chem.BondType.DOUBLE, - 3: Chem.BondType.TRIPLE - } + bondTypeDict = {1: Chem.BondType.SINGLE, 2: Chem.BondType.DOUBLE, 3: Chem.BondType.TRIPLE} for i in range(l): for j in range(i + 1, l): bo = int(round(BO_matrix[i, j])) - if (bo == 0): + if bo == 0: continue bt = bondTypeDict.get(bo, Chem.BondType.SINGLE) rwMol.AddBond(i, j, bt) @@ -327,29 +401,19 @@ def BO2mol(mol, BO_matrix, atoms, atomic_valence_electrons, mol = rwMol.GetMol() if allow_charged_fragments: - mol = set_atomic_charges( - mol, - atoms, - atomic_valence_electrons, - BO_valences, - BO_matrix, - mol_charge) + mol = set_atomic_charges(mol, atoms, atomic_valence_electrons, BO_valences, BO_matrix, mol_charge) else: - mol = set_atomic_radicals( - mol, atoms, atomic_valence_electrons, BO_valences) + mol = set_atomic_radicals(mol, atoms, atomic_valence_electrons, BO_valences) return mol -def set_atomic_charges(mol, atoms, atomic_valence_electrons, - BO_valences, BO_matrix, mol_charge): - """ - """ +def set_atomic_charges(mol, atoms, atomic_valence_electrons, BO_valences, BO_matrix, mol_charge): + """ """ q = 0 for i, atom in enumerate(atoms): a = mol.GetAtomWithIdx(i) - charge = get_atomic_charge( - atom, atomic_valence_electrons[atom], BO_valences[i]) + charge = get_atomic_charge(atom, atomic_valence_electrons[atom], BO_valences[i]) q += charge if atom == 6: number_of_single_bonds_to_C = list(BO_matrix[i, :]).count(1) @@ -360,7 +424,7 @@ def set_atomic_charges(mol, atoms, atomic_valence_electrons, q += 2 charge = 1 - if (abs(charge) > 0): + if abs(charge) > 0: a.SetFormalCharge(int(charge)) mol = clean_charges(mol) @@ -376,25 +440,20 @@ def set_atomic_radicals(mol, atoms, atomic_valence_electrons, BO_valences): """ for i, atom in enumerate(atoms): a = mol.GetAtomWithIdx(i) - charge = get_atomic_charge( - atom, - atomic_valence_electrons[atom], - BO_valences[i]) + charge = get_atomic_charge(atom, atomic_valence_electrons[atom], BO_valences[i]) - if (abs(charge) > 0): + if abs(charge) > 0: a.SetNumRadicalElectrons(abs(int(charge))) return mol def get_bonds(UA, AC): - """ - - """ + """ """ bonds = [] for k, i in enumerate(UA): - for j in UA[k + 1:]: + for j in UA[k + 1 :]: if AC[i, j] == 1: bonds.append(tuple(sorted([i, j]))) @@ -402,9 +461,7 @@ def get_bonds(UA, AC): def get_UA_pairs(UA, AC, use_graph=True): - """ - - """ + """ """ bonds = get_bonds(UA, AC) @@ -460,14 +517,20 @@ def AC2BO(AC, atoms, charge, allow_charged_fragments=True, use_graph=True): best_BO = AC.copy() for valences in valences_list: - UA, DU_from_AC = get_UA(valences, AC_valence) - check_len = (len(UA) == 0) + check_len = len(UA) == 0 if check_len: - check_bo = BO_is_OK(AC, AC, charge, DU_from_AC, - atomic_valence_electrons, atoms, valences, - allow_charged_fragments=allow_charged_fragments) + check_bo = BO_is_OK( + AC, + AC, + charge, + DU_from_AC, + atomic_valence_electrons, + atoms, + valences, + allow_charged_fragments=allow_charged_fragments, + ) else: check_bo = None @@ -476,11 +539,17 @@ def AC2BO(AC, atoms, charge, allow_charged_fragments=True, use_graph=True): UA_pairs_list = get_UA_pairs(UA, AC, use_graph=use_graph) for UA_pairs in UA_pairs_list: - BO = get_BO(AC, UA, DU_from_AC, valences, - UA_pairs, use_graph=use_graph) - status = BO_is_OK(BO, AC, charge, DU_from_AC, - atomic_valence_electrons, atoms, valences, - allow_charged_fragments=allow_charged_fragments) + BO = get_BO(AC, UA, DU_from_AC, valences, UA_pairs, use_graph=use_graph) + status = BO_is_OK( + BO, + AC, + charge, + DU_from_AC, + atomic_valence_electrons, + atoms, + valences, + allow_charged_fragments=allow_charged_fragments, + ) if status: return BO, atomic_valence_electrons @@ -492,32 +561,21 @@ def AC2BO(AC, atoms, charge, allow_charged_fragments=True, use_graph=True): def AC2mol(mol, AC, atoms, charge, allow_charged_fragments=True, use_graph=True): - """ - """ + """ """ # convert AC matrix to bond order (BO) matrix BO, atomic_valence_electrons = AC2BO( - AC, - atoms, - charge, - allow_charged_fragments=allow_charged_fragments, - use_graph=use_graph) + AC, atoms, charge, allow_charged_fragments=allow_charged_fragments, use_graph=use_graph + ) # add BO connectivity and charge info to mol object - mol = BO2mol( - mol, - BO, - atoms, - atomic_valence_electrons, - charge, - allow_charged_fragments=allow_charged_fragments) + mol = BO2mol(mol, BO, atoms, atomic_valence_electrons, charge, allow_charged_fragments=allow_charged_fragments) return mol def get_proto_mol(atoms): - """ - """ + """ """ mol = Chem.MolFromSmarts("[#" + str(atoms[0]) + "]") rwMol = Chem.RWMol(mol) for i in range(1, len(atoms)): @@ -530,20 +588,17 @@ def get_proto_mol(atoms): def read_xyz_file(filename, look_for_charge=True): - """ - """ + """ """ atomic_symbols = [] xyz_coordinates = [] charge = 0 - title = "" with open(filename, "r") as file: for line_number, line in enumerate(file): if line_number == 0: - num_atoms = int(line) + int(line) elif line_number == 1: - title = line if "charge=" in line: charge = int(line.split("=")[1]) else: @@ -582,7 +637,6 @@ def xyz2AC(atoms, xyz, charge, use_huckel=False): def xyz2AC_vdW(atoms, xyz): - # Get mol template mol = get_proto_mol(atoms) @@ -668,8 +722,7 @@ def xyz2AC_huckel(atomicNumList, xyz, charge): passed, result = rdEHTTools.RunMol(mol_huckel) opop = result.GetReducedOverlapPopulationMatrix() tri = np.zeros((num_atoms, num_atoms)) - tri[np.tril(np.ones((num_atoms, num_atoms), dtype=bool)) - ] = opop # lower triangular to square matrix + tri[np.tril(np.ones((num_atoms, num_atoms), dtype=bool))] = opop # lower triangular to square matrix for i in range(num_atoms): for j in range(i + 1, num_atoms): pair_pop = abs(tri[j, i]) @@ -696,9 +749,7 @@ def chiral_stereo_check(mol): return -def check_mol(mol, - coordinates): - +def check_mol(mol, coordinates): conf = mol.GetConformers()[0] new_coords = conf.GetPositions() old_coords = np.array(coordinates) @@ -711,16 +762,14 @@ def check_mol(mol, new_pos = mol.GetConformers()[0].GetPositions() - dist = np.linalg.norm(new_pos.reshape(1, *new_pos.shape) - - old_coords.reshape(old_coords.shape[0], - 1, - old_coords.shape[1]), - axis=-1) + dist = np.linalg.norm( + new_pos.reshape(1, *new_pos.shape) - old_coords.reshape(old_coords.shape[0], 1, old_coords.shape[1]), axis=-1 + ) new_idx = dist.argmin(-1).tolist() rev_idx = dist.argmin(0).tolist() - ed_mol = EditableMol(Chem.MolFromSmiles('')) + ed_mol = EditableMol(Chem.MolFromSmiles("")) for i, idx in enumerate(new_idx): atom = mol.GetAtoms()[idx] @@ -730,21 +779,17 @@ def check_mol(mol, all_old_bond_types = [] for i, atom in enumerate(mol.GetAtoms()): - bonds = atom.GetBonds() - old_bond_idx = [[i.GetBeginAtomIdx(), i.GetEndAtomIdx()] - for i in bonds] + old_bond_idx = [[i.GetBeginAtomIdx(), i.GetEndAtomIdx()] for i in bonds] bond_types = [i.GetBondType() for i in bonds] - use_idx = [j for j, idx in enumerate(old_bond_idx) - if idx not in all_old_bond_idx] + use_idx = [j for j, idx in enumerate(old_bond_idx) if idx not in all_old_bond_idx] all_old_bond_idx += [old_bond_idx[j] for j in use_idx] all_old_bond_types += [bond_types[j] for j in use_idx] for bond_idx, bond_type in zip(all_old_bond_idx, all_old_bond_types): - new_bond_idx = [rev_idx[bond_idx[0]], - rev_idx[bond_idx[1]]] + new_bond_idx = [rev_idx[bond_idx[0]], rev_idx[bond_idx[1]]] ed_mol.AddBond(new_bond_idx[0], new_bond_idx[1], bond_type) @@ -761,13 +806,9 @@ def check_mol(mol, @timeout(seconds=MAX_TIME) -def xyz2mol(atoms, - coordinates, - charge=0, - allow_charged_fragments=True, - use_graph=True, - use_huckel=False, - embed_chiral=True): +def xyz2mol( + atoms, coordinates, charge=0, allow_charged_fragments=True, use_graph=True, use_huckel=False, embed_chiral=True +): """ Generate a rdkit molobj from atoms, coordinates and a total_charge. @@ -793,62 +834,39 @@ def xyz2mol(atoms, # Convert AC to bond order matrix and add connectivity and charge info to # mol object - new_mol = AC2mol(mol, AC, atoms, charge, - allow_charged_fragments=allow_charged_fragments, - use_graph=use_graph) + new_mol = AC2mol(mol, AC, atoms, charge, allow_charged_fragments=allow_charged_fragments, use_graph=use_graph) # Check for stereocenters and chiral centers if embed_chiral: chiral_stereo_check(new_mol) - new_mol = check_mol(mol=new_mol, - coordinates=coordinates) + new_mol = check_mol(mol=new_mol, coordinates=coordinates) return new_mol def main(): - return if __name__ == "__main__": - import argparse - parser = argparse.ArgumentParser(usage='%(prog)s [options] molecule.xyz') - parser.add_argument('structure', metavar='structure', type=str) - parser.add_argument('-s', '--sdf', - action="store_true", - help="Dump sdf file") - parser.add_argument('--ignore-chiral', - action="store_true", - help="Ignore chiral centers") - parser.add_argument('--no-charged-fragments', - action="store_true", - help="Allow radicals to be made") - parser.add_argument('--no-graph', - action="store_true", - help="Run xyz2mol without networkx dependencies") + parser = argparse.ArgumentParser(usage="%(prog)s [options] molecule.xyz") + parser.add_argument("structure", metavar="structure", type=str) + parser.add_argument("-s", "--sdf", action="store_true", help="Dump sdf file") + parser.add_argument("--ignore-chiral", action="store_true", help="Ignore chiral centers") + parser.add_argument("--no-charged-fragments", action="store_true", help="Allow radicals to be made") + parser.add_argument("--no-graph", action="store_true", help="Run xyz2mol without networkx dependencies") # huckel uses extended Huckel bond orders to locate bonds (requires RDKit 2019.9.1 or later) # otherwise van der Waals radii are used - parser.add_argument('--use-huckel', - action="store_true", - help="Use Huckel method for atom connectivity") - parser.add_argument('-o', '--output-format', - action="store", - type=str, - help="Output format [smiles,sdf] (default=sdf)") - parser.add_argument('-c', '--charge', - action="store", - metavar="int", - type=int, - help="Total charge of the system") - parser.add_argument('--save_name', - type=str, - default=DEFAULT_SAVE, - help='Save name for RDKit mol') + parser.add_argument("--use-huckel", action="store_true", help="Use Huckel method for atom connectivity") + parser.add_argument( + "-o", "--output-format", action="store", type=str, help="Output format [smiles,sdf] (default=sdf)" + ) + parser.add_argument("-c", "--charge", action="store", metavar="int", type=int, help="Total charge of the system") + parser.add_argument("--save_name", type=str, default=DEFAULT_SAVE, help="Save name for RDKit mol") args = parser.parse_args() @@ -878,12 +896,15 @@ def main(): charge = int(args.charge) # Get the molobj - mol = xyz2mol(atoms, xyz_coordinates, - charge=charge, - use_graph=quick, - allow_charged_fragments=charged_fragments, - embed_chiral=embed_chiral, - use_huckel=use_huckel) + mol = xyz2mol( + atoms, + xyz_coordinates, + charge=charge, + use_graph=quick, + allow_charged_fragments=charged_fragments, + embed_chiral=embed_chiral, + use_huckel=use_huckel, + ) # Print output if args.output_format == "sdf": @@ -899,5 +920,5 @@ def main(): print(smiles) save_name = args.save_name - with open(save_name, 'wb') as f: + with open(save_name, "wb") as f: pickle.dump(mol, f) From e3fc9df5d71c3a3a4f678e62a3f96460eb38bd80 Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 10:28:38 -0500 Subject: [PATCH 19/66] autopep --- nff/analysis/mpl_settings.py | 2 +- nff/io/mace.py | 2 +- nff/md/colvars.py | 4 ++-- nff/md/zhu_nakamura/dynamics.py | 2 +- nff/nn/models/mace.py | 4 ++-- nff/nn/modules/diabat.py | 2 +- nff/nn/modules/spooky.py | 4 ++-- nff/nn/modules/spooky_fast.py | 6 +++--- nff/nn/modules/spooky_painn.py | 4 ++-- nff/tests/dynamics_test.py | 2 +- nff/utils/confgen.py | 2 +- nff/utils/misc.py | 2 +- nff/utils/xyz2mol.py | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/nff/analysis/mpl_settings.py b/nff/analysis/mpl_settings.py index cd21fbdc..4c3255f6 100644 --- a/nff/analysis/mpl_settings.py +++ b/nff/analysis/mpl_settings.py @@ -65,7 +65,7 @@ def hex_to_rgb(value: str) -> tuple: value = value.strip("#") # removes hash symbol if present lv = len(value) - return tuple(int(value[i : i + lv // 3], 16) for i in range(0, lv, lv // 3)) + return tuple(int(value[i: i + lv // 3], 16) for i in range(0, lv, lv // 3)) def rgb_to_dec(value: list): diff --git a/nff/io/mace.py b/nff/io/mace.py index 56746cc9..de0d8c19 100644 --- a/nff/io/mace.py +++ b/nff/io/mace.py @@ -200,7 +200,7 @@ def compute_mean_rms_energy_forces( counter = 0 batch_indices = torch.zeros(sum(graph_sizes), dtype=torch.long) for i, size in enumerate(graph_sizes): - batch_indices[counter : counter + size] = i + batch_indices[counter: counter + size] = i counter += size # get the graph energy diff --git a/nff/md/colvars.py b/nff/md/colvars.py index 02291136..e34b83e8 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -442,7 +442,7 @@ def deproton1(self): dis1 = dis_sq[self.Oacid, :][:, self.Owater] cvmatrix = torch.exp(-self.do * dis) cvmatrix = cvmatrix / cvmatrix.sum(0) - cvmatrixw = cvmatrix[self.Oacid.shape[0] :].sum(-1) - self.r1 + cvmatrixw = cvmatrix[self.Oacid.shape[0]:].sum(-1) - self.r1 cvmatrix = cvmatrix[: self.Oacid.shape[0]].sum(-1) - self.ro cv1 = 2 * cvmatrix.sum() + cvmatrixw.sum() @@ -470,7 +470,7 @@ def deproton2(self): cvmatrix = cvmatrix / cvmatrix.sum(0) cvmatrixx = torch.exp(-self.d * dis) cvmatrixx = cvmatrixx / cvmatrixx.sum(0) - cvmatrixw = cvmatrixx[self.Oacid.shape[0] :].sum(-1) - self.r1 + cvmatrixw = cvmatrixx[self.Oacid.shape[0]:].sum(-1) - self.r1 cvmatrix = cvmatrixx[: self.Oacid.shape[0]].sum(-1) - self.ro torch.cat((cvmatrix, cvmatrixw)) cvmatrix2 = torch.matmul(cvmatrix.view(1, -1).t(), cvmatrixw.view(1, -1)) diff --git a/nff/md/zhu_nakamura/dynamics.py b/nff/md/zhu_nakamura/dynamics.py index 8ffef808..4029d68c 100644 --- a/nff/md/zhu_nakamura/dynamics.py +++ b/nff/md/zhu_nakamura/dynamics.py @@ -977,7 +977,7 @@ def update_energies_forces(self, trjs, get_new_neighbors): current_trj = i * self.batch_size - for j, trj in enumerate(trjs[current_trj : current_trj + self.batch_size]): + for j, trj in enumerate(trjs[current_trj: current_trj + self.batch_size]): energies = [] forces = [] for key in self.energy_keys: diff --git a/nff/nn/models/mace.py b/nff/nn/models/mace.py index 1b0966fe..319d4ad1 100644 --- a/nff/nn/models/mace.py +++ b/nff/nn/models/mace.py @@ -138,9 +138,9 @@ def convert_batch_to_data(self, batch: dict) -> torch_geometric.data.Data: numbers = props.get("nxyz")[node_idx, 0].long().detach().cpu().numpy() if "cell" in props.keys(): - cell = props["cell"][3 * i : 3 * i + 3].detach().cpu().numpy() + cell = props["cell"][3 * i: 3 * i + 3].detach().cpu().numpy() elif "lattice" in props.keys(): - cell = props["lattice"][3 * i : 3 * i + 3].detach().cpu().numpy() + cell = props["lattice"][3 * i: 3 * i + 3].detach().cpu().numpy() else: raise ValueError("No cell or lattice found in batch") config = Configuration( diff --git a/nff/nn/modules/diabat.py b/nff/nn/modules/diabat.py index a59f1fdc..5e2a20f9 100644 --- a/nff/nn/modules/diabat.py +++ b/nff/nn/modules/diabat.py @@ -391,7 +391,7 @@ def add_nans(self, batch, results, nan_idx, train): for idx in nan_grad_idx: if train: continue - results[key][idx[0] : idx[1]] = results[key][idx[0] : idx[1]] * float("nan") + results[key][idx[0]: idx[1]] = results[key][idx[0]: idx[1]] * float("nan") def forward( self, diff --git a/nff/nn/modules/spooky.py b/nff/nn/modules/spooky.py index 5889ed04..2baf8572 100644 --- a/nff/nn/modules/spooky.py +++ b/nff/nn/modules/spooky.py @@ -254,7 +254,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.resmlp(av) - e_psi[counter : counter + num_atoms[j]] = this_e_psi + e_psi[counter: counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi @@ -636,7 +636,7 @@ def get_charge(self, f, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = charge[counter : counter + n] + old_val = charge[counter: counter + n] new_val = old_val + correction[i] new_charges.append(new_val) diff --git a/nff/nn/modules/spooky_fast.py b/nff/nn/modules/spooky_fast.py index 249aa641..41dc242e 100644 --- a/nff/nn/modules/spooky_fast.py +++ b/nff/nn/modules/spooky_fast.py @@ -325,7 +325,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.resmlp(av) - e_psi[counter : counter + num_atoms[j]] = this_e_psi + e_psi[counter: counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi @@ -615,7 +615,7 @@ def forward(self, x_tilde, num_atoms): ### counter = sum(num_atoms[:i]) - out[counter : counter + num] = att + out[counter: counter + num] = att # pdb.set_trace() @@ -717,7 +717,7 @@ def get_charge(self, f, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = charge[counter : counter + n] + old_val = charge[counter: counter + n] new_val = old_val + correction[i] new_charges.append(new_val) diff --git a/nff/nn/modules/spooky_painn.py b/nff/nn/modules/spooky_painn.py index ac32b183..1630c39b 100644 --- a/nff/nn/modules/spooky_painn.py +++ b/nff/nn/modules/spooky_painn.py @@ -212,7 +212,7 @@ def charge_and_dip(self, xyz, s_i, v_i, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = atom_charges[counter : counter + n] + old_val = atom_charges[counter: counter + n] new_val = old_val + correction[i] new_charges.append(new_val) @@ -358,7 +358,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.dense(av) - e_psi[counter : counter + num_atoms[j]] = this_e_psi + e_psi[counter: counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index eead469c..ee99556f 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -827,7 +827,7 @@ def update_energies_forces(self, trjs, get_new_neighbors): current_trj = i * self.batch_size - for j, trj in enumerate(trjs[current_trj : current_trj + self.batch_size]): + for j, trj in enumerate(trjs[current_trj: current_trj + self.batch_size]): energies = [] forces = [] for key in self.energy_keys: diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index d25762b2..0732296b 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -270,7 +270,7 @@ def recluster( if i in self.removed: continue self.counter += 1 - for conf_b in clustered_confs[i + 1 :]: + for conf_b in clustered_confs[i + 1:]: j += 1 if conf_b[1] - conf_a[1] > energy_window: break diff --git a/nff/utils/misc.py b/nff/utils/misc.py index 1d2e1b21..cfa14fb9 100644 --- a/nff/utils/misc.py +++ b/nff/utils/misc.py @@ -327,7 +327,7 @@ def prop_split(max_specs, dataset_type, props, sample_dic, seed): else: random.shuffle(underrep) random.shuffle(overrep) - keep_smiles = underrep[: max_specs // 2] + overrep[max_specs // 2 :] + keep_smiles = underrep[: max_specs // 2] + overrep[max_specs // 2:] else: keep_smiles = list(sample_dic.keys()) diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 971001cb..47f118f6 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -453,7 +453,7 @@ def get_bonds(UA, AC): bonds = [] for k, i in enumerate(UA): - for j in UA[k + 1 :]: + for j in UA[k + 1:]: if AC[i, j] == 1: bonds.append(tuple(sorted([i, j]))) From 88e045092da79b385d2b2e60ef4d3433fb92e3b6 Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 10:29:45 -0500 Subject: [PATCH 20/66] ruff format --- nff/analysis/mpl_settings.py | 2 +- nff/io/mace.py | 2 +- nff/md/colvars.py | 4 ++-- nff/md/zhu_nakamura/dynamics.py | 2 +- nff/nn/models/mace.py | 4 ++-- nff/nn/modules/diabat.py | 2 +- nff/nn/modules/spooky.py | 4 ++-- nff/nn/modules/spooky_fast.py | 6 +++--- nff/nn/modules/spooky_painn.py | 4 ++-- nff/tests/dynamics_test.py | 2 +- nff/utils/confgen.py | 2 +- nff/utils/misc.py | 2 +- nff/utils/xyz2mol.py | 2 +- 13 files changed, 19 insertions(+), 19 deletions(-) diff --git a/nff/analysis/mpl_settings.py b/nff/analysis/mpl_settings.py index 4c3255f6..cd21fbdc 100644 --- a/nff/analysis/mpl_settings.py +++ b/nff/analysis/mpl_settings.py @@ -65,7 +65,7 @@ def hex_to_rgb(value: str) -> tuple: value = value.strip("#") # removes hash symbol if present lv = len(value) - return tuple(int(value[i: i + lv // 3], 16) for i in range(0, lv, lv // 3)) + return tuple(int(value[i : i + lv // 3], 16) for i in range(0, lv, lv // 3)) def rgb_to_dec(value: list): diff --git a/nff/io/mace.py b/nff/io/mace.py index de0d8c19..56746cc9 100644 --- a/nff/io/mace.py +++ b/nff/io/mace.py @@ -200,7 +200,7 @@ def compute_mean_rms_energy_forces( counter = 0 batch_indices = torch.zeros(sum(graph_sizes), dtype=torch.long) for i, size in enumerate(graph_sizes): - batch_indices[counter: counter + size] = i + batch_indices[counter : counter + size] = i counter += size # get the graph energy diff --git a/nff/md/colvars.py b/nff/md/colvars.py index e34b83e8..02291136 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -442,7 +442,7 @@ def deproton1(self): dis1 = dis_sq[self.Oacid, :][:, self.Owater] cvmatrix = torch.exp(-self.do * dis) cvmatrix = cvmatrix / cvmatrix.sum(0) - cvmatrixw = cvmatrix[self.Oacid.shape[0]:].sum(-1) - self.r1 + cvmatrixw = cvmatrix[self.Oacid.shape[0] :].sum(-1) - self.r1 cvmatrix = cvmatrix[: self.Oacid.shape[0]].sum(-1) - self.ro cv1 = 2 * cvmatrix.sum() + cvmatrixw.sum() @@ -470,7 +470,7 @@ def deproton2(self): cvmatrix = cvmatrix / cvmatrix.sum(0) cvmatrixx = torch.exp(-self.d * dis) cvmatrixx = cvmatrixx / cvmatrixx.sum(0) - cvmatrixw = cvmatrixx[self.Oacid.shape[0]:].sum(-1) - self.r1 + cvmatrixw = cvmatrixx[self.Oacid.shape[0] :].sum(-1) - self.r1 cvmatrix = cvmatrixx[: self.Oacid.shape[0]].sum(-1) - self.ro torch.cat((cvmatrix, cvmatrixw)) cvmatrix2 = torch.matmul(cvmatrix.view(1, -1).t(), cvmatrixw.view(1, -1)) diff --git a/nff/md/zhu_nakamura/dynamics.py b/nff/md/zhu_nakamura/dynamics.py index 4029d68c..8ffef808 100644 --- a/nff/md/zhu_nakamura/dynamics.py +++ b/nff/md/zhu_nakamura/dynamics.py @@ -977,7 +977,7 @@ def update_energies_forces(self, trjs, get_new_neighbors): current_trj = i * self.batch_size - for j, trj in enumerate(trjs[current_trj: current_trj + self.batch_size]): + for j, trj in enumerate(trjs[current_trj : current_trj + self.batch_size]): energies = [] forces = [] for key in self.energy_keys: diff --git a/nff/nn/models/mace.py b/nff/nn/models/mace.py index 319d4ad1..1b0966fe 100644 --- a/nff/nn/models/mace.py +++ b/nff/nn/models/mace.py @@ -138,9 +138,9 @@ def convert_batch_to_data(self, batch: dict) -> torch_geometric.data.Data: numbers = props.get("nxyz")[node_idx, 0].long().detach().cpu().numpy() if "cell" in props.keys(): - cell = props["cell"][3 * i: 3 * i + 3].detach().cpu().numpy() + cell = props["cell"][3 * i : 3 * i + 3].detach().cpu().numpy() elif "lattice" in props.keys(): - cell = props["lattice"][3 * i: 3 * i + 3].detach().cpu().numpy() + cell = props["lattice"][3 * i : 3 * i + 3].detach().cpu().numpy() else: raise ValueError("No cell or lattice found in batch") config = Configuration( diff --git a/nff/nn/modules/diabat.py b/nff/nn/modules/diabat.py index 5e2a20f9..a59f1fdc 100644 --- a/nff/nn/modules/diabat.py +++ b/nff/nn/modules/diabat.py @@ -391,7 +391,7 @@ def add_nans(self, batch, results, nan_idx, train): for idx in nan_grad_idx: if train: continue - results[key][idx[0]: idx[1]] = results[key][idx[0]: idx[1]] * float("nan") + results[key][idx[0] : idx[1]] = results[key][idx[0] : idx[1]] * float("nan") def forward( self, diff --git a/nff/nn/modules/spooky.py b/nff/nn/modules/spooky.py index 2baf8572..5889ed04 100644 --- a/nff/nn/modules/spooky.py +++ b/nff/nn/modules/spooky.py @@ -254,7 +254,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.resmlp(av) - e_psi[counter: counter + num_atoms[j]] = this_e_psi + e_psi[counter : counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi @@ -636,7 +636,7 @@ def get_charge(self, f, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = charge[counter: counter + n] + old_val = charge[counter : counter + n] new_val = old_val + correction[i] new_charges.append(new_val) diff --git a/nff/nn/modules/spooky_fast.py b/nff/nn/modules/spooky_fast.py index 41dc242e..249aa641 100644 --- a/nff/nn/modules/spooky_fast.py +++ b/nff/nn/modules/spooky_fast.py @@ -325,7 +325,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.resmlp(av) - e_psi[counter: counter + num_atoms[j]] = this_e_psi + e_psi[counter : counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi @@ -615,7 +615,7 @@ def forward(self, x_tilde, num_atoms): ### counter = sum(num_atoms[:i]) - out[counter: counter + num] = att + out[counter : counter + num] = att # pdb.set_trace() @@ -717,7 +717,7 @@ def get_charge(self, f, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = charge[counter: counter + n] + old_val = charge[counter : counter + n] new_val = old_val + correction[i] new_charges.append(new_val) diff --git a/nff/nn/modules/spooky_painn.py b/nff/nn/modules/spooky_painn.py index 1630c39b..ac32b183 100644 --- a/nff/nn/modules/spooky_painn.py +++ b/nff/nn/modules/spooky_painn.py @@ -212,7 +212,7 @@ def charge_and_dip(self, xyz, s_i, v_i, z, total_charge, num_atoms): new_charges = [] for i, n in enumerate(num_atoms): counter = num_atoms[:i].sum() - old_val = atom_charges[counter: counter + n] + old_val = atom_charges[counter : counter + n] new_val = old_val + correction[i] new_charges.append(new_val) @@ -358,7 +358,7 @@ def forward(self, psi, e_z, num_atoms): # dimension atoms_in_mol x F av = a_i.reshape(-1, 1) * v.reshape(1, -1) this_e_psi = self.dense(av) - e_psi[counter: counter + num_atoms[j]] = this_e_psi + e_psi[counter : counter + num_atoms[j]] = this_e_psi counter += num_atoms[j] return e_psi diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index ee99556f..eead469c 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -827,7 +827,7 @@ def update_energies_forces(self, trjs, get_new_neighbors): current_trj = i * self.batch_size - for j, trj in enumerate(trjs[current_trj: current_trj + self.batch_size]): + for j, trj in enumerate(trjs[current_trj : current_trj + self.batch_size]): energies = [] forces = [] for key in self.energy_keys: diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index 0732296b..d25762b2 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -270,7 +270,7 @@ def recluster( if i in self.removed: continue self.counter += 1 - for conf_b in clustered_confs[i + 1:]: + for conf_b in clustered_confs[i + 1 :]: j += 1 if conf_b[1] - conf_a[1] > energy_window: break diff --git a/nff/utils/misc.py b/nff/utils/misc.py index cfa14fb9..1d2e1b21 100644 --- a/nff/utils/misc.py +++ b/nff/utils/misc.py @@ -327,7 +327,7 @@ def prop_split(max_specs, dataset_type, props, sample_dic, seed): else: random.shuffle(underrep) random.shuffle(overrep) - keep_smiles = underrep[: max_specs // 2] + overrep[max_specs // 2:] + keep_smiles = underrep[: max_specs // 2] + overrep[max_specs // 2 :] else: keep_smiles = list(sample_dic.keys()) diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 47f118f6..971001cb 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -453,7 +453,7 @@ def get_bonds(UA, AC): bonds = [] for k, i in enumerate(UA): - for j in UA[k + 1:]: + for j in UA[k + 1 :]: if AC[i, j] == 1: bonds.append(tuple(sorted([i, j]))) From c0201a45956e729f915f84380d9cfd6636a764cc Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 10:34:41 -0500 Subject: [PATCH 21/66] more extreme autoflake --- nff/data/crystals.py | 1 - nff/io/openmm_calculators.py | 3 --- nff/md/ci/opt.py | 22 +------------------ nff/md/colvars.py | 4 +--- nff/md/special_thermostats.py | 2 -- nff/md/tully_multiplicity/dynamics.py | 14 +++++------- nff/md/tully_multiplicity/io.py | 1 - nff/md/utils_ax.py | 5 +---- nff/nn/models/cp3d.py | 2 -- nff/nn/models/graphconvintegration.py | 8 ++----- nff/nn/models/hybridgraph.py | 5 +---- .../modules/bernstein_polynomials.py | 2 -- .../modules/electronic_embedding.py | 2 -- .../modules/electrostatic_energy.py | 1 - .../modules/gaussian_functions.py | 2 -- .../modules/interaction_module.py | 1 - .../modules/local_interaction.py | 1 - .../modules/nonlinear_electronic_embedding.py | 4 ---- .../modules/nonlocal_interaction.py | 1 - .../modules/nuclear_embedding.py | 2 -- .../spooky_net_source/modules/residual.py | 1 - .../spooky_net_source/modules/residual_mlp.py | 1 - .../modules/residual_stack.py | 1 - .../modules/sinc_functions.py | 2 -- .../spooky_net_source/spookynet_calculator.py | 1 - nff/nn/modules/dimenet.py | 2 +- nff/nn/modules/painn.py | 2 +- nff/nn/modules/schnet.py | 1 - nff/reactive_tools/kabsch.py | 1 - nff/reactive_tools/nms.py | 3 +-- nff/reactive_tools/reactive_langevin.py | 3 +-- nff/tests/dynamics_test.py | 7 ++---- nff/train/builders/trainer.py | 1 - nff/train/hooks/scheduling.py | 1 - nff/train/loss.py | 1 - nff/utils/cellfilters.py | 2 +- nff/utils/confgen.py | 1 - nff/utils/xyz2mol.py | 3 +-- 38 files changed, 20 insertions(+), 97 deletions(-) diff --git a/nff/data/crystals.py b/nff/data/crystals.py index 1bf52abc..edd722bc 100644 --- a/nff/data/crystals.py +++ b/nff/data/crystals.py @@ -1,5 +1,4 @@ import torch -import numpy as np # from pymatgen.core.structure import Structure diff --git a/nff/io/openmm_calculators.py b/nff/io/openmm_calculators.py index 98cdefbc..5f970177 100644 --- a/nff/io/openmm_calculators.py +++ b/nff/io/openmm_calculators.py @@ -1,9 +1,6 @@ import numpy as np -import torch from typing import Union, Tuple -from ase import Atoms -from ase.neighborlist import neighbor_list from ase.calculators.calculator import Calculator, all_changes from ase import units diff --git a/nff/md/ci/opt.py b/nff/md/ci/opt.py index 58c57225..268685ed 100644 --- a/nff/md/ci/opt.py +++ b/nff/md/ci/opt.py @@ -7,27 +7,8 @@ from torch.utils.data import DataLoader from rdkit import Chem from pgmols.models import ( - AtomBasis, Geom, - Hessian, - Jacobian, - MDFrame, - Mechanism, Method, - Mol, - MolGroupObjectPermission, - MolSet, - MolUserObjectPermission, - PathImage, - ProductLink, - ReactantLink, - Reaction, - ReactionPath, - ReactionType, - SinglePoint, - Species, - Stoichiometry, - Trajectory, ) from neuralnet.utils import vib from jobs.models import Job, JobConfig @@ -36,8 +17,7 @@ from django.contrib.auth.models import Group from ase.md.verlet import VelocityVerlet from ase.io.trajectory import Trajectory as AseTrajectory -from ase.calculators.calculator import Calculator -from ase import Atoms, optimize, units +from ase import optimize, units import numpy as np import pdb import json diff --git a/nff/md/colvars.py b/nff/md/colvars.py index 02291136..3bda7cda 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -6,10 +6,8 @@ import numpy as np import torch -from ase import Atoms -from nff.io.ase import AtomsBatch from nff.utils.scatter import compute_grad -from nff.train import load_model, evaluate +from nff.train import load_model from nff.utils.cuda import batch_to diff --git a/nff/md/special_thermostats.py b/nff/md/special_thermostats.py index 64671867..f1d5ed74 100644 --- a/nff/md/special_thermostats.py +++ b/nff/md/special_thermostats.py @@ -4,11 +4,9 @@ from tqdm import tqdm from ase.optimize.optimize import Dynamics from ase.md.md import MolecularDynamics -from ase.md.logger import MDLogger from ase import units from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary, ZeroRotation -from nff.io.ase import AtomsBatch class TempRamp(MolecularDynamics): diff --git a/nff/md/tully_multiplicity/dynamics.py b/nff/md/tully_multiplicity/dynamics.py index 71e75a39..9b68bf29 100644 --- a/nff/md/tully_multiplicity/dynamics.py +++ b/nff/md/tully_multiplicity/dynamics.py @@ -15,7 +15,6 @@ import json import random import math -import argparse from functools import partial import shutil @@ -36,7 +35,6 @@ verlet_step_2, truhlar_decoherence, adiabatic_c, - compute_T, get_p_hop, ) @@ -299,13 +297,13 @@ def get_nacv(self): state1 = self.statenum_to_spinadiabatic[state_n1] splits = state1.split("_") adiabat1 = splits[0] - spin_ms1 = splits[1] + splits[1] for state_n2 in range(self.num_states): state2 = self.statenum_to_spinadiabatic[state_n2] splits = state2.split("_") adiabat2 = splits[0] - spin_ms2 = splits[1] + splits[1] if adiabat1 == adiabat2: continue @@ -711,7 +709,7 @@ def update_selfs(self): # check eq B11 epsilon = 0.1 # hardcoded for now diagonals = np.einsum("ijj->ij", np.einsum("ijk,ikl->ijl", self.U.conj().transpose((0, 2, 1)), self.U_old)) - anti_hermitian = ((1 - epsilon) < diagonals).all() + ((1 - epsilon) < diagonals).all() # if not anti_hermitian: # print("WARNING: Time step likely too large! At least one new unitary matrix ", # "does not fulfill anti-hermicity!") @@ -755,12 +753,12 @@ def add_decoherence(self): self.c_hmc = self.get_c_hmc() def step(self, needs_nbrs): - old_V = copy.deepcopy(self.pot_V) - old_H_hmc = copy.deepcopy(self.H_hmc) + copy.deepcopy(self.pot_V) + copy.deepcopy(self.H_hmc) old_H_plus_nacv = copy.deepcopy(self.H_plus_nacv) old_U = copy.deepcopy(self.U) - old_c_hmc = copy.deepcopy(self.c_hmc) + copy.deepcopy(self.c_hmc) old_c_diag = copy.deepcopy(self.c_diag) # xyz converted to a.u. for the step and then diff --git a/nff/md/tully_multiplicity/io.py b/nff/md/tully_multiplicity/io.py index 18bfd563..d5704d6d 100644 --- a/nff/md/tully_multiplicity/io.py +++ b/nff/md/tully_multiplicity/io.py @@ -19,7 +19,6 @@ from nff.nn.utils import single_spec_nbrs from nff.data import Dataset, collate_dicts from nff.utils import constants as const -from nff.utils.scatter import compute_grad from nff.io.ase_ax import NeuralFF, AtomsBatch PERIODICTABLE = Chem.GetPeriodicTable() diff --git a/nff/md/utils_ax.py b/nff/md/utils_ax.py index 5804ae1d..16984ffa 100644 --- a/nff/md/utils_ax.py +++ b/nff/md/utils_ax.py @@ -5,12 +5,9 @@ import copy -import ase -from ase import Atoms, units +from ase import units from ase.md import MDLogger -from nff.utils.scatter import compute_grad -from nff.data.graphs import * import nff.utils.constants as const diff --git a/nff/nn/models/cp3d.py b/nff/nn/models/cp3d.py index 8ebfb17a..e3d2c7ef 100644 --- a/nff/nn/models/cp3d.py +++ b/nff/nn/models/cp3d.py @@ -1,12 +1,10 @@ from torch import nn import torch -import numpy as np from nff.data.graphs import get_bond_idx from nff.nn.models.conformers import WeightedConformers from nff.nn.modules import ChemPropConv, ChemPropMsgToNode, ChemPropInit, SchNetEdgeFilter, CpSchNetConv from nff.utils.tools import make_directed -from nff.utils.confs import split_batch REINDEX_KEYS = ["nbr_list", "bonded_nbr_list"] diff --git a/nff/nn/models/graphconvintegration.py b/nff/nn/models/graphconvintegration.py index 6ccc48dc..5f435687 100644 --- a/nff/nn/models/graphconvintegration.py +++ b/nff/nn/models/graphconvintegration.py @@ -1,11 +1,7 @@ -import torch import torch.nn as nn -import torch.nn.functional as F -from nff.nn.layers import Dense, GaussianSmearing -from nff.nn.modules import GraphDis, SchNetConv, BondEnergyModule, SchNetEdgeUpdate, NodeMultiTaskReadOut -from nff.nn.activations import shifted_softplus -from nff.nn.graphop import batch_and_sum, get_atoms_inside_cell +from nff.nn.modules import SchNetConv, NodeMultiTaskReadOut +from nff.nn.graphop import batch_and_sum from nff.nn.utils import get_default_readout diff --git a/nff/nn/models/hybridgraph.py b/nff/nn/models/hybridgraph.py index 5e09ba19..14c33496 100644 --- a/nff/nn/models/hybridgraph.py +++ b/nff/nn/models/hybridgraph.py @@ -1,10 +1,7 @@ import torch import torch.nn as nn -import torch.nn.functional as F -from nff.nn.layers import Dense, GaussianSmearing -from nff.nn.modules import SchNetConv, SchNetEdgeUpdate, NodeMultiTaskReadOut -from nff.nn.activations import shifted_softplus +from nff.nn.modules import SchNetConv, NodeMultiTaskReadOut from nff.nn.graphop import batch_and_sum from nff.nn.utils import get_default_readout diff --git a/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py b/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py index 3c2501e6..361fbaf0 100644 --- a/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py +++ b/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py @@ -1,8 +1,6 @@ import torch import torch.nn as nn -import torch.nn.functional as F import numpy as np -from ..functional import softplus_inverse class BernsteinPolynomials(nn.Module): diff --git a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py index 17ec7088..edaefa3d 100644 --- a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py @@ -2,8 +2,6 @@ import torch.nn as nn import torch.nn.functional as F from .residual_mlp import ResidualMLP -from .shifted_softplus import ShiftedSoftplus -from .swish import Swish from typing import Optional diff --git a/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py b/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py index a347d2b2..e5a3ad95 100644 --- a/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py +++ b/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py @@ -1,7 +1,6 @@ import math import torch import torch.nn as nn -import torch.nn.functional as F from ..functional import switch_function from typing import Optional diff --git a/nff/nn/models/spooky_net_source/modules/gaussian_functions.py b/nff/nn/models/spooky_net_source/modules/gaussian_functions.py index a751dc7e..6d1b7d80 100644 --- a/nff/nn/models/spooky_net_source/modules/gaussian_functions.py +++ b/nff/nn/models/spooky_net_source/modules/gaussian_functions.py @@ -1,7 +1,5 @@ import torch import torch.nn as nn -import torch.nn.functional as F -from ..functional import softplus_inverse class GaussianFunctions(nn.Module): diff --git a/nff/nn/models/spooky_net_source/modules/interaction_module.py b/nff/nn/models/spooky_net_source/modules/interaction_module.py index 48821fe0..c4b97f74 100644 --- a/nff/nn/models/spooky_net_source/modules/interaction_module.py +++ b/nff/nn/models/spooky_net_source/modules/interaction_module.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import torch.nn.functional as F from .residual_stack import ResidualStack from .local_interaction import LocalInteraction from .nonlocal_interaction import NonlocalInteraction diff --git a/nff/nn/models/spooky_net_source/modules/local_interaction.py b/nff/nn/models/spooky_net_source/modules/local_interaction.py index f2d6b02f..94679711 100644 --- a/nff/nn/models/spooky_net_source/modules/local_interaction.py +++ b/nff/nn/models/spooky_net_source/modules/local_interaction.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import torch.nn.functional as F from .residual_mlp import ResidualMLP diff --git a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py index 0d5664f9..b672e76a 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py @@ -1,10 +1,6 @@ import torch import torch.nn as nn -import torch.nn.functional as F -from .attention import Attention from .residual_mlp import ResidualMLP -from .shifted_softplus import ShiftedSoftplus -from .swish import Swish from typing import Optional diff --git a/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py b/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py index 6617fde7..c787c182 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py +++ b/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import torch.nn.functional as F from .attention import Attention from .residual_mlp import ResidualMLP from typing import Optional diff --git a/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py b/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py index 9f102d8c..14fede87 100644 --- a/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py @@ -1,8 +1,6 @@ import math -import numpy as np import torch import torch.nn as nn -import torch.nn.functional as F from .electron_configurations import electron_config diff --git a/nff/nn/models/spooky_net_source/modules/residual.py b/nff/nn/models/spooky_net_source/modules/residual.py index 0132765e..0b7d7bfa 100644 --- a/nff/nn/models/spooky_net_source/modules/residual.py +++ b/nff/nn/models/spooky_net_source/modules/residual.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import torch.nn.functional as F from .shifted_softplus import ShiftedSoftplus from .swish import Swish diff --git a/nff/nn/models/spooky_net_source/modules/residual_mlp.py b/nff/nn/models/spooky_net_source/modules/residual_mlp.py index 8e5f4662..32cd89b0 100644 --- a/nff/nn/models/spooky_net_source/modules/residual_mlp.py +++ b/nff/nn/models/spooky_net_source/modules/residual_mlp.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import torch.nn.functional as F from .residual_stack import ResidualStack from .shifted_softplus import ShiftedSoftplus from .swish import Swish diff --git a/nff/nn/models/spooky_net_source/modules/residual_stack.py b/nff/nn/models/spooky_net_source/modules/residual_stack.py index c90e6bb9..2146d08c 100644 --- a/nff/nn/models/spooky_net_source/modules/residual_stack.py +++ b/nff/nn/models/spooky_net_source/modules/residual_stack.py @@ -1,6 +1,5 @@ import torch import torch.nn as nn -import torch.nn.functional as F from .residual import Residual diff --git a/nff/nn/models/spooky_net_source/modules/sinc_functions.py b/nff/nn/models/spooky_net_source/modules/sinc_functions.py index 9df69ade..8a9b15db 100644 --- a/nff/nn/models/spooky_net_source/modules/sinc_functions.py +++ b/nff/nn/models/spooky_net_source/modules/sinc_functions.py @@ -1,8 +1,6 @@ import math import torch import torch.nn as nn -import torch.nn.functional as F -from ..functional import softplus_inverse # backwards compatibility with older versions of torch try: diff --git a/nff/nn/models/spooky_net_source/spookynet_calculator.py b/nff/nn/models/spooky_net_source/spookynet_calculator.py index b62c3426..15ab5930 100644 --- a/nff/nn/models/spooky_net_source/spookynet_calculator.py +++ b/nff/nn/models/spooky_net_source/spookynet_calculator.py @@ -1,6 +1,5 @@ import torch import numpy as np -from ase import Atoms from ase.neighborlist import neighbor_list from ase.calculators.calculator import Calculator, all_changes from sklearn.neighbors import BallTree diff --git a/nff/nn/modules/dimenet.py b/nff/nn/modules/dimenet.py index 114a998a..070a44b8 100644 --- a/nff/nn/modules/dimenet.py +++ b/nff/nn/modules/dimenet.py @@ -1,7 +1,7 @@ import torch from torch import nn -from nff.utils.scatter import scatter_add, compute_grad +from nff.utils.scatter import scatter_add from nff.utils.tools import layer_types from nff.nn.layers import Dense diff --git a/nff/nn/modules/painn.py b/nff/nn/modules/painn.py index 08f38707..0e3a61a6 100644 --- a/nff/nn/modules/painn.py +++ b/nff/nn/modules/painn.py @@ -2,7 +2,7 @@ from torch import nn from nff.utils.tools import layer_types -from nff.nn.layers import PainnRadialBasis, CosineEnvelope, ExpNormalBasis, Dense +from nff.nn.layers import PainnRadialBasis, CosineEnvelope, Dense from nff.utils.scatter import scatter_add from nff.nn.modules.schnet import ScaleShift from nff.nn.modules.torchmd_net import MessageBlock as MDMessage diff --git a/nff/nn/modules/schnet.py b/nff/nn/modules/schnet.py index 9d4f7dc5..48700b7a 100644 --- a/nff/nn/modules/schnet.py +++ b/nff/nn/modules/schnet.py @@ -14,7 +14,6 @@ from nff.nn.layers import Dense, GaussianSmearing # for backwards compatability -from nff.nn.modules.diabat import DiabaticReadout from nff.nn.utils import ( chemprop_msg_to_node, chemprop_msg_update, diff --git a/nff/reactive_tools/kabsch.py b/nff/reactive_tools/kabsch.py index da90d74d..6b6eadab 100644 --- a/nff/reactive_tools/kabsch.py +++ b/nff/reactive_tools/kabsch.py @@ -3,7 +3,6 @@ try: from alog import Logger - from acore import settings import acore as ac except ModuleNotFoundError: print("You need to install the group's fork of aRMSD and put it in your path " "https://github.mit.edu/MLMat/aRMSD") diff --git a/nff/reactive_tools/nms.py b/nff/reactive_tools/nms.py index 356c9f6e..a486b16c 100644 --- a/nff/reactive_tools/nms.py +++ b/nff/reactive_tools/nms.py @@ -1,7 +1,6 @@ -import scipy import numpy as np from scipy.stats import rv_discrete -from ase.units import Bohr, Rydberg, kJ, kB, fs, Hartree, mol, kcal, second +from ase.units import Bohr CM_2_AU = 4.5564e-6 ANGS_2_AU = 1.8897259886 diff --git a/nff/reactive_tools/reactive_langevin.py b/nff/reactive_tools/reactive_langevin.py index 9e260aaf..1640418b 100644 --- a/nff/reactive_tools/reactive_langevin.py +++ b/nff/reactive_tools/reactive_langevin.py @@ -1,7 +1,6 @@ from ase.io import Trajectory from ase.md.langevin import * -from ase import Atoms -from ase.units import Bohr, Rydberg, kJ, kB, fs, Hartree, mol, kcal, second, Ang +from ase.units import kB, fs, second, Ang from nff.md.utils import NeuralMDLogger, write_traj diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index eead469c..ac449866 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -1,21 +1,18 @@ import numpy as np import random from datetime import datetime -from pytz import timezone import torch import copy import pickle -from ase.md.md import MolecularDynamics from ase.io.trajectory import Trajectory -from ase import Atoms from nff.md.utils_ax import mol_dot, mol_norm, ZhuNakamuraLogger, atoms_to_nxyz from nff.md.nvt_ax import NoseHoover, NoseHooverChain -from nff.utils.constants import BOHR_RADIUS, FS_TO_AU, AMU_TO_AU, FS_TO_ASE, ASE_TO_FS, EV_TO_AU +from nff.utils.constants import BOHR_RADIUS, FS_TO_AU, AMU_TO_AU, ASE_TO_FS, EV_TO_AU from nff.data import Dataset, collate_dicts from nff.utils.cuda import batch_to -from nff.utils.constants import KCAL_TO_AU, KB_EV +from nff.utils.constants import KCAL_TO_AU from nff.train import load_model from torch.utils.data import DataLoader diff --git a/nff/train/builders/trainer.py b/nff/train/builders/trainer.py index a0ee561a..21ff6433 100644 --- a/nff/train/builders/trainer.py +++ b/nff/train/builders/trainer.py @@ -7,7 +7,6 @@ import json import nff -import torch from torch.optim import Adam diff --git a/nff/train/hooks/scheduling.py b/nff/train/hooks/scheduling.py index 6084eac7..01e3df16 100644 --- a/nff/train/hooks/scheduling.py +++ b/nff/train/hooks/scheduling.py @@ -4,7 +4,6 @@ """ import numpy as np -import torch from torch.optim.lr_scheduler import ( CosineAnnealingLR, ReduceLROnPlateau, diff --git a/nff/train/loss.py b/nff/train/loss.py index 0125b61f..bd472c43 100644 --- a/nff/train/loss.py +++ b/nff/train/loss.py @@ -1,6 +1,5 @@ import numpy as np import torch -from torch.nn import CrossEntropyLoss from nff.utils import constants as const diff --git a/nff/utils/cellfilters.py b/nff/utils/cellfilters.py index af5bb1f4..3b4a426f 100644 --- a/nff/utils/cellfilters.py +++ b/nff/utils/cellfilters.py @@ -1,4 +1,4 @@ -from ase.constraints import Filter, UnitCellFilter, ExpCellFilter +from ase.constraints import UnitCellFilter import numpy as np from ase.stress import full_3x3_to_voigt_6_stress, voigt_6_to_full_3x3_stress diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index d25762b2..9510d5d5 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -20,7 +20,6 @@ from rdkit.Chem.rdmolops import RemoveHs, GetFormalCharge from nff.utils.misc import read_csv, tqdm_enum -from nff.data.parallel import gen_parallel PERIODICTABLE = GetPeriodicTable() diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 971001cb..5c247935 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -20,7 +20,6 @@ import signal -from rdkit.Chem import rdmolops try: from rdkit.Chem import rdEHTTools # requires RDKit 2019.9.1 or later @@ -33,7 +32,7 @@ import networkx as nx from rdkit import Chem -from rdkit.Chem import AllChem, rdmolops, GetPeriodicTable +from rdkit.Chem import AllChem, GetPeriodicTable from rdkit.Chem.rdchem import EditableMol From dab2882932bb97a2921ebf2d690a123b901e9967 Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 10:35:05 -0500 Subject: [PATCH 22/66] ruff format --- nff/md/special_thermostats.py | 1 - nff/utils/xyz2mol.py | 1 - 2 files changed, 2 deletions(-) diff --git a/nff/md/special_thermostats.py b/nff/md/special_thermostats.py index f1d5ed74..1c826586 100644 --- a/nff/md/special_thermostats.py +++ b/nff/md/special_thermostats.py @@ -8,7 +8,6 @@ from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary, ZeroRotation - class TempRamp(MolecularDynamics): def __init__( self, diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 5c247935..40bada34 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -20,7 +20,6 @@ import signal - try: from rdkit.Chem import rdEHTTools # requires RDKit 2019.9.1 or later except ImportError: From 3585265c0adbf9025162d81e78e00b52bce98dad Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 10:35:45 -0500 Subject: [PATCH 23/66] ignore test files --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index d3e00c03..4b6cfd09 100644 --- a/.gitignore +++ b/.gitignore @@ -74,5 +74,9 @@ build/ # pycharm .idea/ +# coverage and tests +junit +.coverage + # required exceptions !tutorials/models/ammonia/Ammonia.xyz From 322f4b47f543f888e0b918f73b0429a6c69611d8 Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 10:49:37 -0500 Subject: [PATCH 24/66] ruff safe fixes --- nff/analysis/attribution.py | 19 +++-- nff/analysis/attribution_deprecate.py | 19 +++-- nff/analysis/cp3d.py | 21 +++-- nff/analysis/parity_plot.py | 2 +- nff/analysis/roce.py | 8 +- nff/data/crystals.py | 1 + nff/data/features/graph.py | 49 ++++++------ nff/data/features/xyz.py | 5 +- nff/data/graphs.py | 3 +- nff/data/loader.py | 6 +- nff/data/parallel.py | 14 ++-- nff/data/sampling.py | 4 +- nff/data/sparse.py | 3 +- nff/data/utils.py | 2 +- nff/io/ase_ax.py | 16 ++-- nff/io/ase_calcs.py | 10 +-- nff/io/ase_utils.py | 9 +-- nff/io/bias_calculators.py | 14 ++-- nff/io/chgnet.py | 2 +- nff/io/cprop.py | 1 + nff/io/mace.py | 7 +- nff/io/openmm_calculators.py | 14 ++-- nff/md/aims/calcs/basis.py | 69 +++++++++-------- nff/md/ci/opt.py | 76 ++++++++++--------- nff/md/colvars.py | 30 ++------ nff/md/nms.py | 47 ++++++------ nff/md/nve.py | 9 +-- nff/md/nvt.py | 16 ++-- nff/md/nvt_ax.py | 8 +- nff/md/special_thermostats.py | 12 +-- nff/md/tully/ab_dynamics.py | 11 +-- nff/md/tully/ab_io.py | 11 ++- nff/md/tully/dynamics.py | 14 ++-- nff/md/tully/io.py | 13 ++-- nff/md/tully_multiplicity/dynamics.py | 41 +++++----- nff/md/tully_multiplicity/io.py | 19 ++--- nff/md/utils_ax.py | 13 ++-- nff/nn/glue.py | 6 +- nff/nn/graphconv.py | 1 + nff/nn/graphop.py | 10 +-- nff/nn/layers.py | 2 +- nff/nn/models/conformers.py | 10 +-- nff/nn/models/cp3d.py | 6 +- nff/nn/models/dimenet.py | 2 +- nff/nn/models/dispersion_models.py | 11 ++- nff/nn/models/graphconvintegration.py | 2 +- nff/nn/models/hybridgraph.py | 3 +- nff/nn/models/mace.py | 6 +- nff/nn/models/painn.py | 36 ++++----- nff/nn/models/schnet.py | 7 +- nff/nn/models/schnet_features.py | 4 +- nff/nn/models/spooky.py | 19 +++-- nff/nn/models/spooky_fast.py | 11 +-- nff/nn/models/spooky_net_source/functional.py | 1 + .../spooky_net_source/modules/attention.py | 15 ++-- .../modules/bernstein_polynomials.py | 4 +- .../modules/d4_dispersion_energy.py | 6 +- .../modules/electronic_embedding.py | 4 +- .../modules/electrostatic_energy.py | 7 +- .../exponential_bernstein_polynomials.py | 8 +- .../modules/exponential_gaussian_functions.py | 4 +- .../modules/interaction_module.py | 6 +- .../modules/local_interaction.py | 1 + .../modules/nonlinear_electronic_embedding.py | 4 +- .../modules/nonlocal_interaction.py | 4 +- .../modules/nuclear_embedding.py | 6 +- .../spooky_net_source/modules/residual.py | 1 + .../spooky_net_source/modules/residual_mlp.py | 1 + .../modules/residual_stack.py | 1 + .../modules/shifted_softplus.py | 1 + .../modules/sinc_functions.py | 1 + .../modules/zbl_repulsion_energy.py | 1 + nff/nn/models/spooky_net_source/spookynet.py | 4 +- .../spooky_net_source/spookynet_calculator.py | 13 ++-- .../spooky_net_source/spookynet_ensemble.py | 4 +- nff/nn/modules/diabat.py | 9 +-- nff/nn/modules/dimenet.py | 2 +- nff/nn/modules/painn.py | 8 +- nff/nn/modules/schnet.py | 2 +- nff/nn/modules/spooky_fast.py | 13 ++-- nff/nn/modules/torchmd_net.py | 1 + nff/nn/tensorgrad.py | 9 +-- nff/nn/utils.py | 8 +- nff/opt/algos.py | 6 +- nff/qm/integrals/overlap.py | 4 +- nff/reactive_tools/ev_following.py | 6 +- nff/reactive_tools/kabsch.py | 7 +- nff/reactive_tools/neb.py | 15 ++-- nff/reactive_tools/nms.py | 2 +- nff/reactive_tools/reactive_langevin.py | 3 +- nff/reactive_tools/utils.py | 9 +-- nff/tests/conftest.py | 1 + nff/tests/dynamics_test.py | 33 ++++---- nff/tests/test_ase.py | 3 +- nff/tests/test_data/test_dataset.py | 3 +- nff/tests/test_excited_states_training.py | 5 +- nff/tests/test_training.py | 4 +- nff/train/builders/trainer.py | 5 +- nff/train/chgnet.py | 3 +- nff/train/evaluate.py | 12 +-- nff/train/hooks/logging.py | 15 ++-- nff/train/metrics.py | 2 +- nff/train/parallel.py | 6 +- nff/train/trainer.py | 8 +- nff/train/transfer.py | 12 +-- nff/train/uncertainty.py | 14 ++-- nff/utils/cellfilters.py | 3 +- nff/utils/confgen.py | 66 ++++++++-------- nff/utils/confs.py | 9 ++- nff/utils/dispersion.py | 10 +-- nff/utils/fast_attention.py | 2 +- nff/utils/functions.py | 14 ++-- nff/utils/geom.py | 8 +- nff/utils/misc.py | 4 +- nff/utils/scatter.py | 1 + nff/utils/script_utils/loaders.py | 6 +- nff/utils/script_utils/setup.py | 4 +- nff/utils/tools.py | 14 ++-- nff/utils/xyz2mol.py | 24 +++--- 119 files changed, 604 insertions(+), 642 deletions(-) diff --git a/nff/analysis/attribution.py b/nff/analysis/attribution.py index 8f7b2149..6cc0c1fd 100644 --- a/nff/analysis/attribution.py +++ b/nff/analysis/attribution.py @@ -1,15 +1,15 @@ +from typing import Union + +import numpy as np import torch -from ase.io import Trajectory, write from ase import Atoms -import numpy as np +from ase.io import Trajectory, write +from tqdm import tqdm -from nff.io.ase_calcs import EnsembleNFF from nff.io.ase import AtomsBatch -from nff.utils.scatter import compute_grad +from nff.io.ase_calcs import EnsembleNFF from nff.utils.cuda import batch_to -from typing import Union - -from tqdm import tqdm +from nff.utils.scatter import compute_grad def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond", **kwargs) -> list[np.array]: @@ -269,8 +269,7 @@ def calc_attribution_file( }, } return atoms_list, properties - else: - return attributions + return attributions def activelearning( self, @@ -337,7 +336,7 @@ def activelearning( neighs = np.append(neighs, a) for n in neighs: atomstocare = np.append(atomstocare, molecules[np.where(balanced_mols == n)[0][0]]) - atomstocare = np.array((list(set(atomstocare)))) + atomstocare = np.array(list(set(atomstocare))) atomstocare = np.int64(atomstocare) atoms1 = atoms[atomstocare] index = np.where(atoms1.positions == atoms.positions[a])[0][0] diff --git a/nff/analysis/attribution_deprecate.py b/nff/analysis/attribution_deprecate.py index 8f7b2149..6cc0c1fd 100644 --- a/nff/analysis/attribution_deprecate.py +++ b/nff/analysis/attribution_deprecate.py @@ -1,15 +1,15 @@ +from typing import Union + +import numpy as np import torch -from ase.io import Trajectory, write from ase import Atoms -import numpy as np +from ase.io import Trajectory, write +from tqdm import tqdm -from nff.io.ase_calcs import EnsembleNFF from nff.io.ase import AtomsBatch -from nff.utils.scatter import compute_grad +from nff.io.ase_calcs import EnsembleNFF from nff.utils.cuda import batch_to -from typing import Union - -from tqdm import tqdm +from nff.utils.scatter import compute_grad def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond", **kwargs) -> list[np.array]: @@ -269,8 +269,7 @@ def calc_attribution_file( }, } return atoms_list, properties - else: - return attributions + return attributions def activelearning( self, @@ -337,7 +336,7 @@ def activelearning( neighs = np.append(neighs, a) for n in neighs: atomstocare = np.append(atomstocare, molecules[np.where(balanced_mols == n)[0][0]]) - atomstocare = np.array((list(set(atomstocare)))) + atomstocare = np.array(list(set(atomstocare))) atomstocare = np.int64(atomstocare) atoms1 = atoms[atomstocare] index = np.where(atoms1.positions == atoms.positions[a])[0][0] diff --git a/nff/analysis/cp3d.py b/nff/analysis/cp3d.py index 0b47427c..9d605b55 100644 --- a/nff/analysis/cp3d.py +++ b/nff/analysis/cp3d.py @@ -2,22 +2,21 @@ Tools for analyzing conformer-based model predictions. """ +import json +import logging import os import pickle import random -import logging -import json import numpy as np import torch -from tqdm import tqdm -from sklearn.metrics import roc_auc_score, auc, precision_recall_curve -from sklearn.metrics.pairwise import cosine_similarity as cos_sim from rdkit import Chem +from sklearn.metrics import auc, precision_recall_curve, roc_auc_score +from sklearn.metrics.pairwise import cosine_similarity as cos_sim +from tqdm import tqdm - -from nff.utils import fprint from nff.data.features import get_e3fp +from nff.utils import fprint LOGGER = logging.getLogger() LOGGER.disabled = True @@ -42,7 +41,7 @@ def get_pred_files(model_path): # or pred_.pickle splits = ["train", "val", "test"] starts_split = any([file.startswith(f"{split}_pred") for split in splits]) - starts_pred = any([file.startswith(f"pred") for split in splits]) + starts_pred = any([file.startswith("pred") for split in splits]) if (not starts_split) and (not starts_pred): continue if not file.endswith("pickle"): @@ -106,7 +105,7 @@ def get_att_type(dic): if is_linear: num_heads = int(num_weights_list[0] / num_confs_list[0]) else: - num_heads = int((num_weights_list[0] / num_confs_list[0] ** 2)) + num_heads = int(num_weights_list[0] / num_confs_list[0] ** 2) return num_heads, is_linear @@ -505,7 +504,7 @@ def get_scores(path, avg_metrics=["auc", "prc-auc"]): """ files = [i for i in os.listdir(path) if i.endswith(".pickle") and i.startswith("pred")] if not files: - return + return None scores = [] for file in files: with open(os.path.join(path, file), "rb") as f: @@ -518,7 +517,7 @@ def get_scores(path, avg_metrics=["auc", "prc-auc"]): # then it's not a binary classification problem if any([i not in [0, 1] for i in true]): - return + return None auc_score = roc_auc_score(y_true=true, y_score=pred) precision, recall, thresholds = precision_recall_curve(y_true=true, probas_pred=pred) diff --git a/nff/analysis/parity_plot.py b/nff/analysis/parity_plot.py index 380af4d5..77cb39fe 100644 --- a/nff/analysis/parity_plot.py +++ b/nff/analysis/parity_plot.py @@ -195,7 +195,7 @@ def plot_err_var( min_text = ax.text( 0.6, 0.9, - r"$R^2$: {:.3f}".format(res.rvalue**2), + rf"$R^2$: {res.rvalue**2:.3f}", transform=ax.transAxes, ) diff --git a/nff/analysis/roce.py b/nff/analysis/roce.py index 152cd03c..8f04a7c8 100644 --- a/nff/analysis/roce.py +++ b/nff/analysis/roce.py @@ -3,20 +3,18 @@ at different enrichment factors. """ +import argparse import copy -import pickle import json import math +import pickle -import argparse +import numpy as np from matplotlib import pyplot as plt from matplotlib import rcParams -import numpy as np - from nff.utils import read_csv - # height of each ROCE bar slice in the plots, normalized # to max value of all bars in the plot BAR_HEIGHT = 0.02 diff --git a/nff/data/crystals.py b/nff/data/crystals.py index edd722bc..5b54d8c9 100644 --- a/nff/data/crystals.py +++ b/nff/data/crystals.py @@ -1,4 +1,5 @@ import torch + # from pymatgen.core.structure import Structure diff --git a/nff/data/features/graph.py b/nff/data/features/graph.py index 117d3141..804ff2cb 100644 --- a/nff/data/features/graph.py +++ b/nff/data/features/graph.py @@ -2,14 +2,15 @@ Tools for generating graph-based features """ -import torch -import numpy as np import copy + +import numpy as np +import torch from rdkit import Chem from rdkit.Chem import AllChem -from nff.utils.xyz2mol import xyz2mol from nff.utils import tqdm_enum +from nff.utils.xyz2mol import xyz2mol # default options for xyz2mol @@ -105,7 +106,7 @@ def remove_bad_idx(dataset, smiles_list, bad_idx, verbose=True): conv_pct = good_len / total_len * 100 if verbose: - print(("Converted %d of %d " "species (%.2f%%)" % (good_len, total_len, conv_pct))) + print("Converted %d of %d " "species (%.2f%%)" % (good_len, total_len, conv_pct)) def smiles_from_smiles(smiles): @@ -252,19 +253,17 @@ def verify_smiles(rd_mol, smiles): if good_con: msg = ( - "WARNING: xyz2mol SMILES is {} " - "and database SMILES is {}. " + f"WARNING: xyz2mol SMILES is {rd_smiles} " + f"and database SMILES is {db_smiles}. " "However, the connectivity is the same. " "Check to make sure the SMILES are resonances " - "structures.".format(rd_smiles, db_smiles) + "structures." ) return # otherwise raise an exception - msg = "SMILES created by xyz2mol is {}, " "which doesn't match the database " "SMILES {}.".format( - rd_smiles, db_smiles - ) + msg = f"SMILES created by xyz2mol is {rd_smiles}, " "which doesn't match the database " f"SMILES {db_smiles}." raise Exception(msg) @@ -285,7 +284,7 @@ def log_failure(bad_idx, i): good_len = i - len(bad_idx) conv_pct = good_len / i * 100 - print(("Converted %d of %d " "species (%.2f%%)" % (good_len, i, conv_pct))) + print("Converted %d of %d " "species (%.2f%%)" % (good_len, i, conv_pct)) def log_missing(missing_e): @@ -394,8 +393,8 @@ def make_rd_mols(dataset, verbose=True, check_smiles=False, track=True): verify_smiles(rd_mol=mol, smiles=smiles) except Exception as e: - print(("xyz2mol failed " "with error '{}' ".format(e))) - print("Removing smiles {}".format(smiles)) + print("xyz2mol failed " f"with error '{e}' ") + print(f"Removing smiles {smiles}") bad_idx.append(i) if verbose: @@ -463,14 +462,14 @@ def bond_feat_to_vec(feat_type, feat): result = torch.Tensor([conj]) return result - elif feat_type == "bond_type": + if feat_type == "bond_type": # select from `BOND_OPTIONS` options = BOND_OPTIONS bond_type = feat one_hot = make_one_hot(options=options, result=bond_type) return one_hot - elif feat_type == "in_ring_size": + if feat_type == "in_ring_size": # This is already a one-hot encoded vector, # because RDKit tests if the bond is in a # ring of a specific size, so the feature we @@ -490,13 +489,13 @@ def bond_feat_to_vec(feat_type, feat): return one_hot - elif feat_type == "in_ring": + if feat_type == "in_ring": # just 0 or 1 in_ring = feat result = torch.Tensor([in_ring]) return result - elif feat_type == "stereo": + if feat_type == "stereo": # select from `STEREO_OPTIONS` stereo = feat options = STEREO_OPTIONS @@ -556,42 +555,42 @@ def atom_feat_to_vec(feat_type, feat): return one_hot - elif feat_type == "num_bonds": + if feat_type == "num_bonds": options = BONDS one_hot = make_one_hot(options=options, result=feat) return one_hot - elif feat_type == "formal_charge": + if feat_type == "formal_charge": options = FORMAL_CHARGES one_hot = make_one_hot(options=options, result=feat) return one_hot - elif feat_type == "chirality": + if feat_type == "chirality": options = CHIRAL_OPTIONS one_hot = make_one_hot(options=options, result=feat) return one_hot - elif feat_type == "num_bonded_h": + if feat_type == "num_bonded_h": options = NUM_H one_hot = make_one_hot(options=options, result=feat) return one_hot - elif feat_type == "hybrid": + if feat_type == "hybrid": options = HYBRID_OPTIONS one_hot = make_one_hot(options=options, result=feat) return one_hot - elif feat_type == "aromaticity": + if feat_type == "aromaticity": one_hot = torch.Tensor([feat]) return one_hot - elif feat_type == "mass": + if feat_type == "mass": # the mass is converted to a feature vector # by dividing by 100 result = torch.Tensor([feat / 100]) @@ -822,7 +821,7 @@ def decode_one_hot(options, vector): return bool(vector.item()) # if the options are a single float, return the value - elif options == [float]: + if options == [float]: return vector.item() # otherwise return the option at the nonzero index diff --git a/nff/data/features/xyz.py b/nff/data/features/xyz.py index 9b710bab..e515a56d 100644 --- a/nff/data/features/xyz.py +++ b/nff/data/features/xyz.py @@ -4,11 +4,10 @@ import logging -from rdkit import Chem -from rdkit.Chem import rdMolDescriptors as rdMD import torch from e3fp.pipeline import fprints_from_mol - +from rdkit import Chem +from rdkit.Chem import rdMolDescriptors as rdMD from tqdm import tqdm diff --git a/nff/data/graphs.py b/nff/data/graphs.py index 9d47a003..045f1e4d 100644 --- a/nff/data/graphs.py +++ b/nff/data/graphs.py @@ -249,8 +249,7 @@ def generate_subgraphs(atomsobject, unwrap=True, get_edge=False): edge_list.append(list(sg.edges)) if len(edge_list) != 0: return partitions, edge_list - else: - return partitions + return partitions def get_single_molecule(atomsobject, mol_idx, single_mol_id): diff --git a/nff/data/loader.py b/nff/data/loader.py index 60503e1d..120260d8 100644 --- a/nff/data/loader.py +++ b/nff/data/loader.py @@ -1,8 +1,8 @@ -import numpy as np -import torch import copy -from torch.utils.data.sampler import Sampler, BatchSampler +import numpy as np +import torch +from torch.utils.data.sampler import BatchSampler, Sampler REINDEX_KEYS = ["atoms_nbr_list", "nbr_list", "bonded_nbr_list", "angle_list", "mol_nbrs"] NBR_LIST_KEYS = ["bond_idx", "kj_idx", "ji_idx"] diff --git a/nff/data/parallel.py b/nff/data/parallel.py index 0d6257f0..a4340b91 100644 --- a/nff/data/parallel.py +++ b/nff/data/parallel.py @@ -2,15 +2,15 @@ Tools for applying functions in parallel to the dataset """ -import numpy as np -from concurrent import futures import copy +from concurrent import futures + +import numpy as np import torch +from nff.data.features import ATOM_FEAT_TYPES, BOND_FEAT_TYPES, add_e3fp, featurize_atoms, featurize_bonds, make_rd_mols +from nff.data.graphs import add_bond_idx, kj_ji_to_dset from nff.utils import fprint -from nff.data.features import make_rd_mols, featurize_bonds, featurize_atoms, add_e3fp, BOND_FEAT_TYPES, ATOM_FEAT_TYPES -from nff.data.graphs import kj_ji_to_dset, add_bond_idx - NUM_PROCS = 5 @@ -277,7 +277,7 @@ def add_e3fp_parallel(dataset, fp_length, num_procs): def add_kj_ji_parallel(dataset, num_procs): - fprint((f"Adding kj and ji indices with {num_procs} " "parallel processes")) + fprint(f"Adding kj and ji indices with {num_procs} " "parallel processes") datasets = split_dataset(dataset=dataset, num=num_procs) datasets = kj_ji_parallel(datasets) @@ -286,7 +286,7 @@ def add_kj_ji_parallel(dataset, num_procs): def add_bond_idx_parallel(dataset, num_procs): - fprint((f"Adding bond indices with {num_procs} " "parallel processes")) + fprint(f"Adding bond indices with {num_procs} " "parallel processes") datasets = split_dataset(dataset=dataset, num=num_procs) datasets = bond_idx_parallel(datasets) diff --git a/nff/data/sampling.py b/nff/data/sampling.py index 906a4869..fdaa386b 100644 --- a/nff/data/sampling.py +++ b/nff/data/sampling.py @@ -5,11 +5,11 @@ import torch from tqdm import tqdm +from nff.data import Dataset from nff.train.loss import batch_zhu_p from nff.utils import constants as const -from nff.utils.misc import cat_props -from nff.data import Dataset from nff.utils.geom import compute_distances +from nff.utils.misc import cat_props def get_spec_dic(props): diff --git a/nff/data/sparse.py b/nff/data/sparse.py index ba1db993..b5496952 100644 --- a/nff/data/sparse.py +++ b/nff/data/sparse.py @@ -16,8 +16,7 @@ def sparsify_tensor(tensor): if len(ij) > 0: v = tensor[ij[:, 0], ij[:, 1]] return sp.FloatTensor(ij.t(), v, tensor.size()) - else: - return 0 + return 0 def sparsify_array(array): diff --git a/nff/data/utils.py b/nff/data/utils.py index 36179991..1d98871e 100644 --- a/nff/data/utils.py +++ b/nff/data/utils.py @@ -35,7 +35,7 @@ def get_md17_dataset(molecule, cutoff=5.0): "azobenzene_dft": "C1=CC=C(N=NC2=CC=CC=C2)C=C1", } - if molecule not in smiles_dict.keys(): + if molecule not in smiles_dict: raise ValueError("Incorrect value for molecule. Must be one of: ", list(smiles_dict.keys())) # make tmpdir to save npz file diff --git a/nff/io/ase_ax.py b/nff/io/ase_ax.py index 2f5b6120..279636c2 100644 --- a/nff/io/ase_ax.py +++ b/nff/io/ase_ax.py @@ -1,19 +1,17 @@ import numpy as np import torch - from ase import Atoms from ase.calculators.calculator import Calculator, all_changes import nff.utils.constants as const -from nff.train import load_model -from nff.data.sparse import sparsify_array from nff.data import Dataset -from nff.nn.utils import torch_nbr_list -from nff.nn.models.schnet import SchNet, SchNetDiabat +from nff.data.sparse import sparsify_array +from nff.nn.models.cp3d import OnlyBondUpdateCP3D from nff.nn.models.hybridgraph import HybridGraphConv +from nff.nn.models.schnet import SchNet, SchNetDiabat from nff.nn.models.schnet_features import SchNetFeatures -from nff.nn.models.cp3d import OnlyBondUpdateCP3D - +from nff.nn.utils import torch_nbr_list +from nff.train import load_model DEFAULT_CUTOFF = 5.0 DEFAULT_SKIN = 1.0 @@ -263,9 +261,7 @@ def calculate(self, atomsbatch=None, properties=["energy", "forces"], system_cha self.results["forces"] = [] for key in self.output_keys: - assert self.conversion in CONVERSION_DIC, "Unit conversion kcal/mol to {} not supported.".format( - self.conversion - ) + assert self.conversion in CONVERSION_DIC, f"Unit conversion kcal/mol to {self.conversion} not supported." value = prediction[key].detach().cpu().numpy() * CONVERSION_DIC[self.conversion] diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index f71d8150..2cc8561a 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -25,6 +25,7 @@ from nff.io.ase import DEFAULT_DIRECTED, AtomsBatch from nff.nn.models.cp3d import OnlyBondUpdateCP3D from nff.nn.models.hybridgraph import HybridGraphConv +from nff.nn.models.mace import NffScaleMACE from nff.nn.models.schnet import SchNet, SchNetDiabat from nff.nn.models.schnet_features import SchNetFeatures from nff.train.builders.model import load_model @@ -32,7 +33,6 @@ from nff.utils.cuda import batch_detach, batch_to from nff.utils.geom import batch_compute_distance, compute_distances from nff.utils.scatter import compute_grad -from nff.nn.models.mace import NffScaleMACE HARTREE_TO_EV = HARTREE_TO_KCAL_MOL / EV_TO_KCAL_MOL @@ -1045,7 +1045,7 @@ def create_time_dependec_arrays(self, restraint_list, max_steps): kappas = [] eq_vals = [] # in case the restraint does not start at 0 - templist = list(range(0, restraint_list[0]["step"])) + templist = list(range(restraint_list[0]["step"])) steps += templist kappas += [0 for _ in templist] eq_vals += [0 for _ in templist] @@ -1207,12 +1207,12 @@ def calculate( self.results["stress"] = stress * (1 / atoms.get_volume()) with open("colvar", "a") as f: - f.write("{} ".format(self.step * 0.5)) + f.write(f"{self.step * 0.5} ") # ARREGLAR, SI YA ESTA CALCULADO PARA QUE RECALCULAR LA CVS for cv in self.hr.cvs: curr_cv_val = float(cv.get_value(torch.tensor(atoms.get_positions(), device=self.device))) - f.write(" {:.6f} ".format(curr_cv_val)) - f.write("{:.6f} \n".format(float(bias_energy))) + f.write(f" {curr_cv_val:.6f} ") + f.write(f"{float(bias_energy):.6f} \n") @classmethod def from_file(cls, model_path, device="cuda", **kwargs): diff --git a/nff/io/ase_utils.py b/nff/io/ase_utils.py index 2d9446ef..3ac70b2a 100644 --- a/nff/io/ase_utils.py +++ b/nff/io/ase_utils.py @@ -491,11 +491,10 @@ def step(self, f=None): g = -f if self.use_line_search: raise NotImplementedError("Not yet implemented wdith line search") - else: - self.force_calls += 1 - self.function_calls += 1 - steplengths = (self.p**2).sum(1) ** 0.5 - dr = self.determine_step(dr=self.p, steplengths=steplengths, f=f) * self.damping + self.force_calls += 1 + self.function_calls += 1 + steplengths = (self.p**2).sum(1) ** 0.5 + dr = self.determine_step(dr=self.p, steplengths=steplengths, f=f) * self.damping self.atoms.set_positions(r + dr) diff --git a/nff/io/bias_calculators.py b/nff/io/bias_calculators.py index bc9ab57f..3a0c651e 100644 --- a/nff/io/bias_calculators.py +++ b/nff/io/bias_calculators.py @@ -1,19 +1,17 @@ -import numpy as np -from typing import Union, Tuple +from typing import Tuple, Union -from ase.calculators.calculator import Calculator, all_changes +import numpy as np from ase import units +from ase.calculators.calculator import Calculator, all_changes import nff.utils.constants as const -from nff.utils.cuda import batch_to - from nff.io.ase_calcs import NeuralFF, check_directed from nff.md.colvars import ColVar as CV - -from nff.nn.models.schnet import SchNet, SchNetDiabat +from nff.nn.models.cp3d import OnlyBondUpdateCP3D from nff.nn.models.hybridgraph import HybridGraphConv +from nff.nn.models.schnet import SchNet, SchNetDiabat from nff.nn.models.schnet_features import SchNetFeatures -from nff.nn.models.cp3d import OnlyBondUpdateCP3D +from nff.utils.cuda import batch_to DEFAULT_CUTOFF = 5.0 DEFAULT_DIRECTED = False diff --git a/nff/io/chgnet.py b/nff/io/chgnet.py index 3e301168..4e3c19dd 100644 --- a/nff/io/chgnet.py +++ b/nff/io/chgnet.py @@ -60,7 +60,7 @@ def convert_nff_to_chgnet_structure_data( def convert_data_batch( - data_batch: Dict, # noqa: FA100 + data_batch: Dict, cutoff: float = 5.0, shuffle: bool = True, ): diff --git a/nff/io/cprop.py b/nff/io/cprop.py index ae7e2c60..6251d417 100644 --- a/nff/io/cprop.py +++ b/nff/io/cprop.py @@ -4,6 +4,7 @@ import json import os + import numpy as np from nff.utils import bash_command, fprint diff --git a/nff/io/mace.py b/nff/io/mace.py index 56746cc9..467f1094 100644 --- a/nff/io/mace.py +++ b/nff/io/mace.py @@ -1,7 +1,8 @@ import logging import os import urllib -from typing import Dict, Iterable, List, Tuple, Union +from collections.abc import Iterable +from typing import Dict, List, Tuple, Union import numpy as np import torch @@ -311,10 +312,10 @@ def get_example(self, idx: int) -> Data: if self.__slices__ is None: raise RuntimeError( - ( + "Cannot reconstruct data list from batch because the batch " "object was not created using `Batch.from_data_list()`." - ) + ) data = {} diff --git a/nff/io/openmm_calculators.py b/nff/io/openmm_calculators.py index 5f970177..1939cbb6 100644 --- a/nff/io/openmm_calculators.py +++ b/nff/io/openmm_calculators.py @@ -1,18 +1,16 @@ -import numpy as np -from typing import Union, Tuple - -from ase.calculators.calculator import Calculator, all_changes -from ase import units +from typing import Tuple, Union +import numpy as np +import openmm as omm import openmm.app as app import openmm.unit as unit -import openmm as omm import parmed as pmd +from ase import units +from ase.calculators.calculator import Calculator, all_changes import nff.utils.constants as const from nff.md.colvars import ColVar - nonbondedMethod = { "NonPeriodic": app.CutoffNonPeriodic, } @@ -54,7 +52,7 @@ def __init__( # for a list with parm7 and rst7 parm = pmd.load_file(mmparms["parm7"], mmparms["rst7"]) else: - raise NotImplemented + raise NotImplementedError # in case we need PBC, the pdb contains the box values app.PDBFile(mmparms["pdb"]) diff --git a/nff/md/aims/calcs/basis.py b/nff/md/aims/calcs/basis.py index a9ad6f49..8ed3fff6 100644 --- a/nff/md/aims/calcs/basis.py +++ b/nff/md/aims/calcs/basis.py @@ -1,8 +1,9 @@ -from torch.utils.data import DataLoader -import torch -import numpy as np import copy +import numpy as np +import torch +from torch.utils.data import DataLoader + from nff.data import Dataset, collate_dicts from nff.train.evaluate import evaluate @@ -177,8 +178,7 @@ def tile_params(r_i, r_j, p_i, p_j, alpha_i, alpha_j, m_i=None, m_j=None): expand_mj = m_j.reshape(1, 1, N_at, 1).expand(N_J, N_I, N_at, 3).transpose(0, 1) return (expand_r_i, expand_r_j, expand_p_i, expand_p_j, expand_alpha_i, expand_alpha_j, expand_mi, expand_mj) - else: - return (expand_r_i, expand_r_j, expand_p_i, expand_p_j, expand_alpha_i, expand_alpha_j) + return (expand_r_i, expand_r_j, expand_p_i, expand_p_j, expand_alpha_i, expand_alpha_j) def get_overlaps(r_i, r_j, alpha_i, alpha_j, p_i, p_j): @@ -823,47 +823,46 @@ def find_spawn( def rescale(p_new, m, diabatic, results, old_surf, new_surf): if diabatic: raise NotImplementedError - else: - # p has dimension N_J x N_at x 3 - # nacv has dimension N_J x N_at x 3 + # p has dimension N_J x N_at x 3 + # nacv has dimension N_J x N_at x 3 - nacv = results[f"nacv_{old_surf}{new_surf}"] - norm = (nacv**2).sum(-1) ** 0.5 - nacv_unit = nacv / norm + nacv = results[f"nacv_{old_surf}{new_surf}"] + norm = (nacv**2).sum(-1) ** 0.5 + nacv_unit = nacv / norm - # dot product - projection = (nacv_unit * p_new).sum(-1) + # dot product + projection = (nacv_unit * p_new).sum(-1) - # p_parallel - N_J, N_at = projection.shape - p_par = projection.reshape(N_J, N_at, 1) * nacv_unit + # p_parallel + N_J, N_at = projection.shape + p_par = projection.reshape(N_J, N_at, 1) * nacv_unit - # p perpendicular - p_perp = p_new - p_par + # p perpendicular + p_perp = p_new - p_par - # get energies before and after hop - # m has shape N_at - # is this right? + # get energies before and after hop + # m has shape N_at + # is this right? - t_old = (p_new**2 / (2 * m.reshape(1, -1, 1))).sum() - t_old_perp = (p_perp**2 / (2 * m.reshape(1, -1, 1))).sum() - t_old_par = (p_par**2 / (2 * m.reshape(1, -1, 1))).sum() - v_old = results[f"energy_{old_surf}"] - v_new = results[f"energy_{new_surf}"] + t_old = (p_new**2 / (2 * m.reshape(1, -1, 1))).sum() + t_old_perp = (p_perp**2 / (2 * m.reshape(1, -1, 1))).sum() + t_old_par = (p_par**2 / (2 * m.reshape(1, -1, 1))).sum() + v_old = results[f"energy_{old_surf}"] + v_new = results[f"energy_{new_surf}"] - # re-scale p_parallel - # not 100% sure if this is right + # re-scale p_parallel + # not 100% sure if this is right - scale_sq = (t_old + v_old - (t_old_perp + v_new)) / t_old_par + scale_sq = (t_old + v_old - (t_old_perp + v_new)) / t_old_par - if scale_sq < 0: - # kinetic energy can't compensate the change in - # potential energy - return None + if scale_sq < 0: + # kinetic energy can't compensate the change in + # potential energy + return None - scale = scale_sq**0.5 + scale = scale_sq**0.5 - new_p = p_par * scale + p_perp + new_p = p_par * scale + p_perp return new_p diff --git a/nff/md/ci/opt.py b/nff/md/ci/opt.py index 268685ed..0ba5c2e0 100644 --- a/nff/md/ci/opt.py +++ b/nff/md/ci/opt.py @@ -1,30 +1,32 @@ -from nff.utils.cuda import batch_to -from nff.utils import constants as const -from nff.train import load_model -from nff.nn.tensorgrad import get_schnet_hessians -from nff.io.ase_ax import AtomsBatch, NeuralFF -from nff.data import Dataset, collate_dicts -from torch.utils.data import DataLoader -from rdkit import Chem +import copy +import json +import os +import pdb +import sys + +import django +import numpy as np +from ase import optimize, units +from ase.io.trajectory import Trajectory as AseTrajectory +from ase.md.verlet import VelocityVerlet +from django.contrib.auth.models import Group +from django.contrib.contenttypes.models import ContentType +from django.utils import timezone +from jobs.models import Job, JobConfig +from neuralnet.utils import vib from pgmols.models import ( Geom, Method, ) -from neuralnet.utils import vib -from jobs.models import Job, JobConfig -from django.utils import timezone -from django.contrib.contenttypes.models import ContentType -from django.contrib.auth.models import Group -from ase.md.verlet import VelocityVerlet -from ase.io.trajectory import Trajectory as AseTrajectory -from ase import optimize, units -import numpy as np -import pdb -import json -import copy -import django -import os -import sys +from rdkit import Chem +from torch.utils.data import DataLoader + +from nff.data import Dataset, collate_dicts +from nff.io.ase_ax import AtomsBatch, NeuralFF +from nff.nn.tensorgrad import get_schnet_hessians +from nff.train import load_model +from nff.utils import constants as const +from nff.utils.cuda import batch_to sys.path.append("/home/saxelrod/htvs-ax/htvs") @@ -205,8 +207,8 @@ def opt_ci(model, nxyz, penalty=0.5, lower_idx=0, upper_idx=1, method="BFGS", st atoms.set_calculator(init_calc) ref_energy = atoms.get_potential_energy().item() * const.EV_TO_KCAL_MOL - lower_key = "energy_{}".format(lower_idx) - upper_key = "energy_{}".format(upper_idx) + lower_key = f"energy_{lower_idx}" + upper_key = f"energy_{upper_idx}" set_ci_calc( atoms=atoms, model=model, lower_key=lower_key, upper_key=upper_key, ref_energy=ref_energy, penalty=penalty @@ -310,7 +312,7 @@ def opt_and_sample_ci( model=model, nxyz=nxyz, penalty=penalty, lower_idx=lower_idx, upper_idx=upper_idx, method=method, steps=steps ) - energy_keys = ["energy_{}".format(lower_idx), "energy_{}".format(upper_idx)] + energy_keys = [f"energy_{lower_idx}", f"energy_{upper_idx}"] lower_atoms, upper_atoms = sample_ci( ci_atoms=ci_atoms, model=model, cutoff=cutoff, energy_keys=energy_keys, device=device, kt=KT @@ -342,8 +344,8 @@ def test(): kt=KT, ) - lower_calc = NeuralFF(model=model, output_keys=["energy_{}".format(lower_idx)]) - upper_calc = NeuralFF(model=model, output_keys=["energy_{}".format(upper_idx)]) + lower_calc = NeuralFF(model=model, output_keys=[f"energy_{lower_idx}"]) + upper_calc = NeuralFF(model=model, output_keys=[f"energy_{upper_idx}"]) lower_atoms.set_calculator(lower_calc) upper_atoms.set_calculator(upper_calc) @@ -356,21 +358,21 @@ def test(): def run_ci_md(model, lower_atoms, upper_atoms, lower_idx, upper_idx, base_name="test", dt=0.5, tmax=500): - lower_calc = NeuralFF(model=model, output_keys=["energy_{}".format(lower_idx)]) - upper_calc = NeuralFF(model=model, output_keys=["energy_{}".format(upper_idx)]) + lower_calc = NeuralFF(model=model, output_keys=[f"energy_{lower_idx}"]) + upper_calc = NeuralFF(model=model, output_keys=[f"energy_{upper_idx}"]) lower_atoms.set_calculator(lower_calc) upper_atoms.set_calculator(upper_calc) - lower_log = "{}_lower.log".format(base_name) - lower_trj_name = "{}_lower.traj".format(base_name) + lower_log = f"{base_name}_lower.log" + lower_trj_name = f"{base_name}_lower.traj" num_steps = int(tmax / dt) lower_integrator = VelocityVerlet(lower_atoms, dt=dt * units.fs, logfile=lower_log, trajectory=lower_trj_name) lower_integrator.run(num_steps) - upper_log = "{}_upper.log".format(base_name) - upper_trj_name = "{}_upper.traj".format(base_name) + upper_log = f"{base_name}_upper.log" + upper_trj_name = f"{base_name}_upper.traj" upper_integrator = VelocityVerlet(upper_atoms, dt=dt * units.fs, logfile=upper_log, trajectory=upper_trj_name) upper_integrator.run(num_steps) @@ -523,8 +525,8 @@ def to_db( md_job.details = md_details md_job.save() - lower_key = "energy_{}".format(lower_idx) - upper_key = "energy_{}".format(upper_idx) + lower_key = f"energy_{lower_idx}" + upper_key = f"energy_{upper_idx}" best_atoms = [] # pdb.set_trace() @@ -573,7 +575,7 @@ def make_plots(): smiles = "c1ccc(/N=N\\c2ccccc2)cc1" group = Group.objects.get(name="switches") parentgeom = Geom.objects.filter(species__smiles=smiles, species__group=group, converged=True).first() - trj_name = "{}_upper.traj".format(parentgeom.id) + trj_name = f"{parentgeom.id}_upper.traj" print(trj_name) return diff --git a/nff/md/colvars.py b/nff/md/colvars.py index 3bda7cda..cfb95aaa 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -1,14 +1,15 @@ -from torch import nn +import itertools as itertools from itertools import repeat -from torch.nn import ModuleDict from typing import Union -import itertools as itertools + import numpy as np import torch +from torch import nn +from torch.nn import ModuleDict -from nff.utils.scatter import compute_grad from nff.train import load_model from nff.utils.cuda import batch_to +from nff.utils.scatter import compute_grad class ColVar(torch.nn.Module): @@ -45,24 +46,13 @@ def __init__(self, info_dict: dict): super(ColVar, self).__init__() self.info_dict = info_dict - if "name" not in info_dict.keys(): + if "name" not in info_dict: raise TypeError('CV definition is missing the key "name"!') if self.info_dict["name"] not in self.implemented_cvs: raise NotImplementedError(f"The CV {self.info_dict['name']} is not implemented!") - if self.info_dict["name"] == "Sp": - self.Oacid = torch.tensor(self.info_dict["x"]) - self.Owater = torch.tensor(self.info_dict["y"]) - self.H = torch.tensor(self.info_dict["z"]) - self.Box = torch.tensor(self.info_dict.get("box", None)) - self.O = torch.cat((Oacid, Owater)) - self.do = self.info_dict["dcv1"] - self.d = self.info_dict["dcv2"] - self.ro = self.info_dict["acidhyd"] - self.r1 = self.info_dict["waterhyd"] - - elif self.info_dict["name"] == "Sd": + if self.info_dict["name"] == "Sp" or self.info_dict["name"] == "Sd": self.Oacid = torch.tensor(self.info_dict["x"]) self.Owater = torch.tensor(self.info_dict["y"]) self.H = torch.tensor(self.info_dict["z"]) @@ -88,11 +78,7 @@ def __init__(self, info_dict: dict): self.mol_inds = torch.LongTensor(self.info_dict["indices"]) self.reference_inds = self.info_dict["reference"] - elif self.info_dict["name"] == "projecting_veconplane": - self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) - self.ring_inds = torch.LongTensor(self.info_dict["ring_inds"]) - - elif self.info_dict["name"] == "projecting_veconplanenormal": + elif self.info_dict["name"] == "projecting_veconplane" or self.info_dict["name"] == "projecting_veconplanenormal": self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) self.ring_inds = torch.LongTensor(self.info_dict["ring_inds"]) diff --git a/nff/md/nms.py b/nff/md/nms.py index 0b49f385..5d255e71 100644 --- a/nff/md/nms.py +++ b/nff/md/nms.py @@ -1,30 +1,30 @@ -from tqdm import tqdm -import numpy as np -import os import copy +import os import pickle -from rdkit import Chem import shutil -from torch.utils.data import DataLoader -from torch.nn.modules.container import ModuleDict +import numpy as np from ase import optimize, units -from ase.md.verlet import VelocityVerlet from ase.io.trajectory import Trajectory as AseTrajectory -from ase.vibrations import Vibrations -from ase.units import kg, kB, mol, J, m +from ase.md.verlet import VelocityVerlet from ase.thermochemistry import IdealGasThermo +from ase.units import J, kB, kg, m, mol +from ase.vibrations import Vibrations +from rdkit import Chem +from torch.nn.modules.container import ModuleDict +from torch.utils.data import DataLoader +from tqdm import tqdm -from nff.io.ase_ax import NeuralFF, AtomsBatch -from nff.train import load_model -from nff.data import collate_dicts, Dataset +from nff.data import Dataset, collate_dicts +from nff.io.ase_ax import AtomsBatch, NeuralFF from nff.md import nve -from nff.utils.constants import FS_TO_AU, ASE_TO_FS, EV_TO_AU, BOHR_RADIUS -from nff.utils import constants as const -from nff.nn.tensorgrad import get_schnet_hessians -from nff.utils.cuda import batch_to from nff.nn.models.schnet import SchNet +from nff.nn.tensorgrad import get_schnet_hessians from nff.nn.tensorgrad import hess_from_atoms as analytical_hess +from nff.train import load_model +from nff.utils import constants as const +from nff.utils.constants import ASE_TO_FS, BOHR_RADIUS, EV_TO_AU, FS_TO_AU +from nff.utils.cuda import batch_to PT = Chem.GetPeriodicTable() PERIODICTABLE = PT @@ -75,7 +75,7 @@ def get_key(iroot, num_states): # otherwise energy with state suffix else: - key = "energy_{}".format(iroot) + key = f"energy_{iroot}" return key @@ -195,13 +195,12 @@ def check_convg(model, loader, energy_key, device, restart_file): neg_freqs = list(filter(lambda x: x < 0, freqs)) num_neg = len(neg_freqs) if num_neg != 0: - print(("Found {} negative frequencies; " "restarting optimization.").format(num_neg)) + print(f"Found {num_neg} negative frequencies; " "restarting optimization.") correct_hessian(restart_file=restart_file, hessian=mode_dic["hess"]) return False, mode_dic - else: - print(("Found no negative frequencies; " "optimization complete.")) + print("Found no negative frequencies; " "optimization complete.") - return True, mode_dic + return True, mode_dic def get_opt_kwargs(params): @@ -368,10 +367,10 @@ def get_orca_form(cc_mat, cc_freqs, n_atoms): matrix = np.asarray(new_mat[:]).reshape(n_tot, n_modes) zero_col = np.asarray([[0]] * len(matrix)) - for i in range(0, n_inactive): + for i in range(n_inactive): matrix = np.insert(matrix, [0], zero_col, axis=1) freqs = np.asarray(pure_freqs[:]) - for i in range(0, n_inactive): + for i in range(n_inactive): freqs = np.insert(freqs, 0, 0) return matrix, freqs * CM_2_AU @@ -786,7 +785,7 @@ def mrrho_quants( potentialenergy = ase_atoms.get_potential_energy() if flip_all_but_ts: - print(("Flipping all imaginary frequencies except " "the lowest one")) + print("Flipping all imaginary frequencies except " "the lowest one") abs_freqs = abs(freqs[1:]) else: diff --git a/nff/md/nve.py b/nff/md/nve.py index 283626ab..1e4135c9 100644 --- a/nff/md/nve.py +++ b/nff/md/nve.py @@ -129,8 +129,7 @@ def check_restart(self): return self.steps - else: - return self.steps + return self.steps def setup_restart(self, restart_param): """If you want to restart a simulations with predfined mdparams but @@ -199,9 +198,9 @@ def run(self): for step in range(epochs): T = self.atomsbatch.get_batch_kinetic_energy() / (1.5 * units.kB * self.atomsbatch.num_atoms) if ( - (T > (10 * self.mdparam["thermostat_params"]["temperature"] / units.kB)).any() - or (T < 1e-1).any() - and self.mdparam.get("stability_check", False) + ((10 * self.mdparam["thermostat_params"]["temperature"] / units.kB) < T).any() + or ((T < 1e-1).any() + and self.mdparam.get("stability_check", False)) ): break diff --git a/nff/md/nvt.py b/nff/md/nvt.py index d8cfb0ca..739bfdc7 100644 --- a/nff/md/nvt.py +++ b/nff/md/nvt.py @@ -90,10 +90,10 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - ( + "WARNING: velocity not set to zero for any atoms in constraint " "%s; do not know how to find its fixed indices." % constraint - ) + ) if not fixed_idx: @@ -409,10 +409,10 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - ( + "WARNING: velocity not set to zero for any atoms in constraint " "%s; do not know how to find its fixed indices." % constraint - ) + ) if not fixed_idx: @@ -586,10 +586,10 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - ( + "WARNING: velocity not set to zero for any atoms in constraint " "%s; do not know how to find its fixed indices." % constraint - ) + ) if not fixed_idx: @@ -753,10 +753,10 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - ( + "WARNING: velocity not set to zero for any atoms in constraint " "%s; do not know how to find its fixed indices." % constraint - ) + ) if not fixed_idx: diff --git a/nff/md/nvt_ax.py b/nff/md/nvt_ax.py index 316c75b4..c1cd0a80 100644 --- a/nff/md/nvt_ax.py +++ b/nff/md/nvt_ax.py @@ -1,11 +1,11 @@ -import os -import numpy as np import math +import os -from ase.md.md import MolecularDynamics -from ase.optimize.optimize import Dynamics +import numpy as np from ase import units +from ase.md.md import MolecularDynamics from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary, ZeroRotation +from ase.optimize.optimize import Dynamics class NoseHoover(MolecularDynamics): diff --git a/nff/md/special_thermostats.py b/nff/md/special_thermostats.py index 1c826586..54150f64 100644 --- a/nff/md/special_thermostats.py +++ b/nff/md/special_thermostats.py @@ -1,11 +1,11 @@ import os -import numpy as np -from tqdm import tqdm -from ase.optimize.optimize import Dynamics -from ase.md.md import MolecularDynamics +import numpy as np from ase import units +from ase.md.md import MolecularDynamics from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary, ZeroRotation +from ase.optimize.optimize import Dynamics +from tqdm import tqdm class TempRamp(MolecularDynamics): @@ -94,10 +94,10 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - ( + "WARNING: velocity not set to zero for any atoms in constraint " "%s; do not know how to find its fixed indices." % constraint - ) + ) if not fixed_idx: diff --git a/nff/md/tully/ab_dynamics.py b/nff/md/tully/ab_dynamics.py index 44235827..130dc512 100644 --- a/nff/md/tully/ab_dynamics.py +++ b/nff/md/tully/ab_dynamics.py @@ -3,16 +3,17 @@ """ import argparse -import shutil -import os +import copy import math +import os +import shutil + import numpy as np from ase import Atoms -import copy -from nff.md.tully.dynamics import NeuralTully, TULLY_LOG_FILE, TULLY_SAVE_FILE -from nff.md.tully.io import load_json, coords_to_xyz from nff.md.tully.ab_io import get_results as ab_results +from nff.md.tully.dynamics import TULLY_LOG_FILE, TULLY_SAVE_FILE, NeuralTully +from nff.md.tully.io import coords_to_xyz, load_json from nff.utils import constants as const diff --git a/nff/md/tully/ab_io.py b/nff/md/tully/ab_io.py index c6979f5b..452709b7 100644 --- a/nff/md/tully/ab_io.py +++ b/nff/md/tully/ab_io.py @@ -1,16 +1,15 @@ -import os +import copy import json -from jinja2 import Template -from rdkit import Chem +import os import time -import numpy as np -import copy +import numpy as np from chemconfigs.parsers.qchem import get_cis_grads, get_nacv, get_sf_energies +from jinja2 import Template +from rdkit import Chem from nff.utils.misc import bash_command - CONFIG_DIRS = { "bhhlyp_6-31gs_sf_tddft_engrad_qchem": "qchem/bhhlyp_6-31gs_sf_tddft_engrad", "bhhlyp_6-31gs_sf_tddft_nacv_qchem": "qchem/bhhlyp_6-31gs_sf_tddft_nacv", diff --git a/nff/md/tully/dynamics.py b/nff/md/tully/dynamics.py index cd4319e3..928748bb 100644 --- a/nff/md/tully/dynamics.py +++ b/nff/md/tully/dynamics.py @@ -137,7 +137,7 @@ def setup_save(self): def init_decoherence(self, params): if not params: - return + return None name = params["name"] kwargs = params.get("kwargs", {}) @@ -191,9 +191,9 @@ def init_sigma(self): @property def U(self): if not self.props: - return + return None if "U" not in self.props: - return + return None return self.props["U"] @U.setter @@ -238,7 +238,7 @@ def nacv(self): continue key = f"nacv_{i}{j}" if key not in self.props: - return + return None _nacv[:, i, j, :] = self.props[key] return _nacv @@ -273,7 +273,7 @@ def force_nacv(self): nacv = self.nacv if nacv is None: - return + return None gap = self.gap.reshape(self.num_samples, self.num_states, self.num_states, 1, 1) @@ -338,7 +338,7 @@ def full_pot_V(self): @property def H_plus_nacv(self): if self.nacv is None: - return + return None pot_V = self.pot_V nac_term = -1j * (self.nacv * self.vel.reshape(self.num_samples, 1, 1, self.num_atoms, 3)).sum((-1, -2)) @@ -349,7 +349,7 @@ def H_d(self): diabat_keys = getattr(self, "diabat_keys", [None]) reshaped = np.array(diabat_keys).reshape(-1).tolist() if not all([i in self.props for i in reshaped]): - return + return None _H_d = np.zeros((self.num_samples, self.num_diabat, self.num_diabat)) diff --git a/nff/md/tully/io.py b/nff/md/tully/io.py index 1cda996e..43836ec3 100644 --- a/nff/md/tully/io.py +++ b/nff/md/tully/io.py @@ -6,19 +6,18 @@ import json import os -import torch -from torch.utils.data import DataLoader import numpy as np - -from rdkit import Chem +import torch from ase import Atoms +from rdkit import Chem +from torch.utils.data import DataLoader -from nff.train import batch_to, batch_detach -from nff.nn.utils import single_spec_nbrs from nff.data import Dataset, collate_dicts +from nff.io.ase_ax import AtomsBatch, NeuralFF +from nff.nn.utils import single_spec_nbrs +from nff.train import batch_detach, batch_to from nff.utils import constants as const from nff.utils.scatter import compute_grad -from nff.io.ase_ax import NeuralFF, AtomsBatch PERIODICTABLE = Chem.GetPeriodicTable() ANGLE_MODELS = ["DimeNet", "DimeNetDiabat", "DimeNetDiabatDelta"] diff --git a/nff/md/tully_multiplicity/dynamics.py b/nff/md/tully_multiplicity/dynamics.py index 9b68bf29..1bc09928 100644 --- a/nff/md/tully_multiplicity/dynamics.py +++ b/nff/md/tully_multiplicity/dynamics.py @@ -8,37 +8,34 @@ time, so we need to use PyTorch to do it efficiently. """ -import numpy as np -import pickle -import os import copy import json -import random import math -from functools import partial +import os +import pickle +import random import shutil - -from tqdm import tqdm - +from functools import partial from typing import * -from ase.io.trajectory import Trajectory +import numpy as np from ase import Atoms +from ase.io.trajectory import Trajectory +from tqdm import tqdm -from nff.train import load_model -from nff.utils import constants as const -from nff.md.utils_ax import atoms_to_nxyz -from nff.md.tully_multiplicity.io import get_results, load_json, get_atoms +from nff.md.nvt_ax import NoseHoover, NoseHooverChain +from nff.md.tully_multiplicity.io import get_atoms, get_results, load_json from nff.md.tully_multiplicity.step import ( + adiabatic_c, + get_p_hop, + truhlar_decoherence, try_hop, verlet_step_1, verlet_step_2, - truhlar_decoherence, - adiabatic_c, - get_p_hop, ) - -from nff.md.nvt_ax import NoseHoover, NoseHooverChain +from nff.md.utils_ax import atoms_to_nxyz +from nff.train import load_model +from nff.utils import constants as const METHOD_DIC = {"nosehoover": NoseHoover, "nosehooverchain": NoseHooverChain} @@ -206,7 +203,7 @@ def setup_save(self): def init_decoherence(self, params): if not params: - return + return None name = params["name"] kwargs = params.get("kwargs", {}) @@ -307,7 +304,7 @@ def get_nacv(self): if adiabat1 == adiabat2: continue - elif adiabat1[0] != adiabat2[0]: + if adiabat1[0] != adiabat2[0]: # checks for the same degeneracy continue @@ -336,7 +333,7 @@ def get_force_nacv(self): nacv = self.nacv if nacv is None: - return + return None gap = self.gap.reshape(self.num_samples, self.num_states, self.num_states, 1, 1) @@ -438,7 +435,7 @@ def get_U(self): def get_H_plus_nacv(self): if self.nacv is None: - return + return None # pot_V = self.pot_V H_hmc = self.H_hmc nac_term = -1j * (self.nacv * self.vel.reshape(self.num_samples, 1, 1, self.num_atoms, 3)).sum((-1, -2)) diff --git a/nff/md/tully_multiplicity/io.py b/nff/md/tully_multiplicity/io.py index d5704d6d..f53dd8d0 100644 --- a/nff/md/tully_multiplicity/io.py +++ b/nff/md/tully_multiplicity/io.py @@ -5,21 +5,19 @@ import json import os - from typing import * -import torch -from torch.utils.data import DataLoader import numpy as np - -from rdkit import Chem +import torch from ase import Atoms +from rdkit import Chem +from torch.utils.data import DataLoader -from nff.train import batch_to, batch_detach -from nff.nn.utils import single_spec_nbrs from nff.data import Dataset, collate_dicts +from nff.io.ase_ax import AtomsBatch, NeuralFF +from nff.nn.utils import single_spec_nbrs +from nff.train import batch_detach, batch_to from nff.utils import constants as const -from nff.io.ase_ax import NeuralFF, AtomsBatch PERIODICTABLE = Chem.GetPeriodicTable() ANGLE_MODELS = ["DimeNet", "DimeNetDiabat", "DimeNetDiabatDelta"] @@ -86,10 +84,7 @@ def concat_and_conv(results_list, num_atoms): val = val.reshape(*grad_shape) elif "energy" in key: val *= conv["energy"] - elif ("nacv" in key or "NACV" in key) and "grad" in key: - val *= conv["_grad"] - val = val.reshape(*grad_shape) - elif "NACP" in key and "grad" in key: + elif (("nacv" in key or "NACV" in key) and "grad" in key) or ("NACP" in key and "grad" in key): val *= conv["_grad"] val = val.reshape(*grad_shape) elif "soc" in key or "SOC" in key: diff --git a/nff/md/utils_ax.py b/nff/md/utils_ax.py index 16984ffa..dfeecd81 100644 --- a/nff/md/utils_ax.py +++ b/nff/md/utils_ax.py @@ -1,10 +1,9 @@ -import os -import numpy as np +import copy import csv import json -import copy - +import os +import numpy as np from ase import units from ase.md import MDLogger @@ -27,11 +26,11 @@ def get_energy(atoms): # ekin = ekin.detach().numpy() print( - ( + "Energy per atom: Epot = %.2fkcal/mol " "Ekin = %.2fkcal/mol (T=%3.0fK) " "Etot = %.2fkcal/mol" % (epot, ekin, Temperature, epot + ekin) - ) + ) # print('Energy per atom: Epot = %.5feV Ekin = %.5feV (T=%3.0fK) ' # 'Etot = %.5feV' % (epot, ekin, Temperature, (epot + ekin))) @@ -60,7 +59,7 @@ def write_traj(filename, frames): except BaseException: file.write(str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") elif atom.shape[0] == 3: - file.write(("1" + " " + str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + "\n")) + file.write("1" + " " + str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + "\n") else: raise ValueError("wrong format") file.close() diff --git a/nff/nn/glue.py b/nff/nn/glue.py index 6dc706d6..79936acf 100644 --- a/nff/nn/glue.py +++ b/nff/nn/glue.py @@ -1,7 +1,9 @@ import copy + +import numpy as np from torch import nn from torch.nn import ModuleDict, ModuleList -import numpy as np + from nff.train import batch_detach IMPLEMENTED_MODES = ["sum", "mean"] @@ -93,7 +95,7 @@ def forward(self, batch, **kwargs): result_list.append(model(batch=batch, xyz=xyz, **init_kwargs)) combined_results = {} - unique_diabat_keys = list(set((np.array(self.diabat_keys).reshape(-1).tolist()))) + unique_diabat_keys = list(set(np.array(self.diabat_keys).reshape(-1).tolist())) num_models = len(self.models) for key in unique_diabat_keys: for i, result in enumerate(result_list): diff --git a/nff/nn/graphconv.py b/nff/nn/graphconv.py index 93c22f7e..d5bfa3ec 100644 --- a/nff/nn/graphconv.py +++ b/nff/nn/graphconv.py @@ -1,4 +1,5 @@ import torch.nn as nn + from nff.utils.scatter import scatter_add diff --git a/nff/nn/graphop.py b/nff/nn/graphop.py index 6c0f379f..86ffb3cd 100644 --- a/nff/nn/graphop.py +++ b/nff/nn/graphop.py @@ -1,6 +1,7 @@ import torch -from nff.utils.scatter import compute_grad + from nff.nn.modules import ConfAttention +from nff.utils.scatter import compute_grad EPS = 1e-15 @@ -139,12 +140,7 @@ def batch_and_sum(dict_input, N, predict_keys, xyz): # split if key in predict_keys and key + "_grad" not in predict_keys: results[key] = split_and_sum(val, N) - elif key in predict_keys and key + "_grad" in predict_keys: - results[key] = split_and_sum(val, N) - grad = compute_grad(inputs=xyz, output=results[key]) - results[key + "_grad"] = grad - # For the case only predicting gradient - elif key not in predict_keys and key + "_grad" in predict_keys: + elif (key in predict_keys and key + "_grad" in predict_keys) or (key not in predict_keys and key + "_grad" in predict_keys): results[key] = split_and_sum(val, N) grad = compute_grad(inputs=xyz, output=results[key]) results[key + "_grad"] = grad diff --git a/nff/nn/layers.py b/nff/nn/layers.py index c55c960b..e22540d9 100644 --- a/nff/nn/layers.py +++ b/nff/nn/layers.py @@ -491,7 +491,7 @@ def __init__(self, cutoff): self.cutoff = cutoff def forward(self, d): - output = 0.5 * (torch.cos((np.pi * d / self.cutoff)) + 1) + output = 0.5 * (torch.cos(np.pi * d / self.cutoff) + 1) exclude = d >= self.cutoff output[exclude] = 0 diff --git a/nff/nn/models/conformers.py b/nff/nn/models/conformers.py index 6f6ef529..dbf5a6b2 100644 --- a/nff/nn/models/conformers.py +++ b/nff/nn/models/conformers.py @@ -1,12 +1,12 @@ import torch import torch.nn as nn -from nff.nn.layers import DEFAULT_DROPOUT_RATE -from nff.nn.modules import SchNetConv, NodeMultiTaskReadOut, ConfAttention, LinearConfAttention from nff.nn.graphop import conf_pool +from nff.nn.layers import DEFAULT_DROPOUT_RATE +from nff.nn.modules import ConfAttention, LinearConfAttention, NodeMultiTaskReadOut, SchNetConv from nff.nn.utils import construct_sequential -from nff.utils.scatter import compute_grad from nff.utils.confs import split_batch +from nff.utils.scatter import compute_grad class WeightedConformers(nn.Module): @@ -163,7 +163,7 @@ def make_boltz_nn(self, boltzmann_dict): # under the key `layers` will be used to create the corresponding # network - elif boltzmann_dict["type"] == "layers": + if boltzmann_dict["type"] == "layers": layers = boltzmann_dict["layers"] networks.append(construct_sequential(layers)) @@ -352,7 +352,7 @@ def get_external_3d(self, batch, n_conf_list): # features are per-conformer features, return empty tensors if self.extra_feats is None or "conformer" not in self.ext_feat_types: - return + return None # get all the features and split them up by species diff --git a/nff/nn/models/cp3d.py b/nff/nn/models/cp3d.py index e3d2c7ef..9f0977d7 100644 --- a/nff/nn/models/cp3d.py +++ b/nff/nn/models/cp3d.py @@ -1,9 +1,9 @@ -from torch import nn import torch -from nff.data.graphs import get_bond_idx +from torch import nn +from nff.data.graphs import get_bond_idx from nff.nn.models.conformers import WeightedConformers -from nff.nn.modules import ChemPropConv, ChemPropMsgToNode, ChemPropInit, SchNetEdgeFilter, CpSchNetConv +from nff.nn.modules import ChemPropConv, ChemPropInit, ChemPropMsgToNode, CpSchNetConv, SchNetEdgeFilter from nff.utils.tools import make_directed REINDEX_KEYS = ["nbr_list", "bonded_nbr_list"] diff --git a/nff/nn/models/dimenet.py b/nff/nn/models/dimenet.py index c1cc36e8..1ebbfe01 100644 --- a/nff/nn/models/dimenet.py +++ b/nff/nn/models/dimenet.py @@ -253,7 +253,7 @@ def forward(self, batch, xyz=None): else: periodic = bool(offsets.abs().max() != 0) else: - raise Exception("Don't know how to interpret offsets of type {}".format(type(offsets))) + raise Exception(f"Don't know how to interpret offsets of type {type(offsets)}") if periodic: raise NotImplementedError("DimeNet not implemented for PBC.") diff --git a/nff/nn/models/dispersion_models.py b/nff/nn/models/dispersion_models.py index 9db3c00c..15c6ca0a 100644 --- a/nff/nn/models/dispersion_models.py +++ b/nff/nn/models/dispersion_models.py @@ -2,16 +2,15 @@ Models with added empirical dispersion on top """ -import torch import numpy as np +import torch from torch import nn -from nff.nn.models.painn import add_stress -from nff.utils.scatter import compute_grad +from nff.nn.models.painn import Painn, PainnDiabat, add_stress from nff.utils import constants as const -from nff.utils.dispersion import get_dispersion as base_dispersion, grimme_dispersion -from nff.nn.models.painn import Painn -from nff.nn.models.painn import PainnDiabat +from nff.utils.dispersion import get_dispersion as base_dispersion +from nff.utils.dispersion import grimme_dispersion +from nff.utils.scatter import compute_grad class PainnDispersion(nn.Module): diff --git a/nff/nn/models/graphconvintegration.py b/nff/nn/models/graphconvintegration.py index 5f435687..79c4fcb3 100644 --- a/nff/nn/models/graphconvintegration.py +++ b/nff/nn/models/graphconvintegration.py @@ -1,7 +1,7 @@ import torch.nn as nn -from nff.nn.modules import SchNetConv, NodeMultiTaskReadOut from nff.nn.graphop import batch_and_sum +from nff.nn.modules import NodeMultiTaskReadOut, SchNetConv from nff.nn.utils import get_default_readout diff --git a/nff/nn/models/hybridgraph.py b/nff/nn/models/hybridgraph.py index 14c33496..42b32f67 100644 --- a/nff/nn/models/hybridgraph.py +++ b/nff/nn/models/hybridgraph.py @@ -1,10 +1,9 @@ import torch import torch.nn as nn -from nff.nn.modules import SchNetConv, NodeMultiTaskReadOut from nff.nn.graphop import batch_and_sum +from nff.nn.modules import NodeMultiTaskReadOut, SchNetConv from nff.nn.utils import get_default_readout - from nff.utils.scatter import scatter_add diff --git a/nff/nn/models/mace.py b/nff/nn/models/mace.py index 1b0966fe..841e702a 100644 --- a/nff/nn/models/mace.py +++ b/nff/nn/models/mace.py @@ -70,7 +70,7 @@ def forward( compute_virials: bool = False, compute_displacement: bool = False, **kwargs, - ) -> dict: # noqa: W0221 + ) -> dict: """Forward pass through the model and ouput in NFF format Args: @@ -324,7 +324,7 @@ def reduce_foundations( num_conv_tp_weights=4, num_products=2, num_contraction=2, -) -> "NffScaleMACE": +) -> NffScaleMACE: """Reducing the model by extracting elements of interests Refer to the original paper to understand the architecture: "https://openreview.net/forum?id=YPpSngE-ZU" @@ -459,7 +459,7 @@ def restore_foundations( num_conv_tp_weights=4, num_products=2, num_contraction=2, -) -> "NffScaleMACE": +) -> NffScaleMACE: """Restore back to foundational model from reduced model Refer to the original paper to understand the architecture: "https://openreview.net/forum?id=YPpSngE-ZU" diff --git a/nff/nn/models/painn.py b/nff/nn/models/painn.py index 9df17733..c42ab39a 100644 --- a/nff/nn/models/painn.py +++ b/nff/nn/models/painn.py @@ -1,33 +1,33 @@ -from torch import nn -import numpy as np import copy -from nff.utils.tools import make_directed + +import numpy as np +import torch +from torch import nn + +from nff.nn.layers import Diagonalize, ExpNormalBasis +from nff.nn.modules.diabat import AdiabaticReadout, DiabaticReadout from nff.nn.modules.painn import ( - MessageBlock, - UpdateBlock, EmbeddingBlock, + MessageBlock, + NbrEmbeddingBlock, ReadoutBlock, - ReadoutBlock_Vec, - ReadoutBlock_Tuple, ReadoutBlock_Complex, + ReadoutBlock_Tuple, + ReadoutBlock_Vec, TransformerMessageBlock, - NbrEmbeddingBlock, + UpdateBlock, ) from nff.nn.modules.schnet import ( AttentionPool, - SumPool, - MolFpPool, MeanPool, - get_rij, + MolFpPool, + SumPool, add_embedding, add_stress, + get_rij, ) - -from nff.nn.modules.diabat import DiabaticReadout, AdiabaticReadout -from nff.nn.layers import Diagonalize, ExpNormalBasis -from nff.utils.scatter import scatter_add, compute_grad -import torch - +from nff.utils.scatter import compute_grad, scatter_add +from nff.utils.tools import make_directed POOL_DIC = { "sum": SumPool, @@ -224,7 +224,7 @@ def pool(self, batch, atomwise_out, xyz, r_ij, nbrs, inference=False): if inference: atomwise_out = batch_detach(atomwise_out) for key in atomwise_out.keys(): - if key not in all_results.keys(): + if key not in all_results: all_results[key] = atomwise_out[key] return all_results, xyz diff --git a/nff/nn/models/schnet.py b/nff/nn/models/schnet.py index 01861f1e..992774b0 100644 --- a/nff/nn/models/schnet.py +++ b/nff/nn/models/schnet.py @@ -1,13 +1,10 @@ from torch import nn +from nff.nn.graphop import batch_and_sum from nff.nn.layers import DEFAULT_DROPOUT_RATE -from nff.nn.modules import SchNetConv, NodeMultiTaskReadOut, get_rij, add_stress - - +from nff.nn.modules import NodeMultiTaskReadOut, SchNetConv, add_stress, get_rij from nff.nn.modules.diabat import DiabaticReadout -from nff.nn.graphop import batch_and_sum from nff.nn.utils import get_default_readout - from nff.utils.scatter import scatter_add diff --git a/nff/nn/models/schnet_features.py b/nff/nn/models/schnet_features.py index 8bf70a5a..267de820 100644 --- a/nff/nn/models/schnet_features.py +++ b/nff/nn/models/schnet_features.py @@ -3,9 +3,9 @@ from torch.nn import Sequential from nff.data.graphs import get_bond_idx -from nff.nn.models.conformers import WeightedConformers -from nff.nn.modules import SchNetEdgeFilter, MixedSchNetConv from nff.nn.layers import Dense +from nff.nn.models.conformers import WeightedConformers +from nff.nn.modules import MixedSchNetConv, SchNetEdgeFilter from nff.utils.tools import layer_types, make_directed diff --git a/nff/nn/models/spooky.py b/nff/nn/models/spooky.py index c9dbb8d3..84cff622 100644 --- a/nff/nn/models/spooky.py +++ b/nff/nn/models/spooky.py @@ -1,24 +1,23 @@ import torch from torch import nn -from nff.utils.scatter import compute_grad -from nff.utils.tools import make_directed -from nff.utils import constants as const + +from nff.nn.models.spooky_net_source.spookynet import SpookyNet as SourceSpooky +from nff.nn.modules.schnet import get_offsets, get_rij from nff.nn.modules.spooky import ( - DEFAULT_DROPOUT, DEFAULT_ACTIVATION, + DEFAULT_DROPOUT, DEFAULT_MAX_Z, DEFAULT_RES_LAYERS, - CombinedEmbedding, - InteractionBlock, AtomwiseReadout, + CombinedEmbedding, Electrostatics, + InteractionBlock, NuclearRepulsion, get_dipole, ) -from nff.nn.modules.schnet import get_rij, get_offsets - - -from nff.nn.models.spooky_net_source.spookynet import SpookyNet as SourceSpooky +from nff.utils import constants as const +from nff.utils.scatter import compute_grad +from nff.utils.tools import make_directed def default(val, def_val): diff --git a/nff/nn/models/spooky_fast.py b/nff/nn/models/spooky_fast.py index 66a330cb..82d98e86 100644 --- a/nff/nn/models/spooky_fast.py +++ b/nff/nn/models/spooky_fast.py @@ -1,19 +1,20 @@ import torch from torch import nn -from nff.utils.scatter import compute_grad -from nff.utils.tools import make_directed, make_undirected + from nff.nn.modules.spooky_fast import ( - DEFAULT_DROPOUT, DEFAULT_ACTIVATION, + DEFAULT_DROPOUT, DEFAULT_MAX_Z, DEFAULT_RES_LAYERS, - CombinedEmbedding, - InteractionBlock, AtomwiseReadout, + CombinedEmbedding, Electrostatics, + InteractionBlock, NuclearRepulsion, get_dipole, ) +from nff.utils.scatter import compute_grad +from nff.utils.tools import make_directed, make_undirected def default(val, def_val): diff --git a/nff/nn/models/spooky_net_source/functional.py b/nff/nn/models/spooky_net_source/functional.py index 630d612b..767ac708 100644 --- a/nff/nn/models/spooky_net_source/functional.py +++ b/nff/nn/models/spooky_net_source/functional.py @@ -1,4 +1,5 @@ import math + import torch """ diff --git a/nff/nn/models/spooky_net_source/modules/attention.py b/nff/nn/models/spooky_net_source/modules/attention.py index 34592de1..d7817c20 100644 --- a/nff/nn/models/spooky_net_source/modules/attention.py +++ b/nff/nn/models/spooky_net_source/modules/attention.py @@ -1,9 +1,10 @@ -import torch -import torch.nn as nn import math -import numpy as np from typing import Optional +import numpy as np +import torch +import torch.nn as nn + class Attention(nn.Module): """ @@ -139,9 +140,8 @@ def _approximate_attention( one_hot = nn.functional.one_hot(batch_seg).to(dtype=V.dtype, device=V.device) mask = one_hot @ one_hot.transpose(-1, -2) return ((mask * (K @ Q.transpose(-1, -2))).transpose(-1, -2) @ V) / norm - else: - norm = Q @ torch.sum(K, 0, keepdim=True).T + eps - return (Q @ (K.T @ V)) / norm + norm = Q @ torch.sum(K, 0, keepdim=True).T + eps + return (Q @ (K.T @ V)) / norm def forward( self, @@ -178,5 +178,4 @@ def forward( """ if self.num_random_features is None: return self._exact_attention(Q, K, V, num_batch, batch_seg) - else: - return self._approximate_attention(Q, K, V, num_batch, batch_seg, mask) + return self._approximate_attention(Q, K, V, num_batch, batch_seg, mask) diff --git a/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py b/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py index 361fbaf0..8e33b7f2 100644 --- a/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py +++ b/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py @@ -1,6 +1,6 @@ +import numpy as np import torch import torch.nn as nn -import numpy as np class BernsteinPolynomials(nn.Module): @@ -22,7 +22,7 @@ def __init__(self, num_basis_functions: int, cutoff: float) -> None: """Initializes the BernsteinPolynomials class.""" super(BernsteinPolynomials, self).__init__() # compute values to initialize buffers - logfactorial = np.zeros((num_basis_functions)) + logfactorial = np.zeros(num_basis_functions) for i in range(2, num_basis_functions): logfactorial[i] = logfactorial[i - 1] + np.log(i) v = np.arange(0, num_basis_functions) diff --git a/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py b/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py index 550645ca..83a9f434 100644 --- a/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py +++ b/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py @@ -1,10 +1,12 @@ -import os import math +import os +from typing import Optional, Tuple + import torch import torch.nn as nn import torch.nn.functional as F + from ..functional import softplus_inverse, switch_function -from typing import Tuple, Optional """ computes D4 dispersion energy diff --git a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py index edaefa3d..ddeffe49 100644 --- a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py @@ -1,8 +1,10 @@ +from typing import Optional + import torch import torch.nn as nn import torch.nn.functional as F + from .residual_mlp import ResidualMLP -from typing import Optional class ElectronicEmbedding(nn.Module): diff --git a/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py b/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py index e5a3ad95..ac6577ee 100644 --- a/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py +++ b/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py @@ -1,8 +1,10 @@ import math +from typing import Optional + import torch import torch.nn as nn + from ..functional import switch_function -from typing import Optional """ computes electrostatic energy, switches between a constant value @@ -202,5 +204,4 @@ def forward( assert cell is not None assert batch_seg is not None return self._ewald(N, q, R, rij, idx_i, idx_j, cell, num_batch, batch_seg) - else: - return self._coulomb(N, q, rij, idx_i, idx_j) + return self._coulomb(N, q, rij, idx_i, idx_j) diff --git a/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py b/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py index bab050d4..111728c7 100644 --- a/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py +++ b/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py @@ -1,7 +1,8 @@ +import numpy as np import torch import torch.nn as nn import torch.nn.functional as F -import numpy as np + from ..functional import softplus_inverse @@ -47,7 +48,7 @@ def __init__( if no_basis_function_at_infinity: # increase number of basis functions by one num_basis_functions += 1 # compute values to initialize buffers - logfactorial = np.zeros((num_basis_functions)) + logfactorial = np.zeros(num_basis_functions) for i in range(2, num_basis_functions): logfactorial[i] = logfactorial[i - 1] + np.log(i) v = np.arange(0, num_basis_functions) @@ -91,5 +92,4 @@ def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: rbf = cutoff_values.view(-1, 1) * torch.exp(x) if self.exp_weighting: return rbf * torch.exp(alphar) - else: - return rbf + return rbf diff --git a/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py b/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py index a8612487..05644e49 100644 --- a/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py +++ b/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py @@ -1,6 +1,7 @@ import torch import torch.nn as nn import torch.nn.functional as F + from ..functional import softplus_inverse @@ -76,5 +77,4 @@ def forward(self, r: torch.Tensor, cutoff_values: torch.Tensor) -> torch.Tensor: rbf = cutoff_values.view(-1, 1) * torch.exp(-self.width * (expalphar - self.center) ** 2) if self.exp_weighting: return rbf * expalphar - else: - return rbf + return rbf diff --git a/nff/nn/models/spooky_net_source/modules/interaction_module.py b/nff/nn/models/spooky_net_source/modules/interaction_module.py index c4b97f74..ee57b122 100644 --- a/nff/nn/models/spooky_net_source/modules/interaction_module.py +++ b/nff/nn/models/spooky_net_source/modules/interaction_module.py @@ -1,10 +1,12 @@ +from typing import Optional, Tuple + import torch import torch.nn as nn -from .residual_stack import ResidualStack + from .local_interaction import LocalInteraction from .nonlocal_interaction import NonlocalInteraction from .residual_mlp import ResidualMLP -from typing import Tuple, Optional +from .residual_stack import ResidualStack class InteractionModule(nn.Module): diff --git a/nff/nn/models/spooky_net_source/modules/local_interaction.py b/nff/nn/models/spooky_net_source/modules/local_interaction.py index 94679711..16ea9121 100644 --- a/nff/nn/models/spooky_net_source/modules/local_interaction.py +++ b/nff/nn/models/spooky_net_source/modules/local_interaction.py @@ -1,5 +1,6 @@ import torch import torch.nn as nn + from .residual_mlp import ResidualMLP diff --git a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py index b672e76a..ba969495 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py @@ -1,7 +1,9 @@ +from typing import Optional + import torch import torch.nn as nn + from .residual_mlp import ResidualMLP -from typing import Optional class NonlinearElectronicEmbedding(nn.Module): diff --git a/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py b/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py index c787c182..aee7db84 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py +++ b/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py @@ -1,8 +1,10 @@ +from typing import Optional + import torch import torch.nn as nn + from .attention import Attention from .residual_mlp import ResidualMLP -from typing import Optional class NonlocalInteraction(nn.Module): diff --git a/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py b/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py index 14fede87..ee99ff26 100644 --- a/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py @@ -1,6 +1,8 @@ import math + import torch import torch.nn as nn + from .electron_configurations import electron_config @@ -66,5 +68,5 @@ def forward(self, Z: torch.Tensor) -> torch.Tensor: self.embedding = self.element_embedding + self.config_linear(self.electron_config) if self.embedding.device.type == "cpu": # indexing is faster on CPUs return self.embedding[Z] - else: # gathering is faster on GPUs - return torch.gather(self.embedding, 0, Z.view(-1, 1).expand(-1, self.num_features)) + # gathering is faster on GPUs + return torch.gather(self.embedding, 0, Z.view(-1, 1).expand(-1, self.num_features)) diff --git a/nff/nn/models/spooky_net_source/modules/residual.py b/nff/nn/models/spooky_net_source/modules/residual.py index 0b7d7bfa..8d83f702 100644 --- a/nff/nn/models/spooky_net_source/modules/residual.py +++ b/nff/nn/models/spooky_net_source/modules/residual.py @@ -1,5 +1,6 @@ import torch import torch.nn as nn + from .shifted_softplus import ShiftedSoftplus from .swish import Swish diff --git a/nff/nn/models/spooky_net_source/modules/residual_mlp.py b/nff/nn/models/spooky_net_source/modules/residual_mlp.py index 32cd89b0..d6e0f867 100644 --- a/nff/nn/models/spooky_net_source/modules/residual_mlp.py +++ b/nff/nn/models/spooky_net_source/modules/residual_mlp.py @@ -1,5 +1,6 @@ import torch import torch.nn as nn + from .residual_stack import ResidualStack from .shifted_softplus import ShiftedSoftplus from .swish import Swish diff --git a/nff/nn/models/spooky_net_source/modules/residual_stack.py b/nff/nn/models/spooky_net_source/modules/residual_stack.py index 2146d08c..004599fe 100644 --- a/nff/nn/models/spooky_net_source/modules/residual_stack.py +++ b/nff/nn/models/spooky_net_source/modules/residual_stack.py @@ -1,5 +1,6 @@ import torch import torch.nn as nn + from .residual import Residual diff --git a/nff/nn/models/spooky_net_source/modules/shifted_softplus.py b/nff/nn/models/spooky_net_source/modules/shifted_softplus.py index a3e68dea..e7faec46 100644 --- a/nff/nn/models/spooky_net_source/modules/shifted_softplus.py +++ b/nff/nn/models/spooky_net_source/modules/shifted_softplus.py @@ -1,4 +1,5 @@ import math + import torch import torch.nn as nn import torch.nn.functional as F diff --git a/nff/nn/models/spooky_net_source/modules/sinc_functions.py b/nff/nn/models/spooky_net_source/modules/sinc_functions.py index 8a9b15db..74aea4fb 100644 --- a/nff/nn/models/spooky_net_source/modules/sinc_functions.py +++ b/nff/nn/models/spooky_net_source/modules/sinc_functions.py @@ -1,4 +1,5 @@ import math + import torch import torch.nn as nn diff --git a/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py b/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py index 6b5e2525..d0ed4a32 100644 --- a/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py +++ b/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py @@ -1,6 +1,7 @@ import torch import torch.nn as nn import torch.nn.functional as F + from ..functional import softplus_inverse diff --git a/nff/nn/models/spooky_net_source/spookynet.py b/nff/nn/models/spooky_net_source/spookynet.py index 96172d51..c2c1fb09 100644 --- a/nff/nn/models/spooky_net_source/spookynet.py +++ b/nff/nn/models/spooky_net_source/spookynet.py @@ -1,9 +1,11 @@ import math +from typing import Optional, Tuple + import torch import torch.nn as nn + from .functional import cutoff_function from .modules import * -from typing import Tuple, Optional # backwards compatibility with old versions of pytorch try: diff --git a/nff/nn/models/spooky_net_source/spookynet_calculator.py b/nff/nn/models/spooky_net_source/spookynet_calculator.py index 15ab5930..aa911a61 100644 --- a/nff/nn/models/spooky_net_source/spookynet_calculator.py +++ b/nff/nn/models/spooky_net_source/spookynet_calculator.py @@ -1,8 +1,9 @@ -import torch import numpy as np -from ase.neighborlist import neighbor_list +import torch from ase.calculators.calculator import Calculator, all_changes +from ase.neighborlist import neighbor_list from sklearn.neighbors import BallTree + from .spookynet import SpookyNet from .spookynet_ensemble import SpookyNetEnsemble @@ -72,7 +73,7 @@ def __init__(self, restart=None, ignore_bad_restart_file=False, label=None, atom self.cell_offsets = None def _nsquared_neighborlist(self, atoms): - if self.N != len(atoms): + if len(atoms) != self.N: self.N = len(atoms) self.positions = np.copy(atoms.positions) self.pbc = np.array([False]) @@ -87,7 +88,7 @@ def _nsquared_neighborlist(self, atoms): def _periodic_neighborlist(self, atoms): if ( - self.N != len(atoms) + len(atoms) != self.N or (self.pbc != atoms.pbc).any() or (self.cell != atoms.cell).any() or ((self.positions - atoms.positions) ** 2).sum(-1).max() > self.skin2 @@ -102,7 +103,7 @@ def _periodic_neighborlist(self, atoms): self.cell_offsets = torch.tensor(cell_offsets, dtype=self.dtype) def _non_periodic_neighborlist(self, atoms): - if self.N != len(atoms) or ((self.positions - atoms.positions) ** 2).sum(-1).max() >= self.skin2: + if len(atoms) != self.N or ((self.positions - atoms.positions) ** 2).sum(-1).max() >= self.skin2: self.N = len(atoms) self.positions = np.copy(atoms.positions) self.pbc = np.array([False]) @@ -146,7 +147,7 @@ def calculate(self, atoms=None, properties=["energy"], system_changes=all_change # send args to GPU if self.use_gpu: - for key in args.keys(): + for key in args: if isinstance(args[key], torch.Tensor): args[key] = args[key].cuda() diff --git a/nff/nn/models/spooky_net_source/spookynet_ensemble.py b/nff/nn/models/spooky_net_source/spookynet_ensemble.py index 8b882bc2..381a097a 100644 --- a/nff/nn/models/spooky_net_source/spookynet_ensemble.py +++ b/nff/nn/models/spooky_net_source/spookynet_ensemble.py @@ -1,7 +1,9 @@ +from typing import List, Optional, Tuple + import torch import torch.nn as nn + from .spookynet import SpookyNet -from typing import List, Tuple, Optional class SpookyNetEnsemble(nn.Module): diff --git a/nff/nn/modules/diabat.py b/nff/nn/modules/diabat.py index a59f1fdc..31794c6d 100644 --- a/nff/nn/modules/diabat.py +++ b/nff/nn/modules/diabat.py @@ -38,7 +38,7 @@ def __init__( def make_cross_talk(self, cross_talk_dic): if cross_talk_dic is None: - return + return None cross_talk = CrossTalk( diabat_keys=self.diabat_keys, @@ -764,12 +764,11 @@ def __init__(self, output_keys, grad_keys, abs_name): def get_abs(self, abs_name): if abs_name == "abs": return abs - elif abs_name is None: + if abs_name is None: return lambda x: x - elif abs_name in layer_types: + if abs_name in layer_types: return layer_types[abs_name]() - else: - raise NotImplementedError + raise NotImplementedError def forward(self, results, xyz): ordered_keys = sorted(self.output_keys, key=lambda x: int(x.split("_")[-1])) diff --git a/nff/nn/modules/dimenet.py b/nff/nn/modules/dimenet.py index 070a44b8..b661677a 100644 --- a/nff/nn/modules/dimenet.py +++ b/nff/nn/modules/dimenet.py @@ -1,9 +1,9 @@ import torch from torch import nn +from nff.nn.layers import Dense from nff.utils.scatter import scatter_add from nff.utils.tools import layer_types -from nff.nn.layers import Dense def get_dense(inp_dim, out_dim, activation, bias): diff --git a/nff/nn/modules/painn.py b/nff/nn/modules/painn.py index 0e3a61a6..d1298e47 100644 --- a/nff/nn/modules/painn.py +++ b/nff/nn/modules/painn.py @@ -1,12 +1,12 @@ import torch from torch import nn -from nff.utils.tools import layer_types -from nff.nn.layers import PainnRadialBasis, CosineEnvelope, Dense -from nff.utils.scatter import scatter_add +from nff.nn.layers import CosineEnvelope, Dense, PainnRadialBasis from nff.nn.modules.schnet import ScaleShift -from nff.nn.modules.torchmd_net import MessageBlock as MDMessage from nff.nn.modules.torchmd_net import EmbeddingBlock as MDEmbedding +from nff.nn.modules.torchmd_net import MessageBlock as MDMessage +from nff.utils.scatter import scatter_add +from nff.utils.tools import layer_types EPS = 1e-15 diff --git a/nff/nn/modules/schnet.py b/nff/nn/modules/schnet.py index 48700b7a..7171adbf 100644 --- a/nff/nn/modules/schnet.py +++ b/nff/nn/modules/schnet.py @@ -1014,7 +1014,7 @@ def sum_and_grad(batch, xyz, r_ij, nbrs, atomwise_output, grad_keys, out_keys=No use_val = val.sum(-1) else: - raise Exception(("Don't know how to handle val shape " "{} for key {}".format(val.shape, key))) + raise Exception("Don't know how to handle val shape " f"{val.shape} for key {key}") pooled_result = scatter_add(use_val, mol_idx, dim_size=dim_size) if mean: diff --git a/nff/nn/modules/spooky_fast.py b/nff/nn/modules/spooky_fast.py index 249aa641..e044931c 100644 --- a/nff/nn/modules/spooky_fast.py +++ b/nff/nn/modules/spooky_fast.py @@ -1,12 +1,13 @@ +import time + import torch from torch import nn -from nff.nn.layers import PreActivation, Dense, zeros_initializer, BatchedPreActivation -from nff.utils.tools import layer_types, make_undirected -from nff.utils.scatter import scatter_add -from nff.utils.constants import ELEC_CONFIG, KE_KCAL, BOHR_RADIUS -from nff.utils import spooky_f_cut, make_y_lm, rho_k -import time +from nff.nn.layers import BatchedPreActivation, Dense, PreActivation, zeros_initializer +from nff.utils import make_y_lm, rho_k, spooky_f_cut +from nff.utils.constants import BOHR_RADIUS, ELEC_CONFIG, KE_KCAL +from nff.utils.scatter import scatter_add +from nff.utils.tools import layer_types, make_undirected EPS = 1e-15 DEFAULT_ACTIVATION = "learnable_swish" diff --git a/nff/nn/modules/torchmd_net.py b/nff/nn/modules/torchmd_net.py index 940a9628..23a49af4 100644 --- a/nff/nn/modules/torchmd_net.py +++ b/nff/nn/modules/torchmd_net.py @@ -1,5 +1,6 @@ import torch from torch import nn + from nff.nn.layers import CosineEnvelope, Dense from nff.utils.scatter import scatter_add from nff.utils.tools import layer_types diff --git a/nff/nn/tensorgrad.py b/nff/nn/tensorgrad.py index 36e8b2e0..32c6c264 100644 --- a/nff/nn/tensorgrad.py +++ b/nff/nn/tensorgrad.py @@ -1,12 +1,12 @@ """Summary""" -import numpy as np import copy import inspect +import numpy as np import torch -from torch.autograd import grad import torch.nn.functional as F +from torch.autograd import grad from torch.utils.data import DataLoader @@ -271,7 +271,7 @@ def results_from_stack(batch, model=None, forward=None, **kwargs): info = inspect.getargspec(forward) if "xyz" not in info.args: raise Exception( - ("Model does not take xyz as input. " "Please modify the model so that it can take " "an external xyz.") + "Model does not take xyz as input. " "Please modify the model so that it can take " "an external xyz." ) results = forward(batch=batch, xyz=xyz, **kwargs) @@ -324,8 +324,7 @@ def hess_from_atoms(atoms): """ - from nff.data import Dataset - from nff.data import collate_dicts + from nff.data import Dataset, collate_dicts from nff.train import batch_to from nff.utils import constants as const diff --git a/nff/nn/utils.py b/nff/nn/utils.py index a7a67de4..668f185d 100644 --- a/nff/nn/utils.py +++ b/nff/nn/utils.py @@ -1,16 +1,16 @@ """Tools to build layers""" import collections -import numpy as np -import torch import copy +import numpy as np +import torch from torch.nn import ModuleDict, Sequential + from nff.nn.activations import shifted_softplus from nff.nn.layers import Dense, Diagonalize from nff.utils.scatter import scatter_add - layer_types = { "linear": torch.nn.Linear, "Tanh": torch.nn.Tanh, @@ -168,7 +168,7 @@ def torch_nbr_list(atomsobject, cutoff, device="cuda:0", directed=True, requires # otherwise, default to the "robust" nbr_list function below for small cells if ( np.all(2 * cutoff < atomsobject.cell.cellpar()[:3]) - and not np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) != 0 + and np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) == 0 ): # "fast" nbr_list function for large cells (pbc) xyz = torch.Tensor(atomsobject.get_positions(wrap=False)).to(device) diff --git a/nff/opt/algos.py b/nff/opt/algos.py index ddfa7353..fbfced06 100644 --- a/nff/opt/algos.py +++ b/nff/opt/algos.py @@ -1,7 +1,7 @@ -from ase.optimize.sciopt import SciPyFminCG, SciPyFminBFGS -from ase.optimize import BFGS -import scipy.optimize as opt import numpy as np +import scipy.optimize as opt +from ase.optimize import BFGS +from ase.optimize.sciopt import SciPyFminBFGS, SciPyFminCG class Converged(Exception): diff --git a/nff/qm/integrals/overlap.py b/nff/qm/integrals/overlap.py index ed730fd3..6ab300bb 100644 --- a/nff/qm/integrals/overlap.py +++ b/nff/qm/integrals/overlap.py @@ -5,14 +5,14 @@ """ # import numba as nb +import time + import numpy as np import torch -import time # from typing import Union from nff.utils.scatter import compute_grad - # @torch.jit.script diff --git a/nff/reactive_tools/ev_following.py b/nff/reactive_tools/ev_following.py index d694bffd..64051803 100644 --- a/nff/reactive_tools/ev_following.py +++ b/nff/reactive_tools/ev_following.py @@ -1,12 +1,12 @@ import torch +from neuralnet.vib import hessian_and_modes from nff.io.ase_calcs import NeuralFF from nff.reactive_tools.utils import ( neural_energy_ase, neural_force_ase, ) -from nff.utils.constants import EV_TO_AU, BOHR_RADIUS -from neuralnet.vib import hessian_and_modes +from nff.utils.constants import BOHR_RADIUS, EV_TO_AU CONVG_LINE = "Optimization converged!" @@ -156,7 +156,7 @@ def ev_run( rmslist.append(grad.pow(2).sqrt().mean()) maxlist.append(grad.pow(2).sqrt().max()) - print("RMS: {}, MAX: {}".format(grad.pow(2).sqrt().mean(), grad.pow(2).sqrt().max())) + print(f"RMS: {grad.pow(2).sqrt().mean()}, MAX: {grad.pow(2).sqrt().max()}") if grad.pow(2).sqrt().max() < convergence: print(CONVG_LINE) diff --git a/nff/reactive_tools/kabsch.py b/nff/reactive_tools/kabsch.py index 6b6eadab..44bd2995 100644 --- a/nff/reactive_tools/kabsch.py +++ b/nff/reactive_tools/kabsch.py @@ -1,9 +1,10 @@ -import numpy as np import io +import numpy as np + try: - from alog import Logger import acore as ac + from alog import Logger except ModuleNotFoundError: print("You need to install the group's fork of aRMSD and put it in your path " "https://github.mit.edu/MLMat/aRMSD") @@ -13,7 +14,7 @@ def write_coord(coord): """Adjusts whitespace for coordinates""" - return "{:06.8f}".format(coord) if coord < 0.0 else " " + "{:06.8f}".format(coord) + return f"{coord:06.8f}" if coord < 0.0 else " " + f"{coord:06.8f}" def data_to_xyz(sym, cor): diff --git a/nff/reactive_tools/neb.py b/nff/reactive_tools/neb.py index 67b3c08e..18499914 100644 --- a/nff/reactive_tools/neb.py +++ b/nff/reactive_tools/neb.py @@ -1,14 +1,13 @@ import copy -from nff.io.ase import AtomsBatch -from nff.io.ase_calcs import NeuralFF -from nff.reactive_tools.utils import xyz_to_ase_atoms - from ase.io import read - from ase.neb import NEB from ase.optimize import BFGS +from nff.io.ase import AtomsBatch +from nff.io.ase_calcs import NeuralFF +from nff.reactive_tools.utils import xyz_to_ase_atoms + def neural_neb_ase( reactantxyzfile, @@ -36,17 +35,17 @@ def neural_neb_ase( neb.interpolate() neb.idpp_interpolate(optimizer=BFGS, steps=steps) - images = read("idpp.traj@-{}:".format(str(n_images + 2))) + images = read(f"idpp.traj@-{n_images + 2!s}:") # # Set calculators: nff_ase = NeuralFF.from_file(nff_dir, device="cuda:0") neb.set_calculators(nff_ase) # # Optimize: - optimizer = BFGS(neb, trajectory="{}/{}.traj".format(nff_dir, rxn_name)) + optimizer = BFGS(neb, trajectory=f"{nff_dir}/{rxn_name}.traj") optimizer.run(fmax=fmax, steps=steps) # Read NEB images from File - images = read("{}/{}.traj@-{}:".format(nff_dir, rxn_name, str(n_images + 2))) + images = read(f"{nff_dir}/{rxn_name}.traj@-{n_images + 2!s}:") return images diff --git a/nff/reactive_tools/nms.py b/nff/reactive_tools/nms.py index a486b16c..d63ba8ec 100644 --- a/nff/reactive_tools/nms.py +++ b/nff/reactive_tools/nms.py @@ -1,6 +1,6 @@ import numpy as np -from scipy.stats import rv_discrete from ase.units import Bohr +from scipy.stats import rv_discrete CM_2_AU = 4.5564e-6 ANGS_2_AU = 1.8897259886 diff --git a/nff/reactive_tools/reactive_langevin.py b/nff/reactive_tools/reactive_langevin.py index 1640418b..2872a9d3 100644 --- a/nff/reactive_tools/reactive_langevin.py +++ b/nff/reactive_tools/reactive_langevin.py @@ -1,6 +1,7 @@ from ase.io import Trajectory from ase.md.langevin import * -from ase.units import kB, fs, second, Ang +from ase.units import Ang, fs, kB, second + from nff.md.utils import NeuralMDLogger, write_traj diff --git a/nff/reactive_tools/utils.py b/nff/reactive_tools/utils.py index 2c11c4b1..90b3a775 100644 --- a/nff/reactive_tools/utils.py +++ b/nff/reactive_tools/utils.py @@ -1,12 +1,9 @@ -from ase.vibrations import Vibrations -from ase.units import Bohr, mol, kcal -from ase import Atoms - import numpy as np - +from ase import Atoms +from ase.units import Bohr, kcal, mol +from ase.vibrations import Vibrations from rdkit import Chem - PT = Chem.GetPeriodicTable() HA2J = 4.359744e-18 diff --git a/nff/tests/conftest.py b/nff/tests/conftest.py index 9082d8b5..3cff2d58 100644 --- a/nff/tests/conftest.py +++ b/nff/tests/conftest.py @@ -1,4 +1,5 @@ import os + import pytest import torch diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index ac449866..415e63c6 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -1,22 +1,19 @@ -import numpy as np -import random -from datetime import datetime -import torch import copy import pickle +import random +from datetime import datetime +import numpy as np +import torch from ase.io.trajectory import Trajectory +from torch.utils.data import DataLoader -from nff.md.utils_ax import mol_dot, mol_norm, ZhuNakamuraLogger, atoms_to_nxyz -from nff.md.nvt_ax import NoseHoover, NoseHooverChain -from nff.utils.constants import BOHR_RADIUS, FS_TO_AU, AMU_TO_AU, ASE_TO_FS, EV_TO_AU from nff.data import Dataset, collate_dicts -from nff.utils.cuda import batch_to -from nff.utils.constants import KCAL_TO_AU +from nff.md.nvt_ax import NoseHoover, NoseHooverChain +from nff.md.utils_ax import ZhuNakamuraLogger, atoms_to_nxyz, mol_dot, mol_norm from nff.train import load_model - -from torch.utils.data import DataLoader - +from nff.utils.constants import AMU_TO_AU, ASE_TO_FS, BOHR_RADIUS, EV_TO_AU, FS_TO_AU, KCAL_TO_AU +from nff.utils.cuda import batch_to HBAR = 1 OUT_FILE = "trj.csv" @@ -387,7 +384,7 @@ def velocity_step(self): # update surf (which also appends to surf_list) self.surf = self.surf self.time = self.time + self.dt - self.log("Completed step {}. Currently in state {}.".format(int(self.time / self.dt), self.surf)) + self.log(f"Completed step {int(self.time / self.dt)}. Currently in state {self.surf}.") self.log( "Relative energies are {} eV".format( ", ".join(((self.energies - self.energies[0]) * 27.2).reshape(-1).astype("str").tolist()) @@ -731,8 +728,8 @@ def __init__(self, atoms_list, props, batched_params, zhu_params): self.num_trj = batched_params["num_trj"] self.zhu_trjs = self.make_zhu_trjs(props, atoms_list, zhu_params) self.max_time = self.zhu_trjs[0].max_time - self.energy_keys = ["energy_{}".format(i) for i in range(self.zhu_trjs[0].num_states)] - self.grad_keys = ["{}_grad".format(key) for key in self.energy_keys] + self.energy_keys = [f"energy_{i}" for i in range(self.zhu_trjs[0].num_states)] + self.grad_keys = [f"{key}_grad" for key in self.energy_keys] self.props = self.duplicate_props(props) self.nbr_update_period = batched_params["nbr_update_period"] @@ -762,8 +759,8 @@ def make_zhu_trjs(self, props, atoms_list, zhu_params): for i, atoms in enumerate(atoms_list): these_params = copy.deepcopy(zhu_params) - these_params["out_file"] = "{}_{}.csv".format(base_out_name, i) - these_params["log_file"] = "{}_{}.log".format(base_log_name, i) + these_params["out_file"] = f"{base_out_name}_{i}.csv" + these_params["log_file"] = f"{base_log_name}_{i}.log" zhu_trjs.append(ZhuNakamuraDynamics(atoms=atoms, **these_params)) @@ -888,7 +885,7 @@ def run(self): get_new_neighbors = False self.step(get_new_neighbors=get_new_neighbors) - print("Completed step {}".format(num_steps)) + print(f"Completed step {num_steps}") complete = all([trj.time >= self.max_time for trj in self.zhu_trjs]) diff --git a/nff/tests/test_ase.py b/nff/tests/test_ase.py index c98fdb1d..2f103ffa 100644 --- a/nff/tests/test_ase.py +++ b/nff/tests/test_ase.py @@ -3,9 +3,8 @@ import networkx as nx import numpy as np -from ase import Atoms - import pytest +from ase import Atoms from nff.io.ase import AtomsBatch diff --git a/nff/tests/test_data/test_dataset.py b/nff/tests/test_data/test_dataset.py index 16ee7fc4..40434966 100644 --- a/nff/tests/test_data/test_dataset.py +++ b/nff/tests/test_data/test_dataset.py @@ -4,9 +4,8 @@ from pathlib import Path import numpy as np -import torch - import pytest +import torch from nff.data.dataset import ( Dataset, diff --git a/nff/tests/test_excited_states_training.py b/nff/tests/test_excited_states_training.py index 75492e05..7e187749 100644 --- a/nff/tests/test_excited_states_training.py +++ b/nff/tests/test_excited_states_training.py @@ -6,9 +6,8 @@ from torch.utils.data import DataLoader from torch.utils.data.sampler import RandomSampler - -from nff.data import Dataset, split_train_validation_test, collate_dicts -from nff.train import Trainer, get_model, loss, hooks, metrics, evaluate +from nff.data import Dataset, collate_dicts, split_train_validation_test +from nff.train import Trainer, evaluate, get_model, hooks, loss, metrics def test_excited_training(device, tmpdir): diff --git a/nff/tests/test_training.py b/nff/tests/test_training.py index a8c3b291..431764d5 100644 --- a/nff/tests/test_training.py +++ b/nff/tests/test_training.py @@ -5,8 +5,8 @@ from torch.optim import Adam from torch.utils.data import DataLoader -from nff.data import Dataset, split_train_validation_test, collate_dicts, to_tensor -from nff.train import Trainer, get_model, loss, hooks, metrics, evaluate +from nff.data import Dataset, collate_dicts, split_train_validation_test, to_tensor +from nff.train import Trainer, evaluate, get_model, hooks, loss, metrics def test_training(device, tmpdir): diff --git a/nff/train/builders/trainer.py b/nff/train/builders/trainer.py index 21ff6433..f9c9fc50 100644 --- a/nff/train/builders/trainer.py +++ b/nff/train/builders/trainer.py @@ -3,12 +3,13 @@ Adapted from https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/training.py """ -import os import json +import os -import nff from torch.optim import Adam +import nff + def get_trainer(args, model, train_loader, val_loader, metrics, loss_fn=None): # setup hook and logging diff --git a/nff/train/chgnet.py b/nff/train/chgnet.py index 93f7efe8..08ffe396 100644 --- a/nff/train/chgnet.py +++ b/nff/train/chgnet.py @@ -1,4 +1,5 @@ -from typing import Dict, Iterable, Union +from collections.abc import Iterable +from typing import Dict, Union import torch from chgnet.trainer.trainer import CombinedLoss diff --git a/nff/train/evaluate.py b/nff/train/evaluate.py index ebb428f2..71eecb6e 100644 --- a/nff/train/evaluate.py +++ b/nff/train/evaluate.py @@ -1,9 +1,10 @@ import copy import torch +from tqdm import tqdm + from nff.data.dataset import concatenate_dict from nff.utils.cuda import batch_detach, batch_to -from tqdm import tqdm def shrink_batch(batch): @@ -113,9 +114,8 @@ def evaluate( if not return_results: return {}, {}, eval_loss - else: - # this step can be slow, - all_results = concatenate_dict(*all_results) - all_batches = concatenate_dict(*all_batches) + # this step can be slow, + all_results = concatenate_dict(*all_results) + all_batches = concatenate_dict(*all_batches) - return all_results, all_batches, eval_loss + return all_results, all_batches, eval_loss diff --git a/nff/train/hooks/logging.py b/nff/train/hooks/logging.py index 696c7f6e..b627c74f 100644 --- a/nff/train/hooks/logging.py +++ b/nff/train/hooks/logging.py @@ -3,15 +3,16 @@ Retrieved from https://github.com/atomistic-machine-learning/schnetpack/tree/dev/src/schnetpack/train/hooks """ +import json import os +import sys import time + import numpy as np import torch -import json -import sys from nff.train.hooks import Hook -from nff.train.metrics import RootMeanSquaredError, PrAuc, RocAuc +from nff.train.metrics import PrAuc, RocAuc, RootMeanSquaredError class LoggingHook(Hook): @@ -140,9 +141,9 @@ def save_metrics(self, epoch, test): # save metrics to json file par_folder = self.par_folders[self.global_rank] if test: - json_file = os.path.join(par_folder, "epoch_{}_test.json".format(epoch)) + json_file = os.path.join(par_folder, f"epoch_{epoch}_test.json") else: - json_file = os.path.join(par_folder, "epoch_{}.json".format(epoch)) + json_file = os.path.join(par_folder, f"epoch_{epoch}.json") # if the json file you're saving to already exists, # then load its contents @@ -189,9 +190,9 @@ def avg_parallel_metrics(self, epoch, test): while None in par_dic.values(): for folder in self.par_folders: if test: - path = os.path.join(folder, "epoch_{}_test.json".format(epoch)) + path = os.path.join(folder, f"epoch_{epoch}_test.json") else: - path = os.path.join(folder, "epoch_{}.json".format(epoch)) + path = os.path.join(folder, f"epoch_{epoch}.json") try: with open(path, "r") as f: path_dic = json.load(f) diff --git a/nff/train/metrics.py b/nff/train/metrics.py index 58d4c0ac..9bdec11c 100644 --- a/nff/train/metrics.py +++ b/nff/train/metrics.py @@ -1,6 +1,6 @@ import numpy as np import torch -from sklearn.metrics import roc_auc_score, auc, precision_recall_curve +from sklearn.metrics import auc, precision_recall_curve, roc_auc_score class Metric: diff --git a/nff/train/parallel.py b/nff/train/parallel.py index ebec5a9c..0dcba52e 100644 --- a/nff/train/parallel.py +++ b/nff/train/parallel.py @@ -3,8 +3,8 @@ between processes. """ -import pickle import os +import pickle def get_grad(optimizer): @@ -22,7 +22,7 @@ def get_grad(optimizer): def save_grad(optimizer, loss_size, rank, weight_path, batch_num, epoch): grad_list = get_grad(optimizer) save_dic = {"grad": grad_list, "loss_size": loss_size} - save_path = os.path.join(weight_path, str(rank), "grad_{}_{}.pickle".format(epoch, batch_num)) + save_path = os.path.join(weight_path, str(rank), f"grad_{epoch}_{batch_num}.pickle") with open(save_path, "wb") as f: pickle.dump(save_dic, f) @@ -38,7 +38,7 @@ def add_grads(optimizer, loss_size, weight_path, rank, world_size, batch_num, ep # paths to all pickle files paths = [ - os.path.join(weight_path, str(index), "grad_{}_{}.pickle".format(epoch, batch_num)) + os.path.join(weight_path, str(index), f"grad_{epoch}_{batch_num}.pickle") for index in range(world_size) ] diff --git a/nff/train/trainer.py b/nff/train/trainer.py index b347d237..697e0c6d 100644 --- a/nff/train/trainer.py +++ b/nff/train/trainer.py @@ -333,7 +333,7 @@ def call_and_loss(self, batch, device, calc_loss): except RuntimeError as err: if "CUDA out of memory" in str(err): - print(("CUDA out of memory. Doing this batch " "on cpu.")) + print("CUDA out of memory. Doing this batch " "on cpu.") use_device = "cpu" torch.cuda.empty_cache() else: @@ -484,7 +484,7 @@ def save_val_loss(self, val_loss, n_val): # write the loss as a number to a file called "val_epoch_i" # for epoch i. - info_file = os.path.join(self_folder, "val_epoch_{}".format(self.epoch)) + info_file = os.path.join(self_folder, f"val_epoch_{self.epoch}") with open(info_file, "w") as f_open: loss_float = val_loss.item() string = f"{loss_float},{n_val}" @@ -514,7 +514,7 @@ def load_val_loss(self): # then no need to load anything if loaded_vals[folder] is not None: continue - val_file = os.path.join(folder, "val_epoch_{}".format(self.epoch)) + val_file = os.path.join(folder, f"val_epoch_{self.epoch}") # try opening the file and getting the value try: with open(val_file, "r") as f_open: @@ -531,7 +531,7 @@ def load_val_loss(self): # average the losses according to number of atoms # or molecules in each denom = sum(list(n_vals.values())) - avg_loss = sum([n_vals[key] * loaded_vals[key] for key in n_vals.keys()]) / denom + avg_loss = sum([n_vals[key] * loaded_vals[key] for key in n_vals]) / denom else: # add the losses avg_loss = np.sum(list(loaded_vals.values())) diff --git a/nff/train/transfer.py b/nff/train/transfer.py index ab968e0a..e85204a2 100644 --- a/nff/train/transfer.py +++ b/nff/train/transfer.py @@ -85,9 +85,7 @@ def unfreeze_painn_readout(self, model: torch.nn.Module, freeze_skip: bool) -> N unfreeze_skip = not freeze_skip for i, block in enumerate(model.readout_blocks): - if unfreeze_skip: - self.unfreeze_parameters(block) - elif i == num_readouts - 1: + if unfreeze_skip or i == num_readouts - 1: self.unfreeze_parameters(block) def unfreeze_painn_pooling(self, model: torch.nn.Module) -> None: @@ -218,9 +216,7 @@ def unfreeze_mace_readout(self, model: torch.nn.Module, freeze_skip: bool = Fals unfreeze_skip = not freeze_skip for i, block in enumerate(model.readouts): - if unfreeze_skip: - self.unfreeze_parameters(block) - elif i == num_readouts - 1: + if unfreeze_skip or i == num_readouts - 1: self.unfreeze_parameters(block) def model_tl( @@ -305,9 +301,7 @@ def unfreeze_chgnet_readout(self, model: torch.nn.Module, freeze_skip: bool = Fa unfreeze_skip = not freeze_skip for i, block in enumerate(model.mlp.layers): - if unfreeze_skip: - self.unfreeze_parameters(block) - elif i == num_readouts - 1: + if unfreeze_skip or i == num_readouts - 1: self.unfreeze_parameters(block) def model_tl( diff --git a/nff/train/uncertainty.py b/nff/train/uncertainty.py index 786c1a6c..7f3e70e0 100644 --- a/nff/train/uncertainty.py +++ b/nff/train/uncertainty.py @@ -8,12 +8,12 @@ from ..io.gmm import GaussianMixture __all__ = [ - "Uncertainty", + "ConformalPrediction", "EnsembleUncertainty", "EvidentialUncertainty", - "MVEUncertainty", "GMMUncertainty", - "ConformalPrediction", + "MVEUncertainty", + "Uncertainty", ] @@ -52,7 +52,7 @@ def set_min_uncertainty(self, min_uncertainty: float, force: bool = False) -> No """ Set the minimum uncertainty value to be used for scaling the uncertainty. """ - if getattr(self, "umin") is None: + if self.umin is None: self.umin = min_uncertainty elif force: warnings.warn(f"Uncertainty: min_uncertainty already set to {self.umin}. Overwriting.") @@ -64,7 +64,7 @@ def scale_to_min_uncertainty(self, uncertainty: Union[np.ndarray, torch.Tensor]) """ Scale the uncertainty to the minimum value. """ - if getattr(self, "umin") is not None: + if self.umin is not None: if self.order not in ["system_mean_squared"]: uncertainty = uncertainty - self.umin else: @@ -88,7 +88,7 @@ def calibrate_uncertainty( """ Calibrate the uncertainty using Conformal Prediction. """ - if getattr(self.CP, "qhat") is None: + if self.CP.qhat is None: raise Exception("Uncertainty: ConformalPrediction not fitted.") cp_uncertainty, qhat = self.CP.predict(uncertainty) @@ -440,7 +440,7 @@ def fit_gmm(self, Xtrain: torch.Tensor) -> None: self.gm_model.fit(self.Xtrain.squeeze().cpu().numpy()) # Save the fitted GMM model if gmm_path is specified - if hasattr(self, "gmm_path") and not os.path.exists(getattr(self, "gmm_path")): + if hasattr(self, "gmm_path") and not os.path.exists(self.gmm_path): self.gm_model.save(self.gmm_path) print(f"Saved fitted GMM model to {self.gmm_path}") diff --git a/nff/utils/cellfilters.py b/nff/utils/cellfilters.py index 3b4a426f..1f72db02 100644 --- a/nff/utils/cellfilters.py +++ b/nff/utils/cellfilters.py @@ -1,6 +1,5 @@ -from ase.constraints import UnitCellFilter import numpy as np - +from ase.constraints import UnitCellFilter from ase.stress import full_3x3_to_voigt_6_stress, voigt_6_to_full_3x3_stress diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index 9510d5d5..3853f5af 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -1,23 +1,23 @@ +import copy +import json import os +import pickle import random -import subprocess import re import socket +import subprocess import time -import numpy as np -import json -import pickle -import copy -from rdkit.Chem import AddHs, MolFromSmiles, inchi, GetPeriodicTable, Conformer, MolToSmiles +import numpy as np +from rdkit.Chem import AddHs, Conformer, GetPeriodicTable, MolFromSmiles, MolToSmiles, inchi from rdkit.Chem.AllChem import ( EmbedMultipleConfs, - UFFGetMoleculeForceField, + GetConformerRMS, MMFFGetMoleculeForceField, MMFFGetMoleculeProperties, - GetConformerRMS, + UFFGetMoleculeForceField, ) -from rdkit.Chem.rdmolops import RemoveHs, GetFormalCharge +from rdkit.Chem.rdmolops import GetFormalCharge, RemoveHs from nff.utils.misc import read_csv, tqdm_enum @@ -83,7 +83,7 @@ def align_rmsd(file1, file2, path, smarts=None): return float(rmsd) -class ConformerGenerator(object): +class ConformerGenerator: """ Generates conformations of molecules from 2D representation. """ @@ -121,8 +121,8 @@ def generate( randomSeed=random.randint(1, 10000000), ) if len(self.initial_confs) == 0: - output.write((f"Generated {len(self.initial_confs)} " "initial confs\n")) - output.write((f"Trying again with {max_generated_conformers * 10} " "attempts and random coords\n")) + output.write(f"Generated {len(self.initial_confs)} " "initial confs\n") + output.write(f"Trying again with {max_generated_conformers * 10} " "attempts and random coords\n") self.initial_confs = EmbedMultipleConfs( self.mol, @@ -146,15 +146,15 @@ def minimise(self, output=None, minimize=True): """ if "\\" in self.smiles or "/" in self.smiles: - output.write(("WARNING: Smiles string contains slashes, " "which specify cis/trans stereochemistry.\n")) - output.write(("Bypassing force-field minimization to avoid generating " "incorrect isomer.\n")) + output.write("WARNING: Smiles string contains slashes, " "which specify cis/trans stereochemistry.\n") + output.write("Bypassing force-field minimization to avoid generating " "incorrect isomer.\n") minimize = False if self.forcefield != "mmff" and self.forcefield != "uff": raise ValueError("Unrecognised force field") if self.forcefield == "mmff": props = MMFFGetMoleculeProperties(self.mol) - for i in range(0, len(self.initial_confs)): + for i in range(len(self.initial_confs)): potential = MMFFGetMoleculeForceField(self.mol, props, confId=i) if potential is None: output.write("MMFF not available, using UFF\n") @@ -168,7 +168,7 @@ def minimise(self, output=None, minimize=True): self.conf_energies.append((i, mmff_energy)) elif self.forcefield == "uff": - for i in range(0, len(self.initial_confs)): + for i in range(len(self.initial_confs)): potential = UFFGetMoleculeForceField(self.mol, confId=i) assert potential is not None if minimize: @@ -194,15 +194,15 @@ def cluster(self, rms_tolerance=0.1, max_ranked_conformers=10, energy_window=5, for i, pair_1 in enumerate(confs): if i == 0: index_0, energy_0 = pair_1 - output.write((f"clustering cluster {i} of " f"{len(self.conf_energies)}\n")) + output.write(f"clustering cluster {i} of " f"{len(self.conf_energies)}\n") index_1, energy_1 = pair_1 if abs(energy_1 - energy_0) > Report_e_tol: output.write( - ( + "Breaking because hit Report Energy Window, " f"E was {energy_1} kcal/mol " f"and minimum was {energy_0} \n" - ) + ) break @@ -233,7 +233,7 @@ def cluster(self, rms_tolerance=0.1, max_ranked_conformers=10, energy_window=5, ignore.append(j) self.full_clusters.append(clustered) output.write(f"{ignored} ignore passes made\n") - output.write((f"{calcs_performed} overlays needed out " f"of a possible {len(self.conf_energies) ** 2}\n")) + output.write(f"{calcs_performed} overlays needed out " f"of a possible {len(self.conf_energies) ** 2}\n") ranked_clusters = [] for i, cluster in enumerate(self.full_clusters): @@ -282,7 +282,7 @@ def recluster( output.write("obfit failed, falling back to obabel --align") output.write(f"Exception {e}\n") try: - rms = align_rmsd(f"{key}_Conf_{str(i + 1)}", f"{key}_Conf_{str(j + 1)}", path) + rms = align_rmsd(f"{key}_Conf_{i + 1!s}", f"{key}_Conf_{j + 1!s}", path) except (ValueError, subprocess.TimeoutExpired): continue else: @@ -306,8 +306,8 @@ def recluster( output.write("obfit failed, falling back to obabel --align") output.write(f"Exception {e}\n") try: - i_key = f"{key}_Conf_{str(i + 1)}" - inv_key = f"{key}_Conf_{str(j + 1)}_inv" + i_key = f"{key}_Conf_{i + 1!s}" + inv_key = f"{key}_Conf_{j + 1!s}_inv" rmsinv = align_rmsd(i_key, inv_key) except (ValueError, subprocess.TimeoutExpired): continue @@ -316,7 +316,7 @@ def recluster( rms = min([rms, rmsinv]) os.remove(key + "_Conf_" + str(j + 1) + "_inv.xyz") - output.write((f"Comparing {i + 1} {j + 1} " f"RMSD after checking inversion {rms}\n")) + output.write(f"Comparing {i + 1} {j + 1} " f"RMSD after checking inversion {rms}\n") if rms <= rms_tolerance: self.removed.append(j) output.write("Removed Conf_" + str(j + 1) + "\n") @@ -343,7 +343,7 @@ def _atomic_pos_from_conformer(conformer): """ atom_positions = [] natoms = conformer.GetNumAtoms() - for atom_num in range(0, natoms): + for atom_num in range(natoms): pos = conformer.GetAtomPosition(atom_num) atom_positions.append([pos.x, pos.y, pos.z]) return atom_positions @@ -387,12 +387,12 @@ def minimize(output, molecule, forcefield, nconf_gen, prun_tol, e_window, rms_to # print "There are", NumRotatableBonds(mol) output.write("Generating initial conformations\n") confgen = ConformerGenerator(smiles=molecule, forcefield=forcefield) - output.write((f"Minimising conformations using the {forcefield} " "force field\n")) + output.write(f"Minimising conformations using the {forcefield} " "force field\n") confgen.generate(max_generated_conformers=int(nconf_gen), prune_thresh=float(prun_tol), output=output) gen_time = time.time() confgen.minimise(output=output) min_time = time.time() - output.write(("Minimisation complete, generated conformations " "with the following energies:\n")) + output.write("Minimisation complete, generated conformations " "with the following energies:\n") output.write("\n".join([str(energy[1]) for energy in confgen.conf_energies]) + "\n") msg = ( f"Clustering structures using an energy window of " @@ -431,11 +431,11 @@ def summarize(output, gen_time, start_time, min_time, cluster_time): recluster_time = time.time() output.write(socket.gethostname() + "\n") - output.write("gen time {0:1f} sec\n".format(gen_time - start_time)) - output.write("min time {0:1f} sec\n".format(min_time - gen_time)) - output.write("cluster time {0:1f} sec\n".format(cluster_time - min_time)) - output.write("recluster time {0:1f} sec\n".format(recluster_time - cluster_time)) - output.write("total time {0:1f} sec\n".format(time.time() - start_time)) + output.write(f"gen time {gen_time - start_time:1f} sec\n") + output.write(f"min time {min_time - gen_time:1f} sec\n") + output.write(f"cluster time {cluster_time - min_time:1f} sec\n") + output.write(f"recluster time {recluster_time - cluster_time:1f} sec\n") + output.write(f"total time {time.time() - start_time:1f} sec\n") output.write("Terminated successfully\n") @@ -599,7 +599,7 @@ def one_species_confs( output.write("\n".join([molecule]) + "\n") if any([element in molecule for element in UFF_ELEMENTS]): - output.write(("Switching to UFF, since MMFF94 does " "not have boron and/or aluminum\n")) + output.write("Switching to UFF, since MMFF94 does " "not have boron and/or aluminum\n") forcefield = "uff" confgen, gen_time, min_time = minimize( diff --git a/nff/utils/confs.py b/nff/utils/confs.py index f0674ca9..200b2366 100644 --- a/nff/utils/confs.py +++ b/nff/utils/confs.py @@ -2,10 +2,11 @@ Tools for manipulating conformer numbers in a dataset. """ -import torch +import copy import math + import numpy as np -import copy +import torch from nff.utils.misc import tqdm_enum @@ -512,7 +513,7 @@ def split_batch(batch, sub_batch_size): # get rid of `bond_idx` because it's wrong if key in [*NBR_IDX_KEYS, *REINDEX_KEYS]: continue - elif np.mod(val_len, num_confs) != 0 or val_len == 1: + if np.mod(val_len, num_confs) != 0 or val_len == 1: if key == "num_atoms": sub_batch_dic[key] = [int(val * num / num_confs) for num in confs_per_split] else: @@ -533,7 +534,7 @@ def split_batch(batch, sub_batch_size): split_val = torch.split(val, split_list) sub_batch_dic[key] = split_val - sub_batches = [{key: sub_batch_dic[key][i] for key in sub_batch_dic.keys()} for i in range(num_splits)] + sub_batches = [{key: sub_batch_dic[key][i] for key in sub_batch_dic} for i in range(num_splits)] # fix neighbor list indexing sub_batches, masks = add_split_nbrs( diff --git a/nff/utils/dispersion.py b/nff/utils/dispersion.py index 815c7518..8ce442f0 100644 --- a/nff/utils/dispersion.py +++ b/nff/utils/dispersion.py @@ -7,18 +7,18 @@ https://github.com/MMunibas/PhysNet/tree/master/neural_network/grimme_d3/tables """ +import json import os + import numpy as np import torch -import json +from ase import Atoms +from ase.calculators.dftd3 import DFTD3 +from nff.nn.utils import clean_matrix, lattice_points_in_supercell from nff.utils import constants as const -from nff.nn.utils import lattice_points_in_supercell, clean_matrix from nff.utils.scatter import scatter_add -from ase import Atoms -from ase.calculators.dftd3 import DFTD3 - base_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "table_data") c6_ref_path = os.path.join(base_dir, "c6ab.npy") r_cov_path = os.path.join(base_dir, "rcov.npy") diff --git a/nff/utils/fast_attention.py b/nff/utils/fast_attention.py index 710923f6..a54c3a9a 100644 --- a/nff/utils/fast_attention.py +++ b/nff/utils/fast_attention.py @@ -1,5 +1,5 @@ -import torch import numpy as np +import torch def make_w(feat_dim, rand_dim): diff --git a/nff/utils/functions.py b/nff/utils/functions.py index 56720a9a..06487afa 100644 --- a/nff/utils/functions.py +++ b/nff/utils/functions.py @@ -6,14 +6,14 @@ layers/basis_utils.py. """ -import numpy as np -from scipy.optimize import brentq -from scipy import special as sp -import sympy as sym import copy -import torch import math +import numpy as np +import sympy as sym +import torch +from scipy import special as sp +from scipy.optimize import brentq EPS = 1e-15 @@ -213,7 +213,7 @@ def make_c_table(l_max): c_table = {} for l in range(l_max + 1): for m in range(-l, l + 1): - for p in range(0, math.floor((l - m) / 2) + 1): + for p in range(math.floor((l - m) / 2) + 1): c_table[(p, l, m)] = c_plm(p, l, m) return c_table @@ -314,7 +314,7 @@ def make_g_funcs(bern_k, gamma, r_cut, l_max=2): g_funcs = {} letters = {0: "s", 1: "p", 2: "d"} - for l in range(0, l_max + 1): + for l in range(l_max + 1): letter = letters[l] name = f"g_{letter}" g_func = get_g_func(l=l, r_cut=r_cut, bern_k=bern_k, gamma=gamma, y_lm_fn=y_lm_fn) diff --git a/nff/utils/geom.py b/nff/utils/geom.py index 1364b197..2fbdbf8b 100644 --- a/nff/utils/geom.py +++ b/nff/utils/geom.py @@ -5,8 +5,8 @@ import numpy as np import torch from torch.utils.data import DataLoader -from nff.utils.scatter import scatter_add +from nff.utils.scatter import scatter_add BATCH_SIZE = 3000 @@ -195,8 +195,7 @@ def compute_distance(targ_nxyz, atom_nxyz, store_grad=False): if store_grad: return distances, R, base_p - else: - return distances.detach(), R + return distances.detach(), R def compute_distances(dataset, device, batch_size=BATCH_SIZE, dataset_1=None, store_grad=False, collate_dicts=None): @@ -257,8 +256,7 @@ def compute_distances(dataset, device, batch_size=BATCH_SIZE, dataset_1=None, st if store_grad: return distance_mat, R_mat, xyz_list - else: - return distance_mat, R_mat + return distance_mat, R_mat """ diff --git a/nff/utils/misc.py b/nff/utils/misc.py index 1d2e1b21..9c840d53 100644 --- a/nff/utils/misc.py +++ b/nff/utils/misc.py @@ -80,7 +80,7 @@ def log(prefix, msg): prefix (str) msg (str) """ - print("{:>12}: {}".format(prefix.upper(), msg)) + print(f"{prefix.upper():>12}: {msg}") def add_json_args(args, config_flag="config_file"): @@ -516,7 +516,7 @@ def parse_args_from_json(arg_path, direc): parser = argparse.ArgumentParser(description=description) default_args.pop("description") - required = parser.add_argument_group(("required arguments (either in " "the command line or the config " "file)")) + required = parser.add_argument_group("required arguments (either in " "the command line or the config " "file)") optional = parser.add_argument_group("optional arguments") for name, info in default_args.items(): diff --git a/nff/utils/scatter.py b/nff/utils/scatter.py index 3d8206cc..bab3e0d7 100644 --- a/nff/utils/scatter.py +++ b/nff/utils/scatter.py @@ -1,4 +1,5 @@ from itertools import repeat + from torch.autograd import grad diff --git a/nff/utils/script_utils/loaders.py b/nff/utils/script_utils/loaders.py index 8e8aff91..3054f845 100644 --- a/nff/utils/script_utils/loaders.py +++ b/nff/utils/script_utils/loaders.py @@ -1,8 +1,8 @@ import torch -import nff.data - from torch.utils.data import DataLoader from torch.utils.data.sampler import RandomSampler + +import nff.data from nff.data.loader import collate_dicts @@ -21,7 +21,7 @@ def get_loaders(args, logging=None): return test_loader - elif args.mode == "train": + if args.mode == "train": if logging is not None: logging.info("creating splits...") diff --git a/nff/utils/script_utils/setup.py b/nff/utils/script_utils/setup.py index 85db850b..bda1dd75 100644 --- a/nff/utils/script_utils/setup.py +++ b/nff/utils/script_utils/setup.py @@ -3,11 +3,11 @@ Adapted from https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/setup.py """ -import os import logging +import os from shutil import rmtree -from nff.utils.tools import to_json, set_random_seed, read_from_json +from nff.utils.tools import read_from_json, set_random_seed, to_json __all__ = ["setup_run"] diff --git a/nff/utils/tools.py b/nff/utils/tools.py index e17e59cd..75c23b4b 100644 --- a/nff/utils/tools.py +++ b/nff/utils/tools.py @@ -2,24 +2,23 @@ Adapted from https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/spk_utils.py """ +import collections import json import logging -import collections from argparse import Namespace import numpy as np import torch - from torch.nn import ModuleDict, Sequential -from nff.nn.activations import shifted_softplus, Swish, LearnableSwish -from nff.nn.layers import Dense +from nff.nn.activations import LearnableSwish, Swish, shifted_softplus +from nff.nn.layers import Dense __all__ = [ - "set_random_seed", "compute_params", - "to_json", "read_from_json", + "set_random_seed", + "to_json", ] layer_types = { @@ -82,6 +81,7 @@ def set_random_seed(seed): seed (int, optional): if seed not present, it is generated based on time """ import time + import numpy as np # 1) if seed not present, generate based on time @@ -100,7 +100,7 @@ def set_random_seed(seed): np.random.seed(seed) # 3) Set seed for torch (manual_seed now seeds all CUDA devices automatically) torch.manual_seed(seed) - logging.info("Random state initialized with seed {:<10d}".format(seed)) + logging.info(f"Random state initialized with seed {seed:<10d}") def compute_params(model): diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 40bada34..f36c6eef 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -12,13 +12,12 @@ """ import copy -import itertools -import pickle -from functools import wraps import errno +import itertools import os +import pickle import signal - +from functools import wraps try: from rdkit.Chem import rdEHTTools # requires RDKit 2019.9.1 or later @@ -27,14 +26,12 @@ from collections import defaultdict -import numpy as np import networkx as nx - +import numpy as np from rdkit import Chem from rdkit.Chem import AllChem, GetPeriodicTable from rdkit.Chem.rdchem import EditableMol - global __ATOM_LIST__ __ATOM_LIST__ = [ "h", @@ -281,7 +278,7 @@ def BO_is_OK(BO, AC, charge, DU, atomic_valence_electrons, atoms, valances, allo if number_of_single_bonds_to_C == 2 and BO_valences[i] == 2: Q += 1 q = 2 - if number_of_single_bonds_to_C == 3 and Q + 1 < charge: + if number_of_single_bonds_to_C == 3 and charge > Q + 1: Q += 2 q = 1 @@ -305,9 +302,7 @@ def get_atomic_charge(atom, atomic_valence_electrons, BO_valence): charge = 1 - BO_valence elif atom == 5: charge = 3 - BO_valence - elif atom == 15 and BO_valence == 5: - charge = 0 - elif atom == 16 and BO_valence == 6: + elif (atom == 15 and BO_valence == 5) or (atom == 16 and BO_valence == 6): charge = 0 else: charge = atomic_valence_electrons - 8 + BO_valence @@ -382,7 +377,7 @@ def BO2mol(mol, BO_matrix, atoms, atomic_valence_electrons, mol_charge, allow_ch BO_valences = list(BO_matrix.sum(axis=1)) if l != l2: - raise RuntimeError("sizes of adjMat ({0:d}) and Atoms {1:d} differ".format(l, l2)) + raise RuntimeError(f"sizes of adjMat ({l:d}) and Atoms {l2:d} differ") rwMol = Chem.RWMol(mol) @@ -552,7 +547,7 @@ def AC2BO(AC, atoms, charge, allow_charged_fragments=True, use_graph=True): if status: return BO, atomic_valence_electrons - elif BO.sum() >= best_BO.sum() and valences_not_too_large(BO, valences): + if BO.sum() >= best_BO.sum() and valences_not_too_large(BO, valences): best_BO = BO.copy() return best_BO, atomic_valence_electrons @@ -630,8 +625,7 @@ def xyz2AC(atoms, xyz, charge, use_huckel=False): if use_huckel: return xyz2AC_huckel(atoms, xyz, charge) - else: - return xyz2AC_vdW(atoms, xyz) + return xyz2AC_vdW(atoms, xyz) def xyz2AC_vdW(atoms, xyz): From c9b5540d4945b3aa514c19accab1cbad2560baef Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 13:12:24 -0500 Subject: [PATCH 25/66] manual fixes of analysis, data and io --- nff/analysis/attribution.py | 47 +++++++------- nff/analysis/attribution_deprecate.py | 1 + nff/analysis/cp3d.py | 17 +++--- nff/analysis/mpl_settings.py | 4 +- nff/analysis/parity_plot.py | 8 +-- nff/analysis/roce.py | 2 +- nff/data/crystals.py | 4 +- nff/data/features/graph.py | 32 +++------- nff/data/graphs.py | 6 +- nff/data/loader.py | 5 +- nff/data/parallel.py | 2 +- nff/data/stats.py | 29 +++------ nff/data/utils.py | 2 +- nff/io/ase_ax.py | 14 ++--- nff/io/ase_calcs.py | 37 +++++------ nff/io/ase_utils.py | 8 +-- nff/io/bias_calculators.py | 88 ++++++++++++--------------- nff/io/cprop.py | 6 +- nff/io/gmm.py | 10 +-- nff/io/mace.py | 10 +-- nff/io/openmm_calculators.py | 67 ++++++++++---------- 21 files changed, 175 insertions(+), 224 deletions(-) diff --git a/nff/analysis/attribution.py b/nff/analysis/attribution.py index 6cc0c1fd..4626da4c 100644 --- a/nff/analysis/attribution.py +++ b/nff/analysis/attribution.py @@ -1,4 +1,4 @@ -from typing import Union +from typing import Dict, List, Optional, Union import numpy as np import torch @@ -12,7 +12,8 @@ from nff.utils.scatter import compute_grad -def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond", **kwargs) -> list[np.array]: +def get_molecules(atom: AtomsBatch, bond_length: Optional[Dict[str, float]] = None, mode: str = "bond", **kwargs) \ + -> List[np.array]: """ find molecules in periodic or non-periodic system. bond mode finds molecules within bond length. Must pass bond_length dict: e.g bond_length=dict() @@ -29,7 +30,8 @@ def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond" give extra cutoff = 6 e.g input output: - list of array of atom indices in molecules. e.g: if there is a H2O molecule, you will get a list with the atom indices + list of array of atom indices in molecules. e.g: if there is a H2O molecule, + you will get a list with the atom indices """ types = list(set(atom.numbers)) @@ -50,15 +52,18 @@ def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond" oxy_neighbors = [] if mode == "bond": for t in types: - if bond_length.get("%s-%s" % (ty, t)) is not None: + if bond_length.get(f"{ty}-{t}") is not None: oxy_neighbors.extend( list( np.where(atom.numbers == t)[0][ - np.where(dis_sq[i, np.where(atom.numbers == t)[0]] <= bond_length["%s-%s" % (ty, t)])[0] + np.where(dis_sq[i, np.where(atom.numbers == t)[0]] <= bond_length[f"{ty}-{t}"])[0] ] ) ) elif mode == "cutoff": + if "cutoff" not in kwargs: + raise ValueError("Specifying mode 'cutoff' requires passing a cutoff value as a keyword argument") + cutoff = kwargs["cutoff"] oxy_neighbors.extend(list(np.where(dis_sq[i] <= cutoff)[0])) # cutoff input extra argument oxy_neighbors = np.array(oxy_neighbors) if len(oxy_neighbors) == 0: @@ -69,10 +74,10 @@ def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond" elif (clusters[oxy_neighbors] == 0).all() and clusters[i] == 0: clusters[oxy_neighbors] = mm + 1 clusters[i] = mm + 1 - elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] == 0: + elif not (clusters[oxy_neighbors] == 0).all() and clusters[i] == 0: clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) - elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] != 0: + elif not (clusters[oxy_neighbors] == 0).all() and clusters[i] != 0: tmp = clusters[oxy_neighbors][clusters[oxy_neighbors] != 0][ clusters[oxy_neighbors][clusters[oxy_neighbors] != 0] != min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) @@ -91,17 +96,17 @@ def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond" return molecules -def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: int = None): +def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: List[np.array], centre: Optional[int] = None): """ Function to shift atoms when we create non-periodic system from periodic. inputs: atomsobject: Atomsbatch object from NFF mol_idx: list of array of atom indices in molecules or atoms you want to keep together when changing to non-periodic system - centre: by default the atoms in a molecule or set of close atoms are shifted so as to get them close to the centre which - is by default the first atom index in the array. For reconstructing molecules this is fine. However, for attribution, - we may have to shift a whole molecule to come closer to the atoms with high attribution. In that case, we manually assign - the atom index. + centre: by default the atoms in a molecule or set of close atoms are shifted so as to get them close + to the centre which is by default the first atom index in the array. For reconstructing molecules this is fine. + However, for attribution, we may have to shift a whole molecule to come closer to the atoms with high attribution. + In that case, we manually assign the atom index. """ sys_xyz = torch.Tensor(atomsobject.get_positions(wrap=True)) @@ -115,7 +120,7 @@ def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: center = centre # changes the central atom to atom in focus intra_dmat = (mol_xyz[None, :, ...] - mol_xyz[:, None, ...])[center] if np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) != 0: - M, N = intra_dmat.shape[0], intra_dmat.shape[1] + M, _ = intra_dmat.shape[0], intra_dmat.shape[1] f = torch.linalg.solve(torch.Tensor(atomsobject.cell.T), (intra_dmat.view(-1, 3).T)).T g = f - torch.floor(f + 0.5) intra_dmat = torch.matmul(g, torch.Tensor(atomsobject.cell)) @@ -124,13 +129,12 @@ def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: traj_unwrap = mol_xyz + torch.matmul(offsets, torch.Tensor(atomsobject.cell)) else: (intra_dmat > 0.5 * box_len).to(torch.float) * box_len - add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len + (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len shift = torch.round(torch.divide(intra_dmat, box_len)) offsets = -shift traj_unwrap = mol_xyz + offsets * box_len else: traj_unwrap = mol_xyz - # traj_unwrap=mol_xyz+add-sub sys_xyz[idx] = traj_unwrap new_pos = sys_xyz.numpy() @@ -138,11 +142,8 @@ def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: return new_pos -# - - - class Attribution: - def __init__(self, ensemble: EnsembleNFF, save_file: str = None): + def __init__(self, ensemble: EnsembleNFF, save_file: Optional[str] = None): self.ensemble = ensemble self.save_file = save_file @@ -197,7 +198,7 @@ def calc_attribution_file( step: int = 1, progress_bar: bool = True, to_chemiscope: bool = False, - bond_length: dict = None, + bond_length: Optional[dict] = None, ) -> list: attributions = [] atoms_list = [] @@ -206,7 +207,7 @@ def calc_attribution_file( grads = [] grad_stds = [] with tqdm( - range(skip, len(traj), step), disable=True if progress_bar == False else False + range(skip, len(traj), step), disable= not progress_bar ) as pbar: # , postfix={"fbest":"?",}) as pbar: # for i in range(skip,len(traj),step): for i in pbar: @@ -280,11 +281,11 @@ def activelearning( skip: int = 0, step: int = 1, progress_bar: bool = True, - bond_length: dict = None, + bond_length: Optional[dict] = None, ): atom_list = [] with tqdm( - range(skip, len(traj), step), disable=True if progress_bar == False else False + range(skip, len(traj), step), disable=not progress_bar ) as pbar: # , postfix={"fbest":"?",}) as pbar: # for i in range(skip,len(traj),step): for i in pbar: diff --git a/nff/analysis/attribution_deprecate.py b/nff/analysis/attribution_deprecate.py index 6cc0c1fd..f98c6aff 100644 --- a/nff/analysis/attribution_deprecate.py +++ b/nff/analysis/attribution_deprecate.py @@ -1,3 +1,4 @@ +# ruff: noqa from typing import Union import numpy as np diff --git a/nff/analysis/cp3d.py b/nff/analysis/cp3d.py index 9d605b55..e03a8621 100644 --- a/nff/analysis/cp3d.py +++ b/nff/analysis/cp3d.py @@ -40,8 +40,8 @@ def get_pred_files(model_path): # should have the form _pred_.pickle # or pred_.pickle splits = ["train", "val", "test"] - starts_split = any([file.startswith(f"{split}_pred") for split in splits]) - starts_pred = any([file.startswith("pred") for split in splits]) + starts_split = any(file.startswith(f"{split}_pred") for split in splits) + starts_pred = file.startswith("pred") if (not starts_split) and (not starts_pred): continue if not file.endswith("pickle"): @@ -125,10 +125,7 @@ def annotate_confs(dic): num_heads, is_linear = get_att_type(dic) for sub_dic in dic.values(): num_confs = sub_dic["boltz_weights"].shape[0] - if is_linear: - split_sizes = [num_confs] * num_heads - else: - split_sizes = [num_confs**2] * num_heads + split_sizes = [num_confs] * num_heads if is_linear else [num_confs ** 2] * num_heads learned = torch.Tensor(sub_dic["learned_weights"]) head_weights = torch.split(learned, split_sizes) @@ -420,9 +417,9 @@ def report_delta(bare_dic): delta_delta_mean = delta_att_mean - delta_rand_mean delta_delta_std = (np.var(delta_att) + np.var(delta_rand)) ** 0.5 / (len(delta_att)) ** 0.5 - fprint("Delta att: %.4f +/- %.4f" % (delta_att_mean, delta_att_std)) - fprint("Delta rand: %.4f +/- %.4f" % (delta_rand_mean, delta_rand_std)) - fprint("Delta delta: %.4f +/- %.4f" % (delta_delta_mean, delta_delta_std)) + fprint(f"Delta att: {delta_att_mean:.4f} +/- {delta_att_std:.4f}") + fprint(f"Delta rand: {delta_rand_mean:.4f} +/- {delta_rand_std:.4f}") + fprint(f"Delta delta: {delta_delta_mean:.4f} +/- {delta_delta_std:.4f}") fprint("\n") @@ -516,7 +513,7 @@ def get_scores(path, avg_metrics=["auc", "prc-auc"]): true = [sub_dic["true"] for sub_dic in dic.values()] # then it's not a binary classification problem - if any([i not in [0, 1] for i in true]): + if any(i not in [0, 1] for i in true): return None auc_score = roc_auc_score(y_true=true, y_score=pred) diff --git a/nff/analysis/mpl_settings.py b/nff/analysis/mpl_settings.py index cd21fbdc..2a238246 100644 --- a/nff/analysis/mpl_settings.py +++ b/nff/analysis/mpl_settings.py @@ -1,6 +1,6 @@ import json from pathlib import Path -from typing import List +from typing import List, Optional import matplotlib import matplotlib.pyplot as plt @@ -84,7 +84,7 @@ def rgb_to_dec(value: list): return [v / 256 for v in value] -def get_continuous_cmap(hex_list: List[str], float_list: List[float] = None) -> matplotlib.colors.Colormap: +def get_continuous_cmap(hex_list: List[str], float_list: Optional[List[float]] = None) -> matplotlib.colors.Colormap: """ Creates and returns a color map that can be used in heat map figures. If float_list is not provided, colour map graduates linearly between each color in hex_list. diff --git a/nff/analysis/parity_plot.py b/nff/analysis/parity_plot.py index 77cb39fe..8893015b 100644 --- a/nff/analysis/parity_plot.py +++ b/nff/analysis/parity_plot.py @@ -92,13 +92,13 @@ def plot_parity( label = key ax.set_title(label.upper()) - ax.set_xlabel("Predicted %s [%s]" % (label, units[key])) - ax.set_ylabel("Target %s [%s]" % (label, units[key])) + ax.set_xlabel(f"Predicted {label} [{units[key]}]") + ax.set_ylabel(f"Target {label} [{units[key]}]") ax.text( 0.1, 0.9, - "MAE: %.2f %s" % (mae, units[key]), + f"MAE: {mae:.2f} {units[key]}", transform=ax.transAxes, ) @@ -192,7 +192,7 @@ def plot_err_var( label="Avg. best fit", zorder=1, ) - min_text = ax.text( + ax.text( 0.6, 0.9, rf"$R^2$: {res.rvalue**2:.3f}", diff --git a/nff/analysis/roce.py b/nff/analysis/roce.py index 8f04a7c8..4d4e363f 100644 --- a/nff/analysis/roce.py +++ b/nff/analysis/roce.py @@ -293,7 +293,7 @@ def parse_json(pred_path, target, split): pred_dic = json.load(f_open) # int keys for different seeds - int_keys = list([i for i in pred_dic.keys() if i.isdigit()]) + int_keys = [i for i in pred_dic if i.isdigit()] # get the predictions of each seed preds = [] diff --git a/nff/data/crystals.py b/nff/data/crystals.py index 5b54d8c9..9504d100 100644 --- a/nff/data/crystals.py +++ b/nff/data/crystals.py @@ -1,7 +1,5 @@ import torch -# from pymatgen.core.structure import Structure - def get_crystal_graph(crystal, cutoff): """Creates nxyz and periodic reindexing for a given Structure. @@ -21,7 +19,7 @@ def get_crystal_graph(crystal, cutoff): pbc = list(range(len(sites))) for site in crystal.sites: - for site, _, idx, _ in crystal.get_neighbors(site, cutoff, include_index=True, include_image=True): + for site, _, idx, _ in crystal.get_neighbors(site, cutoff, include_index=True, include_image=True): # noqa if site not in sites: sites.append(site) pbc.append(idx) diff --git a/nff/data/features/graph.py b/nff/data/features/graph.py index 804ff2cb..a31f1dd1 100644 --- a/nff/data/features/graph.py +++ b/nff/data/features/graph.py @@ -90,7 +90,7 @@ def remove_bad_idx(dataset, smiles_list, bad_idx, verbose=True): None """ - bad_idx = sorted(list(set(bad_idx))) + bad_idx = list(set(bad_idx)) new_props = {} for key, values in dataset.props.items(): new_props[key] = [val for i, val in enumerate(values) if i not in bad_idx] @@ -314,11 +314,7 @@ def get_enum_func(track): tqdm if track == True. """ - if track: - func = tqdm_enum - else: - func = enumerate - return func + return tqdm_enum if track else enumerate def make_rd_mols(dataset, verbose=True, check_smiles=False, track=True): @@ -364,8 +360,7 @@ def make_rd_mols(dataset, verbose=True, check_smiles=False, track=True): missing_e = [] # go through each conformer nxyz - - for j, nxyz in enumerate(nxyz_list): + for nxyz in nxyz_list: # if a conformer in the species has already failed # to produce an RDKit mol, then don't bother converting # any of the other conformers for that species @@ -374,7 +369,6 @@ def make_rd_mols(dataset, verbose=True, check_smiles=False, track=True): continue # coordinates and atomic numbers - xyz = nxyz[:, 1:].tolist() atoms = nxyz[:, 0].numpy().astype("int").tolist() @@ -501,6 +495,7 @@ def bond_feat_to_vec(feat_type, feat): options = STEREO_OPTIONS one_hot = make_one_hot(options=options, result=stereo) return one_hot + return ValueError(f"Unrecognized feature type {feat_type}") def get_bond_features(bond, feat_type): @@ -596,6 +591,7 @@ def atom_feat_to_vec(feat_type, feat): result = torch.Tensor([feat / 100]) return result + return ValueError(f"Unrecognized feature type {feat_type}") def get_atom_features(atom, feat_type): @@ -743,7 +739,7 @@ def featurize_bonds(dataset, feat_types=BOND_FEAT_TYPES, track=True): # add to the features `all_props`, which contains # the bond features of all the conformers of this species - for key, feat in feat_dic.items(): + for feat in feat_dic.values(): all_props[-1] = torch.cat((all_props[-1], feat)) # shift the bond list for each conformer to take into account @@ -782,7 +778,7 @@ def featurize_atoms(dataset, feat_types=ATOM_FEAT_TYPES, track=True): enum = get_enum_func(track) # go through each set of RDKit mols for each species - for i, rd_mols in enum(dataset.props["rd_mols"]): + for _, rd_mols in enum(dataset.props["rd_mols"]): # initialize a list of features for each atom all_props = [] @@ -797,7 +793,7 @@ def featurize_atoms(dataset, feat_types=ATOM_FEAT_TYPES, track=True): # get the atomic features feat_dic = get_all_atom_feats(atom=atom, feat_types=feat_types) - for key, feat in feat_dic.items(): + for feat in feat_dic.values(): all_props[-1] = torch.cat((all_props[-1], feat)) # stack the atomic features @@ -827,12 +823,7 @@ def decode_one_hot(options, vector): # otherwise return the option at the nonzero index # (or None if it's the last index or everything is 0) index = vector.nonzero() - if len(index) == 0 or index >= len(options): - result = None - else: - result = options[index] - - return result + return None if len(index) == 0 or index >= len(options) else options[index] def decode_atomic(features, meta_data=META_DATA): @@ -957,10 +948,7 @@ def add_morgan(dataset, vec_length): dataset.props["morgan"] = [] for smiles in dataset.props["smiles"]: mol = Chem.MolFromSmiles(smiles) - if vec_length != 0: - morgan = AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, nBits=vec_length) - else: - morgan = [] + morgan = AllChem.GetMorganFingerprintAsBitVect(mol, radius=2, nBits=vec_length) if vec_length != 0 else [] arr_morgan = np.array(list(morgan)).astype("float32") morgan_tens = torch.tensor(arr_morgan) diff --git a/nff/data/graphs.py b/nff/data/graphs.py index 045f1e4d..32c23a75 100644 --- a/nff/data/graphs.py +++ b/nff/data/graphs.py @@ -118,7 +118,7 @@ def get_neighbor_list(xyz, cutoff=5, undirected=True): indices of connected atoms. """ - if torch.is_tensor(xyz) == False: + if not torch.is_tensor(xyz): xyz = torch.Tensor(xyz) n = xyz.size(0) @@ -243,7 +243,7 @@ def generate_subgraphs(atomsobject, unwrap=True, get_edge=False): edge_list = [] partitions = [] - for i, sg in enumerate(sub_graphs): + for sg in sub_graphs: partitions.append(list(sg.nodes)) if get_edge: edge_list.append(list(sg.edges)) @@ -280,7 +280,7 @@ def reconstruct_atoms(atomsobject, mol_idx): def list2adj(bond_list, size=None): E = bond_list if size is None: - size = max(set([n for e in E for n in e])) + 1 + size = max({n for e in E for n in e}) + 1 # make an empty adjacency list adjacency = [[0] * size for _ in range(size)] # populate the list for each edge diff --git a/nff/data/loader.py b/nff/data/loader.py index 120260d8..1916bad1 100644 --- a/nff/data/loader.py +++ b/nff/data/loader.py @@ -42,7 +42,7 @@ def collate_dicts(dicts): if key in d: d[key] = d[key] + int(n) - if all(["nbr_list" in d for d in dicts]): + if all("nbr_list" in d for d in dicts): # same idea, but for quantities whose maximum value is the length of # the nbr list in each batch cumulative_nbrs = np.cumsum([0] + [len(d["nbr_list"]) for d in dicts])[:-1] @@ -214,8 +214,7 @@ def __iter__(self): # by using `these_weights` add_idx = torch.multinomial(these_weights, self.batch_size, replacement=True) - for idx in add_idx: - batch.append(idx) + batch.extend(add_idx.tolist().copy()) yield batch batch = [] diff --git a/nff/data/parallel.py b/nff/data/parallel.py index a4340b91..c6589d26 100644 --- a/nff/data/parallel.py +++ b/nff/data/parallel.py @@ -230,7 +230,7 @@ def featurize_parallel(dataset, num_procs, bond_feats=BOND_FEAT_TYPES, atom_feat datasets = split_dataset(dataset=dataset, num=num_procs) # add RDKit mols if they're not already in the dataset - has_rdmols = all(["rd_mols" in dset.props for dset in datasets]) + has_rdmols = all("rd_mols" in dset.props for dset in datasets) if not has_rdmols: fprint("Converting xyz to RDKit mols...") datasets = rd_parallel(datasets) diff --git a/nff/data/stats.py b/nff/data/stats.py index 310b950e..03a1627a 100644 --- a/nff/data/stats.py +++ b/nff/data/stats.py @@ -1,7 +1,7 @@ """Module to deal with statistics of the datasets, removal of outliers and other statistical functions.""" import logging -from typing import Dict, List, Tuple, Union +from typing import Dict, List, Optional, Tuple, Union import numpy as np import torch @@ -16,8 +16,8 @@ def remove_outliers( array: Union[List, np.ndarray, torch.Tensor], std_away: float = 3.0, - reference_mean: float = None, - reference_std: float = None, + reference_mean: Optional[float] = None, + reference_std: Optional[float] = None, max_value: float = np.inf, ) -> Tuple[np.ndarray, np.ndarray, float, float]: """Remove outliers from given array using both a number of standard @@ -53,14 +53,8 @@ def remove_outliers( stats_array = array.copy() max_values = stats_array.copy() # used for outlier removal - if not reference_mean: - mean = np.mean(stats_array) - else: - mean = reference_mean - if not reference_std: - std = np.std(stats_array) - else: - std = reference_std + mean = reference_mean if reference_mean else np.mean(stats_array) + std = reference_std if reference_std else np.std(stats_array) non_outlier = np.bitwise_and(np.abs(max_values - mean) < std_away * std, max_values < max_value) non_outlier = np.arange(len(array))[non_outlier] @@ -76,8 +70,8 @@ def remove_outliers( def remove_dataset_outliers( dset: Dataset, reference_key: str = "energy", - reference_mean: float = None, - reference_std: float = None, + reference_mean: Optional[float] = None, + reference_std: Optional[float] = None, std_away: float = 3.0, max_value: float = np.inf, ) -> Tuple[Dataset, float, float]: @@ -121,7 +115,7 @@ def remove_dataset_outliers( def center_dataset( - dset: Dataset, reference_key: str = "energy", reference_value: float = None + dset: Dataset, reference_key: str = "energy", reference_value: Optional[float] = None ) -> Tuple[Dataset, float]: """Center a dataset by subtracting the mean of the reference key. @@ -266,7 +260,7 @@ def get_stoich_dict(dset: Dataset, formula_key: str = "formula", energy_key: str err = abs(pred - y_out).mean() # in kcal/mol logging.info("MAE between target energy and stoich energy is %.3f kcal/mol", err) logging.info("R : %s", clf.score(x_in, y_out)) - fit_dic = {atom: coef for atom, coef in zip(unique_atoms, clf.coef_.reshape(-1))} + fit_dic = {atom: coef for atom, coef in zip(unique_atoms, clf.coef_.reshape(-1))} # noqa stoich_dict = {**fit_dic, "offset": clf.intercept_.item()} logging.info(stoich_dict) @@ -303,10 +297,7 @@ def perform_energy_offset( formulas = dset.props[formula_key] energies = dset.props[energy_key] - if isinstance(energies, torch.Tensor): - new_energies = energies.clone() - else: - new_energies = energies.copy() + new_energies = energies.clone() if isinstance(energies, torch.Tensor) else energies.copy() for i, formula in enumerate(formulas): dictio = get_atom_count(formula) diff --git a/nff/data/utils.py b/nff/data/utils.py index 1d98871e..4e6038df 100644 --- a/nff/data/utils.py +++ b/nff/data/utils.py @@ -1,7 +1,7 @@ import os import shutil import tempfile -from urllib import request as request +from urllib import request import numpy as np diff --git a/nff/io/ase_ax.py b/nff/io/ase_ax.py index 279636c2..8c868df8 100644 --- a/nff/io/ase_ax.py +++ b/nff/io/ase_ax.py @@ -79,7 +79,7 @@ def get_nxyz(self): return nxyz - def get_batch(self, device="cpu"): + def get_batch(self): """Uses the properties of Atoms to create a batch to be sent to the model. @@ -132,7 +132,7 @@ def update_nbr_list(self): nbr_list = self.nbr_list if any(self.pbc): - offsets = offsets[self.nbr_list[:, 0], self.nbr_list[:, 1], :].detach().to("cpu").numpy() + offsets = self.offsets[self.nbr_list[:, 0], self.nbr_list[:, 1], :].detach().to("cpu").numpy() else: offsets = np.zeros((self.nbr_list.shape[0], 3)) @@ -148,13 +148,13 @@ def update_nbr_list(self): return nbr_list, offsets - def batch_properties(): + def batch_properties(self): pass - def batch_kinetic_energy(): + def batch_kinetic_energy(self): pass - def batch_virial(): + def batch_virial(self): pass @classmethod @@ -170,7 +170,7 @@ def from_atoms(cls, atoms, props=None, needs_angles=False, device=0, **kwargs): class NeuralFF(Calculator): """ASE calculator using a pretrained NeuralFF model""" - implemented_properties = ["energy", "forces"] + implemented_properties = ["energy", "forces"] # noqa def __init__( self, @@ -229,7 +229,7 @@ def calculate(self, atomsbatch=None, properties=["energy", "forces"], system_cha system_changes (default from ase) """ - if not any([isinstance(self.model, i) for i in UNDIRECTED]): + if not any(isinstance(self.model, i) for i in UNDIRECTED): check_directed(self.model, atomsbatch) Calculator.calculate(self, atomsbatch, properties, system_changes) diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 2cc8561a..22019ef0 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -49,7 +49,7 @@ def check_directed(model, atoms): class NeuralFF(Calculator): """ASE calculator using a pretrained NeuralFF model""" - implemented_properties = ["energy", "forces", "stress", "embedding"] + implemented_properties = ["energy", "forces", "stress", "embedding"] # noqa def __init__( self, @@ -97,11 +97,11 @@ def log_embedding(self, jobdir, log_filename, props): sampling after calling NFF on geometries.""" log_file = os.path.join(jobdir, log_filename) + # ruff: noqa: SIM108 if os.path.exists(log_file): log = np.load(log_file) else: log = None - if log is not None: log = np.append(log, props[None, :, :, :], axis=0) else: @@ -109,8 +109,6 @@ def log_embedding(self, jobdir, log_filename, props): np.save(log_filename, log) - return - def calculate( self, atoms: AtomsBatch = None, @@ -126,7 +124,7 @@ def calculate( system_changes (default from ase) """ - if not any([isinstance(self.model, i) for i in UNDIRECTED]): + if not any(isinstance(self.model, i) for i in UNDIRECTED): check_directed(self.model, atoms) # for backwards compatability @@ -174,10 +172,7 @@ def calculate( else: energy = prediction_numpy[self.en_key] - if grad_key in prediction_numpy: - energy_grad = prediction_numpy[grad_key] - else: - energy_grad = None + energy_grad = prediction_numpy.get(grad_key, None) # TODO: implement unit conversion with prediction_numpy self.results = {"energy": energy.reshape(-1)} @@ -234,7 +229,7 @@ class EnsembleNFF(Calculator): """Produces an ensemble of NFF calculators to predict the discrepancy between the properties""" - implemented_properties = ["energy", "forces", "stress", "energy_std", "forces_std", "stress_std"] + implemented_properties = ["energy", "forces", "stress", "energy_std", "forces_std", "stress_std"] # noqa def __init__( self, @@ -336,7 +331,7 @@ def calculate( """ for model in self.models: - if not any([isinstance(model, i) for i in UNDIRECTED]): + if not any(isinstance(model, i) for i in UNDIRECTED): check_directed(model, atoms) if getattr(self, "properties", None) is None: @@ -437,7 +432,7 @@ def calculate( if "forces_disp" in prediction: self.results["forces"] = self.results["forces"] + prediction["forces_disp"] if self.jobdir is not None: - forces_std = self.results["forces_std"][None, :, :] + forces_std = self.results["forces_std"][None, :, :] # noqa self.log_ensemble(self.jobdir, "forces_nff_ensemble.npy", -1 * gradients) if "stress" in properties: @@ -446,7 +441,7 @@ def calculate( if "stress_disp" in prediction: self.results["stress"] = self.results["stress"] + prediction["stress_disp"] if self.jobdir is not None: - stress_std = self.results["stress_std"][None, :, :] + stress_std = self.results["stress_std"][None, :, :] # noqa self.log_ensemble(self.jobdir, "stress_nff_ensemble.npy", stresses) atoms.results = self.results.copy() @@ -460,7 +455,7 @@ def set(self, **kwargs): The special keyword 'parameters' can be used to read parameters from a file.""" changed_params = Calculator.set(self, **kwargs) - if "offset_data" in self.parameters.keys(): + if "offset_data" in self.parameters: self.offset_data = self.parameters["offset_data"] print(f"offset data: {self.offset_data} is set from parameters") @@ -480,7 +475,7 @@ def __init__(self, optimizer, nbrlist_update_freq=5): def run(self, fmax=0.2, steps=1000): epochs = steps // self.update_freq - for step in range(epochs): + for _ in range(epochs): self.optimizer.run(fmax=fmax, steps=self.update_freq) self.optimizer.atoms.update_nbr_list() @@ -617,7 +612,7 @@ def calculate( system_changes=all_changes, add_steps=True, ): - if not any([isinstance(self.model, i) for i in UNDIRECTED]): + if not any(isinstance(self.model, i) for i in UNDIRECTED): check_directed(self.model, atoms) super().calculate(atoms=atoms, properties=properties, system_changes=system_changes) @@ -784,7 +779,7 @@ def __init__( model=model, device=device, en_key=en_key, - directed=DEFAULT_DIRECTED, + directed=directed, **kwargs, ) self.V_min = V_min @@ -794,7 +789,7 @@ def __init__( self.k = self.k_0 / (self.V_max - self.V_min) def calculate(self, atoms, properties=["energy", "forces"], system_changes=all_changes): - if not any([isinstance(self.model, i) for i in UNDIRECTED]): + if not any(isinstance(self.model, i) for i in UNDIRECTED): check_directed(self.model, atoms) super().calculate(atoms=atoms, properties=properties, system_changes=system_changes) @@ -1003,7 +998,7 @@ def setup_contraint(self, cvdic, max_steps, device): max_steps (int): maximum number of steps of the MD simulation device: device """ - for cvname, val in cvdic.items(): + for val in cvdic.values(): if val["type"].lower() == "proj_vec_plane": mol_inds = [i - 1 for i in val["mol"]] # caution check type ring_inds = [i - 1 for i in val["ring"]] @@ -1105,7 +1100,7 @@ def get_bias(self, positions, step): class NeuralRestraint(Calculator): """ASE calculator to run Neural restraint MD simulations""" - implemented_properties = ["energy", "forces", "stress"] + implemented_properties = ["energy", "forces", "stress"] # noqa def __init__( self, @@ -1160,7 +1155,7 @@ def calculate( # print("calculating ...") self.step += 1 # print("step ", self.step, self.step*0.0005) - if not any([isinstance(self.model, i) for i in UNDIRECTED]): + if not any(isinstance(self.model, i) for i in UNDIRECTED): check_directed(self.model, atoms) # for backwards compatability diff --git a/nff/io/ase_utils.py b/nff/io/ase_utils.py index 3ac70b2a..e94130ba 100644 --- a/nff/io/ase_utils.py +++ b/nff/io/ase_utils.py @@ -110,7 +110,7 @@ def __init__(self, idx, atoms, force_consts, targ_angles=None): else: self.targ_angles = np.radians(atoms.get_angles(self.idx)) - if isinstance(force_consts, float) or isinstance(force_consts, int): + if isinstance(force_consts, (float, int)): self.force_consts = np.array([float(force_consts)] * len(self.idx)) else: assert len(force_consts) == len(self.idx) @@ -163,7 +163,7 @@ def __init__(self, idx, atoms, force_consts, targ_diheds=None): else: self.targ_diheds = np.radians(atoms.get_dihedrals(self.idx)) - if isinstance(force_consts, float) or isinstance(force_consts, int): + if isinstance(force_consts, (float, int)): self.force_consts = np.array([float(force_consts)] * len(self.idx)) else: assert len(force_consts) == len(self.idx) @@ -204,7 +204,7 @@ def __init__(self, idx, atoms, force_consts, targ_lengths=None): deltas = atoms.get_positions()[idx[:, 0]] - atoms.get_positions()[idx[:, 1]] self.targ_lengths = np.linalg.norm(deltas, axis=-1) - if isinstance(force_consts, float) or isinstance(force_consts, int): + if isinstance(force_consts, (float, int)): self.force_consts = np.array([float(force_consts)] * len(self.idx)) else: assert len(force_consts) == len(self.idx) @@ -238,7 +238,7 @@ def __repr__(self): def split(array, num_atoms): shape = [-1] total_atoms = num_atoms.sum() - if not all([i == total_atoms for i in np.array(array).shape]): + if not all(i == total_atoms for i in np.array(array).shape): shape = [-1, 3] split_idx = np.cumsum(num_atoms) diff --git a/nff/io/bias_calculators.py b/nff/io/bias_calculators.py index 3a0c651e..670f24b7 100644 --- a/nff/io/bias_calculators.py +++ b/nff/io/bias_calculators.py @@ -1,4 +1,4 @@ -from typing import Tuple, Union +from typing import Dict, List, Optional, Tuple, Union import numpy as np from ase import units @@ -29,7 +29,7 @@ class BiasBase(NeuralFF): equil_temp: float temperature of the simulation (important for extended system dynamics) """ - implemented_properties = [ + implemented_properties = [ # noqa "energy", "forces", "stress", @@ -52,7 +52,7 @@ def __init__( device="cpu", en_key="energy", directed=DEFAULT_DIRECTED, - extra_constraints: list[dict] = None, + extra_constraints: Optional[List[Dict]] = None, **kwargs, ): NeuralFF.__init__(self, model=model, device=device, en_key=en_key, directed=directed, **kwargs) @@ -78,29 +78,26 @@ def __init__( self.conf_k = np.zeros(shape=(self.num_cv, 1)) for ii, cv in enumerate(self.cv_defs): - if "range" in cv.keys(): + if "range" in cv: self.ext_coords[ii] = cv["range"][0] self.ranges[ii] = cv["range"] else: raise KeyError("range") - if "margin" in cv.keys(): + if "margin" in cv: self.margins[ii] = cv["margin"] - if "conf_k" in cv.keys(): + if "conf_k" in cv: self.conf_k[ii] = cv["conf_k"] - if "ext_k" in cv.keys(): + if "ext_k" in cv: self.ext_k[ii] = cv["ext_k"] - elif "ext_sigma" in cv.keys(): + elif "ext_sigma" in cv: self.ext_k[ii] = (units.kB * self.equil_temp) / (cv["ext_sigma"] * cv["ext_sigma"]) else: raise KeyError("ext_k/ext_sigma") - if "type" not in cv.keys(): - self.cv_defs[ii]["type"] = "not_angle" - else: - self.cv_defs[ii]["type"] = cv["type"] + self.cv_defs[ii]["type"] = cv.get("type", "not_angle") self.constraints = None self.num_const = 0 @@ -112,17 +109,14 @@ def __init__( self.constraints[-1]["func"] = CV(cv["definition"]) self.constraints[-1]["pos"] = cv["pos"] - if "k" in cv.keys(): + if "k" in cv: self.constraints[-1]["k"] = cv["k"] - elif "sigma" in cv.keys(): + elif "sigma" in cv: self.constraints[-1]["k"] = (units.kB * self.equil_temp) / (cv["sigma"] * cv["sigma"]) else: raise KeyError("k/sigma") - if "type" not in cv.keys(): - self.constraints[-1]["type"] = "not_angle" - else: - self.constraints[-1]["type"] = cv["type"] + self.constraints[-1]["type"] = cv.get("type", "not_angle") self.num_const = len(self.constraints) @@ -275,7 +269,7 @@ def calculate( system_changes (default from ase) """ - if not any([isinstance(self.model, i) for i in UNDIRECTED]): + if not any(isinstance(self.model, i) for i in UNDIRECTED): check_directed(self.model, atoms) # for backwards compatability @@ -323,7 +317,7 @@ def calculate( cv_grad_lens = np.zeros(shape=(self.num_cv, 1)) cv_invmass = np.zeros(shape=(self.num_cv, 1)) cv_dot_PES = np.zeros(shape=(self.num_cv, 1)) - for ii, cv_def in enumerate(self.cv_defs): + for ii, _ in enumerate(self.cv_defs): xi, xi_grad = self.the_cv[ii](atoms) cvs[ii] = xi cv_grads[ii] = xi_grad @@ -387,7 +381,8 @@ class with neural force field [["cv_type", [atom_indices], np.array([minimum, maximum]), bin_width], [possible second dimension]] equil_temp: float temperature of the simulation (important for extended system dynamics) dt: time step of the extended dynamics (has to be equal to that of the real system dyn!) - friction_per_ps: friction for the Lagevin dyn of extended system (has to be equal to that of the real system dyn!) + friction_per_ps: friction for the Lagevin dyn of extended system + (has to be equal to that of the real system dyn!) nfull: numer of samples need for full application of bias force """ @@ -419,20 +414,20 @@ def __init__( self.nfull = nfull for ii, cv in enumerate(self.cv_defs): - if "bin_width" in cv.keys(): + if "bin_width" in cv: self.ext_binwidth[ii] = cv["bin_width"] - elif "ext_sigma" in cv.keys(): + elif "ext_sigma" in cv: self.ext_binwidth[ii] = cv["ext_sigma"] else: raise KeyError("bin_width") - if "ext_pos" in cv.keys(): + if "ext_pos" in cv: # set initial position self.ext_coords[ii] = cv["ext_pos"] else: raise KeyError("ext_pos") - if "ext_mass" in cv.keys(): + if "ext_mass" in cv: self.ext_masses[ii] = cv["ext_mass"] else: raise KeyError("ext_mass") @@ -567,7 +562,8 @@ class with neural force field "SaMD: apply Sigmoid accelerated MD equil_temp: float temperature of the simulation (important for extended system dynamics) dt: time step of the extended dynamics (has to be equal to that of the real system dyn!) - friction_per_ps: friction for the Lagevin dyn of extended system (has to be equal to that of the real system dyn!) + friction_per_ps: friction for the Lagevin dyn of extended system + (has to be equal to that of the real system dyn!) nfull: numer of samples need for full application of bias force """ @@ -794,7 +790,8 @@ class WTMeABF(eABF): [["cv_type", [atom_indices], np.array([minimum, maximum]), bin_width], [possible second dimension]] equil_temp: float temperature of the simulation (important for extended system dynamics) dt: time step of the extended dynamics (has to be equal to that of the real system dyn!) - friction_per_ps: friction for the Lagevin dyn of extended system (has to be equal to that of the real system dyn!) + friction_per_ps: friction for the Lagevin dyn of extended system + (has to be equal to that of the real system dyn!) nfull: numer of samples need for full application of bias force hill_height: unscaled height of the MetaD Gaussian hills in eV hill_drop_freq: #steps between depositing Gaussians @@ -840,7 +837,7 @@ def __init__( self.center = [] for ii, cv in enumerate(self.cv_defs): - if "hill_std" in cv.keys(): + if "hill_std" in cv: self.hill_std[ii] = cv["hill_std"] self.hill_var[ii] = cv["hill_std"] * cv["hill_std"] else: @@ -936,11 +933,8 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: ind = np.ma.indices((len(self.center),))[0] ind = np.ma.masked_array(ind) - dist_to_centers = [] - for ii in range(self.num_cv): - dist_to_centers.append(self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"])) - - dist_to_centers = np.asarray(dist_to_centers) + dist_to_centers = np.array([self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"]) + for ii in range(self.num_cv)]) if self.num_cv > 1: ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0)] = np.ma.masked @@ -969,7 +963,7 @@ class AttractiveBias(NeuralFF): gamma: coupling strength, regulates strength of attraction """ - implemented_properties = [ + implemented_properties = [ # noqa "energy", "forces", "stress", @@ -992,7 +986,7 @@ def __init__( device="cpu", en_key="energy", directed=DEFAULT_DIRECTED, - extra_constraints: list[dict] = None, + extra_constraints: Optional[List[Dict]] = None, **kwargs, ): NeuralFF.__init__(self, model=model, device=device, en_key=en_key, directed=directed, **kwargs) @@ -1010,22 +1004,19 @@ def __init__( self.conf_k = np.zeros(shape=(self.num_cv, 1)) for ii, cv in enumerate(self.cv_defs): - if "range" in cv.keys(): + if "range" in cv: self.ext_coords[ii] = cv["range"][0] self.ranges[ii] = cv["range"] else: raise KeyError("range") - if "margin" in cv.keys(): + if "margin" in cv: self.margins[ii] = cv["margin"] - if "conf_k" in cv.keys(): + if "conf_k" in cv: self.conf_k[ii] = cv["conf_k"] - if "type" not in cv.keys(): - self.cv_defs[ii]["type"] = "not_angle" - else: - self.cv_defs[ii]["type"] = cv["type"] + self.cv_defs[ii]["type"] = cv.get("type", "not_angle") self.constraints = None self.num_const = 0 @@ -1037,17 +1028,14 @@ def __init__( self.constraints[-1]["func"] = CV(cv["definition"]) self.constraints[-1]["pos"] = cv["pos"] - if "k" in cv.keys(): + if "k" in cv: self.constraints[-1]["k"] = cv["k"] - elif "sigma" in cv.keys(): + elif "sigma" in cv: self.constraints[-1]["k"] = (units.kB * self.equil_temp) / (cv["sigma"] * cv["sigma"]) else: raise KeyError("k/sigma") - if "type" not in cv.keys(): - self.constraints[-1]["type"] = "not_angle" - else: - self.constraints[-1]["type"] = cv["type"] + self.constraints[-1]["type"] = cv.get("type", "not_angle") self.num_const = len(self.constraints) @@ -1170,7 +1158,7 @@ def calculate( system_changes (default from ase) """ - if not any([isinstance(self.model, i) for i in UNDIRECTED]): + if not any(isinstance(self.model, i) for i in UNDIRECTED): check_directed(self.model, atoms) # for backwards compatability @@ -1218,7 +1206,7 @@ def calculate( cv_grad_lens = np.zeros(shape=(self.num_cv, 1)) cv_invmass = np.zeros(shape=(self.num_cv, 1)) cv_dot_PES = np.zeros(shape=(self.num_cv, 1)) - for ii, cv_def in enumerate(self.cv_defs): + for ii, _ in enumerate(self.cv_defs): xi, xi_grad = self.the_cv[ii](atoms) cvs[ii] = xi cv_grads[ii] = xi_grad diff --git a/nff/io/cprop.py b/nff/io/cprop.py index 6251d417..c61400ba 100644 --- a/nff/io/cprop.py +++ b/nff/io/cprop.py @@ -112,11 +112,7 @@ def make_feat_paths(feat_path): paths (list): list of paths """ - if feat_path is not None: - paths = [feat_path] - else: - paths = None - return paths + return [feat_path] if feat_path is not None else None def modify_config( diff --git a/nff/io/gmm.py b/nff/io/gmm.py index 0250b025..0b2735d2 100644 --- a/nff/io/gmm.py +++ b/nff/io/gmm.py @@ -330,7 +330,7 @@ def _compute_precision_cholesky(covariances, covariance_type): ------- precisions_cholesky : array-like The cholesky decomposition of sample precisions of the current - components. The shape depends of the covariance_type. + components. The shape depends on the covariance_type. """ estimate_precision_error_message = ( "Fitting the mixture model failed because some components have " @@ -345,15 +345,15 @@ def _compute_precision_cholesky(covariances, covariance_type): for k, covariance in enumerate(covariances): try: cov_chol = linalg.cholesky(covariance, lower=True) - except linalg.LinAlgError: - raise ValueError(estimate_precision_error_message) + except linalg.LinAlgError as e: + raise ValueError(estimate_precision_error_message) from e precisions_chol[k] = linalg.solve_triangular(cov_chol, np.eye(n_features), lower=True).T elif covariance_type == "tied": _, n_features = covariances.shape try: cov_chol = linalg.cholesky(covariances, lower=True) - except linalg.LinAlgError: - raise ValueError(estimate_precision_error_message) + except linalg.LinAlgError as e: + raise ValueError(estimate_precision_error_message) from e precisions_chol = linalg.solve_triangular(cov_chol, np.eye(n_features), lower=True).T else: if np.any(np.less_equal(covariances, 0.0)): diff --git a/nff/io/mace.py b/nff/io/mace.py index 467f1094..3836fe4f 100644 --- a/nff/io/mace.py +++ b/nff/io/mace.py @@ -2,7 +2,7 @@ import os import urllib from collections.abc import Iterable -from typing import Dict, List, Tuple, Union +from typing import Dict, List, Optional, Tuple, Union import numpy as np import torch @@ -37,7 +37,7 @@ def _check_non_zero(std): return std -def get_mace_mp_model_path(model: str = None) -> str: +def get_mace_mp_model_path(model: Optional[str] = None) -> str: """Get the default MACE MP model. Replicated from the MACE codebase, Copyright (c) 2022 ACEsuit/mace and licensed under the MIT license. @@ -158,7 +158,7 @@ def compute_average_E0s(train_dset: Dataset, z_table: AtomicNumberTable, desired except np.linalg.LinAlgError: logging.warning("Failed to compute E0s using least squares regression, using the same for all atoms") atomic_energies_dict = {} - for i, z in enumerate(z_table.zs): + for z in z_table.zs: atomic_energies_dict[z] = 0.0 train_dset.to_units(original_units) @@ -245,7 +245,7 @@ def update_mace_init_params( val: Dataset, train_loader: torch.utils.data.DataLoader, model_params: Dict, - logger: logging.Logger = None, + logger: Optional[logging.Logger] = None, ) -> Dict[str, Union[int, float, np.ndarray, List[int]]]: """Update the MACE model initialization parameters based values obtained from training and validation datasets. @@ -321,7 +321,7 @@ def get_example(self, idx: int) -> Data: data = {} idx = self.num_graphs + idx if idx < 0 else idx - for key in self.__slices__.keys(): + for key in self.__slices__: item = self[key] if self.__cat_dims__[key] is None: # The item was concatenated along a new batch dimension, diff --git a/nff/io/openmm_calculators.py b/nff/io/openmm_calculators.py index 1939cbb6..f4cd4e2b 100644 --- a/nff/io/openmm_calculators.py +++ b/nff/io/openmm_calculators.py @@ -1,4 +1,4 @@ -from typing import Tuple, Union +from typing import Dict, List, Optional, Tuple, Union import numpy as np import openmm as omm @@ -15,6 +15,9 @@ "NonPeriodic": app.CutoffNonPeriodic, } +class PropertyNotPresent(Exception): + pass + class BiasBase(Calculator): """Basic Calculator class with neural force field @@ -26,7 +29,7 @@ class BiasBase(Calculator): equil_temp: float temperature of the simulation (important for extended system dynamics) """ - implemented_properties = [ + implemented_properties = [ # noqa "energy", "forces", "energy_unbiased", @@ -41,14 +44,15 @@ class BiasBase(Calculator): ] def __init__( - self, mmparms, cv_defs: list[dict], equil_temp: float = 300.0, extra_constraints: list[dict] = None, **kwargs + self, mmparms, cv_defs: List[Dict], equil_temp: float = 300.0, extra_constraints: Optional[List[Dict]] = None, + **kwargs ): Calculator.__init__(self, **kwargs) # OpenMM setup - if "prmtop" in mmparms.keys(): + if "prmtop" in mmparms: parm = pmd.load_file(mmparms["prmtop"]) - elif "parm7" in mmparms.keys(): + elif "parm7" in mmparms: # for a list with parm7 and rst7 parm = pmd.load_file(mmparms["parm7"], mmparms["rst7"]) else: @@ -87,29 +91,26 @@ def __init__( self.conf_k = np.zeros(shape=(self.num_cv, 1)) for ii, cv in enumerate(self.cv_defs): - if "range" in cv.keys(): + if "range" in cv: self.ext_coords[ii] = cv["range"][0] self.ranges[ii] = cv["range"] else: raise PropertyNotPresent("range") - if "margin" in cv.keys(): + if "margin" in cv: self.margins[ii] = cv["margin"] - if "conf_k" in cv.keys(): + if "conf_k" in cv: self.conf_k[ii] = cv["conf_k"] - if "ext_k" in cv.keys(): + if "ext_k" in cv: self.ext_k[ii] = cv["ext_k"] - elif "ext_sigma" in cv.keys(): + elif "ext_sigma" in cv: self.ext_k[ii] = (units.kB * self.equil_temp) / (cv["ext_sigma"] * cv["ext_sigma"]) else: raise PropertyNotPresent("ext_k/ext_sigma") - if "type" not in cv.keys(): - self.cv_defs[ii]["type"] = "not_angle" - else: - self.cv_defs[ii]["type"] = cv["type"] + self.cv_defs[ii]["type"] = cv.get("type", "not_angle") self.constraints = None self.num_const = 0 @@ -121,17 +122,14 @@ def __init__( self.constraints[-1]["func"] = CV(cv["definition"]) self.constraints[-1]["pos"] = cv["pos"] - if "k" in cv.keys(): + if "k" in cv: self.constraints[-1]["k"] = cv["k"] - elif "sigma" in cv.keys(): + elif "sigma" in cv: self.constraints[-1]["k"] = (units.kB * self.equil_temp) / (cv["sigma"] * cv["sigma"]) else: raise PropertyNotPresent("k/sigma") - if "type" not in cv.keys(): - self.constraints[-1]["type"] = "not_angle" - else: - self.constraints[-1]["type"] = cv["type"] + self.constraints[-1]["type"] = cv.get("type", "not_angle") self.num_const = len(self.constraints) @@ -294,7 +292,7 @@ def calculate( inv_masses = 1.0 / atoms.get_masses() M_inv = np.diag(np.repeat(inv_masses, 3).flatten()) - for ii, cv_def in enumerate(self.cv_defs): + for ii, _ in enumerate(self.cv_defs): xi, xi_grad = self.the_cv[ii](atoms) self.cvs[ii] = xi self.cv_grads[ii] = xi_grad @@ -345,7 +343,8 @@ class with neural force field [["cv_type", [atom_indices], np.array([minimum, maximum]), bin_width], [possible second dimension]] equil_temp: float temperature of the simulation (important for extended system dynamics) dt: time step of the extended dynamics (has to be equal to that of the real system dyn!) - friction_per_ps: friction for the Lagevin dyn of extended system (has to be equal to that of the real system dyn!) + friction_per_ps: friction for the Lagevin dyn of extended system + (has to be equal to that of the real system dyn!) nfull: numer of samples need for full application of bias force """ @@ -365,20 +364,20 @@ def __init__( self.nfull = nfull for ii, cv in enumerate(self.cv_defs): - if "bin_width" in cv.keys(): + if "bin_width" in cv: self.ext_binwidth[ii] = cv["bin_width"] - elif "ext_sigma" in cv.keys(): + elif "ext_sigma" in cv: self.ext_binwidth[ii] = cv["ext_sigma"] else: raise PropertyNotPresent("bin_width") - if "ext_pos" in cv.keys(): + if "ext_pos" in cv: # set initial position self.ext_coords[ii] = cv["ext_pos"] else: raise PropertyNotPresent("ext_pos") - if "ext_mass" in cv.keys(): + if "ext_mass" in cv: self.ext_masses[ii] = cv["ext_mass"] else: raise PropertyNotPresent("ext_mass") @@ -496,7 +495,8 @@ class WTMeABF(eABF): [["cv_type", [atom_indices], np.array([minimum, maximum]), bin_width], [possible second dimension]] equil_temp: float temperature of the simulation (important for extended system dynamics) dt: time step of the extended dynamics (has to be equal to that of the real system dyn!) - friction_per_ps: friction for the Lagevin dyn of extended system (has to be equal to that of the real system dyn!) + friction_per_ps: friction for the Langevin dyn of extended system + (has to be equal to that of the real system dyn!) nfull: numer of samples need for full application of bias force hill_height: unscaled height of the MetaD Gaussian hills in eV hill_drop_freq: #steps between depositing Gaussians @@ -529,14 +529,14 @@ def __init__( self.hill_height = hill_height self.hill_drop_freq = hill_drop_freq - self.hill_std = np.zeros(shape=(self.num_cv)) - self.hill_var = np.zeros(shape=(self.num_cv)) + self.hill_std = np.zeros(self.num_cv) + self.hill_var = np.zeros(self.num_cv) self.well_tempered_temp = well_tempered_temp self.call_count = 0 self.center = [] for ii, cv in enumerate(self.cv_defs): - if "hill_std" in cv.keys(): + if "hill_std" in cv: self.hill_std[ii] = cv["hill_std"] self.hill_var[ii] = cv["hill_std"] * cv["hill_std"] else: @@ -632,11 +632,8 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: ind = np.ma.indices((len(self.center),))[0] ind = np.ma.masked_array(ind) - dist_to_centers = [] - for ii in range(self.num_cv): - dist_to_centers.append(self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"])) - - dist_to_centers = np.asarray(dist_to_centers) + dist_to_centers = np.array([self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"]) + for ii in range(self.num_cv)]) if self.num_cv > 1: ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0)] = np.ma.masked From 6f9ccb9e2aca9c1b8dac67cac72dfcd64e1373d7 Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 13:12:40 -0500 Subject: [PATCH 26/66] update lint config --- pyproject.toml | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ff05d35e..a3479de0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,14 +53,19 @@ Homepage = "https://github.mit.edu/MLMat/NeuralForceField/" [tool.setuptools] packages.find = { where = ["."], include = ["nff*"] } -[tool.autopep8] -max_line_length = 120 -in-place = true -recursive = true -aggressive = 2 - [tool.flake8] max_line_length = 120 +# F401 and F403: start imports, they are bad but everywhere +per-file-ignores = [ + '__init__.py:F401, F403', +] +# E741 ambiguous variable name 'l' +# F405 rely on objects from star imports, maybe worth removing in the future +# E203 no whitespace before ':', ruff prefers this for list comprehensions +extend-ignore = ['E741', 'F405', 'E203'] +exclude = [ + 'nff/nn/models/spooky_net_source/modules/electron_configurations.py' +] [tool.ruff] include = ["**/pyproject.toml", "*.ipynb", "*.py", "*.pyi"] @@ -133,5 +138,15 @@ ignore = [ "S310", # url open functions can be unsafe "TRY003", # long exception messages not defined in the exception class itself "UP015", # unnecessary "r" in open call + "Q000", # single quotes + "D103", # missing docstring in public function + "D", # do not fight with doc for now, todo in the future + "UP035", # deprecated Dict and List, but keep to support python<3.10 + "UP006", # deprecated Dict and List, but keep to support python<3.10 + "ICN001", # import name convention + "E741", # 'l' as variable name + "UP031", # Use format specifiers instead of percent format + "PD901", # dont name dataframes df + "FA100", # from future suggestion ] pydocstyle.convention = "google" From 05452f910afe36aaf2aacc1e5f0861e5947db6bd Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 13:20:08 -0500 Subject: [PATCH 27/66] remove print --- nff/tests/conftest.py | 1 - 1 file changed, 1 deletion(-) diff --git a/nff/tests/conftest.py b/nff/tests/conftest.py index 148fd0e0..66ca0a47 100644 --- a/nff/tests/conftest.py +++ b/nff/tests/conftest.py @@ -7,7 +7,6 @@ def pytest_addoption(parser): - print("add option") parser.addoption("--device", action="store", default="cpu", help="Whether to use the CPU or GPU for the tests") From e567529d37a69f3328716719632ff155e68a5dea Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 13:21:50 -0500 Subject: [PATCH 28/66] disable excited states test for now --- nff/tests/test_excited_states_training.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nff/tests/test_excited_states_training.py b/nff/tests/test_excited_states_training.py index 9b89e705..e576f72d 100644 --- a/nff/tests/test_excited_states_training.py +++ b/nff/tests/test_excited_states_training.py @@ -7,11 +7,13 @@ from torch.utils.data import DataLoader from torch.utils.data.sampler import RandomSampler +import pytest from nff.data import Dataset, split_train_validation_test, collate_dicts from nff.train import Trainer, get_model, loss, hooks, metrics, evaluate +@pytest.mark.skip("still taking too long, disable for now") def test_excited_training(device, tmpdir): # Loss function # Let's make a loss function for the model. We'll use three diabatic states, From 38bd679e8386fa0747e0b4cf34978a0aa2e983d6 Mon Sep 17 00:00:00 2001 From: steinmig Date: Tue, 17 Dec 2024 10:35:45 -0500 Subject: [PATCH 29/66] merge ignore improvements --- .gitignore | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.gitignore b/.gitignore index 6181965e..4b6cfd09 100644 --- a/.gitignore +++ b/.gitignore @@ -66,5 +66,17 @@ dist/ sandbox_excited/ build/ +# Editor files +# vim +*.swp +*.swo + +# pycharm +.idea/ + +# coverage and tests +junit +.coverage + # required exceptions !tutorials/models/ammonia/Ammonia.xyz From a90b3b5d781d48f396661feb4ccd29671f910357 Mon Sep 17 00:00:00 2001 From: steinmig Date: Fri, 20 Dec 2024 14:55:12 -0500 Subject: [PATCH 30/66] some minor fixes --- nff/data/dataset.py | 19 ++++++++++--------- nff/data/graphs.py | 8 ++++---- nff/io/ase.py | 20 -------------------- nff/tests/test_data/test_dataset.py | 2 +- 4 files changed, 15 insertions(+), 34 deletions(-) diff --git a/nff/data/dataset.py b/nff/data/dataset.py index b641fb4f..f11260e1 100644 --- a/nff/data/dataset.py +++ b/nff/data/dataset.py @@ -9,7 +9,7 @@ import numbers from collections import Counter from copy import deepcopy -from typing import TYPE_CHECKING, Literal +from typing import Any, Dict, List, TYPE_CHECKING, Literal import numpy as np import torch @@ -81,7 +81,12 @@ class Dataset(TorchDataset): """ def __init__( - self, props: dict, units: str = "kcal/mol", check_props: bool = True, do_copy: bool = True, device: str = "cuda" + self, + props: Dict[str, List[Any]], + units: str = "kcal/mol", + check_props: bool = True, + do_copy: bool = True, + device: str = "cuda" ) -> None: """Constructor for Dataset class. @@ -94,6 +99,7 @@ def __init__( to see if they are in the right format. do_copy (bool): whether to copy the properties or use the same dictionary. + device (str): The device to execute computations on ('cpu', 'cuda' etc.) """ if check_props: if do_copy: @@ -200,7 +206,7 @@ def generate_neighbor_list( undirected: bool = True, key: str = "nbr_list", offset_key: str = "offsets", - ) -> list: + ) -> list | tuple[list, list]: """Generates a neighbor list for each one of the atoms in the dataset. By default, does not consider periodic boundary conditions. @@ -222,11 +228,6 @@ def generate_neighbor_list( return self.props[key] - # def make_nbr_to_mol(self): - # nbr_to_mol = [] - # for nbrs in self.props['nbr_list']: - # nbrs_to_mol.append(torch.zeros(len(nbrs))) - def make_all_directed(self): """Make everything in the dataset directed.""" make_dset_directed(self) @@ -298,7 +299,7 @@ def _get_periodic_neighbor_list( def generate_bond_idx(self, num_procs: int = 1) -> None: """For each index in the bond list, get the - index in the neighbour list that corresponds to the + index in the neighbor list that corresponds to the same directed pair of atoms. Args: diff --git a/nff/data/graphs.py b/nff/data/graphs.py index 32c23a75..91d2dec3 100644 --- a/nff/data/graphs.py +++ b/nff/data/graphs.py @@ -151,7 +151,7 @@ def to_tuple(tensor): def get_bond_idx(bonded_nbr_list, nbr_list): """ For each index in the bond list, get the - index in the neighbour list that corresponds to the + index in the neighbor list that corresponds to the same directed pair of atoms. Args: bonded_nbr_list (torch.LongTensor): pairs @@ -447,9 +447,9 @@ def add_ji_kj(angle_lists, nbr_lists): """ Get ji and kj idx (explained more below): Args: - angle_list (list[torch.LongTensor]): list of angle + angle_lists (list[torch.LongTensor]): list of angle lists - nbr_list (list[torch.LongTensor]): list of directed neighbor + nbr_lists (list[torch.LongTensor]): list of directed neighbor lists Returns: ji_idx_list (list[torch.LongTensor]): ji_idx for each geom @@ -562,7 +562,7 @@ def full_angle_idx(batch): for i in range(num_confs): max_idx = (i + 1) * mol_size - min_idx = (i) * mol_size + min_idx = i * mol_size # get only the indices for this conformer conf_mask = (nbr_list[:, 0] < max_idx) * (nbr_list[:, 0] >= min_idx) diff --git a/nff/io/ase.py b/nff/io/ase.py index 60e43a37..69f16a38 100644 --- a/nff/io/ase.py +++ b/nff/io/ase.py @@ -91,7 +91,6 @@ def get_mol_nbrs(self, r_cut=95): """ # periodic systems if np.array([atoms.pbc.any() for atoms in self.get_list_atoms()]).any(): - nbrs = [] nbrs_T = [] nbrs = [] z = [] @@ -416,25 +415,6 @@ def get_batch_T(self): """ return self.get_batch_kinetic_energy() / (1.5 * units.kB * self.props["num_atoms"].detach().cpu().numpy()) - def batch_properties(): - """This function is used to batch process properties. - It takes in a list of properties and performs some operations on them. - """ - - def batch_virial(): - """Calculate the virial for a batch of systems. - - This function calculates the virial for a batch of systems using a specific algorithm. - The virial is a measure of the internal forces within a system - and is commonly used in molecular dynamics simulations. - - Parameters: - None - - Returns: - None - """ - @classmethod def from_atoms(cls, atoms, **kwargs): """Create an instance of the class from an ASE Atoms object. diff --git a/nff/tests/test_data/test_dataset.py b/nff/tests/test_data/test_dataset.py index 40434966..ea3304fb 100644 --- a/nff/tests/test_data/test_dataset.py +++ b/nff/tests/test_data/test_dataset.py @@ -258,7 +258,7 @@ def inject_device(self, device): self._test_fixture_device = device def test_neighbor_list(self): - nbrs, offs = self.qtz_dataset.generate_neighbor_list(cutoff=5) + self.qtz_dataset.generate_neighbor_list(cutoff=5) if __name__ == "__main__": From bbc72789c33182e8f38fe76280a936b6ca0d4255 Mon Sep 17 00:00:00 2001 From: steinmig Date: Fri, 20 Dec 2024 14:57:16 -0500 Subject: [PATCH 31/66] ruff formatting --- nff/analysis/attribution.py | 13 +++++-------- nff/analysis/cp3d.py | 2 +- nff/data/dataset.py | 2 +- nff/io/bias_calculators.py | 5 +++-- nff/io/mace.py | 6 ++---- nff/io/openmm_calculators.py | 14 ++++++++++---- nff/md/colvars.py | 4 +++- nff/md/nve.py | 6 ++---- nff/md/nvt.py | 24 ++++++++---------------- nff/md/special_thermostats.py | 6 ++---- nff/md/utils_ax.py | 8 +++----- nff/nn/graphop.py | 4 +++- nff/train/parallel.py | 5 +---- nff/utils/confgen.py | 8 +++----- 14 files changed, 47 insertions(+), 60 deletions(-) diff --git a/nff/analysis/attribution.py b/nff/analysis/attribution.py index 4626da4c..162c328a 100644 --- a/nff/analysis/attribution.py +++ b/nff/analysis/attribution.py @@ -12,8 +12,9 @@ from nff.utils.scatter import compute_grad -def get_molecules(atom: AtomsBatch, bond_length: Optional[Dict[str, float]] = None, mode: str = "bond", **kwargs) \ - -> List[np.array]: +def get_molecules( + atom: AtomsBatch, bond_length: Optional[Dict[str, float]] = None, mode: str = "bond", **kwargs +) -> List[np.array]: """ find molecules in periodic or non-periodic system. bond mode finds molecules within bond length. Must pass bond_length dict: e.g bond_length=dict() @@ -206,9 +207,7 @@ def calc_attribution_file( energy_stds = [] grads = [] grad_stds = [] - with tqdm( - range(skip, len(traj), step), disable= not progress_bar - ) as pbar: # , postfix={"fbest":"?",}) as pbar: + with tqdm(range(skip, len(traj), step), disable=not progress_bar) as pbar: # , postfix={"fbest":"?",}) as pbar: # for i in range(skip,len(traj),step): for i in pbar: # create atoms batch object @@ -284,9 +283,7 @@ def activelearning( bond_length: Optional[dict] = None, ): atom_list = [] - with tqdm( - range(skip, len(traj), step), disable=not progress_bar - ) as pbar: # , postfix={"fbest":"?",}) as pbar: + with tqdm(range(skip, len(traj), step), disable=not progress_bar) as pbar: # , postfix={"fbest":"?",}) as pbar: # for i in range(skip,len(traj),step): for i in pbar: # create atoms batch object diff --git a/nff/analysis/cp3d.py b/nff/analysis/cp3d.py index e03a8621..19984526 100644 --- a/nff/analysis/cp3d.py +++ b/nff/analysis/cp3d.py @@ -125,7 +125,7 @@ def annotate_confs(dic): num_heads, is_linear = get_att_type(dic) for sub_dic in dic.values(): num_confs = sub_dic["boltz_weights"].shape[0] - split_sizes = [num_confs] * num_heads if is_linear else [num_confs ** 2] * num_heads + split_sizes = [num_confs] * num_heads if is_linear else [num_confs**2] * num_heads learned = torch.Tensor(sub_dic["learned_weights"]) head_weights = torch.split(learned, split_sizes) diff --git a/nff/data/dataset.py b/nff/data/dataset.py index f11260e1..05fcb2a9 100644 --- a/nff/data/dataset.py +++ b/nff/data/dataset.py @@ -86,7 +86,7 @@ def __init__( units: str = "kcal/mol", check_props: bool = True, do_copy: bool = True, - device: str = "cuda" + device: str = "cuda", ) -> None: """Constructor for Dataset class. diff --git a/nff/io/bias_calculators.py b/nff/io/bias_calculators.py index 670f24b7..79e3e77e 100644 --- a/nff/io/bias_calculators.py +++ b/nff/io/bias_calculators.py @@ -933,8 +933,9 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: ind = np.ma.indices((len(self.center),))[0] ind = np.ma.masked_array(ind) - dist_to_centers = np.array([self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"]) - for ii in range(self.num_cv)]) + dist_to_centers = np.array( + [self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"]) for ii in range(self.num_cv)] + ) if self.num_cv > 1: ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0)] = np.ma.masked diff --git a/nff/io/mace.py b/nff/io/mace.py index 3836fe4f..8e4c5147 100644 --- a/nff/io/mace.py +++ b/nff/io/mace.py @@ -312,10 +312,8 @@ def get_example(self, idx: int) -> Data: if self.__slices__ is None: raise RuntimeError( - - "Cannot reconstruct data list from batch because the batch " - "object was not created using `Batch.from_data_list()`." - + "Cannot reconstruct data list from batch because the batch " + "object was not created using `Batch.from_data_list()`." ) data = {} diff --git a/nff/io/openmm_calculators.py b/nff/io/openmm_calculators.py index f4cd4e2b..5519fa51 100644 --- a/nff/io/openmm_calculators.py +++ b/nff/io/openmm_calculators.py @@ -15,6 +15,7 @@ "NonPeriodic": app.CutoffNonPeriodic, } + class PropertyNotPresent(Exception): pass @@ -44,8 +45,12 @@ class BiasBase(Calculator): ] def __init__( - self, mmparms, cv_defs: List[Dict], equil_temp: float = 300.0, extra_constraints: Optional[List[Dict]] = None, - **kwargs + self, + mmparms, + cv_defs: List[Dict], + equil_temp: float = 300.0, + extra_constraints: Optional[List[Dict]] = None, + **kwargs, ): Calculator.__init__(self, **kwargs) @@ -632,8 +637,9 @@ def _analytic_wtm_force(self, xi: np.ndarray) -> Tuple[list, float]: ind = np.ma.indices((len(self.center),))[0] ind = np.ma.masked_array(ind) - dist_to_centers = np.array([self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"]) - for ii in range(self.num_cv)]) + dist_to_centers = np.array( + [self.diff(xi[ii], np.asarray(self.center)[:, ii], self.cv_defs[ii]["type"]) for ii in range(self.num_cv)] + ) if self.num_cv > 1: ind[(abs(dist_to_centers) > 3 * self.hill_std.reshape(-1, 1)).all(axis=0)] = np.ma.masked diff --git a/nff/md/colvars.py b/nff/md/colvars.py index cfb95aaa..4889eb01 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -78,7 +78,9 @@ def __init__(self, info_dict: dict): self.mol_inds = torch.LongTensor(self.info_dict["indices"]) self.reference_inds = self.info_dict["reference"] - elif self.info_dict["name"] == "projecting_veconplane" or self.info_dict["name"] == "projecting_veconplanenormal": + elif ( + self.info_dict["name"] == "projecting_veconplane" or self.info_dict["name"] == "projecting_veconplanenormal" + ): self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) self.ring_inds = torch.LongTensor(self.info_dict["ring_inds"]) diff --git a/nff/md/nve.py b/nff/md/nve.py index 1e4135c9..94365082 100644 --- a/nff/md/nve.py +++ b/nff/md/nve.py @@ -197,10 +197,8 @@ def run(self): if self.mdparam.get("stability_check", False): for step in range(epochs): T = self.atomsbatch.get_batch_kinetic_energy() / (1.5 * units.kB * self.atomsbatch.num_atoms) - if ( - ((10 * self.mdparam["thermostat_params"]["temperature"] / units.kB) < T).any() - or ((T < 1e-1).any() - and self.mdparam.get("stability_check", False)) + if ((10 * self.mdparam["thermostat_params"]["temperature"] / units.kB) < T).any() or ( + (T < 1e-1).any() and self.mdparam.get("stability_check", False) ): break diff --git a/nff/md/nvt.py b/nff/md/nvt.py index 739bfdc7..e8dc85ab 100644 --- a/nff/md/nvt.py +++ b/nff/md/nvt.py @@ -90,10 +90,8 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - - "WARNING: velocity not set to zero for any atoms in constraint " - "%s; do not know how to find its fixed indices." % constraint - + "WARNING: velocity not set to zero for any atoms in constraint " + "%s; do not know how to find its fixed indices." % constraint ) if not fixed_idx: @@ -409,10 +407,8 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - - "WARNING: velocity not set to zero for any atoms in constraint " - "%s; do not know how to find its fixed indices." % constraint - + "WARNING: velocity not set to zero for any atoms in constraint " + "%s; do not know how to find its fixed indices." % constraint ) if not fixed_idx: @@ -586,10 +582,8 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - - "WARNING: velocity not set to zero for any atoms in constraint " - "%s; do not know how to find its fixed indices." % constraint - + "WARNING: velocity not set to zero for any atoms in constraint " + "%s; do not know how to find its fixed indices." % constraint ) if not fixed_idx: @@ -753,10 +747,8 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - - "WARNING: velocity not set to zero for any atoms in constraint " - "%s; do not know how to find its fixed indices." % constraint - + "WARNING: velocity not set to zero for any atoms in constraint " + "%s; do not know how to find its fixed indices." % constraint ) if not fixed_idx: diff --git a/nff/md/special_thermostats.py b/nff/md/special_thermostats.py index 54150f64..d28e8815 100644 --- a/nff/md/special_thermostats.py +++ b/nff/md/special_thermostats.py @@ -94,10 +94,8 @@ def remove_constrained_vel(self, atoms): has_keys = True if not has_keys: print( - - "WARNING: velocity not set to zero for any atoms in constraint " - "%s; do not know how to find its fixed indices." % constraint - + "WARNING: velocity not set to zero for any atoms in constraint " + "%s; do not know how to find its fixed indices." % constraint ) if not fixed_idx: diff --git a/nff/md/utils_ax.py b/nff/md/utils_ax.py index dfeecd81..c198e0f8 100644 --- a/nff/md/utils_ax.py +++ b/nff/md/utils_ax.py @@ -26,11 +26,9 @@ def get_energy(atoms): # ekin = ekin.detach().numpy() print( - - "Energy per atom: Epot = %.2fkcal/mol " - "Ekin = %.2fkcal/mol (T=%3.0fK) " - "Etot = %.2fkcal/mol" % (epot, ekin, Temperature, epot + ekin) - + "Energy per atom: Epot = %.2fkcal/mol " + "Ekin = %.2fkcal/mol (T=%3.0fK) " + "Etot = %.2fkcal/mol" % (epot, ekin, Temperature, epot + ekin) ) # print('Energy per atom: Epot = %.5feV Ekin = %.5feV (T=%3.0fK) ' # 'Etot = %.5feV' % (epot, ekin, Temperature, (epot + ekin))) diff --git a/nff/nn/graphop.py b/nff/nn/graphop.py index 86ffb3cd..9e6a8e72 100644 --- a/nff/nn/graphop.py +++ b/nff/nn/graphop.py @@ -140,7 +140,9 @@ def batch_and_sum(dict_input, N, predict_keys, xyz): # split if key in predict_keys and key + "_grad" not in predict_keys: results[key] = split_and_sum(val, N) - elif (key in predict_keys and key + "_grad" in predict_keys) or (key not in predict_keys and key + "_grad" in predict_keys): + elif (key in predict_keys and key + "_grad" in predict_keys) or ( + key not in predict_keys and key + "_grad" in predict_keys + ): results[key] = split_and_sum(val, N) grad = compute_grad(inputs=xyz, output=results[key]) results[key + "_grad"] = grad diff --git a/nff/train/parallel.py b/nff/train/parallel.py index 0dcba52e..8310ad23 100644 --- a/nff/train/parallel.py +++ b/nff/train/parallel.py @@ -37,10 +37,7 @@ def add_grads(optimizer, loss_size, weight_path, rank, world_size, batch_num, ep # paths to all pickle files - paths = [ - os.path.join(weight_path, str(index), f"grad_{epoch}_{batch_num}.pickle") - for index in range(world_size) - ] + paths = [os.path.join(weight_path, str(index), f"grad_{epoch}_{batch_num}.pickle") for index in range(world_size)] loaded_grads = {path: None for path in paths} diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index 3853f5af..28a8cd49 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -198,11 +198,9 @@ def cluster(self, rms_tolerance=0.1, max_ranked_conformers=10, energy_window=5, index_1, energy_1 = pair_1 if abs(energy_1 - energy_0) > Report_e_tol: output.write( - - "Breaking because hit Report Energy Window, " - f"E was {energy_1} kcal/mol " - f"and minimum was {energy_0} \n" - + "Breaking because hit Report Energy Window, " + f"E was {energy_1} kcal/mol " + f"and minimum was {energy_0} \n" ) break From 2ecb6cf8d539725bf6a7cabe93e42cd5f801d622 Mon Sep 17 00:00:00 2001 From: steinmig Date: Fri, 20 Dec 2024 15:03:57 -0500 Subject: [PATCH 32/66] ordering --- nff/data/dataset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nff/data/dataset.py b/nff/data/dataset.py index 05fcb2a9..b892e617 100644 --- a/nff/data/dataset.py +++ b/nff/data/dataset.py @@ -9,7 +9,7 @@ import numbers from collections import Counter from copy import deepcopy -from typing import Any, Dict, List, TYPE_CHECKING, Literal +from typing import TYPE_CHECKING, Any, Dict, List, Literal import numpy as np import torch From 4bfeace7064aa9ffcb18776829d079285580d83a Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 23 Dec 2024 09:31:48 -0500 Subject: [PATCH 33/66] more linting --- nff/md/TI.py | 2 +- nff/md/ci/opt.py | 2 +- nff/md/colvars.py | 18 ++++---- nff/md/nms.py | 13 +++--- nff/md/npt.py | 19 ++++---- nff/md/nve.py | 4 +- nff/md/nvt.py | 13 +++--- nff/md/tully/ab_io.py | 7 +-- nff/md/tully/dynamics.py | 9 ++-- nff/md/tully/io.py | 9 ++-- nff/md/tully/step.py | 2 +- nff/md/tully_multiplicity/dynamics.py | 2 +- nff/md/tully_multiplicity/io.py | 7 +-- nff/md/utils.py | 6 +-- nff/md/utils_ax.py | 10 ++-- nff/md/zhu_nakamura/dynamics.py | 4 +- nff/nn/activations.py | 2 +- nff/nn/glue.py | 2 +- nff/nn/graphconv.py | 8 ++-- nff/nn/models/chgnet.py | 15 +++--- nff/nn/models/conformers.py | 11 ++--- nff/nn/models/dispersion_models.py | 7 +-- nff/nn/models/graphconvintegration.py | 2 +- nff/nn/models/hybridgraph.py | 2 +- nff/nn/models/mace.py | 26 ++++------- nff/nn/models/painn.py | 20 +++----- nff/nn/models/schnet.py | 4 +- nff/nn/models/schnet_features.py | 2 +- nff/nn/models/spooky.py | 4 +- nff/nn/models/spooky_fast.py | 4 +- .../spooky_net_source/modules/attention.py | 9 ++-- .../modules/bernstein_polynomials.py | 2 +- .../modules/d4_dispersion_energy.py | 4 +- .../modules/electronic_embedding.py | 2 +- .../modules/electrostatic_energy.py | 6 +-- .../exponential_bernstein_polynomials.py | 4 +- .../modules/exponential_gaussian_functions.py | 4 +- .../modules/gaussian_functions.py | 2 +- .../modules/interaction_module.py | 2 +- .../modules/local_interaction.py | 2 +- .../modules/nonlinear_electronic_embedding.py | 2 +- .../modules/nonlocal_interaction.py | 2 +- .../modules/nuclear_embedding.py | 4 +- .../spooky_net_source/modules/residual.py | 2 +- .../spooky_net_source/modules/residual_mlp.py | 2 +- .../modules/residual_stack.py | 2 +- .../modules/shifted_softplus.py | 2 +- .../modules/sinc_functions.py | 2 +- .../models/spooky_net_source/modules/swish.py | 2 +- .../modules/zbl_repulsion_energy.py | 4 +- nff/nn/models/spooky_net_source/spookynet.py | 23 +++------- .../spooky_net_source/spookynet_ensemble.py | 6 +-- nff/nn/models/spooky_painn.py | 11 ++--- nff/nn/modules/diabat.py | 13 ++---- nff/nn/modules/schnet.py | 46 +++++++------------ nff/nn/modules/spooky.py | 2 +- nff/nn/modules/spooky_fast.py | 2 +- nff/nn/tensorgrad.py | 2 +- nff/nn/utils.py | 5 +- nff/reactive_tools/ev_following.py | 15 ++---- nff/tests/dynamics_test.py | 9 ++-- nff/tests/test_data/test_dataset.py | 32 ++++++------- nff/tests/test_data/test_stats.py | 8 ++-- nff/train/hooks/logging.py | 33 +++++++------ nff/train/hooks/scheduling.py | 2 +- nff/train/loss.py | 5 +- nff/train/metrics.py | 5 +- nff/train/trainer.py | 5 +- nff/train/uncertainty.py | 17 +++---- nff/utils/confgen.py | 4 +- nff/utils/cuda.py | 12 ++--- nff/utils/misc.py | 21 +++------ nff/utils/script_utils/loaders.py | 1 + nff/utils/script_utils/parsers.py | 2 +- nff/utils/xyz2mol.py | 20 ++------ 75 files changed, 250 insertions(+), 348 deletions(-) diff --git a/nff/md/TI.py b/nff/md/TI.py index 55404b16..474f6f56 100644 --- a/nff/md/TI.py +++ b/nff/md/TI.py @@ -87,7 +87,7 @@ def run(self): self.atomsbatch.props["aggr_wgt"] = self.init_aggr - for step in range(epochs): + for _step in range(epochs): self.integrator.run(self.mdparam["nbr_list_update_freq"]) self.atomsbatch.update_nbr_list() self.atomsbatch.props["aggr_wgt"] += dlambda diff --git a/nff/md/ci/opt.py b/nff/md/ci/opt.py index 0ba5c2e0..87bfe7e3 100644 --- a/nff/md/ci/opt.py +++ b/nff/md/ci/opt.py @@ -559,7 +559,7 @@ def to_db( for atoms in best_atoms[:num_samples]: nxyz = AtomsBatch(atoms).get_nxyz() coords = make_coords(nxyz) - new_geom = make_geom(method=md_method, job=md_job, coords=coords, parentgeom=ci_geom) + make_geom(method=md_method, job=md_job, coords=coords, parentgeom=ci_geom) @pdb_wrap diff --git a/nff/md/colvars.py b/nff/md/colvars.py index 4889eb01..d060bd13 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -1,4 +1,4 @@ -import itertools as itertools +import itertools from itertools import repeat from typing import Union @@ -43,7 +43,7 @@ def __init__(self, info_dict: dict): the common key is name, which defines the CV function all other keys are specific to each CV """ - super(ColVar, self).__init__() + super().__init__() self.info_dict = info_dict if "name" not in info_dict: @@ -425,7 +425,7 @@ def deproton1(self): dis_sq = torch.linalg.norm(dis_mat, dim=-1) dis = dis_sq[self.O, :][:, self.H] - dis1 = dis_sq[self.Oacid, :][:, self.Owater] + dis_sq[self.Oacid, :][:, self.Owater] cvmatrix = torch.exp(-self.do * dis) cvmatrix = cvmatrix / cvmatrix.sum(0) cvmatrixw = cvmatrix[self.Oacid.shape[0] :].sum(-1) - self.r1 @@ -659,7 +659,7 @@ class GNN(torch.nn.Module): """ def __init__(self, n_convs=3, n_embed=64): - super(GNN, self).__init__() + super().__init__() self.atom_embed = nn.Embedding(100, n_embed) # Declare MLPs in a ModuleList self.convolutions = nn.ModuleList( @@ -734,7 +734,7 @@ def get_adjacency_matrix(xyz, atom_numbers, bond_length, oxygeninvolved, cell=No ] adjacency_matrix = torch.matmul(adjacency_matrix, adjacency_matrix.t()) adjacency_matrix = adjacency_matrix.fill_diagonal_(0) - edges = torch.stack([i for i in torch.where(adjacency_matrix >= 0)]) + edges = torch.stack(list(torch.where(adjacency_matrix >= 0))) adjacency_matrix = adjacency_matrix[ torch.where(adjacency_matrix >= 0)[0], torch.where(adjacency_matrix >= 0)[1] ].view(-1, 1) @@ -791,10 +791,10 @@ def get_molecules(atom, bond_length, mode="bond", periodic=True): elif (clusters[oxy_neighbors] == 0).all() and clusters[i] == 0: clusters[oxy_neighbors] = mm + 1 clusters[i] = mm + 1 - elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] == 0: + elif (clusters[oxy_neighbors] == 0).all() is False and clusters[i] == 0: clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) - elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] != 0: + elif (clusters[oxy_neighbors] == 0).all() is False and clusters[i] != 0: tmp = clusters[oxy_neighbors][clusters[oxy_neighbors] != 0][ clusters[oxy_neighbors][clusters[oxy_neighbors] != 0] != min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) @@ -825,7 +825,7 @@ def reconstruct_atoms(atomsobject, mol_idx, centre=None): center = centre intra_dmat = (mol_xyz[None, :, ...] - mol_xyz[:, None, ...])[center] if np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) != 0: - M, N = intra_dmat.shape[0], intra_dmat.shape[1] + M, _N = intra_dmat.shape[0], intra_dmat.shape[1] f = torch.linalg.solve(torch.Tensor(atomsobject.cell.T), (intra_dmat.view(-1, 3).T)).T g = f - torch.floor(f + 0.5) intra_dmat = torch.matmul(g, torch.Tensor(atomsobject.cell)) @@ -834,7 +834,7 @@ def reconstruct_atoms(atomsobject, mol_idx, centre=None): traj_unwrap = mol_xyz + torch.matmul(offsets, torch.Tensor(atomsobject.cell)) else: (intra_dmat > 0.5 * box_len).to(torch.float) * box_len - add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len + (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len shift = torch.round(torch.divide(intra_dmat, box_len)) offsets = -shift traj_unwrap = mol_xyz + offsets * box_len diff --git a/nff/md/nms.py b/nff/md/nms.py index 5d255e71..0b85827c 100644 --- a/nff/md/nms.py +++ b/nff/md/nms.py @@ -1,3 +1,4 @@ +import contextlib import copy import os import pickle @@ -162,7 +163,7 @@ def get_output_keys(model): readout_dicts = [getattr(atomwisereadout, name) for name in readout_dict_names] # get their keys - output_keys = [key for dic in readout_dicts for key in dic.keys()] + output_keys = [key for dic in readout_dicts for key in dic] return output_keys @@ -225,7 +226,7 @@ def opt_conformer(atoms, params): nn_params = params.get("networkhyperparams", {}) output_keys = nn_params.get("output_keys", ["energy"]) - for iteration in tqdm(range(max_rounds)): + for _iteration in tqdm(range(max_rounds)): model, energy_key = init_calculator(atoms=atoms, params=params) opt_module = getattr(optimize, params.get("opt_type", "BFGS")) @@ -259,10 +260,8 @@ def get_confs(traj_filename, thermo_filename, num_starting_poses): lines = f.readlines() energies = [] for line in lines: - try: + with contextlib.suppress(ValueError): energies.append(float(line.split()[2])) - except ValueError: - pass sort_idx = np.argsort(energies) sorted_steps = np.array(range(len(lines)))[sort_idx[:num_starting_poses]] @@ -275,7 +274,7 @@ def get_confs(traj_filename, thermo_filename, num_starting_poses): def get_nve_params(params): nve_params = copy.deepcopy(nve.DEFAULTNVEPARAMS) - common_keys = [key for key in nve_params.keys() if key in params] + common_keys = [key for key in nve_params if key in params] for key in common_keys: nve_params[key] = params[key] @@ -362,7 +361,7 @@ def get_orca_form(cc_mat, cc_freqs, n_atoms): new_mat = np.column_stack((old_col, new_col)) elif i > 1: new_mat = np.column_stack((new_mat, new_col)) - old_col = new_col[:] + new_col[:] matrix = np.asarray(new_mat[:]).reshape(n_tot, n_modes) diff --git a/nff/md/npt.py b/nff/md/npt.py index 1dce73c9..e0d8c1a8 100644 --- a/nff/md/npt.py +++ b/nff/md/npt.py @@ -1,6 +1,7 @@ import copy import math import os +from typing import Optional import numpy as np from ase import units @@ -306,11 +307,11 @@ def __init__( freq_thermostat_per_fs: float = 0.01, freq_barostat_per_fs: float = 0.0005, num_chains: int = 10, - maxwell_temp: float = None, - trajectory: str = None, - logfile: str = None, + maxwell_temp: Optional[float] = None, + trajectory: Optional[str] = None, + logfile: Optional[str] = None, loginterval: int = 1, - max_steps: int = None, + max_steps: Optional[int] = None, nbr_update_period: int = 10, append_trajectory: bool = True, **kwargs, @@ -532,11 +533,11 @@ def __init__( freq_thermostat_per_fs: float = 0.01, freq_barostat_per_fs: float = 0.0005, num_chains: int = 10, - maxwell_temp: float = None, - trajectory: str = None, - logfile: str = None, + maxwell_temp: Optional[float] = None, + trajectory: Optional[str] = None, + logfile: Optional[str] = None, loginterval: int = 1, - max_steps: int = None, + max_steps: Optional[int] = None, nbr_update_period: int = 10, append_trajectory: bool = True, **kwargs, @@ -666,7 +667,7 @@ def step(self): h0, ) # not sure if they matrix multiplication or not # eqs (E1, E2) - while np.isclose(1.0, np.linalg.det(h0_t), atol=1e-6) == False: + while np.isclose(1.0, np.linalg.det(h0_t), atol=1e-6) is False: # print(np.linalg.det(h0_t), h0_t) if np.linalg.det(h0_t) is np.nan: print("Failed to enforce det=1 of unit lattice vectors!") diff --git a/nff/md/nve.py b/nff/md/nve.py index 94365082..ed65060d 100644 --- a/nff/md/nve.py +++ b/nff/md/nve.py @@ -195,7 +195,7 @@ def run(self): self.atomsbatch.update_nbr_list() if self.mdparam.get("stability_check", False): - for step in range(epochs): + for _step in range(epochs): T = self.atomsbatch.get_batch_kinetic_energy() / (1.5 * units.kB * self.atomsbatch.num_atoms) if ((10 * self.mdparam["thermostat_params"]["temperature"] / units.kB) < T).any() or ( (T < 1e-1).any() and self.mdparam.get("stability_check", False) @@ -212,7 +212,7 @@ def run(self): self.atomsbatch.update_nbr_list() else: - for step in range(epochs): + for _step in range(epochs): self.integrator.run(self.mdparam["nbr_list_update_freq"]) # # unwrap coordinates if mol_idx is defined diff --git a/nff/md/nvt.py b/nff/md/nvt.py index e8dc85ab..eb31d937 100644 --- a/nff/md/nvt.py +++ b/nff/md/nvt.py @@ -2,6 +2,7 @@ import math import os import pickle +from typing import Optional import numpy as np from ase import units @@ -328,7 +329,7 @@ def __init__( timestep: float, temperature: float, friction_per_ps: float = 1.0, - maxwell_temp: float = None, + maxwell_temp: Optional[float] = None, random_seed=None, trajectory=None, logfile=None, @@ -481,7 +482,7 @@ def __init__( timestep: float, temperature: float, friction_per_ps: float = 1.0, - maxwell_temp: float = None, + maxwell_temp: Optional[float] = None, random_seed=None, trajectory=None, logfile=None, @@ -545,9 +546,7 @@ def __init__( self.nbr_update_period = nbr_update_period # initial Maxwell-Boltmann temperature for atoms - if maxwell_temp is not None: - maxwell_temp = maxwell_temp - else: + if maxwell_temp is None: maxwell_temp = self.T # intialize system momentum @@ -670,7 +669,7 @@ def __init__( timestep: float, temperature: float, relaxation_const: float = 100.0, - maxwell_temp: float = None, + maxwell_temp: Optional[float] = None, random_seed=None, trajectory=None, logfile=None, @@ -1086,7 +1085,7 @@ def __call__(self): epot = self.atoms.get_potential_energy() temp = self.atoms.get_batch_T() - for i, this_ek in enumerate(ekin): + for i, _this_ek in enumerate(ekin): this_epot = epot[i] this_temp = float(temp[i]) dat += (this_epot, this_temp) diff --git a/nff/md/tully/ab_io.py b/nff/md/tully/ab_io.py index 452709b7..e3333bc7 100644 --- a/nff/md/tully/ab_io.py +++ b/nff/md/tully/ab_io.py @@ -267,7 +267,7 @@ def parse_sf_nacv(job_dir, conifg_name): def check_sf(grad_config, nacv_config): configs = [grad_config, nacv_config] - is_sf = any([config in SPIN_FLIP_CONFIGS for config in configs]) + is_sf = any(config in SPIN_FLIP_CONFIGS for config in configs) return is_sf @@ -278,10 +278,7 @@ def parse_sf(job_dir, nacv_config, calc_nacv=True): en_dics = parse_sf_ens(job_dir=grad_dir) grad_dics = parse_sf_grads(job_dir=grad_dir) - if calc_nacv: - nacv_dic = parse_sf_nacv(job_dir=nacv_dir, conifg_name=nacv_config) - else: - nacv_dic = {} + nacv_dic = parse_sf_nacv(job_dir=nacv_dir, conifg_name=nacv_config) if calc_nacv else {} return en_dics, grad_dics, nacv_dic diff --git a/nff/md/tully/dynamics.py b/nff/md/tully/dynamics.py index 928748bb..8e37bb9a 100644 --- a/nff/md/tully/dynamics.py +++ b/nff/md/tully/dynamics.py @@ -163,10 +163,7 @@ def get_vel(self): return vel def init_c(self): - if self.explicit_diabat: - num_states = self.num_diabat - else: - num_states = self.num_states + num_states = self.num_diabat if self.explicit_diabat else self.num_states c = np.zeros((self.num_samples, num_states), dtype="complex128") c[:, self.surfs[0]] = 1 @@ -348,7 +345,7 @@ def H_plus_nacv(self): def H_d(self): diabat_keys = getattr(self, "diabat_keys", [None]) reshaped = np.array(diabat_keys).reshape(-1).tolist() - if not all([i in self.props for i in reshaped]): + if not all(i in self.props for i in reshaped): return None _H_d = np.zeros((self.num_samples, self.num_diabat, self.num_diabat)) @@ -448,7 +445,7 @@ def setup_logging(self, remove_old=True): f.write(hdr) template = "%-10.1f " - for i, state in enumerate(states): + for _ in states: template += "%15.4f%%" template += "%15.4f" template += "%15.4f" diff --git a/nff/md/tully/io.py b/nff/md/tully/io.py index 43836ec3..d4f5d631 100644 --- a/nff/md/tully/io.py +++ b/nff/md/tully/io.py @@ -102,8 +102,8 @@ def fill_results(batch, these_results, results, idx): num_atoms = batch["num_atoms"].tolist() grad_flags = ["_grad", "nacv"] - for key, val in these_results.keys(): - if any([flag in key for flag in grad_flags]): + for key, val in these_results: + if any(flag in key for flag in grad_flags): val = torch.stack(torch.split(val, num_atoms)) results[key][idx] = val @@ -472,10 +472,7 @@ def load_json(file): with open(file, "r") as f: info = json.load(f) - if "details" in info: - details = info["details"] - else: - details = {} + details = info.get("details", {}) all_params = {key: val for key, val in info.items() if key != "details"} all_params.update(details) diff --git a/nff/md/tully/step.py b/nff/md/tully/step.py index 66e18311..0b8a66db 100644 --- a/nff/md/tully/step.py +++ b/nff/md/tully/step.py @@ -702,7 +702,7 @@ def runge_delta(pot_V, delta_P, delta_R, nacv, force_nacv, forces, surfs, vel, s names = ["delta_P", "delta_R", "sigma"] for i in range(4): - kwargs = {name: val for name, val in zip(names, intermed_vals)} + kwargs = dict(zip(names, intermed_vals)) k_i = [deriv(**kwargs) for deriv in derivs] intermed_vals = [] diff --git a/nff/md/tully_multiplicity/dynamics.py b/nff/md/tully_multiplicity/dynamics.py index 1bc09928..6d8da3f4 100644 --- a/nff/md/tully_multiplicity/dynamics.py +++ b/nff/md/tully_multiplicity/dynamics.py @@ -546,7 +546,7 @@ def setup_logging(self, remove_old=True): f.write(hdr) template = "%-10.2f " - for i, state in enumerate(states): + for _ in states: template += "%15.6f" template += "%15.4f" template += "%15.4f" diff --git a/nff/md/tully_multiplicity/io.py b/nff/md/tully_multiplicity/io.py index f53dd8d0..082c18ed 100644 --- a/nff/md/tully_multiplicity/io.py +++ b/nff/md/tully_multiplicity/io.py @@ -58,7 +58,7 @@ def run_models(models: List, batch, device: Union[str, int]): result = batch_detach(result) # merge dictionaries - for key in result.keys(): + for key in result: results[key] = result[key] return results @@ -147,10 +147,7 @@ def load_json(file): with open(file, "r") as f: info = json.load(f) - if "details" in info: - details = info["details"] - else: - details = {} + details = info.get("details", {}) all_params = {key: val for key, val in info.items() if key != "details"} all_params.update(details) diff --git a/nff/md/utils.py b/nff/md/utils.py index 967b4e05..586c1cc6 100644 --- a/nff/md/utils.py +++ b/nff/md/utils.py @@ -157,7 +157,7 @@ def __init__(self, dyn, atoms, logfile, header=True, peratom=False, verbose=Fals self.hdr += "%12s %12s %12s " % ("U0+bias[eV]", "U0[eV]", "AbsGradPot") self.fmt += "%12.5f %12.5f %12.4f " - for i in range(self.num_cv): + for _i in range(self.num_cv): self.hdr += "%12s %12s %12s %12s %12s " % ( "CV", "Lambda", @@ -167,7 +167,7 @@ def __init__(self, dyn, atoms, logfile, header=True, peratom=False, verbose=Fals ) self.fmt += "%12.4f %12.4f %12.4f %12.4f %12.4f " - for i in range(self.n_const): + for _i in range(self.n_const): self.hdr += "%12s " % ("Const") self.fmt += "%12.5f " @@ -295,7 +295,7 @@ def csv_read(out_file): new_dic_list = [] for regular_dic, key_dic in zip(dic_list, dic_keys): new_dic = copy.deepcopy(regular_dic) - for key in regular_dic.keys(): + for key in regular_dic: new_dic[key_dic[key]] = regular_dic[key] new_dic_list.append(new_dic) diff --git a/nff/md/utils_ax.py b/nff/md/utils_ax.py index c198e0f8..a59ab95d 100644 --- a/nff/md/utils_ax.py +++ b/nff/md/utils_ax.py @@ -104,10 +104,10 @@ def zhu_dic_to_list(dic): """ lst = [] - first_key = list(dic.keys())[0] + first_key = next(iter(dic.keys())) for i in range(len(dic[first_key])): sub_dic = dict() - for key in dic.keys(): + for key in dic: sub_dic[key.split("_list")[0]] = dic[key][i] if key == "time_list": sub_dic[key.split("_list")[0]] /= const.FS_TO_AU @@ -126,7 +126,7 @@ def append_to_csv(lst, out_file): """ with open(out_file, "a+") as csvfile: for item in lst: - fieldnames = sorted(list(item.keys())) + fieldnames = sorted(item.keys()) writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({key: item[key] for key in fieldnames}) @@ -138,7 +138,7 @@ def write_to_new_csv(lst, out_file): """ with open(out_file, "w") as csvfile: for item in lst: - fieldnames = sorted(list(item.keys())) + fieldnames = sorted(item.keys()) writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({key: item[key] for key in fieldnames}) @@ -184,7 +184,7 @@ def csv_read(out_file): new_dic_list = [] for regular_dic, key_dic in zip(dic_list, dic_keys): new_dic = copy.deepcopy(regular_dic) - for key in regular_dic.keys(): + for key in regular_dic: new_dic[key_dic[key]] = regular_dic[key] new_dic_list.append(new_dic) diff --git a/nff/md/zhu_nakamura/dynamics.py b/nff/md/zhu_nakamura/dynamics.py index 8ffef808..2b3f29b8 100644 --- a/nff/md/zhu_nakamura/dynamics.py +++ b/nff/md/zhu_nakamura/dynamics.py @@ -560,6 +560,7 @@ def rescale_v(self, old_surf, new_surf): if np.isnan(velocities).any(): return "err" self.velocities = velocities + return None def update_probabilities(self): """ @@ -677,6 +678,7 @@ def hop(self, new_surf): self.hopping_probabilities = [] self.time = self.time - self.dt self.modify_save() + return None def full_step(self, compute_internal_forces=True, do_log=True): """ @@ -1161,7 +1163,7 @@ def run(self): if do_save: print(f"Completed step {num_steps}") - complete = all([trj.time >= self.max_time for trj in self.zhu_trjs]) + complete = all(trj.time >= self.max_time for trj in self.zhu_trjs) num_steps += 1 print("Neural ZN terminated normally.") diff --git a/nff/nn/activations.py b/nff/nn/activations.py index dc751eb7..ebb90eb4 100644 --- a/nff/nn/activations.py +++ b/nff/nn/activations.py @@ -6,7 +6,7 @@ class shifted_softplus(torch.nn.Module): def __init__(self): - super(shifted_softplus, self).__init__() + super().__init__() def forward(self, input): return F.softplus(input) - np.log(2.0) diff --git a/nff/nn/glue.py b/nff/nn/glue.py index 79936acf..0636e84a 100644 --- a/nff/nn/glue.py +++ b/nff/nn/glue.py @@ -23,7 +23,7 @@ def __init__(self, model_dict, mode="sum"): def forward(self, batch, keys_to_combine=["energy", "energy_grad"], **kwargs): # run models - result_list = [self.models[key](batch, **kwargs) for key in self.models.keys()] + result_list = [self.models[key](batch, **kwargs) for key in self.models] # perform further operations combine_results = dict() diff --git a/nff/nn/graphconv.py b/nff/nn/graphconv.py index d5bfa3ec..f2d4cdc6 100644 --- a/nff/nn/graphconv.py +++ b/nff/nn/graphconv.py @@ -7,7 +7,7 @@ class MessagePassingModule(nn.Module): """Convolution constructed as MessagePassing.""" def __init__(self): - super(MessagePassingModule, self).__init__() + super().__init__() def message(self, r, e, a, aggr_wgt): # Basic message case @@ -46,7 +46,7 @@ class EdgeUpdateModule(nn.Module): """Update Edge State Based on information from connected nodes""" def __init__(self): - super(EdgeUpdateModule, self).__init__() + super().__init__() def message(self, r, e, a): """Summary @@ -91,11 +91,11 @@ class GeometricOperations(nn.Module): """Compute geomtrical properties based on XYZ coordinates""" def __init__(self): - super(GeometricOperations, self).__init__() + super().__init__() class TopologyOperations(nn.Module): """Change the topology index given geomtrical properties""" def __init__(self): - super(TopologyOperations, self).__init__() + super().__init__() diff --git a/nff/nn/models/chgnet.py b/nff/nn/models/chgnet.py index 7161d915..893fe2f6 100644 --- a/nff/nn/models/chgnet.py +++ b/nff/nn/models/chgnet.py @@ -1,14 +1,12 @@ from __future__ import annotations import os -from collections.abc import Sequence from dataclasses import dataclass from pathlib import Path -from typing import Dict, List, Union +from typing import TYPE_CHECKING, Dict, List import torch from chgnet.data.dataset import collate_graphs -from chgnet.graph import CrystalGraph try: from chgnet.graph.crystalgraph import datatype @@ -20,6 +18,11 @@ from nff.io.chgnet import convert_data_batch from nff.utils.misc import cat_props +if TYPE_CHECKING: + from collections.abc import Sequence + + from chgnet.graph import CrystalGraph + module_dir = os.path.dirname(os.path.abspath(__file__)) @@ -32,7 +35,7 @@ def __init__( units: str = "eV/atom", is_intensive: bool = True, cutoff: float = 5.0, - key_mappings: Dict[str, str] = None, + key_mappings: Dict[str, str] | None = None, device: str = "cpu", requires_embedding: bool = False, **kwargs, @@ -72,7 +75,7 @@ def __init__( for param in self.composition_model.parameters(): param.requires_grad = True - def forward(self, data_batch: Dict[str, List], **kwargs) -> Dict[str, Union[Tensor, List]]: + def forward(self, data_batch: Dict[str, List], **kwargs) -> Dict[str, Tensor | List]: """Convert data_batch to CHGNet format and run forward pass. Args: @@ -111,7 +114,7 @@ def forward(self, data_batch: Dict[str, List], **kwargs) -> Dict[str, Union[Tens # convert to NFF keys and negate energy_grad return cat_props({self.key_mappings[k]: self.negate_value(k, v) for k, v in output.items()}) - def negate_value(self, key: str, value: Union[list, Tensor]) -> Union[list, Tensor]: + def negate_value(self, key: str, value: list | Tensor) -> list | Tensor: """Negate the value if key is in negate_keys. Args: diff --git a/nff/nn/models/conformers.py b/nff/nn/models/conformers.py index dbf5a6b2..2db8e08e 100644 --- a/nff/nn/models/conformers.py +++ b/nff/nn/models/conformers.py @@ -223,7 +223,7 @@ def add_features(self, batch, **kwargs): if self.extra_feats is None or "species" not in self.ext_feat_types: return [torch.tensor([]) for _ in range(num_mols)] - assert all([feat in batch.keys() for feat in self.extra_feats]) + assert all(feat in batch for feat in self.extra_feats) feats = [] # go through each extra per-species feature @@ -288,7 +288,7 @@ def convolve_sub_batch(self, batch, xyz=None, xyz_grad=False, **kwargs): r = self.atom_embed(r.long()).squeeze() # update function includes periodic boundary conditions - for i, conv in enumerate(self.convolutions): + for conv in self.convolutions: dr = conv(r=r, e=e, a=a) r = r + dr @@ -314,10 +314,7 @@ def convolve(self, batch, sub_batch_size=None, xyz=None, xyz_grad=False): self.classifier = True # split batches as necessary - if sub_batch_size is None: - sub_batches = [batch] - else: - sub_batches = split_batch(batch, sub_batch_size) + sub_batches = [batch] if sub_batch_size is None else split_batch(batch, sub_batch_size) # go through each sub-batch, get the xyz and node features, # and concatenate them when done @@ -606,7 +603,7 @@ def add_grad(self, batch, results, xyz): batch_keys = batch.keys() # names of the gradients of each property - result_grad_keys = [key + "_grad" for key in results.keys()] + result_grad_keys = [key + "_grad" for key in results] for key in batch_keys: # if the batch with the ground truth contains one of # these keys, then compute its predicted value diff --git a/nff/nn/models/dispersion_models.py b/nff/nn/models/dispersion_models.py index 15c6ca0a..5567bdbd 100644 --- a/nff/nn/models/dispersion_models.py +++ b/nff/nn/models/dispersion_models.py @@ -84,12 +84,9 @@ def run(self, batch, xyz=None, requires_stress=False, grimme_disp=False, inferen else: e_disp, r_ij_T, nbrs_T = self.get_dispersion(batch=batch, xyz=xyz) - for key in self.painn_model.pool_dic.keys(): + for key in self.painn_model.pool_dic: # add dispersion energy - if inference: - add_e = e_disp.detach().cpu() - else: - add_e = e_disp + add_e = e_disp.detach().cpu() if inference else e_disp # add gradient for forces grad_key = "%s_grad" % key diff --git a/nff/nn/models/graphconvintegration.py b/nff/nn/models/graphconvintegration.py index 79c4fcb3..b1cb6f65 100644 --- a/nff/nn/models/graphconvintegration.py +++ b/nff/nn/models/graphconvintegration.py @@ -89,7 +89,7 @@ def forward(self, batch, **kwargs): r = self.atom_embed(r.long()).squeeze() # update function includes periodic boundary conditions - for i, conv in enumerate(self.convolutions): + for conv in self.convolutions: dr = conv(r=r, e=e, a=a, aggr_wgt=aggr_wgt) r = r + dr diff --git a/nff/nn/models/hybridgraph.py b/nff/nn/models/hybridgraph.py index 42b32f67..f835486e 100644 --- a/nff/nn/models/hybridgraph.py +++ b/nff/nn/models/hybridgraph.py @@ -65,7 +65,7 @@ def SeqConv(self, node, xyz, nbr_list, conv_module, pbc_offsets=None): if pbc_offsets is None: pbc_offsets = 0 e = (xyz[nbr_list[:, 1]] - xyz[nbr_list[:, 0]] + pbc_offsets).pow(2).sum(1).sqrt()[:, None] - for i, conv in enumerate(conv_module): + for _i, conv in enumerate(conv_module): dr = conv(r=node, e=e, a=nbr_list) node = node + dr return node diff --git a/nff/nn/models/mace.py b/nff/nn/models/mace.py index 841e702a..7796282a 100644 --- a/nff/nn/models/mace.py +++ b/nff/nn/models/mace.py @@ -8,7 +8,7 @@ from __future__ import annotations from pathlib import Path -from typing import List, Literal, Union +from typing import List, Literal import torch from e3nn import o3 @@ -85,10 +85,7 @@ def forward( Returns: dict: dict of output from the forward pass in NFF format """ - if isinstance(batch, dict): - data = self.convert_batch_to_data(batch) - else: - data = batch + data = self.convert_batch_to_data(batch) if isinstance(batch, dict) else batch output = super().forward( data, training=training, # set the training mode to the value of the wrapper @@ -123,11 +120,8 @@ def convert_batch_to_data(self, batch: dict) -> torch_geometric.data.Data: props = batch else: raise ValueError("Batch must be a dictionary") - if props["num_atoms"].dim() == 0: - num_atoms = props["num_atoms"].unsqueeze(0) - else: - num_atoms = props["num_atoms"] - cum_idx_list = [0] + torch.cumsum(num_atoms, 0).tolist() + num_atoms = props["num_atoms"].unsqueeze(0) if props["num_atoms"].dim() == 0 else props["num_atoms"] + cum_idx_list = [0, *torch.cumsum(num_atoms, 0).tolist()] z_table = AtomicNumberTable([int(z) for z in self.atomic_numbers]) dataset = [] @@ -137,9 +131,9 @@ def convert_batch_to_data(self, batch: dict) -> torch_geometric.data.Data: positions = props.get("nxyz")[node_idx, 1:].detach().cpu().numpy() numbers = props.get("nxyz")[node_idx, 0].long().detach().cpu().numpy() - if "cell" in props.keys(): + if "cell" in props: cell = props["cell"][3 * i : 3 * i + 3].detach().cpu().numpy() - elif "lattice" in props.keys(): + elif "lattice" in props: cell = props["lattice"][3 * i : 3 * i + 3].detach().cpu().numpy() else: raise ValueError("No cell or lattice found in batch") @@ -235,7 +229,7 @@ def from_dict(cls, state_dict: dict, **hparams) -> NffScaleMACE: return model @classmethod - def from_file(cls, path: str, map_location: str = None, **kwargs) -> NffScaleMACE: + def from_file(cls, path: str, map_location: str | None = None, **kwargs) -> NffScaleMACE: """Load the model from checkpoint created by pytorch lightning. Args: @@ -293,7 +287,7 @@ def load_foundations( def load( cls, model_name: str = "medium", - map_location: str = None, + map_location: str | None = None, **kwargs, ) -> NffScaleMACE: """Load the model from checkpoint created by pytorch lightning. @@ -316,7 +310,7 @@ def load( def reduce_foundations( model_foundations: NffScaleMACE, - table: Union[List, AtomicNumberTable], + table: List | AtomicNumberTable, load_readout=False, use_shift=True, use_scale=True, @@ -349,7 +343,7 @@ def reduce_foundations( reduced_atomic_numbers = table table = get_atomic_number_table_from_zs(table) elif isinstance(AtomicNumberTable): - reduced_atomic_numbers = [n for n in table.zs] + reduced_atomic_numbers = list(table.zs) z_table = AtomicNumberTable([int(z) for z in model_foundations.atomic_numbers]) new_z_table = table num_species_foundations = len(z_table.zs) diff --git a/nff/nn/models/painn.py b/nff/nn/models/painn.py index c42ab39a..bccee0c6 100644 --- a/nff/nn/models/painn.py +++ b/nff/nn/models/painn.py @@ -223,7 +223,7 @@ def pool(self, batch, atomwise_out, xyz, r_ij, nbrs, inference=False): # transfer those results that don't get pooled if inference: atomwise_out = batch_detach(atomwise_out) - for key in atomwise_out.keys(): + for key in atomwise_out: if key not in all_results: all_results[key] = atomwise_out[key] @@ -238,7 +238,7 @@ def add_delta(self, all_results): all_results[key] = all_results[e_i] - all_results[e_j] grad_keys = [e_i + "_grad", e_j + "_grad"] delta_grad_key = "_".join(grad_keys) + "_delta" - if all([grad_key in all_results for grad_key in grad_keys]): + if all(grad_key in all_results for grad_key in grad_keys): all_results[delta_grad_key] = all_results[grad_keys[0]] - all_results[grad_keys[1]] return all_results @@ -451,7 +451,7 @@ class PainnGapToAbs(nn.Module): """ def __init__(self, ground_model, gap_model, subtract_gap): - super(PainnGapToAbs, self).__init__() + super().__init__() self.ground_model = ground_model self.gap_model = gap_model @@ -464,18 +464,12 @@ def get_model_attr(self, model, key): return getattr(model, key) def set_model_attr(self, model, key, val): - if hasattr(model, "painn_model"): - sub_model = model.painn_model - else: - sub_model = model + sub_model = model.painn_model if hasattr(model, "painn_model") else model setattr(sub_model, key, val) def get_grad_keys(self, model): - if hasattr(model, "painn_model"): - grad_keys = model.painn_model.grad_keys - else: - grad_keys = model.grad_keys + grad_keys = model.painn_model.grad_keys if hasattr(model, "painn_model") else model.grad_keys return set(grad_keys) @property @@ -503,8 +497,8 @@ def forward(self, *args, **kwargs): for key in common_keys: pool_dics = [self.get_model_attr(model, "pool_dic") for model in self.models] - in_pool = all([key in dic for dic in pool_dics]) - in_grad = all([key in self.get_model_attr(model, "grad_keys") for model in self.models]) + in_pool = all(key in dic for dic in pool_dics) + in_grad = all(key in self.get_model_attr(model, "grad_keys") for model in self.models) common = in_pool or in_grad diff --git a/nff/nn/models/schnet.py b/nff/nn/models/schnet.py index 992774b0..425011c2 100644 --- a/nff/nn/models/schnet.py +++ b/nff/nn/models/schnet.py @@ -144,7 +144,7 @@ def convolve(self, batch, xyz=None): r = self.atom_embed(r.long()).squeeze() # update function includes periodic boundary conditions - for i, conv in enumerate(self.convolutions): + for conv in self.convolutions: dr = conv(r=r, e=e, a=a) r = r + dr @@ -159,7 +159,7 @@ def V_ex(self, r_ij, nbr_list, xyz): def forward(self, batch, xyz=None, requires_stress=False, **kwargs): """Summary Args: - batch (dict): dictionary of props + batch (dict): dictionary of propSchNetEdgeFilters xyz (torch.tensor): (optional) coordinates Returns: diff --git a/nff/nn/models/schnet_features.py b/nff/nn/models/schnet_features.py index 267de820..d6169873 100644 --- a/nff/nn/models/schnet_features.py +++ b/nff/nn/models/schnet_features.py @@ -158,7 +158,7 @@ def convolve_sub_batch(self, batch, xyz=None, xyz_grad=False, **kwargs): # update function includes periodic boundary conditions - for i, conv in enumerate(self.convolutions): + for conv in self.convolutions: dr = conv(r=r, e=e, a=a) r = r + dr diff --git a/nff/nn/models/spooky.py b/nff/nn/models/spooky.py index 84cff622..ea680ff1 100644 --- a/nff/nn/models/spooky.py +++ b/nff/nn/models/spooky.py @@ -123,7 +123,7 @@ def get_results(self, z, f, num_atoms, xyz, charge, nbrs, offsets, mol_offsets, if key in self.electrostatics: dipole = get_dipole(xyz=xyz, q=q, num_atoms=num_atoms) suffix = "_" + key.split("_")[-1] - if not any([i.isdigit() for i in suffix]): + if not any(i.isdigit() for i in suffix): suffix = "" results.update({f"dipole{suffix}": dipole, f"q{suffix}": q}) @@ -169,7 +169,7 @@ def fwd(self, batch, xyz=None, grad_keys=None): r_ij, nbrs = get_rij(xyz=xyz, batch=batch, nbrs=nbrs, cutoff=self.cutoff) f = torch.zeros_like(x) - for i, interaction in enumerate(self.interactions): + for interaction in self.interactions: x, y_t = interaction(x=x, xyz=xyz, nbrs=nbrs, num_atoms=num_atoms, r_ij=r_ij) f = f + y_t diff --git a/nff/nn/models/spooky_fast.py b/nff/nn/models/spooky_fast.py index 82d98e86..3a8565fe 100644 --- a/nff/nn/models/spooky_fast.py +++ b/nff/nn/models/spooky_fast.py @@ -103,7 +103,7 @@ def get_results(self, z, f, num_atoms, xyz, charge, mol_nbrs, nbrs): if key in self.electrostatics: dipole = get_dipole(xyz=xyz, q=q, num_atoms=num_atoms) suffix = "_" + key.split("_")[-1] - if not any([i.isdigit() for i in suffix]): + if not any(i.isdigit() for i in suffix): suffix = "" results.update({f"dipole{suffix}": dipole, f"q{suffix}": q}) @@ -137,7 +137,7 @@ def fwd(self, batch, xyz=None, grad_keys=None): x = self.embedding(charge=charge, spin=spin, z=z, num_atoms=num_atoms) f = torch.zeros_like(x) - for i, interaction in enumerate(self.interactions): + for interaction in self.interactions: x, y_t = interaction(x=x, xyz=xyz, nbrs=nbrs, num_atoms=num_atoms) f += y_t diff --git a/nff/nn/models/spooky_net_source/modules/attention.py b/nff/nn/models/spooky_net_source/modules/attention.py index d7817c20..e0efcfb5 100644 --- a/nff/nn/models/spooky_net_source/modules/attention.py +++ b/nff/nn/models/spooky_net_source/modules/attention.py @@ -23,12 +23,9 @@ class Attention(nn.Module): def __init__(self, dim_qk: int, dim_v: int, num_random_features: Optional[int] = None) -> None: """Initializes the Attention class.""" - super(Attention, self).__init__() + super().__init__() self.num_random_features = num_random_features - if self.num_random_features is not None: - omega = self._omega(num_random_features, dim_qk) - else: - omega = [] + omega = self._omega(num_random_features, dim_qk) if self.num_random_features is not None else [] self.register_buffer("omega", torch.tensor(omega, dtype=torch.float64)) self.reset_parameters() @@ -39,7 +36,7 @@ def _omega(self, nrows: int, ncols: int) -> np.ndarray: """Return a (nrows x ncols) random feature matrix.""" nblocks = int(nrows / ncols) blocks = [] - for i in range(nblocks): + for _ in range(nblocks): block = np.random.normal(size=(ncols, ncols)) q, _ = np.linalg.qr(block) blocks.append(np.transpose(q)) diff --git a/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py b/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py index 8e33b7f2..37d81c90 100644 --- a/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py +++ b/nff/nn/models/spooky_net_source/modules/bernstein_polynomials.py @@ -20,7 +20,7 @@ class BernsteinPolynomials(nn.Module): def __init__(self, num_basis_functions: int, cutoff: float) -> None: """Initializes the BernsteinPolynomials class.""" - super(BernsteinPolynomials, self).__init__() + super().__init__() # compute values to initialize buffers logfactorial = np.zeros(num_basis_functions) for i in range(2, num_basis_functions): diff --git a/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py b/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py index 83a9f434..8618a13c 100644 --- a/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py +++ b/nff/nn/models/spooky_net_source/modules/d4_dispersion_energy.py @@ -6,7 +6,7 @@ import torch.nn as nn import torch.nn.functional as F -from ..functional import softplus_inverse, switch_function +from nff.nn.models.spooky_net_source.functional import softplus_inverse, switch_function """ computes D4 dispersion energy @@ -36,7 +36,7 @@ def __init__( dtype: torch.dtype = torch.float32, ) -> None: """Initializes the D4DispersionEnergy class.""" - super(D4DispersionEnergy, self).__init__() + super().__init__() # Grimme's D4 dispersion is only parametrized up to Rn (Z=86) assert Zmax <= 87 # trainable parameters diff --git a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py index ddeffe49..3173066a 100644 --- a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py @@ -39,7 +39,7 @@ def __init__( is_charge: bool = False, ) -> None: """Initializes the ElectronicEmbedding class.""" - super(ElectronicEmbedding, self).__init__() + super().__init__() self.is_charge = is_charge self.linear_q = nn.Linear(num_features, num_features) if is_charge: # charges are duplicated to use separate weights for +/- diff --git a/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py b/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py index ac6577ee..0fae7e8d 100644 --- a/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py +++ b/nff/nn/models/spooky_net_source/modules/electrostatic_energy.py @@ -4,7 +4,7 @@ import torch import torch.nn as nn -from ..functional import switch_function +from nff.nn.models.spooky_net_source.functional import switch_function """ computes electrostatic energy, switches between a constant value @@ -20,7 +20,7 @@ def __init__( cutoff: float = 1.0, lr_cutoff: Optional[float] = None, ) -> None: - super(ElectrostaticEnergy, self).__init__() + super().__init__() self.ke = ke self.kehalf = ke / 2 self.cuton = cuton @@ -62,7 +62,7 @@ def set_kmax(self, Nxmax: int, Nymax: int, Nzmax: int) -> None: kz = torch.arange(0, Nzmax + 1) kz = torch.cat([kz, -kz[1:]]) kmul = torch.cartesian_prod(kx, ky, kz)[1:] # 0th entry is 0 0 0 - kmax = max(max(Nxmax, Nymax), Nzmax) + kmax = max(Nxmax, Nymax, Nzmax) self.register_buffer("kmul", kmul[torch.sum(kmul**2, dim=-1) <= kmax**2], persistent=False) def set_alpha(self, alpha: Optional[float] = None) -> None: diff --git a/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py b/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py index 111728c7..3a5d0bd4 100644 --- a/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py +++ b/nff/nn/models/spooky_net_source/modules/exponential_bernstein_polynomials.py @@ -3,7 +3,7 @@ import torch.nn as nn import torch.nn.functional as F -from ..functional import softplus_inverse +from nff.nn.models.spooky_net_source.functional import softplus_inverse class ExponentialBernsteinPolynomials(nn.Module): @@ -42,7 +42,7 @@ def __init__( exp_weighting: bool = False, ) -> None: """Initializes the ExponentialBernsteinPolynomials class.""" - super(ExponentialBernsteinPolynomials, self).__init__() + super().__init__() self.ini_alpha = ini_alpha self.exp_weighting = exp_weighting if no_basis_function_at_infinity: # increase number of basis functions by one diff --git a/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py b/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py index 05644e49..7d0e1fb0 100644 --- a/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py +++ b/nff/nn/models/spooky_net_source/modules/exponential_gaussian_functions.py @@ -2,7 +2,7 @@ import torch.nn as nn import torch.nn.functional as F -from ..functional import softplus_inverse +from nff.nn.models.spooky_net_source.functional import softplus_inverse class ExponentialGaussianFunctions(nn.Module): @@ -34,7 +34,7 @@ def __init__( exp_weighting: bool = False, ) -> None: """Initializes the ExponentialGaussianFunctions class.""" - super(ExponentialGaussianFunctions, self).__init__() + super().__init__() self.ini_alpha = ini_alpha self.exp_weighting = exp_weighting if no_basis_function_at_infinity: diff --git a/nff/nn/models/spooky_net_source/modules/gaussian_functions.py b/nff/nn/models/spooky_net_source/modules/gaussian_functions.py index 6d1b7d80..66235119 100644 --- a/nff/nn/models/spooky_net_source/modules/gaussian_functions.py +++ b/nff/nn/models/spooky_net_source/modules/gaussian_functions.py @@ -19,7 +19,7 @@ class GaussianFunctions(nn.Module): def __init__(self, num_basis_functions: int, cutoff: float) -> None: """Initializes the GaussianFunctions class.""" - super(GaussianFunctions, self).__init__() + super().__init__() self.register_buffer("cutoff", torch.tensor(cutoff, dtype=torch.float64)) self.register_buffer( "center", diff --git a/nff/nn/models/spooky_net_source/modules/interaction_module.py b/nff/nn/models/spooky_net_source/modules/interaction_module.py index ee57b122..7e0a4ae6 100644 --- a/nff/nn/models/spooky_net_source/modules/interaction_module.py +++ b/nff/nn/models/spooky_net_source/modules/interaction_module.py @@ -59,7 +59,7 @@ def __init__( activation: str = "swish", ) -> None: """Initializes the InteractionModule class.""" - super(InteractionModule, self).__init__() + super().__init__() # initialize modules self.local_interaction = LocalInteraction( num_features=num_features, diff --git a/nff/nn/models/spooky_net_source/modules/local_interaction.py b/nff/nn/models/spooky_net_source/modules/local_interaction.py index 16ea9121..1855e967 100644 --- a/nff/nn/models/spooky_net_source/modules/local_interaction.py +++ b/nff/nn/models/spooky_net_source/modules/local_interaction.py @@ -40,7 +40,7 @@ def __init__( activation: str = "swish", ) -> None: """Initializes the LocalInteraction class.""" - super(LocalInteraction, self).__init__() + super().__init__() self.radial_s = nn.Linear(num_basis_functions, num_features, bias=False) self.radial_p = nn.Linear(num_basis_functions, num_features, bias=False) self.radial_d = nn.Linear(num_basis_functions, num_features, bias=False) diff --git a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py index ba969495..9ef3f2cf 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py @@ -32,7 +32,7 @@ class NonlinearElectronicEmbedding(nn.Module): def __init__(self, num_features: int, num_residual: int, activation: str = "swish") -> None: """Initializes the NonlinearElectronicEmbedding class.""" - super(NonlinearElectronicEmbedding, self).__init__() + super().__init__() self.linear_q = nn.Linear(num_features, num_features, bias=False) self.featurize_k = nn.Linear(1, num_features) self.resblock_k = ResidualMLP(num_features, num_residual, activation=activation, zero_init=True) diff --git a/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py b/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py index aee7db84..06afde86 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py +++ b/nff/nn/models/spooky_net_source/modules/nonlocal_interaction.py @@ -40,7 +40,7 @@ def __init__( activation: str = "swish", ) -> None: """Initializes the NonlocalInteraction class.""" - super(NonlocalInteraction, self).__init__() + super().__init__() self.resblock_q = ResidualMLP(num_features, num_residual_q, activation=activation, zero_init=True) self.resblock_k = ResidualMLP(num_features, num_residual_k, activation=activation, zero_init=True) self.resblock_v = ResidualMLP(num_features, num_residual_v, activation=activation, zero_init=True) diff --git a/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py b/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py index ee99ff26..3d0a68f5 100644 --- a/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nuclear_embedding.py @@ -26,7 +26,7 @@ class NuclearEmbedding(nn.Module): def __init__(self, num_features: int, Zmax: int = 87, zero_init: bool = True) -> None: """Initializes the NuclearEmbedding class.""" - super(NuclearEmbedding, self).__init__() + super().__init__() self.num_features = num_features self.register_buffer("electron_config", torch.tensor(electron_config)) self.register_parameter("element_embedding", nn.Parameter(torch.Tensor(Zmax, self.num_features))) @@ -45,7 +45,7 @@ def reset_parameters(self, zero_init: bool = True) -> None: def train(self, mode: bool = True) -> None: """Switch between training and evaluation mode.""" - super(NuclearEmbedding, self).train(mode=mode) + super().train(mode=mode) if not self.training: with torch.no_grad(): self.embedding = self.element_embedding + self.config_linear(self.electron_config) diff --git a/nff/nn/models/spooky_net_source/modules/residual.py b/nff/nn/models/spooky_net_source/modules/residual.py index 8d83f702..237a319e 100644 --- a/nff/nn/models/spooky_net_source/modules/residual.py +++ b/nff/nn/models/spooky_net_source/modules/residual.py @@ -27,7 +27,7 @@ def __init__( zero_init: bool = True, ) -> None: """Initializes the Residual class.""" - super(Residual, self).__init__() + super().__init__() # initialize attributes if activation == "ssp": Activation = ShiftedSoftplus diff --git a/nff/nn/models/spooky_net_source/modules/residual_mlp.py b/nff/nn/models/spooky_net_source/modules/residual_mlp.py index d6e0f867..afb5f786 100644 --- a/nff/nn/models/spooky_net_source/modules/residual_mlp.py +++ b/nff/nn/models/spooky_net_source/modules/residual_mlp.py @@ -15,7 +15,7 @@ def __init__( bias: bool = True, zero_init: bool = False, ) -> None: - super(ResidualMLP, self).__init__() + super().__init__() self.residual = ResidualStack(num_features, num_residual, activation=activation, bias=bias, zero_init=True) # initialize activation function if activation == "ssp": diff --git a/nff/nn/models/spooky_net_source/modules/residual_stack.py b/nff/nn/models/spooky_net_source/modules/residual_stack.py index 004599fe..2deb80f7 100644 --- a/nff/nn/models/spooky_net_source/modules/residual_stack.py +++ b/nff/nn/models/spooky_net_source/modules/residual_stack.py @@ -28,7 +28,7 @@ def __init__( zero_init: bool = True, ) -> None: """Initializes the ResidualStack class.""" - super(ResidualStack, self).__init__() + super().__init__() self.stack = nn.ModuleList([Residual(num_features, activation, bias, zero_init) for i in range(num_residual)]) def forward(self, x: torch.Tensor) -> torch.Tensor: diff --git a/nff/nn/models/spooky_net_source/modules/shifted_softplus.py b/nff/nn/models/spooky_net_source/modules/shifted_softplus.py index e7faec46..9e9b1a7a 100644 --- a/nff/nn/models/spooky_net_source/modules/shifted_softplus.py +++ b/nff/nn/models/spooky_net_source/modules/shifted_softplus.py @@ -24,7 +24,7 @@ class ShiftedSoftplus(nn.Module): def __init__(self, num_features: int, initial_alpha: float = 1.0, initial_beta: float = 1.0) -> None: """Initializes the ShiftedSoftplus class.""" - super(ShiftedSoftplus, self).__init__() + super().__init__() self._log2 = math.log(2) self.initial_alpha = initial_alpha self.initial_beta = initial_beta diff --git a/nff/nn/models/spooky_net_source/modules/sinc_functions.py b/nff/nn/models/spooky_net_source/modules/sinc_functions.py index 74aea4fb..a6134d9b 100644 --- a/nff/nn/models/spooky_net_source/modules/sinc_functions.py +++ b/nff/nn/models/spooky_net_source/modules/sinc_functions.py @@ -28,7 +28,7 @@ class SincFunctions(nn.Module): def __init__(self, num_basis_functions: int, cutoff: float) -> None: """Initializes the SincFunctions class.""" - super(SincFunctions, self).__init__() + super().__init__() self.register_buffer( "factor", torch.linspace(1, num_basis_functions, num_basis_functions, dtype=torch.float64) / cutoff, diff --git a/nff/nn/models/spooky_net_source/modules/swish.py b/nff/nn/models/spooky_net_source/modules/swish.py index 7ff53dce..5bb7096e 100644 --- a/nff/nn/models/spooky_net_source/modules/swish.py +++ b/nff/nn/models/spooky_net_source/modules/swish.py @@ -25,7 +25,7 @@ class Swish(nn.Module): def __init__(self, num_features: int, initial_alpha: float = 1.0, initial_beta: float = 1.702) -> None: """Initializes the Swish class.""" - super(Swish, self).__init__() + super().__init__() self.initial_alpha = initial_alpha self.initial_beta = initial_beta self.register_parameter("alpha", nn.Parameter(torch.Tensor(num_features))) diff --git a/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py b/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py index d0ed4a32..1317ed1a 100644 --- a/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py +++ b/nff/nn/models/spooky_net_source/modules/zbl_repulsion_energy.py @@ -2,7 +2,7 @@ import torch.nn as nn import torch.nn.functional as F -from ..functional import softplus_inverse +from nff.nn.models.spooky_net_source.functional import softplus_inverse class ZBLRepulsionEnergy(nn.Module): @@ -23,7 +23,7 @@ class ZBLRepulsionEnergy(nn.Module): def __init__(self, a0: float = 0.5291772105638411, ke: float = 14.399645351950548) -> None: """Initializes the ZBLRepulsionEnergy class.""" - super(ZBLRepulsionEnergy, self).__init__() + super().__init__() self.a0 = a0 self.ke = ke self.kehalf = ke / 2 diff --git a/nff/nn/models/spooky_net_source/spookynet.py b/nff/nn/models/spooky_net_source/spookynet.py index c2c1fb09..d11837ca 100644 --- a/nff/nn/models/spooky_net_source/spookynet.py +++ b/nff/nn/models/spooky_net_source/spookynet.py @@ -148,7 +148,7 @@ def __init__( **kwargs, ) -> None: """Initializes the SpookyNet class.""" - super(SpookyNet, self).__init__() + super().__init__() # load state from a file (if load_from is not None) and overwrite # the given arguments. @@ -181,14 +181,8 @@ def __init__( module_keep_prob = saved_state["module_keep_prob"] Zmax = saved_state["Zmax"] # compatibility with older code - if "use_irreps" in saved_state: - use_irreps = saved_state["use_irreps"] - else: - use_irreps = False - if "use_nonlinear_embedding" in saved_state: - use_nonlinear_embedding = saved_state["use_nonlinear_embedding"] - else: - use_nonlinear_embedding = True + use_irreps = saved_state.get("use_irreps", False) + use_nonlinear_embedding = saved_state.get("use_nonlinear_embedding", True) # store argument values as attributes self.activation = activation @@ -374,14 +368,14 @@ def device(self) -> torch.device: def train(self, mode: bool = True) -> None: """Turn on training mode.""" - super(SpookyNet, self).train(mode=mode) + super().train(mode=mode) for name, param in self.named_parameters(): param.requires_grad = self.requires_grad_dict[name] def eval(self) -> None: """Turn on evaluation mode (smaller memory footprint).""" - super(SpookyNet, self).eval() - for name, param in self.named_parameters(): + super().eval() + for _name, param in self.named_parameters(): param.requires_grad = False def build_requires_grad_dict(self) -> None: @@ -463,10 +457,7 @@ def prefix_postfix(string, pattern, prefix="resblock", sep=".", presep="_"): elif "local_interaction.activation_" in old_key or "embedding.activation_" in old_key: new_key = prefix_postfix(old_key, "activation") elif "local_interaction.linear_" in old_key or "embedding.linear_" in old_key: - if "embedding.linear_q" in old_key: - new_key = old_key - else: - new_key = prefix_postfix(old_key, "linear") + new_key = old_key if "embedding.linear_q" in old_key else prefix_postfix(old_key, "linear") elif ".local_interaction.residual." in old_key: new_key = old_key.replace(".residual.", ".resblock.residual.") elif ".local_interaction.activation." in old_key: diff --git a/nff/nn/models/spooky_net_source/spookynet_ensemble.py b/nff/nn/models/spooky_net_source/spookynet_ensemble.py index 381a097a..3c31862a 100644 --- a/nff/nn/models/spooky_net_source/spookynet_ensemble.py +++ b/nff/nn/models/spooky_net_source/spookynet_ensemble.py @@ -19,7 +19,7 @@ class SpookyNetEnsemble(nn.Module): def __init__(self, models: List[str] = []) -> None: """Initializes the SpookyNetEnsemble class.""" - super(SpookyNetEnsemble, self).__init__() + super().__init__() assert len(models) > 1 self.models = nn.ModuleList([SpookyNet(load_from=model) for model in models]) for model in self.models: @@ -40,13 +40,13 @@ def train(self, mode=True) -> None: Turn on training mode. This is just for compatibility, the models should be trained individually and only evaluated as ensemble. """ - super(SpookyNetEnsemble, self).train(mode=mode) + super().train(mode=mode) for model in self.models: model.train(mode) def eval(self) -> None: """Turn on evaluation mode (smaller memory footprint).""" - super(SpookyNetEnsemble, self).eval() + super().eval() for model in self.models: model.eval() diff --git a/nff/nn/models/spooky_painn.py b/nff/nn/models/spooky_painn.py index 60176459..8141f51b 100644 --- a/nff/nn/models/spooky_painn.py +++ b/nff/nn/models/spooky_painn.py @@ -184,7 +184,7 @@ def add_phys(self, results, s_i, v_i, xyz, z, charge, nbrs, num_atoms, offsets, if key in electrostatics: suffix = "_" + key.split("_")[-1] - if not any([i.isdigit() for i in suffix]): + if not any(i.isdigit() for i in suffix): suffix = "" results.update({f"dipole{suffix}": full_dip, f"q{suffix}": q, f"dip_atom{suffix}": dip_atom}) @@ -304,10 +304,7 @@ def get_off_diag_keys(self): return off_diag def get_diabat_charge(self, key, charge): - if key in self.off_diag_keys: - total_charge = torch.zeros_like(charge) - else: - total_charge = charge + total_charge = torch.zeros_like(charge) if key in self.off_diag_keys else charge return total_charge def add_phys(self, results, s_i, v_i, xyz, z, charge, nbrs, num_atoms, offsets, mol_offsets, mol_nbrs): @@ -325,7 +322,7 @@ def add_phys(self, results, s_i, v_i, xyz, z, charge, nbrs, num_atoms, offsets, # transition charges sum to 0 - total_charge = self.get_diabat_charge(key=key, charge=charge) + self.get_diabat_charge(key=key, charge=charge) mol_nbrs, _ = make_undirected(batch["mol_nbrs"]) elec_e, q, dip_atom, full_dip = elec_module( @@ -348,7 +345,7 @@ def add_phys(self, results, s_i, v_i, xyz, z, charge, nbrs, num_atoms, offsets, if key in electrostatics: suffix = "_" + key.split("_")[-1] - if not any([i.isdigit() for i in suffix]): + if not any(i.isdigit() for i in suffix): suffix = "" results.update({f"dipole{suffix}": full_dip, f"q{suffix}": q, f"dip_atom{suffix}": dip_atom}) diff --git a/nff/nn/modules/diabat.py b/nff/nn/modules/diabat.py index 31794c6d..7bc3d234 100644 --- a/nff/nn/modules/diabat.py +++ b/nff/nn/modules/diabat.py @@ -237,13 +237,11 @@ def quants_to_eig(self, num_atoms, results, u): for j in range(num_states): if j < i: continue - if i == j: - key = f"{base_key}_{i}" - else: - key = f"trans_{base_key}_{i}{j}" + key = f"{base_key}_{i}" if i == j else f"trans_{base_key}_{i}{j}" results[key] = to_eig[..., i, j] return results + return None def add_adiabat_grads(self, xyz, results, inference, en_keys_for_grad): if en_keys_for_grad is None: @@ -284,7 +282,7 @@ def add_gap(self, results, add_grad): lower_grad_key = lower_key + "_grad" grad_keys = [upper_grad_key, lower_grad_key] - if not all([i in results for i in grad_keys]): + if not all(i in results for i in grad_keys): continue gap_grad = results[upper_grad_key] - results[lower_grad_key] @@ -348,10 +346,7 @@ def add_stochastic(self, results): return results def idx_to_grad_idx(self, num_atoms, nan_idx): - if isinstance(num_atoms, torch.Tensor): - atom_tens = num_atoms - else: - atom_tens = torch.LongTensor(num_atoms) + atom_tens = num_atoms if isinstance(num_atoms, torch.Tensor) else torch.LongTensor(num_atoms) end_idx = torch.cumsum(atom_tens, dim=0) start_idx = torch.cat([torch.tensor([0]).to(end_idx.device), end_idx[:-1]]) diff --git a/nff/nn/modules/schnet.py b/nff/nn/modules/schnet.py index 7171adbf..3cb274bd 100644 --- a/nff/nn/modules/schnet.py +++ b/nff/nn/modules/schnet.py @@ -93,7 +93,7 @@ class SchNetEdgeUpdate(EdgeUpdateModule): """ def __init__(self, n_atom_basis): - super(SchNetEdgeUpdate, self).__init__() + super().__init__() self.mlp = Sequential( Linear(2 * n_atom_basis, n_atom_basis), @@ -113,7 +113,7 @@ def update(self, e): class SchNetEdgeFilter(nn.Module): def __init__(self, cutoff, n_gaussians, trainable_gauss, n_filters, dropout_rate, activation="shifted_softplus"): - super(SchNetEdgeFilter, self).__init__() + super().__init__() self.filter = Sequential( GaussianSmearing( @@ -155,7 +155,7 @@ def __init__( trainable_gauss, dropout_rate, ): - super(SchNetConv, self).__init__() + super().__init__() self.moduledict = ModuleDict( { "message_edge_filter": Sequential( @@ -235,7 +235,7 @@ class GraphAttention(MessagePassingModule): """ def __init__(self, n_atom_basis): - super(GraphAttention, self).__init__() + super().__init__() self.weight = torch.nn.Parameter(torch.rand(1, 2 * n_atom_basis)) self.activation = LeakyReLU() @@ -265,7 +265,7 @@ def message(self, r, e, a): ) a_ij = weight_ij / normalization[a[:, 0]] # the importance of node j’s features to node i - a_ji = weight_ji / normalization[a[:, 1]] # the importance of node i’s features to node j + weight_ji / normalization[a[:, 1]] # the importance of node i’s features to node j a_ii = weight_ii / normalization # self-attention message = ( @@ -327,7 +327,7 @@ def __init__(self, multitaskdict, post_readout=None): Args: multitaskdict (dict): dictionary that contains model information """ - super(NodeMultiTaskReadOut, self).__init__() + super().__init__() # construct moduledict self.readout = construct_module_dict(multitaskdict) self.post_readout = post_readout @@ -406,7 +406,7 @@ def __init__(self, n_atom_hidden, n_filters, dropout_rate, n_bond_hidden, activa Returns: None """ - super(MixedSchNetConv, self).__init__() + super().__init__() self.moduledict = ModuleDict( { # convert the atom features to the dimension @@ -487,7 +487,7 @@ def __init__(self, mol_basis, boltz_basis, final_act, equal_weights=False, prob_ None """ - super(ConfAttention, self).__init__() + super().__init__() """ Xavier initializations from @@ -622,7 +622,7 @@ def __init__(self, mol_basis, boltz_basis, final_act, equal_weights=False, prob_ None """ - super(LinearConfAttention, self).__init__(mol_basis, boltz_basis, final_act, equal_weights) + super().__init__(mol_basis, boltz_basis, final_act, equal_weights) # has dimension mol_basis instead of 2 * mol_basis because we're not # comparing fingerprint pairs @@ -1038,9 +1038,9 @@ def sum_and_grad(batch, xyz, r_ij, nbrs, atomwise_output, grad_keys, out_keys=No allstress = torch.stack(allstress) split_val = torch.split(allstress, N) grad_ = torch.stack([i.sum(0) for i in split_val]) - if "cell" in batch.keys(): + if "cell" in batch: cell = torch.stack(torch.split(batch["cell"], 3, dim=0)) - elif "lattice" in batch.keys(): + elif "lattice" in batch: cell = torch.stack(torch.split(batch["lattice"], 3, dim=0)) volume = torch.Tensor(np.abs(np.linalg.det(cell.cpu().numpy()))).to(grad_.get_device()) grad = grad_ * (1 / volume[:, None, None]) @@ -1250,7 +1250,7 @@ class ScaleShift(nn.Module): """ def __init__(self, means=None, stddevs=None): - super(ScaleShift, self).__init__() + super().__init__() means = means if (means is not None) else {} stddevs = stddevs if (stddevs is not None) else {} @@ -1285,11 +1285,7 @@ def testBaseEdgeUpdate(self): r_in = torch.rand(6, 10) model = MessagePassingModule() r_out = model(r_in, e, a) - self.assertEqual( - r_in.shape, - r_out.shape, - "The node feature dimensions should be same for the base case", - ) + assert r_in.shape == r_out.shape, "The node feature dimensions should be same for the base case" def testBaseMessagePassing(self): # initialize basic graphs @@ -1298,11 +1294,7 @@ def testBaseMessagePassing(self): r = torch.rand(6, 10) model = EdgeUpdateModule() e_out = model(r, e_in, a) - self.assertEqual( - e_in.shape, - e_out.shape, - "The edge feature dimensions should be same for the base case", - ) + assert e_in.shape == e_out.shape, "The edge feature dimensions should be same for the base case" def testSchNetMPNN(self): # contruct a graph @@ -1327,7 +1319,7 @@ def testSchNetMPNN(self): r_out = model(r_in, e, a) - self.assertEqual(r_in.shape, r_out.shape, "The node feature dimensions should be same.") + assert r_in.shape == r_out.shape, "The node feature dimensions should be same." """ Deprecated @@ -1405,11 +1397,7 @@ def testSchNetEdgeUpdate(self): model = SchNetEdgeUpdate(n_atom_basis=n_atom_basis) e_out = model(r, e_in, a) - self.assertEqual( - e_in.shape, - e_out.shape, - ("The edge feature dimensions should be same for the SchNet " "Edge Update case"), - ) + assert e_in.shape == e_out.shape, "The edge feature dimensions should be same for the SchNet " "Edge Update case" def testGAT(self): n_atom_basis = 10 @@ -1422,7 +1410,7 @@ def testGAT(self): r_out = attention(r_in, e, a) - self.assertEqual(r_out.shape, r_in.shape) + assert r_out.shape == r_in.shape def testmultitask(self): n_atom = 10 diff --git a/nff/nn/modules/spooky.py b/nff/nn/modules/spooky.py index 5889ed04..661fc46d 100644 --- a/nff/nn/modules/spooky.py +++ b/nff/nn/modules/spooky.py @@ -55,7 +55,7 @@ def get_elec_config(max_z): # in ELEC_CONFIG elec_config = torch.ones(max_z + 1, 20) * float("nan") for z, val in ELEC_CONFIG.items(): - elec_config[z] = torch.Tensor([z] + val) / max_z_config + elec_config[z] = torch.Tensor([z, *val]) / max_z_config return elec_config diff --git a/nff/nn/modules/spooky_fast.py b/nff/nn/modules/spooky_fast.py index e044931c..a1b625b6 100644 --- a/nff/nn/modules/spooky_fast.py +++ b/nff/nn/modules/spooky_fast.py @@ -58,7 +58,7 @@ def get_elec_config(max_z): # in ELEC_CONFIG elec_config = torch.ones(max_z + 1, 20) * float("nan") for z, val in ELEC_CONFIG.items(): - elec_config[z] = torch.Tensor([z] + val) / max_z_config + elec_config[z] = torch.Tensor([z, *val]) / max_z_config return elec_config diff --git a/nff/nn/tensorgrad.py b/nff/nn/tensorgrad.py index 32c6c264..191c5f49 100644 --- a/nff/nn/tensorgrad.py +++ b/nff/nn/tensorgrad.py @@ -305,7 +305,7 @@ def hess_from_results(results, xyz, stack_xyz, keys, batch, device): def general_batched_hessian(batch, keys, device, model=None, forward=None, **kwargs): # doesn't seem to work for painn, at least with non-locality - assert any([i is not None for i in [model, forward]]) + assert any(i is not None for i in [model, forward]) xyz, stack_xyz, results = results_from_stack(batch=batch, model=model, forward=forward, **kwargs) results = hess_from_results(results=results, xyz=xyz, stack_xyz=stack_xyz, keys=keys, batch=batch, device=device) diff --git a/nff/nn/utils.py b/nff/nn/utils.py index 668f185d..212e6301 100644 --- a/nff/nn/utils.py +++ b/nff/nn/utils.py @@ -262,10 +262,7 @@ def torch_nbr_list(atomsobject, cutoff, device="cuda:0", directed=True, requires nbr_list[:, 1].detach().to("cpu").numpy(), ) - if any(atomsobject.pbc): - offsets = offsets - else: - offsets = np.zeros((nbr_list.shape[0], 3)) + offsets = offsets if any(atomsobject.pbc) else np.zeros((nbr_list.shape[0], 3)) return i, j, offsets diff --git a/nff/reactive_tools/ev_following.py b/nff/reactive_tools/ev_following.py index 64051803..6d1828bd 100644 --- a/nff/reactive_tools/ev_following.py +++ b/nff/reactive_tools/ev_following.py @@ -96,10 +96,7 @@ def eigvec_following( h = torch.add(h_p, torch.sum(h_n, dim=0)).reshape(-1, len(old_xyz[0]), Ndim) step_size = h.norm() - if step_size <= maxstepsize: - new_xyz = old_xyz + h - else: - new_xyz = old_xyz + (h / (step_size / maxstepsize)) + new_xyz = old_xyz + h if step_size <= maxstepsize else old_xyz + h / (step_size / maxstepsize) output = (new_xyz.detach(), grad.detach(), hessian.detach(), h.reshape(-1).detach()) print(f"STEP {step}:", output) @@ -142,17 +139,11 @@ def ev_run( if step % nbr_update_period == 0: ev_atoms.update_nbr_list() - if step == 0: - args = [] - else: - args = [hessian, grad, h] + args = [] if step == 0 else [hessian, grad, h] xyz, grad, hessian, h = eigvec_following(ev_atoms, step, maxstepsize, device, method, *args) - if step == 0: - xyz_all = xyz - else: - xyz_all = torch.cat((xyz_all, xyz), dim=0) + xyz_all = xyz if step == 0 else torch.cat((xyz_all, xyz), dim=0) rmslist.append(grad.pow(2).sqrt().mean()) maxlist.append(grad.pow(2).sqrt().max()) diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index 415e63c6..c424a0c2 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -517,6 +517,7 @@ def rescale_v(self, old_surf, new_surf): scale = (((energy[old_surf] + (self.ke_parallel)) - energy[new_surf]) / (self.ke_parallel)) ** 0.5 self.velocities = scale * v_par_vec + (self.velocity_list[-2] - v_par_vec) + return None def update_probabilities(self): """ @@ -625,6 +626,7 @@ def hop(self, new_surf): self.time = self.time - self.dt self.modify_save() + return None def full_step(self, compute_internal_forces=True): """ @@ -879,15 +881,12 @@ def run(self): while not complete: num_steps += 1 - if np.mod(num_steps, self.nbr_update_period) == 0: - get_new_neighbors = True - else: - get_new_neighbors = False + get_new_neighbors = np.mod(num_steps, self.nbr_update_period) == 0 self.step(get_new_neighbors=get_new_neighbors) print(f"Completed step {num_steps}") - complete = all([trj.time >= self.max_time for trj in self.zhu_trjs]) + complete = all(trj.time >= self.max_time for trj in self.zhu_trjs) for trj in self.zhu_trjs: trj.output_to_json() diff --git a/nff/tests/test_data/test_dataset.py b/nff/tests/test_data/test_dataset.py index ea3304fb..df167f26 100644 --- a/nff/tests/test_data/test_dataset.py +++ b/nff/tests/test_data/test_dataset.py @@ -115,13 +115,13 @@ def test_split_train_validation_test(self): min_count=MIN_COUNT, ) - self.assertEqual(len(train_dset), 43) - self.assertEqual(len(val_dset), 6) - self.assertEqual(len(test_dset), 6) + assert len(train_dset) == 43 + assert len(val_dset) == 6 + assert len(test_dset) == 6 - self.assertEqual(Counter(train_dset.props[TARG_NAME]), self.train_formula_count) - self.assertEqual(Counter(val_dset.props[TARG_NAME]), self.val_formula_count) - self.assertEqual(Counter(test_dset.props[TARG_NAME]), self.test_formula_count) + assert Counter(train_dset.props[TARG_NAME]) == self.train_formula_count + assert Counter(val_dset.props[TARG_NAME]) == self.val_formula_count + assert Counter(test_dset.props[TARG_NAME]) == self.test_formula_count def test_stratified_split(self): idx_train, idx_test = stratified_split( @@ -132,8 +132,8 @@ def test_stratified_split(self): min_count=MIN_COUNT, ) - self.assertEqual(idx_train, self.idx_train) - self.assertEqual(idx_test, self.idx_test) + assert idx_train == self.idx_train + assert idx_test == self.idx_test class TestConcatenate(unittest.TestCase): @@ -168,19 +168,19 @@ def setUp(self): def test_concat_1(self): ab = concatenate_dict(self.dict_a, self.dict_b) - self.assertEqual(ab, self.dict_ab) + assert ab == self.dict_ab def test_concat_2(self): ac = concatenate_dict(self.dict_a, self.dict_c) - self.assertEqual(ac, self.dict_ac) + assert ac == self.dict_ac def test_concat_single_dict(self): a = concatenate_dict(self.dict_a) - self.assertEqual(a, self.dict_a_list) + assert a == self.dict_a_list def test_concat_single_dict_lists(self): a = concatenate_dict(self.dict_a_list) - self.assertEqual(a, self.dict_a_list) + assert a == self.dict_a_list def test_tensors(self): d1 = {"a": torch.tensor([1.0])} @@ -193,11 +193,11 @@ def test_tensors(self): torch.tensor(3.0), ] } - self.assertEqual(dcat, expected) + assert dcat == expected def test_concat_list_lists(self): dd = concatenate_dict(self.dict_d, self.dict_d) - self.assertEqual(dd, self.dict_dd) + assert dd == self.dict_dd def test_concat_tensors(self): t = { @@ -213,7 +213,7 @@ def test_concat_tensors(self): concat = concatenate_dict(t, t) for key, val in concat.items(): for i, j in zip(val, tt[key]): - self.assertTrue((i == j).all().item()) + assert (i == j).all().item() def test_inexistent_list_lists(self): a = {"a": [[[1, 2]], [[3, 4]]], "b": [5, 6]} @@ -221,7 +221,7 @@ def test_inexistent_list_lists(self): b = {"b": [7, 8]} ab = concatenate_dict(a, b) expected = {"a": [[[1, 2]], [[3, 4]], None, None], "b": [5, 6, 7, 8]} - self.assertEqual(ab, expected) + assert ab == expected @pytest.mark.usefixtures("device") # Ensure the fixture is accessible diff --git a/nff/tests/test_data/test_stats.py b/nff/tests/test_data/test_stats.py index c0ed4fb1..84a74c44 100644 --- a/nff/tests/test_data/test_stats.py +++ b/nff/tests/test_data/test_stats.py @@ -17,17 +17,17 @@ def test_get_atom_count(self): # Test case 1: Single atom formula formula = "H" expected_result = {"H": 1} - self.assertEqual(get_atom_count(formula), expected_result) + assert get_atom_count(formula) == expected_result # Test case 2: Formula with multiple atoms formula = "H2O" expected_result = {"H": 2, "O": 1} - self.assertEqual(get_atom_count(formula), expected_result) + assert get_atom_count(formula) == expected_result # Test case 3: Formula with repeated atoms formula = "CH3CH2CH3" expected_result = {"C": 3, "H": 8} - self.assertEqual(get_atom_count(formula), expected_result) + assert get_atom_count(formula) == expected_result def test_all_atoms(self): unique_formulas = ["H2O", "CH4", "CO2"] @@ -35,7 +35,7 @@ def test_all_atoms(self): result = all_atoms(unique_formulas) - self.assertEqual(result, expected_result, "Incorrect atom set") + assert result == expected_result, "Incorrect atom set" class TestStats(unittest.TestCase): diff --git a/nff/train/hooks/logging.py b/nff/train/hooks/logging.py index b627c74f..5e7da171 100644 --- a/nff/train/hooks/logging.py +++ b/nff/train/hooks/logging.py @@ -78,7 +78,7 @@ def on_batch_end(self, trainer, train_batch, result, loss): def _batch_size(self, result): if type(result) is dict: - n_samples = list(result.values())[0].size(0) + n_samples = next(iter(result.values())).size(0) elif type(result) in [list, tuple]: n_samples = result[0].size(0) else: @@ -428,24 +428,23 @@ def on_validation_end(self, trainer, val_loss): if np.isscalar(m): self.writer.add_scalar("metrics/%s" % metric.name, float(m), trainer.epoch) - elif m.ndim == 2: - if trainer.epoch % self.img_every_n_epochs == 0: - import matplotlib.pyplot as plt + elif m.ndim == 2 and trainer.epoch % self.img_every_n_epochs == 0: + import matplotlib.pyplot as plt - # tensorboardX only accepts images as numpy arrays. - # we therefore convert plots in numpy array - # see https://github.com/lanpa/tensorboard- - # pytorch/blob/master/examples/matplotlib_demo.py - fig = plt.figure() - plt.colorbar(plt.pcolor(m)) - fig.canvas.draw() + # tensorboardX only accepts images as numpy arrays. + # we therefore convert plots in numpy array + # see https://github.com/lanpa/tensorboard- + # pytorch/blob/master/examples/matplotlib_demo.py + fig = plt.figure() + plt.colorbar(plt.pcolor(m)) + fig.canvas.draw() - np_image = np.fromstring(fig.canvas.tostring_rgb(), dtype="uint8") - np_image = np_image.reshape(fig.canvas.get_width_height()[::-1] + (3,)) + np_image = np.fromstring(fig.canvas.tostring_rgb(), dtype="uint8") + np_image = np_image.reshape(fig.canvas.get_width_height()[::-1] + (3,)) - plt.close(fig) + plt.close(fig) - self.writer.add_image("metrics/%s" % metric.name, np_image, trainer.epoch) + self.writer.add_image("metrics/%s" % metric.name, np_image, trainer.epoch) if self.log_validation_loss: self.writer.add_scalar("train/val_loss", float(val_loss), trainer.step) @@ -552,7 +551,7 @@ def on_train_begin(self, trainer): if len(self.metrics) > 0: log += self._separator - for i, metric in enumerate(self.metrics): + for metric in self.metrics: header = str(metric.name) log += self.str_format.format(len(header), header) log += self._separator @@ -590,7 +589,7 @@ def on_validation_end(self, trainer, val_loss): log += self._separator metric_dic = self.aggregate(trainer) - for i, metric in enumerate(self.metrics): + for metric in self.metrics: m = metric_dic[metric.name] if hasattr(m, "__iter__"): log += self._separator.join([str(j) for j in m]) diff --git a/nff/train/hooks/scheduling.py b/nff/train/hooks/scheduling.py index 01e3df16..0656a76d 100644 --- a/nff/train/hooks/scheduling.py +++ b/nff/train/hooks/scheduling.py @@ -317,7 +317,7 @@ class WarmUpLR(_LRScheduler): def __init__(self, optimizer, n_steps, max_lr, last_epoch=-1, verbose=False): self.n_steps = n_steps self.max_lr = max_lr - super(WarmUpLR, self).__init__(optimizer, last_epoch, verbose) + super().__init__(optimizer, last_epoch, verbose) for param_group in self.optimizer.param_groups: param_group["lr"] = 0 diff --git a/nff/train/loss.py b/nff/train/loss.py index bd472c43..38324250 100644 --- a/nff/train/loss.py +++ b/nff/train/loss.py @@ -55,10 +55,7 @@ def loss_fn(ground_truth, results): loss = 0.0 for key, coef in loss_coef.items(): - if key not in ground_truth.keys(): - ground_key = correspondence_keys[key] - else: - ground_key = key + ground_key = correspondence_keys[key] if key not in ground_truth else key targ = ground_truth[ground_key] pred = results[key].view(targ.shape) diff --git a/nff/train/metrics.py b/nff/train/metrics.py index 9bdec11c..4ce7495b 100644 --- a/nff/train/metrics.py +++ b/nff/train/metrics.py @@ -221,10 +221,7 @@ def non_nan(self): def aggregate(self): """Aggregate metric over all previously added batches.""" - if self.n_entries == 0: - result = float("nan") - else: - result = self.loss / self.n_entries + result = float("nan") if self.n_entries == 0 else self.loss / self.n_entries return result diff --git a/nff/train/trainer.py b/nff/train/trainer.py index 697e0c6d..d59a4411 100644 --- a/nff/train/trainer.py +++ b/nff/train/trainer.py @@ -187,10 +187,7 @@ def get_best_model(self): return model def call_model(self, batch, train): - if (self.torch_parallel and self.parallel) and not train: - model = self._model.module - else: - model = self._model + model = self._model.module if (self.torch_parallel and self.parallel) and not train else self._model return model(batch, **self.model_kwargs) diff --git a/nff/train/uncertainty.py b/nff/train/uncertainty.py index 7f3e70e0..8d6de4eb 100644 --- a/nff/train/uncertainty.py +++ b/nff/train/uncertainty.py @@ -1,11 +1,11 @@ import os import warnings -from typing import List, Tuple, Union +from typing import List, Optional, Tuple, Union import numpy as np import torch -from ..io.gmm import GaussianMixture +from nff.io.gmm import GaussianMixture __all__ = [ "ConformalPrediction", @@ -23,7 +23,7 @@ def __init__( order: str, calibrate: bool, cp_alpha: Union[None, float] = None, - min_uncertainty: float = None, + min_uncertainty: Optional[float] = None, *args, **kwargs, ): @@ -55,7 +55,7 @@ def set_min_uncertainty(self, min_uncertainty: float, force: bool = False) -> No if self.umin is None: self.umin = min_uncertainty elif force: - warnings.warn(f"Uncertainty: min_uncertainty already set to {self.umin}. Overwriting.") + warnings.warn(f"Uncertainty: min_uncertainty already set to {self.umin}. Overwriting.", stacklevel=2) self.umin = min_uncertainty else: raise Exception(f"Uncertainty: min_uncertainty already set to {self.umin}") @@ -103,7 +103,7 @@ def get_system_uncertainty(self, uncertainty: torch.Tensor, num_atoms: List[int] assert len(uncertainty) == len(num_atoms), "Number of systems do not match" - assert all([len(u) == n for u, n in zip(uncertainty, num_atoms)]), "Number of atoms in each system do not match" + assert all(len(u) == n for u, n in zip(uncertainty, num_atoms)), "Number of atoms in each system do not match" if self.order == "system_sum": uncertainty = uncertainty.sum(dim=-1) @@ -275,7 +275,7 @@ def __init__( source: str = "epistemic", calibrate: bool = False, cp_alpha: Union[float, None] = None, - min_uncertainty: float = None, + min_uncertainty: Optional[float] = None, *args, **kwargs, ): @@ -304,7 +304,8 @@ def check_params(self, results: dict, num_atoms=None) -> Tuple[torch.Tensor, tor num_systems = len(num_atoms) total_atoms = torch.sum(num_atoms) if self.order == "atomic" and self.shared_v: - assert v.shape[0] == num_systems and alpha.shape[0] == total_atoms + assert v.shape[0] == num_systems + assert alpha.shape[0] == total_atoms v = torch.split(v, list(num_atoms)) v = torch.stack(v, dim=0) v = v.mean(-1, keepdims=True) @@ -346,7 +347,7 @@ def __init__( variance_key: str = "var", quantity: str = "forces", order: str = "atomic", - min_uncertainty: float = None, + min_uncertainty: Optional[float] = None, *args, **kwargs, ): diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index 28a8cd49..9e231752 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -594,9 +594,9 @@ def one_species_confs( smiles = copy.deepcopy(molecule) with open(log, "w") as output: output.write("The smiles strings that will be run are:\n") - output.write("\n".join([molecule]) + "\n") + output.write(f"{molecule}" + "\n") - if any([element in molecule for element in UFF_ELEMENTS]): + if any(element in molecule for element in UFF_ELEMENTS): output.write("Switching to UFF, since MMFF94 does " "not have boron and/or aluminum\n") forcefield = "uff" diff --git a/nff/utils/cuda.py b/nff/utils/cuda.py index 38289895..d9a392b0 100644 --- a/nff/utils/cuda.py +++ b/nff/utils/cuda.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Dict, List, Union +from typing import Dict, List import numpy as np import nvidia_smi @@ -25,7 +25,7 @@ def batch_to(batch: Dict[str, list | torch.Tensor], device: str) -> Dict[str, Li return gpu_batch -def detach(val: torch.Tensor, to_numpy: bool = False) -> Union[torch.Tensor, np.ndarray]: +def detach(val: torch.Tensor, to_numpy: bool = False) -> torch.Tensor | np.ndarray: """Detach GPU tensor Args: @@ -41,8 +41,8 @@ def detach(val: torch.Tensor, to_numpy: bool = False) -> Union[torch.Tensor, np. def batch_detach( - batch: Dict[str, Union[List, torch.Tensor]], to_numpy: bool = False -) -> Dict[str, Union[List, torch.Tensor]]: + batch: Dict[str, List | torch.Tensor], to_numpy: bool = False +) -> Dict[str, List | torch.Tensor]: """Detach batch of GPU tensors Args: @@ -66,8 +66,8 @@ def batch_detach( def to_cpu( - batch: Dict[str, Union[List, torch.Tensor]], -) -> Dict[str, Union[List, torch.Tensor]]: + batch: Dict[str, List | torch.Tensor], +) -> Dict[str, List | torch.Tensor]: """Send batch to CPU Args: diff --git a/nff/utils/misc.py b/nff/utils/misc.py index 9c840d53..224983be 100644 --- a/nff/utils/misc.py +++ b/nff/utils/misc.py @@ -179,15 +179,12 @@ def prepare_metric(lines, metric): else: for i, item in enumerate(header_items): sub_keys = metric.split("_") - if all([key.lower() in item.lower() for key in sub_keys]): + if all(key.lower() in item.lower() for key in sub_keys): idx = i optim = METRIC_DIC[metric] - if optim == "minimize": - best_score = float("inf") - else: - best_score = -float("inf") + best_score = float("inf") if optim == "minimize" else -float("inf") best_epoch = -1 @@ -266,7 +263,7 @@ def write_csv(path, dic): None """ - keys = sorted(list(dic.keys())) + keys = sorted(dic.keys()) if "smiles" in keys: keys.remove("smiles") keys.insert(0, "smiles") @@ -364,10 +361,7 @@ def get_split_names(train_only, val_only, test_only): msg = f"Requested {string}, which are mutually exclusive" raise Exception(msg) - if len(requested) != 0: - names = requested - else: - names = ["train", "val", "test"] + names = requested if len(requested) != 0 else ["train", "val", "test"] return names @@ -412,10 +406,7 @@ def apply_metric(metric, pred, actual): """ if metric == "auc": pred = preprocess_class(pred) - if max(pred) == 0: - score = 0 - else: - score = roc_auc_score(y_true=actual, y_score=pred) + score = 0 if max(pred) == 0 else roc_auc_score(y_true=actual, y_score=pred) elif metric == "prc-auc": pred = preprocess_class(pred) if max(pred) == 0: @@ -456,7 +447,7 @@ def avg_distances(dset): for nbrs in dset.props["nbr_list"]: for pair in nbrs: all_nbrs.append(tuple(pair.tolist())) - all_nbrs_tuple = list(set(tuple(all_nbrs))) + all_nbrs_tuple = list(set(all_nbrs)) all_nbrs = torch.LongTensor([list(i) for i in all_nbrs_tuple]) diff --git a/nff/utils/script_utils/loaders.py b/nff/utils/script_utils/loaders.py index 3054f845..465c6d94 100644 --- a/nff/utils/script_utils/loaders.py +++ b/nff/utils/script_utils/loaders.py @@ -43,3 +43,4 @@ def get_loaders(args, logging=None): test_loader = DataLoader(test, batch_size=args.batch_size, num_workers=args.workers, collate_fn=collate_dicts) return train_loader, val_loader, test_loader + return None diff --git a/nff/utils/script_utils/parsers.py b/nff/utils/script_utils/parsers.py index 2c6db5aa..bdc0aa5b 100644 --- a/nff/utils/script_utils/parsers.py +++ b/nff/utils/script_utils/parsers.py @@ -53,7 +53,7 @@ def add_subparsers(cmd_parser, defaults={}): "--lr_patience", type=int, help="Epochs without improvement before reducing the learning rate " "(default: %(default)s)", - default=25 if "lr_patience" not in defaults.keys() else defaults["lr_patience"], + default=defaults.get("lr_patience", 25), ) train_parser.add_argument( "--lr_decay", diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index f36c6eef..2027cee8 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -142,10 +142,10 @@ for i in range(100): dics = [atomic_valence, atomic_valence_electrons] - if all([i in dic for dic in dics]): + if all(i in dic for dic in dics): continue - valence_list = [j for j in PERIODICTABLE.GetValenceList(i)] + valence_list = list(PERIODICTABLE.GetValenceList(i)) valence_num = PERIODICTABLE.GetNOuterElecs(i) atomic_valence[i] = valence_list @@ -233,11 +233,7 @@ def get_BO(AC, UA, DU, valences, UA_pairs, use_graph=True): def valences_not_too_large(BO, valences): """ """ number_of_bonds_list = BO.sum(axis=1) - for valence, number_of_bonds in zip(valences, number_of_bonds_list): - if number_of_bonds > valence: - return False - - return True + return all(number_of_bonds <= valence for valence, number_of_bonds in zip(valences, number_of_bonds_list)) def BO_is_OK(BO, AC, charge, DU, atomic_valence_electrons, atoms, valances, allow_charged_fragments=True): @@ -289,10 +285,7 @@ def BO_is_OK(BO, AC, charge, DU, atomic_valence_electrons, atoms, valances, allo check_charge = charge == Q # check_len = len(q_list) <= abs(charge) - if check_sum and check_charge: - return True - - return False + return bool(check_sum and check_charge) def get_atomic_charge(atom, atomic_valence_electrons, BO_valence): @@ -342,10 +335,7 @@ def clean_charges(mol): ps = rxn.RunReactants((fragment,)) fragment = ps[0][0] Chem.SanitizeMol(fragment) - if i == 0: - mol = fragment - else: - mol = Chem.CombineMols(mol, fragment) + mol = fragment if i == 0 else Chem.CombineMols(mol, fragment) return mol From 1bcdc1dfbd7fb6bdc34f19d4145006fa39fbec36 Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 23 Dec 2024 09:34:35 -0500 Subject: [PATCH 34/66] generally allow no type annotation on properties and remove noqa --- nff/io/ase_ax.py | 2 +- nff/io/ase_calcs.py | 6 +++--- nff/io/bias_calculators.py | 4 ++-- nff/io/openmm_calculators.py | 2 +- pyproject.toml | 1 + 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/nff/io/ase_ax.py b/nff/io/ase_ax.py index 8c868df8..ab3a52ae 100644 --- a/nff/io/ase_ax.py +++ b/nff/io/ase_ax.py @@ -170,7 +170,7 @@ def from_atoms(cls, atoms, props=None, needs_angles=False, device=0, **kwargs): class NeuralFF(Calculator): """ASE calculator using a pretrained NeuralFF model""" - implemented_properties = ["energy", "forces"] # noqa + implemented_properties = ["energy", "forces"] def __init__( self, diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 22019ef0..ddfdd6ec 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -49,7 +49,7 @@ def check_directed(model, atoms): class NeuralFF(Calculator): """ASE calculator using a pretrained NeuralFF model""" - implemented_properties = ["energy", "forces", "stress", "embedding"] # noqa + implemented_properties = ["energy", "forces", "stress", "embedding"] def __init__( self, @@ -229,7 +229,7 @@ class EnsembleNFF(Calculator): """Produces an ensemble of NFF calculators to predict the discrepancy between the properties""" - implemented_properties = ["energy", "forces", "stress", "energy_std", "forces_std", "stress_std"] # noqa + implemented_properties = ["energy", "forces", "stress", "energy_std", "forces_std", "stress_std"] def __init__( self, @@ -1100,7 +1100,7 @@ def get_bias(self, positions, step): class NeuralRestraint(Calculator): """ASE calculator to run Neural restraint MD simulations""" - implemented_properties = ["energy", "forces", "stress"] # noqa + implemented_properties = ["energy", "forces", "stress"] def __init__( self, diff --git a/nff/io/bias_calculators.py b/nff/io/bias_calculators.py index 79e3e77e..1c7cc4b9 100644 --- a/nff/io/bias_calculators.py +++ b/nff/io/bias_calculators.py @@ -29,7 +29,7 @@ class BiasBase(NeuralFF): equil_temp: float temperature of the simulation (important for extended system dynamics) """ - implemented_properties = [ # noqa + implemented_properties = [ "energy", "forces", "stress", @@ -964,7 +964,7 @@ class AttractiveBias(NeuralFF): gamma: coupling strength, regulates strength of attraction """ - implemented_properties = [ # noqa + implemented_properties = [ "energy", "forces", "stress", diff --git a/nff/io/openmm_calculators.py b/nff/io/openmm_calculators.py index 5519fa51..6430a4a0 100644 --- a/nff/io/openmm_calculators.py +++ b/nff/io/openmm_calculators.py @@ -30,7 +30,7 @@ class BiasBase(Calculator): equil_temp: float temperature of the simulation (important for extended system dynamics) """ - implemented_properties = [ # noqa + implemented_properties = [ "energy", "forces", "energy_unbiased", diff --git a/pyproject.toml b/pyproject.toml index a3479de0..eac73caf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -148,5 +148,6 @@ ignore = [ "UP031", # Use format specifiers instead of percent format "PD901", # dont name dataframes df "FA100", # from future suggestion + "RUF012", # type annotation for mutable class attributes ] pydocstyle.convention = "google" From 81a6aea4501b4681db0f7ca8655526e62304baf0 Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 23 Dec 2024 10:40:09 -0500 Subject: [PATCH 35/66] more linting --- nff/md/nms.py | 15 +-- nff/md/npt.py | 24 ++--- nff/md/nvt.py | 96 ++----------------- nff/md/nvt_ax.py | 17 +--- nff/md/tully/dynamics.py | 2 +- nff/md/tully_multiplicity/dynamics.py | 4 +- nff/md/tully_multiplicity/io.py | 2 +- nff/md/tully_multiplicity/step.py | 2 + nff/md/utils.py | 32 +++---- nff/md/utils_ax.py | 32 +++---- nff/nn/layers.py | 3 +- nff/nn/models/chgnet.py | 11 +-- nff/nn/models/conformers.py | 30 +++--- nff/nn/models/dispersion_models.py | 16 ++-- nff/nn/models/mace.py | 3 +- .../modules/electron_configurations.py | 1 - .../modules/electronic_embedding.py | 4 +- .../modules/nonlinear_electronic_embedding.py | 4 +- nff/nn/models/spooky_net_source/spookynet.py | 20 +++- .../spooky_net_source/spookynet_calculator.py | 6 +- .../spooky_net_source/spookynet_ensemble.py | 4 +- nff/nn/modules/diabat.py | 4 +- nff/nn/modules/schnet.py | 20 ++-- nff/nn/modules/spooky.py | 8 +- nff/nn/modules/spooky_fast.py | 8 +- nff/reactive_tools/reactive_langevin.py | 3 +- nff/reactive_tools/utils.py | 4 +- nff/tests/conftest.py | 2 +- nff/tests/dynamics_test.py | 17 ++-- nff/tests/test_training.py | 2 - nff/train/builders/model.py | 4 +- nff/utils/confgen.py | 5 +- nff/utils/dispersion.py | 5 +- nff/utils/misc.py | 9 +- nff/utils/xyz2mol.py | 20 ++-- 35 files changed, 160 insertions(+), 279 deletions(-) diff --git a/nff/md/nms.py b/nff/md/nms.py index 0b85827c..5977712d 100644 --- a/nff/md/nms.py +++ b/nff/md/nms.py @@ -69,15 +69,8 @@ def get_key(iroot, num_states): Returns: key (str): energy key """ - - # energy if only one state - if iroot == 0 and num_states == 1: - key = "energy" - - # otherwise energy with state suffix - else: - key = f"energy_{iroot}" - return key + # energy if only one state, other energy with state suffix + return "energy" if iroot == 0 and num_states == 1 else f"energy_{iroot}" def init_calculator(atoms, params): @@ -366,10 +359,10 @@ def get_orca_form(cc_mat, cc_freqs, n_atoms): matrix = np.asarray(new_mat[:]).reshape(n_tot, n_modes) zero_col = np.asarray([[0]] * len(matrix)) - for i in range(n_inactive): + for _ in range(n_inactive): matrix = np.insert(matrix, [0], zero_col, axis=1) freqs = np.asarray(pure_freqs[:]) - for i in range(n_inactive): + for _ in range(n_inactive): freqs = np.insert(freqs, 0, 0) return matrix, freqs * CM_2_AU diff --git a/nff/md/npt.py b/nff/md/npt.py index e0d8c1a8..054d1ba1 100644 --- a/nff/md/npt.py +++ b/nff/md/npt.py @@ -58,12 +58,8 @@ def __init__( self.T = temperature * units.kB - # initial Maxwell-Boltmann temperature for atoms - if T_init is not None: - # convert units - T_init = T_init * units.kB - else: - T_init = 2 * self.T + # initial Maxwell-Boltzmann temperature for atoms + T_init = T_init * units.kB if T_init is not None else 2 * self.T MaxwellBoltzmannDistribution(self.atoms, T_init) Stationary(self.atoms) @@ -134,12 +130,8 @@ def __init__( self.T = temperature * units.kB - # initial Maxwell-Boltmann temperature for atoms - if T_init is not None: - # convert units - T_init = T_init * units.kB - else: - T_init = 2 * self.T + # initial Maxwell-Boltzmann temperature for atoms + T_init = T_init * units.kB if T_init is not None else 2 * self.T MaxwellBoltzmannDistribution(self.atoms, T_init) Stationary(self.atoms) @@ -223,12 +215,8 @@ def __init__( self.nbr_update_period = nbr_update_period - # initial Maxwell-Boltmann temperature for atoms - if maxwell_temp is not None: - # convert units - maxwell_temp = maxwell_temp * units.kB - else: - maxwell_temp = 2 * self.T + # initial Maxwell-Boltzmann temperature for atoms + maxwell_temp = maxwell_temp * units.kB if maxwell_temp is not None else 2 * self.T MaxwellBoltzmannDistribution(self.atoms, maxwell_temp) Stationary(self.atoms) diff --git a/nff/md/nvt.py b/nff/md/nvt.py index eb31d937..a234a760 100644 --- a/nff/md/nvt.py +++ b/nff/md/nvt.py @@ -246,82 +246,6 @@ def step(self): self.p_zeta += 0.5 * dpzeta_dt * self.dt -# Does anyone use this? -# class NoseHooverChainsBiased(NoseHooverChain): -# def __init__(self, -# atoms, -# timestep, -# temperature, -# ttime, -# num_chains, -# maxwell_temp=None, -# trajectory=None, -# logfile=None, -# loginterval=1, -# max_steps=None, -# nbr_update_period=20, -# append_trajectory=True, -# **kwargs): - -# NoseHooverChain.__init__(self, -# atoms=atoms, -# timestep=timestep, -# temperature=temperature, -# ttime=ttime, -# num_chains=num_chains, -# maxwell_temp=maxwell_temp, -# trajectory=trajectory, -# logfile=logfile, -# loginterval=loginterval, -# max_steps=max_steps, -# nbr_update_period=nbr_update_period, -# append_trajectory=append_trajectory, -# **kwargs) - - -# def update_bias(self): -# # update the bias function if necessary, e.g., add aconfiguration to MetaD -# self.atoms.calc.update(self) - -# def irun(self): -# # run the algorithm max_steps reached -# while self.nsteps < self.max_steps: - -# # compute the next step -# self.step() -# self.nsteps += 1 -# self.update_bias() - -# # log the step -# self.log() -# self.call_observers() - - -# def run(self, steps=None): -# if steps is None: -# steps = self.num_steps - -# epochs = math.ceil(steps / self.nbr_update_period) -# # number of steps in between nbr updates -# steps_per_epoch = int(steps / epochs) -# # maximum number of steps starts at `steps_per_epoch` -# # and increments after every nbr list update - -# self.atoms.update_nbr_list() - -# # compute initial structure and log the first step -# if self.nsteps == 0: -# self.update_bias() -# self.atoms.get_forces() -# self.log() -# self.call_observers() - -# for _ in tqdm(range(epochs)): -# self.max_steps += steps_per_epoch -# self.irun() -# self.atoms.update_nbr_list() - - class Langevin(MolecularDynamics): def __init__( self, @@ -344,12 +268,12 @@ def __init__( random_seed = np.random.randint(2147483647) if type(random_seed) is int: np.random.seed(random_seed) - print("THE RANDOM NUMBER SEED WAS: %i" % (random_seed)) + print(f"THE RANDOM NUMBER SEED WAS: {random_seed}") else: try: np.random.set_state(random_seed) - except BaseException: - raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") + except BaseException as e: + raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") from e if os.path.isfile(str(trajectory)): os.remove(trajectory) @@ -499,13 +423,13 @@ def __init__( if random_seed is None: random_seed = np.random.randint(2147483647) if type(random_seed) is int: - np.random.seed(radnom_seed) - print("THE RANDOM NUMBER SEED WAS: %i" % (random_seed)) + np.random.seed(random_seed) + print(f"THE RANDOM NUMBER SEED WAS: {random_seed}") else: try: np.random.set_state(random_seed) - except BaseException: - raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") + except BaseException as e: + raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") from e MolecularDynamics.__init__( self, @@ -684,12 +608,12 @@ def __init__( random_seed = np.random.randint(2147483647) if type(random_seed) is int: np.random.seed(random_seed) - print("THE RANDOM NUMBER SEED WAS: %i" % (random_seed)) + print(f"THE RANDOM NUMBER SEED WAS: {random_seed}") else: try: np.random.set_state(random_seed) - except BaseException: - raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") + except BaseException as e: + raise ValueError("\tThe provided seed was neither an int nor a state of numpy random") from e if os.path.isfile(str(trajectory)): os.remove(trajectory) diff --git a/nff/md/nvt_ax.py b/nff/md/nvt_ax.py index c1cd0a80..96c9466d 100644 --- a/nff/md/nvt_ax.py +++ b/nff/md/nvt_ax.py @@ -56,13 +56,8 @@ def __init__( self.nbr_update_period = nbr_update_period self.max_steps = 0 - # initial Maxwell-Boltmann temperature for atoms - if maxwell_temp is not None: - # convert units - maxwell_temp = maxwell_temp * units.kB - else: - maxwell_temp = 2 * self.T - + # initial Maxwell-Boltzmann temperature for atoms + maxwell_temp = maxwell_temp * units.kB if maxwell_temp is not None else 2 * self.T MaxwellBoltzmannDistribution(self.atoms, maxwell_temp) Stationary(self.atoms) ZeroRotation(self.atoms) @@ -159,12 +154,8 @@ def __init__( self.n_steps = 0 self.max_steps = 0 - # initial Maxwell-Boltmann temperature for atoms - if maxwell_temp is not None: - # convert units - maxwell_temp = maxwell_temp * units.kB - else: - maxwell_temp = 2 * self.T + # initial Maxwell-Boltzmann temperature for atoms + maxwell_temp = maxwell_temp * units.kB if maxwell_temp is not None else 2 * self.T MaxwellBoltzmannDistribution(self.atoms, maxwell_temp) def get_zeta_accel(self): diff --git a/nff/md/tully/dynamics.py b/nff/md/tully/dynamics.py index 8e37bb9a..1e69186e 100644 --- a/nff/md/tully/dynamics.py +++ b/nff/md/tully/dynamics.py @@ -505,7 +505,7 @@ def from_pickle(cls, file, max_time=None): nxyz = state_dict["nxyz"] if single: nxyz = [nxyz] - for i, nxyz in enumerate(nxyz): + for i, nxyz in enumerate(nxyz): # noqa if nxyz is None: trjs[i].append(None) continue diff --git a/nff/md/tully_multiplicity/dynamics.py b/nff/md/tully_multiplicity/dynamics.py index 6d8da3f4..9f3046db 100644 --- a/nff/md/tully_multiplicity/dynamics.py +++ b/nff/md/tully_multiplicity/dynamics.py @@ -16,7 +16,7 @@ import random import shutil from functools import partial -from typing import * +from typing import List import numpy as np from ase import Atoms @@ -621,7 +621,7 @@ def from_pickle(cls, file, max_time=None): nxyz = state_dict["nxyz"] if single: nxyz = [nxyz] - for i, nxyz in enumerate(nxyz): + for i, nxyz in enumerate(nxyz): # noqa if nxyz is None: trjs[i].append(None) continue diff --git a/nff/md/tully_multiplicity/io.py b/nff/md/tully_multiplicity/io.py index 082c18ed..ec423cae 100644 --- a/nff/md/tully_multiplicity/io.py +++ b/nff/md/tully_multiplicity/io.py @@ -5,7 +5,7 @@ import json import os -from typing import * +from typing import List, Union import numpy as np import torch diff --git a/nff/md/tully_multiplicity/step.py b/nff/md/tully_multiplicity/step.py index 3eec9ba4..45469f75 100644 --- a/nff/md/tully_multiplicity/step.py +++ b/nff/md/tully_multiplicity/step.py @@ -7,6 +7,8 @@ import numpy as np import torch +from nff.md.tully.step import solve_quadratic + def verlet_step_1(forces, surfs, vel, xyz, mass, dt): # `forces` has dimension (num_samples x num_states diff --git a/nff/md/utils.py b/nff/md/utils.py index 586c1cc6..a3ff34da 100644 --- a/nff/md/utils.py +++ b/nff/md/utils.py @@ -249,22 +249,22 @@ def write_traj(filename, frames): traj2write = trajconv(n_mol, n_atom, box_len, path) write_traj(path, traj2write) """ - file = open(filename, "w") - atom_no = frames.shape[1] - for i, frame in enumerate(frames): - file.write(str(atom_no) + "\n") - file.write("Atoms. Timestep: " + str(i) + "\n") - for atom in frame: - if atom.shape[0] == 4: - try: - file.write(str(int(atom[0])) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") - except BaseException: - file.write(str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") - elif atom.shape[0] == 3: - file.write("1" + " " + str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + "\n") - else: - raise ValueError("wrong format") - file.close() + with open(filename, "w") as file: + atom_no = frames.shape[1] + for i, frame in enumerate(frames): + file.write(str(atom_no) + "\n") + file.write("Atoms. Timestep: " + str(i) + "\n") + for atom in frame: + if atom.shape[0] == 4: + try: + file.write(str(int(atom[0])) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + + "\n") + except BaseException: + file.write(str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") + elif atom.shape[0] == 3: + file.write("1" + " " + str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + "\n") + else: + raise ValueError("wrong format") def csv_read(out_file): diff --git a/nff/md/utils_ax.py b/nff/md/utils_ax.py index a59ab95d..19e58b63 100644 --- a/nff/md/utils_ax.py +++ b/nff/md/utils_ax.py @@ -45,22 +45,22 @@ def write_traj(filename, frames): traj2write = trajconv(n_mol, n_atom, box_len, path) write_traj(path, traj2write) """ - file = open(filename, "w") - atom_no = frames.shape[1] - for i, frame in enumerate(frames): - file.write(str(atom_no) + "\n") - file.write("Atoms. Timestep: " + str(i) + "\n") - for atom in frame: - if atom.shape[0] == 4: - try: - file.write(str(int(atom[0])) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") - except BaseException: - file.write(str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") - elif atom.shape[0] == 3: - file.write("1" + " " + str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + "\n") - else: - raise ValueError("wrong format") - file.close() + with open(filename, "w") as file: + atom_no = frames.shape[1] + for i, frame in enumerate(frames): + file.write(str(atom_no) + "\n") + file.write("Atoms. Timestep: " + str(i) + "\n") + for atom in frame: + if atom.shape[0] == 4: + try: + file.write(str(int(atom[0])) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + + "\n") + except BaseException: + file.write(str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + " " + str(atom[3]) + "\n") + elif atom.shape[0] == 3: + file.write("1" + " " + str(atom[0]) + " " + str(atom[1]) + " " + str(atom[2]) + "\n") + else: + raise ValueError("wrong format") def mol_dot(vec1, vec2): diff --git a/nff/nn/layers.py b/nff/nn/layers.py index e22540d9..fab23e3e 100644 --- a/nff/nn/layers.py +++ b/nff/nn/layers.py @@ -357,7 +357,8 @@ def __init__(self, l_spher, n_spher, cutoff, envelope_p): for i in range(l_spher): if i == 0: first_sph = sym.lambdify([theta], self.sph_harm_formulas[i][0], modules)(0) - self.sph_funcs.append(lambda tensor: torch.zeros_like(tensor) + first_sph) + self.sph_funcs.append(partial(lambda tensor, fsph: torch.zeros_like(tensor) + fsph, + fsph=first_sph)) else: self.sph_funcs.append(sym.lambdify([theta], self.sph_harm_formulas[i][0], modules)) for j in range(n_spher): diff --git a/nff/nn/models/chgnet.py b/nff/nn/models/chgnet.py index 893fe2f6..7e2f784e 100644 --- a/nff/nn/models/chgnet.py +++ b/nff/nn/models/chgnet.py @@ -188,11 +188,11 @@ def load(cls, model_name: str = "0.3.0", **kwargs) -> CHGNetNFF: "0.2.0": "../../..models/foundation_models/chgnet/0.2.0/chgnet_0.2.0_e30f77s348m32.pth.tar", }[model_name] - except KeyError: + except KeyError as e: if Path(checkpoint_path).is_file(): checkpoint_path = model_name elif checkpoint_path is None: - raise ValueError(f"Unknown {model_name=}") + raise ValueError(f"Unknown model name {model_name}") from e return cls.from_file( os.path.join(module_dir, checkpoint_path), @@ -211,7 +211,7 @@ def to(self, device: str, **kwargs) -> CHGNetNFF: Returns: CHGNetNFF: Model moved to the specified device. """ - self = super().to(device, **kwargs) + super().to(device, **kwargs) self.device = device if hasattr(self, "composition_model"): self.composition_model = self.composition_model.to(device, **kwargs) @@ -348,10 +348,7 @@ def from_graphs( bond_bases_bg = torch.cat(bond_bases_bg, dim=0) angle_bases = torch.cat(angle_bases, dim=0) if len(angle_bases) != 0 else torch.tensor([]) batched_atom_graph = torch.cat(batched_atom_graph, dim=0) - if batched_bond_graph != []: - batched_bond_graph = torch.cat(batched_bond_graph, dim=0) - else: # when bond graph is empty or disabled - batched_bond_graph = torch.tensor([]) + batched_bond_graph = torch.cat(batched_bond_graph, dim=0) if batched_bond_graph != [] else torch.tensor([]) atom_owners = torch.cat(atom_owners, dim=0).type(torch.int32).to(atomic_numbers.device) directed2undirected = torch.cat(directed2undirected, dim=0) volumes = torch.tensor(volumes, dtype=datatype, device=atomic_numbers.device) diff --git a/nff/nn/models/conformers.py b/nff/nn/models/conformers.py index 2db8e08e..51bdd3fa 100644 --- a/nff/nn/models/conformers.py +++ b/nff/nn/models/conformers.py @@ -32,21 +32,21 @@ def __init__(self, modelparams): # all the atomic fingerprints get added together, then go through the network created # by `mol_fp_layers` to turn into a molecular fingerprint - mol_fp_layers = [{'name': 'linear', 'param' : { 'in_features': n_atom_basis, - 'out_features': int((n_atom_basis + mol_basis)/2)}}, - {'name': 'shifted_softplus', 'param': {}}, - {'name': 'linear', 'param' : { 'in_features': int((n_atom_basis + mol_basis)/2), - 'out_features': mol_basis}}] - - - readoutdict = { - "covid": [{'name': 'linear', 'param' : { 'in_features': mol_basis, - 'out_features': int(mol_basis / 2)}}, - {'name': 'shifted_softplus', 'param': {}}, - {'name': 'linear', 'param' : { 'in_features': int(mol_basis / 2), - 'out_features': 1}}, - {'name': 'sigmoid', 'param': {}}], - } + mol_fp_layers = [{'name': 'linear', + 'param' : { 'in_features': n_atom_basis, + 'out_features': int((n_atom_basis + mol_basis)/2)}}, + {'name': 'shifted_softplus', 'param': {}}, + {'name': 'linear', 'param' : { 'in_features': int((n_atom_basis + mol_basis)/2), + 'out_features': mol_basis}} + ] + + readout_dict = {"covid": [{'name': 'linear', 'param' : { 'in_features': mol_basis, + 'out_features': int(mol_basis / 2)}}, + {'name': 'shifted_softplus', 'param': {}}, + {'name': 'linear', 'param' : { 'in_features': int(mol_basis / 2), + 'out_features': 1}}, + {'name': 'sigmoid', 'param': {}}], + } # dictionary to tell you what to do with the Boltzmann factors # ex. 1: diff --git a/nff/nn/models/dispersion_models.py b/nff/nn/models/dispersion_models.py index 5567bdbd..53d436b2 100644 --- a/nff/nn/models/dispersion_models.py +++ b/nff/nn/models/dispersion_models.py @@ -80,7 +80,7 @@ def run(self, batch, xyz=None, requires_stress=False, grimme_disp=False, inferen fallback_to_grimme = getattr(self, "fallback_to_grimme", True) if grimme_disp: - pass + e_disp, r_ij_T, nbrs_T = None else: e_disp, r_ij_T, nbrs_T = self.get_dispersion(batch=batch, xyz=xyz) @@ -104,20 +104,20 @@ def run(self, batch, xyz=None, requires_stress=False, grimme_disp=False, inferen all_results[grad_key] = all_results[grad_key] + disp_grad if requires_stress and not grimme_disp: + if e_disp is None or r_ij_T is None or nbrs_T is None: + raise RuntimeError("Should not be reached, something went wrong") # add gradient for stress disp_rij_grad = compute_grad(inputs=r_ij_T, output=e_disp) if batch["num_atoms"].shape[0] == 1: disp_stress_volume = torch.matmul(disp_rij_grad.t(), r_ij_T) else: - allstress = [] - for j in range(batch["nxyz"].shape[0]): - allstress.append( - torch.matmul( - disp_rij_grad[torch.where(nbrs_T[:, 0] == j)].t(), r_ij_T[torch.where(nbrs_T[:, 0] == j)] - ) + allstress = torch.stack([ + torch.matmul( + disp_rij_grad[torch.where(nbrs_T[:, 0] == j)].t(), r_ij_T[torch.where(nbrs_T[:, 0] == j)] ) - allstress = torch.stack(allstress) + for j in range(batch["nxyz"].shape[0]) + ]) N = batch["num_atoms"].detach().cpu().tolist() split_val = torch.split(allstress, N) disp_stress_volume = torch.stack([i.sum(0) for i in split_val]) diff --git a/nff/nn/models/mace.py b/nff/nn/models/mace.py index 7796282a..6b1b7aef 100644 --- a/nff/nn/models/mace.py +++ b/nff/nn/models/mace.py @@ -273,7 +273,8 @@ def load_foundations( default_dtype = model_dtype if model_dtype != default_dtype: print( - f"Default dtype {default_dtype} does not match model dtype {model_dtype}, converting models to {default_dtype}." + f"Default dtype {default_dtype} does not match model dtype {model_dtype}, " + f"converting models to {default_dtype}." ) if default_dtype == "float64": mace_model.double() diff --git a/nff/nn/models/spooky_net_source/modules/electron_configurations.py b/nff/nn/models/spooky_net_source/modules/electron_configurations.py index 7cc32689..e1360d80 100644 --- a/nff/nn/models/spooky_net_source/modules/electron_configurations.py +++ b/nff/nn/models/spooky_net_source/modules/electron_configurations.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 import numpy as np # fmt: off diff --git a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py index 3173066a..92178b1f 100644 --- a/nff/nn/models/spooky_net_source/modules/electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/electronic_embedding.py @@ -83,7 +83,7 @@ def forward( if batch_seg is None: # assume a single batch batch_seg = torch.zeros(x.size(0), dtype=torch.int64, device=x.device) q = self.linear_q(x) # queries - if self.is_charge: + if self.is_charge: # noqa e = F.relu(torch.stack([E, -E], dim=-1)) else: e = torch.abs(E).unsqueeze(-1) # +/- spin is the same => abs @@ -93,7 +93,7 @@ def forward( dot = torch.sum(k * q, dim=-1) / k.shape[-1] ** 0.5 # scaled dot product a = nn.functional.softplus(dot) # unnormalized attention weights anorm = a.new_zeros(num_batch).index_add_(0, batch_seg, a) - if a.device.type == "cpu": # indexing is faster on CPUs + if a.device.type == "cpu": # indexing is faster on CPUs # noqa anorm = anorm[batch_seg] else: # gathering is faster on GPUs anorm = torch.gather(anorm, 0, batch_seg) diff --git a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py index 9ef3f2cf..7dc8efcd 100644 --- a/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py +++ b/nff/nn/models/spooky_net_source/modules/nonlinear_electronic_embedding.py @@ -81,7 +81,7 @@ def forward( mask = nn.functional.one_hot(batch_seg).to(dtype=x.dtype, device=x.device).transpose(-1, -2) tmp = dot.view(1, -1).expand(num_batch, -1) tmp, _ = torch.max(mask * tmp, dim=-1) - if tmp.device.type == "cpu": # indexing is faster on CPUs + if tmp.device.type == "cpu": # indexing is faster on CPUs # noqa maximum = tmp[batch_seg] else: # gathering is faster on GPUs maximum = torch.gather(tmp, 0, batch_seg) @@ -92,7 +92,7 @@ def forward( a = torch.exp((dot - maximum) / d**0.5) anorm = a.new_zeros(num_batch).index_add_(0, batch_seg, a) - if a.device.type == "cpu": # indexing is faster on CPUs + if a.device.type == "cpu": # indexing is faster on CPUs # noqa anorm = anorm[batch_seg] else: # gathering is faster on GPUs anorm = torch.gather(anorm, 0, batch_seg) diff --git a/nff/nn/models/spooky_net_source/spookynet.py b/nff/nn/models/spooky_net_source/spookynet.py index d11837ca..f029fb13 100644 --- a/nff/nn/models/spooky_net_source/spookynet.py +++ b/nff/nn/models/spooky_net_source/spookynet.py @@ -5,7 +5,19 @@ import torch.nn as nn from .functional import cutoff_function -from .modules import * +from .modules import ( + D4DispersionEnergy, + ElectronicEmbedding, + ElectrostaticEnergy, + ExponentialBernsteinPolynomials, + ExponentialGaussianFunctions, + GaussianFunctions, + InteractionModule, + NonlinearElectronicEmbedding, + NuclearEmbedding, + SincFunctions, + ZBLRepulsionEnergy +) # backwards compatibility with old versions of pytorch try: @@ -448,7 +460,7 @@ def prefix_postfix(string, pattern, prefix="resblock", sep=".", presep="_"): return sep.join(parts) new_state_dict = {} - for old_key in old_state_dict: + for old_key, old_value in old_state_dict.items(): if old_key == "idx" or old_key == "mul": continue @@ -481,7 +493,7 @@ def prefix_postfix(string, pattern, prefix="resblock", sep=".", presep="_"): new_key = new_key.replace("activation_pre", "activation1") if "activation_post" in new_key: new_key = new_key.replace("activation_post", "activation2") - new_state_dict[new_key] = old_state_dict[old_key] + new_state_dict[new_key] = old_value return new_state_dict def get_number_of_parameters(self) -> int: @@ -1004,7 +1016,7 @@ def energy_and_forces( ) if idx_i.numel() > 0: # autograd will fail if there are no distances grad = torch.autograd.grad([torch.sum(energy)], [R], create_graph=create_graph)[0] - if grad is not None: # necessary for torch.jit compatibility + if grad is not None: # necessary for torch.jit compatibility # noqa forces = -grad else: forces = torch.zeros_like(R) diff --git a/nff/nn/models/spooky_net_source/spookynet_calculator.py b/nff/nn/models/spooky_net_source/spookynet_calculator.py index aa911a61..195306c7 100644 --- a/nff/nn/models/spooky_net_source/spookynet_calculator.py +++ b/nff/nn/models/spooky_net_source/spookynet_calculator.py @@ -147,9 +147,9 @@ def calculate(self, atoms=None, properties=["energy"], system_changes=all_change # send args to GPU if self.use_gpu: - for key in args: - if isinstance(args[key], torch.Tensor): - args[key] = args[key].cuda() + for key, value in args.items(): + if isinstance(value, torch.Tensor): + args[key] = value.cuda() if self.calc_hessian: ( diff --git a/nff/nn/models/spooky_net_source/spookynet_ensemble.py b/nff/nn/models/spooky_net_source/spookynet_ensemble.py index 3c31862a..7693c30f 100644 --- a/nff/nn/models/spooky_net_source/spookynet_ensemble.py +++ b/nff/nn/models/spooky_net_source/spookynet_ensemble.py @@ -266,13 +266,13 @@ def energy_and_forces( retain_graph=True, create_graph=create_graph, )[0] - if grad_mean is not None: # necessary for torch.jit compatibility + if grad_mean is not None: # necessary for torch.jit compatibility # noqa forces_mean = -grad_mean else: forces_mean = torch.zeros_like(R) if calculate_forces_std: grad_std = torch.autograd.grad([torch.sum(energy[1])], [R], create_graph=create_graph)[0] - if grad_std is not None: # necessary for torch.jit compatibility + if grad_std is not None: # necessary for torch.jit compatibility # noqa forces_std = torch.abs(grad_std) else: forces_std = torch.zeros_like(R) diff --git a/nff/nn/modules/diabat.py b/nff/nn/modules/diabat.py index 7bc3d234..9ab85f5c 100644 --- a/nff/nn/modules/diabat.py +++ b/nff/nn/modules/diabat.py @@ -741,9 +741,7 @@ def forward(self, results): final_results[key] = pool_val - for key, val in results.items(): - if key not in combined_results: - final_results[key] = val + final_results.update(**{key: val for key, val in results.items() if key not in combined_results}) return final_results diff --git a/nff/nn/modules/schnet.py b/nff/nn/modules/schnet.py index 3cb274bd..71d5877c 100644 --- a/nff/nn/modules/schnet.py +++ b/nff/nn/modules/schnet.py @@ -74,10 +74,10 @@ def add_stress(batch, all_results, nbrs, r_ij): if batch["num_atoms"].shape[0] == 1: all_results["stress_volume"] = torch.matmul(Z.t(), r_ij) else: - allstress = [] - for j in range(batch["nxyz"].shape[0]): - allstress.append(torch.matmul(Z[torch.where(nbrs[:, 0] == j)].t(), r_ij[torch.where(nbrs[:, 0] == j)])) - allstress = torch.stack(allstress) + allstress = torch.stack([ + torch.matmul(Z[torch.where(nbrs[:, 0] == j)].t(), r_ij[torch.where(nbrs[:, 0] == j)]) + for j in range(batch["nxyz"].shape[0]) + ]) N = batch["num_atoms"].detach().cpu().tolist() split_val = torch.split(allstress, N) all_results["stress_volume"] = torch.stack([i.sum(0) for i in split_val]) @@ -1030,12 +1030,10 @@ def sum_and_grad(batch, xyz, r_ij, nbrs, atomwise_output, grad_keys, out_keys=No if key == "stress": output = results["energy"] grad_ = compute_grad(output=output, inputs=r_ij) - allstress = [] - for i in range(batch["nxyz"].shape[0]): - allstress.append( - torch.matmul(grad_[torch.where(nbrs[:, 0] == i)].t(), r_ij[torch.where(nbrs[:, 0] == i)]) - ) - allstress = torch.stack(allstress) + allstress = torch.stack([ + torch.matmul(grad_[torch.where(nbrs[:, 0] == i)].t(), r_ij[torch.where(nbrs[:, 0] == i)]) + for i in range(batch["nxyz"].shape[0]) + ]) split_val = torch.split(allstress, N) grad_ = torch.stack([i.sum(0) for i in split_val]) if "cell" in batch: @@ -1397,7 +1395,7 @@ def testSchNetEdgeUpdate(self): model = SchNetEdgeUpdate(n_atom_basis=n_atom_basis) e_out = model(r, e_in, a) - assert e_in.shape == e_out.shape, "The edge feature dimensions should be same for the SchNet " "Edge Update case" + assert e_in.shape == e_out.shape, "The edge feature dimensions should be same for the SchNet Edge Update case" def testGAT(self): n_atom_basis = 10 diff --git a/nff/nn/modules/spooky.py b/nff/nn/modules/spooky.py index 661fc46d..abf847e6 100644 --- a/nff/nn/modules/spooky.py +++ b/nff/nn/modules/spooky.py @@ -101,14 +101,8 @@ def scatter_mol(atomwise, num_atoms): because it takes a very long time to make the indices that map atom index to molecule. """ - - out = [] atom_split = torch.split(atomwise, num_atoms.tolist()) - for split in atom_split: - out.append(split.sum(0)) - out = torch.stack(out) - - return out + return torch.stack([split.sum(0) for split in atom_split]) def scatter_pairwise(pairwise, num_atoms, nbrs): diff --git a/nff/nn/modules/spooky_fast.py b/nff/nn/modules/spooky_fast.py index a1b625b6..1f16ede4 100644 --- a/nff/nn/modules/spooky_fast.py +++ b/nff/nn/modules/spooky_fast.py @@ -104,14 +104,8 @@ def scatter_mol(atomwise, num_atoms): because it takes a very long time to make the indices that map atom index to molecule. """ - - out = [] atom_split = torch.split(atomwise, num_atoms.tolist()) - for split in atom_split: - out.append(split.sum(0)) - out = torch.stack(out) - - return out + return torch.stack([split.sum(0) for split in atom_split]) def scatter_pairwise(pairwise, num_atoms, nbrs): diff --git a/nff/reactive_tools/reactive_langevin.py b/nff/reactive_tools/reactive_langevin.py index 2872a9d3..9b75d3f0 100644 --- a/nff/reactive_tools/reactive_langevin.py +++ b/nff/reactive_tools/reactive_langevin.py @@ -1,7 +1,8 @@ from ase.io import Trajectory -from ase.md.langevin import * from ase.units import Ang, fs, kB, second +import numpy as np + from nff.md.utils import NeuralMDLogger, write_traj diff --git a/nff/reactive_tools/utils.py b/nff/reactive_tools/utils.py index 90b3a775..669dfead 100644 --- a/nff/reactive_tools/utils.py +++ b/nff/reactive_tools/utils.py @@ -35,8 +35,8 @@ def xyz_to_ase_atoms(xyz_file): sym = [] pos = [] - f = open(xyz_file, "r") - lines = f.readlines() + with open(xyz_file, "r") as f: + lines = f.readlines() for i, line in enumerate(lines): if i > 1: diff --git a/nff/tests/conftest.py b/nff/tests/conftest.py index 3cff2d58..5a76ba16 100644 --- a/nff/tests/conftest.py +++ b/nff/tests/conftest.py @@ -3,7 +3,7 @@ import pytest import torch -torch.set_num_threads(int(os.getenv("OMP_NUM_THREADS", 1))) +torch.set_num_threads(int(os.getenv("OMP_NUM_THREADS", "1"))) def pytest_addoption(parser): diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index c424a0c2..a576f4e1 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -87,12 +87,13 @@ class ZhuNakamuraDynamics(ZhuNakamuraLogger): Properties: - positions: returns self._positions. Updating positions updates self._positions, self.positions_list, and positions of - self.atoms. - velocities: returns self._velocities. Updating positions updates self._velocities, self.velocities_list and velocities - of self.atoms. + positions: returns self._positions. Updating positions updates self._positions, self.positions_list, + and positions of self.atoms. + velocities: returns self._velocities. Updating positions updates self._velocities, self.velocities_list + and velocities of self.atoms. forces: returns self._forces. Updating forces updates self._forces, self.forces_list and forces of self.atoms. - energies: returns self._energies. Updating energies updates self._energies, self.energy_list and energies of self.atoms. + energies: returns self._energies. Updating energies updates self._energies, self.energy_list + and energies of self.atoms. surf: returns self._surf. Updating surf updates self._surf and self.surf_list. in_trj: returns self._in_trj. Updating in_trj updates self._in_trj and self. time: returns self._time. Updating time updates self.time_list. @@ -698,9 +699,9 @@ def run(self): class BatchedZhuNakamura: """ - A class for running several Zhu Nakamura trajectories at once. This is done by taking a half step for each trajectory, - combining all the xyz's into a dataset and batching it for the network, and then de-batching to put the forces and energies - back in the trajectories. + A class for running several Zhu Nakamura trajectories at once. This is done by taking a half step + for each trajectory, combining all the xyz's into a dataset and batching it for the network, and then de-batching + to put the forces and energies back in the trajectories. Attributes: num_trj (int): number of concurrent trajectories diff --git a/nff/tests/test_training.py b/nff/tests/test_training.py index 431764d5..9027eaae 100644 --- a/nff/tests/test_training.py +++ b/nff/tests/test_training.py @@ -106,8 +106,6 @@ def test_training(device, tmpdir): # `test_loss` is the loss, calculated with the same function used during the training part results, targets, val_loss = evaluate(T.get_best_model(), test_loader, loss_fn, device=device) - to_tensor(results["energy"], stack=True).shape - # Finally, we could plot our results to observe how well is our model performing # here we are just checking the MAE to ensure the pipeline works diff --git a/nff/train/builders/model.py b/nff/train/builders/model.py index db2ed57b..f6b8b70f 100644 --- a/nff/train/builders/model.py +++ b/nff/train/builders/model.py @@ -498,9 +498,9 @@ def check_parameters(params_type, params): if key in params_type and not isinstance(val, params_type[key]): raise ParameterError(f"{key} is not {params_type[key]}") - for model in PARAMS_TYPE: + for model, value in PARAMS_TYPE.items(): if key == f"{model.lower()}_params": - check_parameters(PARAMS_TYPE[model], val) + check_parameters(value, val) def get_model(params: dict, model_type: str = "SchNet", **kwargs): diff --git a/nff/utils/confgen.py b/nff/utils/confgen.py index 9e231752..47d0e650 100644 --- a/nff/utils/confgen.py +++ b/nff/utils/confgen.py @@ -326,11 +326,8 @@ def _extract_atomic_type(confomer): Extracts the elements associated with a conformer, in order that prune_threshy are read in """ - elements = [] mol = confomer.GetOwningMol() - for atom in mol.GetAtoms(): - elements.append(atom.GetSymbol()) - return elements + return [atom.GetSymbol() for atom in mol.GeAtoms()] def _atomic_pos_from_conformer(conformer): diff --git a/nff/utils/dispersion.py b/nff/utils/dispersion.py index 8ce442f0..75ad4b1b 100644 --- a/nff/utils/dispersion.py +++ b/nff/utils/dispersion.py @@ -46,7 +46,7 @@ def get_periodic_nbrs(batch, xyz, r_cut=95, nbrs_info=None, mol_idx=None): """ Get the neighbor list connecting every atom to its neighbor within a given geometry, but not to itself or to atoms in other geometries. - Since this is for perodic systems it also requires getting all possible + Since this is for periodic systems it also requires getting all possible lattice translation vectors. """ @@ -60,7 +60,6 @@ def get_periodic_nbrs(batch, xyz, r_cut=95, nbrs_info=None, mol_idx=None): nxyz_list = torch.split(batch["nxyz"], num_atoms) xyzs = torch.split(xyz, num_atoms) - nbrs = [] nbrs_T = [] nbrs = [] z = [] @@ -145,7 +144,7 @@ def get_periodic_nbrs(batch, xyz, r_cut=95, nbrs_info=None, mol_idx=None): _xyzs = [] num_atoms = [] - for _xyz, nxyz in zip(xyzs, nxyz_list): + for _xyz, nxyz in zip(xyzs, nxyz_list): # noqa _xyz = _xyz / const.BOHR_RADIUS # convert to Bohr _xyzs.append(_xyz) num_atoms.append(len(_xyz)) diff --git a/nff/utils/misc.py b/nff/utils/misc.py index 224983be..c7d3623b 100644 --- a/nff/utils/misc.py +++ b/nff/utils/misc.py @@ -56,20 +56,17 @@ ] -def tqdm_enum(iter): +def tqdm_enum(iterable): """ Wrap tqdm around `enumerate`. Args: - iter (iterable): an iterable (e.g. list) + iterable (iterable): an iterable (e.g. list) Returns i (int): current index y: current value """ - - i = 0 - for y in tqdm(iter): + for i, y in enumerate(tqdm(iterable)): yield i, y - i += 1 def log(prefix, msg): diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 2027cee8..295f93ab 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -32,7 +32,7 @@ from rdkit.Chem import AllChem, GetPeriodicTable from rdkit.Chem.rdchem import EditableMol -global __ATOM_LIST__ + __ATOM_LIST__ = [ "h", "he", @@ -131,11 +131,7 @@ ] -global atomic_valence -global atomic_valence_electrons - atomic_valence = defaultdict(list) - atomic_valence_electrons = {} PERIODICTABLE = GetPeriodicTable() @@ -160,8 +156,10 @@ class TimeoutError(Exception): pass +ERROR_MESSAGE = os.strerror(errno.ETIME) + -def timeout(seconds, error_message=os.strerror(errno.ETIME)): +def timeout(seconds, error_message=ERROR_MESSAGE): def decorator(func): def _handle_timeout(signum, frame): raise TimeoutError(error_message) @@ -438,7 +436,7 @@ def get_bonds(UA, AC): for k, i in enumerate(UA): for j in UA[k + 1 :]: if AC[i, j] == 1: - bonds.append(tuple(sorted([i, j]))) + bonds.append(tuple(sorted([i, j]))) # noqa return bonds @@ -489,10 +487,8 @@ def AC2BO(AC, atoms, charge, allow_charged_fragments=True, use_graph=True): global atomic_valence_electrons # make a list of valences, e.g. for CO: [[4],[2,1]] - valences_list_of_lists = [] AC_valence = list(AC.sum(axis=1)) - for atomicNum in atoms: - valences_list_of_lists.append(atomic_valence[atomicNum]) + valences_list_of_lists = [atomic_valence[atomicNum] for atomicNum in atoms] # convert [[4],[2,1]] to [[4,2],[4,1]] valences_list = itertools.product(*valences_list_of_lists) @@ -753,14 +749,14 @@ def check_mol(mol, coordinates): ed_mol = EditableMol(Chem.MolFromSmiles("")) - for i, idx in enumerate(new_idx): + for idx in new_idx: atom = mol.GetAtoms()[idx] ed_mol.AddAtom(atom) all_old_bond_idx = [] all_old_bond_types = [] - for i, atom in enumerate(mol.GetAtoms()): + for atom in mol.GetAtoms(): bonds = atom.GetBonds() old_bond_idx = [[i.GetBeginAtomIdx(), i.GetEndAtomIdx()] for i in bonds] bond_types = [i.GetBondType() for i in bonds] From 15525795d545e1ea96d9c2dccc3145203323f385 Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 23 Dec 2024 10:40:27 -0500 Subject: [PATCH 36/66] allow characters in comments / docs --- pyproject.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index eac73caf..50fe6d8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -149,5 +149,7 @@ ignore = [ "PD901", # dont name dataframes df "FA100", # from future suggestion "RUF012", # type annotation for mutable class attributes + "RUF002", # ambiguous characters in docstrings + "RUF003", # ambiguous characters in comments ] pydocstyle.convention = "google" From f541ab6d0c702de6279bed432b8d4d5e702b5ad6 Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 23 Dec 2024 10:41:31 -0500 Subject: [PATCH 37/66] formatting --- nff/nn/models/spooky_net_source/spookynet.py | 2 +- nff/reactive_tools/reactive_langevin.py | 3 +-- nff/tests/test_training.py | 2 +- nff/utils/xyz2mol.py | 1 - 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/nff/nn/models/spooky_net_source/spookynet.py b/nff/nn/models/spooky_net_source/spookynet.py index f029fb13..18330189 100644 --- a/nff/nn/models/spooky_net_source/spookynet.py +++ b/nff/nn/models/spooky_net_source/spookynet.py @@ -16,7 +16,7 @@ NonlinearElectronicEmbedding, NuclearEmbedding, SincFunctions, - ZBLRepulsionEnergy + ZBLRepulsionEnergy, ) # backwards compatibility with old versions of pytorch diff --git a/nff/reactive_tools/reactive_langevin.py b/nff/reactive_tools/reactive_langevin.py index 9b75d3f0..6afb72c6 100644 --- a/nff/reactive_tools/reactive_langevin.py +++ b/nff/reactive_tools/reactive_langevin.py @@ -1,8 +1,7 @@ +import numpy as np from ase.io import Trajectory from ase.units import Ang, fs, kB, second -import numpy as np - from nff.md.utils import NeuralMDLogger, write_traj diff --git a/nff/tests/test_training.py b/nff/tests/test_training.py index 9027eaae..04eb0848 100644 --- a/nff/tests/test_training.py +++ b/nff/tests/test_training.py @@ -5,7 +5,7 @@ from torch.optim import Adam from torch.utils.data import DataLoader -from nff.data import Dataset, collate_dicts, split_train_validation_test, to_tensor +from nff.data import Dataset, collate_dicts, split_train_validation_test from nff.train import Trainer, evaluate, get_model, hooks, loss, metrics diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 295f93ab..654635d2 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -32,7 +32,6 @@ from rdkit.Chem import AllChem, GetPeriodicTable from rdkit.Chem.rdchem import EditableMol - __ATOM_LIST__ = [ "h", "he", From fb3350feb514bf310e8c107b7bfb2102fbc00f01 Mon Sep 17 00:00:00 2001 From: steinmig Date: Mon, 23 Dec 2024 10:46:13 -0500 Subject: [PATCH 38/66] more linting --- nff/train/parallel.py | 2 +- nff/utils/misc.py | 5 ++--- nff/utils/xyz2mol.py | 14 +++----------- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/nff/train/parallel.py b/nff/train/parallel.py index 8310ad23..e678ac7a 100644 --- a/nff/train/parallel.py +++ b/nff/train/parallel.py @@ -47,7 +47,7 @@ def add_grads(optimizer, loss_size, weight_path, rank, world_size, batch_num, ep try: with open(path, "rb") as f: loaded_grads[path] = pickle.load(f) - except (EOFError, FileNotFoundError, pickle.UnpicklingError): + except (EOFError, FileNotFoundError, pickle.UnpicklingError): # noqa continue # total size is the sum of all sizes from each process diff --git a/nff/utils/misc.py b/nff/utils/misc.py index c7d3623b..75887b50 100644 --- a/nff/utils/misc.py +++ b/nff/utils/misc.py @@ -65,8 +65,7 @@ def tqdm_enum(iterable): i (int): current index y: current value """ - for i, y in enumerate(tqdm(iterable)): - yield i, y + yield from enumerate(tqdm(iterable)) def log(prefix, msg): @@ -443,7 +442,7 @@ def avg_distances(dset): all_nbrs = [] for nbrs in dset.props["nbr_list"]: for pair in nbrs: - all_nbrs.append(tuple(pair.tolist())) + all_nbrs.append(tuple(pair.tolist())) # noqa all_nbrs_tuple = list(set(all_nbrs)) all_nbrs = torch.LongTensor([list(i) for i in all_nbrs_tuple]) diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 654635d2..4ae3b929 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -182,19 +182,14 @@ def str_atom(atom): """ convert integer atom to string atom """ - global __ATOM_LIST__ - atom = __ATOM_LIST__[atom - 1] - return atom + return __ATOM_LIST__[atom - 1] def int_atom(atom): """ convert str atom to integer atom """ - global __ATOM_LIST__ - print(atom) - atom = atom.lower() - return __ATOM_LIST__.index(atom) + 1 + return __ATOM_LIST__.index(atom.lower()) + 1 def get_UA(maxValence_list, valence_list): @@ -472,7 +467,7 @@ def get_UA_pairs(UA, AC, use_graph=True): def AC2BO(AC, atoms, charge, allow_charged_fragments=True, use_graph=True): """ - implemenation of algorithm shown in Figure 2 + implementation of the algorithm shown in Figure 2 UA: unsaturated atoms @@ -482,9 +477,6 @@ def AC2BO(AC, atoms, charge, allow_charged_fragments=True, use_graph=True): """ - global atomic_valence - global atomic_valence_electrons - # make a list of valences, e.g. for CO: [[4],[2,1]] AC_valence = list(AC.sum(axis=1)) valences_list_of_lists = [atomic_valence[atomicNum] for atomicNum in atoms] From f7e55322ff1881d950da1d42d5f492b8e3bf3d31 Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 29 Jan 2025 15:12:36 -0500 Subject: [PATCH 39/66] typo --- nff/md/nvt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nff/md/nvt.py b/nff/md/nvt.py index a234a760..96779a17 100644 --- a/nff/md/nvt.py +++ b/nff/md/nvt.py @@ -65,7 +65,7 @@ def __init__( self.nbr_update_period = nbr_update_period - # initial Maxwell-Boltmann temperature for atoms + # initial Maxwell-Boltzmann temperature for atoms if maxwell_temp is None: maxwell_temp = temperature From 4c98f4bbd63044f6b80c113ab2051a27a2112db7 Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 29 Jan 2025 15:22:10 -0500 Subject: [PATCH 40/66] reduce comments in tests --- nff/tests/test_ase.py | 1 - nff/tests/test_excited_states_training.py | 54 +++----------------- nff/tests/test_training.py | 62 +++-------------------- 3 files changed, 14 insertions(+), 103 deletions(-) diff --git a/nff/tests/test_ase.py b/nff/tests/test_ase.py index e5b7971a..6ebe735b 100644 --- a/nff/tests/test_ase.py +++ b/nff/tests/test_ase.py @@ -487,7 +487,6 @@ def test_nbrlist(self): ] ) assert np.allclose(nbrlist, expected_nbrlist) - print(offsets) if __name__ == "__main__": diff --git a/nff/tests/test_excited_states_training.py b/nff/tests/test_excited_states_training.py index e576f72d..8754539d 100644 --- a/nff/tests/test_excited_states_training.py +++ b/nff/tests/test_excited_states_training.py @@ -15,15 +15,7 @@ @pytest.mark.skip("still taking too long, disable for now") def test_excited_training(device, tmpdir): - # Loss function - # Let's make a loss function for the model. We'll use three diabatic states, - # so that the model outputs the six quantities `d_{ij}` for `i >= j`, and `0 <= i, j <= 2`. - # That means the model outputs `d_00`, `d_01`, etc. The model will then produce three adiabatic energies, - # `energy_{i}`. Last, the model will also run a backwards pass to produce the gradients `energy_{i}_grad`. - # The loss function can penalize errors in the adiabatic energies and forces, adiabatic gaps, - # and non-adiabatic couplings (NACV). It can also penalize errors in the `d_{i}{i}`, - # provided that a set of reference geometries with known `d_{i}{i}` is in the dataset. - + # define loss loss_dict = { "mse": [ {"coef": 0.01, "params": {"key": "d_00"}}, @@ -37,37 +29,10 @@ def test_excited_training(device, tmpdir): ], "nacv": [{"coef": 1, "params": {"abs": False, "key": "force_nacv_10", "max": False}}], } - - # We see that each key is a different type of loss (e.g. `mse` for mean-squared-error), - # and each value is a list of sub-dictionaries. Each sub-dictionary contains information about the quantities - # being penalized, through `params`, and their relative weights, through `coef`. - # For example, `d_11` is through with an MSE loss with weight 0.01. Some notes: - # - # - The NACV gets its own special loss type, called `nacv`. - # This is because it must correct the phase of the predicted NACV to minimize the prediction error. - # This accounts for random sign changes in the ground truth NACV. - # - # - Energy gaps in the dataset are denoted `energy_{i}_energy_{j}_delta`, where i > j. - # - # - Force NACVS in the dataset are denoted `force_nacv_{i}_energy_{j}_delta`, where i > j. - # - # Now we can supply the loss dictionary to `loss.build_multi_loss`, and we have our loss funnction: - loss_fn = loss.build_multi_loss(loss_dict) - - # ## Making the model - # - # Now let's make the model. To do this we can use `get_model`, together with the model parameters and model type. - # - # Our model type is called `PainnDiabat`, because it's PaiNN with diabatic states. We'll also have to supply the keys below, which include the regular hyperparameters (activation function, feature dimension, etc.), as well as the keys of the diabatic energies. We'll also specify `add_nacv=True`, which means the NACV will get computed when the model is called, and hence can be used in the loss function: - # - - # Only provide the 6 unique diabatic keys - # It doesn't matter whether you use upper- or lower-triangular - + # define model diabat_keys = [["d_00", "d_01", "d_02"], ["d_01", "d_11", "d_12"], ["d_02", "d_12", "d_22"]] - modelparams = { "feat_dim": 128, "activation": "swish", @@ -79,13 +44,11 @@ def test_excited_training(device, tmpdir): "diabat_keys": diabat_keys, "add_nacv": True, } - model = get_model(modelparams, model_type="PainnDiabat") - # ## Optimizer, metrics, and hooks + # define training trainable_params = filter(lambda p: p.requires_grad, model.parameters()) optimizer = Adam(trainable_params, lr=1e-4) - train_metrics = [ metrics.MeanAbsoluteError("energy_0"), metrics.MeanAbsoluteError("energy_1"), @@ -94,6 +57,7 @@ def test_excited_training(device, tmpdir): metrics.MeanAbsoluteError("energy_1_energy_0_delta"), ] + # output outdir = tmpdir train_hooks = [ hooks.CSVHook( @@ -112,19 +76,16 @@ def test_excited_training(device, tmpdir): ), ] - - # ## Dataset + # data set dset = Dataset.from_file(os.path.join(pathlib.Path(__file__).parent.absolute(), "data/azo_diabat.pth.tar")) train, val, test = split_train_validation_test(dset, val_size=0.1, test_size=0.1) - batch_size = 20 train_loader = DataLoader(train, batch_size=batch_size, collate_fn=collate_dicts, sampler=RandomSampler(train)) val_loader = DataLoader(val, batch_size=batch_size, collate_fn=collate_dicts) test_loader = DataLoader(test, batch_size=batch_size, collate_fn=collate_dicts) - # ## Training - + # train T = Trainer( model_path=outdir, model=model, @@ -138,8 +99,7 @@ def test_excited_training(device, tmpdir): ) T.train(device=device, n_epochs=10) - # ## Evaluating - + # evaluation def correct_nacv(results, targets, key): num_atoms = targets["num_atoms"] if not isinstance(num_atoms, list): diff --git a/nff/tests/test_training.py b/nff/tests/test_training.py index 40140e5f..8e7772d5 100644 --- a/nff/tests/test_training.py +++ b/nff/tests/test_training.py @@ -10,17 +10,15 @@ def test_training(device, tmpdir): + # data set OUTDIR = tmpdir dataset = Dataset.from_file(os.path.join(pathlib.Path(__file__).parent.absolute(), "data", "dataset.pth.tar")) train, val, test = split_train_validation_test(dataset, val_size=0.2, test_size=0.2) - train_loader = DataLoader(train, batch_size=50, collate_fn=collate_dicts) val_loader = DataLoader(val, batch_size=50, collate_fn=collate_dicts) test_loader = DataLoader(test, batch_size=50, collate_fn=collate_dicts) - # `nff` is based on SchNet. It parameterizes interatomic interactions in molecules and materials through a - # series of convolution layers with continuous filters. Here, we are going to create a simple model using the - # hyperparameters given on `params`: + # define model params = { "n_atom_basis": 256, "n_filters": 256, @@ -30,41 +28,16 @@ def test_training(device, tmpdir): "trainable_gauss": True, "dropout_rate": 0.2, } - model = get_model(params) - # ## Creating a trainer - - # To train our model with the data provided, we have to create a loss function. - # The easiest way to do that is through the `build_mse_loss` builder. - # Its argument `rho` is a parameter that will multiply the mean square error (MSE) of the force components - # before summing it with the MSE of the energy. + # define training loss_fn = loss.build_mse_loss(loss_coef={"energy": 0.01, "energy_grad": 1}) - - # We should also select an optimizer for our recently created model: trainable_params = filter(lambda p: p.requires_grad, model.parameters()) optimizer = Adam(trainable_params, lr=3e-4) - - # ### Metrics and hooks - # Metrics and hooks allow the customization of the training process. - # Instead of tweaking directly the code or having to resort to countless flags, - # we can create submodules (or add-ons) to monitor the progress of the training or customize it. - # If we want to monitor the progress of our training, say by looking at the mean absolute error (MAE) of - # energies and forces, we can simply create metrics to observe them: - train_metrics = [metrics.MeanAbsoluteError("energy"), metrics.MeanAbsoluteError("energy_grad")] - # Furthermore, if we want to customize how our training procedure is done, we can use hooks which can interrupt - # or change the train automatically. - # - # In our case, we are adding hooks to: - # * Stop the training procedure after 100 epochs; - # * Log the training on a machine-readable CSV file under the directory `./sandbox`; - # * Print the progress on the screen with custom formatting; and - # * Set up a scheduler for the learning rate. - # the max epochs are massively reduced to be suitable for a CI pipeline - + # output train_hooks = [ hooks.MaxEpochHook(7), hooks.CSVHook( @@ -77,13 +50,7 @@ def test_training(device, tmpdir): ), ] - # ### Trainer wrapper - # A `Trainer` in the `nff` package is a wrapper to train a model. It automatically creates checkpoints, - # as well as trains and validates a given model. - # It also allows further training by loading checkpoints from existing paths, - # making the training procedure more flexible. - # Its functionality can be extended by the hooks we created above. - # To create a trainer, we have to execute the following command: + # train T = Trainer( model_path=OUTDIR, model=model, @@ -94,26 +61,11 @@ def test_training(device, tmpdir): checkpoint_interval=1, hooks=train_hooks, ) - - # Now we can finally train the model using the method `train` from the `Trainer`: - # the number of epochs is massively reduced to be suitable for a CI pipeline T.train(device=device, n_epochs=7) - # ## Evaluating the model on the test set - # Now we have a brand new model trained and validated. - # We can use the best model from this training to evaluate its performance on the test set. - # `results` contains the predictions of properties for the whole test dataset. - # `targets` contains the ground truth for such data. - # `test_loss` is the loss, calculated with the same function used during the training part + # evaluation results, targets, val_loss = evaluate(T.get_best_model(), test_loader, loss_fn, device=device) - - to_tensor(results["energy"], stack=True).shape - - # Finally, we could plot our results to observe how well is our model performing - # here we are just checking the MAE to ensure the pipeline works - - keys = "energy_grad", "energy" - for key in keys: + for key in ["energy_grad", "energy"]: pred = torch.stack(results[key], dim=0).view(-1).detach().cpu().numpy() targ = torch.stack(targets[key], dim=0).view(-1).detach().cpu().numpy() mae = abs(pred - targ).mean() From 2a082086d7f9144da8f7c4554153ed6feae1474d Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 29 Jan 2025 15:34:12 -0500 Subject: [PATCH 41/66] limit to torch 2.5 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2e3c0e6c..57361727 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ dependencies = [ "rdkit", "scikit-learn", "scipy", - "torch>=2.2.0", + "torch (>=2.2.0,<2.6.0)" "tqdm", "mace-torch>=0.3.4", "chgnet>=0.3.5", From 41c6c6556fc7db637a15cf462bc41bcdacffd88a Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 29 Jan 2025 15:39:48 -0500 Subject: [PATCH 42/66] correct range syntax --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 57361727..01fd4ec8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ dependencies = [ "rdkit", "scikit-learn", "scipy", - "torch (>=2.2.0,<2.6.0)" + "torch >= 2.2.0, < 2.6.0", "tqdm", "mace-torch>=0.3.4", "chgnet>=0.3.5", From 81f31c4c36dd2435915aa0746be4a8447e001d6c Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 29 Jan 2025 15:44:00 -0500 Subject: [PATCH 43/66] overlooked merge --- nff/tests/test_excited_states_training.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/nff/tests/test_excited_states_training.py b/nff/tests/test_excited_states_training.py index 755e1f5b..27de967b 100644 --- a/nff/tests/test_excited_states_training.py +++ b/nff/tests/test_excited_states_training.py @@ -6,15 +6,10 @@ from torch.utils.data import DataLoader from torch.utils.data.sampler import RandomSampler -<<<<<<< HEAD -from nff.data import Dataset, collate_dicts, split_train_validation_test -from nff.train import Trainer, evaluate, get_model, hooks, loss, metrics -======= import pytest -from nff.data import Dataset, split_train_validation_test, collate_dicts -from nff.train import Trainer, get_model, loss, hooks, metrics, evaluate ->>>>>>> unittests +from nff.data import Dataset, collate_dicts, split_train_validation_test +from nff.train import Trainer, evaluate, get_model, hooks, loss, metrics @pytest.mark.skip("still taking too long, disable for now") From 84bcc1fe796c10ac80f717e91a0f0eb0fa5d0e7a Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 29 Jan 2025 15:45:17 -0500 Subject: [PATCH 44/66] sort --- nff/tests/test_excited_states_training.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nff/tests/test_excited_states_training.py b/nff/tests/test_excited_states_training.py index 27de967b..481a5425 100644 --- a/nff/tests/test_excited_states_training.py +++ b/nff/tests/test_excited_states_training.py @@ -1,13 +1,12 @@ import os import pathlib +import pytest import torch from torch.optim import Adam from torch.utils.data import DataLoader from torch.utils.data.sampler import RandomSampler -import pytest - from nff.data import Dataset, collate_dicts, split_train_validation_test from nff.train import Trainer, evaluate, get_model, hooks, loss, metrics From abe4f5d5d69f28479abd8fdae45ecffbf1ee7be8 Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 29 Jan 2025 15:45:27 -0500 Subject: [PATCH 45/66] remove self assignment --- nff/md/colvars.py | 1 - 1 file changed, 1 deletion(-) diff --git a/nff/md/colvars.py b/nff/md/colvars.py index d060bd13..ecd27c93 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -627,7 +627,6 @@ def collate_graphs(batch): AtomicNum_batch = torch.cat(AtomicNum_batch) Edge_batch = torch.cat(Edge_batch, dim=1) - Natom_batch = Natom_batch # Adjacency_matrix_batch=torch.block_diag(*Adjacency_matrix_batch) Adjacency_matrix_batch = torch.cat(Adjacency_matrix_batch, dim=0).view(-1, 1) From ab2940ba0a100a408d0663c7d7ec695433dd245d Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 29 Jan 2025 16:27:15 -0500 Subject: [PATCH 46/66] flake8 fixes --- nff/analysis/attribution.py | 4 ++-- nff/analysis/attribution_deprecate.py | 23 ++++++++++++----------- nff/io/bias_calculators.py | 14 +++++++------- nff/train/builders/trainer.py | 3 ++- nff/utils/script_utils/parsers.py | 5 +++-- nff/utils/script_utils/setup.py | 3 ++- nff/utils/xyz2mol.py | 1 + 7 files changed, 29 insertions(+), 24 deletions(-) diff --git a/nff/analysis/attribution.py b/nff/analysis/attribution.py index 162c328a..43b0a271 100644 --- a/nff/analysis/attribution.py +++ b/nff/analysis/attribution.py @@ -341,8 +341,8 @@ def activelearning( xyz = reconstruct_atoms(atoms1, [np.arange(0, len(atoms1))], centre=index) atoms1.positions = xyz is_repeated = False - for Atoms in atom_list: - if atoms1.__eq__(Atoms): + for at in atom_list: + if atoms1 == at: is_repeated = True break if not is_repeated: diff --git a/nff/analysis/attribution_deprecate.py b/nff/analysis/attribution_deprecate.py index f98c6aff..8cd9a9f6 100644 --- a/nff/analysis/attribution_deprecate.py +++ b/nff/analysis/attribution_deprecate.py @@ -30,7 +30,8 @@ def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond" give extra cutoff = 6 e.g input output: - list of array of atom indices in molecules. e.g: if there is a H2O molecule, you will get a list with the atom indices + list of array of atom indices in molecules. + e.g: if there is a H2O molecule, you will get a list with the atom indices """ types = list(set(atom.numbers)) @@ -70,10 +71,10 @@ def get_molecules(atom: AtomsBatch, bond_length: dict = None, mode: str = "bond" elif (clusters[oxy_neighbors] == 0).all() and clusters[i] == 0: clusters[oxy_neighbors] = mm + 1 clusters[i] = mm + 1 - elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] == 0: + elif (clusters[oxy_neighbors] == 0).all() is False and clusters[i] == 0: clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) - elif (clusters[oxy_neighbors] == 0).all() == False and clusters[i] != 0: + elif (clusters[oxy_neighbors] == 0).all() is False and clusters[i] != 0: tmp = clusters[oxy_neighbors][clusters[oxy_neighbors] != 0][ clusters[oxy_neighbors][clusters[oxy_neighbors] != 0] != min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) @@ -99,10 +100,10 @@ def reconstruct_atoms(atomsobject: AtomsBatch, mol_idx: list[np.array], centre: atomsobject: Atomsbatch object from NFF mol_idx: list of array of atom indices in molecules or atoms you want to keep together when changing to non-periodic system - centre: by default the atoms in a molecule or set of close atoms are shifted so as to get them close to the centre which - is by default the first atom index in the array. For reconstructing molecules this is fine. However, for attribution, - we may have to shift a whole molecule to come closer to the atoms with high attribution. In that case, we manually assign - the atom index. + centre: by default the atoms in a molecule or set of close atoms are shifted so as to + get them close to the centre which is by default the first atom index in the array. + For reconstructing molecules this is fine. However, for attribution, we may have to shift a whole molecule + to come closer to the atoms with high attribution. In that case, we manually assign the atom index. """ sys_xyz = torch.Tensor(atomsobject.get_positions(wrap=True)) @@ -207,7 +208,7 @@ def calc_attribution_file( grads = [] grad_stds = [] with tqdm( - range(skip, len(traj), step), disable=True if progress_bar == False else False + range(skip, len(traj), step), disable=True if not progress_bar else False ) as pbar: # , postfix={"fbest":"?",}) as pbar: # for i in range(skip,len(traj),step): for i in pbar: @@ -285,7 +286,7 @@ def activelearning( ): atom_list = [] with tqdm( - range(skip, len(traj), step), disable=True if progress_bar == False else False + range(skip, len(traj), step), disable=True if not progress_bar else False ) as pbar: # , postfix={"fbest":"?",}) as pbar: # for i in range(skip,len(traj),step): for i in pbar: @@ -344,8 +345,8 @@ def activelearning( xyz = reconstruct_atoms(atoms1, [np.arange(0, len(atoms1))], centre=index) atoms1.positions = xyz is_repeated = False - for Atoms in atom_list: - if atoms1.__eq__(Atoms): + for at in atom_list: + if atoms1 == at: is_repeated = True break if not is_repeated: diff --git a/nff/io/bias_calculators.py b/nff/io/bias_calculators.py index 1c7cc4b9..daa36b9c 100644 --- a/nff/io/bias_calculators.py +++ b/nff/io/bias_calculators.py @@ -537,16 +537,16 @@ def _up_extvel(self): class aMDeABF(eABF): """Accelerated extended-system Adaptive Biasing Force Calculator - class with neural force field + class with neural force field - Accelerated Molecular Dynamics + Accelerated Molecular Dynamics - see: - aMD: Hamelberg et. al., J. Chem. Phys. 120, 11919 (2004); https://doi.org/10.1063/1.1755656 - GaMD: Miao et. al., J. Chem. Theory Comput. (2015); https://doi.org/10.1021/acs.jctc.5b00436 - SaMD: Zhao et. al., J. Phys. Chem. Lett. 14, 4, 1103 - 1112 (2023); https://doi.org/10.1021/acs.jpclett.2c03688 + see: + aMD: Hamelberg et. al., J. Chem. Phys. 120, 11919 (2004); https://doi.org/10.1063/1.1755656 + GaMD: Miao et. al., J. Chem. Theory Comput. (2015); https://doi.org/10.1021/acs.jctc.5b00436 + SaMD: Zhao et. al., J. Phys. Chem. Lett. 14, 4, 1103 - 1112 (2023); https://doi.org/10.1021/acs.jpclett.2c03688 - Apply global boost potential to potential energy, that is independent of Collective Variables. + Apply global boost potential to potential energy, that is independent of Collective Variables. Args: model: the neural force field model diff --git a/nff/train/builders/trainer.py b/nff/train/builders/trainer.py index f9c9fc50..dc437e76 100644 --- a/nff/train/builders/trainer.py +++ b/nff/train/builders/trainer.py @@ -1,6 +1,7 @@ """Helper function to create a trainer for a given model. -Adapted from https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/training.py +Adapted from: +https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/training.py """ import json diff --git a/nff/utils/script_utils/parsers.py b/nff/utils/script_utils/parsers.py index bdc0aa5b..ed6aa9a7 100644 --- a/nff/utils/script_utils/parsers.py +++ b/nff/utils/script_utils/parsers.py @@ -1,5 +1,6 @@ """Argument parsing from the command line. -From https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/script_parsing.py +From: +https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/script_parsing.py """ import argparse @@ -120,7 +121,7 @@ def add_subparsers(cmd_parser, defaults={}): # model-specific parsers model_parser = argparse.ArgumentParser(add_help=False) - ####### SchNet ####### + # SchNet schnet_parser = argparse.ArgumentParser(add_help=False, parents=[model_parser]) schnet_parser.add_argument( "--n_atom_basis", diff --git a/nff/utils/script_utils/setup.py b/nff/utils/script_utils/setup.py index bda1dd75..0c6bf871 100644 --- a/nff/utils/script_utils/setup.py +++ b/nff/utils/script_utils/setup.py @@ -1,6 +1,7 @@ """Helper function to setup the run from the command line. -Adapted from https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/setup.py +Adapted from: +https://github.com/atomistic-machine-learning/schnetpack/blob/dev/src/schnetpack/utils/script_utils/setup.py """ import logging diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 4ae3b929..50e0de66 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -155,6 +155,7 @@ class TimeoutError(Exception): pass + ERROR_MESSAGE = os.strerror(errno.ETIME) From 0dfde00a0bf04ce938a8c30fa8b6aa7d6c72b0de Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 3 Feb 2025 18:10:54 -0500 Subject: [PATCH 47/66] DOC & STY: update CV and NVE files - ruff format - add docstrings and typing to all functions and classes where missing - update code style to conform with linter --- nff/md/colvars.py | 1189 +++++++++++++++++++++++---------------------- nff/md/nve.py | 21 +- 2 files changed, 624 insertions(+), 586 deletions(-) diff --git a/nff/md/colvars.py b/nff/md/colvars.py index c48fb8e3..ff175b34 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -1,128 +1,128 @@ -from typing import Union, Tuple -import itertools as itertools -import os +"""This file contains a class that helps define collective variables +for running biased MD simulations with NFF. +""" + +from __future__ import annotations + +import itertools +from itertools import repeat +from typing import TYPE_CHECKING + import numpy as np import torch +from rdkit import Chem +from torch import nn +from torch.nn import ModuleDict -from ase import Atoms -from nff.io.ase import AtomsBatch -from nff.utils.scatter import compute_grad -from nff.train import load_model, evaluate +from nff.train import load_model from nff.utils.cuda import batch_to +from nff.utils.scatter import compute_grad + +if TYPE_CHECKING: + from ase import Atoms + + from nff.io.ase import AtomsBatch class ColVar(torch.nn.Module): """collective variable class - - computes cv and its Cartesian gradient + + computes cv and its Cartesian gradient """ - - implemented_cvs = ['distance', 'angle', 'dihedral', - 'coordination_number', 'coordination', - 'minimal_distance', - 'projecting_centroidvec', - 'projecting_veconplane', - 'projecting_veconplanenormal', - 'projection_channelnormal', - 'Sp', 'Sd', - 'adjecencey_matrix', - 'energy_gap' - ] - + + implemented_cvs = [ # noqa: RUF012 + "distance", + "angle", + "dihedral", + "coordination_number", + "coordination", + "minimal_distance", + "projecting_centroidvec", + "projecting_veconplane", + "projecting_veconplanenormal", + "projection_channelnormal", + "Sp", + "Sd", + "adjecencey_matrix", + "energy_gap", + ] + def __init__(self, info_dict: dict): - """initialization of many class variables to avoid recurrent assignment + """Initialization of many class variables to avoid recurrent assignment with every forward call + Args: info_dict (dict): dictionary that contains all the definitions of the CV, the common key is name, which defines the CV function all other keys are specific to each CV """ - super(ColVar, self).__init__() - self.info_dict=info_dict - - if 'name' not in info_dict.keys(): - raise TypeError("CV definition is missing the key \"name\"!") - - if self.info_dict['name'] not in self.implemented_cvs: + super().__init__() + self.info_dict = info_dict + + if "name" not in info_dict: + raise TypeError('CV definition is missing the key "name"!') + + if self.info_dict["name"] not in self.implemented_cvs: raise NotImplementedError(f"The CV {self.info_dict['name']} is not implemented!") - - if self.info_dict['name'] == 'Sp': - self.Oacid = torch.tensor(self.info_dict['x']) - self.Owater = torch.tensor(self.info_dict['y']) - self.H = torch.tensor(self.info_dict['z']) - self.Box = torch.tensor(self.info_dict.get('box',None)) - self.O = torch.cat((Oacid,Owater)) - self.do = self.info_dict['dcv1'] - self.d = self.info_dict['dcv2'] - self.ro = self.info_dict['acidhyd'] - self.r1 = self.info_dict['waterhyd'] - - elif self.info_dict['name'] == 'Sd': - self.Oacid = torch.tensor(self.info_dict['x']) - self.Owater = torch.tensor(self.info_dict['y']) - self.H = torch.tensor(self.info_dict['z']) - self.Box = torch.tensor(self.info_dict.get('box',None)) - self.O = torch.cat((Oacid,Owater)) - self.do = self.info_dict['dcv1'] - self.d = self.info_dict['dcv2'] - self.ro = self.info_dict['acidhyd'] - self.r1 = self.info_dict['waterhyd'] - - elif self.info_dict['name'] == 'adjecencey_matrix': - self.model = self.info_dict['model'] - self.device = self.info_dict['device'] - self.bond_length = self.info_dict['bond_length'] - self.cell = self.info_dict.get('box',None) - self.atom_numbers = torch.tensor(self.info_dict['atom_numbers']) - self.target = self.info_dict['target'] - self.model = self.model.to(self.device) + + if self.info_dict["name"] in ["Sp", "Sd"]: + self.Oacid = torch.tensor(self.info_dict["x"]) + self.Owater = torch.tensor(self.info_dict["y"]) + self.H = torch.tensor(self.info_dict["z"]) + self.Box = torch.tensor(self.info_dict.get("box", None)) + self.O = torch.cat((self.Oacid, self.Owater)) + self.do = self.info_dict["dcv1"] + self.d = self.info_dict["dcv2"] + self.ro = self.info_dict["acidhyd"] + self.r1 = self.info_dict["waterhyd"] + + elif self.info_dict["name"] == "adjecencey_matrix": + self.model = self.info_dict["model"] + self.device = self.info_dict["device"] + self.bond_length = self.info_dict["bond_length"] + self.cell = self.info_dict.get("box", None) + self.atom_numbers = torch.tensor(self.info_dict["atom_numbers"]) + self.target = self.info_dict["target"] + self.model = self.model.to(self.device) self.model.eval() - - elif self.info_dict['name'] == 'projecting_centroidvec': - self.vector_inds = self.info_dict['vector'] - self.mol_inds = torch.LongTensor(self.info_dict['indices']) - self.reference_inds = self.info_dict['reference'] - - elif self.info_dict['name'] == 'projecting_veconplane': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) - self.ring_inds = torch.LongTensor(self.info_dict['ring_inds']) - - elif self.info_dict['name'] == 'projecting_veconplanenormal': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) - self.ring_inds = torch.LongTensor(self.info_dict['ring_inds']) - - elif self.info_dict['name'] == 'projection_channelnormal': - self.mol_inds = torch.LongTensor(self.info_dict['mol_inds']) - self.g1_inds = torch.LongTensor(self.info_dict['g1_inds']) - self.g2_inds = torch.LongTensor(self.info_dict['g2_inds']) - - elif self.info_dict['name'] == 'energy_gap': - self.device = self.info_dict['device'] - path = self.info_dict['path'] - model_type = self.info_dict['model_type'] - self.model = load_model(path, - model_type=model_type, - device=self.device) - self.model = self.model.to(self.device) + + elif self.info_dict["name"] == "projecting_centroidvec": + self.vector_inds = self.info_dict["vector"] + self.mol_inds = torch.LongTensor(self.info_dict["indices"]) + self.reference_inds = self.info_dict["reference"] + + elif self.info_dict["name"] in ["projecting_veconplane", "projecting_veconplanenormal"]: + self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) + self.ring_inds = torch.LongTensor(self.info_dict["ring_inds"]) + + elif self.info_dict["name"] == "projection_channelnormal": + self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) + self.g1_inds = torch.LongTensor(self.info_dict["g1_inds"]) + self.g2_inds = torch.LongTensor(self.info_dict["g2_inds"]) + + elif self.info_dict["name"] == "energy_gap": + self.device = self.info_dict["device"] + path = self.info_dict["path"] + model_type = self.info_dict["model_type"] + self.model = load_model(path, model_type=model_type, device=self.device) + self.model = self.model.to(self.device) self.model.eval() - - - - def _get_com(self, indices: Union[int, list]) -> torch.tensor: - """get center of mass (com) of group of atoms + def _get_com(self, indices: int | list[int]) -> torch.Tensor: + """Get center of mass (com) of group of atoms + Args: indices (Union[int, list]): atom index or list of atom indices Returns: com (torch.tensor): Center of Mass """ masses = torch.from_numpy(self.atoms.get_masses()) - + if hasattr(indices, "__len__"): # compute center of mass for group of atoms center = torch.matmul(self.xyz[indices].T, masses[indices]) - m_tot = masses[indices].sum() - com = center / m_tot + m_tot = masses[indices].sum() + com = center / m_tot else: # only one atom @@ -130,20 +130,20 @@ def _get_com(self, indices: Union[int, list]) -> torch.tensor: com = self.xyz[atom] return com - - def distance(self, - index_list: list[Union[int, list]]) -> torch.tensor: - """distance between two mass centers in range(0, inf) + + def distance(self, index_list: list[int | list]) -> torch.Tensor: + """Distance between two mass centers in range(0, inf) + Args: - distance beteen atoms: [ind0, ind1] - distance between mass centers: [[ind00, ind01, ...], [ind10, ind11, ...]] + index_list (list): can be the distance beteen atoms ([ind0, ind1]) or + distance between mass centers (a list of lists) such + as [[ind00, ind01, ...], [ind10, ind11, ...]] + Returns: cv (torch.tensor): computed distance """ if len(index_list) != 2: - raise ValueError( - "CV ERROR: Invalid number of centers in definition of distance!" - ) + raise ValueError("CV ERROR: Invalid number of centers in definition of distance!") p1 = self._get_com(index_list[0]) p2 = self._get_com(index_list[1]) @@ -153,21 +153,20 @@ def distance(self, cv = torch.linalg.norm(r12) return cv - - def angle(self, - index_list: list[Union[int, list]]) -> torch.tensor: - """get angle between three mass centers in range(-pi,pi) + + def angle(self, index_list: list[int | list]) -> torch.Tensor: + """Get angle between three mass centers in range(-pi,pi) + Args: - index_list + index_list (list): can be the angle between two atoms: [ind0, ind1, ind3] angle between centers of mass: [[ind00, ind01, ...], [ind10, ind11, ...], [ind20, ind21, ...]] + Returns: cv (torch.tensor): computed angle """ if len(index_list) != 3: - raise ValueError( - "CV ERROR: Invalid number of centers in definition of angle!" - ) + raise ValueError("CV ERROR: Invalid number of centers in definition of angle!") p1 = self._get_com(index_list[0]) p2 = self._get_com(index_list[1]) @@ -186,24 +185,23 @@ def angle(self, cv = torch.arccos(torch.dot(-q12_u, q23_u)) return cv - - def dihedral(self, - index_list: list[Union[int, list]]) -> torch.tensor: - """torsion angle between four mass centers in range(-pi,pi) - Params: - self.info_dict['index_list'] + + def dihedral(self, index_list: list[int | list]) -> torch.Tensor: + """Torsion angle between four mass centers in range(-pi,pi) + + Args: + index_list (list): can be the dihedral between atoms: [ind0, ind1, ind2, ind3] dihedral between center of mass: [[ind00, ind01, ...], [ind10, ind11, ...], [ind20, ind21, ...], [ind30, ind 31, ...]] + Returns: cv (float): computed torsional angle """ if len(index_list) != 4: - raise ValueError( - "CV ERROR: Invalid number of centers in definition of dihedral!" - ) + raise ValueError("CV ERROR: Invalid number of centers in definition of dihedral!") p1 = self._get_com(index_list[0]) p2 = self._get_com(index_list[1]) @@ -221,131 +219,119 @@ def dihedral(self, n2 = q34 - torch.dot(q34, q23_u) * q23_u cv = torch.atan2(torch.dot(torch.cross(q23_u, n1), n2), torch.dot(n1, n2)) - + return cv - - def coordination_number(self, - index_list: list[int], - switch_distance: float) -> torch.tensor: - """coordination number between two atoms in range(0, 1) + + def coordination_number(self, index_list: list[int], switch_distance: float) -> torch.Tensor: + """Coordination number between two atoms in range(0, 1) + Args: - distance between atoms: [ind00, ind01] - switch_distance: value at which the switching function is 0.5 + index_list (list): the indices of the atoms defining the coordination number as a + list of ints: [ind00, ind01] + switch_distance: value at which the switching function is 0.5 + Returns: cv (torch.tensor): computed distance """ if len(index_list) != 2: - raise ValueError( - "CV ERROR: Invalid number of atom in definition of coordination_number!" - ) + raise ValueError("CV ERROR: Invalid number of atom in definition of coordination_number!") scaled_distance = self.distance(index_list) / switch_distance - cv = (1. - scaled_distance.pow(6)) / ((1. - scaled_distance.pow(12))) + cv = (1.0 - scaled_distance.pow(6)) / (1.0 - scaled_distance.pow(12)) return cv - - def coordination(self, - index_list: list[list[int]], - switch_distance: float) -> torch.tensor: - """sum of coordination numbers between two sets of atoms in range(0, 1) + + def coordination(self, index_list: list[list[int]], switch_distance: float) -> torch.Tensor: + """Sum of coordination numbers between two sets of atoms in range(0, 1) + Args: - distance between atoms: [[ind00, ind01, ...], [ind10, ind11, ...]] - switch_distance: value at which the switching function is 0.5 + index_list (list): a list of lists of atom indices such as + [[ind00, ind01, ...], [ind10, ind11, ...]] + switch_distance: value at which the switching function is 0.5 + Returns: cv (torch.tensor): computed distance """ if len(index_list) != 2: - raise ValueError( - "CV ERROR: Invalid number of atom lists in definition of coordination_number!" - ) + raise ValueError("CV ERROR: Invalid number of atom lists in definition of coordination_number!") cv = torch.tensor(0.0) - + for idx1, idx2 in itertools.product(index_list[0], index_list[1]): cv = cv + self.coordination_number([idx1, idx2], switch_distance) - + return cv - - def minimal_distance(self, - index_list: list[list[int]]) -> torch.tensor: - """minimal distance between two sets of atoms + + def minimal_distance(self, index_list: list[list[int]]) -> torch.Tensor: + """Minimal distance between two sets of atoms + Args: - distance between atoms: [[ind00, ind01, ...], [ind10, ind11, ...]] + index_list (list): used to determine the distance between atoms, in the format + [[ind00, ind01, ...], [ind10, ind11, ...]] + Returns: cv (torch.tensor): computed distance """ if len(index_list) != 2: - raise ValueError( - "CV ERROR: Invalid number of atom lists in definition of minimal_distance!" - ) + raise ValueError("CV ERROR: Invalid number of atom lists in definition of minimal_distance!") distances = torch.zeros(len(index_list[0]) * len(index_list[1])) - + for ii, (idx1, idx2) in enumerate(itertools.product(index_list[0], index_list[1])): distances[ii] = self.distance([idx1, idx2]) - + return distances.min() - - def projecting_centroidvec(self): - """ - Projection of a position vector onto a reference vector - Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - vector: list of int - List of the indices of atoms that define the vector on which the position vector is projected - indices: list if int - List of indices of the mol/fragment - reference: list of int - List of atomic indices that are used as reference for the position vector + + def projecting_centroidvec(self) -> torch.Tensor: + """Projection of a position vector onto a reference vector + Atomic indices are used to determine the coordiantes of the vectors. """ - vector_pos = self.xyz[self.vector_inds] - vector = vector_pos[1] - vector_pos[0] - vector = vector / torch.linalg.norm(vector) - mol_pos = self.xyz[self.mol_inds] + vector_pos = self.xyz[self.vector_inds] + vector = vector_pos[1] - vector_pos[0] + vector = vector / torch.linalg.norm(vector) + mol_pos = self.xyz[self.mol_inds] reference_pos = self.xyz[self.reference_inds] - mol_centroid = mol_pos.mean(axis=0) # mol center - - reference_centroid = reference_pos.mean(axis=0) # centroid of the whole structure - + mol_centroid = mol_pos.mean(axis=0) # mol center + + reference_centroid = reference_pos.mean(axis=0) # centroid of the whole structure + # position vector with respect to the structure centroid - rel_mol_pos = mol_centroid - reference_centroid - + rel_mol_pos = mol_centroid - reference_centroid + # projection - cv = torch.dot(rel_mol_pos, vector) - return cv - - def projecting_veconplane(self): - """ - Projection of a position vector onto a the average plane + return torch.dot(rel_mol_pos, vector) + + def projecting_veconplane(self) -> torch.Tensor: + """Projection of a position vector onto a the average plane of an arbitrary ring defined in the structure Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - mol_inds: list of int - List of indices of the mol/fragment tracked by the CV - ring_inds: list of int - List of atomic indices of the ring for which the average plane is calculated. + + Args: + mol_inds (list[int]): List of indices of the mol/fragment tracked by the CV + ring_inds (list[int]): List of atomic indices of the ring for which the average plane is calculated. + + Returns: + cv (torch.tensor): tensor for the computed CV """ - mol_coors = self.xyz[self.mol_inds] + mol_coors = self.xyz[self.mol_inds] ring_coors = self.xyz[self.ring_inds] - - mol_cm = mol_coors.mean(axis=0) # mol center - ring_cm = ring_coors.mean(axis=0) # ring center + + mol_cm = mol_coors.mean(axis=0) # mol center + ring_cm = ring_coors.mean(axis=0) # ring center # ring atoms to center ring_coors = ring_coors - ring_cm r1 = torch.zeros(3, device=ring_coors.device) - N = len(ring_coors) # number of atoms in the ring + N = len(ring_coors) # number of atoms in the ring for i, rl0 in enumerate(ring_coors): r1 = r1 + rl0 * np.sin(2 * np.pi * i / N) - r1 = r1/N + r1 = r1 / N r2 = torch.zeros(3, device=ring_coors.device) for i, rl0 in enumerate(ring_coors): r2 = r2 + rl0 * np.cos(2 * np.pi * i / N) - r2 = r2/N + r2 = r2 / N plane_vec = torch.cross(r1, r2) plane_vec = plane_vec / torch.linalg.norm(plane_vec) @@ -353,39 +339,38 @@ def projecting_veconplane(self): cv = torch.dot(pos_vec, plane_vec) return cv - - def projecting_veconplanenormal(self): - """ - Projection of a position vector onto the average plane + + def projecting_veconplanenormal(self) -> torch.Tensor: + """Projection of a position vector onto the average plane of an arbitrary ring defined in the structure Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - mol_inds: list of int - List of indices of the mol/fragment tracked by the CV - ring_inds: list of int - List of atomic indices of the ring for which the average plane is calculated. + + Args: + mol_inds (list[int]): List of indices of the mol/fragment tracked by the CV + ring_inds (list[int]): List of atomic indices of the ring for which the average plane is calculated. + + Returns: + cv (torch.tensor): tensor for the computed CV """ - - mol_coors = self.xyz[self.mol_inds] + mol_coors = self.xyz[self.mol_inds] ring_coors = self.xyz[self.ring_inds] - - mol_cm = mol_coors.mean(axis=0) # mol center -# mol_cm = self._get_com(self.mol_inds) - ring_cm = ring_coors.mean(axis=0) # ring center + + mol_cm = mol_coors.mean(axis=0) # mol center + # mol_cm = self._get_com(self.mol_inds) + ring_cm = ring_coors.mean(axis=0) # ring center # ring atoms to center, center of geometry! ring_coors = ring_coors - ring_cm r1 = torch.zeros(3, device=ring_coors.device) - N = len(ring_coors) # number of atoms in the ring + N = len(ring_coors) # number of atoms in the ring for i, rl0 in enumerate(ring_coors): r1 = r1 + rl0 * np.sin(2 * np.pi * i / N) - r1 = r1/N + r1 = r1 / N r2 = torch.zeros(3, device=ring_coors.device) for i, rl0 in enumerate(ring_coors): r2 = r2 + rl0 * np.cos(2 * np.pi * i / N) - r2 = r2/N + r2 = r2 / N # normalize r1 and r2 r1 = r1 / torch.linalg.norm(r1) @@ -396,313 +381,293 @@ def projecting_veconplanenormal(self): proj2 = torch.dot(pos_vec, r2) cv = proj1 + proj2 return torch.abs(cv) - - def projection_channelnormal(self): - """ - Projection of a position vector onto the vector + + def projection_channelnormal(self) -> torch.Tensor: + """Projection of a position vector onto the vector along a channel Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - mol_inds: list of int - List of indices of the mol/fragment tracked by the CV - g1_inds: list of int - List of atomic indices denoting "start" of channel - g2_inds: list of int - List of atomic indices denoting "end" of channel + + Args: + mol_inds (list[int]): List of indices of the mol/fragment tracked by the CV + g1_inds (list[int]): List of atomic indices denoting "start" of channel + g2_inds (list[int]): List of atomic indices denoting "end" of channel + + Returns: + cv (torch.tensor): tensor for the computed CV """ - - mol_coors = self.xyz[self.mol_inds] - g1_coors = self.xyz[self.g1_inds] - g2_coors = self.xyz[self.g2_inds] - - mol_cm = self._get_com(self.mol_inds) - center_g1 = g1_coors.mean(axis=0) - center_g2 = g2_coors.mean(axis=0) - center = (center_g1 + center_g2)/2 - - normal_vec = (center_g2 - center_g1)/torch.linalg.norm(center_g2 - center_g1) - rel_pos = mol_cm - center + g1_coors = self.xyz[self.g1_inds] + g2_coors = self.xyz[self.g2_inds] + + mol_cm = self._get_com(self.mol_inds) + center_g1 = g1_coors.mean(axis=0) + center_g2 = g2_coors.mean(axis=0) + center = (center_g1 + center_g2) / 2 + + normal_vec = (center_g2 - center_g1) / torch.linalg.norm(center_g2 - center_g1) + rel_pos = mol_cm - center cv = torch.dot(rel_pos, normal_vec) return cv - - def adjacency_matrix_cv(self): - """Docstring + + def adjacency_matrix_cv(self) -> torch.Tensor: + """Create the adjacency matrix for for a given structure as the CV + + Returns: + cv (torch.tensor): computed adjacency matrix """ - edges, atomslist, Natoms, adjacency_matrix = get_adjacency_matrix(self.xyz, - self.atom_numbers, - self.bond_length, - cell=self.cell, - device=self.device) - - pred = self.model(atomslist, edges, Natoms, adjacency_matrix)[0] - rmsd = (pred-self.target).norm() - cv = rmsd.to('cpu').view(-1,1) - + edges, atomslist, Natoms, adjacency_matrix = get_adjacency_matrix( + self.xyz, self.atom_numbers, self.bond_length, cell=self.cell, device=self.device + ) + + pred = self.model(atomslist, edges, Natoms, adjacency_matrix)[0] + rmsd = (pred - self.target).norm() + cv = rmsd.to("cpu").view(-1, 1) + return cv - - def deproton1(self): - """ Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 - https://www.pnas.org/doi/10.1073/pnas.1819771116 - - Sp describes the proton exchange between acid-base pairs + + def deproton1(self) -> torch.Tensor: + """Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 + https://www.pnas.org/doi/10.1073/pnas.1819771116 + + Sp describes the proton exchange between acid-base pairs + + Returns: + cv (torch.tensor): computed Sp """ - dis_mat = self.xyz[None, :, :] - self.xyz[:, None, :] - - if Box is not None: - cell_dim = Box.to(dis_mat.device) - shift = torch.round(torch.divide(dis_mat,cell_dim)) - offsets = -shift - dis_mat = dis_mat+offsets*cell_dim - + + if self.Box is not None: + cell_dim = self.Box.to(dis_mat.device) + shift = torch.round(torch.divide(dis_mat, cell_dim)) + offsets = -shift + dis_mat = dis_mat + offsets * cell_dim + dis_sq = torch.linalg.norm(dis_mat, dim=-1) - dis = dis_sq[self.O,:][:,self.H] - - dis1 = dis_sq[self.Oacid,:][:,self.Owater] - cvmatrix = torch.exp(-self.do * dis) - cvmatrix = cvmatrix / cvmatrix.sum(0) - cvmatrixw = cvmatrix[self.Oacid.shape[0]:].sum(-1) - self.r1 - cvmatrix = cvmatrix[:self.Oacid.shape[0]].sum(-1) - self.ro - cv1 = 2 * cvmatrix.sum() + cvmatrixw.sum() - + dis = dis_sq[self.O, :][:, self.H] + + cvmatrix = torch.exp(-self.do * dis) + cvmatrix = cvmatrix / cvmatrix.sum(0) + cvmatrixw = cvmatrix[self.Oacid.shape[0] :].sum(-1) - self.r1 + cvmatrix = cvmatrix[: self.Oacid.shape[0]].sum(-1) - self.ro + cv1 = 2 * cvmatrix.sum() + cvmatrixw.sum() + return cv1 - - def deproton2(self): - """ Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 - https://www.pnas.org/doi/10.1073/pnas.1819771116 - - Sd describes tge distance between acid-base pairs + + def deproton2(self) -> torch.Tensor: + """Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 + https://www.pnas.org/doi/10.1073/pnas.1819771116 + + Sd describes the distance between acid-base pairs + + Returns: + cv2 (torch.tensor): computed distance """ - dis_mat = self.xyz[None, :, :] - self.xyz[:, None, :] - - if Box is not None: - cell_dim = Box.to(dis_mat.device) - shift = torch.round(torch.divide(dis_mat,cell_dim)) - offsets = -shift - dis_mat = dis_mat + offsets * cell_dim - - dis_sq = torch.linalg.norm(dis_mat,dim=-1) - dis = dis_sq[self.O,:][:,self.H] - dis1 = dis_sq[self.Oacid,:][:,self.Owater] - cvmatrix = torch.exp(-self.do * dis) - cvmatrix = cvmatrix / cvmatrix.sum(0) + + if self.Box is not None: + cell_dim = self.Box.to(dis_mat.device) + shift = torch.round(torch.divide(dis_mat, cell_dim)) + offsets = -shift + dis_mat = dis_mat + offsets * cell_dim + + dis_sq = torch.linalg.norm(dis_mat, dim=-1) + dis = dis_sq[self.O, :][:, self.H] + dis1 = dis_sq[self.Oacid, :][:, self.Owater] + cvmatrix = torch.exp(-self.do * dis) + cvmatrix = cvmatrix / cvmatrix.sum(0) cvmatrixx = torch.exp(-self.d * dis) cvmatrixx = cvmatrixx / cvmatrixx.sum(0) - cvmatrixw = cvmatrixx[self.Oacid.shape[0]:].sum(-1) - self.r1 - cvmatrix = cvmatrixx[:self.Oacid.shape[0]].sum(-1) - self.ro - cvmatrix1 = torch.cat((cvmatrix,cvmatrixw)) - cvmatrix2 = torch.matmul(cvmatrix.view(1,-1).t(),cvmatrixw.view(1,-1)) + cvmatrixw = cvmatrixx[self.Oacid.shape[0] :].sum(-1) - self.r1 + cvmatrix = cvmatrixx[: self.Oacid.shape[0]].sum(-1) - self.ro + cvmatrix2 = torch.matmul(cvmatrix.view(1, -1).t(), cvmatrixw.view(1, -1)) cvmatrix2 = -cvmatrix2 * dis1 - cv2 = cvmatrix2.sum() - + cv2 = cvmatrix2.sum() + return cv2 - - - def energy_gap(self, enkey1, enkey2) : - """get energy gap betweentwo adiabatic PES + + def energy_gap(self, enkey1: str, enkey2: str): + """Get energy gap between two adiabatic PES + Args: enkey1 (str): key of one adiabatic PES enkey2 (str): key of the other PES - + Returns: - cv (torch.tensor): computed energy gap + cv (torch.tensor): computed energy gap """ - - batch = batch_to(self.atoms.get_batch(), self.device) - pred = self.model(batch, device=self.device) + batch = batch_to(self.atoms.get_batch(), self.device) + pred = self.model(batch, device=self.device) energy_1 = pred[enkey1] energy_2 = pred[enkey2] - e_diff = energy_2 - energy_1 - - cv = torch.abs(e_diff) - cv_grad = pred[enkey2+'_grad'] - pred[enkey1+'_grad'] + e_diff = energy_2 - energy_1 + + cv = torch.abs(e_diff) + cv_grad = pred[enkey2 + "_grad"] - pred[enkey1 + "_grad"] if e_diff < 0: cv_grad *= -1.0 - + return cv, cv_grad - - def forward(self, atoms): - """switch function to call the right CV-func + def forward(self, atoms: Atoms) -> tuple[np.ndarray, np.ndarray]: + """Switch function to call the right CV-func + + Args: + atoms (Atoms): ASE Atoms object + + Returns: + cv (np.ndarray): computed CV """ - self.xyz = torch.from_numpy(atoms.get_positions()) - self.xyz.requires_grad=True - + self.xyz.requires_grad = True + self.atoms = atoms - - if self.info_dict['name'] == 'distance': - cv = self.distance(self.info_dict['index_list']) + + if self.info_dict["name"] == "distance": + cv = self.distance(self.info_dict["index_list"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'angle': - cv = self.angle(self.info_dict['index_list']) + + elif self.info_dict["name"] == "angle": + cv = self.angle(self.info_dict["index_list"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'dihedral': - cv = self.dihedral(self.info_dict['index_list']) + + elif self.info_dict["name"] == "dihedral": + cv = self.dihedral(self.info_dict["index_list"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'coordination_number': - cv = self.coordination_number(self.info_dict['index_list'], self.info_dict['switching_dist']) + + elif self.info_dict["name"] == "coordination_number": + cv = self.coordination_number(self.info_dict["index_list"], self.info_dict["switching_dist"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'coordination': - cv = self.coordination(self.info_dict['index_list'], self.info_dict['switching_dist']) + + elif self.info_dict["name"] == "coordination": + cv = self.coordination(self.info_dict["index_list"], self.info_dict["switching_dist"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'minimal_distance': - cv = self.minimal_distance(self.info_dict['index_list']) + + elif self.info_dict["name"] == "minimal_distance": + cv = self.minimal_distance(self.info_dict["index_list"]) cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'projecting_centroidvec': - cv = self.projecting_centroidvec() + + elif self.info_dict["name"] == "projecting_centroidvec": + cv = self.projecting_centroidvec() cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'projecting_veconplane': - cv = self.projecting_veconplane() + + elif self.info_dict["name"] == "projecting_veconplane": + cv = self.projecting_veconplane() cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'projecting_veconplanenormal': - cv = self.projecting_veconplanenormal() + + elif self.info_dict["name"] == "projecting_veconplanenormal": + cv = self.projecting_veconplanenormal() cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'projection_channelnormal': - cv = self.projection_channelnormal() + + elif self.info_dict["name"] == "projection_channelnormal": + cv = self.projection_channelnormal() cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'Sp': + + elif self.info_dict["name"] == "Sp": cv = self.deproton1() cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'Sd': + + elif self.info_dict["name"] == "Sd": cv = self.deproton2() cv_grad = compute_grad(inputs=self.xyz, output=cv) - - elif self.info_dict['name'] == 'energy_gap': - cv, cv_grad = self.energy_gap(self.info_dict['enkey_1'], self.info_dict['enkey_2']) - + + elif self.info_dict["name"] == "energy_gap": + cv, cv_grad = self.energy_gap(self.info_dict["enkey_1"], self.info_dict["enkey_2"]) + return cv.detach().cpu().numpy(), cv_grad.detach().cpu().numpy() - - - - - - - - - - - - - - - - - - - - - -# implement SMILES to graph function + + +# implement SMILES to graph function def smiles2graph(smiles): - ''' - Transfrom smiles into a list nodes (atomic number) - - Args: + """Transfrom smiles into a list nodes (atomic number) + + Args: smiles (str): SMILES strings - - return: - z(np.array), A (np.array): list of atomic numbers, adjancency matrix - ''' - - mol = Chem.MolFromSmiles( smiles ) # no hydrogen - z = np.array( [atom.GetAtomicNum() for atom in mol.GetAtoms()] ) + + Return: + z(np.array), A (np.array): list of atomic numbers, adjancency matrix + """ + mol = Chem.MolFromSmiles(smiles) # no hydrogen + z = np.array([atom.GetAtomicNum() for atom in mol.GetAtoms()]) A = np.stack(Chem.GetAdjacencyMatrix(mol)) - #np.fill_diagonal(A,1) + # np.fill_diagonal(A,1) return z, A + + class GraphDataset(torch.utils.data.Dataset): - def __init__(self, - AtomicNum_list, - Edge_list, - Natom_list, - Adjacency_matrix_list - ): - - ''' - GraphDataset object - - Args: - z_list (list of torch.LongTensor) - a_list (list of torch.LongTensor) - N_list (list of int) - - - ''' - self.AtomicNum_list = AtomicNum_list # atomic number - self.Edge_list = Edge_list # edge list - self.Natom_list = Natom_list # Number of atoms - self.Adjacency_matrix_list=Adjacency_matrix_list - def __len__(self): + """Class for datasets of graphs""" + + def __init__( + self, + AtomicNum_list: list[torch.LongTensor], + Edge_list: list[torch.LongTensor], + Natom_list: list[int], + Adjacency_matrix_list: list, + ) -> None: + """GraphDataset object + + Args: + AtomicNum_list (list of torch.LongTensor): list of atomic numbers + Edge_list (list of torch.LongTensor): list of edges in the graph + Natom_list (list of int): list of number of atoms in each graph + Adjacency_matrix_list (list of torch.LongTensor): list of adjacency matrices + """ + self.AtomicNum_list = AtomicNum_list # atomic number + self.Edge_list = Edge_list # edge list + self.Natom_list = Natom_list # Number of atoms + self.Adjacency_matrix_list = Adjacency_matrix_list + + def __len__(self): # noqa: D105 return len(self.Natom_list) - def __getitem__(self, idx): - + def __getitem__(self, idx): # noqa: D105 AtomicNum = torch.LongTensor(self.AtomicNum_list[idx]) Edge = torch.LongTensor(self.Edge_list[idx]) Natom = self.Natom_list[idx] Adjacency_matrix = self.Adjacency_matrix_list[idx] - - return AtomicNum, Edge, Natom,Adjacency_matrix -def collate_graphs(batch): - '''Batch multiple graphs into one batched graph - + + return AtomicNum, Edge, Natom, Adjacency_matrix + + +def collate_graphs(batch: tuple) -> tuple: + """Batch multiple graphs into one batched graph + Args: - - batch (tuple): tuples of AtomicNum, Edge, Natom obtained from GraphDataset.__getitem__() - - Return - (tuple): Batched AtomicNum, Edge, Natom - - ''' - + batch (tuple): tuples of AtomicNum, Edge, Natom obtained from GraphDataset.__getitem__() + + Return: + tuple: Batched AtomicNum, Edge, Natom + """ AtomicNum_batch = [] Edge_batch = [] Natom_batch = [] - Adjacency_matrix_batch=[] + Adjacency_matrix_batch = [] cumulative_atoms = np.cumsum([0] + [b[2] for b in batch])[:-1] - + for i in range(len(batch)): - z, a, N,A = batch[i] + z, a, N, A = batch[i] index_shift = cumulative_atoms[i] a = a + index_shift - AtomicNum_batch.append(z) + AtomicNum_batch.append(z) Edge_batch.append(a) Natom_batch.append(N) Adjacency_matrix_batch.append(A) - + AtomicNum_batch = torch.cat(AtomicNum_batch) Edge_batch = torch.cat(Edge_batch, dim=1) - Natom_batch = Natom_batch - #Adjacency_matrix_batch=torch.block_diag(*Adjacency_matrix_batch) - Adjacency_matrix_batch=torch.cat(Adjacency_matrix_batch,dim=0).view(-1,1) - - return AtomicNum_batch, Edge_batch, Natom_batch,Adjacency_matrix_batch -from itertools import repeat -def scatter_add(src, index, dim_size, dim=-1, fill_value=0): - - ''' - Sums all values from the src tensor into out at the indices specified in the index - tensor along a given axis dim. - ''' - + # Adjacency_matrix_batch=torch.block_diag(*Adjacency_matrix_batch) + Adjacency_matrix_batch = torch.cat(Adjacency_matrix_batch, dim=0).view(-1, 1) + + return AtomicNum_batch, Edge_batch, Natom_batch, Adjacency_matrix_batch + + +def scatter_add(src, index: torch.Tensor, dim_size: int, dim: int = -1, fill_value: int = 0) -> torch.Tensor: + """Sums all values from the src tensor into out at the indices specified in the index + tensor along a given axis dim. + """ index_size = list(repeat(1, src.dim())) index_size[dim] = src.size(dim) index = index.view(index_size).expand_as(src) - + dim = range(src.dim())[dim] out_size = list(src.size()) out_size[dim] = dim_size @@ -710,172 +675,240 @@ def scatter_add(src, index, dim_size, dim=-1, fill_value=0): out = src.new_full(out_size, fill_value) return out.scatter_add_(dim, index, src) -from torch import nn -from torch.nn import ModuleDict + class GNN(torch.nn.Module): - ''' - A GNN model - ''' - def __init__(self, n_convs=3, n_embed=64): - super(GNN, self).__init__() + """A GNN model""" + + def __init__(self, n_convs=3, n_embed=64): # noqa: D107 + super().__init__() self.atom_embed = nn.Embedding(100, n_embed) # Declare MLPs in a ModuleList self.convolutions = nn.ModuleList( - [ - ModuleDict({ - 'update_mlp': nn.Sequential(nn.Linear(n_embed, n_embed), - nn.ReLU(), - nn.Linear(n_embed, n_embed)), - 'message_mlp': nn.Sequential(nn.Linear(n_embed, n_embed), - nn.ReLU(), - nn.Linear(n_embed, n_embed)) - }) + [ + ModuleDict( + { + "update_mlp": nn.Sequential( + nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, n_embed) + ), + "message_mlp": nn.Sequential( + nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, n_embed) + ), + } + ) for _ in range(n_convs) ] - ) + ) # Declare readout layers - #self.readout = nn.Sequential(nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, 1)) - - def forward(self, AtomicNum, Edge, Natom,adjacency_matrix): + # self.readout = nn.Sequential(nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, 1)) + + def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): # noqa: D102 ################ Code ################# - - # Parametrize embedding - h = self.atom_embed(AtomicNum) #eqn. 1 + + # Parametrize embedding + h = self.atom_embed(AtomicNum) # eqn. 1 for conv in self.convolutions: - messagei2j=conv.message_mlp(h[Edge[0]]*h[Edge[1]]) - messagei2j=messagei2j*adjacency_matrix - node_message=scatter_add(src=messagei2j, index=Edge[1], dim=0, dim_size=len(AtomicNum)) #+ scatter_add(src=messagei2j, index=Edge[0], dim=0, dim_size=len(AtomicNum)) - h=h+conv.update_mlp(node_message) - output=[split.sum(0) for split in torch.split(h, Natom)] - - - + messagei2j = conv.message_mlp(h[Edge[0]] * h[Edge[1]]) + messagei2j = messagei2j * adjacency_matrix + node_message = scatter_add( + src=messagei2j, index=Edge[1], dim=0, dim_size=len(AtomicNum) + ) # + scatter_add(src=messagei2j, index=Edge[0], dim=0, dim_size=len(AtomicNum)) + h = h + conv.update_mlp(node_message) + output = [split.sum(0) for split in torch.split(h, Natom)] + ################ Code ################# return output -def adjfunc(x,m,s): - return 4/((torch.exp(s * (x-m)) + 1) * (torch.exp((-s) * (x-m))+1)) -def gauss(x,m,s,a,b): - #return torch.exp(-abs((x-m)/2*s)**p) - G=(1+(2**(a/b)-1)*abs((x-m)/s)**a)**(-b/a) - G[torch.where(x tuple[torch.LongTensor, torch.LongTensor, list[int], torch.Tensor]: + """Get the adjacency matrix of a molecule + + Args: + xyz (list | torch.Tensor): the xyz coordinates of the atoms + atom_numbers (torch.Tensor): the atomic numbers of the atoms + bond_length (dict): the bond lengths of the atoms in the format "atom1-atom2" + for each key, the value is the bond length + oxygeninvolved (list[int]): list of indices of the oxygen atoms + cell (torch.Tensor | None, optional): The dimensions of the lattice if the system + is periodic. Defaults to None. + device (str, optional): the device to use. Defaults to "cpu". + + Returns: + tuple[torch.LongTensor, torch.LongTensor, list[int], torch.Tensor]: _description_ + """ dis_mat = xyz[None, :, :] - xyz[:, None, :] if cell is not None: cell_dim = torch.tensor(np.diag(cell)) - shift = torch.round(torch.divide(dis_mat,cell_dim)) + shift = torch.round(torch.divide(dis_mat, cell_dim)) offsets = -shift - - dis_mat=dis_mat+offsets*cell_dim - dis_sq=dis_mat.norm(dim=-1) - bondlen=torch.ones(dis_sq.shape) - bondlen[torch.where(atom_numbers==8)[0],torch.where(atom_numbers==14)[0].view(-1,1)]=bond_length['8-14'] - bondlen[torch.where(atom_numbers==14)[0],torch.where(atom_numbers==8)[0].view(-1,1)]=bond_length['14-8'] - bondlen[torch.where(atom_numbers==8)[0],torch.where(atom_numbers==1)[0].view(-1,1)]=bond_length['8-1'] - bondlen[torch.where(atom_numbers==1)[0],torch.where(atom_numbers==8)[0].view(-1,1)]=bond_length['1-8'] - #adjacency=dis_sq-bondlen - #adjacency=(dis_sq-0.0001)/bondlen - #adjacency_matrix=torch.exp(-((torch.abs(adjacency)/d)**p)) - #adjacency_matrix=(1-adjacency**m)/(1-adjacency**n) - #adjacency_matrix=adjacency_matrix-torch.eye(adjacency_matrix.shape[0]) - adjacency_matrix= gauss(dis_sq,bondlen,0.5,2,2) - adjacency_matrix=adjacency_matrix[torch.where(atom_numbers==14)[0].view(-1,1),torch.where(atom_numbers==8)[0][oxygeninvolved]] - adjacency_matrix=torch.matmul(adjacency_matrix,adjacency_matrix.t()) - adjacency_matrix=adjacency_matrix.fill_diagonal_(0) - edges=torch.stack([i for i in torch.where(adjacency_matrix>=0)]) - adjacency_matrix=adjacency_matrix[torch.where(adjacency_matrix>=0)[0],torch.where(adjacency_matrix>=0)[1]].view(-1,1) - atomslist=torch.tensor([14 for i in torch.where(atom_numbers==14)[0]]).view(-1) - #molecules,edge_list,atom_list=get_molecules(xyz=xyz.detach(),atom_numbers=atom_numbers,bond_length=bond_length,periodic=False) - #adjacency_matrix_list=[] - #print(compute_grad(xyz,dis_sq[0,1])) - #for i,m in enumerate(molecules): + + dis_mat = dis_mat + offsets * cell_dim + dis_sq = dis_mat.norm(dim=-1) + bondlen = torch.ones(dis_sq.shape) + bondlen[torch.where(atom_numbers == 8)[0], torch.where(atom_numbers == 14)[0].view(-1, 1)] = bond_length["8-14"] + bondlen[torch.where(atom_numbers == 14)[0], torch.where(atom_numbers == 8)[0].view(-1, 1)] = bond_length["14-8"] + bondlen[torch.where(atom_numbers == 8)[0], torch.where(atom_numbers == 1)[0].view(-1, 1)] = bond_length["8-1"] + bondlen[torch.where(atom_numbers == 1)[0], torch.where(atom_numbers == 8)[0].view(-1, 1)] = bond_length["1-8"] + # adjacency=dis_sq-bondlen + # adjacency=(dis_sq-0.0001)/bondlen + # adjacency_matrix=torch.exp(-((torch.abs(adjacency)/d)**p)) + # adjacency_matrix=(1-adjacency**m)/(1-adjacency**n) + # adjacency_matrix=adjacency_matrix-torch.eye(adjacency_matrix.shape[0]) + adjacency_matrix = gauss(dis_sq, bondlen, 0.5, 2, 2) + adjacency_matrix = adjacency_matrix[ + torch.where(atom_numbers == 14)[0].view(-1, 1), torch.where(atom_numbers == 8)[0][oxygeninvolved] + ] + adjacency_matrix = torch.matmul(adjacency_matrix, adjacency_matrix.t()) + adjacency_matrix = adjacency_matrix.fill_diagonal_(0) + edges = torch.stack(list(torch.where(adjacency_matrix >= 0))) + adjacency_matrix = adjacency_matrix[ + torch.where(adjacency_matrix >= 0)[0], torch.where(adjacency_matrix >= 0)[1] + ].view(-1, 1) + atomslist = torch.tensor([14 for i in torch.where(atom_numbers == 14)[0]]).view(-1) + # molecules,edge_list,atom_list=get_molecules( + # xyz=xyz.detach(),atom_numbers=atom_numbers,bond_length=bond_length,periodic=False + # ) + # adjacency_matrix_list=[] + # print(compute_grad(xyz,dis_sq[0,1])) + # for i,m in enumerate(molecules): # n=torch.tensor(m) # adjacency_matrix_list.append(adjacency_matrix[edge_list[i][0],edge_list[i][1]].view(-1,1)) - return torch.LongTensor(edges).to(device),torch.LongTensor(atomslist).to(device),[(len(atomslist))],adjacency_matrix.float().to(device) + return ( + torch.LongTensor(edges).to(device), + torch.LongTensor(atomslist).to(device), + [(len(atomslist))], + adjacency_matrix.float().to(device), + ) + + +def get_molecules(atom: AtomsBatch, bond_length: dict, mode: str = "bond", periodic: bool = True) -> list: + """Get the molecules in the system from the Atoms object -def get_molecules(atom,bond_length,mode='bond',periodic=True): - types=list(set(atom.numbers)) - xyz=atom.positions - #A=np.lexsort((xyz[:,2],xyz[:,1],xyz[:,0])) + Args: + atom (AtomsBatch): Atoms from which to extract the molecules + bond_length (dict): Dictionary of bond lengths + mode (str, optional): Mode of identifying distinct molecules. Defaults to "bond". + periodic (bool, optional): Whehter or not the Atoms are periodic. Defaults to True. + + Returns: + list: the molecules in the system + """ + types = list(set(atom.numbers)) + xyz = atom.positions + # A=np.lexsort((xyz[:,2],xyz[:,1],xyz[:,0])) dis_mat = xyz[None, :, :] - xyz[:, None, :] - if periodic==True: + if periodic is True: cell_dim = np.diag(np.array(atom.get_cell())) - shift = np.round(np.divide(dis_mat,cell_dim)) + shift = np.round(np.divide(dis_mat, cell_dim)) offsets = -shift - dis_mat=dis_mat+offsets*cell_dim + dis_mat = dis_mat + offsets * cell_dim dis_sq = torch.tensor(dis_mat).pow(2).sum(-1).numpy() - dis_sq=dis_sq**0.5 - clusters=np.array([0 for i in range(xyz.shape[0])]) + dis_sq = dis_sq**0.5 + clusters = np.array([0 for i in range(xyz.shape[0])]) for i in range(xyz.shape[0]): - mm=max(clusters) - ty=atom.numbers[i] - oxy_neighbors=[] - if mode=='bond': + mm = max(clusters) + ty = atom.numbers[i] + oxy_neighbors = [] + if mode == "bond": for t in types: - if bond_length.get('%s-%s'%(ty,t))!=None: - oxy_neighbors.extend(list(np.where(atom.numbers==t)[0][np.where(dis_sq[i,np.where(atom.numbers==t)[0]]<=bond_length['%s-%s'%(ty,t)])[0]])) - elif mode=='cutoff': - oxy_neighbors.extend(list(np.where(dis_sq[i]<=6)[0])) - oxy_neighbors=np.array(oxy_neighbors) - if len(oxy_neighbors)==0: - clusters[i]=mm+1 + if bond_length.get(f"{ty}-{t}") is not None: + oxy_neighbors.extend( + list( + np.where(atom.numbers == t)[0][ + np.where(dis_sq[i, np.where(atom.numbers == t)[0]] <= bond_length[f"{ty}-{t}"])[0] + ] + ) + ) + elif mode == "cutoff": + oxy_neighbors.extend(list(np.where(dis_sq[i] <= 6)[0])) + oxy_neighbors = np.array(oxy_neighbors) + if len(oxy_neighbors) == 0: + clusters[i] = mm + 1 continue - if (clusters[oxy_neighbors]==0).all() and clusters[i]!=0: - clusters[oxy_neighbors]=clusters[i] - elif (clusters[oxy_neighbors]==0).all() and clusters[i]==0: - clusters[oxy_neighbors]=mm+1 - clusters[i]=mm+1 - elif (clusters[oxy_neighbors]==0).all() == False and clusters[i]==0: - clusters[i]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) - clusters[oxy_neighbors]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) - elif (clusters[oxy_neighbors]==0).all() == False and clusters[i]!=0: - tmp=clusters[oxy_neighbors][clusters[oxy_neighbors]!=0][clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]!=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0])] - clusters[i]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) - clusters[oxy_neighbors]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) + if (clusters[oxy_neighbors] == 0).all() and clusters[i] != 0: + clusters[oxy_neighbors] = clusters[i] + elif (clusters[oxy_neighbors] == 0).all() and clusters[i] == 0: + clusters[oxy_neighbors] = mm + 1 + clusters[i] = mm + 1 + elif (clusters[oxy_neighbors] == 0).all() is False and clusters[i] == 0: + clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + elif (clusters[oxy_neighbors] == 0).all() is False and clusters[i] != 0: + tmp = clusters[oxy_neighbors][clusters[oxy_neighbors] != 0][ + clusters[oxy_neighbors][clusters[oxy_neighbors] != 0] + != min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + ] + clusters[i] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + clusters[oxy_neighbors] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) for tr in tmp: - clusters[np.where(clusters==tr)[0]]=min(clusters[oxy_neighbors][clusters[oxy_neighbors]!=0]) - - molecules=[] - for i in range(1,max(clusters)+1): - if np.size(np.where(clusters==i)[0])==0: + clusters[np.where(clusters == tr)[0]] = min(clusters[oxy_neighbors][clusters[oxy_neighbors] != 0]) + + molecules = [] + for i in range(1, max(clusters) + 1): + if np.size(np.where(clusters == i)[0]) == 0: continue - molecules.append(np.where(clusters==i)[0]) + molecules.append(np.where(clusters == i)[0]) + + return molecules - return molecules -def reconstruct_atoms(atomsobject, mol_idx,centre=None): + +def reconstruct_atoms(atomsobject: Atoms | AtomsBatch, mol_idx: list, centre: torch.Tensor | None = None) -> np.ndarray: + """Reconstruct the atoms in the system + + Args: + atomsobject (Atoms | AtomsBatch): The Atoms object to reconstruct + mol_idx (list): The indices of the molecules to reconstruct + centre (torch.Tensor | None, optional): A manual center of the atoms. If unspecified, + calculated within the function. Defaults to None. + + Returns: + np.ndarray: the new positions of the atoms + """ sys_xyz = torch.Tensor(atomsobject.get_positions(wrap=True)) box_len = torch.Tensor(atomsobject.get_cell_lengths_and_angles()[:3]) print(box_len) for idx in mol_idx: mol_xyz = sys_xyz[idx] - center = mol_xyz.shape[0]//2 - if centre!=None: - center=centre - intra_dmat = (mol_xyz[None, :,...] - mol_xyz[:, None, ...])[center] - if np.count_nonzero(atomsobject.cell.T-np.diag(np.diagonal(atomsobject.cell.T)))!=0: - M,N=intra_dmat.shape[0],intra_dmat.shape[1] - f=torch.linalg.solve(torch.Tensor(atomsobject.cell.T),(intra_dmat.view(-1,3).T)).T - g=f-torch.floor(f+0.5) - intra_dmat=torch.matmul(g,torch.Tensor(atomsobject.cell)) - intra_dmat=intra_dmat.view(M,3) - offsets=-torch.floor(f+0.5).view(M,3) - traj_unwrap = mol_xyz+torch.matmul(offsets,torch.Tensor(atomsobject.cell)) + center = mol_xyz.shape[0] // 2 + if centre is not None: + center = centre + intra_dmat = (mol_xyz[None, :, ...] - mol_xyz[:, None, ...])[center] + if np.count_nonzero(atomsobject.cell.T - np.diag(np.diagonal(atomsobject.cell.T))) != 0: + M, _N = intra_dmat.shape[0], intra_dmat.shape[1] + f = torch.linalg.solve(torch.Tensor(atomsobject.cell.T), (intra_dmat.view(-1, 3).T)).T + g = f - torch.floor(f + 0.5) + intra_dmat = torch.matmul(g, torch.Tensor(atomsobject.cell)) + intra_dmat = intra_dmat.view(M, 3) + offsets = -torch.floor(f + 0.5).view(M, 3) + traj_unwrap = mol_xyz + torch.matmul(offsets, torch.Tensor(atomsobject.cell)) else: - sub = (intra_dmat > 0.5 * box_len).to(torch.float) * box_len - add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len - shift=torch.round(torch.divide(intra_dmat,box_len)) - offsets=-shift - traj_unwrap = mol_xyz+offsets*box_len - #traj_unwrap=mol_xyz+add-sub + # sub = (intra_dmat > 0.5 * box_len).to(torch.float) * box_len + # add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len + shift = torch.round(torch.divide(intra_dmat, box_len)) + offsets = -shift + traj_unwrap = mol_xyz + offsets * box_len + # traj_unwrap=mol_xyz+add-sub sys_xyz[idx] = traj_unwrap new_pos = sys_xyz.numpy() - return new_pos \ No newline at end of file + return new_pos diff --git a/nff/md/nve.py b/nff/md/nve.py index 283626ab..ffb54d46 100644 --- a/nff/md/nve.py +++ b/nff/md/nve.py @@ -86,7 +86,10 @@ def __init__( interval=self.mdparam["save_frequency"], ) - def check_restart(self): + def check_restart(self) -> int: + """Check if the MD path is being restarted from an existing traj file and adjust the number of + steps accordingly. + """ if os.path.exists(self.mdparam["traj_filename"]): new_atoms = Trajectory(self.mdparam["traj_filename"])[-1] @@ -129,8 +132,7 @@ def check_restart(self): return self.steps - else: - return self.steps + return self.steps def setup_restart(self, restart_param): """If you want to restart a simulations with predfined mdparams but @@ -147,7 +149,6 @@ def setup_restart(self, restart_param): Args: restart_param (dict): dictionary to contains restart paramsters and file paths """ - if restart_param["thermo_filename"] == self.mdparam["thermo_filename"]: raise ValueError( "{} is also used, \ @@ -189,17 +190,21 @@ def setup_restart(self, restart_param): self.mdparam["steps"] = restart_param["steps"] - def run(self): + def run(self) -> None: + """Run the MD simulation for the specified number of steps. If the stability_check + parameter is set to True, the simulation will run until the temperature is within + reasonable bounds. The neighbor list is updated every nbr_list_update_freq steps. + """ epochs = int(self.steps // self.mdparam["nbr_list_update_freq"]) # In case it had neighbors that didn't include the cutoff skin, # for example, it's good to update the neighbor list here self.atomsbatch.update_nbr_list() if self.mdparam.get("stability_check", False): - for step in range(epochs): + for _step in range(epochs): T = self.atomsbatch.get_batch_kinetic_energy() / (1.5 * units.kB * self.atomsbatch.num_atoms) if ( - (T > (10 * self.mdparam["thermostat_params"]["temperature"] / units.kB)).any() + ((10 * self.mdparam["thermostat_params"]["temperature"] / units.kB) < T).any() or (T < 1e-1).any() and self.mdparam.get("stability_check", False) ): @@ -215,7 +220,7 @@ def run(self): self.atomsbatch.update_nbr_list() else: - for step in range(epochs): + for _step in range(epochs): self.integrator.run(self.mdparam["nbr_list_update_freq"]) # # unwrap coordinates if mol_idx is defined From 167daad82ce634afdc49ad4f6bd450fbc936ab64 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 3 Feb 2025 18:12:06 -0500 Subject: [PATCH 48/66] ENH: add tqdm for range for loop --- nff/data/dataset.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nff/data/dataset.py b/nff/data/dataset.py index 7bd20958..62503439 100644 --- a/nff/data/dataset.py +++ b/nff/data/dataset.py @@ -18,6 +18,7 @@ from sklearn.model_selection import train_test_split from sklearn.utils import shuffle as skshuffle from torch.utils.data import Dataset as TorchDataset +from tqdm import trange import nff.utils.constants as const from nff.data.features import ATOM_FEAT_TYPES, BOND_FEAT_TYPES @@ -620,7 +621,7 @@ def as_atoms_batches( atoms_batches = [] num_batches = len(self.props["nxyz"]) - for i in range(num_batches): + for i in trange(num_batches): nxyz = self.props["nxyz"][i] atoms = AtomsBatch( nxyz[:, 0].long(), From 4505a1ff90cbe77a251b32d1667cbdee881bcdd3 Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 5 Feb 2025 18:43:33 +0100 Subject: [PATCH 49/66] Enforce numpy 1 --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 01fd4ec8..9a968f63 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ readme = "README.md" license = { text = "MIT" } dependencies = [ "ase==3.22.1", + "numpy >=1.26.*, <2", "pymatgen>=2023.3.10", "rdkit", "scikit-learn", From 8842f47ea1f61fd63fa67f3e3d8a5ddf55f79224 Mon Sep 17 00:00:00 2001 From: steinmig Date: Wed, 5 Feb 2025 18:45:59 +0100 Subject: [PATCH 50/66] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9a968f63..bec02349 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ readme = "README.md" license = { text = "MIT" } dependencies = [ "ase==3.22.1", - "numpy >=1.26.*, <2", + "numpy >=1.26.4, <2", "pymatgen>=2023.3.10", "rdkit", "scikit-learn", From dbbcb0aec64163a4ce91c761fba34373e1932656 Mon Sep 17 00:00:00 2001 From: steinmig Date: Thu, 6 Feb 2025 19:27:42 +0100 Subject: [PATCH 51/66] Update nff/io/cprop.py --- nff/io/cprop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nff/io/cprop.py b/nff/io/cprop.py index c61400ba..53705599 100644 --- a/nff/io/cprop.py +++ b/nff/io/cprop.py @@ -23,7 +23,7 @@ def get_cp_cmd(script, config_path, data_path, dataset_type): cmd (str): the chemprop command """ - cmd = f"python {script} --config_path {config_path} " f" --data_path {data_path} " f" --dataset_type {dataset_type}" + cmd = f"python {script} --config_path {config_path} --data_path {data_path} --dataset_type {dataset_type}" return cmd From 9a6b2e310cbe723f8cc007a70f85c4e9dbad9cc0 Mon Sep 17 00:00:00 2001 From: steinmig Date: Thu, 6 Feb 2025 13:54:39 -0500 Subject: [PATCH 52/66] fix e741 --- nff/analysis/roce.py | 2 +- nff/md/tully/ab_io.py | 4 ++-- nff/md/tully/step.py | 4 ++-- nff/md/zhu_nakamura/dynamics.py | 10 +++++----- nff/nn/models/mace.py | 6 +++--- .../spooky_net_source/modules/interaction_module.py | 4 ++-- nff/nn/modules/spooky.py | 2 ++ nff/nn/modules/spooky_fast.py | 2 ++ nff/utils/functions.py | 1 + nff/utils/xyz2mol.py | 10 +++++----- pyproject.toml | 1 - 11 files changed, 25 insertions(+), 21 deletions(-) diff --git a/nff/analysis/roce.py b/nff/analysis/roce.py index 4d4e363f..361c5c48 100644 --- a/nff/analysis/roce.py +++ b/nff/analysis/roce.py @@ -468,7 +468,7 @@ def vals_for_plot(plot_dic): # set the labels equal to the plot names, but replace every space # with a new line to avoid overlapping labels plot_names = [dic["plot_name"] for dic in model_dics] - labels = [l.replace(" ", "\n") for l in plot_names] + labels = [label.replace(" ", "\n") for label in plot_names] return roce_scores, roce_no_overlap, fpr_colors, labels, bar_height diff --git a/nff/md/tully/ab_io.py b/nff/md/tully/ab_io.py index e3333bc7..48f01037 100644 --- a/nff/md/tully/ab_io.py +++ b/nff/md/tully/ab_io.py @@ -109,8 +109,8 @@ def render_all(config_name, jobspec, job_dir, num_parallel): def get_coords(nxyz): coords = [] - for l in nxyz: - this_coord = {"element": PERIODICTABLE.GetElementSymbol(int(l[0])), "x": l[1], "y": l[2], "z": l[3]} + for line in nxyz: + this_coord = {"element": PERIODICTABLE.GetElementSymbol(int(line[0])), "x": line[1], "y": line[2], "z": line[3]} coords.append(this_coord) return coords diff --git a/nff/md/tully/step.py b/nff/md/tully/step.py index 0b8a66db..603dfdbd 100644 --- a/nff/md/tully/step.py +++ b/nff/md/tully/step.py @@ -301,12 +301,12 @@ def get_implicit_diabat(c, elec_substeps, old_H_ad, new_H_ad, new_U, old_U, dt, S = np.einsum("...ki, ...kj -> ...ij", old_U, new_U)[:, :num_ad, :num_ad] s_t_s = np.einsum("...ji, ...jk -> ...ik", S, S) - lam, O = np.linalg.eigh(s_t_s) + lam, o = np.linalg.eigh(s_t_s) # in case any eigenvalues are 0 or slightly negative with np.errstate(divide="ignore", invalid="ignore"): lam_half = np.stack([np.diag(i ** (-1 / 2)) for i in lam]) - T = np.einsum("...ij, ...jk, ...kl, ...ml -> ...im", S, O, lam_half, O) + T = np.einsum("...ij, ...jk, ...kl, ...ml -> ...im", S, o, lam_half, o) # set T to the identity for any cases in which one of # the eigenvalues is 0 diff --git a/nff/md/zhu_nakamura/dynamics.py b/nff/md/zhu_nakamura/dynamics.py index 2b3f29b8..2c3a4c5a 100644 --- a/nff/md/zhu_nakamura/dynamics.py +++ b/nff/md/zhu_nakamura/dynamics.py @@ -1061,18 +1061,18 @@ def add_diabat_forces(self): # only store the diagonal diabatic forces diabat_forces = np.zeros((num_states, N[j], 3)) - for l in range(num_states): + for k in range(num_states): for m in range(num_states): - d_key = diabat_keys[l, m] + d_key = diabat_keys[k, m] diabat_en_kcal = results[d_key][j].item() diabat_en_au = diabat_en_kcal * KCAL_TO_AU["energy"] - diabat_ens[l, m] = diabat_en_au + diabat_ens[k, m] = diabat_en_au - if l == m: + if k == m: diabat_force_kcal = -(results[f"{d_key}_grad"][j].detach().cpu().numpy()) diabat_force_au = diabat_force_kcal * KCAL_TO_AU["energy"] * KCAL_TO_AU["_grad"] - diabat_forces[l, :] = diabat_force_au + diabat_forces[k, :] = diabat_force_au trj.diabat_ens = diabat_ens trj.diabat_forces = diabat_forces diff --git a/nff/nn/models/mace.py b/nff/nn/models/mace.py index 6b1b7aef..2a332c1d 100644 --- a/nff/nn/models/mace.py +++ b/nff/nn/models/mace.py @@ -547,10 +547,10 @@ def restore_foundations( original_weights_max.data[index, :, :] = torch.nn.Parameter(new_weights_max) original_weights_list = model_foundations.products[i].symmetric_contractions.contractions[j].weights - for l in range(num_contraction): # Assuming 2 weights in each contractions - original_weights = original_weights_list[l] + for n in range(num_contraction): # Assuming 2 weights in each contractions + original_weights = original_weights_list[n] for k, index in enumerate(indices_weights): - new_weights = model.products[i].symmetric_contractions.contractions[j].weights[l][k, :, :].clone() + new_weights = model.products[i].symmetric_contractions.contractions[j].weights[n][k, :, :].clone() original_weights.data[index, :, :] = torch.nn.Parameter(new_weights) model_foundations.products[i].linear.weight = torch.nn.Parameter(model.products[i].linear.weight.clone()) diff --git a/nff/nn/models/spooky_net_source/modules/interaction_module.py b/nff/nn/models/spooky_net_source/modules/interaction_module.py index 7e0a4ae6..0ad8247f 100644 --- a/nff/nn/models/spooky_net_source/modules/interaction_module.py +++ b/nff/nn/models/spooky_net_source/modules/interaction_module.py @@ -127,7 +127,7 @@ def forward( descriptors). """ x = self.residual_pre(x) - l = self.local_interaction(x, rbf, pij, dij, idx_i, idx_j) + local = self.local_interaction(x, rbf, pij, dij, idx_i, idx_j) n = self.nonlocal_interaction(x, num_batch, batch_seg, mask) - x = self.residual_post(x + l + n) + x = self.residual_post(x + local + n) return x, self.resblock(x) diff --git a/nff/nn/modules/spooky.py b/nff/nn/modules/spooky.py index abf847e6..c86e21bd 100644 --- a/nff/nn/modules/spooky.py +++ b/nff/nn/modules/spooky.py @@ -1,3 +1,5 @@ + +# ruff: noqa: E741 import time import torch diff --git a/nff/nn/modules/spooky_fast.py b/nff/nn/modules/spooky_fast.py index 1f16ede4..ac9634fd 100644 --- a/nff/nn/modules/spooky_fast.py +++ b/nff/nn/modules/spooky_fast.py @@ -1,3 +1,5 @@ + +# ruff: noqa: E741 import time import torch diff --git a/nff/utils/functions.py b/nff/utils/functions.py index 06487afa..b287e92b 100644 --- a/nff/utils/functions.py +++ b/nff/utils/functions.py @@ -6,6 +6,7 @@ layers/basis_utils.py. """ +# ruff: noqa: E741 import copy import math diff --git a/nff/utils/xyz2mol.py b/nff/utils/xyz2mol.py index 50e0de66..19061240 100644 --- a/nff/utils/xyz2mol.py +++ b/nff/utils/xyz2mol.py @@ -355,19 +355,19 @@ def BO2mol(mol, BO_matrix, atoms, atomic_valence_electrons, mol_charge, allow_ch """ - l = len(BO_matrix) + l1 = len(BO_matrix) l2 = len(atoms) BO_valences = list(BO_matrix.sum(axis=1)) - if l != l2: - raise RuntimeError(f"sizes of adjMat ({l:d}) and Atoms {l2:d} differ") + if l1 != l2: + raise RuntimeError(f"sizes of adjMat ({l1:d}) and Atoms {l2:d} differ") rwMol = Chem.RWMol(mol) bondTypeDict = {1: Chem.BondType.SINGLE, 2: Chem.BondType.DOUBLE, 3: Chem.BondType.TRIPLE} - for i in range(l): - for j in range(i + 1, l): + for i in range(l1): + for j in range(i + 1, l1): bo = int(round(BO_matrix[i, j])) if bo == 0: continue diff --git a/pyproject.toml b/pyproject.toml index cb8397a8..509a9f55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -144,7 +144,6 @@ ignore = [ "UP035", # deprecated Dict and List, but keep to support python<3.10 "UP006", # deprecated Dict and List, but keep to support python<3.10 "ICN001", # import name convention - "E741", # 'l' as variable name "UP031", # Use format specifiers instead of percent format "PD901", # dont name dataframes df "FA100", # from future suggestion From fc5eb5bfe67fb1c7db681bc6fbad67129aab2d4b Mon Sep 17 00:00:00 2001 From: steinmig Date: Thu, 6 Feb 2025 20:06:46 +0100 Subject: [PATCH 53/66] Update nff/nn/models/schnet.py --- nff/nn/models/schnet.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nff/nn/models/schnet.py b/nff/nn/models/schnet.py index 425011c2..913b241b 100644 --- a/nff/nn/models/schnet.py +++ b/nff/nn/models/schnet.py @@ -159,7 +159,7 @@ def V_ex(self, r_ij, nbr_list, xyz): def forward(self, batch, xyz=None, requires_stress=False, **kwargs): """Summary Args: - batch (dict): dictionary of propSchNetEdgeFilters + batch (dict): dictionary of props xyz (torch.tensor): (optional) coordinates Returns: From d67990ea226b89dfcb2b05f74b294d61283e5282 Mon Sep 17 00:00:00 2001 From: steinmig Date: Thu, 6 Feb 2025 20:08:51 +0100 Subject: [PATCH 54/66] Update nff/reactive_tools/nms.py --- nff/reactive_tools/nms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nff/reactive_tools/nms.py b/nff/reactive_tools/nms.py index d63ba8ec..6f75a5c9 100644 --- a/nff/reactive_tools/nms.py +++ b/nff/reactive_tools/nms.py @@ -88,7 +88,7 @@ def reactive_normal_mode_sampling( * np.sin(2 * np.pi * random_0_1[i]) * proj_hessian_eigvec[i] / Bohr**2 - ) + ) # todo: properly import / name / document units and unit conversions else: displacements.append(0) From bca445896ab60f8559ee5cd36ffda20a72a04131 Mon Sep 17 00:00:00 2001 From: steinmig Date: Thu, 6 Feb 2025 14:18:25 -0500 Subject: [PATCH 55/66] bring back star import --- nff/reactive_tools/reactive_langevin.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nff/reactive_tools/reactive_langevin.py b/nff/reactive_tools/reactive_langevin.py index 6afb72c6..b6ab0ddf 100644 --- a/nff/reactive_tools/reactive_langevin.py +++ b/nff/reactive_tools/reactive_langevin.py @@ -1,5 +1,7 @@ import numpy as np from ase.io import Trajectory +# todo check if this necessary, probably better to properly typehint and check the input arguments +from ase.md.langevin import * # noqa from ase.units import Ang, fs, kB, second from nff.md.utils import NeuralMDLogger, write_traj From d9f9dfd4ded4bd8633cd5e0d2ad6897feb99fb41 Mon Sep 17 00:00:00 2001 From: steinmig Date: Thu, 6 Feb 2025 14:30:18 -0500 Subject: [PATCH 56/66] overwrite from master --- nff/md/colvars.py | 347 +++++++++++++++++++++++++++------------------- nff/md/nve.py | 18 ++- 2 files changed, 221 insertions(+), 144 deletions(-) diff --git a/nff/md/colvars.py b/nff/md/colvars.py index ecd27c93..ff175b34 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -1,9 +1,16 @@ +"""This file contains a class that helps define collective variables +for running biased MD simulations with NFF. +""" + +from __future__ import annotations + import itertools from itertools import repeat -from typing import Union +from typing import TYPE_CHECKING import numpy as np import torch +from rdkit import Chem from torch import nn from torch.nn import ModuleDict @@ -11,6 +18,11 @@ from nff.utils.cuda import batch_to from nff.utils.scatter import compute_grad +if TYPE_CHECKING: + from ase import Atoms + + from nff.io.ase import AtomsBatch + class ColVar(torch.nn.Module): """collective variable class @@ -18,7 +30,7 @@ class ColVar(torch.nn.Module): computes cv and its Cartesian gradient """ - implemented_cvs = [ + implemented_cvs = [ # noqa: RUF012 "distance", "angle", "dihedral", @@ -36,8 +48,9 @@ class ColVar(torch.nn.Module): ] def __init__(self, info_dict: dict): - """initialization of many class variables to avoid recurrent assignment + """Initialization of many class variables to avoid recurrent assignment with every forward call + Args: info_dict (dict): dictionary that contains all the definitions of the CV, the common key is name, which defines the CV function @@ -52,12 +65,12 @@ def __init__(self, info_dict: dict): if self.info_dict["name"] not in self.implemented_cvs: raise NotImplementedError(f"The CV {self.info_dict['name']} is not implemented!") - if self.info_dict["name"] == "Sp" or self.info_dict["name"] == "Sd": + if self.info_dict["name"] in ["Sp", "Sd"]: self.Oacid = torch.tensor(self.info_dict["x"]) self.Owater = torch.tensor(self.info_dict["y"]) self.H = torch.tensor(self.info_dict["z"]) self.Box = torch.tensor(self.info_dict.get("box", None)) - self.O = torch.cat((Oacid, Owater)) + self.O = torch.cat((self.Oacid, self.Owater)) self.do = self.info_dict["dcv1"] self.d = self.info_dict["dcv2"] self.ro = self.info_dict["acidhyd"] @@ -78,9 +91,7 @@ def __init__(self, info_dict: dict): self.mol_inds = torch.LongTensor(self.info_dict["indices"]) self.reference_inds = self.info_dict["reference"] - elif ( - self.info_dict["name"] == "projecting_veconplane" or self.info_dict["name"] == "projecting_veconplanenormal" - ): + elif self.info_dict["name"] in ["projecting_veconplane", "projecting_veconplanenormal"]: self.mol_inds = torch.LongTensor(self.info_dict["mol_inds"]) self.ring_inds = torch.LongTensor(self.info_dict["ring_inds"]) @@ -97,8 +108,9 @@ def __init__(self, info_dict: dict): self.model = self.model.to(self.device) self.model.eval() - def _get_com(self, indices: Union[int, list]) -> torch.tensor: - """get center of mass (com) of group of atoms + def _get_com(self, indices: int | list[int]) -> torch.Tensor: + """Get center of mass (com) of group of atoms + Args: indices (Union[int, list]): atom index or list of atom indices Returns: @@ -119,11 +131,14 @@ def _get_com(self, indices: Union[int, list]) -> torch.tensor: return com - def distance(self, index_list: list[Union[int, list]]) -> torch.tensor: - """distance between two mass centers in range(0, inf) + def distance(self, index_list: list[int | list]) -> torch.Tensor: + """Distance between two mass centers in range(0, inf) + Args: - distance beteen atoms: [ind0, ind1] - distance between mass centers: [[ind00, ind01, ...], [ind10, ind11, ...]] + index_list (list): can be the distance beteen atoms ([ind0, ind1]) or + distance between mass centers (a list of lists) such + as [[ind00, ind01, ...], [ind10, ind11, ...]] + Returns: cv (torch.tensor): computed distance """ @@ -139,12 +154,14 @@ def distance(self, index_list: list[Union[int, list]]) -> torch.tensor: return cv - def angle(self, index_list: list[Union[int, list]]) -> torch.tensor: - """get angle between three mass centers in range(-pi,pi) + def angle(self, index_list: list[int | list]) -> torch.Tensor: + """Get angle between three mass centers in range(-pi,pi) + Args: - index_list + index_list (list): can be the angle between two atoms: [ind0, ind1, ind3] angle between centers of mass: [[ind00, ind01, ...], [ind10, ind11, ...], [ind20, ind21, ...]] + Returns: cv (torch.tensor): computed angle """ @@ -169,15 +186,17 @@ def angle(self, index_list: list[Union[int, list]]) -> torch.tensor: return cv - def dihedral(self, index_list: list[Union[int, list]]) -> torch.tensor: - """torsion angle between four mass centers in range(-pi,pi) - Params: - self.info_dict['index_list'] + def dihedral(self, index_list: list[int | list]) -> torch.Tensor: + """Torsion angle between four mass centers in range(-pi,pi) + + Args: + index_list (list): can be the dihedral between atoms: [ind0, ind1, ind2, ind3] dihedral between center of mass: [[ind00, ind01, ...], [ind10, ind11, ...], [ind20, ind21, ...], [ind30, ind 31, ...]] + Returns: cv (float): computed torsional angle """ @@ -203,11 +222,14 @@ def dihedral(self, index_list: list[Union[int, list]]) -> torch.tensor: return cv - def coordination_number(self, index_list: list[int], switch_distance: float) -> torch.tensor: - """coordination number between two atoms in range(0, 1) + def coordination_number(self, index_list: list[int], switch_distance: float) -> torch.Tensor: + """Coordination number between two atoms in range(0, 1) + Args: - distance between atoms: [ind00, ind01] - switch_distance: value at which the switching function is 0.5 + index_list (list): the indices of the atoms defining the coordination number as a + list of ints: [ind00, ind01] + switch_distance: value at which the switching function is 0.5 + Returns: cv (torch.tensor): computed distance """ @@ -220,11 +242,14 @@ def coordination_number(self, index_list: list[int], switch_distance: float) -> return cv - def coordination(self, index_list: list[list[int]], switch_distance: float) -> torch.tensor: - """sum of coordination numbers between two sets of atoms in range(0, 1) + def coordination(self, index_list: list[list[int]], switch_distance: float) -> torch.Tensor: + """Sum of coordination numbers between two sets of atoms in range(0, 1) + Args: - distance between atoms: [[ind00, ind01, ...], [ind10, ind11, ...]] - switch_distance: value at which the switching function is 0.5 + index_list (list): a list of lists of atom indices such as + [[ind00, ind01, ...], [ind10, ind11, ...]] + switch_distance: value at which the switching function is 0.5 + Returns: cv (torch.tensor): computed distance """ @@ -238,10 +263,13 @@ def coordination(self, index_list: list[list[int]], switch_distance: float) -> t return cv - def minimal_distance(self, index_list: list[list[int]]) -> torch.tensor: - """minimal distance between two sets of atoms + def minimal_distance(self, index_list: list[list[int]]) -> torch.Tensor: + """Minimal distance between two sets of atoms + Args: - distance between atoms: [[ind00, ind01, ...], [ind10, ind11, ...]] + index_list (list): used to determine the distance between atoms, in the format + [[ind00, ind01, ...], [ind10, ind11, ...]] + Returns: cv (torch.tensor): computed distance """ @@ -255,18 +283,9 @@ def minimal_distance(self, index_list: list[list[int]]) -> torch.tensor: return distances.min() - def projecting_centroidvec(self): - """ - Projection of a position vector onto a reference vector + def projecting_centroidvec(self) -> torch.Tensor: + """Projection of a position vector onto a reference vector Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - vector: list of int - List of the indices of atoms that define the vector on which the position vector is projected - indices: list if int - List of indices of the mol/fragment - reference: list of int - List of atomic indices that are used as reference for the position vector """ vector_pos = self.xyz[self.vector_inds] vector = vector_pos[1] - vector_pos[0] @@ -281,20 +300,19 @@ def projecting_centroidvec(self): rel_mol_pos = mol_centroid - reference_centroid # projection - cv = torch.dot(rel_mol_pos, vector) - return cv + return torch.dot(rel_mol_pos, vector) - def projecting_veconplane(self): - """ - Projection of a position vector onto a the average plane + def projecting_veconplane(self) -> torch.Tensor: + """Projection of a position vector onto a the average plane of an arbitrary ring defined in the structure Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - mol_inds: list of int - List of indices of the mol/fragment tracked by the CV - ring_inds: list of int - List of atomic indices of the ring for which the average plane is calculated. + + Args: + mol_inds (list[int]): List of indices of the mol/fragment tracked by the CV + ring_inds (list[int]): List of atomic indices of the ring for which the average plane is calculated. + + Returns: + cv (torch.tensor): tensor for the computed CV """ mol_coors = self.xyz[self.mol_inds] ring_coors = self.xyz[self.ring_inds] @@ -322,19 +340,18 @@ def projecting_veconplane(self): cv = torch.dot(pos_vec, plane_vec) return cv - def projecting_veconplanenormal(self): - """ - Projection of a position vector onto the average plane + def projecting_veconplanenormal(self) -> torch.Tensor: + """Projection of a position vector onto the average plane of an arbitrary ring defined in the structure Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - mol_inds: list of int - List of indices of the mol/fragment tracked by the CV - ring_inds: list of int - List of atomic indices of the ring for which the average plane is calculated. - """ + Args: + mol_inds (list[int]): List of indices of the mol/fragment tracked by the CV + ring_inds (list[int]): List of atomic indices of the ring for which the average plane is calculated. + + Returns: + cv (torch.tensor): tensor for the computed CV + """ mol_coors = self.xyz[self.mol_inds] ring_coors = self.xyz[self.ring_inds] @@ -365,22 +382,19 @@ def projecting_veconplanenormal(self): cv = proj1 + proj2 return torch.abs(cv) - def projection_channelnormal(self): - """ - Projection of a position vector onto the vector + def projection_channelnormal(self) -> torch.Tensor: + """Projection of a position vector onto the vector along a channel Atomic indices are used to determine the coordiantes of the vectors. - Params - ------ - mol_inds: list of int - List of indices of the mol/fragment tracked by the CV - g1_inds: list of int - List of atomic indices denoting "start" of channel - g2_inds: list of int - List of atomic indices denoting "end" of channel - """ - self.xyz[self.mol_inds] + Args: + mol_inds (list[int]): List of indices of the mol/fragment tracked by the CV + g1_inds (list[int]): List of atomic indices denoting "start" of channel + g2_inds (list[int]): List of atomic indices denoting "end" of channel + + Returns: + cv (torch.tensor): tensor for the computed CV + """ g1_coors = self.xyz[self.g1_inds] g2_coors = self.xyz[self.g2_inds] @@ -395,8 +409,12 @@ def projection_channelnormal(self): cv = torch.dot(rel_pos, normal_vec) return cv - def adjacency_matrix_cv(self): - """Docstring""" + def adjacency_matrix_cv(self) -> torch.Tensor: + """Create the adjacency matrix for for a given structure as the CV + + Returns: + cv (torch.tensor): computed adjacency matrix + """ edges, atomslist, Natoms, adjacency_matrix = get_adjacency_matrix( self.xyz, self.atom_numbers, self.bond_length, cell=self.cell, device=self.device ) @@ -407,17 +425,19 @@ def adjacency_matrix_cv(self): return cv - def deproton1(self): + def deproton1(self) -> torch.Tensor: """Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 https://www.pnas.org/doi/10.1073/pnas.1819771116 Sp describes the proton exchange between acid-base pairs - """ + Returns: + cv (torch.tensor): computed Sp + """ dis_mat = self.xyz[None, :, :] - self.xyz[:, None, :] - if Box is not None: - cell_dim = Box.to(dis_mat.device) + if self.Box is not None: + cell_dim = self.Box.to(dis_mat.device) shift = torch.round(torch.divide(dis_mat, cell_dim)) offsets = -shift dis_mat = dis_mat + offsets * cell_dim @@ -425,7 +445,6 @@ def deproton1(self): dis_sq = torch.linalg.norm(dis_mat, dim=-1) dis = dis_sq[self.O, :][:, self.H] - dis_sq[self.Oacid, :][:, self.Owater] cvmatrix = torch.exp(-self.do * dis) cvmatrix = cvmatrix / cvmatrix.sum(0) cvmatrixw = cvmatrix[self.Oacid.shape[0] :].sum(-1) - self.r1 @@ -434,17 +453,19 @@ def deproton1(self): return cv1 - def deproton2(self): + def deproton2(self) -> torch.Tensor: """Emanuele Grifoni, GiovanniMaria Piccini, and Michele Parrinello, PNAS (2019), 116 (10) 4054-40 https://www.pnas.org/doi/10.1073/pnas.1819771116 - Sd describes tge distance between acid-base pairs - """ + Sd describes the distance between acid-base pairs + Returns: + cv2 (torch.tensor): computed distance + """ dis_mat = self.xyz[None, :, :] - self.xyz[:, None, :] - if Box is not None: - cell_dim = Box.to(dis_mat.device) + if self.Box is not None: + cell_dim = self.Box.to(dis_mat.device) shift = torch.round(torch.divide(dis_mat, cell_dim)) offsets = -shift dis_mat = dis_mat + offsets * cell_dim @@ -458,23 +479,22 @@ def deproton2(self): cvmatrixx = cvmatrixx / cvmatrixx.sum(0) cvmatrixw = cvmatrixx[self.Oacid.shape[0] :].sum(-1) - self.r1 cvmatrix = cvmatrixx[: self.Oacid.shape[0]].sum(-1) - self.ro - torch.cat((cvmatrix, cvmatrixw)) cvmatrix2 = torch.matmul(cvmatrix.view(1, -1).t(), cvmatrixw.view(1, -1)) cvmatrix2 = -cvmatrix2 * dis1 cv2 = cvmatrix2.sum() return cv2 - def energy_gap(self, enkey1, enkey2): - """get energy gap betweentwo adiabatic PES + def energy_gap(self, enkey1: str, enkey2: str): + """Get energy gap between two adiabatic PES + Args: enkey1 (str): key of one adiabatic PES enkey2 (str): key of the other PES Returns: - cv (torch.tensor): computed energy gap + cv (torch.tensor): computed energy gap """ - batch = batch_to(self.atoms.get_batch(), self.device) pred = self.model(batch, device=self.device) energy_1 = pred[enkey1] @@ -488,9 +508,15 @@ def energy_gap(self, enkey1, enkey2): return cv, cv_grad - def forward(self, atoms): - """switch function to call the right CV-func""" + def forward(self, atoms: Atoms) -> tuple[np.ndarray, np.ndarray]: + """Switch function to call the right CV-func + Args: + atoms (Atoms): ASE Atoms object + + Returns: + cv (np.ndarray): computed CV + """ self.xyz = torch.from_numpy(atoms.get_positions()) self.xyz.requires_grad = True @@ -552,16 +578,14 @@ def forward(self, atoms): # implement SMILES to graph function def smiles2graph(smiles): - """ - Transfrom smiles into a list nodes (atomic number) + """Transfrom smiles into a list nodes (atomic number) Args: smiles (str): SMILES strings - return: + Return: z(np.array), A (np.array): list of atomic numbers, adjancency matrix """ - mol = Chem.MolFromSmiles(smiles) # no hydrogen z = np.array([atom.GetAtomicNum() for atom in mol.GetAtoms()]) A = np.stack(Chem.GetAdjacencyMatrix(mol)) @@ -570,26 +594,32 @@ def smiles2graph(smiles): class GraphDataset(torch.utils.data.Dataset): - def __init__(self, AtomicNum_list, Edge_list, Natom_list, Adjacency_matrix_list): - """ - GraphDataset object - - Args: - z_list (list of torch.LongTensor) - a_list (list of torch.LongTensor) - N_list (list of int) + """Class for datasets of graphs""" + def __init__( + self, + AtomicNum_list: list[torch.LongTensor], + Edge_list: list[torch.LongTensor], + Natom_list: list[int], + Adjacency_matrix_list: list, + ) -> None: + """GraphDataset object + Args: + AtomicNum_list (list of torch.LongTensor): list of atomic numbers + Edge_list (list of torch.LongTensor): list of edges in the graph + Natom_list (list of int): list of number of atoms in each graph + Adjacency_matrix_list (list of torch.LongTensor): list of adjacency matrices """ self.AtomicNum_list = AtomicNum_list # atomic number self.Edge_list = Edge_list # edge list self.Natom_list = Natom_list # Number of atoms self.Adjacency_matrix_list = Adjacency_matrix_list - def __len__(self): + def __len__(self): # noqa: D105 return len(self.Natom_list) - def __getitem__(self, idx): + def __getitem__(self, idx): # noqa: D105 AtomicNum = torch.LongTensor(self.AtomicNum_list[idx]) Edge = torch.LongTensor(self.Edge_list[idx]) Natom = self.Natom_list[idx] @@ -598,18 +628,15 @@ def __getitem__(self, idx): return AtomicNum, Edge, Natom, Adjacency_matrix -def collate_graphs(batch): +def collate_graphs(batch: tuple) -> tuple: """Batch multiple graphs into one batched graph Args: - batch (tuple): tuples of AtomicNum, Edge, Natom obtained from GraphDataset.__getitem__() - Return - (tuple): Batched AtomicNum, Edge, Natom - + Return: + tuple: Batched AtomicNum, Edge, Natom """ - AtomicNum_batch = [] Edge_batch = [] Natom_batch = [] @@ -633,12 +660,10 @@ def collate_graphs(batch): return AtomicNum_batch, Edge_batch, Natom_batch, Adjacency_matrix_batch -def scatter_add(src, index, dim_size, dim=-1, fill_value=0): - """ - Sums all values from the src tensor into out at the indices specified in the index +def scatter_add(src, index: torch.Tensor, dim_size: int, dim: int = -1, fill_value: int = 0) -> torch.Tensor: + """Sums all values from the src tensor into out at the indices specified in the index tensor along a given axis dim. """ - index_size = list(repeat(1, src.dim())) index_size[dim] = src.size(dim) index = index.view(index_size).expand_as(src) @@ -653,11 +678,9 @@ def scatter_add(src, index, dim_size, dim=-1, fill_value=0): class GNN(torch.nn.Module): - """ - A GNN model - """ + """A GNN model""" - def __init__(self, n_convs=3, n_embed=64): + def __init__(self, n_convs=3, n_embed=64): # noqa: D107 super().__init__() self.atom_embed = nn.Embedding(100, n_embed) # Declare MLPs in a ModuleList @@ -679,7 +702,7 @@ def __init__(self, n_convs=3, n_embed=64): # Declare readout layers # self.readout = nn.Sequential(nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, 1)) - def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): + def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): # noqa: D102 ################ Code ################# # Parametrize embedding @@ -687,8 +710,9 @@ def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): for conv in self.convolutions: messagei2j = conv.message_mlp(h[Edge[0]] * h[Edge[1]]) messagei2j = messagei2j * adjacency_matrix - # + scatter_add(src=messagei2j, index=Edge[0], dim=0, dim_size=len(AtomicNum)) - node_message = scatter_add(src=messagei2j, index=Edge[1], dim=0, dim_size=len(AtomicNum)) + node_message = scatter_add( + src=messagei2j, index=Edge[1], dim=0, dim_size=len(AtomicNum) + ) # + scatter_add(src=messagei2j, index=Edge[0], dim=0, dim_size=len(AtomicNum)) h = h + conv.update_mlp(node_message) output = [split.sum(0) for split in torch.split(h, Natom)] @@ -696,19 +720,40 @@ def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): return output -def adjfunc(x, m, s): +def adjfunc(x, m, s): # noqa: D103 return 4 / ((torch.exp(s * (x - m)) + 1) * (torch.exp((-s) * (x - m)) + 1)) -def gauss(x, m, s, a, b): +def gauss(x, m, s, a, b): # noqa: D103 # return torch.exp(-abs((x-m)/2*s)**p) G = (1 + (2 ** (a / b) - 1) * abs((x - m) / s) ** a) ** (-b / a) G[torch.where(x < m)] = 1 return G -def get_adjacency_matrix(xyz, atom_numbers, bond_length, oxygeninvolved, cell=None, device="cpu"): - list(set(atom_numbers)) +def get_adjacency_matrix( + xyz: list | torch.Tensor, + atom_numbers: torch.Tensor, + bond_length: dict, + oxygeninvolved: list[int], + cell: torch.Tensor | None = None, + device: str = "cpu", +) -> tuple[torch.LongTensor, torch.LongTensor, list[int], torch.Tensor]: + """Get the adjacency matrix of a molecule + + Args: + xyz (list | torch.Tensor): the xyz coordinates of the atoms + atom_numbers (torch.Tensor): the atomic numbers of the atoms + bond_length (dict): the bond lengths of the atoms in the format "atom1-atom2" + for each key, the value is the bond length + oxygeninvolved (list[int]): list of indices of the oxygen atoms + cell (torch.Tensor | None, optional): The dimensions of the lattice if the system + is periodic. Defaults to None. + device (str, optional): the device to use. Defaults to "cpu". + + Returns: + tuple[torch.LongTensor, torch.LongTensor, list[int], torch.Tensor]: _description_ + """ dis_mat = xyz[None, :, :] - xyz[:, None, :] if cell is not None: cell_dim = torch.tensor(np.diag(cell)) @@ -738,7 +783,9 @@ def get_adjacency_matrix(xyz, atom_numbers, bond_length, oxygeninvolved, cell=No torch.where(adjacency_matrix >= 0)[0], torch.where(adjacency_matrix >= 0)[1] ].view(-1, 1) atomslist = torch.tensor([14 for i in torch.where(atom_numbers == 14)[0]]).view(-1) - # molecules,edge_list,atom_list=get_molecules(xyz=xyz.detach(),atom_numbers=atom_numbers,bond_length=bond_length,periodic=False) + # molecules,edge_list,atom_list=get_molecules( + # xyz=xyz.detach(),atom_numbers=atom_numbers,bond_length=bond_length,periodic=False + # ) # adjacency_matrix_list=[] # print(compute_grad(xyz,dis_sq[0,1])) # for i,m in enumerate(molecules): @@ -752,12 +799,23 @@ def get_adjacency_matrix(xyz, atom_numbers, bond_length, oxygeninvolved, cell=No ) -def get_molecules(atom, bond_length, mode="bond", periodic=True): +def get_molecules(atom: AtomsBatch, bond_length: dict, mode: str = "bond", periodic: bool = True) -> list: + """Get the molecules in the system from the Atoms object + + Args: + atom (AtomsBatch): Atoms from which to extract the molecules + bond_length (dict): Dictionary of bond lengths + mode (str, optional): Mode of identifying distinct molecules. Defaults to "bond". + periodic (bool, optional): Whehter or not the Atoms are periodic. Defaults to True. + + Returns: + list: the molecules in the system + """ types = list(set(atom.numbers)) xyz = atom.positions # A=np.lexsort((xyz[:,2],xyz[:,1],xyz[:,0])) dis_mat = xyz[None, :, :] - xyz[:, None, :] - if periodic: + if periodic is True: cell_dim = np.diag(np.array(atom.get_cell())) shift = np.round(np.divide(dis_mat, cell_dim)) offsets = -shift @@ -771,11 +829,11 @@ def get_molecules(atom, bond_length, mode="bond", periodic=True): oxy_neighbors = [] if mode == "bond": for t in types: - if bond_length.get("%s-%s" % (ty, t)) is not None: + if bond_length.get(f"{ty}-{t}") is not None: oxy_neighbors.extend( list( np.where(atom.numbers == t)[0][ - np.where(dis_sq[i, np.where(atom.numbers == t)[0]] <= bond_length["%s-%s" % (ty, t)])[0] + np.where(dis_sq[i, np.where(atom.numbers == t)[0]] <= bond_length[f"{ty}-{t}"])[0] ] ) ) @@ -812,7 +870,18 @@ def get_molecules(atom, bond_length, mode="bond", periodic=True): return molecules -def reconstruct_atoms(atomsobject, mol_idx, centre=None): +def reconstruct_atoms(atomsobject: Atoms | AtomsBatch, mol_idx: list, centre: torch.Tensor | None = None) -> np.ndarray: + """Reconstruct the atoms in the system + + Args: + atomsobject (Atoms | AtomsBatch): The Atoms object to reconstruct + mol_idx (list): The indices of the molecules to reconstruct + centre (torch.Tensor | None, optional): A manual center of the atoms. If unspecified, + calculated within the function. Defaults to None. + + Returns: + np.ndarray: the new positions of the atoms + """ sys_xyz = torch.Tensor(atomsobject.get_positions(wrap=True)) box_len = torch.Tensor(atomsobject.get_cell_lengths_and_angles()[:3]) @@ -832,8 +901,8 @@ def reconstruct_atoms(atomsobject, mol_idx, centre=None): offsets = -torch.floor(f + 0.5).view(M, 3) traj_unwrap = mol_xyz + torch.matmul(offsets, torch.Tensor(atomsobject.cell)) else: - (intra_dmat > 0.5 * box_len).to(torch.float) * box_len - (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len + # sub = (intra_dmat > 0.5 * box_len).to(torch.float) * box_len + # add = (intra_dmat <= -0.5 * box_len).to(torch.float) * box_len shift = torch.round(torch.divide(intra_dmat, box_len)) offsets = -shift traj_unwrap = mol_xyz + offsets * box_len diff --git a/nff/md/nve.py b/nff/md/nve.py index ed65060d..ffb54d46 100644 --- a/nff/md/nve.py +++ b/nff/md/nve.py @@ -86,7 +86,10 @@ def __init__( interval=self.mdparam["save_frequency"], ) - def check_restart(self): + def check_restart(self) -> int: + """Check if the MD path is being restarted from an existing traj file and adjust the number of + steps accordingly. + """ if os.path.exists(self.mdparam["traj_filename"]): new_atoms = Trajectory(self.mdparam["traj_filename"])[-1] @@ -146,7 +149,6 @@ def setup_restart(self, restart_param): Args: restart_param (dict): dictionary to contains restart paramsters and file paths """ - if restart_param["thermo_filename"] == self.mdparam["thermo_filename"]: raise ValueError( "{} is also used, \ @@ -188,7 +190,11 @@ def setup_restart(self, restart_param): self.mdparam["steps"] = restart_param["steps"] - def run(self): + def run(self) -> None: + """Run the MD simulation for the specified number of steps. If the stability_check + parameter is set to True, the simulation will run until the temperature is within + reasonable bounds. The neighbor list is updated every nbr_list_update_freq steps. + """ epochs = int(self.steps // self.mdparam["nbr_list_update_freq"]) # In case it had neighbors that didn't include the cutoff skin, # for example, it's good to update the neighbor list here @@ -197,8 +203,10 @@ def run(self): if self.mdparam.get("stability_check", False): for _step in range(epochs): T = self.atomsbatch.get_batch_kinetic_energy() / (1.5 * units.kB * self.atomsbatch.num_atoms) - if ((10 * self.mdparam["thermostat_params"]["temperature"] / units.kB) < T).any() or ( - (T < 1e-1).any() and self.mdparam.get("stability_check", False) + if ( + ((10 * self.mdparam["thermostat_params"]["temperature"] / units.kB) < T).any() + or (T < 1e-1).any() + and self.mdparam.get("stability_check", False) ): break From 94f9788dfa9fbb3070c4acc9df8dfc53909afb94 Mon Sep 17 00:00:00 2001 From: steinmig Date: Thu, 6 Feb 2025 14:31:38 -0500 Subject: [PATCH 57/66] pass ruff checks --- nff/md/colvars.py | 14 +++++++------- nff/md/nve.py | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/nff/md/colvars.py b/nff/md/colvars.py index ff175b34..a0ea768e 100644 --- a/nff/md/colvars.py +++ b/nff/md/colvars.py @@ -30,7 +30,7 @@ class ColVar(torch.nn.Module): computes cv and its Cartesian gradient """ - implemented_cvs = [ # noqa: RUF012 + implemented_cvs = [ "distance", "angle", "dihedral", @@ -616,10 +616,10 @@ def __init__( self.Natom_list = Natom_list # Number of atoms self.Adjacency_matrix_list = Adjacency_matrix_list - def __len__(self): # noqa: D105 + def __len__(self): return len(self.Natom_list) - def __getitem__(self, idx): # noqa: D105 + def __getitem__(self, idx): AtomicNum = torch.LongTensor(self.AtomicNum_list[idx]) Edge = torch.LongTensor(self.Edge_list[idx]) Natom = self.Natom_list[idx] @@ -680,7 +680,7 @@ def scatter_add(src, index: torch.Tensor, dim_size: int, dim: int = -1, fill_val class GNN(torch.nn.Module): """A GNN model""" - def __init__(self, n_convs=3, n_embed=64): # noqa: D107 + def __init__(self, n_convs=3, n_embed=64): super().__init__() self.atom_embed = nn.Embedding(100, n_embed) # Declare MLPs in a ModuleList @@ -702,7 +702,7 @@ def __init__(self, n_convs=3, n_embed=64): # noqa: D107 # Declare readout layers # self.readout = nn.Sequential(nn.Linear(n_embed, n_embed), nn.ReLU(), nn.Linear(n_embed, 1)) - def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): # noqa: D102 + def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): ################ Code ################# # Parametrize embedding @@ -720,11 +720,11 @@ def forward(self, AtomicNum, Edge, Natom, adjacency_matrix): # noqa: D102 return output -def adjfunc(x, m, s): # noqa: D103 +def adjfunc(x, m, s): return 4 / ((torch.exp(s * (x - m)) + 1) * (torch.exp((-s) * (x - m)) + 1)) -def gauss(x, m, s, a, b): # noqa: D103 +def gauss(x, m, s, a, b): # return torch.exp(-abs((x-m)/2*s)**p) G = (1 + (2 ** (a / b) - 1) * abs((x - m) / s) ** a) ** (-b / a) G[torch.where(x < m)] = 1 diff --git a/nff/md/nve.py b/nff/md/nve.py index ffb54d46..46efac23 100644 --- a/nff/md/nve.py +++ b/nff/md/nve.py @@ -205,8 +205,8 @@ def run(self) -> None: T = self.atomsbatch.get_batch_kinetic_energy() / (1.5 * units.kB * self.atomsbatch.num_atoms) if ( ((10 * self.mdparam["thermostat_params"]["temperature"] / units.kB) < T).any() - or (T < 1e-1).any() - and self.mdparam.get("stability_check", False) + or ((T < 1e-1).any() + and self.mdparam.get("stability_check", False)) ): break From d0f3cd97ab9940354ac8f40b8d635a208c2bd609 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 18 Apr 2025 21:02:57 -0400 Subject: [PATCH 58/66] ENH: add catch for ASE version to run dynamics - add function that identifies the ASE version of the user and calls `Dynamics.run()` appropriately based on that version - update all calls to `Dynamics.run()` within the NFF `nvt.py` file --- nff/md/nvt.py | 50 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/nff/md/nvt.py b/nff/md/nvt.py index 96779a17..bd471976 100644 --- a/nff/md/nvt.py +++ b/nff/md/nvt.py @@ -2,18 +2,56 @@ import math import os import pickle +import warnings from typing import Optional +import ase import numpy as np from ase import units from ase.md.logger import MDLogger from ase.md.md import MolecularDynamics from ase.md.velocitydistribution import MaxwellBoltzmannDistribution, Stationary, ZeroRotation from ase.optimize.optimize import Dynamics +from packaging.version import Version, parse from tqdm import tqdm from nff.io.ase import AtomsBatch +ASE_VERSION = parse(ase.__version__) +ASE_CUTOFF_VERSION = parse("3.23.0") + + +def run_with_ase_check( + integrator: MolecularDynamics, + steps_per_epoch: int, + ase_ver: Version = ASE_VERSION, + ase_cut: Version = ASE_CUTOFF_VERSION, +) -> None: + """Run the ASE dynamics with a check for the ASE version. ASE v3.23 has updated + the `run` method in the `Dynamics` class, so we need to check for the version + and run the appropriate method. This function will be deprecated in the future, + as ASE v3.23 will be the minimum version required for htvs, and contains a warning + to that effect. + Args: + integrator (MolecularDynamics): ASE integrator object or thermostat like NoseHoover + steps_per_epoch (int): number of steps per epoch + ase_ver (Version): ASE version + ase_cut (Version): ASE cutoff version where Dynamics approach was changed + Raises: + DeprecationWarning: if the ASE version is less than 3.23 + """ + if ase_ver < ase_cut: + warnings.warn( + f"ASE version {ase_ver} uses outdated `run` method in" + " its `Dynamics` class. Please update to a newer version of ASE as this" + " method will be deprecated in htvs in the future.", + DeprecationWarning, + stacklevel=2, + ) + Dynamics.run(integrator) + else: + Dynamics.run(integrator, steps=steps_per_epoch) + class NoseHoover(MolecularDynamics): def __init__( @@ -154,7 +192,7 @@ def run(self, steps=None): for _ in tqdm(range(epochs)): self.max_steps += steps_per_epoch - Dynamics.run(self) + run_with_ase_check(self, steps_per_epoch) self.atoms.update_nbr_list() @@ -382,7 +420,7 @@ def run(self, steps=None): for _ in tqdm(range(epochs)): self.max_steps += steps_per_epoch - Dynamics.run(self) + run_with_ase_check(self, steps_per_epoch) x = self.atoms.get_positions(wrap=True) self.atoms.set_positions(x) @@ -567,7 +605,7 @@ def run(self, steps=None): for _ in tqdm(range(epochs)): self.max_steps += steps_per_epoch - Dynamics.run(self) + run_with_ase_check(self, steps_per_epoch) self.atoms.update_nbr_list() momenta = [] @@ -733,7 +771,7 @@ def run(self, steps=None): for _ in tqdm(range(epochs)): self.max_steps += steps_per_epoch - Dynamics.run(self) + run_with_ase_check(self, steps_per_epoch) self.atoms.update_nbr_list() Stationary(self.atoms) ZeroRotation(self.atoms) @@ -821,7 +859,7 @@ def run(self, steps=None): # set hydrogen mass to 2 AMU (deuterium, following Grimme's mTD approach) self.increase_h_mass() - Dynamics.run(self) + run_with_ase_check(self, steps_per_epoch) # reset the masses self.decrease_h_mass() @@ -965,7 +1003,7 @@ def run(self, steps=None): for _ in range(epochs): self.max_steps += steps_per_epoch - Dynamics.run(self) + run_with_ase_check(self, steps_per_epoch) self.atoms.update_nbr_list() From 679e1505903b9b31290eece55ca14720695d1832 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 18 Apr 2025 21:04:28 -0400 Subject: [PATCH 59/66] TST: add test for ASE version dynamics run The test checks that the dynamics run properly (creating the output files correctly) and within a short period of time (to ensure that the default 100-million steps that the ASE dynamics uses by default does not occur). --- nff/tests/dynamics_test.py | 127 +++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index a576f4e1..9457d508 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -1,14 +1,20 @@ import copy +import os import pickle import random +import unittest as ut from datetime import datetime import numpy as np +import pytest import torch from ase.io.trajectory import Trajectory from torch.utils.data import DataLoader from nff.data import Dataset, collate_dicts +from nff.io.ase import AtomsBatch +from nff.io.ase_calcs import NeuralFF +from nff.md.nvt import Langevin from nff.md.nvt_ax import NoseHoover, NoseHooverChain from nff.md.utils_ax import ZhuNakamuraLogger, atoms_to_nxyz, mol_dot, mol_norm from nff.train import load_model @@ -18,11 +24,94 @@ HBAR = 1 OUT_FILE = "trj.csv" LOG_FILE = "trj.log" +ETHANOL_MODEL_PATH = "../../tutorials/sandbox_painn/best_model" METHOD_DIC = {"nosehoover": NoseHoover, "nosehooverchain": NoseHooverChain} +def get_directed_ethanol(): + """Returns an ethanol molecule. + + Returns: + ethanol (Atoms) + """ + props = { + "nxyz": torch.Tensor( + [ + [6.0000e00, 5.5206e-03, 5.9149e-01, -8.1382e-04], + [6.0000e00, -1.2536e00, -2.5536e-01, -2.9801e-02], + [8.0000e00, 1.0878e00, -3.0755e-01, 4.8230e-02], + [1.0000e00, 6.2821e-02, 1.2838e00, -8.4279e-01], + [1.0000e00, 6.0567e-03, 1.2303e00, 8.8535e-01], + [1.0000e00, -2.2182e00, 1.8981e-01, -5.8160e-02], + [1.0000e00, -9.1097e-01, -1.0539e00, -7.8160e-01], + [1.0000e00, -1.1920e00, -7.4248e-01, 9.2197e-01], + [1.0000e00, 1.8488e00, -2.8632e-02, -5.2569e-01], + ] + ), + "energy": torch.tensor(-4.3701), + "energy_grad": torch.Tensor( + [ + [10.2030, -33.6563, 1.9132], + [-59.5878, 42.4086, 10.0746], + [-36.9785, 2.0060, 18.7998], + [-1.8185, 5.6604, 4.6715], + [-1.8685, 0.9660, -1.9927], + [11.0286, -11.6878, 18.4956], + [38.0142, -24.5804, -16.6240], + [5.8505, 15.7041, -12.9981], + [35.1569, 3.1794, -22.3399], + ] + ), + "smiles": "CCO", + "num_atoms": torch.tensor(9), + "nbr_list": torch.Tensor( + [ + [0, 1], + [0, 2], + [0, 3], + [0, 4], + [0, 5], + [0, 6], + [0, 7], + [0, 8], + [1, 2], + [1, 3], + [1, 4], + [1, 5], + [1, 6], + [1, 7], + [1, 8], + [2, 3], + [2, 4], + [2, 5], + [2, 6], + [2, 7], + [2, 8], + [3, 4], + [3, 5], + [3, 6], + [3, 7], + [3, 8], + [4, 5], + [4, 6], + [4, 7], + [4, 8], + [5, 6], + [5, 7], + [5, 8], + [6, 7], + [6, 8], + [7, 8], + ] + ), + "charge": torch.tensor(0.0), + "spin": torch.tensor(0.0), + } + return AtomsBatch(positions=props["nxyz"][:, 1:], directed=True, numbers=props["nxyz"][:, 0], props=props) + + class ZhuNakamuraDynamics(ZhuNakamuraLogger): """ Class for running Zhu-Nakamura surface-hopping dynamics. This method follows the description in @@ -974,3 +1063,41 @@ def run(self): ) batched_zn.run() + + +class TestLangevin: + def setup_method(self): + self.ethanol = get_directed_ethanol() + self.model = NeuralFF.from_file(ETHANOL_MODEL_PATH, device="cpu") + self.ethanol.set_calculator(self.model) + if os.path.exists("langevin.traj"): + os.remove("langevin.traj") + if os.path.exists("langevin.log"): + os.remove("langevin.log") + + @pytest.mark.timeout(30) + def test_langevin(self): + # Set up Langevin dynamics + my_dt = 1.0 # fs + my_temp = 100 # K + my_friction = 1.0 + logfile = "langevin.log" + + dyn = Langevin( + self.ethanol, + timestep=my_dt, + temperature=my_temp, + friction=my_friction, + maxwell_temp=my_temp, + logfile=logfile, + trajectory="langevin.traj", + ) + dyn.run(steps=40) + + # Check that the trajectory file was created + assert os.path.exists("langevin.traj") + assert os.path.exists("langevin.log") + + +if __name__ == "__main__": + ut.main() From 511bf37009eb0761a40eb3e2f4195daffc50a83a Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 18 Apr 2025 21:23:22 -0400 Subject: [PATCH 60/66] TST: update model path --- nff/tests/dynamics_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index 9457d508..9d24c4e5 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -24,7 +24,7 @@ HBAR = 1 OUT_FILE = "trj.csv" LOG_FILE = "trj.log" -ETHANOL_MODEL_PATH = "../../tutorials/sandbox_painn/best_model" +ETHANOL_MODEL_PATH = "../../tutorials/models/cco_1/best_model" # Simon's SchNet model METHOD_DIC = {"nosehoover": NoseHoover, "nosehooverchain": NoseHooverChain} From 7dc678876df7b8098868b9cdb0561676a308ef8f Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 18 Apr 2025 22:10:56 -0400 Subject: [PATCH 61/66] TST: update ethanol model path with pathlib --- nff/tests/dynamics_test.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index 9d24c4e5..48e26e66 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -4,6 +4,7 @@ import random import unittest as ut from datetime import datetime +from pathlib import Path import numpy as np import pytest @@ -24,7 +25,10 @@ HBAR = 1 OUT_FILE = "trj.csv" LOG_FILE = "trj.log" -ETHANOL_MODEL_PATH = "../../tutorials/models/cco_1/best_model" # Simon's SchNet model +this_file = Path(__file__).resolve() +ETHANOL_MODEL_PATH = ( + this_file.parent.parent.parent / "tutorials" / "models" / "cco_1" / "best_model" +) # Simon's SchNet model METHOD_DIC = {"nosehoover": NoseHoover, "nosehooverchain": NoseHooverChain} From 4725cc29aa906a02077c604c111578dcd51275af Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 18 Apr 2025 22:29:46 -0400 Subject: [PATCH 62/66] TST: skip Langevin test for now --- nff/tests/dynamics_test.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nff/tests/dynamics_test.py b/nff/tests/dynamics_test.py index 48e26e66..f0a09b24 100644 --- a/nff/tests/dynamics_test.py +++ b/nff/tests/dynamics_test.py @@ -1069,10 +1069,13 @@ def run(self): batched_zn.run() -class TestLangevin: - def setup_method(self): +# @pytest.mark.usefixtures("device") +@pytest.mark.skip("Works locally but need to update to work on remote CI") +class TestLangevin(ut.TestCase): + def setUp(self): self.ethanol = get_directed_ethanol() - self.model = NeuralFF.from_file(ETHANOL_MODEL_PATH, device="cpu") + self.device = self._test_fixture_device + self.model = NeuralFF.from_file(ETHANOL_MODEL_PATH, device=self.device) self.ethanol.set_calculator(self.model) if os.path.exists("langevin.traj"): os.remove("langevin.traj") From 4e907a6641e1be519b56a09533d01107f914e810 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 21 Apr 2025 09:05:46 -0400 Subject: [PATCH 63/66] DOC: remove htvs references --- nff/md/nvt.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nff/md/nvt.py b/nff/md/nvt.py index bd471976..a2d6b65e 100644 --- a/nff/md/nvt.py +++ b/nff/md/nvt.py @@ -30,7 +30,7 @@ def run_with_ase_check( """Run the ASE dynamics with a check for the ASE version. ASE v3.23 has updated the `run` method in the `Dynamics` class, so we need to check for the version and run the appropriate method. This function will be deprecated in the future, - as ASE v3.23 will be the minimum version required for htvs, and contains a warning + as ASE v3.23 will be the minimum version required for nff, and contains a warning to that effect. Args: integrator (MolecularDynamics): ASE integrator object or thermostat like NoseHoover @@ -44,7 +44,7 @@ def run_with_ase_check( warnings.warn( f"ASE version {ase_ver} uses outdated `run` method in" " its `Dynamics` class. Please update to a newer version of ASE as this" - " method will be deprecated in htvs in the future.", + " method will be deprecated in nff in the future.", DeprecationWarning, stacklevel=2, ) From 5fe46a2eab87e009d8ccf0dd95912cbb0351b6a3 Mon Sep 17 00:00:00 2001 From: Xiaochen Du <2586793+xiaochendu@users.noreply.github.com> Date: Wed, 23 Apr 2025 18:22:02 -0400 Subject: [PATCH 64/66] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- scripts/train_nff.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/train_nff.py b/scripts/train_nff.py index 149bf943..16177e6d 100644 --- a/scripts/train_nff.py +++ b/scripts/train_nff.py @@ -255,7 +255,7 @@ def main( logger.info("Fine-tuning model") model = load_model(model_path, model_type=model_type, map_location=device, device=device) if "NffScaleMACE" in model_type and trim_embeddings: - atomic_numbers = to_tensor(train.props["nxyz"], stack=True)[:, 0].unique().to(int).tolist() + atomic_numbers = to_tensor(train.props["nxyz"], stack=True)[:, 0].unique().to(torch.int64).tolist() logger.info("Trimming embeddings with MACE model and atomic numbers %s", atomic_numbers) model = reduce_foundations(model, atomic_numbers, load_readout=True) model_freezer = get_layer_freezer(model_type) From 31fbcfc60514a3008f05c8412b0c68ae65591296 Mon Sep 17 00:00:00 2001 From: Xiaochen Du Date: Wed, 23 Apr 2025 18:50:53 -0400 Subject: [PATCH 65/66] MAINT & STY: update based on PR #34 comments and style fixes --- nff/analysis/loss_plot.py | 33 ++++----- nff/analysis/mpl_settings.py | 28 +++----- nff/analysis/parity_plot.py | 61 ++++++++-------- nff/data/stats.py | 132 ++++++++++++----------------------- nff/io/ase_calcs.py | 11 ++- nff/io/chgnet.py | 118 +++++++++++++------------------ nff/train/transfer.py | 21 ++---- nff/utils/cuda.py | 5 +- 8 files changed, 158 insertions(+), 251 deletions(-) diff --git a/nff/analysis/loss_plot.py b/nff/analysis/loss_plot.py index e4fb8536..6286e2cd 100644 --- a/nff/analysis/loss_plot.py +++ b/nff/analysis/loss_plot.py @@ -4,38 +4,35 @@ from . import mpl_settings -def plot_loss(energy_history, forces_history, figname, train_key="train", val_key="val"): +def plot_loss( + energy_history: dict, + forces_history: dict, + figname: str, + train_key: str = "train", + val_key: str = "val", +) -> None: """Plot the loss history of the model. - Args: - energy_history (dict): energy loss history of the model for training and validation - forces_history (dict): forces loss history of the model for training and validation - figname (str): name of the figure - - Returns: - None + Args: + energy_history: energy loss history of the model for training and validation + forces_history: forces loss history of the model for training and validation + figname: name of the figure + train_key: key for training data in the history dictionary + val_key: key for validation data in the history dictionary """ epochs = np.arange(1, len(energy_history[train_key]) + 1) fig, ax_fig = plt.subplots(1, 2, figsize=(5, 2.5), dpi=mpl_settings.DPI) - ax_fig[0].semilogy( - epochs, energy_history[train_key], label="train", color=mpl_settings.colors[1] - ) + ax_fig[0].semilogy(epochs, energy_history[train_key], label="train", color=mpl_settings.colors[1]) ax_fig[0].semilogy(epochs, energy_history[val_key], label="val", color=mpl_settings.colors[2]) ax_fig[0].legend() ax_fig[0].set_xlabel("Epoch") ax_fig[0].set_ylabel("Loss") - ax_fig[0].set_xlabel("Epoch") - ax_fig[0].set_ylabel("Loss") - ax_fig[1].semilogy( - epochs, forces_history[train_key], label="train", color=mpl_settings.colors[1] - ) + ax_fig[1].semilogy(epochs, forces_history[train_key], label="train", color=mpl_settings.colors[1]) ax_fig[1].semilogy(epochs, forces_history[val_key], label="val", color=mpl_settings.colors[2]) ax_fig[1].legend() ax_fig[1].set_xlabel("Epoch") ax_fig[1].set_ylabel("Loss") - ax_fig[1].set_xlabel("Epoch") - ax_fig[1].set_ylabel("Loss") plt.tight_layout() plt.savefig(f"{figname}.png") diff --git a/nff/analysis/mpl_settings.py b/nff/analysis/mpl_settings.py index ae49b582..d3f23b80 100644 --- a/nff/analysis/mpl_settings.py +++ b/nff/analysis/mpl_settings.py @@ -1,6 +1,8 @@ +from __future__ import annotations + import json from pathlib import Path -from typing import List, Optional +from typing import List import matplotlib as mpl import matplotlib.pyplot as plt @@ -61,11 +63,11 @@ plt.rcParams.update(custom_settings) -def update_custom_settings(custom_settings: dict = custom_settings) -> None: +def update_custom_settings(custom_settings: dict | None = custom_settings) -> None: """Update the custom settings for Matplotlib. Args: - custom_settings (dict, optional): Custom settings for Matplotlib. Defaults to + custom_settings: Custom settings for Matplotlib. Defaults to custom_settings. """ current_settings = plt.rcParams.copy() @@ -77,10 +79,7 @@ def hex_to_rgb(value: str) -> list[float]: """Converts hex to rgb colors. Args: - value (str): string of 6 characters representing a hex colour. - - Returns: - list: length 3 of RGB values + value: string of 6 characters representing a hex color. """ value = value.strip("#") # removes hash symbol if present lv = len(value) @@ -91,7 +90,7 @@ def rgb_to_dec(value: list[float]) -> list[float]: """Converts rgb to decimal colors (i.e. divides each value by 256). Args: - value (list[float]): string of 6 characters representing a hex colour. + value: string of 6 characters representing a hex color. Returns: list: length 3 of RGB values @@ -107,12 +106,9 @@ def get_continuous_cmap( each color in hex_list is mapped to the respective location in float_list. Args: - hex_list (list[str]): list of hex code strings - float_list (list[float]): list of floats between 0 and 1, same length as hex_list. Must - start with 0 and end with 1. - - Returns: - matplotlib.colors.LinearSegmentedColormap: continuous + hex_list: list of hex code strings + float_list: list of floats between 0 and 1, same length as hex_list. + Must start with 0 and end with 1. """ rgb_list = [rgb_to_dec(hex_to_rgb(i)) for i in hex_list] if float_list: @@ -122,9 +118,7 @@ def get_continuous_cmap( cdict = dict() for num, col in enumerate(["red", "green", "blue"]): - col_list = [ - [float_list[i], rgb_list[i][num], rgb_list[i][num]] for i in range(len(float_list)) - ] + col_list = [[float_list[i], rgb_list[i][num], rgb_list[i][num]] for i in range(len(float_list))] cdict[col] = col_list return mpl.colors.LinearSegmentedColormap("j_cmap", segmentdata=cdict, N=256) diff --git a/nff/analysis/parity_plot.py b/nff/analysis/parity_plot.py index dd36db60..5a44d9d6 100644 --- a/nff/analysis/parity_plot.py +++ b/nff/analysis/parity_plot.py @@ -1,13 +1,16 @@ -from typing import Dict, Literal, Union +from __future__ import annotations + +from typing import TYPE_CHECKING, Dict, Literal import matplotlib.pyplot as plt import numpy as np import pandas as pd -import torch from matplotlib.lines import Line2D from scipy import stats from scipy.stats import gaussian_kde +if TYPE_CHECKING: + from torch import Tensor from nff.data import to_tensor from nff.utils import cuda @@ -18,8 +21,8 @@ def plot_parity( - results: Dict[str, Union[list, torch.Tensor]], - targets: Dict[str, Union[list, torch.Tensor]], + results: Dict[str, list | Tensor], + targets: Dict[str, list | Tensor], figname: str, plot_type: Literal["hexbin", "scatter"] = "hexbin", energy_key: str = "energy", @@ -29,13 +32,13 @@ def plot_parity( """Perform a parity plot between the results and the targets. Args: - results (dict): dictionary containing the results - targets (dict): dictionary containing the targets - figname (str): name of the figure - plot_type (str): type of plot to use, either "hexbin" or "scatter" - energy_key (str): key for the energy - force_key (str): key for the forces - units (dict): dictionary containing the units of the keys + results: dictionary containing the results + targets: dictionary containing the targets + figname: name of the figure + plot_type: type of plot to use, either "hexbin" or "scatter" + energy_key: key for the energy + force_key: key for the forces + units: dictionary containing the units of the keys Returns: float: MAE of the energy @@ -113,8 +116,8 @@ def plot_parity( def plot_err_var( - err: Union[torch.Tensor, np.ndarray], - var: Union[torch.Tensor, np.ndarray], + err: Tensor | np.ndarray, + var: Tensor | np.ndarray, figname: str, units: str = "eV/Å", x_min: float = 0.0, @@ -128,20 +131,17 @@ def plot_err_var( """Plot the error vs variance of the forces. Args: - err (torch.Tensor): error of the forces - var (torch.Tensor): variance of the forces - figname (str): name of the figure - units (str): units of the error and variance - x_min (float): minimum value of the x-axis - x_max (float): maximum value of the x-axis - y_min (float): minimum value of the y-axis - y_max (float): maximum value of the y-axis - sample_frac (float): fraction of the data to sample for the plot - num_bins (int): number of bins to use for binning - cb_format (str): format of the colorbar - - Returns: - None + err: error of the forces + var: variance of the forces + figname: name of the figure + units: units of the error and variance + x_min: minimum value of the x-axis + x_max: maximum value of the x-axis + y_min: minimum value of the y-axis + y_max: maximum value of the y-axis + sample_frac: fraction of the data to sample for the plot + num_bins: number of bins to use for binning + cb_format: format of the colorbar """ fig, ax = plt.subplots(1, 1, figsize=(6, 6), dpi=mpl_settings.DPI) @@ -166,12 +166,7 @@ def plot_err_var( x = pd.Series(var) y = pd.Series(err) - kernel = gaussian_kde( - np.vstack([x.sample(n=len(x), random_state=2), y.sample(n=len(y), random_state=2)]) - ) - kernel = gaussian_kde( - np.vstack([x.sample(n=len(x), random_state=2), y.sample(n=len(y), random_state=2)]) - ) + kernel = gaussian_kde(np.vstack([x.sample(n=len(x), random_state=2), y.sample(n=len(y), random_state=2)])) c = kernel(np.vstack([x, y])) hb = ax.scatter( var, diff --git a/nff/data/stats.py b/nff/data/stats.py index b6becefd..31c3685a 100644 --- a/nff/data/stats.py +++ b/nff/data/stats.py @@ -48,21 +48,13 @@ def remove_outliers( stats_array = torch.cat(array, dim=0).flatten().cpu().numpy() # take the maximum absolute value in the list of tensors max_idx = [torch.argmax(torch.abs(ten.flatten())) for ten in array] - max_values = np.array( - [array[i].flatten()[max_idx[i]].cpu().numpy() for i in range(len(array))] - ) + max_values = np.array([array[i].flatten()[max_idx[i]].cpu().numpy() for i in range(len(array))]) else: stats_array = array.copy() max_values = stats_array.copy() # used for outlier removal - if reference_mean is None: - mean = np.mean(stats_array) - else: - mean = reference_mean - if reference_std is None: - std = np.std(stats_array) - else: - std = reference_std + mean = reference_mean if reference_mean else np.mean(stats_array) + std = reference_std if reference_std else np.std(stats_array) non_outlier = np.bitwise_and(np.abs(max_values - mean) < std_away * std, max_values < max_value) non_outlier = np.arange(len(array))[non_outlier] @@ -153,34 +145,25 @@ def center_dataset( def get_atom_count(formula: str) -> Dict[str, int]: """Count the number of each atom type in the formula. - Parameters - ---------- - formula - The formula parameter is a string representing a chemical formula. - - Returns - ------- - a dictionary containing the count of each atom in the given chemical formula. + Args: + formula (str): A chemical formula. + Returns: + Dict[str, int]: A dictionary containing the count of each atom in the given + chemical formula. """ - - # return dictionary formula = Formula(formula) return formula.count() def all_atoms(unique_formulas: List[str]) -> set: - """Return set of all atoms in the list of formulas. + """Return a set of all atoms present in the list of formulas. - Parameters - ---------- - unique_formulas - list of strings representing the chemical formulas for which you want to count the - occurrences of each atom. + Args: + unique_formulas (List[str]): A list of chemical formula strings. - Returns - ------- - a set containing all the atoms in the list of formulas. + Returns: + set: A set containing all unique atom types found in the provided formulas. """ atom_set = set() for formula in unique_formulas: @@ -191,49 +174,32 @@ def all_atoms(unique_formulas: List[str]) -> set: def reg_atom_count(formula: str, atoms: List[str]) -> np.ndarray: - """Count the number of each specified atom type in the formula. - - Parameters - ---------- - formula - A string that represents a chemical formula. It can contain elements and - their corresponding subscripts. For example, "H2O" represents water, where "H" is the element - hydrogen and "O" is the element oxygen. The subscript "2" indicates that there are two - atoms - list of strings representing the atoms for which you want to count the - occurrences in the `formula`. - - Returns - ------- - an array containing the count of each atom in the given formula. + """Count the occurrence of specified atom types in the formula. + + Args: + formula (str): A chemical formula string. + atoms (List[str]): A list of atom types to count in the formula. + + Returns: + np.ndarray: An array containing the count of each specified atom in the formula. """ dictio = get_atom_count(formula) count_array = np.array([dictio.get(atom, 0) for atom in atoms]) - return count_array -def get_stoich_dict( - dset: Dataset, formula_key: str = "formula", energy_key: str = "energy" -) -> Dict[str, float]: - """Linear regression to find the per atom energy for each element in the dataset. +def get_stoich_dict(dset: Dataset, formula_key: str = "formula", energy_key: str = "energy") -> Dict[str, float]: + """Determine per-atom energy coefficients via linear regression. - Parameters - ---------- - dset - Dataset object containing properties for each data point. It is assumed to have a property - for the chemical formula of each data point and a property for the energy value of each data point. - formula_key, optional - key for chemical formula in the dset properties dictionary. - energy_key, optional - key for energy in the dset properties dictionary. - - Returns - ------- - a dictionary containing the stoichiometric energy coefficients for each element in the dataset. + Args: + dset (Dataset): Dataset object containing chemical formulas and energy values. + formula_key (str, optional): Key for chemical formulas in the dataset properties. + energy_key (str, optional): Key for energy values in the dataset properties. + Returns: + Dict[str, float]: A dictionary with stoichiometric energy coefficients for + each element, including an 'offset' representing the intercept. """ - # calculates the linear regresion and return the stoich dictionary formulas = dset.props[formula_key] energies = dset.props[energy_key] logging.debug("formulas: %s", formulas) @@ -241,10 +207,9 @@ def get_stoich_dict( unique_formulas = list(set(formulas)) logging.debug("unique formulas: %s", unique_formulas) - # find the ground state energy for each formula/stoichiometry + # Find the ground state energy for each formula/stoichiometry. ground_en = [ - min([energies[i] for i in range(len(formulas)) if formulas[i] == formula]) - for formula in unique_formulas + min([energies[i] for i in range(len(formulas)) if formulas[i] == formula]) for formula in unique_formulas ] unique_atoms = all_atoms(unique_formulas) @@ -252,7 +217,6 @@ def get_stoich_dict( logging.debug("unique atoms: %s", unique_atoms) x_in = np.stack([reg_atom_count(formula, unique_atoms) for formula in unique_formulas]) - y_out = np.array(ground_en) logging.debug("x_in: %s", x_in) @@ -262,14 +226,13 @@ def get_stoich_dict( clf.fit(x_in, y_out) pred = (clf.coef_ * x_in).sum(-1) + clf.intercept_ - # pred = clf.predict(x_in) logging.info("coef: %s", clf.coef_) logging.info("intercept: %s", clf.intercept_) logging.debug("pred: %s", pred) err = abs(pred - y_out).mean() # in kcal/mol logging.info("MAE between target energy and stoich energy is %.3f kcal/mol", err) logging.info("R : %s", clf.score(x_in, y_out)) - fit_dic = {atom: coef for atom, coef in zip(unique_atoms, clf.coef_.reshape(-1))} # noqa + fit_dic = dict(zip(unique_atoms, clf.coef_.reshape(-1))) stoich_dict = {**fit_dic, "offset": clf.intercept_.item()} logging.info(stoich_dict) @@ -282,27 +245,18 @@ def perform_energy_offset( formula_key: str = "formula", energy_key: str = "energy", ) -> Dataset: - """Peform energy offset calculation on the dataset. Subtract the energy of the reference state for each atom - from the energy of each data point in the dataset. - - Parameters - ---------- - dset - Dataset object containing properties for each data point. It is assumed to have a property - for the chemical formula of each data point and a property for the energy value of each data point. - stoic_dict - a dictionary containing the stoichiometric energy coefficients for each element in the dataset. - formula_key, optional - key for chemical formula in the dset properties dictionary. - energy_key, optional - key for energy in the dset properties dictionary. - - Returns - ------- - a new dataset with the energy offset performed. + """Perform energy offset calculation by subtracting the reference energy per atom. + Args: + dset (Dataset): Dataset object containing chemical formulas and energy values. + stoic_dict (Dict[str, float]): Dictionary with stoichiometric energy coefficients for + each element. + formula_key (str, optional): Key for chemical formulas in the dataset properties. + energy_key (str, optional): Key for energy values in the dataset properties. + + Returns: + Dataset: A new dataset with the energy offset applied to each energy value. """ - # perform the energy offset formulas = dset.props[formula_key] energies = dset.props[energy_key] diff --git a/nff/io/ase_calcs.py b/nff/io/ase_calcs.py index 3209290f..b19a0918 100644 --- a/nff/io/ase_calcs.py +++ b/nff/io/ase_calcs.py @@ -132,8 +132,6 @@ def calculate( self.properties = properties Calculator.calculate(self, atoms, self.properties, system_changes) - # TODO: update atoms only when necessary - atoms.update_nbr_list(update_atoms=True) # run model # atomsbatch = AtomsBatch(atoms) @@ -231,7 +229,14 @@ class EnsembleNFF(Calculator): """Produces an ensemble of NFF calculators to predict the discrepancy between the properties""" - implemented_properties = ["energy", "forces", "stress", "energy_std", "forces_std", "stress_std"] + implemented_properties = [ + "energy", + "forces", + "stress", + "energy_std", + "forces_std", + "stress_std", + ] def __init__( self, diff --git a/nff/io/chgnet.py b/nff/io/chgnet.py index 651641c8..9c17224c 100644 --- a/nff/io/chgnet.py +++ b/nff/io/chgnet.py @@ -3,7 +3,7 @@ from typing import Dict, List import torch -from chgnet.data.dataset import StructureData, StructureJsonData +from chgnet.data.dataset import StructureData from pymatgen.core.structure import Structure from pymatgen.io.ase import AseAtomsAdaptor @@ -17,25 +17,16 @@ def convert_nff_to_chgnet_structure_data( cutoff: float = 5.0, shuffle: bool = True, ): - """The function `convert_nff_to_chgnet_structure_data` converts a dataset in NFF format to a dataset in - CHGNet structure data format. - - Parameters - ---------- - dataset : Dataset - The `dataset` parameter is an object of the `Dataset` class. - cutoff : float - The `cutoff` parameter is a float value that represents the distance cutoff for constructing the - neighbor list in the conversion process. It determines the maximum distance between atoms within - which they are considered neighbors. Any atoms beyond this distance will not be included in the - neighbor list. - shuffle : bool - The `shuffle` parameter is a boolean value that determines whether the dataset should be shuffled + """ + Converts a dataset in NFF format to a dataset in CHGNet structure data format. - Returns: - ------- - a `chgnet_dataset` object of type `StructureData`. + Args: + dataset (Dataset): An object of the Dataset class. + cutoff (float, optional): Distance cutoff for constructing the neighbor list. Defaults to 5.0. + shuffle (bool, optional): Whether the dataset should be shuffled. Defaults to True. + Returns: + StructureData: A CHGNet StructureData object. """ dataset = dataset.copy() dataset.to_units("eV/atom") # convert units to eV @@ -66,29 +57,29 @@ def convert_chgnet_structure_targets_to_nff( stresses: bool = False, magmoms: bool = False, ) -> Dataset: - """Converts a dataset in CHGNet structure json data format to a dataset in - NFF format. + """ + Converts a dataset in CHGNet structure JSON data format to a dataset in NFF format. Args: - structures: List of pymatgen structures - targets: List of dictionaries containing the properties of each structure in the batch. - stresses: Whether the dataset should include stresses - magmoms: Whether the dataset should include magnetic moments + structures (List[Structure]): List of pymatgen structures. + targets (List[Dict]): List of dictionaries containing the properties of each structure. + stresses (bool, optional): Whether the dataset should include stresses. Defaults to False. + magmoms (bool, optional): Whether the dataset should include magnetic moments. Defaults to False. Returns: - NFF Dataset + Dataset: An NFF Dataset. """ energies_per_atom = [] energy_grad = [] - stresses = [] - magmoms = [] + stresses_list = [] + magmoms_list = [] for target in targets: energies_per_atom.append(target["e"]) energy_grad.append(-target["f"]) if stresses: - stresses.append(target["s"]) + stresses_list.append(target["s"]) if magmoms: - magmoms.append(target["m"]) + magmoms_list.append(target["m"]) lattice = [] num_atoms = [] # TODO: check if this is correct @@ -112,9 +103,9 @@ def convert_chgnet_structure_targets_to_nff( "units": units, } if stresses: - concated_batch["stress"] = stresses + concated_batch["stress"] = stresses_list if magmoms: - concated_batch["magmoms"] = magmoms + concated_batch["magmoms"] = magmoms_list return Dataset(concated_batch, units=units[0]) @@ -123,21 +114,16 @@ def convert_chgnet_structure_data_to_nff( cutoff: float = 6.0, shuffle: bool = True, ) -> Dataset: - """Converts a dataset in CHGNet structure data format to a dataset in - NFF format. - - Parameters - ---------- - structure_data : StructureData - A `structure_data` object of type `StructureData`. - cutoff - Distance cutoff for constructing the neighbor list in the conversion process. - shuffle : bool - Whether the dataset should be shuffled + """ + Converts a dataset in CHGNet structure data format to a dataset in NFF format. + + Args: + structure_data (StructureData): A CHGNet StructureData object. + cutoff (float, optional): Distance cutoff for constructing the neighbor list. Defaults to 6.0. + shuffle (bool, optional): Whether the dataset should be shuffled. Defaults to True. Returns: - ------- - a `nff_dataset` object of type `Dataset`. + Dataset: An NFF Dataset. """ pymatgen_structures = structure_data.structures energies_per_atom = structure_data.energies @@ -154,7 +140,7 @@ def convert_chgnet_structure_data_to_nff( for structure in pymatgen_structures: lattice.append(structure.lattice.matrix) nxyz.append( - torch.cat([torch.tensor([atom.species.number]), torch.tensor(atom.coords)]).tolist() for atom in structure + [torch.cat([torch.tensor([atom.species.number]), torch.tensor(atom.coords)]).tolist() for atom in structure] ) concated_batch = { @@ -176,34 +162,24 @@ def convert_data_batch( cutoff: float = 5.0, shuffle: bool = True, ): - """Converts a dataset in NFF format to a dataset in - CHGNet structure data format. - - Parameters - ---------- - data_batch : Dict - A dictionary of properties for each structure in the batch. - Basically the props in NFF Dataset - Example: - props = { - 'nxyz': [np.array([[1, 0, 0, 0], [1, 1.1, 0, 0]]), - np.array([[1, 3, 0, 0], [1, 1.1, 5, 0]])], - 'lattice': [np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], - np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])], - 'num_atoms': [2, 2], - } - cutoff : float - The `cutoff` parameter is a float value that represents the distance cutoff for constructing the - neighbor list in the conversion process. It determines the maximum distance between atoms within - which they are considered neighbors. Any atoms beyond this distance will not be included in the - neighbor list. - shuffle : bool - The `shuffle` parameter is a boolean value that determines whether the dataset should be shuffled + """ + Converts a dataset in NFF format to a dataset in CHGNet structure data format. - Returns: - ------- - a `chgnet_dataset` object of type `StructureData`. + Args: + data_batch (Dict): Dictionary of properties for each structure in the batch. + Example: + props = { + 'nxyz': [np.array([[1, 0, 0, 0], [1, 1.1, 0, 0]]), + np.array([[1, 3, 0, 0], [1, 1.1, 5, 0]])], + 'lattice': [np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), + np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])], + 'num_atoms': [2, 2], + } + cutoff (float, optional): Distance cutoff for neighbor list construction. Defaults to 5.0. + shuffle (bool, optional): Whether the dataset should be shuffled. Defaults to True. + Returns: + StructureData: A CHGNet StructureData object. """ detached_batch = batch_detach(data_batch) nxyz = detached_batch["nxyz"] diff --git a/nff/train/transfer.py b/nff/train/transfer.py index 4ae4fef2..ea3db699 100644 --- a/nff/train/transfer.py +++ b/nff/train/transfer.py @@ -71,7 +71,6 @@ def model_tl( """ Function to transfer learn a model. Defined in the subclasses. """ - pass class PainnLayerFreezer(LayerFreezer): @@ -196,18 +195,14 @@ def unfreeze_mace_radial_embedding(self, model: torch.nn.Module) -> None: self.unfreeze_parameters(model.radial_embedding) print("Unfreezing radial embedding") - def unfreeze_mace_interaction_linears( - self, model: torch.nn.Module, num_layers: int = 1 - ) -> None: + def unfreeze_mace_interaction_linears(self, model: torch.nn.Module, num_layers: int = 1) -> None: """Unfreeze the linear readout layer from the interaction blocks in a MACE model. Args: model (torch.nn.Module): model to be transfer learned """ - for i in reversed( - range(model.num_interactions.item() - num_layers, model.num_interactions.item()) - ): + for i in reversed(range(model.num_interactions.item() - num_layers, model.num_interactions.item())): print(f"Unfreezing # {i} interaction linear layers from last") self.custom_unfreeze(model, [f"interactions.{i}.linear.weight"]) @@ -217,9 +212,7 @@ def unfreeze_mace_interactions(self, model: torch.nn.Module, num_layers: int = 1 Args: model (torch.nn.Module): model to be transfer learned """ - for i in reversed( - range(model.num_interactions.item() - num_layers, model.num_interactions.item()) - ): + for i in reversed(range(model.num_interactions.item() - num_layers, model.num_interactions.item())): print(f"Unfreezing # {i} interaction linear layers from last") self.unfreeze_parameters(model.interactions[i]) @@ -230,9 +223,7 @@ def unfreeze_mace_product_linears(self, model: torch.nn.Module) -> None: Args: model (torch.nn.Module): model to be transfer learned """ - product_linears = [ - f"products.{i}.linear.weight" for i in range(model.num_interactions.item()) - ] + product_linears = [f"products.{i}.linear.weight" for i in range(model.num_interactions.item())] self.custom_unfreeze(model, product_linears) def unfreeze_mace_pooling(self, model: torch.nn.Module) -> None: @@ -257,9 +248,7 @@ def unfreeze_mace_readout(self, model: torch.nn.Module, freeze_skip: bool = Fals unfreeze_skip = not freeze_skip for i, block in enumerate(model.readouts): - if unfreeze_skip: - self.unfreeze_parameters(block) - elif i == num_readouts - 1: + if unfreeze_skip or i == num_readouts - 1: self.unfreeze_parameters(block) print(f"Unfreezing {block.__class__.__name__}") diff --git a/nff/utils/cuda.py b/nff/utils/cuda.py index acfaa63a..093aeec3 100644 --- a/nff/utils/cuda.py +++ b/nff/utils/cuda.py @@ -40,9 +40,7 @@ def detach(val: torch.Tensor, to_numpy: bool = False) -> torch.Tensor | np.ndarr return val.detach().cpu() if hasattr(val, "detach") else val -def batch_detach( - batch: Dict[str, List | torch.Tensor], to_numpy: bool = False -) -> Dict[str, List | torch.Tensor]: +def batch_detach(batch: Dict[str, List | torch.Tensor], to_numpy: bool = False) -> Dict[str, List | torch.Tensor]: """Detach batch of GPU tensors Args: @@ -118,5 +116,4 @@ def get_final_device(device: str) -> str: return f"cuda:{cuda_devices_sorted_by_free_mem()[-1]}" except nvidia_smi.NVMLError: return "cuda:0" - return f"cuda:{cuda_devices_sorted_by_free_mem()[-1]}" return "cpu" From 95937c9cda944f113606b7bf297a27aaeee4d81e Mon Sep 17 00:00:00 2001 From: Xiaochen Du Date: Wed, 30 Apr 2025 21:41:46 -0400 Subject: [PATCH 66/66] MAINT: update shuffle default in `convert_chgnet_structure_data_to_nff` to False --- nff/io/chgnet.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nff/io/chgnet.py b/nff/io/chgnet.py index 9c17224c..c903aa16 100644 --- a/nff/io/chgnet.py +++ b/nff/io/chgnet.py @@ -112,7 +112,7 @@ def convert_chgnet_structure_targets_to_nff( def convert_chgnet_structure_data_to_nff( structure_data: StructureData, cutoff: float = 6.0, - shuffle: bool = True, + shuffle: bool = False, ) -> Dataset: """ Converts a dataset in CHGNet structure data format to a dataset in NFF format. @@ -120,7 +120,7 @@ def convert_chgnet_structure_data_to_nff( Args: structure_data (StructureData): A CHGNet StructureData object. cutoff (float, optional): Distance cutoff for constructing the neighbor list. Defaults to 6.0. - shuffle (bool, optional): Whether the dataset should be shuffled. Defaults to True. + shuffle (bool, optional): Whether the dataset should be shuffled. Defaults to False. Returns: Dataset: An NFF Dataset.

bkJu0EBzzoeDXVcn4kPb> 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