molSimplify 1.7.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- docs/source/conf.py +224 -0
- molSimplify/Classes/__init__.py +6 -0
- molSimplify/Classes/atom3D.py +235 -0
- molSimplify/Classes/dft_obs.py +130 -0
- molSimplify/Classes/globalvars.py +827 -0
- molSimplify/Classes/helpers.py +161 -0
- molSimplify/Classes/ligand.py +2330 -0
- molSimplify/Classes/mGUI.py +2493 -0
- molSimplify/Classes/mWidgets.py +438 -0
- molSimplify/Classes/miniGUI.py +41 -0
- molSimplify/Classes/mol2D.py +260 -0
- molSimplify/Classes/mol3D.py +5846 -0
- molSimplify/Classes/monomer3D.py +253 -0
- molSimplify/Classes/partialcharges.py +226 -0
- molSimplify/Classes/protein3D.py +1178 -0
- molSimplify/Classes/rundiag.py +151 -0
- molSimplify/Data/ML.dat +212 -0
- molSimplify/Data/MLS_FSR_for_inter.dat +23 -0
- molSimplify/Data/MLS_FSR_for_inter2.dat +23 -0
- molSimplify/Data/MLS_angle_for_click.dat +8 -0
- molSimplify/Data/MLS_angle_for_inter.dat +23 -0
- molSimplify/Data/MLS_angle_for_inter2.dat +48 -0
- molSimplify/Data/MLS_angle_for_intra.dat +10 -0
- molSimplify/Data/MLS_angle_for_intra2.dat +6 -0
- molSimplify/Data/MLS_angle_for_oa.dat +18 -0
- molSimplify/Data/ML_FSR_for_inter.dat +112 -0
- molSimplify/Data/ML_FSR_for_inter2.dat +110 -0
- molSimplify/Data/ML_bond_for_cat.dat +8 -0
- molSimplify/Data/ML_bond_for_click.dat +8 -0
- molSimplify/Data/ML_bond_for_inter.dat +48 -0
- molSimplify/Data/ML_bond_for_inter2.dat +48 -0
- molSimplify/Data/ML_bond_for_intra.dat +10 -0
- molSimplify/Data/ML_bond_for_intra2.dat +6 -0
- molSimplify/Data/ML_bond_for_oa.dat +18 -0
- molSimplify/Data/bp1.dat +21 -0
- molSimplify/Data/li.dat +3 -0
- molSimplify/Data/no.dat +2 -0
- molSimplify/Data/oct.dat +7 -0
- molSimplify/Data/pbp.dat +8 -0
- molSimplify/Data/spy.dat +6 -0
- molSimplify/Data/sqap.dat +9 -0
- molSimplify/Data/sqp.dat +5 -0
- molSimplify/Data/tbp.dat +6 -0
- molSimplify/Data/tdhd.dat +9 -0
- molSimplify/Data/thd.dat +5 -0
- molSimplify/Data/tpl.dat +4 -0
- molSimplify/Data/tpr.dat +7 -0
- molSimplify/Informatics/HFXsensitivity/__init__.py +0 -0
- molSimplify/Informatics/HFXsensitivity/measure_HFX_sensitivity_oxo_hat_reb_rel.py +443 -0
- molSimplify/Informatics/HFXsensitivity/measure_HFX_stable.py +346 -0
- molSimplify/Informatics/MOF/Linker_rotation.py +179 -0
- molSimplify/Informatics/MOF/MOF_descriptors.py +1299 -0
- molSimplify/Informatics/MOF/MOF_descriptors_alternate_functional.py +589 -0
- molSimplify/Informatics/MOF/MOF_functionalizer.py +1648 -0
- molSimplify/Informatics/MOF/PBC_functions.py +1347 -0
- molSimplify/Informatics/MOF/__init__.py +0 -0
- molSimplify/Informatics/MOF/atomic.py +267 -0
- molSimplify/Informatics/MOF/cluster_extraction.py +388 -0
- molSimplify/Informatics/MOF/fragment_MOFs_for_pormake.py +895 -0
- molSimplify/Informatics/MOF/monofunctionalized_BDC/index_information.py +10 -0
- molSimplify/Informatics/Mol2Parser.py +46 -0
- molSimplify/Informatics/RACassemble.py +408 -0
- molSimplify/Informatics/__init__.py +0 -0
- molSimplify/Informatics/active_learning/__init__.py +0 -0
- molSimplify/Informatics/active_learning/expected_improvement.py +269 -0
- molSimplify/Informatics/autocorrelation.py +1930 -0
- molSimplify/Informatics/clean_autocorrelation.py +778 -0
- molSimplify/Informatics/coulomb_analyze.py +67 -0
- molSimplify/Informatics/decoration_manager.py +193 -0
- molSimplify/Informatics/geo_analyze.py +88 -0
- molSimplify/Informatics/geometrics.py +56 -0
- molSimplify/Informatics/graph_analyze.py +163 -0
- molSimplify/Informatics/graph_racs.py +288 -0
- molSimplify/Informatics/jupyter_vis.py +172 -0
- molSimplify/Informatics/lacRACAssemble.py +2192 -0
- molSimplify/Informatics/lacRACAssemble_bisdithiolenes.py +236 -0
- molSimplify/Informatics/misc_descriptors.py +198 -0
- molSimplify/Informatics/organic_fingerprints.py +61 -0
- molSimplify/Informatics/partialcharges.py +345 -0
- molSimplify/Informatics/protein/activesite.py +53 -0
- molSimplify/Informatics/protein/pymol_add_hs.py +33 -0
- molSimplify/Informatics/rac155_geo.py +48 -0
- molSimplify/Ligands/(1_methylbenzimidazol_2_yl)pyridine.xyz +45 -0
- molSimplify/Ligands/1-4-dimethyl-1-2-3-triazole.xyz +15 -0
- molSimplify/Ligands/12crown4.mol +62 -0
- molSimplify/Ligands/Antipyrine.mol +58 -0
- molSimplify/Ligands/BPAbipy.mol +106 -0
- molSimplify/Ligands/Hpyrrole.mol +26 -0
- molSimplify/Ligands/N-quinolinylbutyramidate.xyz +31 -0
- molSimplify/Ligands/N-quinolinylmethylmethinylacetamidate.xyz +30 -0
- molSimplify/Ligands/NMe2_-1.xyz +11 -0
- molSimplify/Ligands/PCy3.mol +111 -0
- molSimplify/Ligands/PMe3.xyz +15 -0
- molSimplify/Ligands/PPh3.mol +76 -0
- molSimplify/Ligands/Propyphenazone.mol +77 -0
- molSimplify/Ligands/acac.mol +33 -0
- molSimplify/Ligands/acacen.mol +76 -0
- molSimplify/Ligands/acetate.smi +1 -0
- molSimplify/Ligands/acetate.xyz +9 -0
- molSimplify/Ligands/aceticacidbipyridine.mol +70 -0
- molSimplify/Ligands/acetonitrile.mol +17 -0
- molSimplify/Ligands/alanine.mol +30 -0
- molSimplify/Ligands/alphabetizer.py +21 -0
- molSimplify/Ligands/amine.mol +11 -0
- molSimplify/Ligands/ammonia.mol +12 -0
- molSimplify/Ligands/arginine.mol +58 -0
- molSimplify/Ligands/asparagine.mol +38 -0
- molSimplify/Ligands/aspartic_acid.mol +35 -0
- molSimplify/Ligands/azide.mol +11 -0
- molSimplify/Ligands/benzene.mol +28 -0
- molSimplify/Ligands/benzene_pi.mol +30 -0
- molSimplify/Ligands/benzenedithiol.mol +30 -0
- molSimplify/Ligands/benzenethiol.mol +30 -0
- molSimplify/Ligands/benzylisocy.mol +38 -0
- molSimplify/Ligands/bidiazine.mol +42 -0
- molSimplify/Ligands/bidiazole.mol +38 -0
- molSimplify/Ligands/bifuran.mol +38 -0
- molSimplify/Ligands/bihydrodiazine.mol +58 -0
- molSimplify/Ligands/bihydrodiazole.mol +46 -0
- molSimplify/Ligands/bihydrooxazine.mol +54 -0
- molSimplify/Ligands/bihydrooxazole.mol +42 -0
- molSimplify/Ligands/bihydrothiazine.mol +54 -0
- molSimplify/Ligands/bihydrothiazole.mol +42 -0
- molSimplify/Ligands/biimidazole.mol +38 -0
- molSimplify/Ligands/bioxazole.mol +34 -0
- molSimplify/Ligands/bipy.mol +46 -0
- molSimplify/Ligands/bipyrazine.xyz +20 -0
- molSimplify/Ligands/bipyrimidine.mol +42 -0
- molSimplify/Ligands/bipyrrole.mol +42 -0
- molSimplify/Ligands/bisnapthyridylpyridine.mol +111 -0
- molSimplify/Ligands/bithiazole.mol +34 -0
- molSimplify/Ligands/bromide.mol +7 -0
- molSimplify/Ligands/bromide.smi +1 -0
- molSimplify/Ligands/c2.mol +9 -0
- molSimplify/Ligands/caprolactone.mol +41 -0
- molSimplify/Ligands/carbonyl.mol +8 -0
- molSimplify/Ligands/carboxyl.mol +13 -0
- molSimplify/Ligands/cat.mol +30 -0
- molSimplify/Ligands/chloride.mol +7 -0
- molSimplify/Ligands/chloride.smi +1 -0
- molSimplify/Ligands/chloropyridine.mol +27 -0
- molSimplify/Ligands/co2.mol +10 -0
- molSimplify/Ligands/corrolazine.mol +72 -0
- molSimplify/Ligands/cs.mol +8 -0
- molSimplify/Ligands/cyanate.xyz +5 -0
- molSimplify/Ligands/cyanide.mol +9 -0
- molSimplify/Ligands/cyanoaceticporphyrin.mol +114 -0
- molSimplify/Ligands/cyanopyridine.mol +29 -0
- molSimplify/Ligands/cyclam.mol +81 -0
- molSimplify/Ligands/cyclen.mol +69 -0
- molSimplify/Ligands/cyclopentadienyl.mol +26 -0
- molSimplify/Ligands/cysteine.mol +32 -0
- molSimplify/Ligands/diaminomethyl.mol +19 -0
- molSimplify/Ligands/diazine.mol +25 -0
- molSimplify/Ligands/diazole.mol +23 -0
- molSimplify/Ligands/dicyanamide.mol +15 -0
- molSimplify/Ligands/dihydrofuran.mol +27 -0
- molSimplify/Ligands/dmap.xyz +35 -0
- molSimplify/Ligands/dmf.mol +28 -0
- molSimplify/Ligands/dmi.mol +41 -0
- molSimplify/Ligands/dmpe.mol +52 -0
- molSimplify/Ligands/dpmu.mol +47 -0
- molSimplify/Ligands/dppe.mol +112 -0
- molSimplify/Ligands/edta.mol +69 -0
- molSimplify/Ligands/en.mol +28 -0
- molSimplify/Ligands/ethanethiol.mol +21 -0
- molSimplify/Ligands/ethanolamine.mol +26 -0
- molSimplify/Ligands/ethbipy.mol +70 -0
- molSimplify/Ligands/ethyl.mol +19 -0
- molSimplify/Ligands/ethylamine.mol +24 -0
- molSimplify/Ligands/ethylene.mol +16 -0
- molSimplify/Ligands/ethylesteracac.mol +57 -0
- molSimplify/Ligands/fluoride.mol +7 -0
- molSimplify/Ligands/fluoride.smi +1 -0
- molSimplify/Ligands/formaldehyde.mol +12 -0
- molSimplify/Ligands/formamidate.xyz +8 -0
- molSimplify/Ligands/formate.xyz +6 -0
- molSimplify/Ligands/furan.mol +23 -0
- molSimplify/Ligands/glutamic_acid.mol +42 -0
- molSimplify/Ligands/glutamine.mol +44 -0
- molSimplify/Ligands/glycinate.mol +23 -0
- molSimplify/Ligands/glycine.mol +24 -0
- molSimplify/Ligands/h2s.mol +10 -0
- molSimplify/Ligands/helium.mol +6 -0
- molSimplify/Ligands/histidine.mol +45 -0
- molSimplify/Ligands/hmpa.mol +62 -0
- molSimplify/Ligands/hs-.mol +9 -0
- molSimplify/Ligands/hydride.mol +7 -0
- molSimplify/Ligands/hydrocarboxyacetylide.xyz +8 -0
- molSimplify/Ligands/hydrocyanide.mol +10 -0
- molSimplify/Ligands/hydrodiazine.mol +33 -0
- molSimplify/Ligands/hydrodiazole.mol +27 -0
- molSimplify/Ligands/hydrogensulfide.mol +10 -0
- molSimplify/Ligands/hydroisocyanide.mol +11 -0
- molSimplify/Ligands/hydrooxazine.mol +31 -0
- molSimplify/Ligands/hydrooxazole.mol +25 -0
- molSimplify/Ligands/hydrothiazine.mol +31 -0
- molSimplify/Ligands/hydrothiazole.mol +25 -0
- molSimplify/Ligands/hydroxyl.mol +9 -0
- molSimplify/Ligands/imidazole.mol +23 -0
- molSimplify/Ligands/imidazolidinone.mol +29 -0
- molSimplify/Ligands/imine.mol +13 -0
- molSimplify/Ligands/iminodiacetic.mol +33 -0
- molSimplify/Ligands/iodide.mol +7 -0
- molSimplify/Ligands/iodobenzene.xyz +14 -0
- molSimplify/Ligands/isoleucine.mol +48 -0
- molSimplify/Ligands/isothiocyanate.mol +11 -0
- molSimplify/Ligands/leucine.mol +48 -0
- molSimplify/Ligands/ligands.dict +257 -0
- molSimplify/Ligands/lysine.mol +54 -0
- molSimplify/Ligands/mebenzenedithiol.mol +36 -0
- molSimplify/Ligands/mebim_py.xyz +29 -0
- molSimplify/Ligands/mebim_pz.xyz +28 -0
- molSimplify/Ligands/mebipy.mol +58 -0
- molSimplify/Ligands/mecat.mol +36 -0
- molSimplify/Ligands/methanal.mol +11 -0
- molSimplify/Ligands/methanethiol.mol +15 -0
- molSimplify/Ligands/methanol.mol +16 -0
- molSimplify/Ligands/methionine.mol +44 -0
- molSimplify/Ligands/methyl.mol +13 -0
- molSimplify/Ligands/methylacetylide.xyz +8 -0
- molSimplify/Ligands/methylamine.mol +19 -0
- molSimplify/Ligands/methylazide.xyz +9 -0
- molSimplify/Ligands/methylisocy.mol +17 -0
- molSimplify/Ligands/methylpyridine.mol +33 -0
- molSimplify/Ligands/n2.mol +8 -0
- molSimplify/Ligands/n4py.xyz +51 -0
- molSimplify/Ligands/nch.mol +10 -0
- molSimplify/Ligands/nco-.mol +11 -0
- molSimplify/Ligands/nethanolamine.mol +26 -0
- molSimplify/Ligands/nitrate.mol +14 -0
- molSimplify/Ligands/nitrite.mol +11 -0
- molSimplify/Ligands/nitro.mol +11 -0
- molSimplify/Ligands/nitrobipy.mol +54 -0
- molSimplify/Ligands/nitroso.mol +8 -0
- molSimplify/Ligands/nme3.mol +30 -0
- molSimplify/Ligands/no-.mol +10 -0
- molSimplify/Ligands/no2-.mol +11 -0
- molSimplify/Ligands/noxygen.mol +8 -0
- molSimplify/Ligands/ns-.mol +10 -0
- molSimplify/Ligands/o-pyridylbenzene.xyz +23 -0
- molSimplify/Ligands/o-pyridylphenylanion.xyz +22 -0
- molSimplify/Ligands/o2-.mol +9 -0
- molSimplify/Ligands/o2.xyz +4 -0
- molSimplify/Ligands/och2.mol +12 -0
- molSimplify/Ligands/oethanolamine.mol +26 -0
- molSimplify/Ligands/ome2.mol +22 -0
- molSimplify/Ligands/ooh.xyz +5 -0
- molSimplify/Ligands/oxalate.mol +17 -0
- molSimplify/Ligands/oxalate.smi +1 -0
- molSimplify/Ligands/oxygen.mol +7 -0
- molSimplify/Ligands/pentacyanocyclopentadienide.mol +36 -0
- molSimplify/Ligands/ph2-.mol +11 -0
- molSimplify/Ligands/ph3.mol +12 -0
- molSimplify/Ligands/phen.mol +51 -0
- molSimplify/Ligands/phenacac.mol +63 -0
- molSimplify/Ligands/phenalalanine.mol +51 -0
- molSimplify/Ligands/phendione.mol +51 -0
- molSimplify/Ligands/phenphen.mol +75 -0
- molSimplify/Ligands/phenylbenzoxazole.mol +54 -0
- molSimplify/Ligands/phenylcyc.mol +99 -0
- molSimplify/Ligands/phenylenediamine.mol +37 -0
- molSimplify/Ligands/phenylisocy.mol +32 -0
- molSimplify/Ligands/phosacidbipy.mol +66 -0
- molSimplify/Ligands/phosphine.mol +13 -0
- molSimplify/Ligands/phosphorine.mol +27 -0
- molSimplify/Ligands/phosphorustrifluoride.mol +12 -0
- molSimplify/Ligands/phthalocyanine.mol +126 -0
- molSimplify/Ligands/pme3o.mol +32 -0
- molSimplify/Ligands/porphyrin.mol +82 -0
- molSimplify/Ligands/pph3o.mol +77 -0
- molSimplify/Ligands/proline.mol +39 -0
- molSimplify/Ligands/propdiol.mol +21 -0
- molSimplify/Ligands/propylene.mol +23 -0
- molSimplify/Ligands/pyridine.mol +27 -0
- molSimplify/Ligands/pyrimidone.mol +27 -0
- molSimplify/Ligands/pyrrole.mol +24 -0
- molSimplify/Ligands/quinoxalinedithiol.mol +39 -0
- molSimplify/Ligands/s2-.mol +9 -0
- molSimplify/Ligands/salen.mol +75 -0
- molSimplify/Ligands/salphen.mol +84 -0
- molSimplify/Ligands/serine.mol +32 -0
- molSimplify/Ligands/simple_ligands.dict +14 -0
- molSimplify/Ligands/sulfacidbipy.mol +63 -0
- molSimplify/Ligands/tbucat.mol +54 -0
- molSimplify/Ligands/tbuphisocy.mol +56 -0
- molSimplify/Ligands/tbutylcyclen.mol +166 -0
- molSimplify/Ligands/tbutylisocy.mol +35 -0
- molSimplify/Ligands/tbutylthiol.mol +33 -0
- molSimplify/Ligands/tcnoet.mol +43 -0
- molSimplify/Ligands/tcnoetOH.mol +45 -0
- molSimplify/Ligands/terpy.mol +65 -0
- molSimplify/Ligands/tetrahydrofuran.mol +31 -0
- molSimplify/Ligands/thiane.mol +37 -0
- molSimplify/Ligands/thiazole.mol +21 -0
- molSimplify/Ligands/thiocyanate.mol +11 -0
- molSimplify/Ligands/thiol.mol +9 -0
- molSimplify/Ligands/thiophene.mol +23 -0
- molSimplify/Ligands/thiopyridine.mol +29 -0
- molSimplify/Ligands/threonine.mol +38 -0
- molSimplify/Ligands/tpp.mol +165 -0
- molSimplify/Ligands/tricyanomethyl.mol +19 -0
- molSimplify/Ligands/trifluoromethyl.mol +13 -0
- molSimplify/Ligands/tryptophan.mol +60 -0
- molSimplify/Ligands/tyrosine.mol +53 -0
- molSimplify/Ligands/uthiol.mol +11 -0
- molSimplify/Ligands/uthiolme2.mol +23 -0
- molSimplify/Ligands/valine.mol +42 -0
- molSimplify/Ligands/water.mol +10 -0
- molSimplify/Ligands/x.mol +6 -0
- molSimplify/Scripts/__init__.py +0 -0
- molSimplify/Scripts/addtodb.py +308 -0
- molSimplify/Scripts/cellbuilder.py +1592 -0
- molSimplify/Scripts/cellbuilder_tools.py +701 -0
- molSimplify/Scripts/chains.py +342 -0
- molSimplify/Scripts/convert_2to3.py +23 -0
- molSimplify/Scripts/dbinteract.py +631 -0
- molSimplify/Scripts/distgeom.py +617 -0
- molSimplify/Scripts/findcorrelations.py +287 -0
- molSimplify/Scripts/generator.py +267 -0
- molSimplify/Scripts/geometry.py +1224 -0
- molSimplify/Scripts/grabguivars.py +845 -0
- molSimplify/Scripts/in_b3lyp_usetc.py +141 -0
- molSimplify/Scripts/inparse.py +1673 -0
- molSimplify/Scripts/io.py +1149 -0
- molSimplify/Scripts/isomers.py +415 -0
- molSimplify/Scripts/jobgen.py +247 -0
- molSimplify/Scripts/krr_prep.py +1262 -0
- molSimplify/Scripts/molSimplify_io.py +18 -0
- molSimplify/Scripts/molden2psi4wfn.py +166 -0
- molSimplify/Scripts/namegen.py +32 -0
- molSimplify/Scripts/nn_prep.py +561 -0
- molSimplify/Scripts/oct_check_mols.py +782 -0
- molSimplify/Scripts/periodic_QE.py +97 -0
- molSimplify/Scripts/postmold.py +304 -0
- molSimplify/Scripts/postmwfn.py +709 -0
- molSimplify/Scripts/postparse.py +488 -0
- molSimplify/Scripts/postproc.py +139 -0
- molSimplify/Scripts/qcgen.py +1450 -0
- molSimplify/Scripts/rmsd.py +489 -0
- molSimplify/Scripts/rungen.py +670 -0
- molSimplify/Scripts/structgen.py +3040 -0
- molSimplify/Scripts/tf_nn_prep.py +894 -0
- molSimplify/Scripts/tsgen.py +295 -0
- molSimplify/Scripts/uq_calibration.py +69 -0
- molSimplify/__init__.py +0 -0
- molSimplify/__main__.py +197 -0
- molSimplify/icons/chemdb.png +0 -0
- molSimplify/icons/hjklogo.png +0 -0
- molSimplify/icons/icon.png +0 -0
- molSimplify/icons/logo.png +0 -0
- molSimplify/icons/logo_old.png +0 -0
- molSimplify/icons/petachem.png +0 -0
- molSimplify/icons/petachem2.png +0 -0
- molSimplify/icons/petachem_full.png +0 -0
- molSimplify/icons/pythonlogo.png +0 -0
- molSimplify/icons/sge copy.png +0 -0
- molSimplify/icons/sge.png +0 -0
- molSimplify/icons/slurm.png +0 -0
- molSimplify/icons/wft1.png +0 -0
- molSimplify/icons/wft2.png +0 -0
- molSimplify/icons/wft3.png +0 -0
- molSimplify/ml/__init__.py +0 -0
- molSimplify/ml/kernels.py +36 -0
- molSimplify/ml/layers.py +29 -0
- molSimplify/molscontrol/__init__.py +14 -0
- molSimplify/molscontrol/_version.py +521 -0
- molSimplify/molscontrol/clf_tools.py +144 -0
- molSimplify/molscontrol/data/README.md +21 -0
- molSimplify/molscontrol/data/look_and_say.dat +15 -0
- molSimplify/molscontrol/dynamic_classifier.py +514 -0
- molSimplify/molscontrol/io_tools.py +363 -0
- molSimplify/molscontrol/molscontrol.py +49 -0
- molSimplify/molscontrol/terachem/jobscript_control.sh +31 -0
- molSimplify/molscontrol/terachem/terachem_input +22 -0
- molSimplify/python_krr/X_train_TS.csv +535 -0
- molSimplify/python_krr/__init__.py +0 -0
- molSimplify/python_krr/hat2_X_mean_std.csv +3 -0
- molSimplify/python_krr/hat2_feature_names.csv +1 -0
- molSimplify/python_krr/hat2_y_mean_std.csv +2 -0
- molSimplify/python_krr/hat_X_mean_std.csv +6 -0
- molSimplify/python_krr/hat_feature_names.csv +1 -0
- molSimplify/python_krr/hat_krr_X_train.csv +5205 -0
- molSimplify/python_krr/hat_krr_dual_coef.csv +1 -0
- molSimplify/python_krr/hat_y_mean_std.csv +2 -0
- molSimplify/python_krr/sklearn_models.py +34 -0
- molSimplify/python_krr/y_train_TS.csv +535 -0
- molSimplify/python_nn/ANN.py +198 -0
- molSimplify/python_nn/__init__.py +0 -0
- molSimplify/python_nn/clf_analysis_tool.py +125 -0
- molSimplify/python_nn/dictionary_toolbox.py +49 -0
- molSimplify/python_nn/ensemble_test.py +309 -0
- molSimplify/python_nn/hs_center.csv +26 -0
- molSimplify/python_nn/hs_scale.csv +26 -0
- molSimplify/python_nn/ls_center.csv +26 -0
- molSimplify/python_nn/ls_scale.csv +26 -0
- molSimplify/python_nn/ms_hs_b1.csv +50 -0
- molSimplify/python_nn/ms_hs_b2.csv +50 -0
- molSimplify/python_nn/ms_hs_b3.csv +1 -0
- molSimplify/python_nn/ms_hs_w1.csv +50 -0
- molSimplify/python_nn/ms_hs_w2.csv +50 -0
- molSimplify/python_nn/ms_hs_w3.csv +1 -0
- molSimplify/python_nn/ms_ls_b1.csv +50 -0
- molSimplify/python_nn/ms_ls_b2.csv +50 -0
- molSimplify/python_nn/ms_ls_b3.csv +1 -0
- molSimplify/python_nn/ms_ls_w1.csv +50 -0
- molSimplify/python_nn/ms_ls_w2.csv +50 -0
- molSimplify/python_nn/ms_ls_w3.csv +1 -0
- molSimplify/python_nn/ms_slope_b1.csv +50 -0
- molSimplify/python_nn/ms_slope_b2.csv +50 -0
- molSimplify/python_nn/ms_slope_b3.csv +1 -0
- molSimplify/python_nn/ms_slope_w1.csv +50 -0
- molSimplify/python_nn/ms_slope_w2.csv +50 -0
- molSimplify/python_nn/ms_slope_w3.csv +1 -0
- molSimplify/python_nn/ms_split_b1.csv +50 -0
- molSimplify/python_nn/ms_split_b2.csv +50 -0
- molSimplify/python_nn/ms_split_b3.csv +1 -0
- molSimplify/python_nn/ms_split_w1.csv +50 -0
- molSimplify/python_nn/ms_split_w2.csv +50 -0
- molSimplify/python_nn/ms_split_w3.csv +1 -0
- molSimplify/python_nn/slope_center.csv +25 -0
- molSimplify/python_nn/slope_scale.csv +25 -0
- molSimplify/python_nn/split_center.csv +26 -0
- molSimplify/python_nn/split_scale.csv +26 -0
- molSimplify/python_nn/tf_ANN.py +762 -0
- molSimplify/python_nn/train_data.csv +1211 -0
- molSimplify/tf_nn/__init__.py +0 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_model.h5 +0 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_name.csv +1591 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_x.csv +2790 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_y.csv +2790 -0
- molSimplify/tf_nn/geo_static_clf/geo_static_clf_vars.csv +154 -0
- molSimplify/tf_nn/geos/hs_ii_bl_x.csv +1577 -0
- molSimplify/tf_nn/geos/hs_ii_bl_y.csv +1577 -0
- molSimplify/tf_nn/geos/hs_ii_model.h5 +0 -0
- molSimplify/tf_nn/geos/hs_ii_model.json +1 -0
- molSimplify/tf_nn/geos/hs_ii_vars.csv +154 -0
- molSimplify/tf_nn/geos/hs_iii_bl_x.csv +1659 -0
- molSimplify/tf_nn/geos/hs_iii_bl_y.csv +1659 -0
- molSimplify/tf_nn/geos/hs_iii_model.h5 +0 -0
- molSimplify/tf_nn/geos/hs_iii_model.json +1 -0
- molSimplify/tf_nn/geos/hs_iii_vars.csv +154 -0
- molSimplify/tf_nn/geos/ls_ii_bl_x.csv +1374 -0
- molSimplify/tf_nn/geos/ls_ii_bl_y.csv +1374 -0
- molSimplify/tf_nn/geos/ls_ii_model.h5 +0 -0
- molSimplify/tf_nn/geos/ls_ii_model.json +1 -0
- molSimplify/tf_nn/geos/ls_ii_vars.csv +154 -0
- molSimplify/tf_nn/geos/ls_iii_bl_x.csv +1364 -0
- molSimplify/tf_nn/geos/ls_iii_bl_y.csv +1364 -0
- molSimplify/tf_nn/geos/ls_iii_model.h5 +0 -0
- molSimplify/tf_nn/geos/ls_iii_model.json +1 -0
- molSimplify/tf_nn/geos/ls_iii_vars.csv +154 -0
- molSimplify/tf_nn/homolumo/gap_model.h5 +0 -0
- molSimplify/tf_nn/homolumo/gap_model.json +1 -0
- molSimplify/tf_nn/homolumo/gap_test_names.csv +175 -0
- molSimplify/tf_nn/homolumo/gap_test_x.csv +176 -0
- molSimplify/tf_nn/homolumo/gap_test_y.csv +176 -0
- molSimplify/tf_nn/homolumo/gap_train_names.csv +699 -0
- molSimplify/tf_nn/homolumo/gap_train_x.csv +700 -0
- molSimplify/tf_nn/homolumo/gap_train_y.csv +700 -0
- molSimplify/tf_nn/homolumo/gap_vars.csv +153 -0
- molSimplify/tf_nn/homolumo/homo_model.h5 +0 -0
- molSimplify/tf_nn/homolumo/homo_model.json +126 -0
- molSimplify/tf_nn/homolumo/homo_test_names.csv +175 -0
- molSimplify/tf_nn/homolumo/homo_test_x.csv +176 -0
- molSimplify/tf_nn/homolumo/homo_test_y.csv +176 -0
- molSimplify/tf_nn/homolumo/homo_train_names.csv +699 -0
- molSimplify/tf_nn/homolumo/homo_train_x.csv +700 -0
- molSimplify/tf_nn/homolumo/homo_train_y.csv +700 -0
- molSimplify/tf_nn/homolumo/homo_vars.csv +153 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_info.json +7 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_model.h5 +0 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_model.json +1 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_test_names.csv +143 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_test_x.csv +144 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_test_y.csv +144 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_train_names.csv +513 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_train_x.csv +514 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_train_y.csv +514 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_val_names.csv +143 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_val_x.csv +58 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_val_y.csv +58 -0
- molSimplify/tf_nn/oxoandhomo/homo_empty_vars.csv +155 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_info.json +7 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_model.h5 +0 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_model.json +1 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_test_names.csv +143 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_test_x.csv +144 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_test_y.csv +144 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_train_names.csv +513 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_train_x.csv +514 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_train_y.csv +514 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_val_names.csv +143 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_val_x.csv +58 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_val_y.csv +58 -0
- molSimplify/tf_nn/oxoandhomo/oxo20_vars.csv +154 -0
- molSimplify/tf_nn/oxocatalysis/hat_model.h5 +0 -0
- molSimplify/tf_nn/oxocatalysis/hat_model.json +1 -0
- molSimplify/tf_nn/oxocatalysis/hat_test_names.csv +419 -0
- molSimplify/tf_nn/oxocatalysis/hat_test_x.csv +420 -0
- molSimplify/tf_nn/oxocatalysis/hat_test_y.csv +420 -0
- molSimplify/tf_nn/oxocatalysis/hat_train_names.csv +1507 -0
- molSimplify/tf_nn/oxocatalysis/hat_train_x.csv +1508 -0
- molSimplify/tf_nn/oxocatalysis/hat_train_y.csv +1508 -0
- molSimplify/tf_nn/oxocatalysis/hat_val_x.csv +169 -0
- molSimplify/tf_nn/oxocatalysis/hat_val_y.csv +169 -0
- molSimplify/tf_nn/oxocatalysis/hat_vars.csv +162 -0
- molSimplify/tf_nn/oxocatalysis/oxo_model.h5 +0 -0
- molSimplify/tf_nn/oxocatalysis/oxo_model.json +1 -0
- molSimplify/tf_nn/oxocatalysis/oxo_test_names.csv +527 -0
- molSimplify/tf_nn/oxocatalysis/oxo_test_x.csv +528 -0
- molSimplify/tf_nn/oxocatalysis/oxo_test_y.csv +528 -0
- molSimplify/tf_nn/oxocatalysis/oxo_train_names.csv +1897 -0
- molSimplify/tf_nn/oxocatalysis/oxo_train_x.csv +1898 -0
- molSimplify/tf_nn/oxocatalysis/oxo_train_y.csv +1898 -0
- molSimplify/tf_nn/oxocatalysis/oxo_val_x.csv +212 -0
- molSimplify/tf_nn/oxocatalysis/oxo_val_y.csv +212 -0
- molSimplify/tf_nn/oxocatalysis/oxo_vars.csv +162 -0
- molSimplify/tf_nn/rescaling_data/gap_mean_x.csv +153 -0
- molSimplify/tf_nn/rescaling_data/gap_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/gap_var_x.csv +153 -0
- molSimplify/tf_nn/rescaling_data/gap_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/geo_static_clf_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/geo_static_clf_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/geo_static_clf_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/geo_static_clf_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/hat_mean_x.csv +162 -0
- molSimplify/tf_nn/rescaling_data/hat_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/hat_var_x.csv +162 -0
- molSimplify/tf_nn/rescaling_data/hat_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/homo_empty_mean_x.csv +155 -0
- molSimplify/tf_nn/rescaling_data/homo_empty_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/homo_empty_var_x.csv +155 -0
- molSimplify/tf_nn/rescaling_data/homo_empty_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/homo_mean_x.csv +153 -0
- molSimplify/tf_nn/rescaling_data/homo_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/homo_var_x.csv +153 -0
- molSimplify/tf_nn/rescaling_data/homo_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/hs_ii_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/hs_ii_mean_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/hs_ii_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/hs_ii_var_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/hs_iii_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/hs_iii_mean_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/hs_iii_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/hs_iii_var_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/ls_ii_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/ls_ii_mean_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/ls_ii_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/ls_ii_var_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/ls_iii_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/ls_iii_mean_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/ls_iii_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/ls_iii_var_y.csv +3 -0
- molSimplify/tf_nn/rescaling_data/oxo20_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/oxo20_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/oxo20_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/oxo20_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/oxo_mean_x.csv +162 -0
- molSimplify/tf_nn/rescaling_data/oxo_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/oxo_var_x.csv +162 -0
- molSimplify/tf_nn/rescaling_data/oxo_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/sc_static_clf_mean_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/sc_static_clf_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/sc_static_clf_var_x.csv +154 -0
- molSimplify/tf_nn/rescaling_data/sc_static_clf_var_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/split_mean_x.csv +155 -0
- molSimplify/tf_nn/rescaling_data/split_mean_y.csv +1 -0
- molSimplify/tf_nn/rescaling_data/split_var_x.csv +155 -0
- molSimplify/tf_nn/rescaling_data/split_var_y.csv +1 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_model.h5 +0 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_name.csv +1591 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_x.csv +1592 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_y.csv +1592 -0
- molSimplify/tf_nn/sc_static_clf/sc_static_clf_vars.csv +154 -0
- molSimplify/tf_nn/split/split_model.h5 +0 -0
- molSimplify/tf_nn/split/split_model.json +1 -0
- molSimplify/tf_nn/split/split_vars.csv +155 -0
- molSimplify/tf_nn/split/split_x.csv +1902 -0
- molSimplify/tf_nn/split/split_y.csv +1902 -0
- molSimplify/tf_nn/split/train_names.csv +1901 -0
- molSimplify/utils/__init__.py +0 -0
- molSimplify/utils/decorators.py +16 -0
- molSimplify/utils/metaclasses.py +12 -0
- molSimplify/utils/tensorflow.py +23 -0
- molSimplify/utils/timer.py +16 -0
- molSimplify-1.7.4.dist-info/LICENSE +674 -0
- molSimplify-1.7.4.dist-info/METADATA +821 -0
- molSimplify-1.7.4.dist-info/RECORD +651 -0
- molSimplify-1.7.4.dist-info/WHEEL +5 -0
- molSimplify-1.7.4.dist-info/entry_points.txt +3 -0
- molSimplify-1.7.4.dist-info/top_level.txt +4 -0
- tests/generateTests.py +122 -0
- tests/helperFuncs.py +658 -0
- tests/informatics/test_MOF_descriptors.py +128 -0
- tests/informatics/test_active_learning.py +113 -0
- tests/informatics/test_coulomb_analyze.py +24 -0
- tests/informatics/test_graph_racs.py +193 -0
- tests/ml/test_kernels.py +20 -0
- tests/ml/test_layers.py +47 -0
- tests/runtest.py +10 -0
- tests/test_Mol2D.py +128 -0
- tests/test_basic_imports.py +62 -0
- tests/test_bidentate.py +25 -0
- tests/test_cli.py +20 -0
- tests/test_distgeom.py +106 -0
- tests/test_example_1.py +29 -0
- tests/test_example_3.py +31 -0
- tests/test_example_5.py +43 -0
- tests/test_example_7.py +28 -0
- tests/test_example_8.py +15 -0
- tests/test_example_tbp.py +15 -0
- tests/test_ff_xtb.py +111 -0
- tests/test_geocheck_oct.py +26 -0
- tests/test_geocheck_one_empty.py +15 -0
- tests/test_geometry.py +44 -0
- tests/test_inparse.py +76 -0
- tests/test_io.py +84 -0
- tests/test_jobgen.py +84 -0
- tests/test_joption_pythonic.py +27 -0
- tests/test_ligand_assign.py +58 -0
- tests/test_ligand_assign_consistent.py +60 -0
- tests/test_ligand_class.py +26 -0
- tests/test_ligand_from_mol_file.py +35 -0
- tests/test_ligands.py +86 -0
- tests/test_mol3D.py +337 -0
- tests/test_molcas_caspt2.py +15 -0
- tests/test_molcas_casscf.py +15 -0
- tests/test_old_ANNs.py +68 -0
- tests/test_orca_ccsdt.py +15 -0
- tests/test_orca_dft.py +15 -0
- tests/test_qcgen.py +50 -0
- tests/test_racs.py +124 -0
- tests/test_rmsd.py +68 -0
- tests/test_structgen_functions.py +198 -0
- tests/test_tetrahedral.py +29 -0
- tests/test_tutorial_10_part_one.py +16 -0
- tests/test_tutorial_10_part_two.py +15 -0
- tests/test_tutorial_2.py +11 -0
- tests/test_tutorial_3.py +15 -0
- tests/test_tutorial_4.py +57 -0
- tests/test_tutorial_6.py +10 -0
- tests/test_tutorial_8.py +29 -0
- tests/test_tutorial_9_part_one.py +15 -0
- tests/test_tutorial_9_part_two.py +15 -0
- tests/test_tutorial_qm9_part_one.py +6 -0
- tests/testresources/refs/racs/generate_references.py +85 -0
- workflows/NandyJACSAu2022/bridge_functionalizer.py +253 -0
- workflows/NandyJACSAu2022/frag_functionalizer.py +242 -0
- workflows/NandyJACSAu2022/fragment_classes.py +586 -0
- workflows/NandyJACSAu2022/macrocycle_synthesis.py +179 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Test for imports where the packges will be used in molSimplify.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
import pytest
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def test_molsimplify_imported():
|
|
10
|
+
'''
|
|
11
|
+
Sample test, will always pass so long as import statement worked
|
|
12
|
+
'''
|
|
13
|
+
assert "molSimplify" in sys.modules
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@pytest.mark.skip("PSI4 is no longer on the list of required dependencies.")
|
|
17
|
+
def test_psi4_import():
|
|
18
|
+
'''
|
|
19
|
+
Test whether psi4 can be imported
|
|
20
|
+
'''
|
|
21
|
+
try:
|
|
22
|
+
import psi4 # noqa: F401
|
|
23
|
+
assert "psi4" in sys.modules
|
|
24
|
+
except ImportError:
|
|
25
|
+
assert 0
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_tf_import():
|
|
29
|
+
'''
|
|
30
|
+
Test whether tensorflow can be imported
|
|
31
|
+
'''
|
|
32
|
+
try:
|
|
33
|
+
import tensorflow # noqa: F401
|
|
34
|
+
assert "tensorflow" in sys.modules
|
|
35
|
+
except ImportError:
|
|
36
|
+
assert 0
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@pytest.mark.skip("Does not work on github CI workflow")
|
|
40
|
+
def test_keras_import():
|
|
41
|
+
'''
|
|
42
|
+
Test whether keras can be imported
|
|
43
|
+
'''
|
|
44
|
+
try:
|
|
45
|
+
from tensorflow import keras # noqa: F401
|
|
46
|
+
assert "keras" in sys.modules
|
|
47
|
+
except ImportError:
|
|
48
|
+
assert 0
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_openbabel_import():
|
|
52
|
+
'''
|
|
53
|
+
Test whether openbabel can be imported
|
|
54
|
+
'''
|
|
55
|
+
try:
|
|
56
|
+
try:
|
|
57
|
+
from openbabel import openbabel # version 3 style import
|
|
58
|
+
except ImportError: # fallback to version 2
|
|
59
|
+
import openbabel # noqa: F401
|
|
60
|
+
assert "openbabel" in sys.modules
|
|
61
|
+
except ImportError:
|
|
62
|
+
assert 0
|
tests/test_bidentate.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import helperFuncs as hp
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_bidentate(tmpdir, resource_path_root):
|
|
5
|
+
# There are two versions of this test depending on the openbabel version.
|
|
6
|
+
# This is necessary because openbabel changed the numbering of atoms for v3.
|
|
7
|
+
try:
|
|
8
|
+
# This is the recommended method to import openbabel for v3
|
|
9
|
+
from openbabel import openbabel # noqa: F401
|
|
10
|
+
testName = "bidentate_v3"
|
|
11
|
+
except ImportError:
|
|
12
|
+
testName = "bidentate"
|
|
13
|
+
threshMLBL = 0.1
|
|
14
|
+
threshLG = 1.0
|
|
15
|
+
threshOG = 1.5
|
|
16
|
+
[passMultiFileCheck, pass_structures] = hp.runtestMulti(
|
|
17
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
18
|
+
assert passMultiFileCheck
|
|
19
|
+
for f, passNumAtoms, passMLBL, passLG, passOG, pass_report in pass_structures:
|
|
20
|
+
print(f)
|
|
21
|
+
assert passNumAtoms
|
|
22
|
+
assert passMLBL
|
|
23
|
+
assert passLG
|
|
24
|
+
assert passOG
|
|
25
|
+
assert pass_report
|
tests/test_cli.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
from helperFuncs import compare_report_new
|
|
3
|
+
from molSimplify.__main__ import main
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_main_empty(tmpdir, resource_path_root):
|
|
7
|
+
main(args=[f"-rundir {tmpdir}"])
|
|
8
|
+
compare_report_new(
|
|
9
|
+
tmpdir / "fe_oct_2_water_6_s_5" / "fe_oct_2_water_6_s_5_conf_1" /
|
|
10
|
+
"fe_oct_2_water_6_s_5_conf_1.report",
|
|
11
|
+
resource_path_root / "refs" / "test_cli" /
|
|
12
|
+
"fe_oct_2_water_6_s_5_conf_1.report")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@pytest.mark.skip("Test for help not working yet.")
|
|
16
|
+
def test_help(capsys):
|
|
17
|
+
main(args=["--help",])
|
|
18
|
+
captured = capsys.readouterr()
|
|
19
|
+
print(captured.out)
|
|
20
|
+
assert "Welcome to molSimplify. Only basic usage is described here." in captured.out
|
tests/test_distgeom.py
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from argparse import Namespace
|
|
3
|
+
from molSimplify.Classes.mol3D import mol3D
|
|
4
|
+
from molSimplify.Scripts.distgeom import (GetCMDists, CosRule,
|
|
5
|
+
Metrize, findshape)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def test_CosRule(atol=1e-6):
|
|
9
|
+
# Test simple "unit" triangle
|
|
10
|
+
assert abs(CosRule(1., 1., 90) - np.sqrt(2)) < atol
|
|
11
|
+
assert abs(CosRule(1, np.sqrt(2), 45) - 1.) < atol
|
|
12
|
+
assert abs(CosRule(np.sqrt(2), 1., 45) - 1.) < atol
|
|
13
|
+
# Test equilateral triangle
|
|
14
|
+
a = 3.456
|
|
15
|
+
assert abs(CosRule(a, a, 60) - a) < atol
|
|
16
|
+
# Test Pythagoras
|
|
17
|
+
assert abs(CosRule(3., 4., 90) - 5.) < atol
|
|
18
|
+
# Test 30-60-90 triangle
|
|
19
|
+
a = 2.345
|
|
20
|
+
assert abs(CosRule(a, 0.5*a*np.sqrt(3), 30) - 0.5*a) < atol
|
|
21
|
+
assert abs(CosRule(a, 0.5*a, 60) - 0.5*a*np.sqrt(3)) < atol
|
|
22
|
+
assert abs(CosRule(0.5*a, 0.5*a*np.sqrt(3), 90) - a) < atol
|
|
23
|
+
# Test symmetry on 30-60-90
|
|
24
|
+
assert abs(CosRule(0.5*a*np.sqrt(3), a, 30) - 0.5*a) < atol
|
|
25
|
+
assert abs(CosRule(0.5*a, a, 60) - 0.5*a*np.sqrt(3)) < atol
|
|
26
|
+
assert abs(CosRule(0.5*a*np.sqrt(3), 0.5*a, 90) - a) < atol
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_GetCMDists():
|
|
30
|
+
# Dummy points in 3d
|
|
31
|
+
xyzs = np.array([[0., 0., 0.],
|
|
32
|
+
[1., 0., 0.],
|
|
33
|
+
[0., 1., 0.],
|
|
34
|
+
[0., 1., 1.],
|
|
35
|
+
[0., 0., 0.]])
|
|
36
|
+
|
|
37
|
+
dist_mat = np.sqrt(np.sum(
|
|
38
|
+
(xyzs[np.newaxis, :, :] - xyzs[:, np.newaxis, :])**2, axis=-1))
|
|
39
|
+
# Calculate geometric center
|
|
40
|
+
center = np.mean(xyzs, axis=0)
|
|
41
|
+
# Distances to the center:
|
|
42
|
+
dists_ref = np.sqrt(np.sum((xyzs - center)**2, axis=-1))
|
|
43
|
+
|
|
44
|
+
dists, status = GetCMDists(dist_mat, len(xyzs))
|
|
45
|
+
assert status
|
|
46
|
+
np.testing.assert_allclose(dists, dists_ref)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def test_Metrize():
|
|
50
|
+
""""A few tests are commented out because they would only be
|
|
51
|
+
satisfied after introducing breaking changes to Metrize()
|
|
52
|
+
(see TODO tags)"""
|
|
53
|
+
# Setup
|
|
54
|
+
natoms = 9
|
|
55
|
+
LB = np.zeros((natoms, natoms))
|
|
56
|
+
UB = 100*np.ones((natoms, natoms))
|
|
57
|
+
# Build distance matrix
|
|
58
|
+
D = Metrize(LB, UB, natoms)
|
|
59
|
+
# Test bounds
|
|
60
|
+
np.testing.assert_array_compare(np.greater_equal, D, LB)
|
|
61
|
+
np.testing.assert_array_compare(np.less_equal, D, UB)
|
|
62
|
+
# Test symmetry
|
|
63
|
+
np.testing.assert_equal(D, D.T)
|
|
64
|
+
# Diagonal should be zero
|
|
65
|
+
# np.testing.assert_equal(np.diag(D), np.zeros(natoms))
|
|
66
|
+
# Test triangle inequality. For each triangle of atoms i, j, and k:
|
|
67
|
+
# r_ij <= r_ik + r_kj. TODO the current implementation occasionally
|
|
68
|
+
# breaks the constraint on purpose for a potential speed up.
|
|
69
|
+
# for i in range(natoms):
|
|
70
|
+
# for j in range(i, natoms): # Test only lower triangular matrix
|
|
71
|
+
# for k in range(natoms):
|
|
72
|
+
# assert D[i, j] <= D[i, k] + D[k, j]
|
|
73
|
+
# Test elements for specific seed
|
|
74
|
+
# D = Metrize(LB, UB, natoms, seed=1234)
|
|
75
|
+
# Reference for the seed
|
|
76
|
+
# ref = np.array([[0., 19.151945, 62.210877, 100.],
|
|
77
|
+
# [19.151945, 0., 43.772774, 100.],
|
|
78
|
+
# [62.210877, 43.772774, 0., 100.],
|
|
79
|
+
# [100., 100., 100., 0.]])
|
|
80
|
+
# np.testing.assert_allclose(D, ref)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def test_findshape():
|
|
84
|
+
# First trivial case of monodentate ligands:
|
|
85
|
+
args = Namespace(geometry='oct', lig=['carbonyl', 'water'],
|
|
86
|
+
ligocc=[5, 1])
|
|
87
|
+
|
|
88
|
+
angles_dict = findshape(args, mol3D(name='carbonyl'))
|
|
89
|
+
assert angles_dict == {'0-0': 0.0}
|
|
90
|
+
|
|
91
|
+
# More interesting bidentate case:
|
|
92
|
+
args = Namespace(geometry='oct', lig=['acac', 'water'],
|
|
93
|
+
ligocc=[2, 2])
|
|
94
|
+
|
|
95
|
+
angles_dict = findshape(args, mol3D(name='acac'))
|
|
96
|
+
assert angles_dict == {'0-0': 0.0, '0-1': 90.0,
|
|
97
|
+
'1-0': 90.0, '1-1': 0.0}
|
|
98
|
+
|
|
99
|
+
args = Namespace(geometry='oct', lig=['porphyrine', 'water'],
|
|
100
|
+
ligocc=[1, 2])
|
|
101
|
+
|
|
102
|
+
angles_dict = findshape(args, mol3D(name='porphyrine'))
|
|
103
|
+
assert angles_dict == {'0-0': 0.0, '0-1': 90.0, '0-2': 180.0, '0-3': 90.0,
|
|
104
|
+
'1-0': 90.0, '1-1': 0.0, '1-2': 90.0, '1-3': 180.0,
|
|
105
|
+
'2-0': 180.0, '2-1': 90.0, '2-2': 0.0, '2-3': 90.0,
|
|
106
|
+
'3-0': 90.0, '3-1': 180.0, '3-2': 90.0, '3-3': 0.0}
|
tests/test_example_1.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import helperFuncs as hp
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_example_1(tmpdir, resource_path_root):
|
|
5
|
+
testName = "example_1"
|
|
6
|
+
threshMLBL = 0.1
|
|
7
|
+
threshLG = 1.0
|
|
8
|
+
threshOG = 2.0
|
|
9
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtest(
|
|
10
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
11
|
+
assert passNumAtoms
|
|
12
|
+
assert passMLBL
|
|
13
|
+
assert passLG
|
|
14
|
+
assert passOG
|
|
15
|
+
assert pass_report
|
|
16
|
+
assert hp.runtest_reportonly(tmpdir, resource_path_root, testName)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def test_example_1_No_FF(tmpdir, resource_path_root):
|
|
20
|
+
testName = "example_1"
|
|
21
|
+
threshMLBL = 0.1
|
|
22
|
+
threshLG = 1.0
|
|
23
|
+
threshOG = 2.0
|
|
24
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtestNoFF(
|
|
25
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
26
|
+
assert passMLBL
|
|
27
|
+
assert passLG
|
|
28
|
+
assert passOG
|
|
29
|
+
assert pass_report
|
tests/test_example_3.py
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
import helperFuncs as hp
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
@pytest.mark.skip("Skipping example 3 + FF as it is unclear to me if the core "
|
|
6
|
+
"should be frozen during the final optimization. RM")
|
|
7
|
+
def test_example_3(tmpdir, resource_path_root):
|
|
8
|
+
testName = "example_3"
|
|
9
|
+
threshMLBL = 0.1
|
|
10
|
+
threshLG = 1.0
|
|
11
|
+
threshOG = 2.0
|
|
12
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtest(
|
|
13
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
14
|
+
assert passNumAtoms
|
|
15
|
+
assert passMLBL
|
|
16
|
+
assert passLG
|
|
17
|
+
assert passOG
|
|
18
|
+
assert pass_report, pass_qcin
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_example_3_No_FF(tmpdir, resource_path_root):
|
|
22
|
+
testName = "example_3"
|
|
23
|
+
threshMLBL = 0.1
|
|
24
|
+
threshLG = 1.0
|
|
25
|
+
threshOG = 2.0
|
|
26
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtestNoFF(
|
|
27
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
28
|
+
assert passMLBL
|
|
29
|
+
assert passLG
|
|
30
|
+
assert passOG
|
|
31
|
+
assert pass_report, pass_qcin
|
tests/test_example_5.py
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import helperFuncs as hp
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_example_5(tmpdir, resource_path_root):
|
|
5
|
+
# There are two versions of this test depending on the openbabel version.
|
|
6
|
+
# This is necessary because openbabel changed the numbering of atoms for v3.
|
|
7
|
+
try:
|
|
8
|
+
# This is the recommended method to import openbabel for v3
|
|
9
|
+
from openbabel import openbabel # noqa: F401
|
|
10
|
+
testName = "example_5_v3"
|
|
11
|
+
except ImportError:
|
|
12
|
+
testName = "example_5"
|
|
13
|
+
threshMLBL = 0.1
|
|
14
|
+
threshLG = 0.5
|
|
15
|
+
threshOG = 1.0
|
|
16
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtest(
|
|
17
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
18
|
+
assert passNumAtoms
|
|
19
|
+
assert passMLBL
|
|
20
|
+
assert passLG
|
|
21
|
+
assert passOG
|
|
22
|
+
assert pass_report, pass_qcin
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_example_5_No_FF(tmpdir, resource_path_root):
|
|
26
|
+
# There are two versions of this test depending on the openbabel version.
|
|
27
|
+
# This is necessary because openbabel changed the numbering of atoms for v3.
|
|
28
|
+
try:
|
|
29
|
+
# This is the recommended method to import openbabel for v3
|
|
30
|
+
from openbabel import openbabel # noqa: F401
|
|
31
|
+
testName = "example_5_v3"
|
|
32
|
+
except ImportError:
|
|
33
|
+
testName = "example_5"
|
|
34
|
+
threshMLBL = 0.1
|
|
35
|
+
threshLG = 0.5
|
|
36
|
+
threshOG = 1.0
|
|
37
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtestNoFF(
|
|
38
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
39
|
+
assert passNumAtoms
|
|
40
|
+
assert passMLBL
|
|
41
|
+
assert passLG
|
|
42
|
+
assert passOG
|
|
43
|
+
assert pass_report, pass_qcin
|
tests/test_example_7.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import helperFuncs as hp
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_example_7(tmpdir, resource_path_root):
|
|
5
|
+
testName = "example_7"
|
|
6
|
+
threshMLBL = 0.1
|
|
7
|
+
threshLG = 1.0
|
|
8
|
+
threshOG = 3.0 # Increased threshold from 2.0 to 3.0
|
|
9
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtest(
|
|
10
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
11
|
+
assert passNumAtoms
|
|
12
|
+
assert passMLBL
|
|
13
|
+
assert passLG
|
|
14
|
+
assert passOG
|
|
15
|
+
assert pass_report, pass_qcin
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def test_example_7_No_FF(tmpdir, resource_path_root):
|
|
19
|
+
testName = "example_7"
|
|
20
|
+
threshMLBL = 0.1
|
|
21
|
+
threshLG = 1.1
|
|
22
|
+
threshOG = 3.0
|
|
23
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtestNoFF(
|
|
24
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
25
|
+
assert passMLBL
|
|
26
|
+
assert passLG
|
|
27
|
+
assert passOG
|
|
28
|
+
assert pass_report, pass_qcin
|
tests/test_example_8.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import helperFuncs as hp
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_example_8(tmpdir, resource_path_root):
|
|
5
|
+
testName = "example_8"
|
|
6
|
+
threshMLBL = 0.1
|
|
7
|
+
threshLG = 1.0
|
|
8
|
+
threshOG = 2.0
|
|
9
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtest(
|
|
10
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
11
|
+
assert passNumAtoms
|
|
12
|
+
assert passMLBL
|
|
13
|
+
assert passLG
|
|
14
|
+
assert passOG
|
|
15
|
+
assert pass_report, pass_qcin
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import helperFuncs as hp
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_example_tbp(tmpdir, resource_path_root):
|
|
5
|
+
testName = "example_tbp"
|
|
6
|
+
threshMLBL = 0.1
|
|
7
|
+
threshLG = 1.0
|
|
8
|
+
threshOG = 2.0
|
|
9
|
+
[passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtest(
|
|
10
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
|
|
11
|
+
assert passNumAtoms
|
|
12
|
+
assert passMLBL
|
|
13
|
+
assert passLG
|
|
14
|
+
assert passOG
|
|
15
|
+
assert pass_report
|
tests/test_ff_xtb.py
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
import shutil
|
|
3
|
+
import helperFuncs as hp
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Decorator to skip test if xtb is not installed
|
|
7
|
+
xtb_installed = pytest.mark.skipif(shutil.which('xtb') is None,
|
|
8
|
+
reason='Could not find xtb installation')
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@xtb_installed
|
|
12
|
+
def test_xtb_before(tmpdir, resource_path_root):
|
|
13
|
+
testName = "xtb_H2O_before"
|
|
14
|
+
threshMLBL = 0.01
|
|
15
|
+
threshLG = 0.01
|
|
16
|
+
threshOG = 2.0
|
|
17
|
+
(passNumAtoms, passMLBL, passLG,
|
|
18
|
+
passOG, pass_report, pass_qcin) = hp.runtest(
|
|
19
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG, seed=31415)
|
|
20
|
+
assert passNumAtoms
|
|
21
|
+
assert passMLBL
|
|
22
|
+
assert passLG
|
|
23
|
+
assert passOG
|
|
24
|
+
assert pass_report
|
|
25
|
+
assert pass_qcin
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@pytest.mark.skip(reason="TODO: figure out why this test started failing suddenly")
|
|
29
|
+
@xtb_installed
|
|
30
|
+
def test_xtb_before_after(tmpdir, resource_path_root):
|
|
31
|
+
testName = "xtb_imidazole_BA"
|
|
32
|
+
threshMLBL = 0.01
|
|
33
|
+
threshLG = 0.01
|
|
34
|
+
threshOG = 0.05
|
|
35
|
+
(passNumAtoms, passMLBL, passLG,
|
|
36
|
+
passOG, pass_report, pass_qcin) = hp.runtest(
|
|
37
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG, seed=31415)
|
|
38
|
+
assert passNumAtoms
|
|
39
|
+
assert passMLBL
|
|
40
|
+
assert passLG
|
|
41
|
+
assert passOG
|
|
42
|
+
assert pass_report
|
|
43
|
+
assert pass_qcin
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@xtb_installed
|
|
47
|
+
def test_xtb_ANC_fail(tmpdir, resource_path_root):
|
|
48
|
+
testName = "xtb_ANC_fail"
|
|
49
|
+
threshMLBL = 0.01
|
|
50
|
+
threshLG = 0.01
|
|
51
|
+
threshOG = 0.01
|
|
52
|
+
(passNumAtoms, passMLBL, passLG,
|
|
53
|
+
passOG, pass_report, pass_qcin) = hp.runtest(
|
|
54
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG, seed=31415)
|
|
55
|
+
assert passNumAtoms
|
|
56
|
+
assert passMLBL
|
|
57
|
+
assert passLG
|
|
58
|
+
assert passOG
|
|
59
|
+
assert pass_report
|
|
60
|
+
assert pass_qcin
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@xtb_installed
|
|
64
|
+
def test_xtb_high_spin(tmpdir, resource_path_root):
|
|
65
|
+
testName = "xtb_bipy_spin5"
|
|
66
|
+
threshMLBL = 0.01
|
|
67
|
+
threshLG = 0.05
|
|
68
|
+
threshOG = 0.5
|
|
69
|
+
(passNumAtoms, passMLBL, passLG,
|
|
70
|
+
passOG, pass_report, pass_qcin) = hp.runtest(
|
|
71
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG, seed=31415)
|
|
72
|
+
assert passNumAtoms
|
|
73
|
+
assert passMLBL
|
|
74
|
+
assert passLG
|
|
75
|
+
assert passOG
|
|
76
|
+
assert pass_report
|
|
77
|
+
assert pass_qcin
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@xtb_installed
|
|
81
|
+
def test_xtb_final_opt(tmpdir, resource_path_root):
|
|
82
|
+
testName = "xtb_final_opt"
|
|
83
|
+
threshMLBL = 0.01
|
|
84
|
+
threshLG = 0.01
|
|
85
|
+
threshOG = 0.05
|
|
86
|
+
(passNumAtoms, passMLBL, passLG,
|
|
87
|
+
passOG, pass_report, pass_qcin) = hp.runtest(
|
|
88
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG, seed=31415)
|
|
89
|
+
assert passNumAtoms
|
|
90
|
+
assert passMLBL
|
|
91
|
+
assert passLG
|
|
92
|
+
assert passOG
|
|
93
|
+
assert pass_report
|
|
94
|
+
assert pass_qcin
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@xtb_installed
|
|
98
|
+
def test_gfnff(tmpdir, resource_path_root):
|
|
99
|
+
testName = "gfnff_NH3_BA"
|
|
100
|
+
threshMLBL = 0.01
|
|
101
|
+
threshLG = 0.01
|
|
102
|
+
threshOG = 2.0
|
|
103
|
+
(passNumAtoms, passMLBL, passLG,
|
|
104
|
+
passOG, pass_report, pass_qcin) = hp.runtest(
|
|
105
|
+
tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG, seed=31415)
|
|
106
|
+
assert passNumAtoms
|
|
107
|
+
assert passMLBL
|
|
108
|
+
assert passLG
|
|
109
|
+
assert passOG
|
|
110
|
+
assert pass_report
|
|
111
|
+
assert pass_qcin
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
import helperFuncs as hp
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
@pytest.mark.parametrize("testName", [
|
|
6
|
+
"all_flying_away",
|
|
7
|
+
"broken_ligands",
|
|
8
|
+
"catom_change",
|
|
9
|
+
"H_transfer",
|
|
10
|
+
"ligand_assemble",
|
|
11
|
+
"ligand_bent",
|
|
12
|
+
"linear_broken",
|
|
13
|
+
"methane_trans",
|
|
14
|
+
"rotational_group",
|
|
15
|
+
"switch_test",
|
|
16
|
+
"compact_bonding",
|
|
17
|
+
"triplebond_linear_broken",
|
|
18
|
+
"iodine_sulfur",
|
|
19
|
+
"oct_comp_greedy",
|
|
20
|
+
"atom_ordering_mismatch",
|
|
21
|
+
"iodide_radius"
|
|
22
|
+
])
|
|
23
|
+
def test_geocheck_oct(tmpdir, resource_path_root, testName):
|
|
24
|
+
thresh = 0.01
|
|
25
|
+
passGeo = hp.runtestgeo(tmpdir, resource_path_root, testName, thresh)
|
|
26
|
+
assert passGeo
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import helperFuncs as hp
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_example_1(tmpdir, resource_path_root):
|
|
5
|
+
testName = "one_empty_good"
|
|
6
|
+
thresh = 0.01
|
|
7
|
+
passGeo = hp.runtestgeo(tmpdir, resource_path_root, testName, thresh, geo_type="one_empty")
|
|
8
|
+
assert passGeo
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_example_2(tmpdir, resource_path_root):
|
|
12
|
+
testName = "one_empty_bad"
|
|
13
|
+
thresh = 0.01
|
|
14
|
+
passGeo = hp.runtestgeo(tmpdir, resource_path_root, testName, thresh, geo_type="one_empty")
|
|
15
|
+
assert passGeo
|
tests/test_geometry.py
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from molSimplify.Scripts.geometry import (norm,
|
|
3
|
+
normalize,
|
|
4
|
+
checkplanar,
|
|
5
|
+
dihedral,
|
|
6
|
+
)
|
|
7
|
+
from molSimplify.Classes.mol3D import mol3D
|
|
8
|
+
from molSimplify.Classes.atom3D import atom3D
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_norm():
|
|
12
|
+
v = [1.2, -.2, 0.8]
|
|
13
|
+
|
|
14
|
+
assert abs(norm(v) - np.linalg.norm(v)) < 1e-6
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_normalize():
|
|
18
|
+
v = [1.8, 0.6, -1.8]
|
|
19
|
+
v_norm = normalize(v)
|
|
20
|
+
|
|
21
|
+
np.testing.assert_allclose(v_norm, np.array(v)/np.linalg.norm(v), atol=1e-6)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_checkplanar():
|
|
25
|
+
a1 = [0.0, 0.0, 0.0]
|
|
26
|
+
a2 = [1.2, 0.6, 1.6]
|
|
27
|
+
a3 = [-1.1, 0.3, 0.8]
|
|
28
|
+
a4 = [0.4, -1.2, -0.3]
|
|
29
|
+
|
|
30
|
+
assert not checkplanar(a1, a2, a3, a4)
|
|
31
|
+
# Construct a set four point in plane with the first 3
|
|
32
|
+
a4 = [0.1, 0.9, 2.4]
|
|
33
|
+
assert checkplanar(a1, a2, a3, a4)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_dihedral():
|
|
37
|
+
mol = mol3D()
|
|
38
|
+
mol.addAtom(atom3D(Sym='X', xyz=[0.5, 0.0, 1.2]))
|
|
39
|
+
mol.addAtom(atom3D(Sym='X', xyz=[0.0, 0.0, 0.0]))
|
|
40
|
+
mol.addAtom(atom3D(Sym='X', xyz=[0.0, 0.0, 1.0]))
|
|
41
|
+
mol.addAtom(atom3D(Sym='X', xyz=[0.5, 0.5, -0.2]))
|
|
42
|
+
|
|
43
|
+
d = dihedral(mol, 0, 1, 2, 3)
|
|
44
|
+
assert abs(d - 45.0) < 1e-6
|
tests/test_inparse.py
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from molSimplify.Scripts.inparse import (parseinputfile, checkinput,
|
|
3
|
+
parseall,
|
|
4
|
+
parseinputs_basic,
|
|
5
|
+
parseinputs_advanced)
|
|
6
|
+
from argparse import ArgumentParser, Namespace
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def test_parseinputfile_empty():
|
|
10
|
+
defaults = {'skipANN': False, 'oldANN': False,
|
|
11
|
+
'dbvdent': False, 'dbvconns': False,
|
|
12
|
+
'dbvhyb': False, 'dbvlinks': False,
|
|
13
|
+
'rprompt': False, 'rundir': f'{os.getcwd()}/Runs'}
|
|
14
|
+
|
|
15
|
+
args = Namespace()
|
|
16
|
+
parseinputfile(args, inputfile_str=' ')
|
|
17
|
+
|
|
18
|
+
# Assert defaults are set
|
|
19
|
+
assert args.__dict__ == defaults
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_parseinputs_basic(monkeypatch):
|
|
23
|
+
# Monkeypatch is used to change sys.argv parsed by the Argumentparser.
|
|
24
|
+
monkeypatch.setattr('sys.argv', ['molsimplify'])
|
|
25
|
+
parser = ArgumentParser()
|
|
26
|
+
args = parseinputs_basic(parser)
|
|
27
|
+
defaults = dict(coord=False, core=None, ff='uff', ff_final_opt=None,
|
|
28
|
+
ffoption='N', geo=False, geometry=False, keepHs=None,
|
|
29
|
+
lig=None, ligloc=False, ligocc=False, multiplicity=None,
|
|
30
|
+
oxstate=None, rundir=False, skipANN=None, smicat=False,
|
|
31
|
+
spin=None, spinmultiplicity=None, custom_data_dir=None)
|
|
32
|
+
assert args.__dict__ == defaults
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_parseinputs_advanced(monkeypatch):
|
|
36
|
+
# Monkeypatch is used to change sys.argv parsed by the Argumentparser.
|
|
37
|
+
monkeypatch.setattr('sys.argv', ['molsimplify'])
|
|
38
|
+
parser = ArgumentParser()
|
|
39
|
+
args = parseinputs_advanced(parser)
|
|
40
|
+
defaults = dict(MLbonds=False, antigeoisomer=None, calccharge=True,
|
|
41
|
+
charge=None, decoration=False, decoration_index=False,
|
|
42
|
+
distort='0', genall=False, isomers=None, langles=False,
|
|
43
|
+
ligalign=False, nconfs='1', oldANN=None, pangles=False,
|
|
44
|
+
reportonly=None, scoreconfs=False, stereos=None)
|
|
45
|
+
assert args.__dict__ == defaults
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_checkinput(monkeypatch):
|
|
49
|
+
# Monkeypatch is used to change sys.argv parsed by the Argumentparser.
|
|
50
|
+
monkeypatch.setattr('sys.argv', ['molsimplify'])
|
|
51
|
+
parser = ArgumentParser()
|
|
52
|
+
# Runs all parsers and populates the args Namespace
|
|
53
|
+
args = parseall(parser)
|
|
54
|
+
checkinput(args, calctype='base')
|
|
55
|
+
# Test a few defaults:
|
|
56
|
+
assert args.core == ['Fe']
|
|
57
|
+
assert args.oxstate == '2'
|
|
58
|
+
assert args.spin == '5'
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_parseinputfile_inputfile_kwarg(resource_path_root):
|
|
62
|
+
"""Test that both methods of calling parseinputfile
|
|
63
|
+
(with an args.i file or inputfile_str kwarg) yield the same result"""
|
|
64
|
+
infile = resource_path_root / "inputs" / "example_1.in"
|
|
65
|
+
|
|
66
|
+
args1 = Namespace(i=infile)
|
|
67
|
+
parseinputfile(args1)
|
|
68
|
+
|
|
69
|
+
with open(infile, 'r') as fin:
|
|
70
|
+
lines = fin.read()
|
|
71
|
+
args2 = Namespace()
|
|
72
|
+
parseinputfile(args2, inputfile_str=lines)
|
|
73
|
+
# Add 'i' argument for comparison
|
|
74
|
+
args2.i = infile
|
|
75
|
+
|
|
76
|
+
assert args1 == args2
|