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.
Files changed (651) hide show
  1. docs/source/conf.py +224 -0
  2. molSimplify/Classes/__init__.py +6 -0
  3. molSimplify/Classes/atom3D.py +235 -0
  4. molSimplify/Classes/dft_obs.py +130 -0
  5. molSimplify/Classes/globalvars.py +827 -0
  6. molSimplify/Classes/helpers.py +161 -0
  7. molSimplify/Classes/ligand.py +2330 -0
  8. molSimplify/Classes/mGUI.py +2493 -0
  9. molSimplify/Classes/mWidgets.py +438 -0
  10. molSimplify/Classes/miniGUI.py +41 -0
  11. molSimplify/Classes/mol2D.py +260 -0
  12. molSimplify/Classes/mol3D.py +5846 -0
  13. molSimplify/Classes/monomer3D.py +253 -0
  14. molSimplify/Classes/partialcharges.py +226 -0
  15. molSimplify/Classes/protein3D.py +1178 -0
  16. molSimplify/Classes/rundiag.py +151 -0
  17. molSimplify/Data/ML.dat +212 -0
  18. molSimplify/Data/MLS_FSR_for_inter.dat +23 -0
  19. molSimplify/Data/MLS_FSR_for_inter2.dat +23 -0
  20. molSimplify/Data/MLS_angle_for_click.dat +8 -0
  21. molSimplify/Data/MLS_angle_for_inter.dat +23 -0
  22. molSimplify/Data/MLS_angle_for_inter2.dat +48 -0
  23. molSimplify/Data/MLS_angle_for_intra.dat +10 -0
  24. molSimplify/Data/MLS_angle_for_intra2.dat +6 -0
  25. molSimplify/Data/MLS_angle_for_oa.dat +18 -0
  26. molSimplify/Data/ML_FSR_for_inter.dat +112 -0
  27. molSimplify/Data/ML_FSR_for_inter2.dat +110 -0
  28. molSimplify/Data/ML_bond_for_cat.dat +8 -0
  29. molSimplify/Data/ML_bond_for_click.dat +8 -0
  30. molSimplify/Data/ML_bond_for_inter.dat +48 -0
  31. molSimplify/Data/ML_bond_for_inter2.dat +48 -0
  32. molSimplify/Data/ML_bond_for_intra.dat +10 -0
  33. molSimplify/Data/ML_bond_for_intra2.dat +6 -0
  34. molSimplify/Data/ML_bond_for_oa.dat +18 -0
  35. molSimplify/Data/bp1.dat +21 -0
  36. molSimplify/Data/li.dat +3 -0
  37. molSimplify/Data/no.dat +2 -0
  38. molSimplify/Data/oct.dat +7 -0
  39. molSimplify/Data/pbp.dat +8 -0
  40. molSimplify/Data/spy.dat +6 -0
  41. molSimplify/Data/sqap.dat +9 -0
  42. molSimplify/Data/sqp.dat +5 -0
  43. molSimplify/Data/tbp.dat +6 -0
  44. molSimplify/Data/tdhd.dat +9 -0
  45. molSimplify/Data/thd.dat +5 -0
  46. molSimplify/Data/tpl.dat +4 -0
  47. molSimplify/Data/tpr.dat +7 -0
  48. molSimplify/Informatics/HFXsensitivity/__init__.py +0 -0
  49. molSimplify/Informatics/HFXsensitivity/measure_HFX_sensitivity_oxo_hat_reb_rel.py +443 -0
  50. molSimplify/Informatics/HFXsensitivity/measure_HFX_stable.py +346 -0
  51. molSimplify/Informatics/MOF/Linker_rotation.py +179 -0
  52. molSimplify/Informatics/MOF/MOF_descriptors.py +1299 -0
  53. molSimplify/Informatics/MOF/MOF_descriptors_alternate_functional.py +589 -0
  54. molSimplify/Informatics/MOF/MOF_functionalizer.py +1648 -0
  55. molSimplify/Informatics/MOF/PBC_functions.py +1347 -0
  56. molSimplify/Informatics/MOF/__init__.py +0 -0
  57. molSimplify/Informatics/MOF/atomic.py +267 -0
  58. molSimplify/Informatics/MOF/cluster_extraction.py +388 -0
  59. molSimplify/Informatics/MOF/fragment_MOFs_for_pormake.py +895 -0
  60. molSimplify/Informatics/MOF/monofunctionalized_BDC/index_information.py +10 -0
  61. molSimplify/Informatics/Mol2Parser.py +46 -0
  62. molSimplify/Informatics/RACassemble.py +408 -0
  63. molSimplify/Informatics/__init__.py +0 -0
  64. molSimplify/Informatics/active_learning/__init__.py +0 -0
  65. molSimplify/Informatics/active_learning/expected_improvement.py +269 -0
  66. molSimplify/Informatics/autocorrelation.py +1930 -0
  67. molSimplify/Informatics/clean_autocorrelation.py +778 -0
  68. molSimplify/Informatics/coulomb_analyze.py +67 -0
  69. molSimplify/Informatics/decoration_manager.py +193 -0
  70. molSimplify/Informatics/geo_analyze.py +88 -0
  71. molSimplify/Informatics/geometrics.py +56 -0
  72. molSimplify/Informatics/graph_analyze.py +163 -0
  73. molSimplify/Informatics/graph_racs.py +288 -0
  74. molSimplify/Informatics/jupyter_vis.py +172 -0
  75. molSimplify/Informatics/lacRACAssemble.py +2192 -0
  76. molSimplify/Informatics/lacRACAssemble_bisdithiolenes.py +236 -0
  77. molSimplify/Informatics/misc_descriptors.py +198 -0
  78. molSimplify/Informatics/organic_fingerprints.py +61 -0
  79. molSimplify/Informatics/partialcharges.py +345 -0
  80. molSimplify/Informatics/protein/activesite.py +53 -0
  81. molSimplify/Informatics/protein/pymol_add_hs.py +33 -0
  82. molSimplify/Informatics/rac155_geo.py +48 -0
  83. molSimplify/Ligands/(1_methylbenzimidazol_2_yl)pyridine.xyz +45 -0
  84. molSimplify/Ligands/1-4-dimethyl-1-2-3-triazole.xyz +15 -0
  85. molSimplify/Ligands/12crown4.mol +62 -0
  86. molSimplify/Ligands/Antipyrine.mol +58 -0
  87. molSimplify/Ligands/BPAbipy.mol +106 -0
  88. molSimplify/Ligands/Hpyrrole.mol +26 -0
  89. molSimplify/Ligands/N-quinolinylbutyramidate.xyz +31 -0
  90. molSimplify/Ligands/N-quinolinylmethylmethinylacetamidate.xyz +30 -0
  91. molSimplify/Ligands/NMe2_-1.xyz +11 -0
  92. molSimplify/Ligands/PCy3.mol +111 -0
  93. molSimplify/Ligands/PMe3.xyz +15 -0
  94. molSimplify/Ligands/PPh3.mol +76 -0
  95. molSimplify/Ligands/Propyphenazone.mol +77 -0
  96. molSimplify/Ligands/acac.mol +33 -0
  97. molSimplify/Ligands/acacen.mol +76 -0
  98. molSimplify/Ligands/acetate.smi +1 -0
  99. molSimplify/Ligands/acetate.xyz +9 -0
  100. molSimplify/Ligands/aceticacidbipyridine.mol +70 -0
  101. molSimplify/Ligands/acetonitrile.mol +17 -0
  102. molSimplify/Ligands/alanine.mol +30 -0
  103. molSimplify/Ligands/alphabetizer.py +21 -0
  104. molSimplify/Ligands/amine.mol +11 -0
  105. molSimplify/Ligands/ammonia.mol +12 -0
  106. molSimplify/Ligands/arginine.mol +58 -0
  107. molSimplify/Ligands/asparagine.mol +38 -0
  108. molSimplify/Ligands/aspartic_acid.mol +35 -0
  109. molSimplify/Ligands/azide.mol +11 -0
  110. molSimplify/Ligands/benzene.mol +28 -0
  111. molSimplify/Ligands/benzene_pi.mol +30 -0
  112. molSimplify/Ligands/benzenedithiol.mol +30 -0
  113. molSimplify/Ligands/benzenethiol.mol +30 -0
  114. molSimplify/Ligands/benzylisocy.mol +38 -0
  115. molSimplify/Ligands/bidiazine.mol +42 -0
  116. molSimplify/Ligands/bidiazole.mol +38 -0
  117. molSimplify/Ligands/bifuran.mol +38 -0
  118. molSimplify/Ligands/bihydrodiazine.mol +58 -0
  119. molSimplify/Ligands/bihydrodiazole.mol +46 -0
  120. molSimplify/Ligands/bihydrooxazine.mol +54 -0
  121. molSimplify/Ligands/bihydrooxazole.mol +42 -0
  122. molSimplify/Ligands/bihydrothiazine.mol +54 -0
  123. molSimplify/Ligands/bihydrothiazole.mol +42 -0
  124. molSimplify/Ligands/biimidazole.mol +38 -0
  125. molSimplify/Ligands/bioxazole.mol +34 -0
  126. molSimplify/Ligands/bipy.mol +46 -0
  127. molSimplify/Ligands/bipyrazine.xyz +20 -0
  128. molSimplify/Ligands/bipyrimidine.mol +42 -0
  129. molSimplify/Ligands/bipyrrole.mol +42 -0
  130. molSimplify/Ligands/bisnapthyridylpyridine.mol +111 -0
  131. molSimplify/Ligands/bithiazole.mol +34 -0
  132. molSimplify/Ligands/bromide.mol +7 -0
  133. molSimplify/Ligands/bromide.smi +1 -0
  134. molSimplify/Ligands/c2.mol +9 -0
  135. molSimplify/Ligands/caprolactone.mol +41 -0
  136. molSimplify/Ligands/carbonyl.mol +8 -0
  137. molSimplify/Ligands/carboxyl.mol +13 -0
  138. molSimplify/Ligands/cat.mol +30 -0
  139. molSimplify/Ligands/chloride.mol +7 -0
  140. molSimplify/Ligands/chloride.smi +1 -0
  141. molSimplify/Ligands/chloropyridine.mol +27 -0
  142. molSimplify/Ligands/co2.mol +10 -0
  143. molSimplify/Ligands/corrolazine.mol +72 -0
  144. molSimplify/Ligands/cs.mol +8 -0
  145. molSimplify/Ligands/cyanate.xyz +5 -0
  146. molSimplify/Ligands/cyanide.mol +9 -0
  147. molSimplify/Ligands/cyanoaceticporphyrin.mol +114 -0
  148. molSimplify/Ligands/cyanopyridine.mol +29 -0
  149. molSimplify/Ligands/cyclam.mol +81 -0
  150. molSimplify/Ligands/cyclen.mol +69 -0
  151. molSimplify/Ligands/cyclopentadienyl.mol +26 -0
  152. molSimplify/Ligands/cysteine.mol +32 -0
  153. molSimplify/Ligands/diaminomethyl.mol +19 -0
  154. molSimplify/Ligands/diazine.mol +25 -0
  155. molSimplify/Ligands/diazole.mol +23 -0
  156. molSimplify/Ligands/dicyanamide.mol +15 -0
  157. molSimplify/Ligands/dihydrofuran.mol +27 -0
  158. molSimplify/Ligands/dmap.xyz +35 -0
  159. molSimplify/Ligands/dmf.mol +28 -0
  160. molSimplify/Ligands/dmi.mol +41 -0
  161. molSimplify/Ligands/dmpe.mol +52 -0
  162. molSimplify/Ligands/dpmu.mol +47 -0
  163. molSimplify/Ligands/dppe.mol +112 -0
  164. molSimplify/Ligands/edta.mol +69 -0
  165. molSimplify/Ligands/en.mol +28 -0
  166. molSimplify/Ligands/ethanethiol.mol +21 -0
  167. molSimplify/Ligands/ethanolamine.mol +26 -0
  168. molSimplify/Ligands/ethbipy.mol +70 -0
  169. molSimplify/Ligands/ethyl.mol +19 -0
  170. molSimplify/Ligands/ethylamine.mol +24 -0
  171. molSimplify/Ligands/ethylene.mol +16 -0
  172. molSimplify/Ligands/ethylesteracac.mol +57 -0
  173. molSimplify/Ligands/fluoride.mol +7 -0
  174. molSimplify/Ligands/fluoride.smi +1 -0
  175. molSimplify/Ligands/formaldehyde.mol +12 -0
  176. molSimplify/Ligands/formamidate.xyz +8 -0
  177. molSimplify/Ligands/formate.xyz +6 -0
  178. molSimplify/Ligands/furan.mol +23 -0
  179. molSimplify/Ligands/glutamic_acid.mol +42 -0
  180. molSimplify/Ligands/glutamine.mol +44 -0
  181. molSimplify/Ligands/glycinate.mol +23 -0
  182. molSimplify/Ligands/glycine.mol +24 -0
  183. molSimplify/Ligands/h2s.mol +10 -0
  184. molSimplify/Ligands/helium.mol +6 -0
  185. molSimplify/Ligands/histidine.mol +45 -0
  186. molSimplify/Ligands/hmpa.mol +62 -0
  187. molSimplify/Ligands/hs-.mol +9 -0
  188. molSimplify/Ligands/hydride.mol +7 -0
  189. molSimplify/Ligands/hydrocarboxyacetylide.xyz +8 -0
  190. molSimplify/Ligands/hydrocyanide.mol +10 -0
  191. molSimplify/Ligands/hydrodiazine.mol +33 -0
  192. molSimplify/Ligands/hydrodiazole.mol +27 -0
  193. molSimplify/Ligands/hydrogensulfide.mol +10 -0
  194. molSimplify/Ligands/hydroisocyanide.mol +11 -0
  195. molSimplify/Ligands/hydrooxazine.mol +31 -0
  196. molSimplify/Ligands/hydrooxazole.mol +25 -0
  197. molSimplify/Ligands/hydrothiazine.mol +31 -0
  198. molSimplify/Ligands/hydrothiazole.mol +25 -0
  199. molSimplify/Ligands/hydroxyl.mol +9 -0
  200. molSimplify/Ligands/imidazole.mol +23 -0
  201. molSimplify/Ligands/imidazolidinone.mol +29 -0
  202. molSimplify/Ligands/imine.mol +13 -0
  203. molSimplify/Ligands/iminodiacetic.mol +33 -0
  204. molSimplify/Ligands/iodide.mol +7 -0
  205. molSimplify/Ligands/iodobenzene.xyz +14 -0
  206. molSimplify/Ligands/isoleucine.mol +48 -0
  207. molSimplify/Ligands/isothiocyanate.mol +11 -0
  208. molSimplify/Ligands/leucine.mol +48 -0
  209. molSimplify/Ligands/ligands.dict +257 -0
  210. molSimplify/Ligands/lysine.mol +54 -0
  211. molSimplify/Ligands/mebenzenedithiol.mol +36 -0
  212. molSimplify/Ligands/mebim_py.xyz +29 -0
  213. molSimplify/Ligands/mebim_pz.xyz +28 -0
  214. molSimplify/Ligands/mebipy.mol +58 -0
  215. molSimplify/Ligands/mecat.mol +36 -0
  216. molSimplify/Ligands/methanal.mol +11 -0
  217. molSimplify/Ligands/methanethiol.mol +15 -0
  218. molSimplify/Ligands/methanol.mol +16 -0
  219. molSimplify/Ligands/methionine.mol +44 -0
  220. molSimplify/Ligands/methyl.mol +13 -0
  221. molSimplify/Ligands/methylacetylide.xyz +8 -0
  222. molSimplify/Ligands/methylamine.mol +19 -0
  223. molSimplify/Ligands/methylazide.xyz +9 -0
  224. molSimplify/Ligands/methylisocy.mol +17 -0
  225. molSimplify/Ligands/methylpyridine.mol +33 -0
  226. molSimplify/Ligands/n2.mol +8 -0
  227. molSimplify/Ligands/n4py.xyz +51 -0
  228. molSimplify/Ligands/nch.mol +10 -0
  229. molSimplify/Ligands/nco-.mol +11 -0
  230. molSimplify/Ligands/nethanolamine.mol +26 -0
  231. molSimplify/Ligands/nitrate.mol +14 -0
  232. molSimplify/Ligands/nitrite.mol +11 -0
  233. molSimplify/Ligands/nitro.mol +11 -0
  234. molSimplify/Ligands/nitrobipy.mol +54 -0
  235. molSimplify/Ligands/nitroso.mol +8 -0
  236. molSimplify/Ligands/nme3.mol +30 -0
  237. molSimplify/Ligands/no-.mol +10 -0
  238. molSimplify/Ligands/no2-.mol +11 -0
  239. molSimplify/Ligands/noxygen.mol +8 -0
  240. molSimplify/Ligands/ns-.mol +10 -0
  241. molSimplify/Ligands/o-pyridylbenzene.xyz +23 -0
  242. molSimplify/Ligands/o-pyridylphenylanion.xyz +22 -0
  243. molSimplify/Ligands/o2-.mol +9 -0
  244. molSimplify/Ligands/o2.xyz +4 -0
  245. molSimplify/Ligands/och2.mol +12 -0
  246. molSimplify/Ligands/oethanolamine.mol +26 -0
  247. molSimplify/Ligands/ome2.mol +22 -0
  248. molSimplify/Ligands/ooh.xyz +5 -0
  249. molSimplify/Ligands/oxalate.mol +17 -0
  250. molSimplify/Ligands/oxalate.smi +1 -0
  251. molSimplify/Ligands/oxygen.mol +7 -0
  252. molSimplify/Ligands/pentacyanocyclopentadienide.mol +36 -0
  253. molSimplify/Ligands/ph2-.mol +11 -0
  254. molSimplify/Ligands/ph3.mol +12 -0
  255. molSimplify/Ligands/phen.mol +51 -0
  256. molSimplify/Ligands/phenacac.mol +63 -0
  257. molSimplify/Ligands/phenalalanine.mol +51 -0
  258. molSimplify/Ligands/phendione.mol +51 -0
  259. molSimplify/Ligands/phenphen.mol +75 -0
  260. molSimplify/Ligands/phenylbenzoxazole.mol +54 -0
  261. molSimplify/Ligands/phenylcyc.mol +99 -0
  262. molSimplify/Ligands/phenylenediamine.mol +37 -0
  263. molSimplify/Ligands/phenylisocy.mol +32 -0
  264. molSimplify/Ligands/phosacidbipy.mol +66 -0
  265. molSimplify/Ligands/phosphine.mol +13 -0
  266. molSimplify/Ligands/phosphorine.mol +27 -0
  267. molSimplify/Ligands/phosphorustrifluoride.mol +12 -0
  268. molSimplify/Ligands/phthalocyanine.mol +126 -0
  269. molSimplify/Ligands/pme3o.mol +32 -0
  270. molSimplify/Ligands/porphyrin.mol +82 -0
  271. molSimplify/Ligands/pph3o.mol +77 -0
  272. molSimplify/Ligands/proline.mol +39 -0
  273. molSimplify/Ligands/propdiol.mol +21 -0
  274. molSimplify/Ligands/propylene.mol +23 -0
  275. molSimplify/Ligands/pyridine.mol +27 -0
  276. molSimplify/Ligands/pyrimidone.mol +27 -0
  277. molSimplify/Ligands/pyrrole.mol +24 -0
  278. molSimplify/Ligands/quinoxalinedithiol.mol +39 -0
  279. molSimplify/Ligands/s2-.mol +9 -0
  280. molSimplify/Ligands/salen.mol +75 -0
  281. molSimplify/Ligands/salphen.mol +84 -0
  282. molSimplify/Ligands/serine.mol +32 -0
  283. molSimplify/Ligands/simple_ligands.dict +14 -0
  284. molSimplify/Ligands/sulfacidbipy.mol +63 -0
  285. molSimplify/Ligands/tbucat.mol +54 -0
  286. molSimplify/Ligands/tbuphisocy.mol +56 -0
  287. molSimplify/Ligands/tbutylcyclen.mol +166 -0
  288. molSimplify/Ligands/tbutylisocy.mol +35 -0
  289. molSimplify/Ligands/tbutylthiol.mol +33 -0
  290. molSimplify/Ligands/tcnoet.mol +43 -0
  291. molSimplify/Ligands/tcnoetOH.mol +45 -0
  292. molSimplify/Ligands/terpy.mol +65 -0
  293. molSimplify/Ligands/tetrahydrofuran.mol +31 -0
  294. molSimplify/Ligands/thiane.mol +37 -0
  295. molSimplify/Ligands/thiazole.mol +21 -0
  296. molSimplify/Ligands/thiocyanate.mol +11 -0
  297. molSimplify/Ligands/thiol.mol +9 -0
  298. molSimplify/Ligands/thiophene.mol +23 -0
  299. molSimplify/Ligands/thiopyridine.mol +29 -0
  300. molSimplify/Ligands/threonine.mol +38 -0
  301. molSimplify/Ligands/tpp.mol +165 -0
  302. molSimplify/Ligands/tricyanomethyl.mol +19 -0
  303. molSimplify/Ligands/trifluoromethyl.mol +13 -0
  304. molSimplify/Ligands/tryptophan.mol +60 -0
  305. molSimplify/Ligands/tyrosine.mol +53 -0
  306. molSimplify/Ligands/uthiol.mol +11 -0
  307. molSimplify/Ligands/uthiolme2.mol +23 -0
  308. molSimplify/Ligands/valine.mol +42 -0
  309. molSimplify/Ligands/water.mol +10 -0
  310. molSimplify/Ligands/x.mol +6 -0
  311. molSimplify/Scripts/__init__.py +0 -0
  312. molSimplify/Scripts/addtodb.py +308 -0
  313. molSimplify/Scripts/cellbuilder.py +1592 -0
  314. molSimplify/Scripts/cellbuilder_tools.py +701 -0
  315. molSimplify/Scripts/chains.py +342 -0
  316. molSimplify/Scripts/convert_2to3.py +23 -0
  317. molSimplify/Scripts/dbinteract.py +631 -0
  318. molSimplify/Scripts/distgeom.py +617 -0
  319. molSimplify/Scripts/findcorrelations.py +287 -0
  320. molSimplify/Scripts/generator.py +267 -0
  321. molSimplify/Scripts/geometry.py +1224 -0
  322. molSimplify/Scripts/grabguivars.py +845 -0
  323. molSimplify/Scripts/in_b3lyp_usetc.py +141 -0
  324. molSimplify/Scripts/inparse.py +1673 -0
  325. molSimplify/Scripts/io.py +1149 -0
  326. molSimplify/Scripts/isomers.py +415 -0
  327. molSimplify/Scripts/jobgen.py +247 -0
  328. molSimplify/Scripts/krr_prep.py +1262 -0
  329. molSimplify/Scripts/molSimplify_io.py +18 -0
  330. molSimplify/Scripts/molden2psi4wfn.py +166 -0
  331. molSimplify/Scripts/namegen.py +32 -0
  332. molSimplify/Scripts/nn_prep.py +561 -0
  333. molSimplify/Scripts/oct_check_mols.py +782 -0
  334. molSimplify/Scripts/periodic_QE.py +97 -0
  335. molSimplify/Scripts/postmold.py +304 -0
  336. molSimplify/Scripts/postmwfn.py +709 -0
  337. molSimplify/Scripts/postparse.py +488 -0
  338. molSimplify/Scripts/postproc.py +139 -0
  339. molSimplify/Scripts/qcgen.py +1450 -0
  340. molSimplify/Scripts/rmsd.py +489 -0
  341. molSimplify/Scripts/rungen.py +670 -0
  342. molSimplify/Scripts/structgen.py +3040 -0
  343. molSimplify/Scripts/tf_nn_prep.py +894 -0
  344. molSimplify/Scripts/tsgen.py +295 -0
  345. molSimplify/Scripts/uq_calibration.py +69 -0
  346. molSimplify/__init__.py +0 -0
  347. molSimplify/__main__.py +197 -0
  348. molSimplify/icons/chemdb.png +0 -0
  349. molSimplify/icons/hjklogo.png +0 -0
  350. molSimplify/icons/icon.png +0 -0
  351. molSimplify/icons/logo.png +0 -0
  352. molSimplify/icons/logo_old.png +0 -0
  353. molSimplify/icons/petachem.png +0 -0
  354. molSimplify/icons/petachem2.png +0 -0
  355. molSimplify/icons/petachem_full.png +0 -0
  356. molSimplify/icons/pythonlogo.png +0 -0
  357. molSimplify/icons/sge copy.png +0 -0
  358. molSimplify/icons/sge.png +0 -0
  359. molSimplify/icons/slurm.png +0 -0
  360. molSimplify/icons/wft1.png +0 -0
  361. molSimplify/icons/wft2.png +0 -0
  362. molSimplify/icons/wft3.png +0 -0
  363. molSimplify/ml/__init__.py +0 -0
  364. molSimplify/ml/kernels.py +36 -0
  365. molSimplify/ml/layers.py +29 -0
  366. molSimplify/molscontrol/__init__.py +14 -0
  367. molSimplify/molscontrol/_version.py +521 -0
  368. molSimplify/molscontrol/clf_tools.py +144 -0
  369. molSimplify/molscontrol/data/README.md +21 -0
  370. molSimplify/molscontrol/data/look_and_say.dat +15 -0
  371. molSimplify/molscontrol/dynamic_classifier.py +514 -0
  372. molSimplify/molscontrol/io_tools.py +363 -0
  373. molSimplify/molscontrol/molscontrol.py +49 -0
  374. molSimplify/molscontrol/terachem/jobscript_control.sh +31 -0
  375. molSimplify/molscontrol/terachem/terachem_input +22 -0
  376. molSimplify/python_krr/X_train_TS.csv +535 -0
  377. molSimplify/python_krr/__init__.py +0 -0
  378. molSimplify/python_krr/hat2_X_mean_std.csv +3 -0
  379. molSimplify/python_krr/hat2_feature_names.csv +1 -0
  380. molSimplify/python_krr/hat2_y_mean_std.csv +2 -0
  381. molSimplify/python_krr/hat_X_mean_std.csv +6 -0
  382. molSimplify/python_krr/hat_feature_names.csv +1 -0
  383. molSimplify/python_krr/hat_krr_X_train.csv +5205 -0
  384. molSimplify/python_krr/hat_krr_dual_coef.csv +1 -0
  385. molSimplify/python_krr/hat_y_mean_std.csv +2 -0
  386. molSimplify/python_krr/sklearn_models.py +34 -0
  387. molSimplify/python_krr/y_train_TS.csv +535 -0
  388. molSimplify/python_nn/ANN.py +198 -0
  389. molSimplify/python_nn/__init__.py +0 -0
  390. molSimplify/python_nn/clf_analysis_tool.py +125 -0
  391. molSimplify/python_nn/dictionary_toolbox.py +49 -0
  392. molSimplify/python_nn/ensemble_test.py +309 -0
  393. molSimplify/python_nn/hs_center.csv +26 -0
  394. molSimplify/python_nn/hs_scale.csv +26 -0
  395. molSimplify/python_nn/ls_center.csv +26 -0
  396. molSimplify/python_nn/ls_scale.csv +26 -0
  397. molSimplify/python_nn/ms_hs_b1.csv +50 -0
  398. molSimplify/python_nn/ms_hs_b2.csv +50 -0
  399. molSimplify/python_nn/ms_hs_b3.csv +1 -0
  400. molSimplify/python_nn/ms_hs_w1.csv +50 -0
  401. molSimplify/python_nn/ms_hs_w2.csv +50 -0
  402. molSimplify/python_nn/ms_hs_w3.csv +1 -0
  403. molSimplify/python_nn/ms_ls_b1.csv +50 -0
  404. molSimplify/python_nn/ms_ls_b2.csv +50 -0
  405. molSimplify/python_nn/ms_ls_b3.csv +1 -0
  406. molSimplify/python_nn/ms_ls_w1.csv +50 -0
  407. molSimplify/python_nn/ms_ls_w2.csv +50 -0
  408. molSimplify/python_nn/ms_ls_w3.csv +1 -0
  409. molSimplify/python_nn/ms_slope_b1.csv +50 -0
  410. molSimplify/python_nn/ms_slope_b2.csv +50 -0
  411. molSimplify/python_nn/ms_slope_b3.csv +1 -0
  412. molSimplify/python_nn/ms_slope_w1.csv +50 -0
  413. molSimplify/python_nn/ms_slope_w2.csv +50 -0
  414. molSimplify/python_nn/ms_slope_w3.csv +1 -0
  415. molSimplify/python_nn/ms_split_b1.csv +50 -0
  416. molSimplify/python_nn/ms_split_b2.csv +50 -0
  417. molSimplify/python_nn/ms_split_b3.csv +1 -0
  418. molSimplify/python_nn/ms_split_w1.csv +50 -0
  419. molSimplify/python_nn/ms_split_w2.csv +50 -0
  420. molSimplify/python_nn/ms_split_w3.csv +1 -0
  421. molSimplify/python_nn/slope_center.csv +25 -0
  422. molSimplify/python_nn/slope_scale.csv +25 -0
  423. molSimplify/python_nn/split_center.csv +26 -0
  424. molSimplify/python_nn/split_scale.csv +26 -0
  425. molSimplify/python_nn/tf_ANN.py +762 -0
  426. molSimplify/python_nn/train_data.csv +1211 -0
  427. molSimplify/tf_nn/__init__.py +0 -0
  428. molSimplify/tf_nn/geo_static_clf/geo_static_clf_model.h5 +0 -0
  429. molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_name.csv +1591 -0
  430. molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_x.csv +2790 -0
  431. molSimplify/tf_nn/geo_static_clf/geo_static_clf_train_y.csv +2790 -0
  432. molSimplify/tf_nn/geo_static_clf/geo_static_clf_vars.csv +154 -0
  433. molSimplify/tf_nn/geos/hs_ii_bl_x.csv +1577 -0
  434. molSimplify/tf_nn/geos/hs_ii_bl_y.csv +1577 -0
  435. molSimplify/tf_nn/geos/hs_ii_model.h5 +0 -0
  436. molSimplify/tf_nn/geos/hs_ii_model.json +1 -0
  437. molSimplify/tf_nn/geos/hs_ii_vars.csv +154 -0
  438. molSimplify/tf_nn/geos/hs_iii_bl_x.csv +1659 -0
  439. molSimplify/tf_nn/geos/hs_iii_bl_y.csv +1659 -0
  440. molSimplify/tf_nn/geos/hs_iii_model.h5 +0 -0
  441. molSimplify/tf_nn/geos/hs_iii_model.json +1 -0
  442. molSimplify/tf_nn/geos/hs_iii_vars.csv +154 -0
  443. molSimplify/tf_nn/geos/ls_ii_bl_x.csv +1374 -0
  444. molSimplify/tf_nn/geos/ls_ii_bl_y.csv +1374 -0
  445. molSimplify/tf_nn/geos/ls_ii_model.h5 +0 -0
  446. molSimplify/tf_nn/geos/ls_ii_model.json +1 -0
  447. molSimplify/tf_nn/geos/ls_ii_vars.csv +154 -0
  448. molSimplify/tf_nn/geos/ls_iii_bl_x.csv +1364 -0
  449. molSimplify/tf_nn/geos/ls_iii_bl_y.csv +1364 -0
  450. molSimplify/tf_nn/geos/ls_iii_model.h5 +0 -0
  451. molSimplify/tf_nn/geos/ls_iii_model.json +1 -0
  452. molSimplify/tf_nn/geos/ls_iii_vars.csv +154 -0
  453. molSimplify/tf_nn/homolumo/gap_model.h5 +0 -0
  454. molSimplify/tf_nn/homolumo/gap_model.json +1 -0
  455. molSimplify/tf_nn/homolumo/gap_test_names.csv +175 -0
  456. molSimplify/tf_nn/homolumo/gap_test_x.csv +176 -0
  457. molSimplify/tf_nn/homolumo/gap_test_y.csv +176 -0
  458. molSimplify/tf_nn/homolumo/gap_train_names.csv +699 -0
  459. molSimplify/tf_nn/homolumo/gap_train_x.csv +700 -0
  460. molSimplify/tf_nn/homolumo/gap_train_y.csv +700 -0
  461. molSimplify/tf_nn/homolumo/gap_vars.csv +153 -0
  462. molSimplify/tf_nn/homolumo/homo_model.h5 +0 -0
  463. molSimplify/tf_nn/homolumo/homo_model.json +126 -0
  464. molSimplify/tf_nn/homolumo/homo_test_names.csv +175 -0
  465. molSimplify/tf_nn/homolumo/homo_test_x.csv +176 -0
  466. molSimplify/tf_nn/homolumo/homo_test_y.csv +176 -0
  467. molSimplify/tf_nn/homolumo/homo_train_names.csv +699 -0
  468. molSimplify/tf_nn/homolumo/homo_train_x.csv +700 -0
  469. molSimplify/tf_nn/homolumo/homo_train_y.csv +700 -0
  470. molSimplify/tf_nn/homolumo/homo_vars.csv +153 -0
  471. molSimplify/tf_nn/oxoandhomo/homo_empty_info.json +7 -0
  472. molSimplify/tf_nn/oxoandhomo/homo_empty_model.h5 +0 -0
  473. molSimplify/tf_nn/oxoandhomo/homo_empty_model.json +1 -0
  474. molSimplify/tf_nn/oxoandhomo/homo_empty_test_names.csv +143 -0
  475. molSimplify/tf_nn/oxoandhomo/homo_empty_test_x.csv +144 -0
  476. molSimplify/tf_nn/oxoandhomo/homo_empty_test_y.csv +144 -0
  477. molSimplify/tf_nn/oxoandhomo/homo_empty_train_names.csv +513 -0
  478. molSimplify/tf_nn/oxoandhomo/homo_empty_train_x.csv +514 -0
  479. molSimplify/tf_nn/oxoandhomo/homo_empty_train_y.csv +514 -0
  480. molSimplify/tf_nn/oxoandhomo/homo_empty_val_names.csv +143 -0
  481. molSimplify/tf_nn/oxoandhomo/homo_empty_val_x.csv +58 -0
  482. molSimplify/tf_nn/oxoandhomo/homo_empty_val_y.csv +58 -0
  483. molSimplify/tf_nn/oxoandhomo/homo_empty_vars.csv +155 -0
  484. molSimplify/tf_nn/oxoandhomo/oxo20_info.json +7 -0
  485. molSimplify/tf_nn/oxoandhomo/oxo20_model.h5 +0 -0
  486. molSimplify/tf_nn/oxoandhomo/oxo20_model.json +1 -0
  487. molSimplify/tf_nn/oxoandhomo/oxo20_test_names.csv +143 -0
  488. molSimplify/tf_nn/oxoandhomo/oxo20_test_x.csv +144 -0
  489. molSimplify/tf_nn/oxoandhomo/oxo20_test_y.csv +144 -0
  490. molSimplify/tf_nn/oxoandhomo/oxo20_train_names.csv +513 -0
  491. molSimplify/tf_nn/oxoandhomo/oxo20_train_x.csv +514 -0
  492. molSimplify/tf_nn/oxoandhomo/oxo20_train_y.csv +514 -0
  493. molSimplify/tf_nn/oxoandhomo/oxo20_val_names.csv +143 -0
  494. molSimplify/tf_nn/oxoandhomo/oxo20_val_x.csv +58 -0
  495. molSimplify/tf_nn/oxoandhomo/oxo20_val_y.csv +58 -0
  496. molSimplify/tf_nn/oxoandhomo/oxo20_vars.csv +154 -0
  497. molSimplify/tf_nn/oxocatalysis/hat_model.h5 +0 -0
  498. molSimplify/tf_nn/oxocatalysis/hat_model.json +1 -0
  499. molSimplify/tf_nn/oxocatalysis/hat_test_names.csv +419 -0
  500. molSimplify/tf_nn/oxocatalysis/hat_test_x.csv +420 -0
  501. molSimplify/tf_nn/oxocatalysis/hat_test_y.csv +420 -0
  502. molSimplify/tf_nn/oxocatalysis/hat_train_names.csv +1507 -0
  503. molSimplify/tf_nn/oxocatalysis/hat_train_x.csv +1508 -0
  504. molSimplify/tf_nn/oxocatalysis/hat_train_y.csv +1508 -0
  505. molSimplify/tf_nn/oxocatalysis/hat_val_x.csv +169 -0
  506. molSimplify/tf_nn/oxocatalysis/hat_val_y.csv +169 -0
  507. molSimplify/tf_nn/oxocatalysis/hat_vars.csv +162 -0
  508. molSimplify/tf_nn/oxocatalysis/oxo_model.h5 +0 -0
  509. molSimplify/tf_nn/oxocatalysis/oxo_model.json +1 -0
  510. molSimplify/tf_nn/oxocatalysis/oxo_test_names.csv +527 -0
  511. molSimplify/tf_nn/oxocatalysis/oxo_test_x.csv +528 -0
  512. molSimplify/tf_nn/oxocatalysis/oxo_test_y.csv +528 -0
  513. molSimplify/tf_nn/oxocatalysis/oxo_train_names.csv +1897 -0
  514. molSimplify/tf_nn/oxocatalysis/oxo_train_x.csv +1898 -0
  515. molSimplify/tf_nn/oxocatalysis/oxo_train_y.csv +1898 -0
  516. molSimplify/tf_nn/oxocatalysis/oxo_val_x.csv +212 -0
  517. molSimplify/tf_nn/oxocatalysis/oxo_val_y.csv +212 -0
  518. molSimplify/tf_nn/oxocatalysis/oxo_vars.csv +162 -0
  519. molSimplify/tf_nn/rescaling_data/gap_mean_x.csv +153 -0
  520. molSimplify/tf_nn/rescaling_data/gap_mean_y.csv +1 -0
  521. molSimplify/tf_nn/rescaling_data/gap_var_x.csv +153 -0
  522. molSimplify/tf_nn/rescaling_data/gap_var_y.csv +1 -0
  523. molSimplify/tf_nn/rescaling_data/geo_static_clf_mean_x.csv +154 -0
  524. molSimplify/tf_nn/rescaling_data/geo_static_clf_mean_y.csv +1 -0
  525. molSimplify/tf_nn/rescaling_data/geo_static_clf_var_x.csv +154 -0
  526. molSimplify/tf_nn/rescaling_data/geo_static_clf_var_y.csv +1 -0
  527. molSimplify/tf_nn/rescaling_data/hat_mean_x.csv +162 -0
  528. molSimplify/tf_nn/rescaling_data/hat_mean_y.csv +1 -0
  529. molSimplify/tf_nn/rescaling_data/hat_var_x.csv +162 -0
  530. molSimplify/tf_nn/rescaling_data/hat_var_y.csv +1 -0
  531. molSimplify/tf_nn/rescaling_data/homo_empty_mean_x.csv +155 -0
  532. molSimplify/tf_nn/rescaling_data/homo_empty_mean_y.csv +1 -0
  533. molSimplify/tf_nn/rescaling_data/homo_empty_var_x.csv +155 -0
  534. molSimplify/tf_nn/rescaling_data/homo_empty_var_y.csv +1 -0
  535. molSimplify/tf_nn/rescaling_data/homo_mean_x.csv +153 -0
  536. molSimplify/tf_nn/rescaling_data/homo_mean_y.csv +1 -0
  537. molSimplify/tf_nn/rescaling_data/homo_var_x.csv +153 -0
  538. molSimplify/tf_nn/rescaling_data/homo_var_y.csv +1 -0
  539. molSimplify/tf_nn/rescaling_data/hs_ii_mean_x.csv +154 -0
  540. molSimplify/tf_nn/rescaling_data/hs_ii_mean_y.csv +3 -0
  541. molSimplify/tf_nn/rescaling_data/hs_ii_var_x.csv +154 -0
  542. molSimplify/tf_nn/rescaling_data/hs_ii_var_y.csv +3 -0
  543. molSimplify/tf_nn/rescaling_data/hs_iii_mean_x.csv +154 -0
  544. molSimplify/tf_nn/rescaling_data/hs_iii_mean_y.csv +3 -0
  545. molSimplify/tf_nn/rescaling_data/hs_iii_var_x.csv +154 -0
  546. molSimplify/tf_nn/rescaling_data/hs_iii_var_y.csv +3 -0
  547. molSimplify/tf_nn/rescaling_data/ls_ii_mean_x.csv +154 -0
  548. molSimplify/tf_nn/rescaling_data/ls_ii_mean_y.csv +3 -0
  549. molSimplify/tf_nn/rescaling_data/ls_ii_var_x.csv +154 -0
  550. molSimplify/tf_nn/rescaling_data/ls_ii_var_y.csv +3 -0
  551. molSimplify/tf_nn/rescaling_data/ls_iii_mean_x.csv +154 -0
  552. molSimplify/tf_nn/rescaling_data/ls_iii_mean_y.csv +3 -0
  553. molSimplify/tf_nn/rescaling_data/ls_iii_var_x.csv +154 -0
  554. molSimplify/tf_nn/rescaling_data/ls_iii_var_y.csv +3 -0
  555. molSimplify/tf_nn/rescaling_data/oxo20_mean_x.csv +154 -0
  556. molSimplify/tf_nn/rescaling_data/oxo20_mean_y.csv +1 -0
  557. molSimplify/tf_nn/rescaling_data/oxo20_var_x.csv +154 -0
  558. molSimplify/tf_nn/rescaling_data/oxo20_var_y.csv +1 -0
  559. molSimplify/tf_nn/rescaling_data/oxo_mean_x.csv +162 -0
  560. molSimplify/tf_nn/rescaling_data/oxo_mean_y.csv +1 -0
  561. molSimplify/tf_nn/rescaling_data/oxo_var_x.csv +162 -0
  562. molSimplify/tf_nn/rescaling_data/oxo_var_y.csv +1 -0
  563. molSimplify/tf_nn/rescaling_data/sc_static_clf_mean_x.csv +154 -0
  564. molSimplify/tf_nn/rescaling_data/sc_static_clf_mean_y.csv +1 -0
  565. molSimplify/tf_nn/rescaling_data/sc_static_clf_var_x.csv +154 -0
  566. molSimplify/tf_nn/rescaling_data/sc_static_clf_var_y.csv +1 -0
  567. molSimplify/tf_nn/rescaling_data/split_mean_x.csv +155 -0
  568. molSimplify/tf_nn/rescaling_data/split_mean_y.csv +1 -0
  569. molSimplify/tf_nn/rescaling_data/split_var_x.csv +155 -0
  570. molSimplify/tf_nn/rescaling_data/split_var_y.csv +1 -0
  571. molSimplify/tf_nn/sc_static_clf/sc_static_clf_model.h5 +0 -0
  572. molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_name.csv +1591 -0
  573. molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_x.csv +1592 -0
  574. molSimplify/tf_nn/sc_static_clf/sc_static_clf_train_y.csv +1592 -0
  575. molSimplify/tf_nn/sc_static_clf/sc_static_clf_vars.csv +154 -0
  576. molSimplify/tf_nn/split/split_model.h5 +0 -0
  577. molSimplify/tf_nn/split/split_model.json +1 -0
  578. molSimplify/tf_nn/split/split_vars.csv +155 -0
  579. molSimplify/tf_nn/split/split_x.csv +1902 -0
  580. molSimplify/tf_nn/split/split_y.csv +1902 -0
  581. molSimplify/tf_nn/split/train_names.csv +1901 -0
  582. molSimplify/utils/__init__.py +0 -0
  583. molSimplify/utils/decorators.py +16 -0
  584. molSimplify/utils/metaclasses.py +12 -0
  585. molSimplify/utils/tensorflow.py +23 -0
  586. molSimplify/utils/timer.py +16 -0
  587. molSimplify-1.7.4.dist-info/LICENSE +674 -0
  588. molSimplify-1.7.4.dist-info/METADATA +821 -0
  589. molSimplify-1.7.4.dist-info/RECORD +651 -0
  590. molSimplify-1.7.4.dist-info/WHEEL +5 -0
  591. molSimplify-1.7.4.dist-info/entry_points.txt +3 -0
  592. molSimplify-1.7.4.dist-info/top_level.txt +4 -0
  593. tests/generateTests.py +122 -0
  594. tests/helperFuncs.py +658 -0
  595. tests/informatics/test_MOF_descriptors.py +128 -0
  596. tests/informatics/test_active_learning.py +113 -0
  597. tests/informatics/test_coulomb_analyze.py +24 -0
  598. tests/informatics/test_graph_racs.py +193 -0
  599. tests/ml/test_kernels.py +20 -0
  600. tests/ml/test_layers.py +47 -0
  601. tests/runtest.py +10 -0
  602. tests/test_Mol2D.py +128 -0
  603. tests/test_basic_imports.py +62 -0
  604. tests/test_bidentate.py +25 -0
  605. tests/test_cli.py +20 -0
  606. tests/test_distgeom.py +106 -0
  607. tests/test_example_1.py +29 -0
  608. tests/test_example_3.py +31 -0
  609. tests/test_example_5.py +43 -0
  610. tests/test_example_7.py +28 -0
  611. tests/test_example_8.py +15 -0
  612. tests/test_example_tbp.py +15 -0
  613. tests/test_ff_xtb.py +111 -0
  614. tests/test_geocheck_oct.py +26 -0
  615. tests/test_geocheck_one_empty.py +15 -0
  616. tests/test_geometry.py +44 -0
  617. tests/test_inparse.py +76 -0
  618. tests/test_io.py +84 -0
  619. tests/test_jobgen.py +84 -0
  620. tests/test_joption_pythonic.py +27 -0
  621. tests/test_ligand_assign.py +58 -0
  622. tests/test_ligand_assign_consistent.py +60 -0
  623. tests/test_ligand_class.py +26 -0
  624. tests/test_ligand_from_mol_file.py +35 -0
  625. tests/test_ligands.py +86 -0
  626. tests/test_mol3D.py +337 -0
  627. tests/test_molcas_caspt2.py +15 -0
  628. tests/test_molcas_casscf.py +15 -0
  629. tests/test_old_ANNs.py +68 -0
  630. tests/test_orca_ccsdt.py +15 -0
  631. tests/test_orca_dft.py +15 -0
  632. tests/test_qcgen.py +50 -0
  633. tests/test_racs.py +124 -0
  634. tests/test_rmsd.py +68 -0
  635. tests/test_structgen_functions.py +198 -0
  636. tests/test_tetrahedral.py +29 -0
  637. tests/test_tutorial_10_part_one.py +16 -0
  638. tests/test_tutorial_10_part_two.py +15 -0
  639. tests/test_tutorial_2.py +11 -0
  640. tests/test_tutorial_3.py +15 -0
  641. tests/test_tutorial_4.py +57 -0
  642. tests/test_tutorial_6.py +10 -0
  643. tests/test_tutorial_8.py +29 -0
  644. tests/test_tutorial_9_part_one.py +15 -0
  645. tests/test_tutorial_9_part_two.py +15 -0
  646. tests/test_tutorial_qm9_part_one.py +6 -0
  647. tests/testresources/refs/racs/generate_references.py +85 -0
  648. workflows/NandyJACSAu2022/bridge_functionalizer.py +253 -0
  649. workflows/NandyJACSAu2022/frag_functionalizer.py +242 -0
  650. workflows/NandyJACSAu2022/fragment_classes.py +586 -0
  651. workflows/NandyJACSAu2022/macrocycle_synthesis.py +179 -0
