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_rmsd.py ADDED
@@ -0,0 +1,68 @@
1
+ import pytest
2
+ import numpy as np
3
+ from molSimplify.Classes.mol3D import mol3D
4
+ from molSimplify.Scripts.geometry import rotate_around_axis
5
+ from molSimplify.Scripts.rmsd import rigorous_rmsd, quaternion_rotate
6
+ from scipy.spatial.transform import Rotation
7
+
8
+
9
+ @pytest.mark.parametrize(
10
+ 'path1,path2,ref_hungarian,ref_none',
11
+ [['example_1_noff', 'example_1', 0.3991, 0.7749],
12
+ ['BUWGOQ', 'BUWGOQ_final', 2.43958, 0.49113],
13
+ ['BUWGOQ_noH', 'BUWGOQ_noH_final', 1.74814, 0.11826],
14
+ ['BUWGOQ', 'BUWGOQ_final_reordered', 2.43958, 3.02598]]
15
+ )
16
+ def test_rigorous_rmsd(resource_path_root, path1, path2, ref_hungarian, ref_none, atol=1e-3):
17
+ # Reference values calculated using https://pypi.org/project/rmsd/
18
+ # >>> calculate_rmsd --reorder path1.xyz path2.xyz
19
+ # >>> calculate_rmsd path1.xyz path2.xyz
20
+ xyz_1 = resource_path_root / "inputs" / "rmsd" / f"{path1}.xyz"
21
+ mol1 = mol3D()
22
+ mol1.readfromxyz(xyz_1)
23
+
24
+ xyz_2 = resource_path_root / "inputs" / "rmsd" / f"{path2}.xyz"
25
+ mol2 = mol3D()
26
+ mol2.readfromxyz(xyz_2)
27
+
28
+ r = rigorous_rmsd(mol1, mol2, reorder='hungarian')
29
+ assert abs(r - ref_hungarian) < atol
30
+
31
+ r = rigorous_rmsd(mol1, mol2, reorder='none')
32
+ assert abs(r - ref_none) < atol
33
+
34
+
35
+ @pytest.mark.skip
36
+ def test_methane_rotation(atol=1e-3):
37
+ """This test case is intended to show the problem with our current RMSD implementation"""
38
+ # XYZ data copied from
39
+ # https://github.com/OpenChemistry/avogadrodata/blob/master/data/methane.xyz
40
+ d = 1.02672
41
+ theta = 110 * np.pi / 180
42
+ xyz_string = (
43
+ "C 0.00000 0.00000 0.0000\n"
44
+ "H 0.00000 0.00000 1.08900\n"
45
+ "H 1.02672 0.00000 -0.36300\n"
46
+ f"H {d * np.cos(theta):8.5f} {d * np.sin(theta):8.5f} -0.36300\n"
47
+ f"H {d * np.cos(theta):8.5f} {-d * np.sin(theta):8.5f} -0.36300\n"
48
+ )
49
+ mol1 = mol3D()
50
+ mol1.readfromstring(xyz_string)
51
+
52
+ mol2 = mol3D()
53
+ mol2.readfromstring(xyz_string)
54
+ # rotate 180 degrees around the z axis
55
+ mol2 = rotate_around_axis(mol2, [0.0, 0.0, 0.0], [0.0, 0.0, 1.0], 180)
56
+ assert rigorous_rmsd(mol1, mol2, reorder='none') < atol
57
+
58
+ assert rigorous_rmsd(mol1, mol2, reorder='hungarian') < atol
59
+
60
+
61
+ def test_quaternion_rotate(atol=1e-3):
62
+ rot_mat = Rotation.from_rotvec(np.array([1., 2., 3.])).as_matrix()
63
+ x = np.array([[1.2, 0., 0.],
64
+ [0., 0., 0.],
65
+ [0.5, 0.9, 0.]])
66
+ y = x @ rot_mat
67
+
68
+ np.testing.assert_allclose(quaternion_rotate(x, y), rot_mat, atol=atol)
@@ -0,0 +1,198 @@
1
+ import pytest
2
+ import numpy as np
3
+ from argparse import Namespace
4
+ from molSimplify.Classes import atom3D, run_diag
5
+ from molSimplify.Scripts.io import loaddata, lig_load, getlicores
6
+ from molSimplify.Scripts.structgen import (smartreorderligs,
7
+ getbackbcombsall,
8
+ getnupdateb,
9
+ get_MLdist_database,
10
+ get_MLdist,
11
+ init_template,
12
+ init_ANN
13
+ )
14
+
15
+
16
+ def test_smartreorderligs():
17
+ """Expected behavior: First order by denticity, then by number of atom"""
18
+ indices = smartreorderligs(['water']*6, [1]*6)
19
+ assert indices == [0, 1, 2, 3, 4, 5]
20
+
21
+ indices = smartreorderligs(['water', 'ammonia', 'water', 'water',
22
+ 'ammonia', 'water'], [1]*6)
23
+ assert indices == [0, 2, 3, 5, 1, 4]
24
+
25
+ indices = smartreorderligs(['ammonia']*3 + ['water']*3, [1]*6)
26
+ assert indices == [3, 4, 5, 0, 1, 2]
27
+
28
+ # 5 monodentates of different sizes
29
+ indices = smartreorderligs(['furan', 'ammonia', 'pyridine', 'carbonyl',
30
+ 'water'], [1]*5)
31
+ assert indices == [3, 4, 1, 0, 2]
32
+
33
+ # Test bidentates
34
+ indices = smartreorderligs(['acac', 'acac', 'en'], [2, 2, 2])
35
+ assert indices == [2, 0, 1]
36
+
37
+ indices = smartreorderligs(['en', 'en', 'acac'], [2, 2, 2])
38
+ assert indices == [0, 1, 2]
39
+
40
+ indices = smartreorderligs(['water', 'carbonyl', 'acac'], [1, 1, 2])
41
+ assert indices == [2, 1, 0]
42
+
43
+ # Tetradentate
44
+ indices = smartreorderligs(['water', 'porphirine', 'misc'], [1, 4, 1])
45
+ assert indices == [1, 0, 2]
46
+
47
+
48
+ def test_get_MLdist_database():
49
+ water, _ = lig_load('water')
50
+ ammonia, _ = lig_load('ammonia')
51
+ connecting_atom = 0
52
+ MLbonds = loaddata('/Data/ML.dat')
53
+
54
+ dist, exact_match = get_MLdist_database(
55
+ atom3D(Sym='Fe'), '2', '5', water, connecting_atom, 'water', MLbonds)
56
+ assert exact_match
57
+ assert dist == 2.12
58
+
59
+ dist, exact_match = get_MLdist_database(
60
+ atom3D(Sym='Co'), 'III', '5', ammonia,
61
+ connecting_atom, 'ammonia', MLbonds)
62
+ assert exact_match
63
+ assert dist == 2.17
64
+
65
+ # Test covariant radii fall back if not in database:
66
+ dist, exact_match = get_MLdist_database(
67
+ atom3D(Sym='Fe'), '2', '5', water, connecting_atom, 'water', {})
68
+
69
+ assert exact_match is False
70
+ assert dist == 1.98
71
+
72
+ dist, exact_match = get_MLdist_database(
73
+ atom3D(Sym='Cr'), 'II', '5', water, connecting_atom, 'water', {})
74
+
75
+ assert exact_match is False
76
+ assert dist == 2.0
77
+
78
+
79
+ def test_get_MLdist():
80
+ water, _ = lig_load('water')
81
+ connecting_atom = 0
82
+ MLbonds = loaddata('/Data/ML.dat')
83
+ this_diag = run_diag()
84
+
85
+ # Test user defined BL (take second item from supplied list)
86
+ dist = get_MLdist(atom3D(Sym='Fe'), '2', '5', water, connecting_atom,
87
+ 'water', ['0', '0', '1.2', '0', '0', '0'], 2, False, 0.0,
88
+ this_diag, MLbonds)
89
+ assert dist == 1.2
90
+
91
+ # Test 'c' in bond list
92
+ dist = get_MLdist(atom3D(Sym='Fe'), '2', '5', water, connecting_atom,
93
+ 'water', ['0', '0', 'c', '0', '0', '0'], 2, False, 0.0,
94
+ this_diag, MLbonds)
95
+ assert dist == 1.98
96
+
97
+ # Test DB lookup
98
+ dist = get_MLdist(atom3D(Sym='Fe'), '2', '5', water, connecting_atom,
99
+ 'water', ['False']*6, 2, False, 0.0, this_diag, MLbonds)
100
+ assert this_diag.dict_bondl
101
+ assert dist == 2.12
102
+
103
+ # Test covalent fall back
104
+ dist = get_MLdist(atom3D(Sym='Fe'), '2', '5', water, connecting_atom,
105
+ 'water', ['False']*6, 2, False, 0.0, this_diag, {})
106
+ assert this_diag.dict_bondl
107
+ assert dist == 1.98
108
+
109
+ # No DB match: use ANN result
110
+ dist = get_MLdist(atom3D(Sym='Fe'), '2', '5', water, connecting_atom,
111
+ 'water', ['False']*6, 2, True, 3.14, this_diag, {})
112
+ assert dist == 3.14
113
+
114
+
115
+ @pytest.mark.parametrize(["geometry", "coordination"], [
116
+ ('no', 1),
117
+ ('tpl', 3),
118
+ ('sqp', 4),
119
+ ('thd', 4),
120
+ ('spy', 5),
121
+ ('tbp', 5),
122
+ ('oct', 6),
123
+ ('tpr', 6),
124
+ ('pbp', 7),
125
+ ('sqap', 8),
126
+ ('tdhd', 8),
127
+ ])
128
+ def test_init_template(geometry, coordination):
129
+ args = Namespace(geometry=geometry, coord=coordination, ccatoms=None, ligloc=True,
130
+ pangles=False, distort='0', core='Fe', calccharge=True,
131
+ oxstate='II')
132
+ (m3D, core3D, geom, backbatoms, coord,
133
+ corerefatoms) = init_template(args, cpoints_required=6)
134
+
135
+ assert [a.sym for a in m3D.getAtoms()] == ['Fe'] + coordination * ['X']
136
+ # Ugly workaround because atom3D can not be compared directly (the __eq__ method
137
+ # is commented out because of protein3D incompatiblities)
138
+ assert [a.__dict__ for a in core3D.getAtoms()] == [atom3D('Fe').__dict__]
139
+ assert backbatoms == getbackbcombsall(list(range(1, 1 + coordination)))
140
+ assert geom == geometry
141
+ assert coord == coordination
142
+ assert [a.__dict__ for a in corerefatoms.getAtoms()] == [atom3D('Fe').__dict__ for _ in range(coordination)]
143
+
144
+
145
+ def test_init_ANN():
146
+ licores = getlicores()
147
+
148
+ # Test skipping:
149
+ args = Namespace(skipANN=True)
150
+ (ANN_flag, ANN_bondl, _,
151
+ ANN_attributes, catalysis_flag) = init_ANN(
152
+ args, ligands=['water']*6, occs=[1]*6, dents=[1]*6,
153
+ batslist=[[1], [2], [3], [4], [5], [6]], tcats=[[0]] * 6, licores=licores)
154
+
155
+ assert ANN_flag is False
156
+ assert ANN_bondl == [False] * 6
157
+ assert ANN_attributes == dict()
158
+ assert catalysis_flag is False
159
+
160
+ # Test oldANN
161
+ args = Namespace(skipANN=False, oldANN=True, core='Fe', decoration=False,
162
+ geometry='oct', oxstate='2', spin='5', debug=False,
163
+ exchange=0.2)
164
+ (ANN_flag, ANN_bondl, _,
165
+ ANN_attributes, catalysis_flag) = init_ANN(
166
+ args, ligands=['water']*6, occs=[1]*6, dents=[1]*6,
167
+ batslist=[[1], [2], [3], [4], [5], [6]], tcats=[[0]] * 6, licores=licores)
168
+
169
+ assert ANN_flag
170
+ assert ANN_bondl == ANN_attributes['ANN_bondl']
171
+ np.testing.assert_allclose(ANN_bondl, [2.0757] * 6, atol=1e-4)
172
+ assert catalysis_flag is False
173
+
174
+ # Test default ANN
175
+ args = Namespace(skipANN=False, oldANN=False, core='Fe', decoration=False,
176
+ geometry='oct', oxstate='2', spin='5', debug=False,
177
+ exchange=0.2)
178
+ (ANN_flag, ANN_bondl, _,
179
+ ANN_attributes, catalysis_flag) = init_ANN(
180
+ args, ligands=['water']*6, occs=[1]*6, dents=[1]*6,
181
+ batslist=[[1], [2], [3], [4], [5], [6]], tcats=[[0]] * 6, licores=licores)
182
+
183
+ assert ANN_flag
184
+ assert ANN_bondl == ANN_attributes['ANN_bondl']
185
+ np.testing.assert_allclose(ANN_bondl, [2.1664] * 4 + [2.1349, 2.1218], atol=1e-4)
186
+ assert catalysis_flag is False
187
+
188
+
189
+ def test_getnupdateb():
190
+ backbone_atoms = [[5, 4, 6], [4, 5], [4, 6], [4], [5], [6]]
191
+ batoms, backbone_atoms_modified = getnupdateb(backbone_atoms, 3)
192
+ assert batoms == [5, 4, 6]
193
+ assert backbone_atoms_modified == []
194
+
195
+ backbone_atoms = [[5, 4, 6], [4, 5], [4, 6], [4], [5], [6]]
196
+ batoms, backbone_atoms_modified = getnupdateb(backbone_atoms, 2)
197
+ assert batoms == [4, 5]
198
+ assert backbone_atoms_modified == [[6]]
@@ -0,0 +1,29 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_example_1(tmpdir, resource_path_root):
5
+ testName = "tetrahedral_1"
6
+ threshMLBL = 0.1 # Change this value for your need
7
+ threshLG = 0.1 # Change this value for your need
8
+ threshOG = 2.0 # Change this value for you need
9
+ [passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtestNoFF(
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
+
17
+
18
+ def test_example_2(tmpdir, resource_path_root):
19
+ testName = "tetrahedral_2"
20
+ threshMLBL = 0.1 # Change this value for your need
21
+ threshLG = 0.1 # Change this value for your need
22
+ threshOG = 2.0 # Change this value for you need
23
+ [passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtestNoFF(
24
+ tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
25
+ assert passNumAtoms
26
+ assert passMLBL
27
+ assert passLG
28
+ assert passOG
29
+ assert pass_report
@@ -0,0 +1,16 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_tutorial_10_part_one(tmpdir, resource_path_root):
5
+ testName = "tutorial_10_part_one"
6
+ threshMLBL = 0.1
7
+ threshLG = 2.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
+ # Not checking for passMLBL because there are atoms very close to the cutoff
13
+ # assert passMLBL
14
+ assert passLG
15
+ assert passOG
16
+ assert pass_report
@@ -0,0 +1,15 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_tutorial_10_part_two(tmpdir, resource_path_root):
5
+ testName = "tutorial_10_part_two"
6
+ threshMLBL = 0.1
7
+ threshLG = 7.0
8
+ threshOG = 7.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,11 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_tutorial_2(tmpdir, resource_path_root):
5
+ testName = "tutorial_2"
6
+ threshOG = 2.0
7
+ [passNumAtoms, passOG] = hp.runtest_slab(
8
+ tmpdir, resource_path_root, testName, threshOG,
9
+ extra_files=['pd_test_tutorial_2.cif'])
10
+ assert passNumAtoms
11
+ assert passOG
@@ -0,0 +1,15 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_tutorial_3(tmpdir, resource_path_root):
5
+ testName = "tutorial_3"
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,57 @@
1
+ import shutil
2
+ from molSimplify.Classes.globalvars import globalvars
3
+ from molSimplify.Scripts.generator import startgen
4
+ from helperFuncs import parse4test, working_directory
5
+
6
+
7
+ def run_db_search(tmpdir, resource_path_root, name):
8
+ # Set the path for the data base file:
9
+ globs = globalvars()
10
+ globs.chemdbdir = str(resource_path_root / "inputs")
11
+
12
+ infile = resource_path_root / "inputs" / name
13
+ newinfile, _ = parse4test(infile, tmpdir)
14
+ args = ['main.py', '-i', newinfile]
15
+
16
+ with working_directory(tmpdir):
17
+ startgen(args, False, False)
18
+
19
+
20
+ def test_tutorial_4_query(tmpdir, resource_path_root):
21
+ run_db_search(tmpdir, resource_path_root, "tutorial_4_query.in")
22
+
23
+ # Compare the generated output file to the reference file
24
+ with open(f"{tmpdir}/simres.smi", "r") as f:
25
+ output = f.readlines()
26
+ with open(resource_path_root / "refs" / "tutorial_4" / "simres.smi") as f:
27
+ reference = f.readlines()
28
+
29
+ assert output == reference
30
+
31
+
32
+ def test_tutorial_4_dissim(tmpdir, resource_path_root):
33
+ # Copy the results from the query into the working directory
34
+ shutil.copyfile(resource_path_root / "refs" / "tutorial_4" / "simres.smi",
35
+ tmpdir / "simres.smi")
36
+
37
+ run_db_search(tmpdir, resource_path_root, "tutorial_4_dissim.in")
38
+
39
+ # Compare the generated output file to the reference file
40
+ with open(f"{tmpdir}/dissimres.smi", "r") as f:
41
+ output = f.readlines()
42
+ with open(resource_path_root / "refs" / "tutorial_4" / "dissimres.smi") as f:
43
+ reference = f.readlines()
44
+
45
+ assert output == reference
46
+
47
+
48
+ def test_tutorial_4_human(tmpdir, resource_path_root):
49
+ run_db_search(tmpdir, resource_path_root, "tutorial_4_human.in")
50
+
51
+ # Compare the generated output file to the reference file
52
+ with open(f"{tmpdir}/simres.smi", "r") as f:
53
+ output = f.readlines()
54
+ with open(resource_path_root / "refs" / "tutorial_4" / "simres_human.smi") as f:
55
+ reference = f.readlines()
56
+
57
+ assert output == reference
@@ -0,0 +1,10 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_tutorial_6(tmpdir, resource_path_root):
5
+ testName = "tutorial_6"
6
+ threshOG = 2.0
7
+ [passNumAtoms, passOG] = hp.runtest_molecule_on_slab(
8
+ tmpdir, resource_path_root, testName, threshOG)
9
+ assert passNumAtoms
10
+ assert passOG
@@ -0,0 +1,29 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_tutorial_8_part_one(tmpdir, resource_path_root):
5
+ testName = "tutorial_8_part_one"
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
+
17
+
18
+ def test_tutorial_8_part_two(tmpdir, resource_path_root):
19
+ testName = "tutorial_8_part_two"
20
+ threshMLBL = 0.1
21
+ threshLG = 1.0
22
+ threshOG = 2.0
23
+ [passNumAtoms, passMLBL, passLG, passOG, pass_report, pass_qcin] = hp.runtest(
24
+ tmpdir, resource_path_root, testName, threshMLBL, threshLG, threshOG)
25
+ assert passNumAtoms
26
+ assert passMLBL
27
+ assert passLG
28
+ assert passOG
29
+ assert pass_report
@@ -0,0 +1,15 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_tutorial_09_part_one(tmpdir, resource_path_root):
5
+ testName = "tutorial_09_part_one"
6
+ threshMLBL = 0.1
7
+ threshLG = 2.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_tutorial_09_part_two(tmpdir, resource_path_root):
5
+ testName = "tutorial_09_part_two"
6
+ threshMLBL = 0.1
7
+ threshLG = 2.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,6 @@
1
+ import helperFuncs as hp
2
+
3
+
4
+ def test_tutorial_qm9_part_one(tmpdir, resource_path_root):
5
+ testName = "tutorial_qm9_part_one"
6
+ hp.runtest_num_atoms_in_xyz(tmpdir, resource_path_root, testName)
@@ -0,0 +1,85 @@
1
+ import pickle
2
+ from molSimplify.Classes.mol3D import mol3D
3
+ from molSimplify.Classes.atom3D import atom3D
4
+ from molSimplify.Classes.ligand import ligand
5
+ from molSimplify.Scripts.io import lig_load
6
+ from molSimplify.Informatics.RACassemble import assemble_connectivity_from_parts
7
+ from molSimplify.Informatics.lacRACAssemble import get_descriptor_vector
8
+
9
+
10
+ def get_ligand(lig_str):
11
+ lig_mol, _ = lig_load(lig_str)
12
+ lig = ligand(mol3D(), lig_mol.cat, lig_mol.denticity)
13
+ lig.mol = lig_mol
14
+ return lig
15
+
16
+
17
+ def generate_ligand_dict(eq_ligands, ax_ligands):
18
+ eq_ligand_list = []
19
+ for lig_str in eq_ligands:
20
+ eq_ligand_list.append(get_ligand(lig_str))
21
+
22
+ ax_ligand_list = []
23
+ for lig_str in ax_ligands:
24
+ ax_ligand_list.append(get_ligand(lig_str))
25
+
26
+ ligand_dict = {'eq_ligand_list': eq_ligand_list,
27
+ 'ax_ligand_list': ax_ligand_list,
28
+ 'eq_con_int_list': [h.mol.cat for h in eq_ligand_list],
29
+ 'ax_con_int_list': [h.mol.cat for h in ax_ligand_list]
30
+ }
31
+ return ligand_dict
32
+
33
+
34
+ def assemble_mol(metal_str, eq_ligands, ax_ligands):
35
+ metal = mol3D()
36
+ metal.addAtom(atom3D(Sym=metal_str))
37
+
38
+ ligand_dict = generate_ligand_dict(eq_ligands, ax_ligands)
39
+
40
+ mol = assemble_connectivity_from_parts(metal, ligand_dict)
41
+ print(f'assembled mol: {mol.make_formula(latex=False)}')
42
+ return mol
43
+
44
+
45
+ def features_from_mol(mol, ligand_dict):
46
+ names, racs = get_descriptor_vector(mol, custom_ligand_dict=ligand_dict)
47
+ features = dict(zip(names, racs))
48
+ return features
49
+
50
+
51
+ def generate_features(metal_str, eq_ligands, ax_ligands):
52
+ ligand_dict = generate_ligand_dict(eq_ligands, ax_ligands)
53
+ mol = assemble_mol(metal_str, eq_ligands, ax_ligands)
54
+ return features_from_mol(mol, ligand_dict)
55
+
56
+
57
+ def main():
58
+ features = generate_features('Fe', ['carbonyl']*4, ['carbonyl']*2)
59
+ with open('racs_Fe_carbonyl_6.pickle', 'wb') as f:
60
+ pickle.dump(features, f)
61
+
62
+ features = generate_features('Mn', ['furan', 'water', 'ammonia', 'furan'],
63
+ ['water', 'ammonia'])
64
+ with open('racs_Mn_furan_water_ammonia_furan_water_ammonia.pickle', 'wb') as f:
65
+ pickle.dump(features, f)
66
+
67
+ features = generate_features('Co', ['acac', 'en'], ['water', 'hydrogensulfide'])
68
+ with open('racs_Co_acac_en_water_hydrogensulfide.pickle', 'wb') as f:
69
+ pickle.dump(features, f)
70
+
71
+ acac = get_ligand('acac')
72
+ bipy = get_ligand('bipy')
73
+ ligand_dict = {
74
+ 'ax_ligand_list': [acac, acac],
75
+ 'eq_ligand_list': [acac, acac, bipy],
76
+ 'ax_con_int_list': [[0], [0]],
77
+ 'eq_con_int_list': [[5], [5], [0, 1]]}
78
+ mol = assemble_mol('Cr', ['acac', 'bipy'], ['acac'])
79
+ features = features_from_mol(mol, ligand_dict)
80
+ with open('racs_Cr_acac_acac_bipy.pickle', 'wb') as f:
81
+ pickle.dump(features, f)
82
+
83
+
84
+ if __name__ == '__main__':
85
+ main()