From a5c60c5a5dc53d3c74fa727afa04cfdb3e7a5679 Mon Sep 17 00:00:00 2001 From: YAY-C Date: Sun, 30 Jun 2024 18:40:17 +0200 Subject: [PATCH 01/20] Fixed `printlevel` parameter and missing case --- qstack/spahm/rho/utils.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/qstack/spahm/rho/utils.py b/qstack/spahm/rho/utils.py index ad6fbb0..a1ed882 100644 --- a/qstack/spahm/rho/utils.py +++ b/qstack/spahm/rho/utils.py @@ -135,7 +135,7 @@ def load_reps(f_in, from_list=True, srcdir=None, with_labels=False, is_single, is_labeled = file_format['is_single'], file_format['is_labeled'] # if the given file contains a single representation create a one-element list Xs = [np.load(f_in, allow_pickle=True)] if is_single else np.load(f_in, allow_pickle=True) - print(f"Loading {len(Xs)} representations (local = {local}, labeled = {is_labeled})") + if printlevel > 1: print(f"Loading {len(Xs)} representations (local = {local}, labeled = {is_labeled})") if progress: import tqdm Xs = tqdm.tqdm(Xs) @@ -150,7 +150,10 @@ def load_reps(f_in, from_list=True, srcdir=None, with_labels=False, reps.extend(x[:,1]) labels.extend(x[:,0]) else: - reps.extend(x) + if sum_local: + reps.append(x.sum(axis=0)) + else: + reps.extend(x) else: if is_labeled: reps.append(x[1]) From f30deb8cd65fe3c7b06d1f88b6029eb0b9263156 Mon Sep 17 00:00:00 2001 From: calvinoY Date: Tue, 2 Jul 2024 14:39:48 +0200 Subject: [PATCH 02/20] Dirty fix for open-shell evaluation (closes #71) --- qstack/spahm/rho/bond.py | 4 ++-- qstack/spahm/rho/utils.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/qstack/spahm/rho/bond.py b/qstack/spahm/rho/bond.py index 22ffdb9..e94a698 100755 --- a/qstack/spahm/rho/bond.py +++ b/qstack/spahm/rho/bond.py @@ -39,7 +39,7 @@ def bond(mols, dms, elements, mybasis, qqs0, qqs4q, idx, M = dmbb.read_basis_wrapper(mols, bpath, only_m0, printlevel, elements=elements, cutoff=cutoff, pairfile=pairfile, dump_and_exit=dump_and_exit, same_basis=same_basis) - if spin is None: + if all([spin == None]): omods = [None] qqs = qqs0 if zeros else qqs4q maxlen = max([dmbb.bonds_dict_init(qqs[q0], M)[1] for q0 in elements]) @@ -58,7 +58,7 @@ def bond(mols, dms, for imol, (mol, dm) in enumerate(zip(mols,dms)): if printlevel>0: print('mol', imol, flush=True) for iomod, omod in enumerate(omods): - DM = utils.dm_open_mod(dm, omod) if spin else dm + DM = utils.dm_open_mod(dm, omod) vec = dmbb.repr_for_mol(mol, DM, qqs, M, mybasis, idx, maxlen, cutoff, only_z=only_z) allvec[iomod,imol,:len(vec)] = vec diff --git a/qstack/spahm/rho/utils.py b/qstack/spahm/rho/utils.py index a1ed882..68c5014 100644 --- a/qstack/spahm/rho/utils.py +++ b/qstack/spahm/rho/utils.py @@ -66,7 +66,8 @@ def dm_open_mod(dm, omod): dmmod = {'sum': lambda dm: dm[0]+dm[1], 'diff': lambda dm: dm[0]-dm[1], 'alpha': lambda dm: dm[0], - 'beta': lambda dm: dm[1]} + 'beta': lambda dm: dm[1], + None: lambda dm: dm} return dmmod[omod](dm) From 94d2d43767ecb392afc93e4f3a7782c4aac3d381 Mon Sep 17 00:00:00 2001 From: calvinoY Date: Tue, 2 Jul 2024 17:42:32 +0200 Subject: [PATCH 03/20] fixed is-statement for numpy.ndarrays --- qstack/spahm/rho/bond.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qstack/spahm/rho/bond.py b/qstack/spahm/rho/bond.py index e94a698..3252c84 100755 --- a/qstack/spahm/rho/bond.py +++ b/qstack/spahm/rho/bond.py @@ -39,7 +39,7 @@ def bond(mols, dms, elements, mybasis, qqs0, qqs4q, idx, M = dmbb.read_basis_wrapper(mols, bpath, only_m0, printlevel, elements=elements, cutoff=cutoff, pairfile=pairfile, dump_and_exit=dump_and_exit, same_basis=same_basis) - if all([spin == None]): + if np.array(spin==None, ndmin=1).all(): omods = [None] qqs = qqs0 if zeros else qqs4q maxlen = max([dmbb.bonds_dict_init(qqs[q0], M)[1] for q0 in elements]) From 5e2e26f4b6c6325ce81f54897fbd26048d14b9fb Mon Sep 17 00:00:00 2001 From: calvinoY Date: Tue, 2 Jul 2024 17:43:07 +0200 Subject: [PATCH 04/20] Added `srcdir` kwarg for xyz-lists --- qstack/spahm/rho/utils.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qstack/spahm/rho/utils.py b/qstack/spahm/rho/utils.py index 68c5014..7e315b5 100644 --- a/qstack/spahm/rho/utils.py +++ b/qstack/spahm/rho/utils.py @@ -30,12 +30,14 @@ def get_chsp(fname, n): return chsp -def load_mols(xyzlist, charge, spin, basis, printlevel=0, units='ANG', ecp=None, progress=False): +def load_mols(xyzlist, charge, spin, basis, printlevel=0, units='ANG', ecp=None, progress=False, srcdir=None): mols = [] if progress: import tqdm xyzlist = tqdm.tqdm(xyzlist) for xyzfile, ch, sp in zip(xyzlist, charge, spin): + if srcdir is not None: + xyzfile = srcdir+xyzfile if printlevel>0: print(xyzfile, flush=True) mols.append(compound.xyz_to_mol(xyzfile, basis, charge=0 if ch is None else ch, From 74f729aec2d37b99bd169888c13d2d1dd462af56 Mon Sep 17 00:00:00 2001 From: calvinoY Date: Tue, 2 Jul 2024 17:45:24 +0200 Subject: [PATCH 05/20] Add test for list of xyz-files and add test-data --- .../list_H2O_spahm-b_minao_LB_alpha-beta.npy | Bin 0 -> 79904 bytes tests/data/list_water.txt | 3 +++ tests/test_spahm_b.py | 12 ++++++++++++ 3 files changed, 15 insertions(+) create mode 100644 tests/data/list_H2O_spahm-b_minao_LB_alpha-beta.npy create mode 100644 tests/data/list_water.txt diff --git a/tests/data/list_H2O_spahm-b_minao_LB_alpha-beta.npy b/tests/data/list_H2O_spahm-b_minao_LB_alpha-beta.npy new file mode 100644 index 0000000000000000000000000000000000000000..eff769a40eacf16548ed2ce91cac687fea839164 GIT binary patch literal 79904 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 CQM$4K literal 0 HcmV?d00001 diff --git a/tests/data/list_water.txt b/tests/data/list_water.txt new file mode 100644 index 0000000..62c6726 --- /dev/null +++ b/tests/data/list_water.txt @@ -0,0 +1,3 @@ +H2O_dist.xyz +H2O.xyz +rotated_H2O.xyz diff --git a/tests/test_spahm_b.py b/tests/test_spahm_b.py index c122414..778af30 100755 --- a/tests/test_spahm_b.py +++ b/tests/test_spahm_b.py @@ -59,7 +59,19 @@ def test_ecp(): for Xa, Xa_true in zip(X, X_true): assert(np.linalg.norm(Xa-Xa_true) < 1e-8) # evaluating representation diff as norm (threshold = 1e-8) +def test_from_list(): + path = os.path.dirname(os.path.realpath(__file__)) + path2list = path+'/data/list_water.txt' + xyzlist = utils.get_xyzlist(path2list) + spins = utils.get_chsp(None, len(xyzlist)) + charges = utils.get_chsp(None, len(xyzlist)) + mols = utils.load_mols(xyzlist, charges, spins, 'minao', srcdir=path+'/data/') + spahm_b = bond.get_repr(mols, xyzlist, 'LB', spin=spins, same_basis=True) + Xtrue = np.load(path+'/data/list_H2O_spahm-b_minao_LB_alpha-beta.npy') + assert(np.allclose(Xtrue, spahm_b)) + if __name__ == '__main__': test_water() + test_from_list() From 9bb37c2d213b6b674caa133d7c0b1701fe4e4e33 Mon Sep 17 00:00:00 2001 From: YAY-C Date: Thu, 4 Jul 2024 11:54:26 +0200 Subject: [PATCH 06/20] Fix flattening of atom symbols --- qstack/spahm/rho/bond.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qstack/spahm/rho/bond.py b/qstack/spahm/rho/bond.py index 3252c84..387757e 100755 --- a/qstack/spahm/rho/bond.py +++ b/qstack/spahm/rho/bond.py @@ -3,6 +3,7 @@ import os import argparse import numpy as np +from itertools import chain from qstack.tools import correct_num_threads from . import utils, dmb_rep_bond as dmbb from .utils import defaults @@ -127,7 +128,7 @@ def get_repr(mols, xyzlist, guess, xc=defaults.xc, spin=None, readdm=None, shape = (len(omods), -1, maxlen) atidx = np.where(np.array([[1]*len(zin) + [0]*(natm-len(zin)) for zin in all_atoms]).flatten()) allvec = allvec.reshape(shape)[:,atidx,:].reshape(shape) - all_atoms = all_atoms.flatten() + all_atoms = list(chain.from_iterable(all_atoms)) allvec = allvec.squeeze() elif with_symbols: msg = f"You can not use 'split=True' and 'with_symbols=True' at the same time!" From 5d46fa2da43be352b3593c86546b5f8f8523862c Mon Sep 17 00:00:00 2001 From: YAY-C Date: Wed, 24 Jul 2024 15:59:06 +0200 Subject: [PATCH 07/20] Add `srcdir` argument to single representation loading --- qstack/spahm/rho/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qstack/spahm/rho/utils.py b/qstack/spahm/rho/utils.py index 7e315b5..87a2367 100644 --- a/qstack/spahm/rho/utils.py +++ b/qstack/spahm/rho/utils.py @@ -137,7 +137,7 @@ def load_reps(f_in, from_list=True, srcdir=None, with_labels=False, else: is_single, is_labeled = file_format['is_single'], file_format['is_labeled'] # if the given file contains a single representation create a one-element list - Xs = [np.load(f_in, allow_pickle=True)] if is_single else np.load(f_in, allow_pickle=True) + Xs = [np.load(os.path.join(path2list,f_in), allow_pickle=True)] if is_single else np.load(os.path.join(path2list,f_in), allow_pickle=True) if printlevel > 1: print(f"Loading {len(Xs)} representations (local = {local}, labeled = {is_labeled})") if progress: import tqdm From ead08aa42af602f99f117ae8392618e0580a87ab Mon Sep 17 00:00:00 2001 From: YAY-C Date: Thu, 25 Jul 2024 16:46:26 +0200 Subject: [PATCH 08/20] Fix `only-z` argument passing and fixed dimensions for `all_atoms` --- qstack/spahm/rho/bond.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/qstack/spahm/rho/bond.py b/qstack/spahm/rho/bond.py index 387757e..77b1bb3 100755 --- a/qstack/spahm/rho/bond.py +++ b/qstack/spahm/rho/bond.py @@ -113,7 +113,7 @@ def get_repr(mols, xyzlist, guess, xc=defaults.xc, spin=None, readdm=None, dms = [] if len(only_z) > 0: - all_atoms = np.array([z for mol in mols for z in mol.elements if z in only_z]) + all_atoms = np.array([z for mol in mols for z in mol.elements if z in only_z], ndmin=2) else: all_atoms = np.array([mol.elements for mol in mols]) @@ -123,7 +123,6 @@ def get_repr(mols, xyzlist, guess, xc=defaults.xc, spin=None, readdm=None, pairfile=pairfile, dump_and_exit=dump_and_exit, same_basis=same_basis, only_z=only_z) maxlen=allvec.shape[-1] natm = allvec.shape[-2] - if split is False: shape = (len(omods), -1, maxlen) atidx = np.where(np.array([[1]*len(zin) + [0]*(natm-len(zin)) for zin in all_atoms]).flatten()) @@ -193,7 +192,7 @@ def main(): reps = get_repr(mols, xyzlist, args.guess, xc=args.xc, spin=spin, readdm=args.readdm, printlevel=args.print, pairfile=args.pairfile, dump_and_exit=args.dump_and_exit, same_basis=args.same_basis, bpath=args.bpath, cutoff=args.cutoff, omods=args.omod, with_symbols=args.with_symbols, - elements=args.elements, only_m0=args.only_m0, zeros=args.zeros, split=args.split) + elements=args.elements, only_m0=args.only_m0, zeros=args.zeros, split=args.split, only_z=args.only_z) if args.print > 0: print(reps.shape) if args.merge: np.save(args.name_out+'_'+'_'.join(args.omod), reps) From ca8b08b9011bc6303204bd017d81620812701e8f Mon Sep 17 00:00:00 2001 From: YAY-C Date: Wed, 23 Oct 2024 16:28:24 +0200 Subject: [PATCH 09/20] remove unnecessary `squeeze()` --- qstack/spahm/rho/bond.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qstack/spahm/rho/bond.py b/qstack/spahm/rho/bond.py index 77b1bb3..a1390fe 100755 --- a/qstack/spahm/rho/bond.py +++ b/qstack/spahm/rho/bond.py @@ -128,7 +128,7 @@ def get_repr(mols, xyzlist, guess, xc=defaults.xc, spin=None, readdm=None, atidx = np.where(np.array([[1]*len(zin) + [0]*(natm-len(zin)) for zin in all_atoms]).flatten()) allvec = allvec.reshape(shape)[:,atidx,:].reshape(shape) all_atoms = list(chain.from_iterable(all_atoms)) - allvec = allvec.squeeze() + #allvec = allvec.squeeze() elif with_symbols: msg = f"You can not use 'split=True' and 'with_symbols=True' at the same time!" raise RuntimeError() From 049ddb11609f924e4e7a85891e28786a29640f18 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Fri, 6 Dec 2024 12:34:28 +0100 Subject: [PATCH 10/20] spin/charge loader for .txt file only with `None` type converter --- qstack/spahm/rho/utils.py | 12 +++++++++--- tests/test_spahm_b.py | 6 ++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/qstack/spahm/rho/utils.py b/qstack/spahm/rho/utils.py index 87a2367..08ff35b 100644 --- a/qstack/spahm/rho/utils.py +++ b/qstack/spahm/rho/utils.py @@ -21,12 +21,18 @@ def get_chsp(fname, n): - if fname: - chsp = np.loadtxt(fname, dtype=int, ndmin=1) + def chsp_converter(chsp): + if chsp == 'None': + chsp = None + else: + chsp = int(chsp) + return chsp + if os.path.isfile(fname): + chsp = np.loadtxt(fname, dtype=object, converters=chsp_converter, encoding=None) if(len(chsp)!=n): raise RuntimeError(f'Wrong lengh of the file {fname}') else: - chsp = np.zeros(n, dtype=int) + raise RuntimeError(f"{fname} can not be found") return chsp diff --git a/tests/test_spahm_b.py b/tests/test_spahm_b.py index 778af30..09334b4 100755 --- a/tests/test_spahm_b.py +++ b/tests/test_spahm_b.py @@ -62,9 +62,11 @@ def test_ecp(): def test_from_list(): path = os.path.dirname(os.path.realpath(__file__)) path2list = path+'/data/list_water.txt' + path2spins = path+'/data/list_water_spins.txt' + path2charges = path+'/data/list_water_charges.txt' xyzlist = utils.get_xyzlist(path2list) - spins = utils.get_chsp(None, len(xyzlist)) - charges = utils.get_chsp(None, len(xyzlist)) + spins = utils.get_chsp(path2spins, len(xyzlist)) + charges = utils.get_chsp(path2charges, len(xyzlist)) mols = utils.load_mols(xyzlist, charges, spins, 'minao', srcdir=path+'/data/') spahm_b = bond.get_repr(mols, xyzlist, 'LB', spin=spins, same_basis=True) Xtrue = np.load(path+'/data/list_H2O_spahm-b_minao_LB_alpha-beta.npy') From 69f67f740cbfbc2e8143d28f0f6cf272c64d96d2 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Fri, 6 Dec 2024 12:41:14 +0100 Subject: [PATCH 11/20] missing charge/spin test txt-file --- tests/data/list_water_charges.txt | 3 +++ tests/data/list_water_spins.txt | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 tests/data/list_water_charges.txt create mode 100644 tests/data/list_water_spins.txt diff --git a/tests/data/list_water_charges.txt b/tests/data/list_water_charges.txt new file mode 100644 index 0000000..bb0b1cf --- /dev/null +++ b/tests/data/list_water_charges.txt @@ -0,0 +1,3 @@ +0 +0 +0 diff --git a/tests/data/list_water_spins.txt b/tests/data/list_water_spins.txt new file mode 100644 index 0000000..bb0b1cf --- /dev/null +++ b/tests/data/list_water_spins.txt @@ -0,0 +1,3 @@ +0 +0 +0 From 96f05f276d18cae64d4920295603ab68dd6f3449 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Fri, 6 Dec 2024 13:42:54 +0100 Subject: [PATCH 12/20] removed `spin` ARG in `bond()` - alpha/beta split is purely defined by `omods` ARG (evaluated in `get_repr()`) --- qstack/spahm/rho/bond.py | 12 ++++++------ qstack/spahm/rho/utils.py | 2 +- tests/test_spahm_b.py | 7 +++---- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/qstack/spahm/rho/bond.py b/qstack/spahm/rho/bond.py index a1390fe..6cabb84 100755 --- a/qstack/spahm/rho/bond.py +++ b/qstack/spahm/rho/bond.py @@ -10,7 +10,7 @@ def bond(mols, dms, bpath=defaults.bpath, cutoff=defaults.cutoff, omods=defaults.omod, - spin=None, elements=None, only_m0=False, zeros=False, printlevel=0, + elements=None, only_m0=False, zeros=False, printlevel=0, pairfile=None, dump_and_exit=False, same_basis=False, only_z=[]): """ Computes SPAHM-b representations for a set of molecules. @@ -20,7 +20,6 @@ def bond(mols, dms, - bpath (str): path to the directory containing bond-optimized basis-functions (.bas) - cutoff (float): the cutoff distance (angstrom) between atoms to be considered as bond - omods (list of str): the selected mode for open-shell computations - - spin (list of int): list of spins for each molecule - elements (list of str): list of all elements present in the set of molecules - only_m0 (bool): use only basis functions with `m=0` - zeros (bool): add zeros features for non-existing bond pairs @@ -40,8 +39,6 @@ def bond(mols, dms, elements, mybasis, qqs0, qqs4q, idx, M = dmbb.read_basis_wrapper(mols, bpath, only_m0, printlevel, elements=elements, cutoff=cutoff, pairfile=pairfile, dump_and_exit=dump_and_exit, same_basis=same_basis) - if np.array(spin==None, ndmin=1).all(): - omods = [None] qqs = qqs0 if zeros else qqs4q maxlen = max([dmbb.bonds_dict_init(qqs[q0], M)[1] for q0 in elements]) if len(only_z) > 0: @@ -116,10 +113,13 @@ def get_repr(mols, xyzlist, guess, xc=defaults.xc, spin=None, readdm=None, all_atoms = np.array([z for mol in mols for z in mol.elements if z in only_z], ndmin=2) else: all_atoms = np.array([mol.elements for mol in mols]) + spin = np.array(spin) ## a bit dirty but couldn't find a better way to ensure Iterable type! + if (spin == None).all(): + omods = [None] allvec = bond(mols, dms, bpath, cutoff, omods, - spin=spin, elements=elements, - only_m0=only_m0, zeros=zeros, printlevel=printlevel, + elements=elements, only_m0=only_m0, + zeros=zeros, printlevel=printlevel, pairfile=pairfile, dump_and_exit=dump_and_exit, same_basis=same_basis, only_z=only_z) maxlen=allvec.shape[-1] natm = allvec.shape[-2] diff --git a/qstack/spahm/rho/utils.py b/qstack/spahm/rho/utils.py index 08ff35b..854111a 100644 --- a/qstack/spahm/rho/utils.py +++ b/qstack/spahm/rho/utils.py @@ -60,7 +60,7 @@ def mols_guess(mols, xyzlist, guess, xc=defaults.xc, spin=None, readdm=False, pr if printlevel>0: print(xyzfile, flush=True) if not readdm: e, v = spahm.get_guess_orbitals(mol, guess, xc=xc) - dm = guesses.get_dm(v, mol.nelec, mol.spin if spin is not None else None) + dm = guesses.get_dm(v, mol.nelec, mol.spin if spin is not None else None) # mol.spin can not be `None` else: dm = np.load(readdm+'/'+os.path.basename(xyzfile)+'.npy') if spin and dm.ndim==2: diff --git a/tests/test_spahm_b.py b/tests/test_spahm_b.py index 09334b4..7399bff 100755 --- a/tests/test_spahm_b.py +++ b/tests/test_spahm_b.py @@ -9,7 +9,6 @@ def test_water(): mols = utils.load_mols([xyz_in], [0], [0], 'minao') dms = utils.mols_guess(mols, [xyz_in], 'LB', spin=[0]) X = bond.get_repr(mols, [xyz_in], 'LB', spin=[0], with_symbols=False, same_basis=False) - #X = np.hstack(X) # merging alpha-beta components for spin unrestricted representation #TODO: should be included into function not in main true_file = path+'/data/H2O_spahm_b.npy_alpha_beta.npy' X_true = np.load(true_file) assert(X_true.shape == X.shape) @@ -21,7 +20,7 @@ def test_water_O_only(): xyz_in = path+'/data/H2O.xyz' mols = utils.load_mols([xyz_in], [0], [0], 'minao') dms = utils.mols_guess(mols, [xyz_in], 'LB', spin=[0]) - X = bond.bond(mols, dms, spin=[0], only_z=['O']) + X = bond.bond(mols, dms, only_z=['O']) X = np.squeeze(X) #contains a single elements but has shape (1,Nfeat) X = np.hstack(X) # merging alpha-beta components for spin unrestricted representation #TODO: should be included into function not in main true_file = path+'/data/H2O_spahm_b.npy_alpha_beta.npy' @@ -36,7 +35,7 @@ def test_water_same_basis(): xyz_in = path+'/data/H2O.xyz' mols = utils.load_mols([xyz_in], [0], [0], 'minao') dms = utils.mols_guess(mols, [xyz_in], 'LB', spin=[0]) - X = bond.bond(mols, dms, spin=[0], same_basis=True) + X = bond.bond(mols, dms, same_basis=True) X = np.squeeze(X) #contains a single elements but has shape (1,Nfeat) X = np.hstack(X) # merging alpha-beta components for spin unrestricted representation #TODO: should be included into function not in main true_file = path+'/data/H2O_spahm_b_CCbas.npy_alpha_beta.npy' @@ -50,7 +49,7 @@ def test_ecp(): xyz_in = path+'/data/I2.xyz' mols = utils.load_mols([xyz_in], [0], [None], 'minao', ecp='def2-svp') dms = utils.mols_guess(mols, [xyz_in], 'LB', spin=[None]) - X = bond.bond(mols, dms, spin=[None], same_basis=True) + X = bond.bond(mols, dms, same_basis=True) X = np.squeeze(X) #contains a single elements but has shape (1,Nfeat) X = np.hstack(X) # merging alpha-beta components for spin unrestricted representation #TODO: should be included into function not in main true_file = path+'/data/I2_spahm-b_minao-def2-svp_alpha-beta.npy' From e3a951d8c8fddf8d009fbb0d704c283e63e492ff Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Fri, 6 Dec 2024 15:18:54 +0100 Subject: [PATCH 13/20] fixed spin evaluation and output-filename --- qstack/spahm/rho/bond.py | 9 ++++++--- qstack/spahm/rho/utils.py | 6 +++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/qstack/spahm/rho/bond.py b/qstack/spahm/rho/bond.py index 6cabb84..e4566c9 100755 --- a/qstack/spahm/rho/bond.py +++ b/qstack/spahm/rho/bond.py @@ -180,8 +180,8 @@ def main(): if args.filename.endswith('xyz'): xyzlist = [args.filename] - charge = [int(args.charge) if args.charge is not None else 0] - spin = [int(args.spin) if args.spin is not None else None] + charge = np.array([int(args.charge) if args.charge is not None else 0]) + spin = np.array([int(args.spin) if args.spin is not None else None]) else: xyzlistfile = args.filename xyzlist = utils.get_xyzlist(xyzlistfile) @@ -195,7 +195,10 @@ def main(): elements=args.elements, only_m0=args.only_m0, zeros=args.zeros, split=args.split, only_z=args.only_z) if args.print > 0: print(reps.shape) if args.merge: - np.save(args.name_out+'_'+'_'.join(args.omod), reps) + if (spin == None).all(): + np.save(args.name_out, reps) + else: + np.save(args.name_out+'_'+'_'.join(args.omod), reps) else: for vec, omod in zip(reps, args.omod): np.save(args.name_out+'_'+omod, vec) diff --git a/qstack/spahm/rho/utils.py b/qstack/spahm/rho/utils.py index 854111a..b7b03d2 100644 --- a/qstack/spahm/rho/utils.py +++ b/qstack/spahm/rho/utils.py @@ -53,14 +53,14 @@ def load_mols(xyzlist, charge, spin, basis, printlevel=0, units='ANG', ecp=None, return mols -def mols_guess(mols, xyzlist, guess, xc=defaults.xc, spin=None, readdm=False, printlevel=0): +def mols_guess(mols, xyzlist, guess, xc=defaults.xc, spin=[None], readdm=False, printlevel=0): dms = [] guess = guesses.get_guess(guess) - for xyzfile, mol in zip(xyzlist, mols): + for xyzfile, mol, sp in zip(xyzlist, mols, spin): if printlevel>0: print(xyzfile, flush=True) if not readdm: e, v = spahm.get_guess_orbitals(mol, guess, xc=xc) - dm = guesses.get_dm(v, mol.nelec, mol.spin if spin is not None else None) # mol.spin can not be `None` + dm = guesses.get_dm(v, mol.nelec, mol.spin if sp is not None else None) else: dm = np.load(readdm+'/'+os.path.basename(xyzfile)+'.npy') if spin and dm.ndim==2: From 8a4afbb8ac8efb2e8cb7af5811dde76b891bba79 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Fri, 6 Dec 2024 15:20:39 +0100 Subject: [PATCH 14/20] add closed-shell rep test and fixed `test_ecp` --- tests/data/H2O_spahm_b.npy | Bin 0 -> 13424 bytes tests/test_spahm_b.py | 18 ++++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 tests/data/H2O_spahm_b.npy diff --git a/tests/data/H2O_spahm_b.npy b/tests/data/H2O_spahm_b.npy new file mode 100644 index 0000000000000000000000000000000000000000..aeec4ac9d9856322e3e4e25c76320aade6931624 GIT binary patch literal 13424 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 literal 0 HcmV?d00001 diff --git a/tests/test_spahm_b.py b/tests/test_spahm_b.py index 7399bff..482394c 100755 --- a/tests/test_spahm_b.py +++ b/tests/test_spahm_b.py @@ -15,6 +15,19 @@ def test_water(): for Xa, Xa_true in zip(X, X_true): assert(np.linalg.norm(Xa-Xa_true) < 1e-8) # evaluating representation diff as norm (threshold = 1e-8) +def test_water_closed(): + path = os.path.dirname(os.path.realpath(__file__)) + xyz_in = path+'/data/H2O.xyz' + mols = utils.load_mols([xyz_in], [None], [0], 'minao') + dms = utils.mols_guess(mols, [xyz_in], 'LB', spin=[None]) + X = bond.get_repr(mols, [xyz_in], 'LB', spin=[None], with_symbols=False, same_basis=False) + true_file = path+'/data/H2O_spahm_b.npy' + X_true = np.load(true_file) + print(X_true.shape) + assert(X_true.shape == X.shape) + for Xa, Xa_true in zip(X, X_true): + assert(np.linalg.norm(Xa-Xa_true) < 1e-8) # evaluating representation diff as norm (threshold = 1e-8) + def test_water_O_only(): path = os.path.dirname(os.path.realpath(__file__)) xyz_in = path+'/data/H2O.xyz' @@ -47,8 +60,8 @@ def test_water_same_basis(): def test_ecp(): path = os.path.dirname(os.path.realpath(__file__)) xyz_in = path+'/data/I2.xyz' - mols = utils.load_mols([xyz_in], [0], [None], 'minao', ecp='def2-svp') - dms = utils.mols_guess(mols, [xyz_in], 'LB', spin=[None]) + mols = utils.load_mols([xyz_in], [0], [0], 'minao', ecp='def2-svp') + dms = utils.mols_guess(mols, [xyz_in], 'LB', spin=[0]) X = bond.bond(mols, dms, same_basis=True) X = np.squeeze(X) #contains a single elements but has shape (1,Nfeat) X = np.hstack(X) # merging alpha-beta components for spin unrestricted representation #TODO: should be included into function not in main @@ -75,4 +88,5 @@ def test_from_list(): if __name__ == '__main__': test_water() test_from_list() + test_water_closed() From 878ef501b069b9e8134b7b18fa19ba68dc0fa45d Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Wed, 18 Dec 2024 19:14:22 +0100 Subject: [PATCH 15/20] should fix GH-checks --- environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index a60c765..3b22e68 100644 --- a/environment.yml +++ b/environment.yml @@ -19,8 +19,8 @@ dependencies: - mkl_fft=1.3.1=py39hd3c417c_0 - mkl_random=1.2.2=py39h51133e4_0 - ncurses=6.3=h7f8727e_2 - - numpy=1.21.2=py39h20f2e39_0 - - numpy-base=1.21.2=py39h79a1101_0 + - numpy=1.26.4=py311he598dae_0 + - numpy-base=1.26.4=py311hfbfe69c_0 - openssl=1.1.1l=h7f8727e_0 - pip=22.3 - python=3.9.7=h12debd9_1 From ccee36e14808f9170eea9ff4852faaf5298051c5 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Wed, 18 Dec 2024 19:43:57 +0100 Subject: [PATCH 16/20] re-fix yml env --- environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index 3b22e68..c8a2855 100644 --- a/environment.yml +++ b/environment.yml @@ -19,8 +19,8 @@ dependencies: - mkl_fft=1.3.1=py39hd3c417c_0 - mkl_random=1.2.2=py39h51133e4_0 - ncurses=6.3=h7f8727e_2 - - numpy=1.26.4=py311he598dae_0 - - numpy-base=1.26.4=py311hfbfe69c_0 + - numpy=1.23.5=py310h5f9d8c6_1 + - numpy-base=1.23.5=py310hb5e798b_1 - openssl=1.1.1l=h7f8727e_0 - pip=22.3 - python=3.9.7=h12debd9_1 From 2d65da97b0208881cf44c53fc297ec86a972ac70 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Wed, 18 Dec 2024 23:12:39 +0100 Subject: [PATCH 17/20] fix default species determination (now on-the-fly) --- qstack/spahm/rho/atom.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/qstack/spahm/rho/atom.py b/qstack/spahm/rho/atom.py index 1878728..d1a5cd2 100755 --- a/qstack/spahm/rho/atom.py +++ b/qstack/spahm/rho/atom.py @@ -63,7 +63,7 @@ def main(): parser.add_argument('--aux-basis', dest='auxbasis', default=defaults.auxbasis, type=str, help=f"auxiliary basis set for density fitting (default: {defaults.auxbasis})") parser.add_argument('--model', dest='model', default=defaults.model, type=str, help=f"the model to use when creating the representation (default: {defaults.model})") parser.add_argument('--dm', dest='dm', default=None, type=str, help="a density matrix to load instead of computing the guess") - parser.add_argument('--species', dest='elements', default=defaults.elements, nargs='+', type=str, help="the elements contained in the database") + parser.add_argument('--species', dest='elements', default=None, nargs='+', type=str, help="the elements contained in the database") parser.add_argument('--only', dest='only_z', default=None, nargs='+', type=str, help="The restricted list of elements for which you want to generate the representation") parser.add_argument('--charge', dest='charge', default=0, type=int, help='total charge of the system (default: 0)') parser.add_argument('--spin', dest='spin', default=None, type=int, help='number of unpaired electrons (default: None) (use 0 to treat a closed-shell system in a UHF manner)') @@ -77,7 +77,12 @@ def main(): mol = compound.xyz_to_mol(check_file(args.mol), args.basis, charge=args.charge, spin=args.spin, unit=args.units, ecp=args.ecp) dm = None if args.dm is None else np.load(args.dm) - representations = get_repr(mol, args.elements, args.charge, args.spin, + if args.elements is None: + elements = sorted(mol.elements) + else: + elements = args.elements + + representations = get_repr(mol, elements, args.charge, args.spin, open_mod=args.omod, dm=dm, guess=args.guess, model=args.model, xc=args.xc, auxbasis=args.auxbasis, only_z=args.only_z) From f12b9aa21606878e51326d48678e1c9f23d98895 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Wed, 18 Dec 2024 23:24:56 +0100 Subject: [PATCH 18/20] try another fix --- environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index c8a2855..d335e99 100644 --- a/environment.yml +++ b/environment.yml @@ -19,8 +19,8 @@ dependencies: - mkl_fft=1.3.1=py39hd3c417c_0 - mkl_random=1.2.2=py39h51133e4_0 - ncurses=6.3=h7f8727e_2 - - numpy=1.23.5=py310h5f9d8c6_1 - - numpy-base=1.23.5=py310hb5e798b_1 + - numpy=1.23.* + - numpy-base=1.23.* - openssl=1.1.1l=h7f8727e_0 - pip=22.3 - python=3.9.7=h12debd9_1 From b7da960953e32c3d0583754eb88581293af875f1 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Thu, 19 Dec 2024 12:34:27 +0100 Subject: [PATCH 19/20] updated nupmy version and exported new conda env --- environment.yml | 102 ++++++++++++++++++++++------------------ requirements.py3.11.txt | 2 +- 2 files changed, 56 insertions(+), 48 deletions(-) diff --git a/environment.yml b/environment.yml index d335e99..63e2f1b 100644 --- a/environment.yml +++ b/environment.yml @@ -3,51 +3,59 @@ channels: - conda-forge - defaults dependencies: - - _libgcc_mutex=0.1=main - - _openmp_mutex=4.5=1_gnu - - blas=1.0=mkl - - ca-certificates=2021.10.26=h06a4308_2 - - certifi=2021.10.8=py39h06a4308_0 - - intel-openmp=2021.4.0=h06a4308_3561 - - ld_impl_linux-64=2.35.1=h7274673_9 - - libffi=3.3=he6710b0_2 - - libgcc-ng=9.3.0=h5101ec6_17 - - libgomp=9.3.0=h5101ec6_17 - - libstdcxx-ng=9.3.0=hd4cf53a_17 - - mkl=2021.4.0=h06a4308_640 - - mkl-service=2.4.0=py39h7f8727e_0 - - mkl_fft=1.3.1=py39hd3c417c_0 - - mkl_random=1.2.2=py39h51133e4_0 - - ncurses=6.3=h7f8727e_2 - - numpy=1.23.* - - numpy-base=1.23.* - - openssl=1.1.1l=h7f8727e_0 - - pip=22.3 - - python=3.9.7=h12debd9_1 - - readline=8.1=h27cfd23_0 - - setuptools=58.0.4=py39h06a4308_0 - - six=1.16.0=pyhd3eb1b0_0 - - sqlite=3.37.0=hc218d9a_0 - - tk=8.6.11=h1ccaba5_0 - - tzdata=2021e=hda174b7_0 - - wheel=0.37.0=pyhd3eb1b0_1 - - xz=5.2.5=h7b6447c_0 - - zlib=1.2.11=h7f8727e_4 - - scikit-learn + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=2_gnu + - bzip2=1.0.8=h4bc722e_7 + - ca-certificates=2024.12.14=hbcca054_0 + - ld_impl_linux-64=2.43=h712a8e2_2 + - libexpat=2.6.4=h5888daf_0 + - libffi=3.4.2=h7f98852_5 + - libgcc=14.2.0=h77fa898_1 + - libgcc-ng=14.2.0=h69a702a_1 + - libgomp=14.2.0=h77fa898_1 + - liblzma=5.6.3=hb9d3cd8_1 + - libnsl=2.0.1=hd590300_0 + - libsqlite=3.47.2=hee588c1_0 + - libuuid=2.38.1=h0b41bf4_0 + - libxcrypt=4.4.36=hd590300_1 + - libzlib=1.3.1=hb9d3cd8_2 + - ncurses=6.5=he02047a_1 + - openssl=3.4.0=hb9d3cd8_0 + - pip=24.3.1=pyh8b19718_2 + - python=3.11.11=h9e4cc4f_1_cpython + - readline=8.2=h8228510_1 + - setuptools=75.6.0=pyhff2d567_1 + - tk=8.6.13=noxft_h4845f30_101 + - tzdata=2024b=hc8b5060_0 + - wheel=0.45.1=pyhd8ed1ab_1 - pip: - - attrs==21.4.0 - - h5py==3.6.0 - - iniconfig==1.1.1 - - packaging==21.3 - - pluggy==1.0.0 - - py==1.11.0 - - pyparsing==3.0.6 - - pyscf==2.0.1 - - pytest==6.2.5 - - scipy==1.7.3 - - toml==0.10.2 - - ase==3.22 - - tqdm==4.66 - - metatensor-core==0.1.8 - - git+https://github.com/lcmd-epfl/cell2mol.git@22473bbf12a013467137a55a63c88fbbdc95baa2 - - qstack/qstack-qml + - ase==3.22.0 + - attrs==21.4.0 + - cell2mol==1.0 + - certifi==2021.10.8 + - contourpy==1.3.1 + - cycler==0.12.1 + - fonttools==4.55.3 + - h5py==3.11.0 + - iniconfig==1.1.1 + - joblib==1.4.2 + - kiwisolver==1.4.7 + - matplotlib==3.10.0 + - metatensor-core==0.1.8 + - numpy==1.23.5 + - packaging==21.3 + - pillow==11.0.0 + - pluggy==1.0.0 + - py==1.11.0 + - pyparsing==3.0.6 + - pyscf==2.2.0 + - pytest==6.2.5 + - python-dateutil==2.9.0.post0 + - qstack-qml==0.0.1 + - scikit-learn==1.5.0 + - scipy==1.10.0 + - six==1.17.0 + - threadpoolctl==3.5.0 + - toml==0.10.2 + - tqdm==4.66.0 +prefix: /home/ycalvino/miniconda3/envs/qstack-yml-11 diff --git a/requirements.py3.11.txt b/requirements.py3.11.txt index 3c6c4be..de038e4 100644 --- a/requirements.py3.11.txt +++ b/requirements.py3.11.txt @@ -8,7 +8,7 @@ py==1.11.0 pyparsing==3.0.6 pyscf==2.2.0 pytest==6.2.5 -numpy===1.22.3 +numpy==1.23.* scipy==1.10 toml==0.10.2 scikit-learn==1.5.0 From e1c9cca0517ccbe7c859fb212797a7382c4de7f2 Mon Sep 17 00:00:00 2001 From: Yannick Calvino Alonso Date: Thu, 19 Dec 2024 12:51:05 +0100 Subject: [PATCH 20/20] final fix (I swear to GOD) --- environment.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/environment.yml b/environment.yml index 63e2f1b..d50ffe4 100644 --- a/environment.yml +++ b/environment.yml @@ -31,7 +31,7 @@ dependencies: - pip: - ase==3.22.0 - attrs==21.4.0 - - cell2mol==1.0 + - git+https://github.com/lcmd-epfl/cell2mol.git - certifi==2021.10.8 - contourpy==1.3.1 - cycler==0.12.1 @@ -51,11 +51,10 @@ dependencies: - pyscf==2.2.0 - pytest==6.2.5 - python-dateutil==2.9.0.post0 - - qstack-qml==0.0.1 + - qstack/qstack-qml - scikit-learn==1.5.0 - scipy==1.10.0 - six==1.17.0 - threadpoolctl==3.5.0 - toml==0.10.2 - tqdm==4.66.0 -prefix: /home/ycalvino/miniconda3/envs/qstack-yml-11