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.
- {multioptpy-1.20.4 → multioptpy-1.20.6/MultiOptPy.egg-info}/PKG-INFO +20 -20
- {multioptpy-1.20.4 → multioptpy-1.20.6}/MultiOptPy.egg-info/SOURCES.txt +2 -0
- multioptpy-1.20.6/MultiOptPy.egg-info/requires.txt +9 -0
- {multioptpy-1.20.4/MultiOptPy.egg-info → multioptpy-1.20.6}/PKG-INFO +20 -20
- {multioptpy-1.20.4 → multioptpy-1.20.6}/README.md +13 -13
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_calculation_tools.py +21 -8
- multioptpy-1.20.6/multioptpy/Calculator/ase_tools/gxtb_dev.py +41 -0
- multioptpy-1.20.6/multioptpy/Calculator/ase_tools/orca.py +236 -0
- multioptpy-1.20.6/multioptpy/MD/thermostat.py +298 -0
- multioptpy-1.20.6/multioptpy/ModelHessian/fischerd3.py +305 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/rsirfo.py +112 -4
- multioptpy-1.20.6/multioptpy/Optimizer/rsprfo.py +1363 -0
- multioptpy-1.20.6/multioptpy/OtherMethod/spring_pair_method.py +314 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/entrypoints.py +406 -16
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ieip.py +14 -2
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/interface.py +3 -1
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/moleculardynamics.py +21 -13
- {multioptpy-1.20.4 → multioptpy-1.20.6}/pyproject.toml +8 -7
- multioptpy-1.20.4/MultiOptPy.egg-info/requires.txt +0 -9
- multioptpy-1.20.4/multioptpy/Calculator/ase_tools/orca.py +0 -22
- multioptpy-1.20.4/multioptpy/MD/thermostat.py +0 -185
- multioptpy-1.20.4/multioptpy/ModelHessian/fischerd3.py +0 -360
- multioptpy-1.20.4/multioptpy/Optimizer/rsprfo.py +0 -1056
- {multioptpy-1.20.4 → multioptpy-1.20.6}/LICENSE +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/MultiOptPy.egg-info/dependency_links.txt +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/MultiOptPy.egg-info/entry_points.txt +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/MultiOptPy.egg-info/top_level.txt +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/fairchem.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/gamess.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/gaussian.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/mace.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/mopac.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/nwchem.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/ase_tools/pygfn0.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/dxtb_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/emt_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/gpaw_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/lj_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/psi4_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/pwscf_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/pyscf_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/sqm1_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/sqm2_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/tblite_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Calculator/tersoff_calculation_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Constraint/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Constraint/constraint_condition.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Coordinate/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Coordinate/polar_coordinate.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Coordinate/redundant_coordinate.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/converge_criteria.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/dvv.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/euler.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/hpc.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/lqa.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/modekill.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/IRC/rk4.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/adaptive_interpolation.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/binomial_interpolation.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/geodesic_interpolation.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/interpolation.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/linear_interpolation.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/savitzky_golay_interpolation.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Interpolation/spline_interpolation.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MD/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_bneb_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_dmf_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_dneb_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_ewbneb_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_gpneb_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_lup_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_neb_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_nesb_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_om_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_qsm_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/MEP/pathopt_qsmv2_force.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/avoiding_model_function.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/binary_image_ts_search_model_function.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/conical_model_function.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/opt_meci.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/opt_mesx.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/opt_mesx_2.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelFunction/seam_model_function.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/approx_hessian.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/calc_params.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/fischer.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/fischerd4.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/gfn0xtb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/gfnff.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/lindh.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/lindh2007d2.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/lindh2007d3.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/lindh2007d4.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/morse.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/schlegel.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/schlegeld3.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/schlegeld4.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/shortrange.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/swartd2.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/swartd3.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/swartd4.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/ModelHessian/tshess.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/QHAdam.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/abc_fire.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adabelief.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adabound.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adadelta.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adaderivative.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adadiff.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adafactor.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adam.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adamax.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adamod.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adamw.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/adiis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/afire_neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/block_hessian_update.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/c2diis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/component_wise_scaling.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/conjugate_gradient.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/conjugate_gradient_neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/coordinate_locking.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/crsirfo.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/dic_rsirfo.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/ediis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/eve.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/fastadabelief.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/fire.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/fire2.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/fire_neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gan_step.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gdiis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gediis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/geodesic_step.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gpmin.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gpr_step.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gradientdescent.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/gradientdescent_neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/hessian_update.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/hybrid_rfo.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/kdiis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/lars.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/lbfgs.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/lbfgs_neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/linesearch.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/lookahead.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/mf_rsirfo.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/mode_following.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/nadam.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/newton.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/prodigy.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/purtubation.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/quickmin_neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/radam.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/rfo_neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/ric_rfo.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/rl_step.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/rmspropgrave.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/sadam.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/samsgrad.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/tr_lbfgs.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/trim.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/trust_radius.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/trust_radius_neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Optimizer/yogi.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/addf.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/dimer.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/elastic_image_pair.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/modelfunction.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/newton_traj.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/OtherMethod/twopshs.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/calc_irc_curvature.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/cmds_analysis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/koopman_analysis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/PESAnalyzer/pca_analysis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/atomic_mass.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/atomic_number.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/covalent_radii.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/d2.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/d3.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/d4.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/dreiding.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/gfn0xtb_param.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/gfnff_param.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/gnb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/parameter.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/uff.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Parameters/unit_values.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/AFIR_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/LJ_repulsive_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/anharmonic_keep_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/asym_elllipsoidal_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/electrostatic_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/flux_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/gaussian_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/idpp.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/keep_angle_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/keep_dihedral_angle_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/keep_outofplain_angle_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/keep_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/mechano_force_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/nanoreactor_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/spacer_model_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/switching_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/universal_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/value_range_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Potential/void_point_potential.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm1/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm1/sqm1_core.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/calc_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_basis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_bond.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_core.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_data.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_disp.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_eeq.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_overlapint.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_qm.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_rep.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/SQM/sqm2/sqm2_srb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Thermo/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Thermo/normal_mode_analyzer.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/bond_connectivity.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/calc_tools.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/oniom.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/pbc.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/riemann_curvature.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Utils/symmetry_analyzer.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Visualization/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Visualization/visualization.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/WFAnalyzer/MO_analysis.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/WFAnalyzer/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/autots.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/ieip_wrapper.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/md_wrapper.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/neb_wrapper.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/Wrapper/optimize_wrapper.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/__init__.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/fileio.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/irc.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/neb.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/optimization.py +0 -0
- {multioptpy-1.20.4 → multioptpy-1.20.6}/multioptpy/optimizer.py +0 -0
- {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.
|
|
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:
|
|
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
|
|
10
|
+
Requires-Dist: numpy>=2.2.0
|
|
11
11
|
Requires-Dist: scipy>=1.13.0
|
|
12
|
-
Requires-Dist: matplotlib
|
|
12
|
+
Requires-Dist: matplotlib>=3.10.0
|
|
13
13
|
Requires-Dist: torch~=2.6.0
|
|
14
|
-
Requires-Dist: pyscf
|
|
15
|
-
Requires-Dist: tblite
|
|
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
|
|
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
|
[](https://buymeacoffee.com/ss0832)
|
|
30
30
|
|
|
31
31
|
[](https://pepy.tech/projects/multioptpy)
|
|
32
|
-
[](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.
|
|
84
|
-
unzip v1.20.
|
|
85
|
-
cd MultiOptPy-1.20.
|
|
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.
|
|
111
|
-
wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.
|
|
112
|
-
unzip v1.20.
|
|
113
|
-
cd MultiOptPy-1.20.
|
|
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
|
|
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.
|
|
416
|
-
doi = {10.5281/zenodo.
|
|
417
|
-
url = {https://doi.org/10.5281/zenodo.
|
|
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.
|
|
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
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MultiOptPy
|
|
3
|
-
Version: 1.20.
|
|
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:
|
|
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
|
|
10
|
+
Requires-Dist: numpy>=2.2.0
|
|
11
11
|
Requires-Dist: scipy>=1.13.0
|
|
12
|
-
Requires-Dist: matplotlib
|
|
12
|
+
Requires-Dist: matplotlib>=3.10.0
|
|
13
13
|
Requires-Dist: torch~=2.6.0
|
|
14
|
-
Requires-Dist: pyscf
|
|
15
|
-
Requires-Dist: tblite
|
|
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
|
|
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
|
[](https://buymeacoffee.com/ss0832)
|
|
30
30
|
|
|
31
31
|
[](https://pepy.tech/projects/multioptpy)
|
|
32
|
-
[](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.
|
|
84
|
-
unzip v1.20.
|
|
85
|
-
cd MultiOptPy-1.20.
|
|
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.
|
|
111
|
-
wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.
|
|
112
|
-
unzip v1.20.
|
|
113
|
-
cd MultiOptPy-1.20.
|
|
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
|
|
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.
|
|
416
|
-
doi = {10.5281/zenodo.
|
|
417
|
-
url = {https://doi.org/10.5281/zenodo.
|
|
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.
|
|
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
|
[](https://buymeacoffee.com/ss0832)
|
|
10
10
|
|
|
11
11
|
[](https://pepy.tech/projects/multioptpy)
|
|
12
|
-
[](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.
|
|
64
|
-
unzip v1.20.
|
|
65
|
-
cd MultiOptPy-1.20.
|
|
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.
|
|
91
|
-
wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.20.
|
|
92
|
-
unzip v1.20.
|
|
93
|
-
cd MultiOptPy-1.20.
|
|
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
|
|
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.
|
|
396
|
-
doi = {10.5281/zenodo.
|
|
397
|
-
url = {https://doi.org/10.5281/zenodo.
|
|
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.
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
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
|