MultiOptPy 1.20.4__tar.gz → 1.20.6__tar.gz

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 (261) hide show
  1. {multioptpy-1.20.4 → multioptpy-1.20.6/MultiOptPy.egg-info}/PKG-INFO +20 -20
  2. {multioptpy-1.20.4 → multioptpy-1.20.6}/MultiOptPy.egg-info/SOURCES.txt +2 -0
  3. multioptpy-1.20.6/MultiOptPy.egg-info/requires.txt +9 -0
  4. {multioptpy-1.20.4/MultiOptPy.egg-info → multioptpy-1.20.6}/PKG-INFO +20 -20
  5. {multioptpy-1.20.4 → multioptpy-1.20.6}/README.md +13 -13
  6. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_calculation_tools.py +21 -8
  7. multioptpy-1.20.6/multioptpy/Calculator/ase_tools/gxtb_dev.py +41 -0
  8. multioptpy-1.20.6/multioptpy/Calculator/ase_tools/orca.py +236 -0
  9. multioptpy-1.20.6/multioptpy/MD/thermostat.py +298 -0
  10. multioptpy-1.20.6/multioptpy/ModelHessian/fischerd3.py +305 -0
  11. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/rsirfo.py +112 -4
  12. multioptpy-1.20.6/multioptpy/Optimizer/rsprfo.py +1363 -0
  13. multioptpy-1.20.6/multioptpy/OtherMethod/spring_pair_method.py +314 -0
  14. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/entrypoints.py +406 -16
  15. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ieip.py +14 -2
  16. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/interface.py +3 -1
  17. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/moleculardynamics.py +21 -13
  18. {multioptpy-1.20.4 → multioptpy-1.20.6}/pyproject.toml +8 -7
  19. multioptpy-1.20.4/MultiOptPy.egg-info/requires.txt +0 -9
  20. multioptpy-1.20.4/multioptpy/Calculator/ase_tools/orca.py +0 -22
  21. multioptpy-1.20.4/multioptpy/MD/thermostat.py +0 -185
  22. multioptpy-1.20.4/multioptpy/ModelHessian/fischerd3.py +0 -360
  23. multioptpy-1.20.4/multioptpy/Optimizer/rsprfo.py +0 -1056
  24. {multioptpy-1.20.4 → multioptpy-1.20.6}/LICENSE +0 -0
  25. {multioptpy-1.20.4 → multioptpy-1.20.6}/MultiOptPy.egg-info/dependency_links.txt +0 -0
  26. {multioptpy-1.20.4 → multioptpy-1.20.6}/MultiOptPy.egg-info/entry_points.txt +0 -0
  27. {multioptpy-1.20.4 → multioptpy-1.20.6}/MultiOptPy.egg-info/top_level.txt +0 -0
  28. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/__init__.py +0 -0
  29. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/__init__.py +0 -0
  30. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/fairchem.py +0 -0
  31. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/gamess.py +0 -0
  32. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/gaussian.py +0 -0
  33. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/mace.py +0 -0
  34. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/mopac.py +0 -0
  35. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/nwchem.py +0 -0
  36. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/pygfn0.py +0 -0
  37. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/dxtb_calculation_tools.py +0 -0
  38. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/emt_calculation_tools.py +0 -0
  39. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/gpaw_calculation_tools.py +0 -0
  40. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/lj_calculation_tools.py +0 -0
  41. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/psi4_calculation_tools.py +0 -0
  42. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/pwscf_calculation_tools.py +0 -0
  43. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/pyscf_calculation_tools.py +0 -0
  44. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/sqm1_calculation_tools.py +0 -0
  45. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/sqm2_calculation_tools.py +0 -0
  46. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/tblite_calculation_tools.py +0 -0
  47. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/tersoff_calculation_tools.py +0 -0
  48. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Constraint/__init__.py +0 -0
  49. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Constraint/constraint_condition.py +0 -0
  50. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Coordinate/__init__.py +0 -0
  51. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Coordinate/polar_coordinate.py +0 -0
  52. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Coordinate/redundant_coordinate.py +0 -0
  53. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/__init__.py +0 -0
  54. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/converge_criteria.py +0 -0
  55. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/dvv.py +0 -0
  56. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/euler.py +0 -0
  57. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/hpc.py +0 -0
  58. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/lqa.py +0 -0
  59. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/modekill.py +0 -0
  60. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/rk4.py +0 -0
  61. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/__init__.py +0 -0
  62. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/adaptive_interpolation.py +0 -0
  63. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/binomial_interpolation.py +0 -0
  64. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/geodesic_interpolation.py +0 -0
  65. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/interpolation.py +0 -0
  66. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/linear_interpolation.py +0 -0
  67. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/savitzky_golay_interpolation.py +0 -0
  68. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/spline_interpolation.py +0 -0
  69. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MD/__init__.py +0 -0
  70. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/__init__.py +0 -0
  71. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_bneb_force.py +0 -0
  72. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_dmf_force.py +0 -0
  73. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_dneb_force.py +0 -0
  74. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_ewbneb_force.py +0 -0
  75. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_gpneb_force.py +0 -0
  76. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_lup_force.py +0 -0
  77. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_neb_force.py +0 -0
  78. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_nesb_force.py +0 -0
  79. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_om_force.py +0 -0
  80. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_qsm_force.py +0 -0
  81. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_qsmv2_force.py +0 -0
  82. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/__init__.py +0 -0
  83. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/avoiding_model_function.py +0 -0
  84. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/binary_image_ts_search_model_function.py +0 -0
  85. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/conical_model_function.py +0 -0
  86. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/opt_meci.py +0 -0
  87. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/opt_mesx.py +0 -0
  88. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/opt_mesx_2.py +0 -0
  89. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/seam_model_function.py +0 -0
  90. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/__init__.py +0 -0
  91. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/approx_hessian.py +0 -0
  92. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/calc_params.py +0 -0
  93. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/fischer.py +0 -0
  94. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/fischerd4.py +0 -0
  95. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/gfn0xtb.py +0 -0
  96. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/gfnff.py +0 -0
  97. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/lindh.py +0 -0
  98. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/lindh2007d2.py +0 -0
  99. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/lindh2007d3.py +0 -0
  100. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/lindh2007d4.py +0 -0
  101. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/morse.py +0 -0
  102. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/schlegel.py +0 -0
  103. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/schlegeld3.py +0 -0
  104. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/schlegeld4.py +0 -0
  105. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/shortrange.py +0 -0
  106. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/swartd2.py +0 -0
  107. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/swartd3.py +0 -0
  108. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/swartd4.py +0 -0
  109. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/tshess.py +0 -0
  110. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/QHAdam.py +0 -0
  111. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/__init__.py +0 -0
  112. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/abc_fire.py +0 -0
  113. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adabelief.py +0 -0
  114. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adabound.py +0 -0
  115. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adadelta.py +0 -0
  116. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adaderivative.py +0 -0
  117. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adadiff.py +0 -0
  118. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adafactor.py +0 -0
  119. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adam.py +0 -0
  120. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adamax.py +0 -0
  121. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adamod.py +0 -0
  122. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adamw.py +0 -0
  123. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adiis.py +0 -0
  124. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/afire_neb.py +0 -0
  125. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/block_hessian_update.py +0 -0
  126. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/c2diis.py +0 -0
  127. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/component_wise_scaling.py +0 -0
  128. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/conjugate_gradient.py +0 -0
  129. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/conjugate_gradient_neb.py +0 -0
  130. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/coordinate_locking.py +0 -0
  131. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/crsirfo.py +0 -0
  132. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/dic_rsirfo.py +0 -0
  133. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/ediis.py +0 -0
  134. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/eve.py +0 -0
  135. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/fastadabelief.py +0 -0
  136. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/fire.py +0 -0
  137. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/fire2.py +0 -0
  138. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/fire_neb.py +0 -0
  139. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gan_step.py +0 -0
  140. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gdiis.py +0 -0
  141. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gediis.py +0 -0
  142. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/geodesic_step.py +0 -0
  143. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gpmin.py +0 -0
  144. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gpr_step.py +0 -0
  145. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gradientdescent.py +0 -0
  146. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gradientdescent_neb.py +0 -0
  147. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/hessian_update.py +0 -0
  148. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/hybrid_rfo.py +0 -0
  149. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/kdiis.py +0 -0
  150. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/lars.py +0 -0
  151. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/lbfgs.py +0 -0
  152. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/lbfgs_neb.py +0 -0
  153. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/linesearch.py +0 -0
  154. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/lookahead.py +0 -0
  155. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/mf_rsirfo.py +0 -0
  156. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/mode_following.py +0 -0
  157. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/nadam.py +0 -0
  158. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/newton.py +0 -0
  159. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/prodigy.py +0 -0
  160. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/purtubation.py +0 -0
  161. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/quickmin_neb.py +0 -0
  162. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/radam.py +0 -0
  163. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/rfo_neb.py +0 -0
  164. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/ric_rfo.py +0 -0
  165. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/rl_step.py +0 -0
  166. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/rmspropgrave.py +0 -0
  167. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/sadam.py +0 -0
  168. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/samsgrad.py +0 -0
  169. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/tr_lbfgs.py +0 -0
  170. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/trim.py +0 -0
  171. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/trust_radius.py +0 -0
  172. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/trust_radius_neb.py +0 -0
  173. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/yogi.py +0 -0
  174. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/__init__.py +0 -0
  175. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/addf.py +0 -0
  176. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/dimer.py +0 -0
  177. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/elastic_image_pair.py +0 -0
  178. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/modelfunction.py +0 -0
  179. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/newton_traj.py +0 -0
  180. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/twopshs.py +0 -0
  181. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/__init__.py +0 -0
  182. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/calc_irc_curvature.py +0 -0
  183. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/cmds_analysis.py +0 -0
  184. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/koopman_analysis.py +0 -0
  185. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/pca_analysis.py +0 -0
  186. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/__init__.py +0 -0
  187. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/atomic_mass.py +0 -0
  188. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/atomic_number.py +0 -0
  189. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/covalent_radii.py +0 -0
  190. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/d2.py +0 -0
  191. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/d3.py +0 -0
  192. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/d4.py +0 -0
  193. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/dreiding.py +0 -0
  194. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/gfn0xtb_param.py +0 -0
  195. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/gfnff_param.py +0 -0
  196. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/gnb.py +0 -0
  197. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/parameter.py +0 -0
  198. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/uff.py +0 -0
  199. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/unit_values.py +0 -0
  200. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/AFIR_potential.py +0 -0
  201. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/LJ_repulsive_potential.py +0 -0
  202. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/__init__.py +0 -0
  203. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/anharmonic_keep_potential.py +0 -0
  204. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/asym_elllipsoidal_potential.py +0 -0
  205. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/electrostatic_potential.py +0 -0
  206. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/flux_potential.py +0 -0
  207. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/gaussian_potential.py +0 -0
  208. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/idpp.py +0 -0
  209. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/keep_angle_potential.py +0 -0
  210. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/keep_dihedral_angle_potential.py +0 -0
  211. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/keep_outofplain_angle_potential.py +0 -0
  212. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/keep_potential.py +0 -0
  213. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/mechano_force_potential.py +0 -0
  214. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/nanoreactor_potential.py +0 -0
  215. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/potential.py +0 -0
  216. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/spacer_model_potential.py +0 -0
  217. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/switching_potential.py +0 -0
  218. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/universal_potential.py +0 -0
  219. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/value_range_potential.py +0 -0
  220. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/void_point_potential.py +0 -0
  221. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/__init__.py +0 -0
  222. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm1/__init__.py +0 -0
  223. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm1/sqm1_core.py +0 -0
  224. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/__init__.py +0 -0
  225. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/calc_tools.py +0 -0
  226. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_basis.py +0 -0
  227. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_bond.py +0 -0
  228. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_core.py +0 -0
  229. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_data.py +0 -0
  230. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_disp.py +0 -0
  231. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_eeq.py +0 -0
  232. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_overlapint.py +0 -0
  233. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_qm.py +0 -0
  234. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_rep.py +0 -0
  235. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_srb.py +0 -0
  236. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Thermo/__init__.py +0 -0
  237. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Thermo/normal_mode_analyzer.py +0 -0
  238. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/__init__.py +0 -0
  239. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/bond_connectivity.py +0 -0
  240. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/calc_tools.py +0 -0
  241. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/oniom.py +0 -0
  242. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/pbc.py +0 -0
  243. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/riemann_curvature.py +0 -0
  244. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/symmetry_analyzer.py +0 -0
  245. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Visualization/__init__.py +0 -0
  246. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Visualization/visualization.py +0 -0
  247. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/WFAnalyzer/MO_analysis.py +0 -0
  248. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/WFAnalyzer/__init__.py +0 -0
  249. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/__init__.py +0 -0
  250. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/autots.py +0 -0
  251. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/ieip_wrapper.py +0 -0
  252. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/md_wrapper.py +0 -0
  253. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/neb_wrapper.py +0 -0
  254. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/optimize_wrapper.py +0 -0
  255. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/__init__.py +0 -0
  256. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/fileio.py +0 -0
  257. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/irc.py +0 -0
  258. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/neb.py +0 -0
  259. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/optimization.py +0 -0
  260. {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/optimizer.py +0 -0
  261. {multioptpy-1.20.4 → multioptpy-1.20.6}/setup.cfg +0 -0
@@ -1,21 +1,21 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MultiOptPy
3
- Version: 1.20.4
3
+ Version: 1.20.6
4
4
  Summary: Multifunctional geometry optimization tools for quantum chemical calculations.
5
5
  Author-email: ss0832 <highlighty876@gmail.com>
6
- License: GPLv3
6
+ License-Expression: GPL-3.0-or-later
7
7
  Requires-Python: >=3.12
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
10
- Requires-Dist: numpy~=2.2.0
10
+ Requires-Dist: numpy>=2.2.0
11
11
  Requires-Dist: scipy>=1.13.0
12
- Requires-Dist: matplotlib~=3.10.0
12
+ Requires-Dist: matplotlib>=3.10.0
13
13
  Requires-Dist: torch~=2.6.0
14
- Requires-Dist: pyscf~=2.9.0
15
- Requires-Dist: tblite~=0.4.0
14
+ Requires-Dist: pyscf>=2.9.0
15
+ Requires-Dist: tblite>=0.4.0
16
16
  Requires-Dist: ase~=3.26.0
17
17
  Requires-Dist: fairchem-core~=2.7.0
18
- Requires-Dist: sympy~=1.13.0
18
+ Requires-Dist: sympy>=1.13.0
19
19
  Dynamic: license-file
20
20
 
21
21
  # MultiOptPy
@@ -29,7 +29,7 @@ Dynamic: license-file
29
29
  [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/ss0832)
30
30
 
31
31
  [![PyPI Downloads](https://static.pepy.tech/personalized-badge/multioptpy?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/multioptpy)
32
- [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17970774.svg)](https://doi.org/10.5281/zenodo.17970774)
32
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17973395.svg)](https://doi.org/10.5281/zenodo.17973395)
33
33
 
34
34
  If this tool helped your studies, education, or saved your time, I'd appreciate a coffee!
35
35
  Your support serves as a great encouragement for this personal project and fuels my next journey.
@@ -80,9 +80,9 @@ conda create -n test_mop python=3.12.7
80
80
  conda activate test_mop
81
81
 
82
82
  ## 3. Download and install MultiOptPy:
83
- wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.3.zip
84
- unzip v1.20.3.zip
85
- cd MultiOptPy-1.20.3
83
+ wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.5.zip
84
+ unzip v1.20.5.zip
85
+ cd MultiOptPy-1.20.5
86
86
  pip install -r requirements.txt
87
87
 
88
88
  ## 4. Copy the test configuration file and run the AutoTS workflow:
@@ -107,10 +107,10 @@ python run_autots.py aldol_rxn.xyz -cfg config_autots_run_xtb_test.json
107
107
  # Installation via pip (Linux)
108
108
  conda create -n <env-name> python=3.12 pip
109
109
  conda activate <env-name>
110
- pip install git+https://github.com/ss0832/MultiOptPy.git@v1.20.3
111
- wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.3.zip
112
- unzip v1.20.3.zip
113
- cd MultiOptPy-1.20.3
110
+ pip install git+https://github.com/ss0832/MultiOptPy.git@v1.20.5
111
+ wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.5.zip
112
+ unzip v1.20.5.zip
113
+ cd MultiOptPy-1.20.5
114
114
 
115
115
  ## 💻 Command Line Interface (CLI) Functionality (v1.20.2)
116
116
  # The following eight core functionalities are available as direct executable commands in your terminal after installation:
@@ -157,7 +157,7 @@ References are given in the source code.
157
157
  After downloading the repository using git clone or similar commands, move to the generated directory and run the following:
158
158
  python command
159
159
  ```
160
- python optmain.py SN2.xyz -ma 150 1 6 -pyscf -elec 0 -spin 0 -opt rsirfo_block_fsb -modelhess
160
+ python optmain.py SN2.xyz -ma 150 1 6 -pyscf -elec -1 -spin 0 -opt rsirfo_block_fsb -modelhess
161
161
  ```
162
162
  CLI command (arbitrary directory)
163
163
  ```
@@ -412,13 +412,13 @@ If you use MultiOptPy in your research, please cite it as follows:
412
412
  month = dec,
413
413
  year = 2025,
414
414
  publisher = {Zenodo},
415
- version = {v1.20.3},
416
- doi = {10.5281/zenodo.17970774},
417
- url = {https://doi.org/10.5281/zenodo.17970774}
415
+ version = {v1.20.4},
416
+ doi = {10.5281/zenodo.17973395},
417
+ url = {https://doi.org/10.5281/zenodo.17973395}
418
418
  }
419
419
  ```
420
420
  ```
421
- ss0832. (2025). MultiOptPy: Multifunctional geometry optimization tools for quantum chemical calculations (v1.20.3). Zenodo. https://doi.org/10.5281/zenodo.17970774
421
+ ss0832. (2025). MultiOptPy: Multifunctional geometry optimization tools for quantum chemical calculations (v1.20.4). Zenodo. https://doi.org/10.5281/zenodo.17973395
422
422
  ```
423
423
 
424
424
  ## Setting Up an Environment for Using NNP(UMA) on Windows 11
@@ -34,6 +34,7 @@ multioptpy/Calculator/ase_tools/__init__.py
34
34
  multioptpy/Calculator/ase_tools/fairchem.py
35
35
  multioptpy/Calculator/ase_tools/gamess.py
36
36
  multioptpy/Calculator/ase_tools/gaussian.py
37
+ multioptpy/Calculator/ase_tools/gxtb_dev.py
37
38
  multioptpy/Calculator/ase_tools/mace.py
38
39
  multioptpy/Calculator/ase_tools/mopac.py
39
40
  multioptpy/Calculator/ase_tools/nwchem.py
@@ -175,6 +176,7 @@ multioptpy/OtherMethod/dimer.py
175
176
  multioptpy/OtherMethod/elastic_image_pair.py
176
177
  multioptpy/OtherMethod/modelfunction.py
177
178
  multioptpy/OtherMethod/newton_traj.py
179
+ multioptpy/OtherMethod/spring_pair_method.py
178
180
  multioptpy/OtherMethod/twopshs.py
179
181
  multioptpy/PESAnalyzer/__init__.py
180
182
  multioptpy/PESAnalyzer/calc_irc_curvature.py
@@ -0,0 +1,9 @@
1
+ numpy>=2.2.0
2
+ scipy>=1.13.0
3
+ matplotlib>=3.10.0
4
+ torch~=2.6.0
5
+ pyscf>=2.9.0
6
+ tblite>=0.4.0
7
+ ase~=3.26.0
8
+ fairchem-core~=2.7.0
9
+ sympy>=1.13.0
@@ -1,21 +1,21 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MultiOptPy
3
- Version: 1.20.4
3
+ Version: 1.20.6
4
4
  Summary: Multifunctional geometry optimization tools for quantum chemical calculations.
5
5
  Author-email: ss0832 <highlighty876@gmail.com>
6
- License: GPLv3
6
+ License-Expression: GPL-3.0-or-later
7
7
  Requires-Python: >=3.12
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
10
- Requires-Dist: numpy~=2.2.0
10
+ Requires-Dist: numpy>=2.2.0
11
11
  Requires-Dist: scipy>=1.13.0
12
- Requires-Dist: matplotlib~=3.10.0
12
+ Requires-Dist: matplotlib>=3.10.0
13
13
  Requires-Dist: torch~=2.6.0
14
- Requires-Dist: pyscf~=2.9.0
15
- Requires-Dist: tblite~=0.4.0
14
+ Requires-Dist: pyscf>=2.9.0
15
+ Requires-Dist: tblite>=0.4.0
16
16
  Requires-Dist: ase~=3.26.0
17
17
  Requires-Dist: fairchem-core~=2.7.0
18
- Requires-Dist: sympy~=1.13.0
18
+ Requires-Dist: sympy>=1.13.0
19
19
  Dynamic: license-file
20
20
 
21
21
  # MultiOptPy
@@ -29,7 +29,7 @@ Dynamic: license-file
29
29
  [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/ss0832)
30
30
 
31
31
  [![PyPI Downloads](https://static.pepy.tech/personalized-badge/multioptpy?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/multioptpy)
32
- [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17970774.svg)](https://doi.org/10.5281/zenodo.17970774)
32
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17973395.svg)](https://doi.org/10.5281/zenodo.17973395)
33
33
 
34
34
  If this tool helped your studies, education, or saved your time, I'd appreciate a coffee!
35
35
  Your support serves as a great encouragement for this personal project and fuels my next journey.
@@ -80,9 +80,9 @@ conda create -n test_mop python=3.12.7
80
80
  conda activate test_mop
81
81
 
82
82
  ## 3. Download and install MultiOptPy:
83
- wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.3.zip
84
- unzip v1.20.3.zip
85
- cd MultiOptPy-1.20.3
83
+ wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.5.zip
84
+ unzip v1.20.5.zip
85
+ cd MultiOptPy-1.20.5
86
86
  pip install -r requirements.txt
87
87
 
88
88
  ## 4. Copy the test configuration file and run the AutoTS workflow:
@@ -107,10 +107,10 @@ python run_autots.py aldol_rxn.xyz -cfg config_autots_run_xtb_test.json
107
107
  # Installation via pip (Linux)
108
108
  conda create -n <env-name> python=3.12 pip
109
109
  conda activate <env-name>
110
- pip install git+https://github.com/ss0832/MultiOptPy.git@v1.20.3
111
- wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.3.zip
112
- unzip v1.20.3.zip
113
- cd MultiOptPy-1.20.3
110
+ pip install git+https://github.com/ss0832/MultiOptPy.git@v1.20.5
111
+ wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.5.zip
112
+ unzip v1.20.5.zip
113
+ cd MultiOptPy-1.20.5
114
114
 
115
115
  ## 💻 Command Line Interface (CLI) Functionality (v1.20.2)
116
116
  # The following eight core functionalities are available as direct executable commands in your terminal after installation:
@@ -157,7 +157,7 @@ References are given in the source code.
157
157
  After downloading the repository using git clone or similar commands, move to the generated directory and run the following:
158
158
  python command
159
159
  ```
160
- python optmain.py SN2.xyz -ma 150 1 6 -pyscf -elec 0 -spin 0 -opt rsirfo_block_fsb -modelhess
160
+ python optmain.py SN2.xyz -ma 150 1 6 -pyscf -elec -1 -spin 0 -opt rsirfo_block_fsb -modelhess
161
161
  ```
162
162
  CLI command (arbitrary directory)
163
163
  ```
@@ -412,13 +412,13 @@ If you use MultiOptPy in your research, please cite it as follows:
412
412
  month = dec,
413
413
  year = 2025,
414
414
  publisher = {Zenodo},
415
- version = {v1.20.3},
416
- doi = {10.5281/zenodo.17970774},
417
- url = {https://doi.org/10.5281/zenodo.17970774}
415
+ version = {v1.20.4},
416
+ doi = {10.5281/zenodo.17973395},
417
+ url = {https://doi.org/10.5281/zenodo.17973395}
418
418
  }
419
419
  ```
420
420
  ```
421
- ss0832. (2025). MultiOptPy: Multifunctional geometry optimization tools for quantum chemical calculations (v1.20.3). Zenodo. https://doi.org/10.5281/zenodo.17970774
421
+ ss0832. (2025). MultiOptPy: Multifunctional geometry optimization tools for quantum chemical calculations (v1.20.4). Zenodo. https://doi.org/10.5281/zenodo.17973395
422
422
  ```
423
423
 
424
424
  ## Setting Up an Environment for Using NNP(UMA) on Windows 11
@@ -9,7 +9,7 @@
9
9
  [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge&logo=buy-me-a-coffee&logoColor=black)](https://buymeacoffee.com/ss0832)
10
10
 
11
11
  [![PyPI Downloads](https://static.pepy.tech/personalized-badge/multioptpy?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/multioptpy)
12
- [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17970774.svg)](https://doi.org/10.5281/zenodo.17970774)
12
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17973395.svg)](https://doi.org/10.5281/zenodo.17973395)
13
13
 
14
14
  If this tool helped your studies, education, or saved your time, I'd appreciate a coffee!
15
15
  Your support serves as a great encouragement for this personal project and fuels my next journey.
@@ -60,9 +60,9 @@ conda create -n test_mop python=3.12.7
60
60
  conda activate test_mop
61
61
 
62
62
  ## 3. Download and install MultiOptPy:
63
- wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.3.zip
64
- unzip v1.20.3.zip
65
- cd MultiOptPy-1.20.3
63
+ wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.5.zip
64
+ unzip v1.20.5.zip
65
+ cd MultiOptPy-1.20.5
66
66
  pip install -r requirements.txt
67
67
 
68
68
  ## 4. Copy the test configuration file and run the AutoTS workflow:
@@ -87,10 +87,10 @@ python run_autots.py aldol_rxn.xyz -cfg config_autots_run_xtb_test.json
87
87
  # Installation via pip (Linux)
88
88
  conda create -n <env-name> python=3.12 pip
89
89
  conda activate <env-name>
90
- pip install git+https://github.com/ss0832/MultiOptPy.git@v1.20.3
91
- wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.3.zip
92
- unzip v1.20.3.zip
93
- cd MultiOptPy-1.20.3
90
+ pip install git+https://github.com/ss0832/MultiOptPy.git@v1.20.5
91
+ wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.5.zip
92
+ unzip v1.20.5.zip
93
+ cd MultiOptPy-1.20.5
94
94
 
95
95
  ## 💻 Command Line Interface (CLI) Functionality (v1.20.2)
96
96
  # The following eight core functionalities are available as direct executable commands in your terminal after installation:
@@ -137,7 +137,7 @@ References are given in the source code.
137
137
  After downloading the repository using git clone or similar commands, move to the generated directory and run the following:
138
138
  python command
139
139
  ```
140
- python optmain.py SN2.xyz -ma 150 1 6 -pyscf -elec 0 -spin 0 -opt rsirfo_block_fsb -modelhess
140
+ python optmain.py SN2.xyz -ma 150 1 6 -pyscf -elec -1 -spin 0 -opt rsirfo_block_fsb -modelhess
141
141
  ```
142
142
  CLI command (arbitrary directory)
143
143
  ```
@@ -392,13 +392,13 @@ If you use MultiOptPy in your research, please cite it as follows:
392
392
  month = dec,
393
393
  year = 2025,
394
394
  publisher = {Zenodo},
395
- version = {v1.20.3},
396
- doi = {10.5281/zenodo.17970774},
397
- url = {https://doi.org/10.5281/zenodo.17970774}
395
+ version = {v1.20.4},
396
+ doi = {10.5281/zenodo.17973395},
397
+ url = {https://doi.org/10.5281/zenodo.17973395}
398
398
  }
399
399
  ```
400
400
  ```
401
- ss0832. (2025). MultiOptPy: Multifunctional geometry optimization tools for quantum chemical calculations (v1.20.3). Zenodo. https://doi.org/10.5281/zenodo.17970774
401
+ ss0832. (2025). MultiOptPy: Multifunctional geometry optimization tools for quantum chemical calculations (v1.20.4). Zenodo. https://doi.org/10.5281/zenodo.17973395
402
402
  ```
403
403
 
404
404
  ## Setting Up an Environment for Using NNP(UMA) on Windows 11
@@ -22,6 +22,8 @@ from multioptpy.Calculator.ase_tools.fairchem import ASE_FAIRCHEM
22
22
  from multioptpy.Calculator.ase_tools.mace import ASE_MACE
23
23
  from multioptpy.Calculator.ase_tools.mopac import ASE_MOPAC
24
24
  from multioptpy.Calculator.ase_tools.pygfn0 import ASE_GFN0
25
+ from multioptpy.Calculator.ase_tools.gxtb_dev import ASE_gxTB_Dev
26
+
25
27
 
26
28
  """
27
29
  referrence:
@@ -89,7 +91,9 @@ class Calculation:
89
91
  if self.software_type == "gaussian":
90
92
  print("Calculating exact Hessian using Gaussian...")
91
93
  exact_hess = calc_obj.calc_analytic_hessian() # in hartree/Bohr^2
92
-
94
+ elif self.software_type == "orca":
95
+ hess_path = calc_obj.run_frequency_analysis()
96
+ exact_hess = calc_obj.get_hessian_matrix(hess_path)
93
97
  else:
94
98
  vib = Vibrations(atoms=calc_obj.atom_obj, delta=0.001, name="z_hess_"+timestamp)
95
99
  vib.run()
@@ -124,7 +128,7 @@ class Calculation:
124
128
  file_list = glob.glob(file_directory+"/*_[0-9].xyz")
125
129
 
126
130
  for num, input_file in enumerate(file_list):
127
- try:
131
+ if True:#try:
128
132
  if geom_num_list is None:
129
133
  positions, _, electric_charge_and_multiplicity = xyz2list(input_file, electric_charge_and_multiplicity)
130
134
  else:
@@ -155,11 +159,11 @@ class Calculation:
155
159
  elif iter % self.FC_COUNT == 0 or self.hessian_flag:
156
160
  # exact numerical hessian
157
161
  _ = self.calc_exact_hess(calc_obj, positions, element_list)
158
- except Exception as error:
159
- print(error)
160
- print("This molecule could not be optimized.")
161
- finish_frag = True
162
- return np.array([0]), np.array([0]), np.array([0]), finish_frag
162
+ #except Exception as error:
163
+ # print(error)
164
+ # print("This molecule could not be optimized.")
165
+ # finish_frag = True
166
+ # return np.array([0]), np.array([0]), np.array([0]), finish_frag
163
167
 
164
168
  positions /= self.bohr2angstroms
165
169
  self.energy = e
@@ -286,7 +290,10 @@ class ASEEngine(CalculationEngine):
286
290
  timestamp = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S_%f")[:-2]
287
291
  if software_type == "gaussian":
288
292
  exact_hess = calc_obj.calc_analytic_hessian() # in hartree/Bohr^2
289
- exact_hess = exact_hess
293
+
294
+ elif software_type == "orca":
295
+ hess_path = calc_obj.run_frequency_analysis()
296
+ exact_hess = calc_obj.get_hessian_matrix(hess_path)
290
297
  else:
291
298
  vib = Vibrations(atoms=calc_obj.atom_obj, delta=0.001, name="z_hess_"+timestamp)
292
299
  vib.run()
@@ -431,6 +438,12 @@ def setup_calculator(atom_obj, software_type, electric_charge_and_multiplicity,
431
438
  input_file=input_file)
432
439
  return calc_obj
433
440
 
441
+ if software_type == "gxtb_dev":
442
+ calc_obj = ASE_gxTB_Dev(atom_obj=atom_obj,
443
+ electric_charge_and_multiplicity=electric_charge_and_multiplicity,
444
+ software_type=software_type)
445
+ return calc_obj
446
+
434
447
  # Unknown software type
435
448
  raise ValueError(f"Unsupported software type: {software_type}")
436
449
 
@@ -0,0 +1,41 @@
1
+ class ASE_gxTB_Dev:
2
+ """
3
+ Wrapper class to set up and run g-xTB (preliminary version) calculations via ASE.
4
+ $ pip install pygxtb==0.7.0
5
+
6
+ """
7
+ def __init__(self, **kwargs):
8
+
9
+ self.atom_obj = kwargs.get('atom_obj', None)
10
+ self.electric_charge_and_multiplicity = kwargs.get('electric_charge_and_multiplicity', None)
11
+ self.software_path = kwargs.get('software_path', None)
12
+ self.software_type = kwargs.get('software_type', None)
13
+ from pygxtb import PygxTB
14
+ self.pygxtb = PygxTB
15
+
16
+ def set_calculator(self):
17
+ """
18
+ Sets the ASE calculator object based on software_type.
19
+ """
20
+
21
+ charge = 0 # Default charge
22
+ if self.electric_charge_and_multiplicity is not None:
23
+ try:
24
+ # Get charge from [charge, multiplicity] list
25
+ charge = int(self.electric_charge_and_multiplicity[0])
26
+ except (IndexError, TypeError, ValueError):
27
+ print(f"Warning: Could not parse charge from {self.electric_charge_and_multiplicity}. Defaulting to 0.")
28
+ pass
29
+
30
+ # Instantiate GFN0 class and pass the charge
31
+ gxtb_calc = self.pygxtb(charge=charge)
32
+ return gxtb_calc
33
+
34
+
35
+ def run(self):
36
+ """
37
+ Attaches the calculator to the atoms object and returns it.
38
+ """
39
+ calc_obj = self.set_calculator()
40
+ self.atom_obj.calc = calc_obj
41
+ return self.atom_obj
@@ -0,0 +1,236 @@
1
+ import os
2
+ import shutil
3
+ import subprocess
4
+ import numpy as np
5
+ from ase.calculators.orca import ORCA, OrcaProfile
6
+ from ase.data import atomic_numbers
7
+
8
+ """
9
+ Please specify the absolute path to the ORCA executable in software_path.conf using the format orca::<path>. For Linux, provide the path to the binary (e.g., /absolute/path/to/orca), and for Windows, provide the path to the executable file (e.g., C:\absolute\path\to\orca.exe).
10
+ """
11
+
12
+
13
+ class ASE_ORCA:
14
+ TARGET_ORCA_VERSION = '6.1.0'
15
+
16
+ def __init__(self, **kwargs):
17
+ self.atom_obj = kwargs.get('atom_obj', None)
18
+ self.electric_charge_and_multiplicity = kwargs.get('electric_charge_and_multiplicity', None)
19
+
20
+ # NOTE: self.input_file is updated in _setup_calculator to enforce 'orca.inp' in CWD.
21
+ raw_input_file = kwargs.get('input_file', 'orca.inp')
22
+ self.input_file = os.path.abspath(raw_input_file).replace('\\', '/')
23
+
24
+ self.orca_path = kwargs.get('orca_path', None)
25
+ self.functional = kwargs.get('functional', 'B3LYP')
26
+ self.basis_set = kwargs.get('basis_set', 'def2-SVP')
27
+
28
+ # Optional ORCA input blocks (raw string)
29
+ self.orca_blocks = kwargs.get('orca_blocks', '')
30
+
31
+ # Auto-fix for unsupported Pople basis sets on heavy elements
32
+ self.auto_fix_basis = kwargs.get('auto_fix_basis', True)
33
+ self.heavy_atom_basis = kwargs.get('heavy_atom_basis', 'def2-SVP')
34
+
35
+ def _resolve_orca_exe(self, provided_path):
36
+ """
37
+ Resolve the absolute path to the ORCA executable.
38
+ Handles directories, stripping whitespace from config files, and WSL/Windows paths.
39
+ """
40
+ if not provided_path:
41
+ return None
42
+
43
+ # CRITICAL FIX: Strip whitespace/newlines that might come from config parsing
44
+ clean_path = provided_path.strip()
45
+ # Expand ~ to home directory if present
46
+ clean_path = os.path.expanduser(clean_path)
47
+ clean_path = os.path.normpath(clean_path)
48
+
49
+ candidates = []
50
+ # If the path is a directory, look for the executable inside it
51
+ if os.path.isdir(clean_path):
52
+ candidates.append(os.path.join(clean_path, 'orca'))
53
+ candidates.append(os.path.join(clean_path, 'orca.exe'))
54
+ else:
55
+ # If it's a file path (or doesn't exist yet), use it as is
56
+ candidates.append(clean_path)
57
+
58
+ for candidate in candidates:
59
+ # Check if file exists
60
+ if os.path.exists(candidate) and os.path.isfile(candidate):
61
+ return os.path.abspath(candidate)
62
+
63
+ # Check system PATH
64
+ resolved = shutil.which(candidate)
65
+ if resolved and os.path.exists(resolved):
66
+ return os.path.abspath(resolved)
67
+
68
+ # Use repr() in error message to reveal hidden characters like \n
69
+ candidate_reprs = [repr(c) for c in candidates]
70
+ raise FileNotFoundError(f"Cannot locate ORCA executable. Checked: {', '.join(candidate_reprs)}")
71
+
72
+ def _is_pople_basis(self, basis_name):
73
+ if not basis_name: return False
74
+ b = basis_name.strip().lower()
75
+ return b.startswith("6-31") or b.startswith("6-311")
76
+
77
+ def _get_heavy_elements_for_pople(self):
78
+ if self.atom_obj is None: return []
79
+ symbols = self.atom_obj.get_chemical_symbols()
80
+ return sorted({s for s in symbols if atomic_numbers.get(s, 0) > 30})
81
+
82
+ def _build_orca_blocks(self):
83
+ blocks = (self.orca_blocks or "").strip()
84
+ heavy_elements = []
85
+ if self._is_pople_basis(self.basis_set):
86
+ heavy_elements = self._get_heavy_elements_for_pople()
87
+
88
+ if heavy_elements:
89
+ if not self.auto_fix_basis:
90
+ raise ValueError("Unsupported Pople basis for heavy elements.")
91
+
92
+ basis_lines = ["%basis"]
93
+ for elem in heavy_elements:
94
+ # Per user instruction: No ECP, just GTO
95
+ basis_lines.append(f' NewGTO {elem} "{self.heavy_atom_basis}"')
96
+ basis_lines.append("end")
97
+
98
+ if blocks:
99
+ blocks = blocks + "\n" + "\n".join(basis_lines)
100
+ else:
101
+ blocks = "\n".join(basis_lines)
102
+
103
+ return blocks if blocks else ""
104
+
105
+ def _print_orca_output_on_error(self):
106
+ """Helper to print ORCA output file content if it exists."""
107
+ if not hasattr(self, 'input_file'): return
108
+
109
+ out_file = os.path.splitext(self.input_file)[0] + ".out"
110
+ if os.path.exists(out_file):
111
+ print(f"\n--- ORCA OUTPUT ({out_file}) ---")
112
+ try:
113
+ with open(out_file, 'r', encoding='utf-8', errors='replace') as f:
114
+ content = f.read()
115
+ print(content[-3000:] if len(content) > 3000 else content)
116
+ except Exception as e:
117
+ print(f"Failed to read output file: {e}")
118
+ print("--- END ORCA OUTPUT ---\n")
119
+ else:
120
+ print(f"\n--- ORCA OUTPUT NOT FOUND ({out_file}) ---\n")
121
+
122
+ def _setup_calculator(self, task_keyword):
123
+ # Force usage of Current Working Directory + "orca.inp"
124
+ cwd = os.getcwd()
125
+ label_path = os.path.join(cwd, 'orca').replace('\\', '/')
126
+ self.input_file = label_path + '.inp'
127
+
128
+ print(f"DEBUG: ASE Label Path : {label_path}")
129
+
130
+ simple_input = f"{self.functional} {self.basis_set} {task_keyword}"
131
+
132
+ profile_obj = None
133
+ if self.orca_path:
134
+ real_exe_path = self._resolve_orca_exe(self.orca_path)
135
+ orca_dir = os.path.dirname(real_exe_path)
136
+ path_env = os.environ.get('PATH', '')
137
+ if orca_dir not in path_env:
138
+ os.environ['PATH'] = orca_dir + os.pathsep + path_env
139
+
140
+ ase_safe_path = real_exe_path.replace('\\', '/')
141
+ profile_obj = OrcaProfile(ase_safe_path)
142
+ print(f"DEBUG: ORCA Executable: {ase_safe_path}")
143
+
144
+ orca_blocks = self._build_orca_blocks()
145
+
146
+ calc = ORCA(
147
+ label=label_path,
148
+ profile=profile_obj,
149
+ charge=int(self.electric_charge_and_multiplicity[0]),
150
+ mult=int(self.electric_charge_and_multiplicity[1]),
151
+ orcasimpleinput=simple_input,
152
+ orcablocks=orca_blocks
153
+ )
154
+
155
+ self.atom_obj.calc = calc
156
+ return self.atom_obj
157
+
158
+ def run(self):
159
+ self._setup_calculator("EnGrad")
160
+ print(f"--- Starting Gradient Calculation (ORCA {self.TARGET_ORCA_VERSION}) ---")
161
+ try:
162
+ forces = self.atom_obj.get_forces()
163
+ potential_energy = self.atom_obj.get_potential_energy()
164
+ print("Gradient calculation completed.")
165
+ return forces, potential_energy
166
+ except subprocess.CalledProcessError as e:
167
+ print(f"CRITICAL: ORCA execution failed with exit code {e.returncode}")
168
+ self._print_orca_output_on_error()
169
+ raise e
170
+ except Exception as e:
171
+ print(f"CRITICAL: An unexpected error occurred: {e}")
172
+ self._print_orca_output_on_error()
173
+ raise e
174
+
175
+ def run_frequency_analysis(self):
176
+ print(f"--- Starting Frequency Calculation (ORCA {self.TARGET_ORCA_VERSION}) ---")
177
+ self._setup_calculator("Freq")
178
+ try:
179
+ self.atom_obj.get_potential_energy()
180
+ print("Frequency calculation completed.")
181
+ # Use self.input_file to construct hess_path instead of relying on calc.label
182
+ hess_path = os.path.splitext(self.input_file)[0] + ".hess"
183
+ return hess_path
184
+ except subprocess.CalledProcessError as e:
185
+ print(f"CRITICAL: ORCA Frequency execution failed with exit code {e.returncode}")
186
+ self._print_orca_output_on_error()
187
+ raise e
188
+ except Exception as e:
189
+ print(f"CRITICAL: An unexpected error occurred during frequency analysis: {e}")
190
+ self._print_orca_output_on_error()
191
+ raise e
192
+
193
+ def get_hessian_matrix(self, hess_file_path=None):
194
+ if hess_file_path is None:
195
+ # Default to orca.hess in the same dir as input_file
196
+ input_dir = os.path.dirname(self.input_file)
197
+ hess_file_path = os.path.join(input_dir, 'orca.hess')
198
+
199
+ if not os.path.exists(hess_file_path):
200
+ raise FileNotFoundError(f"Hessian file not found: {hess_file_path}")
201
+
202
+ print(f"Reading Hessian from: {hess_file_path}")
203
+
204
+ with open(hess_file_path, 'r', encoding='utf-8') as f:
205
+ lines = f.readlines()
206
+
207
+ hessian_matrix = None
208
+ iterator = iter(lines)
209
+ for line in iterator:
210
+ if "$hessian" in line:
211
+ dim_line = next(iterator).strip().split()
212
+ # Parse dimensions: square matrix usually provides just one dimension
213
+ if len(dim_line) == 1:
214
+ n_rows = int(dim_line[0])
215
+ n_cols = n_rows
216
+ else:
217
+ n_rows, n_cols = map(int, dim_line[:2])
218
+
219
+ hessian_matrix = np.zeros((n_rows, n_cols))
220
+ col_pointer = 0
221
+ while col_pointer < n_cols:
222
+ header = next(iterator).strip()
223
+ if not header: break
224
+ col_indices = [int(c) for c in header.split()]
225
+ for r in range(n_rows):
226
+ row_data = next(iterator).strip().split()
227
+ row_idx = int(row_data[0])
228
+ values = [float(x) for x in row_data[1:]]
229
+ for i, val in enumerate(values):
230
+ hessian_matrix[row_idx, col_indices[i]] = val
231
+ col_pointer += len(col_indices)
232
+ break
233
+
234
+ if hessian_matrix is None:
235
+ raise ValueError("Could not find $hessian block in the file.")
236
+ return hessian_matrix