tests/test_mol3D.py ADDED
@@ -0,0 +1,337 @@
1
+ import pytest
2
+ import numpy as np
3
+ from molSimplify.Classes.mol3D import mol3D
4
+ from molSimplify.Classes.atom3D import atom3D
5
+
6
+
7
+ def test_adding_and_deleting_atoms():
8
+ mol = mol3D()
9
+ mol.addAtom(atom3D(Sym='Fe'))
10
+
11
+ assert mol.natoms == 1
12
+ assert mol.findMetal() == [0]
13
+
14
+ mol.addAtom(atom3D(Sym='Cu'))
15
+
16
+ assert mol.natoms == 2
17
+ assert mol.findMetal() == [0, 1]
18
+
19
+ mol.deleteatom(0)
20
+
21
+ assert mol.natoms == 1
22
+ assert mol.findMetal() == [0]
23
+
24
+
25
+ def test_finding_and_counting_methods():
26
+ mol = mol3D()
27
+ mol.addAtom(atom3D(Sym='Fe'))
28
+ for _ in range(6):
29
+ mol.addAtom(atom3D(Sym='C'))
30
+ mol.addAtom(atom3D(Sym='O'))
31
+
32
+ # Test find_atom
33
+ assert mol.find_atom(sym='O') == [2, 4, 6, 8, 10, 12]
34
+ # Test findAtomsbySymbol
35
+ assert mol.findAtomsbySymbol(sym='C') == [1, 3, 5, 7, 9, 11]
36
+ # Test getAtomwithSyms (allows for multiple symbols)
37
+ ref_indices = [0, 2, 4, 6, 8, 10, 12]
38
+ assert (mol.getAtomwithSyms(syms=['Fe', 'O'])
39
+ == [mol.getAtom(i) for i in ref_indices])
40
+ # optional argument allows to return just the indices:
41
+ assert (mol.getAtomwithSyms(syms=['Fe', 'O'], return_index=True)
42
+ == ref_indices)
43
+ # Test mols_symbols
44
+ mol.mols_symbols()
45
+ assert mol.symbols_dict == {'Fe': 1, 'C': 6, 'O': 6}
46
+ # Test count_nonH_atoms
47
+ assert mol.count_nonH_atoms() == 13
48
+ # Test count_atoms (exclude O)
49
+ assert mol.count_atoms(exclude=['H', 'O']) == 7
50
+ # Test count_specific_atoms
51
+ assert mol.count_specific_atoms(atom_types=['C', 'O']) == 12
52
+ # Test count_electrons
53
+ assert mol.count_electrons(charge=2) == 24 + 6*6 + 6*8
54
+ # Test findcloseMetal
55
+ assert mol.findcloseMetal(mol.getAtom(-1)) == 0
56
+ # Test findMetal
57
+ assert mol.findMetal() == [0]
58
+ # Test make_formula (sorted by atomic number)
59
+ assert mol.make_formula(latex=False) == 'Fe1O6C6'
60
+ assert (mol.make_formula(latex=True)
61
+ == r'\textrm{Fe}_{1}\textrm{O}_{6}\textrm{C}_{6}')
62
+ # Test typevect
63
+ np.testing.assert_equal(mol.typevect(), np.array(['Fe'] + ['C', 'O']*6))
64
+
65
+
66
+ def test_add_bond():
67
+ mol = mol3D()
68
+ mol.addAtom(atom3D(Sym='O'))
69
+ mol.addAtom(atom3D(Sym='C'))
70
+ mol.addAtom(atom3D(Sym='H'))
71
+ mol.addAtom(atom3D(Sym='H'))
72
+
73
+ # Initialize empty bo_dict and graph
74
+ mol.bo_dict = {}
75
+ mol.graph = np.zeros((4, 4))
76
+
77
+ mol.add_bond(0, 1, 2)
78
+ mol.add_bond(1, 2, 1)
79
+ mol.add_bond(1, 3, 1)
80
+
81
+ assert mol.bo_dict == {(0, 1): 2, (1, 2): 1, (1, 3): 1}
82
+ np.testing.assert_allclose(mol.graph, [[0, 2, 0, 0],
83
+ [2, 0, 1, 1],
84
+ [0, 1, 0, 0],
85
+ [0, 1, 0, 0]])
86
+
87
+ # Assert that bonding an atom to itself fails:
88
+ with pytest.raises(IndexError):
89
+ mol.add_bond(0, 0, 1)
90
+
91
+ new_bo_dict = mol.get_bo_dict_from_inds([1, 2, 3])
92
+ assert new_bo_dict == {(0, 1): 1, (0, 2): 1}
93
+
94
+ assert mol.get_mol_graph_det(oct=False) == '-154582.1094'
95
+ assert mol.get_mol_graph_det(oct=False, useBOMat=True) == '-154582.1094'
96
+
97
+
98
+ @pytest.mark.skip(reason='Mutating the state of an atom3D can not be detected '
99
+ ' by the mol3D class')
100
+ def test_mutating_atoms():
101
+ mol = mol3D()
102
+ mol.addAtom(atom3D(Sym='Fe'))
103
+ assert mol.findMetal() == [0]
104
+
105
+ mol.atoms[0].mutate('C')
106
+ assert mol.findMetal() == []
107
+
108
+
109
+ @pytest.mark.parametrize('name, geometry_str', [
110
+ ('linear', 'linear'),
111
+ ('trigonal_planar', 'trigonal planar'),
112
+ ('t_shape', 'T shape'),
113
+ ('trigonal_pyramidal', 'trigonal pyramidal'),
114
+ ('tetrahedral', 'tetrahedral'),
115
+ ('square_planar', 'square planar'),
116
+ ('seesaw', 'seesaw'),
117
+ ('trigonal_bipyramidal', 'trigonal bipyramidal'),
118
+ ('square_pyramidal', 'square pyramidal'),
119
+ # ('pentagonal_planar', 'pentagonal planar'),
120
+ ('octahedral', 'octahedral'),
121
+ # ('pentagonal_pyramidal', 'pentagonal pyramidal'),
122
+ ('trigonal_prismatic', 'trigonal prismatic'),
123
+ # ('pentagonal_bipyramidal', 'pentagonal bipyramidal')
124
+ # ('square_antiprismatic', 'square antiprismatic'),
125
+ # ('tricapped_trigonal_prismatic', 'tricapped trigonal prismatic'),
126
+ ])
127
+ def test_get_geometry_type(resource_path_root, name, geometry_str):
128
+ xyz_file = resource_path_root / "inputs" / "geometry_type" / f"{name}.xyz"
129
+ mol = mol3D()
130
+ mol.readfromxyz(xyz_file)
131
+
132
+ geo_report = mol.get_geometry_type(debug=True)
133
+
134
+ assert geo_report['geometry'] == geometry_str
135
+
136
+
137
+ def test_get_geometry_type_catoms_arr(resource_path_root):
138
+ xyz_file = resource_path_root / "inputs" / "geometry_type" / "octahedral.xyz"
139
+ mol = mol3D()
140
+ mol.readfromxyz(xyz_file)
141
+
142
+ with pytest.raises(ValueError):
143
+ mol.get_geometry_type(catoms_arr=[1], debug=True)
144
+
145
+ geo_report = mol.get_geometry_type(catoms_arr=[1, 4, 7, 10, 13, 16], debug=True)
146
+
147
+ assert geo_report['geometry'] == 'octahedral'
148
+
149
+
150
+ @pytest.mark.parametrize(
151
+ 'name, geometry_str, hapticity',
152
+ [
153
+ ('BOWROX_comp_0.mol2', 'tetrahedral', [5, 1, 1, 1]),
154
+ ('BOXTEQ_comp_0.mol2', 'tetrahedral', [6, 1, 1, 1]),
155
+ ('BOXTIU_comp_0.mol2', 'tetrahedral', [6, 1, 1, 1]),
156
+ ('BOZHOQ_comp_2.mol2', 'linear', [5, 5]),
157
+ ('BOZHUW_comp_2.mol2', 'linear', [5, 5]),
158
+ ('BUFLUM_comp_0.mol2', 'T shape', [2, 1, 1]),
159
+ ('BUHMID_comp_0.mol2', 'trigonal planar', [3, 1, 1]),
160
+ ('COYXUM_comp_0.mol2', 'tetrahedral', [5, 1, 1, 1]),
161
+ ('COYYEX_comp_0.mol2', 'trigonal planar', [5, 1, 1]),
162
+ ('COYYIB_comp_0.mol2', 'tetrahedral', [5, 1, 1, 1]),
163
+ ]
164
+ )
165
+ def test_get_geometry_type_hapticity(resource_path_root, name, geometry_str, hapticity):
166
+ input_file = resource_path_root / "inputs" / "hapticity_compounds" / name
167
+ mol = mol3D()
168
+ mol.readfrommol2(input_file)
169
+
170
+ geo_report = mol.get_geometry_type(debug=True)
171
+
172
+ print(geo_report)
173
+ assert geo_report["geometry"] == geometry_str
174
+ assert geo_report["hapticity"] == hapticity
175
+
176
+
177
+ @pytest.mark.parametrize(
178
+ 'name, con_atoms',
179
+ [
180
+ ('BOWROX_comp_0.mol2', [{3, 4, 5, 6, 7}]),
181
+ ('BOXTEQ_comp_0.mol2', [{4, 5, 6, 7, 8, 9}]),
182
+ ('BOXTIU_comp_0.mol2', [{2, 3, 5, 6, 8, 9}]),
183
+ ('BOZHOQ_comp_2.mol2', [{1, 2, 3, 6, 8}, {4, 5, 7, 9, 10}]),
184
+ ('BOZHUW_comp_2.mol2', [{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}]),
185
+ ]
186
+ )
187
+ def test_is_sandwich_compound(resource_path_root, name, con_atoms):
188
+ input_file = resource_path_root / "inputs" / "hapticity_compounds" / name
189
+ mol = mol3D()
190
+ mol.readfrommol2(input_file)
191
+
192
+ num_sandwich_lig, info_sandwich_lig, aromatic, allconnect, sandwich_lig_atoms = mol.is_sandwich_compound()
193
+
194
+ assert num_sandwich_lig == len(con_atoms)
195
+ assert aromatic
196
+ assert allconnect
197
+ for i, (info, lig) in enumerate(zip(info_sandwich_lig, sandwich_lig_atoms)):
198
+ assert info["aromatic"]
199
+ assert info["natoms_connected"] == len(con_atoms[i])
200
+ assert info["natoms_ring"] == len(con_atoms[i])
201
+ assert lig["atom_idxs"] == con_atoms[i]
202
+
203
+
204
+ @pytest.mark.parametrize(
205
+ 'name, con_atoms',
206
+ [
207
+ ("BUFLUM_comp_0.mol2", [{2, 4}]),
208
+ ("BUHMID_comp_0.mol2", [{3, 4, 5}]),
209
+ ]
210
+ )
211
+ def test_is_edge_compound(resource_path_root, name, con_atoms):
212
+ input_file = resource_path_root / "inputs" / "hapticity_compounds" / name
213
+ mol = mol3D()
214
+ mol.readfrommol2(input_file)
215
+
216
+ num_edge_lig, info_edge_lig, edge_lig_atoms = mol.is_edge_compound()
217
+
218
+ assert num_edge_lig == len(con_atoms)
219
+ for i, (info, lig) in enumerate(zip(info_edge_lig, edge_lig_atoms)):
220
+ assert info["natoms_connected"] == len(con_atoms[i])
221
+ assert lig["atom_idxs"] == con_atoms[i]
222
+
223
+
224
+ def test_readfromxyzfile(resource_path_root):
225
+ xyz_file = resource_path_root / "inputs" / "cr3_f6_optimization.xyz"
226
+ mol = mol3D()
227
+ mol.readfromxyz(xyz_file)
228
+
229
+ atoms_ref = [
230
+ ("Cr", [-0.060052, -0.000019, -0.000023]),
231
+ ("F", [1.802823, -0.010399, -0.004515]),
232
+ ("F", [-0.070170, 1.865178, 0.0035660]),
233
+ ("F", [-1.922959, 0.010197, 0.0049120]),
234
+ ("F", [-0.049552, -1.865205, -0.0038600]),
235
+ ("F", [-0.064742, 0.003876, 1.8531400]),
236
+ ("F", [-0.055253, -0.003594, -1.8531790]),
237
+ ]
238
+
239
+ for atom, ref in zip(mol.atoms, atoms_ref):
240
+ assert (atom.symbol(), atom.coords()) == ref
241
+
242
+ # Test read_final_optim_step
243
+ mol = mol3D()
244
+ mol.readfromxyz(xyz_file, read_final_optim_step=True)
245
+
246
+ atoms_ref = [
247
+ ("Cr", [-0.0599865612, 0.0000165451, 0.0000028031]),
248
+ ("F", [1.8820549261, 0.0000076116, 0.0000163815]),
249
+ ("F", [-0.0600064919, 1.9420510001, -0.0000022958]),
250
+ ("F", [-2.0019508544, -0.0000130345, -0.0000067108]),
251
+ ("F", [-0.0599967119, -1.9420284092, 0.0000133671]),
252
+ ("F", [-0.0600235008, 0.0000085354, 1.9418467918]),
253
+ ("F", [-0.0599958059, -0.0000082485, -1.9418293370]),
254
+ ]
255
+
256
+ for atom, ref in zip(mol.atoms, atoms_ref):
257
+ assert (atom.symbol(), atom.coords()) == ref
258
+
259
+
260
+ def test_mol3D_from_smiles_macrocycles():
261
+ """Uses an examples from Aditya's macrocycles that were previously
262
+ converted wrong.
263
+ """
264
+ smiles = "C9SC(=CCSC(CSC(=NCSC9)))"
265
+ mol = mol3D.from_smiles(smiles)
266
+ assert mol.natoms == 29
267
+
268
+ ref_graph = np.zeros([mol.natoms, mol.natoms])
269
+ ref_bo_graph = np.zeros([mol.natoms, mol.natoms])
270
+ bonds = [
271
+ (21, 7, 1.0),
272
+ (29, 14, 1.0),
273
+ (13, 14, 1.0),
274
+ (13, 12, 1.0),
275
+ (9, 10, 1.0),
276
+ (9, 8, 1.0),
277
+ (27, 12, 1.0),
278
+ (6, 7, 1.0),
279
+ (6, 5, 1.0),
280
+ (14, 28, 1.0),
281
+ (14, 1, 1.0),
282
+ (7, 8, 1.0),
283
+ (7, 22, 1.0),
284
+ (2, 1, 1.0),
285
+ (2, 3, 1.0),
286
+ (24, 8, 1.0),
287
+ (12, 11, 1.0),
288
+ (12, 26, 1.0),
289
+ (10, 11, 2.0),
290
+ (10, 25, 1.0),
291
+ (8, 23, 1.0),
292
+ (1, 15, 1.0),
293
+ (1, 16, 1.0),
294
+ (3, 17, 1.0),
295
+ (3, 4, 2.0),
296
+ (5, 19, 1.0),
297
+ (5, 4, 1.0),
298
+ (5, 20, 1.0),
299
+ (4, 18, 1.0),
300
+ ]
301
+ for bond in bonds:
302
+ i, j = bond[0] - 1, bond[1] - 1
303
+ ref_graph[i, j] = ref_graph[j, i] = 1
304
+ ref_bo_graph[i, j] = ref_bo_graph[j, i] = bond[2]
305
+
306
+ np.testing.assert_allclose(mol.graph, ref_graph)
307
+ np.testing.assert_allclose(mol.bo_graph, ref_bo_graph)
308
+
309
+
310
+ def test_mol3D_from_smiles_benzene():
311
+ smiles = "c1ccccc1"
312
+ mol = mol3D.from_smiles(smiles)
313
+ assert mol.natoms == 12
314
+
315
+ ref_graph = np.zeros([mol.natoms, mol.natoms])
316
+ ref_bo_graph = np.zeros([mol.natoms, mol.natoms])
317
+ bonds = [
318
+ (1, 2, 1.5),
319
+ (2, 3, 1.5),
320
+ (3, 4, 1.5),
321
+ (4, 5, 1.5),
322
+ (5, 6, 1.5),
323
+ (1, 6, 1.5),
324
+ (1, 7, 1.0),
325
+ (2, 8, 1.0),
326
+ (3, 9, 1.0),
327
+ (4, 10, 1.0),
328
+ (5, 11, 1.0),
329
+ (6, 12, 1.0),
330
+ ]
331
+ for bond in bonds:
332
+ i, j = bond[0] - 1, bond[1] - 1
333
+ ref_graph[i, j] = ref_graph[j, i] = 1
334
+ ref_bo_graph[i, j] = ref_bo_graph[j, i] = bond[2]
335
+
336
+ np.testing.assert_allclose(mol.graph, ref_graph)
337
+ np.testing.assert_allclose(mol.bo_graph, ref_bo_graph)
@@ -0,0 +1,15 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_molcas_caspt2(tmpdir, resource_path_root):
5
+ testName = "molcas_caspt2"
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
@@ -0,0 +1,15 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_molcas_casscf(tmpdir, resource_path_root):
5
+ testName = "molcas_casscf"
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_old_ANNs.py ADDED
@@ -0,0 +1,68 @@
1
+ import helperFuncs as hp
2
+ import numpy as np
3
+ from molSimplify.python_nn.ANN import simple_network_builder
4
+
5
+
6
+ def test_old_ANN(tmpdir, resource_path_root):
7
+ testName = "old_ANN"
8
+ threshMLBL = 0.1
9
+ threshLG = 1.0
10
+ threshOG = 2.0
11
+ [passNumAtoms, passMLBL, passLG, passOG, pass_report, _] = hp.runtest(
12
+ tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
13
+ assert passNumAtoms
14
+ assert passMLBL
15
+ assert passLG
16
+ assert passOG
17
+ assert pass_report
18
+
19
+
20
+ def test_simple_network_builder():
21
+ """This test was created by capturing the inputs and outputs generated by
22
+ the old pybrain implementation during the test_old_ANN() test function."""
23
+ split_input = np.array(
24
+ [-0.4917839, -0.56726225, 1.61974697, -0.50082508, -0.30476799,
25
+ -0.90272848, 0.49027265, 0.65977966, 0.65377293, -0.5926822,
26
+ -0.86257212, -0.25131881, -0.69807754, 1.76535323, -0.18234301,
27
+ -0.16467918, -0.82545825, 1.43132271, -0.12278255, 1.52889381,
28
+ 1.11584538, -0.96668963, -1.05525312, -0.95836809, -1.25775219])
29
+ split_ref_output = np.array([-0.90325581])
30
+
31
+ n = simple_network_builder([25, 50, 50], "ms_split")
32
+ output = n.activate(split_input)
33
+ np.testing.assert_allclose(output, split_ref_output)
34
+
35
+ # Same for slope
36
+ slope_input = np.array(
37
+ [-0.48069367, -0.551563, 1.64555217, -0.52515453, -0.31631299,
38
+ -0.91503729, 0.67783389, 0.66328568, -0.6130196, -0.87338511,
39
+ -0.25824387, -0.66613123, -0.57789148, 4.88496234, -0.15250621,
40
+ -0.81416039, -0.69302998, 7.55021286, 1.54277755, 1.11294416,
41
+ -0.96408929, -1.09251887, -0.97338522, -1.26357339])
42
+ slope_ref_output = np.array([0.64270068])
43
+ n = simple_network_builder([24, 50, 50], "ms_slope")
44
+ output = n.activate(slope_input)
45
+ np.testing.assert_allclose(output, slope_ref_output)
46
+
47
+ ls_input = np.array(
48
+ [-0.48919416, -0.57361705, 1.62646982, -0.49824537, -0.30638216,
49
+ -0.92095277, 0.51297477, 0.66726202, 0.66624771, -0.57870037,
50
+ -0.84940138, -0.24190509, -0.69676993, 1.75745942, -0.1917933,
51
+ -0.16730346, -0.81139387, 1.43670349, -0.13278737,
52
+ 1.53683663, 1.11609907, -1.03399044, -0.82734353,
53
+ -0.96566302, -1.26085904])
54
+ ls_ref_output = np.array([-0.65810288])
55
+ n = simple_network_builder([25, 50, 50], "ms_ls")
56
+ output = n.activate(ls_input)
57
+ np.testing.assert_allclose(output, ls_ref_output)
58
+
59
+ hs_input = np.array(
60
+ [-0.49953556, -0.56090563, 1.650425, -0.51368646, -0.30152256,
61
+ -0.8952212, 0.5020875, 0.65942027, 0.65335421, -0.56599111,
62
+ -0.84425765, -0.23805921, -0.69938591, 1.81009507, -0.18946893,
63
+ -0.15931486, -0.83967322, 1.48102596, -0.12278255, 1.53846941,
64
+ 1.11789832, -1.08058748, -0.87232256, -0.94605866, -1.24373718])
65
+ hs_ref_output = np.array([-0.54344953])
66
+ n = simple_network_builder([25, 50, 50], "ms_hs")
67
+ output = n.activate(hs_input)
68
+ np.testing.assert_allclose(output, hs_ref_output)
@@ -0,0 +1,15 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_orca_ccsdt(tmpdir, resource_path_root):
5
+ testName = "orca_ccsdt"
6
+ threshMLBL = 0.1
7
+ threshLG = 1.0
8
+ threshOG = 8.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_orca_dft.py ADDED
@@ -0,0 +1,15 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_orca_dft(tmpdir, resource_path_root):
5
+ testName = "orca_dft"
6
+ threshMLBL = 0.1
7
+ threshLG = 1.0
8
+ threshOG = 8.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_qcgen.py ADDED
@@ -0,0 +1,50 @@
1
+ import pytest
2
+ import shutil
3
+ from argparse import Namespace
4
+ from molSimplify.Scripts.qcgen import (tcgen, gamgen, qgen,
5
+ mlpgen, ogen, molcgen)
6
+
7
+
8
+ @pytest.mark.parametrize('gen_function, default_name',
9
+ [(tcgen, 'terachem_input'), (gamgen, 'gam.inp'),
10
+ (qgen, 'qch.inp'), (mlpgen, 'FeH2O6.mop'),
11
+ (ogen, 'orca.in'), (molcgen, 'molcas.input')])
12
+ def test_qcgen_defaults(resource_path_root, gen_function, default_name, tmpdir):
13
+ """Calls the gen_function with as little parameters as possible to
14
+ test the default input file generated."""
15
+ args = Namespace(jobdir=str(tmpdir), reportonly=None, spin=None,
16
+ charge=None, runtyp=None, gpus=None, dispersion=None,
17
+ basis=None, qoption=None, name=None, tc_fix_dihedral=None,
18
+ method=None, oxstate='II', remoption=None, gbasis=None,
19
+ correlation=None, unrestricted=None, bsep=None,
20
+ ngauss=None, ndfunc=None, npfunc=None, sysoption=None,
21
+ ctrloption=None, scfoption=None, statoption=None)
22
+ xyzfile = resource_path_root / "inputs" / "qcgen" / "FeH2O6.xyz"
23
+ # Copy xyz file to tmpdir
24
+ shutil.copy(xyzfile, tmpdir / 'FeH2O6.xyz')
25
+
26
+ jobdirs = gen_function(args, [str(tmpdir / 'FeH2O6')], 'B3LYP')
27
+
28
+ sub_dir = tmpdir
29
+ ref_dir = resource_path_root / "refs" / "qcgen" / f"{gen_function.__name__}"
30
+ # These two generate a different subfolder structure...
31
+ if gen_function is gamgen or gen_function is qgen:
32
+ sub_dir = tmpdir / 'FeH2O6/B3LYP'
33
+ ref_dir = f'{ref_dir}/FeH2O6/B3LYP'
34
+ assert jobdirs[0] == sub_dir
35
+
36
+ ref_file = resource_path_root / ref_dir / default_name
37
+ with open(ref_file, 'r') as f:
38
+ ref_lines = f.readlines()
39
+
40
+ with open(sub_dir / default_name, 'r') as f:
41
+ lines = f.readlines()
42
+
43
+ # The gamgen input contains a time stamp that has to be removed
44
+ # prior to comparison:
45
+ if gen_function is gamgen:
46
+ ref_lines = [line for line in ref_lines if not line.endswith(
47
+ 'XYZ structure generated by mol3D Class, molSimplify\n')]
48
+ lines = [line for line in lines if not line.endswith(
49
+ 'XYZ structure generated by mol3D Class, molSimplify\n')]
50
+ assert lines == ref_lines
tests/test_racs.py ADDED
@@ -0,0 +1,124 @@
1
+ import pytest
2
+ import pickle
3
+ from molSimplify.Classes.mol3D import mol3D
4
+ from molSimplify.Classes.ligand import ligand
5
+ from molSimplify.Informatics.RACassemble import create_OHE
6
+ from molSimplify.Informatics.lacRACAssemble import get_descriptor_vector
7
+ from molSimplify.Scripts.io import lig_load
8
+
9
+
10
+ @pytest.mark.parametrize('xyz_path, ref_path', [
11
+ ('fe_carbonyl_6.xyz', 'racs_Fe_carbonyl_6.pickle'),
12
+ ('mn_furan_water_ammonia_furan_water_ammonia.xyz',
13
+ 'racs_Mn_furan_water_ammonia_furan_water_ammonia.pickle'),
14
+ ('cr_acac_acac_bipy.xyz',
15
+ 'racs_Cr_acac_acac_bipy.pickle'),
16
+ ('co_acac_en_water_hydrogensulfide.xyz',
17
+ 'racs_Co_acac_en_water_hydrogensulfide.pickle')])
18
+ def test_Mn_water2_ammonia_furan2_ammonia(resource_path_root, xyz_path, ref_path):
19
+ xyz_path = resource_path_root / "refs" / "racs" / xyz_path
20
+ mol = mol3D()
21
+ mol.readfromxyz(xyz_path)
22
+ features = mol.get_features()
23
+
24
+ ref_path = resource_path_root / "refs" / "racs" / ref_path
25
+ with open(ref_path, 'rb') as fin:
26
+ ref_features = pickle.load(fin)
27
+
28
+ assert features.keys() == ref_features.keys()
29
+ for key, val in features.items():
30
+ assert abs(val - ref_features[key]) < 1e-4
31
+
32
+
33
+ def test_six_pyridine_vs_three_bipy(resource_path_root):
34
+ """Up to depth 2 the atom centered racs features for pyr_6 and bipy_3
35
+ should be the same"""
36
+ fe_pyr_6_path = resource_path_root / "refs" / "racs" / "fe_pyr_6.xyz"
37
+ fe_bipy_3_path = resource_path_root / "refs" / "racs" / "fe_bipy_3.xyz"
38
+ fe_pyr_6 = mol3D()
39
+ fe_pyr_6.readfromxyz(fe_pyr_6_path)
40
+ fe_bipy_3 = mol3D()
41
+ fe_bipy_3.readfromxyz(fe_bipy_3_path)
42
+
43
+ features_pyr = fe_pyr_6.get_features()
44
+ features_bipy = fe_bipy_3.get_features()
45
+
46
+ properties = ['chi', 'Z', 'T', 'S', 'I']
47
+ start_scopes = [('mc', 'all'), ('lc', 'ax'), ('lc', 'eq'),
48
+ ('D_mc', 'all'), ('D_lc', 'ax'), ('D_lc', 'eq')]
49
+
50
+ for start, scope in start_scopes:
51
+ for depth in range(2):
52
+ for prop in properties:
53
+ key = f'{start}-{prop}-{depth}-{scope}'
54
+ assert features_pyr[key] == features_bipy[key]
55
+
56
+
57
+ @pytest.mark.skip('Test fails because molSimplify averages the equatorial '
58
+ 'plane differently for bidentates')
59
+ def test_pyr_4_furan_2_vs_bipy_2_bifuran(resource_path_root):
60
+ fe_pyr_4_furan_2_path = resource_path_root / "refs" / "racs" / "fe_pyr_4_furan_2.xyz"
61
+ fe_bipy_2_bifuran_path = resource_path_root / "refs" / "racs" / "fe_bipy_2_bifuran.xyz"
62
+ fe_pyr_4_furan_2 = mol3D()
63
+ fe_pyr_4_furan_2.readfromxyz(fe_pyr_4_furan_2_path)
64
+ fe_bipy_2_bifuran = mol3D()
65
+ fe_bipy_2_bifuran.readfromxyz(fe_bipy_2_bifuran_path)
66
+
67
+ # Enforce the same graph orientation as in bidentates:
68
+ def get_ligand(lig_str):
69
+ lig_mol, _ = lig_load(lig_str)
70
+ lig = ligand(mol3D(), lig_mol.cat, lig_mol.denticity)
71
+ lig.mol = lig_mol
72
+ return lig
73
+ pyr = get_ligand('pyr')
74
+ furan = get_ligand('furan')
75
+ eq_ligand_list = [pyr, pyr, pyr, furan]
76
+ ax_ligand_list = [pyr, furan]
77
+ ligand_dict = {'ax_ligand_list': ax_ligand_list,
78
+ 'eq_ligand_list': eq_ligand_list,
79
+ 'ax_con_int_list': [h.mol.cat for h in ax_ligand_list],
80
+ 'eq_con_int_list': [h.mol.cat for h in eq_ligand_list]}
81
+ names, values = get_descriptor_vector(fe_pyr_4_furan_2, ligand_dict)
82
+ features_mono = dict(zip(names, values))
83
+ features_bi = fe_bipy_2_bifuran.get_features()
84
+
85
+ properties = ['Z', 'chi', 'T', 'I', 'S']
86
+ start_scopes = [('mc', 'all'), ('lc', 'ax'), ('lc', 'eq'),
87
+ ('D_mc', 'all'), ('D_lc', 'ax'), ('D_lc', 'eq')]
88
+
89
+ for start, scope in start_scopes:
90
+ for depth in range(2):
91
+ for prop in properties:
92
+ key = f'{start}-{prop}-{depth}-{scope}'
93
+ print(key, features_mono[key], features_bi[key])
94
+ assert features_mono[key] == features_bi[key]
95
+
96
+
97
+ def test_create_OHE():
98
+ ohe_names, ohe_values = create_OHE('Cr', '2')
99
+ assert ohe_names == ['ox2', 'ox3', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8']
100
+ assert ohe_values == [1, 0, 0, 1, 0, 0, 0, 0]
101
+
102
+ _, ohe_values = create_OHE('Cr', '3')
103
+ assert ohe_values == [0, 1, 1, 0, 0, 0, 0, 0]
104
+
105
+ _, ohe_values = create_OHE('Mn', '2')
106
+ assert ohe_values == [1, 0, 0, 0, 1, 0, 0, 0]
107
+
108
+ _, ohe_values = create_OHE('Mn', '3')
109
+ assert ohe_values == [0, 1, 0, 1, 0, 0, 0, 0]
110
+
111
+ _, ohe_values = create_OHE('Fe', '2')
112
+ assert ohe_values == [1, 0, 0, 0, 0, 1, 0, 0]
113
+
114
+ _, ohe_values = create_OHE('Fe', '3')
115
+ assert ohe_values == [0, 1, 0, 0, 1, 0, 0, 0]
116
+
117
+ _, ohe_values = create_OHE('Co', '2')
118
+ assert ohe_values == [1, 0, 0, 0, 0, 0, 1, 0]
119
+
120
+ _, ohe_values = create_OHE('Co', '3')
121
+ assert ohe_values == [0, 1, 0, 0, 0, 1, 0, 0]
122
+
123
+ _, ohe_values = create_OHE('Ni', '2')
124
+ assert ohe_values == [1, 0, 0, 0, 0, 0, 0, 1]