mlmm-toolkit 0.2.7__tar.gz → 0.3.0__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.
- mlmm_toolkit-0.3.0/.github/scripts/check_all_scan_contract.py +133 -0
- mlmm_toolkit-0.3.0/.github/scripts/check_engineering_markers.py +89 -0
- mlmm_toolkit-0.3.0/.github/scripts/check_help_registry.py +98 -0
- mlmm_toolkit-0.3.0/.github/scripts/check_intro_template.py +118 -0
- mlmm_toolkit-0.3.0/.github/scripts/check_markdown_links.py +122 -0
- mlmm_toolkit-0.3.0/.github/scripts/check_skill_commands.py +140 -0
- mlmm_toolkit-0.3.0/.github/scripts/check_skill_drift.py +186 -0
- mlmm_toolkit-0.3.0/.github/scripts/generate_reference.py +310 -0
- mlmm_toolkit-0.3.0/.github/scripts/run_docs_quality.py +79 -0
- mlmm_toolkit-0.3.0/.github/scripts/smoke_docs_commands.py +300 -0
- mlmm_toolkit-0.3.0/.github/scripts/smoke_dump_trajectories.py +253 -0
- mlmm_toolkit-0.3.0/.github/workflows/docs_quality.yml +42 -0
- mlmm_toolkit-0.3.0/.github/workflows/markers.yml +39 -0
- mlmm_toolkit-0.3.0/.github/workflows/pytest.yml +44 -0
- mlmm_toolkit-0.3.0/.gitignore +70 -0
- mlmm_toolkit-0.3.0/CHANGELOG.md +545 -0
- mlmm_toolkit-0.3.0/CITATION.cff +32 -0
- mlmm_toolkit-0.3.0/CONTRIBUTING.md +232 -0
- mlmm_toolkit-0.3.0/MANIFEST.in +10 -0
- mlmm_toolkit-0.3.0/PKG-INFO +926 -0
- mlmm_toolkit-0.3.0/README.md +181 -0
- mlmm_toolkit-0.3.0/THIRD_PARTY_NOTICES.txt +41 -0
- mlmm_toolkit-0.3.0/docs/add-elem-info.md +72 -0
- mlmm_toolkit-0.3.0/docs/all.md +284 -0
- mlmm_toolkit-0.3.0/docs/architecture.md +387 -0
- mlmm_toolkit-0.3.0/docs/backends.md +193 -0
- mlmm_toolkit-0.3.0/docs/bond-summary.md +67 -0
- mlmm_toolkit-0.3.0/docs/cli-conventions.md +205 -0
- mlmm_toolkit-0.3.0/docs/concepts.md +328 -0
- mlmm_toolkit-0.3.0/docs/conf.py +145 -0
- mlmm_toolkit-0.3.0/docs/define-layer.md +76 -0
- mlmm_toolkit-0.3.0/docs/device-hpc.md +197 -0
- mlmm_toolkit-0.3.0/docs/dft.md +138 -0
- mlmm_toolkit-0.3.0/docs/energy-diagram.md +58 -0
- mlmm_toolkit-0.3.0/docs/extract.md +228 -0
- mlmm_toolkit-0.3.0/docs/fix-altloc.md +121 -0
- mlmm_toolkit-0.3.0/docs/freq.md +163 -0
- mlmm_toolkit-0.3.0/docs/getting-started.md +232 -0
- mlmm_toolkit-0.3.0/docs/glossary.md +147 -0
- mlmm_toolkit-0.3.0/docs/index.md +159 -0
- mlmm_toolkit-0.3.0/docs/irc.md +144 -0
- mlmm_toolkit-0.3.0/docs/ja/add-elem-info.md +64 -0
- mlmm_toolkit-0.3.0/docs/ja/all.md +311 -0
- mlmm_toolkit-0.3.0/docs/ja/architecture.md +379 -0
- mlmm_toolkit-0.3.0/docs/ja/backends.md +182 -0
- mlmm_toolkit-0.3.0/docs/ja/bond-summary.md +67 -0
- mlmm_toolkit-0.3.0/docs/ja/cli-conventions.md +345 -0
- mlmm_toolkit-0.3.0/docs/ja/concepts.md +318 -0
- mlmm_toolkit-0.3.0/docs/ja/define-layer.md +78 -0
- mlmm_toolkit-0.3.0/docs/ja/device-hpc.md +207 -0
- mlmm_toolkit-0.3.0/docs/ja/dft.md +139 -0
- mlmm_toolkit-0.3.0/docs/ja/energy-diagram.md +58 -0
- mlmm_toolkit-0.3.0/docs/ja/extract.md +242 -0
- mlmm_toolkit-0.3.0/docs/ja/fix-altloc.md +134 -0
- mlmm_toolkit-0.3.0/docs/ja/freq.md +167 -0
- mlmm_toolkit-0.3.0/docs/ja/getting-started.md +564 -0
- mlmm_toolkit-0.3.0/docs/ja/glossary.md +151 -0
- mlmm_toolkit-0.3.0/docs/ja/index.md +305 -0
- mlmm_toolkit-0.3.0/docs/ja/irc.md +188 -0
- mlmm_toolkit-0.3.0/docs/ja/json-output.md +209 -0
- mlmm_toolkit-0.3.0/docs/ja/mcp_server.md +110 -0
- mlmm_toolkit-0.3.0/docs/ja/mlmm-calc.md +138 -0
- mlmm_toolkit-0.3.0/docs/ja/mm-parm.md +83 -0
- mlmm_toolkit-0.3.0/docs/ja/oniom-export.md +78 -0
- mlmm_toolkit-0.3.0/docs/ja/oniom-gaussian.md +68 -0
- mlmm_toolkit-0.3.0/docs/ja/oniom-import.md +73 -0
- mlmm_toolkit-0.3.0/docs/ja/oniom-orca.md +70 -0
- mlmm_toolkit-0.3.0/docs/ja/opt.md +288 -0
- mlmm_toolkit-0.3.0/docs/ja/output-layout.md +85 -0
- mlmm_toolkit-0.3.0/docs/ja/path-opt.md +125 -0
- mlmm_toolkit-0.3.0/docs/ja/path-search.md +152 -0
- mlmm_toolkit-0.3.0/docs/ja/python-api.md +159 -0
- mlmm_toolkit-0.3.0/docs/ja/quickstart-all.md +37 -0
- mlmm_toolkit-0.3.0/docs/ja/quickstart-scan-spec.md +62 -0
- mlmm_toolkit-0.3.0/docs/ja/quickstart-tsopt-freq.md +50 -0
- mlmm_toolkit-0.3.0/docs/ja/recipes-common-errors.md +87 -0
- mlmm_toolkit-0.3.0/docs/ja/reproducibility.md +47 -0
- mlmm_toolkit-0.3.0/docs/ja/scan.md +269 -0
- mlmm_toolkit-0.3.0/docs/ja/scan2d.md +215 -0
- mlmm_toolkit-0.3.0/docs/ja/scan3d.md +194 -0
- mlmm_toolkit-0.3.0/docs/ja/sp.md +94 -0
- mlmm_toolkit-0.3.0/docs/ja/trj2fig.md +71 -0
- mlmm_toolkit-0.3.0/docs/ja/troubleshooting.md +577 -0
- mlmm_toolkit-0.3.0/docs/ja/tsopt.md +322 -0
- mlmm_toolkit-0.3.0/docs/ja/yaml-reference.md +656 -0
- mlmm_toolkit-0.3.0/docs/json-output.md +279 -0
- mlmm_toolkit-0.3.0/docs/mcp_server.md +131 -0
- mlmm_toolkit-0.3.0/docs/mlmm-calc.md +127 -0
- mlmm_toolkit-0.3.0/docs/mlmm_toolkit_overview.png +0 -0
- mlmm_toolkit-0.3.0/docs/mm-parm.md +83 -0
- mlmm_toolkit-0.3.0/docs/oniom-export.md +78 -0
- mlmm_toolkit-0.3.0/docs/oniom-gaussian.md +70 -0
- mlmm_toolkit-0.3.0/docs/oniom-import.md +74 -0
- mlmm_toolkit-0.3.0/docs/oniom-orca.md +72 -0
- mlmm_toolkit-0.3.0/docs/opt.md +156 -0
- mlmm_toolkit-0.3.0/docs/output-layout.md +86 -0
- mlmm_toolkit-0.3.0/docs/path-opt.md +125 -0
- mlmm_toolkit-0.3.0/docs/path-search.md +139 -0
- mlmm_toolkit-0.3.0/docs/python-api.md +161 -0
- mlmm_toolkit-0.3.0/docs/quickstart-all.md +40 -0
- mlmm_toolkit-0.3.0/docs/quickstart-scan-spec.md +62 -0
- mlmm_toolkit-0.3.0/docs/quickstart-tsopt-freq.md +50 -0
- mlmm_toolkit-0.3.0/docs/recipes-common-errors.md +94 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/add_elem_info.md +22 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/all.md +250 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/bond_summary.md +26 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/define_layer.md +32 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/dft.md +104 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/energy_diagram.md +28 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/extract.md +61 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/fix_altloc.md +31 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/freq.md +148 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/index.md +56 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/irc.md +138 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/mm_parm.md +40 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/oniom_export.md +53 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/oniom_import.md +24 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/opt.md +171 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/path_opt.md +142 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/path_search.md +151 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/scan.md +152 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/scan2d.md +139 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/scan3d.md +142 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/sp.md +115 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/trj2fig.md +31 -0
- mlmm_toolkit-0.3.0/docs/reference/commands/tsopt.md +175 -0
- mlmm_toolkit-0.3.0/docs/reference/yaml.md +122 -0
- mlmm_toolkit-0.3.0/docs/reproducibility.md +77 -0
- mlmm_toolkit-0.3.0/docs/scan.md +264 -0
- mlmm_toolkit-0.3.0/docs/scan2d.md +215 -0
- mlmm_toolkit-0.3.0/docs/scan3d.md +202 -0
- mlmm_toolkit-0.3.0/docs/sp.md +92 -0
- mlmm_toolkit-0.3.0/docs/trj2fig.md +76 -0
- mlmm_toolkit-0.3.0/docs/troubleshooting.md +175 -0
- mlmm_toolkit-0.3.0/docs/tsopt.md +245 -0
- mlmm_toolkit-0.3.0/docs/yaml-reference.md +680 -0
- mlmm_toolkit-0.3.0/examples/mcp_client_config.json +15 -0
- mlmm_toolkit-0.3.0/examples/toy_system/opt_ase.py +22 -0
- mlmm_toolkit-0.3.0/examples/toy_system/run.sh +100 -0
- mlmm_toolkit-0.3.0/examples/toy_system/test_core.py +25 -0
- mlmm_toolkit-0.3.0/hessian_ff/README.md +65 -0
- mlmm_toolkit-0.3.0/hessian_ff/native/loader.py +360 -0
- mlmm_toolkit-0.3.0/mlmm/__init__.py +37 -0
- mlmm_toolkit-0.3.0/mlmm/_version.py +24 -0
- mlmm_toolkit-0.3.0/mlmm/backends/__init__.py +161 -0
- mlmm_toolkit-0.3.0/mlmm/backends/_determinism.py +109 -0
- mlmm_toolkit-0.3.0/mlmm/backends/custom.py +144 -0
- mlmm_toolkit-0.3.0/mlmm/backends/mlmm_calc.py +2608 -0
- mlmm_toolkit-0.3.0/mlmm/backends/xtb_embedcharge_correction.py +485 -0
- mlmm_toolkit-0.3.0/mlmm/cli/__init__.py +17 -0
- mlmm_toolkit-0.3.0/mlmm/cli/app.py +948 -0
- mlmm_toolkit-0.3.0/mlmm/cli/bool_compat.py +252 -0
- mlmm_toolkit-0.3.0/mlmm/cli/common_options.py +377 -0
- mlmm_toolkit-0.3.0/mlmm/cli/decorators.py +177 -0
- mlmm_toolkit-0.3.0/mlmm/cli/default_group.py +441 -0
- mlmm_toolkit-0.3.0/mlmm/cli/help_pages.py +75 -0
- mlmm_toolkit-0.3.0/mlmm/core/__init__.py +14 -0
- mlmm_toolkit-0.3.0/mlmm/core/calc_eval.py +51 -0
- mlmm_toolkit-0.3.0/mlmm/core/defaults.py +428 -0
- mlmm_toolkit-0.3.0/mlmm/core/logging.py +58 -0
- mlmm_toolkit-0.3.0/mlmm/core/residue_data.py +127 -0
- mlmm_toolkit-0.3.0/mlmm/core/utils.py +3220 -0
- mlmm_toolkit-0.3.0/mlmm/domain/__init__.py +12 -0
- mlmm_toolkit-0.3.0/mlmm/domain/add_elem_info.py +359 -0
- mlmm_toolkit-0.3.0/mlmm/domain/bond_changes.py +260 -0
- mlmm_toolkit-0.3.0/mlmm/domain/bond_summary.py +150 -0
- mlmm_toolkit-0.3.0/mlmm/io/__init__.py +13 -0
- mlmm_toolkit-0.3.0/mlmm/io/energy_diagram.py +269 -0
- mlmm_toolkit-0.3.0/mlmm/io/hessian_calc.py +142 -0
- mlmm_toolkit-0.3.0/mlmm/io/pdb_fix.py +407 -0
- mlmm_toolkit-0.3.0/mlmm/io/summary.py +859 -0
- mlmm_toolkit-0.3.0/mlmm/io/trj2fig.py +443 -0
- mlmm_toolkit-0.3.0/mlmm/mcp/__init__.py +25 -0
- mlmm_toolkit-0.3.0/mlmm/mcp/_runner.py +208 -0
- mlmm_toolkit-0.3.0/mlmm/mcp/_tools.py +882 -0
- mlmm_toolkit-0.3.0/mlmm/mcp/server.py +38 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/__init__.py +23 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/_all_helpers.py +463 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/align_freeze.py +586 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/all.py +4425 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/define_layer.py +560 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/dft.py +1341 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/extract.py +2279 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/freq.py +1679 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/irc.py +896 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/mm_parm.py +1079 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/oniom_export.py +2027 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/oniom_import.py +457 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/opt.py +1908 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/path_opt.py +1601 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/path_search.py +2381 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/restraints.py +133 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/scan.py +1127 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/scan2d.py +1186 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/scan3d.py +1246 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/scan_common.py +179 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/sp.py +473 -0
- mlmm_toolkit-0.3.0/mlmm/workflows/tsopt.py +3192 -0
- mlmm_toolkit-0.3.0/mlmm_toolkit.egg-info/PKG-INFO +926 -0
- mlmm_toolkit-0.3.0/mlmm_toolkit.egg-info/SOURCES.txt +459 -0
- mlmm_toolkit-0.3.0/mlmm_toolkit.egg-info/entry_points.txt +3 -0
- mlmm_toolkit-0.3.0/mlmm_toolkit.egg-info/requires.txt +55 -0
- mlmm_toolkit-0.3.0/pyproject.toml +128 -0
- mlmm_toolkit-0.3.0/pysisyphus/Geometry.py +1755 -0
- mlmm_toolkit-0.3.0/pysisyphus/README.md +73 -0
- mlmm_toolkit-0.3.0/pysisyphus/__init__.py +13 -0
- mlmm_toolkit-0.3.0/pysisyphus/_array.py +79 -0
- mlmm_toolkit-0.3.0/pysisyphus/calculators/__init__.py +26 -0
- mlmm_toolkit-0.3.0/pysisyphus/cos/ChainOfStates.py +732 -0
- mlmm_toolkit-0.3.0/pysisyphus/cos/GrowingString.py +508 -0
- mlmm_toolkit-0.3.0/pysisyphus/cos/__init__.py +15 -0
- mlmm_toolkit-0.3.0/pysisyphus/elem_data.py +3478 -0
- mlmm_toolkit-0.3.0/pysisyphus/helpers.py +624 -0
- mlmm_toolkit-0.3.0/pysisyphus/intcoords/logging_conf.py +10 -0
- mlmm_toolkit-0.3.0/pysisyphus/intcoords/setup.py +965 -0
- mlmm_toolkit-0.3.0/pysisyphus/io/pdb.py +301 -0
- mlmm_toolkit-0.3.0/pysisyphus/irc/EulerPC.py +362 -0
- mlmm_toolkit-0.3.0/pysisyphus/irc/IRC.py +917 -0
- mlmm_toolkit-0.3.0/pysisyphus/irc/Instanton.py +307 -0
- mlmm_toolkit-0.3.0/pysisyphus/irc/__init__.py +15 -0
- mlmm_toolkit-0.3.0/pysisyphus/modefollow/__init__.py +7 -0
- mlmm_toolkit-0.3.0/pysisyphus/optimizers/HessianOptimizer.py +1270 -0
- mlmm_toolkit-0.3.0/pysisyphus/optimizers/Optimizer.py +1130 -0
- mlmm_toolkit-0.3.0/pysisyphus/optimizers/__init__.py +15 -0
- mlmm_toolkit-0.3.0/pysisyphus/optimizers/gdiis.py +281 -0
- mlmm_toolkit-0.3.0/pysisyphus/optimizers/hessian_updates.py +417 -0
- mlmm_toolkit-0.3.0/pysisyphus/optimizers/restrict_step.py +145 -0
- mlmm_toolkit-0.3.0/pysisyphus/stocastic/__init__.py +22 -0
- mlmm_toolkit-0.3.0/pysisyphus/tsoptimizers/RSPRFOptimizer.py +190 -0
- mlmm_toolkit-0.3.0/pysisyphus/tsoptimizers/TRIM.py +95 -0
- mlmm_toolkit-0.3.0/pysisyphus/tsoptimizers/TSHessianOptimizer.py +546 -0
- mlmm_toolkit-0.3.0/pysisyphus/tsoptimizers/__init__.py +23 -0
- mlmm_toolkit-0.3.0/skills/README.md +49 -0
- mlmm_toolkit-0.3.0/skills/mlmm-architecture/SKILL.md +78 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/SKILL.md +157 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/add-elem-info.md +62 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/all-endpoint-mep.md +126 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/all-scan-list.md +150 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/all-ts-only.md +185 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/all.md +170 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/bond-summary.md +77 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/define-layer.md +102 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/dft.md +145 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/energy-diagram.md +54 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/extract.md +113 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/fix-altloc.md +64 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/freq.md +134 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/irc.md +138 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/mm-parm.md +144 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/oniom-export.md +102 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/oniom-import.md +85 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/opt.md +108 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/path-opt.md +100 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/path-search.md +128 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/scan.md +106 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/scan2d.md +90 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/scan3d.md +69 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/sp.md +92 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/trj2fig.md +61 -0
- mlmm_toolkit-0.3.0/skills/mlmm-cli/tsopt.md +149 -0
- mlmm_toolkit-0.3.0/skills/mlmm-env-detect/SKILL.md +178 -0
- mlmm_toolkit-0.3.0/skills/mlmm-hpc/SKILL.md +214 -0
- mlmm_toolkit-0.3.0/skills/mlmm-hpc/dynamic-dispatch.md +179 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/SKILL.md +177 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/aimnet2.md +81 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/ambertools.md +84 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/core.md +120 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/dft.md +98 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/env-cuda.md +162 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/mace.md +95 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/orb.md +95 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/uma.md +112 -0
- mlmm_toolkit-0.3.0/skills/mlmm-install-backends/xtb.md +81 -0
- mlmm_toolkit-0.3.0/skills/mlmm-mcp/SKILL.md +123 -0
- mlmm_toolkit-0.3.0/skills/mlmm-overview/SKILL.md +153 -0
- mlmm_toolkit-0.3.0/skills/mlmm-structure-io/SKILL.md +139 -0
- mlmm_toolkit-0.3.0/skills/mlmm-structure-io/charge-multiplicity.md +176 -0
- mlmm_toolkit-0.3.0/skills/mlmm-structure-io/gjf.md +88 -0
- mlmm_toolkit-0.3.0/skills/mlmm-structure-io/parm7.md +118 -0
- mlmm_toolkit-0.3.0/skills/mlmm-structure-io/pdb.md +176 -0
- mlmm_toolkit-0.3.0/skills/mlmm-structure-io/xyz.md +138 -0
- mlmm_toolkit-0.3.0/skills/mlmm-ts-strategy/SKILL.md +122 -0
- mlmm_toolkit-0.3.0/skills/mlmm-workflows-output/SKILL.md +379 -0
- mlmm_toolkit-0.3.0/tests/README.md +28 -0
- mlmm_toolkit-0.3.0/tests/conftest.py +25 -0
- mlmm_toolkit-0.3.0/tests/smoke/check_frozen_atoms.py +42 -0
- mlmm_toolkit-0.3.0/tests/smoke/p_complex.parm7 +1346 -0
- mlmm_toolkit-0.3.0/tests/smoke/p_complex_layered.pdb +125 -0
- mlmm_toolkit-0.3.0/tests/smoke/pocket_r.pdb +48 -0
- mlmm_toolkit-0.3.0/tests/test_all_helpers.py +263 -0
- mlmm_toolkit-0.3.0/tests/test_all_layer_honor.py +81 -0
- mlmm_toolkit-0.3.0/tests/test_array_shim_equivalence.py +156 -0
- mlmm_toolkit-0.3.0/tests/test_bond_changes.py +127 -0
- mlmm_toolkit-0.3.0/tests/test_bool_compat_cli.py +117 -0
- mlmm_toolkit-0.3.0/tests/test_cli_feature_regressions.py +166 -0
- mlmm_toolkit-0.3.0/tests/test_cli_help.py +201 -0
- mlmm_toolkit-0.3.0/tests/test_cli_utils.py +53 -0
- mlmm_toolkit-0.3.0/tests/test_custom_calc_file.py +99 -0
- mlmm_toolkit-0.3.0/tests/test_default_group.py +204 -0
- mlmm_toolkit-0.3.0/tests/test_defaults.py +78 -0
- mlmm_toolkit-0.3.0/tests/test_e2e_minimal.py +102 -0
- mlmm_toolkit-0.3.0/tests/test_error_envelope.py +48 -0
- mlmm_toolkit-0.3.0/tests/test_error_handling.py +107 -0
- mlmm_toolkit-0.3.0/tests/test_extract.py +220 -0
- mlmm_toolkit-0.3.0/tests/test_freeze_noncart_geometry.py +100 -0
- mlmm_toolkit-0.3.0/tests/test_freq_active_dof.py +35 -0
- mlmm_toolkit-0.3.0/tests/test_help_grouping.py +25 -0
- mlmm_toolkit-0.3.0/tests/test_imports.py +34 -0
- mlmm_toolkit-0.3.0/tests/test_mcp_runner.py +36 -0
- mlmm_toolkit-0.3.0/tests/test_mlmm_calc_serial_gap.py +60 -0
- mlmm_toolkit-0.3.0/tests/test_mm_parm_preflight.py +81 -0
- mlmm_toolkit-0.3.0/tests/test_opt.py +97 -0
- mlmm_toolkit-0.3.0/tests/test_precision_dispatch.py +58 -0
- mlmm_toolkit-0.3.0/tests/test_preflight.py +62 -0
- mlmm_toolkit-0.3.0/tests/test_scan_oniom_smoke.py +416 -0
- mlmm_toolkit-0.3.0/tests/test_summary_log.py +67 -0
- mlmm_toolkit-0.3.0/tests/test_symmetrize.py +49 -0
- mlmm_toolkit-0.3.0/tests/test_utils.py +290 -0
- mlmm_toolkit-0.3.0/tests/test_write_result_json.py +62 -0
- mlmm_toolkit-0.3.0/thermoanalysis/README.md +46 -0
- mlmm_toolkit-0.2.7/.github/workflows/docs_quality.yml +0 -42
- mlmm_toolkit-0.2.7/.github/workflows/pytest.yml +0 -43
- mlmm_toolkit-0.2.7/.github/workflows/smoke_test.yml +0 -125
- mlmm_toolkit-0.2.7/.gitignore +0 -57
- mlmm_toolkit-0.2.7/CHANGELOG.md +0 -111
- mlmm_toolkit-0.2.7/CONTRIBUTING.md +0 -47
- mlmm_toolkit-0.2.7/MANIFEST.in +0 -9
- mlmm_toolkit-0.2.7/PKG-INFO +0 -1171
- mlmm_toolkit-0.2.7/README.md +0 -422
- mlmm_toolkit-0.2.7/THIRD_PARTY_NOTICES.txt +0 -57
- mlmm_toolkit-0.2.7/docs/add-elem-info.md +0 -66
- mlmm_toolkit-0.2.7/docs/all.md +0 -385
- mlmm_toolkit-0.2.7/docs/bond-summary.md +0 -68
- mlmm_toolkit-0.2.7/docs/cli-conventions.md +0 -316
- mlmm_toolkit-0.2.7/docs/concepts.md +0 -313
- mlmm_toolkit-0.2.7/docs/conf.py +0 -154
- mlmm_toolkit-0.2.7/docs/define-layer.md +0 -69
- mlmm_toolkit-0.2.7/docs/device-hpc.md +0 -176
- mlmm_toolkit-0.2.7/docs/dft.md +0 -149
- mlmm_toolkit-0.2.7/docs/energy-diagram.md +0 -53
- mlmm_toolkit-0.2.7/docs/extract.md +0 -266
- mlmm_toolkit-0.2.7/docs/fix-altloc.md +0 -152
- mlmm_toolkit-0.2.7/docs/freq.md +0 -151
- mlmm_toolkit-0.2.7/docs/getting-started.md +0 -598
- mlmm_toolkit-0.2.7/docs/glossary.md +0 -151
- mlmm_toolkit-0.2.7/docs/index.md +0 -344
- mlmm_toolkit-0.2.7/docs/init.md +0 -25
- mlmm_toolkit-0.2.7/docs/irc.md +0 -178
- mlmm_toolkit-0.2.7/docs/ja/add-elem-info.md +0 -60
- mlmm_toolkit-0.2.7/docs/ja/all.md +0 -386
- mlmm_toolkit-0.2.7/docs/ja/bond-summary.md +0 -68
- mlmm_toolkit-0.2.7/docs/ja/cli-conventions.md +0 -318
- mlmm_toolkit-0.2.7/docs/ja/concepts.md +0 -306
- mlmm_toolkit-0.2.7/docs/ja/define-layer.md +0 -75
- mlmm_toolkit-0.2.7/docs/ja/device-hpc.md +0 -182
- mlmm_toolkit-0.2.7/docs/ja/dft.md +0 -151
- mlmm_toolkit-0.2.7/docs/ja/energy-diagram.md +0 -55
- mlmm_toolkit-0.2.7/docs/ja/extract.md +0 -268
- mlmm_toolkit-0.2.7/docs/ja/fix-altloc.md +0 -152
- mlmm_toolkit-0.2.7/docs/ja/freq.md +0 -154
- mlmm_toolkit-0.2.7/docs/ja/getting-started.md +0 -572
- mlmm_toolkit-0.2.7/docs/ja/glossary.md +0 -151
- mlmm_toolkit-0.2.7/docs/ja/index.md +0 -295
- mlmm_toolkit-0.2.7/docs/ja/init.md +0 -27
- mlmm_toolkit-0.2.7/docs/ja/irc.md +0 -185
- mlmm_toolkit-0.2.7/docs/ja/json-output.md +0 -183
- mlmm_toolkit-0.2.7/docs/ja/mlmm-calc.md +0 -138
- mlmm_toolkit-0.2.7/docs/ja/mm-parm.md +0 -87
- mlmm_toolkit-0.2.7/docs/ja/oniom-export.md +0 -38
- mlmm_toolkit-0.2.7/docs/ja/oniom-gaussian.md +0 -78
- mlmm_toolkit-0.2.7/docs/ja/oniom-import.md +0 -70
- mlmm_toolkit-0.2.7/docs/ja/oniom-orca.md +0 -82
- mlmm_toolkit-0.2.7/docs/ja/opt.md +0 -286
- mlmm_toolkit-0.2.7/docs/ja/path-opt.md +0 -162
- mlmm_toolkit-0.2.7/docs/ja/path-search.md +0 -158
- mlmm_toolkit-0.2.7/docs/ja/pysis.md +0 -172
- mlmm_toolkit-0.2.7/docs/ja/python-api.md +0 -179
- mlmm_toolkit-0.2.7/docs/ja/quickstart-all.md +0 -37
- mlmm_toolkit-0.2.7/docs/ja/quickstart-scan-spec.md +0 -61
- mlmm_toolkit-0.2.7/docs/ja/quickstart-tsopt-freq.md +0 -50
- mlmm_toolkit-0.2.7/docs/ja/recipes-common-errors.md +0 -59
- mlmm_toolkit-0.2.7/docs/ja/scan.md +0 -267
- mlmm_toolkit-0.2.7/docs/ja/scan2d.md +0 -222
- mlmm_toolkit-0.2.7/docs/ja/scan3d.md +0 -224
- mlmm_toolkit-0.2.7/docs/ja/trj2fig.md +0 -78
- mlmm_toolkit-0.2.7/docs/ja/troubleshooting.md +0 -527
- mlmm_toolkit-0.2.7/docs/ja/tsopt.md +0 -239
- mlmm_toolkit-0.2.7/docs/ja/yaml-reference.md +0 -626
- mlmm_toolkit-0.2.7/docs/json-output.md +0 -255
- mlmm_toolkit-0.2.7/docs/mlmm-calc.md +0 -134
- mlmm_toolkit-0.2.7/docs/mlmm_toolkit_overview.png +0 -0
- mlmm_toolkit-0.2.7/docs/mm-parm.md +0 -84
- mlmm_toolkit-0.2.7/docs/oniom-export.md +0 -36
- mlmm_toolkit-0.2.7/docs/oniom-gaussian.md +0 -75
- mlmm_toolkit-0.2.7/docs/oniom-import.md +0 -68
- mlmm_toolkit-0.2.7/docs/oniom-orca.md +0 -79
- mlmm_toolkit-0.2.7/docs/opt.md +0 -282
- mlmm_toolkit-0.2.7/docs/path-opt.md +0 -163
- mlmm_toolkit-0.2.7/docs/path-search.md +0 -155
- mlmm_toolkit-0.2.7/docs/pysis.md +0 -172
- mlmm_toolkit-0.2.7/docs/python-api.md +0 -179
- mlmm_toolkit-0.2.7/docs/quickstart-all.md +0 -37
- mlmm_toolkit-0.2.7/docs/quickstart-scan-spec.md +0 -59
- mlmm_toolkit-0.2.7/docs/quickstart-tsopt-freq.md +0 -50
- mlmm_toolkit-0.2.7/docs/recipes-common-errors.md +0 -59
- mlmm_toolkit-0.2.7/docs/reference/commands/add_elem_info.md +0 -18
- mlmm_toolkit-0.2.7/docs/reference/commands/all.md +0 -211
- mlmm_toolkit-0.2.7/docs/reference/commands/bond_summary.md +0 -21
- mlmm_toolkit-0.2.7/docs/reference/commands/define_layer.md +0 -28
- mlmm_toolkit-0.2.7/docs/reference/commands/dft.md +0 -87
- mlmm_toolkit-0.2.7/docs/reference/commands/energy_diagram.md +0 -19
- mlmm_toolkit-0.2.7/docs/reference/commands/extract.md +0 -52
- mlmm_toolkit-0.2.7/docs/reference/commands/fix_altloc.md +0 -27
- mlmm_toolkit-0.2.7/docs/reference/commands/freq.md +0 -117
- mlmm_toolkit-0.2.7/docs/reference/commands/index.md +0 -54
- mlmm_toolkit-0.2.7/docs/reference/commands/irc.md +0 -104
- mlmm_toolkit-0.2.7/docs/reference/commands/mm_parm.md +0 -35
- mlmm_toolkit-0.2.7/docs/reference/commands/oniom_export.md +0 -44
- mlmm_toolkit-0.2.7/docs/reference/commands/oniom_import.md +0 -21
- mlmm_toolkit-0.2.7/docs/reference/commands/opt.md +0 -123
- mlmm_toolkit-0.2.7/docs/reference/commands/path_opt.md +0 -105
- mlmm_toolkit-0.2.7/docs/reference/commands/path_search.md +0 -116
- mlmm_toolkit-0.2.7/docs/reference/commands/pysis.md +0 -20
- mlmm_toolkit-0.2.7/docs/reference/commands/scan.md +0 -117
- mlmm_toolkit-0.2.7/docs/reference/commands/scan2d.md +0 -106
- mlmm_toolkit-0.2.7/docs/reference/commands/scan3d.md +0 -107
- mlmm_toolkit-0.2.7/docs/reference/commands/trj2fig.md +0 -27
- mlmm_toolkit-0.2.7/docs/reference/commands/tsopt.md +0 -137
- mlmm_toolkit-0.2.7/docs/reference/yaml.md +0 -122
- mlmm_toolkit-0.2.7/docs/scan.md +0 -279
- mlmm_toolkit-0.2.7/docs/scan2d.md +0 -217
- mlmm_toolkit-0.2.7/docs/scan3d.md +0 -226
- mlmm_toolkit-0.2.7/docs/trj2fig.md +0 -79
- mlmm_toolkit-0.2.7/docs/troubleshooting.md +0 -511
- mlmm_toolkit-0.2.7/docs/tsopt.md +0 -237
- mlmm_toolkit-0.2.7/docs/yaml-reference.md +0 -654
- mlmm_toolkit-0.2.7/examples/toy_system/opt_ase.py +0 -22
- mlmm_toolkit-0.2.7/examples/toy_system/run.sh +0 -102
- mlmm_toolkit-0.2.7/examples/toy_system/test_core.py +0 -25
- mlmm_toolkit-0.2.7/hessian_ff/native/loader.py +0 -349
- mlmm_toolkit-0.2.7/mlmm/__init__.py +0 -36
- mlmm_toolkit-0.2.7/mlmm/_version.py +0 -24
- mlmm_toolkit-0.2.7/mlmm/add_elem_info.py +0 -374
- mlmm_toolkit-0.2.7/mlmm/advanced_help.py +0 -91
- mlmm_toolkit-0.2.7/mlmm/align_freeze_atoms.py +0 -601
- mlmm_toolkit-0.2.7/mlmm/all.py +0 -4022
- mlmm_toolkit-0.2.7/mlmm/bond_changes.py +0 -234
- mlmm_toolkit-0.2.7/mlmm/bond_summary.py +0 -92
- mlmm_toolkit-0.2.7/mlmm/bool_compat.py +0 -246
- mlmm_toolkit-0.2.7/mlmm/cli.py +0 -587
- mlmm_toolkit-0.2.7/mlmm/cli_utils.py +0 -166
- mlmm_toolkit-0.2.7/mlmm/default_group.py +0 -343
- mlmm_toolkit-0.2.7/mlmm/defaults.py +0 -468
- mlmm_toolkit-0.2.7/mlmm/define_layer.py +0 -526
- mlmm_toolkit-0.2.7/mlmm/dft.py +0 -1144
- mlmm_toolkit-0.2.7/mlmm/energy_diagram.py +0 -253
- mlmm_toolkit-0.2.7/mlmm/extract.py +0 -2315
- mlmm_toolkit-0.2.7/mlmm/fix_altloc.py +0 -464
- mlmm_toolkit-0.2.7/mlmm/freq.py +0 -1526
- mlmm_toolkit-0.2.7/mlmm/harmonic_constraints.py +0 -140
- mlmm_toolkit-0.2.7/mlmm/hessian_calc.py +0 -174
- mlmm_toolkit-0.2.7/mlmm/irc.py +0 -796
- mlmm_toolkit-0.2.7/mlmm/mlmm_calc.py +0 -2329
- mlmm_toolkit-0.2.7/mlmm/mm_parm.py +0 -945
- mlmm_toolkit-0.2.7/mlmm/oniom_export.py +0 -1989
- mlmm_toolkit-0.2.7/mlmm/oniom_import.py +0 -457
- mlmm_toolkit-0.2.7/mlmm/opt.py +0 -1876
- mlmm_toolkit-0.2.7/mlmm/path_opt.py +0 -1511
- mlmm_toolkit-0.2.7/mlmm/path_search.py +0 -2353
- mlmm_toolkit-0.2.7/mlmm/pysis_runner.py +0 -45
- mlmm_toolkit-0.2.7/mlmm/scan.py +0 -1163
- mlmm_toolkit-0.2.7/mlmm/scan2d.py +0 -1299
- mlmm_toolkit-0.2.7/mlmm/scan3d.py +0 -1355
- mlmm_toolkit-0.2.7/mlmm/scan_common.py +0 -184
- mlmm_toolkit-0.2.7/mlmm/summary_log.py +0 -816
- mlmm_toolkit-0.2.7/mlmm/trj2fig.py +0 -448
- mlmm_toolkit-0.2.7/mlmm/tsopt.py +0 -3073
- mlmm_toolkit-0.2.7/mlmm/utils.py +0 -2529
- mlmm_toolkit-0.2.7/mlmm/xtb_embedcharge_correction.py +0 -480
- mlmm_toolkit-0.2.7/mlmm_toolkit.egg-info/PKG-INFO +0 -1171
- mlmm_toolkit-0.2.7/mlmm_toolkit.egg-info/SOURCES.txt +0 -551
- mlmm_toolkit-0.2.7/mlmm_toolkit.egg-info/entry_points.txt +0 -2
- mlmm_toolkit-0.2.7/mlmm_toolkit.egg-info/requires.txt +0 -58
- mlmm_toolkit-0.2.7/pyproject.toml +0 -117
- mlmm_toolkit-0.2.7/pysisyphus/Geometry.py +0 -1667
- mlmm_toolkit-0.2.7/pysisyphus/TableFormatter.py +0 -63
- mlmm_toolkit-0.2.7/pysisyphus/__init__.py +0 -12
- mlmm_toolkit-0.2.7/pysisyphus/calculators/AFIR.py +0 -452
- mlmm_toolkit-0.2.7/pysisyphus/calculators/AnaPot.py +0 -20
- mlmm_toolkit-0.2.7/pysisyphus/calculators/AnaPot2.py +0 -48
- mlmm_toolkit-0.2.7/pysisyphus/calculators/AnaPot3.py +0 -12
- mlmm_toolkit-0.2.7/pysisyphus/calculators/AnaPot4.py +0 -20
- mlmm_toolkit-0.2.7/pysisyphus/calculators/AnaPotBase.py +0 -337
- mlmm_toolkit-0.2.7/pysisyphus/calculators/AnaPotCBM.py +0 -25
- mlmm_toolkit-0.2.7/pysisyphus/calculators/AtomAtomTransTorque.py +0 -154
- mlmm_toolkit-0.2.7/pysisyphus/calculators/CFOUR.py +0 -250
- mlmm_toolkit-0.2.7/pysisyphus/calculators/CerjanMiller.py +0 -24
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Composite.py +0 -123
- mlmm_toolkit-0.2.7/pysisyphus/calculators/ConicalIntersection.py +0 -171
- mlmm_toolkit-0.2.7/pysisyphus/calculators/DFTBp.py +0 -430
- mlmm_toolkit-0.2.7/pysisyphus/calculators/DFTD3.py +0 -66
- mlmm_toolkit-0.2.7/pysisyphus/calculators/DFTD4.py +0 -84
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Dalton.py +0 -61
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Dummy.py +0 -20
- mlmm_toolkit-0.2.7/pysisyphus/calculators/EGO.py +0 -76
- mlmm_toolkit-0.2.7/pysisyphus/calculators/EnergyMin.py +0 -224
- mlmm_toolkit-0.2.7/pysisyphus/calculators/ExternalPotential.py +0 -264
- mlmm_toolkit-0.2.7/pysisyphus/calculators/FakeASE.py +0 -35
- mlmm_toolkit-0.2.7/pysisyphus/calculators/FourWellAnaPot.py +0 -28
- mlmm_toolkit-0.2.7/pysisyphus/calculators/FreeEndNEBPot.py +0 -39
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Gaussian09.py +0 -18
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Gaussian16.py +0 -726
- mlmm_toolkit-0.2.7/pysisyphus/calculators/HardSphere.py +0 -159
- mlmm_toolkit-0.2.7/pysisyphus/calculators/IDPPCalculator.py +0 -49
- mlmm_toolkit-0.2.7/pysisyphus/calculators/IPIClient.py +0 -133
- mlmm_toolkit-0.2.7/pysisyphus/calculators/IPIServer.py +0 -234
- mlmm_toolkit-0.2.7/pysisyphus/calculators/LEPSBase.py +0 -24
- mlmm_toolkit-0.2.7/pysisyphus/calculators/LEPSExpr.py +0 -139
- mlmm_toolkit-0.2.7/pysisyphus/calculators/LennardJones.py +0 -80
- mlmm_toolkit-0.2.7/pysisyphus/calculators/MOPAC.py +0 -219
- mlmm_toolkit-0.2.7/pysisyphus/calculators/MullerBrownSympyPot.py +0 -51
- mlmm_toolkit-0.2.7/pysisyphus/calculators/MultiCalc.py +0 -85
- mlmm_toolkit-0.2.7/pysisyphus/calculators/NFK.py +0 -45
- mlmm_toolkit-0.2.7/pysisyphus/calculators/OBabel.py +0 -87
- mlmm_toolkit-0.2.7/pysisyphus/calculators/ONIOMv2.py +0 -1129
- mlmm_toolkit-0.2.7/pysisyphus/calculators/ORCA.py +0 -893
- mlmm_toolkit-0.2.7/pysisyphus/calculators/ORCA5.py +0 -6
- mlmm_toolkit-0.2.7/pysisyphus/calculators/OpenMM.py +0 -88
- mlmm_toolkit-0.2.7/pysisyphus/calculators/OpenMolcas.py +0 -281
- mlmm_toolkit-0.2.7/pysisyphus/calculators/OverlapCalculator.py +0 -908
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Psi4.py +0 -218
- mlmm_toolkit-0.2.7/pysisyphus/calculators/PyPsi4.py +0 -37
- mlmm_toolkit-0.2.7/pysisyphus/calculators/PySCF.py +0 -341
- mlmm_toolkit-0.2.7/pysisyphus/calculators/PyXTB.py +0 -73
- mlmm_toolkit-0.2.7/pysisyphus/calculators/QCEngine.py +0 -106
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Rastrigin.py +0 -22
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Remote.py +0 -76
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Rosenbrock.py +0 -15
- mlmm_toolkit-0.2.7/pysisyphus/calculators/SocketCalc.py +0 -97
- mlmm_toolkit-0.2.7/pysisyphus/calculators/TIP3P.py +0 -111
- mlmm_toolkit-0.2.7/pysisyphus/calculators/TransTorque.py +0 -161
- mlmm_toolkit-0.2.7/pysisyphus/calculators/Turbomole.py +0 -965
- mlmm_toolkit-0.2.7/pysisyphus/calculators/VRIPot.py +0 -37
- mlmm_toolkit-0.2.7/pysisyphus/calculators/WFOWrapper.py +0 -333
- mlmm_toolkit-0.2.7/pysisyphus/calculators/WFOWrapper2.py +0 -341
- mlmm_toolkit-0.2.7/pysisyphus/calculators/XTB.py +0 -418
- mlmm_toolkit-0.2.7/pysisyphus/calculators/__init__.py +0 -81
- mlmm_toolkit-0.2.7/pysisyphus/calculators/cosmo_data.py +0 -139
- mlmm_toolkit-0.2.7/pysisyphus/calculators/parser.py +0 -150
- mlmm_toolkit-0.2.7/pysisyphus/color.py +0 -19
- mlmm_toolkit-0.2.7/pysisyphus/cos/AdaptiveNEB.py +0 -230
- mlmm_toolkit-0.2.7/pysisyphus/cos/ChainOfStates.py +0 -725
- mlmm_toolkit-0.2.7/pysisyphus/cos/FreeEndNEB.py +0 -25
- mlmm_toolkit-0.2.7/pysisyphus/cos/FreezingString.py +0 -103
- mlmm_toolkit-0.2.7/pysisyphus/cos/GrowingNT.py +0 -309
- mlmm_toolkit-0.2.7/pysisyphus/cos/GrowingString.py +0 -508
- mlmm_toolkit-0.2.7/pysisyphus/cos/NEB.py +0 -189
- mlmm_toolkit-0.2.7/pysisyphus/cos/SimpleZTS.py +0 -64
- mlmm_toolkit-0.2.7/pysisyphus/cos/__init__.py +0 -22
- mlmm_toolkit-0.2.7/pysisyphus/cos/stiffness.py +0 -199
- mlmm_toolkit-0.2.7/pysisyphus/drivers/__init__.py +0 -17
- mlmm_toolkit-0.2.7/pysisyphus/drivers/afir.py +0 -855
- mlmm_toolkit-0.2.7/pysisyphus/drivers/barriers.py +0 -271
- mlmm_toolkit-0.2.7/pysisyphus/drivers/birkholz.py +0 -138
- mlmm_toolkit-0.2.7/pysisyphus/drivers/cluster.py +0 -318
- mlmm_toolkit-0.2.7/pysisyphus/drivers/diabatization.py +0 -133
- mlmm_toolkit-0.2.7/pysisyphus/drivers/merge.py +0 -368
- mlmm_toolkit-0.2.7/pysisyphus/drivers/merge_mol2.py +0 -322
- mlmm_toolkit-0.2.7/pysisyphus/drivers/opt.py +0 -375
- mlmm_toolkit-0.2.7/pysisyphus/drivers/perf.py +0 -91
- mlmm_toolkit-0.2.7/pysisyphus/drivers/pka.py +0 -52
- mlmm_toolkit-0.2.7/pysisyphus/drivers/precon_pos_rot.py +0 -669
- mlmm_toolkit-0.2.7/pysisyphus/drivers/rates.py +0 -480
- mlmm_toolkit-0.2.7/pysisyphus/drivers/replace.py +0 -219
- mlmm_toolkit-0.2.7/pysisyphus/drivers/scan.py +0 -212
- mlmm_toolkit-0.2.7/pysisyphus/drivers/spectrum.py +0 -166
- mlmm_toolkit-0.2.7/pysisyphus/drivers/thermo.py +0 -31
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/Gaussian.py +0 -103
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/__init__.py +0 -20
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/colvars.py +0 -136
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/driver.py +0 -297
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/helpers.py +0 -256
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/lincs.py +0 -105
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/mdp.py +0 -364
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/rattle.py +0 -121
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/thermostats.py +0 -128
- mlmm_toolkit-0.2.7/pysisyphus/dynamics/wigner.py +0 -266
- mlmm_toolkit-0.2.7/pysisyphus/elem_data.py +0 -3473
- mlmm_toolkit-0.2.7/pysisyphus/exceptions.py +0 -2
- mlmm_toolkit-0.2.7/pysisyphus/filtertrj.py +0 -69
- mlmm_toolkit-0.2.7/pysisyphus/helpers.py +0 -623
- mlmm_toolkit-0.2.7/pysisyphus/init_logging.py +0 -50
- mlmm_toolkit-0.2.7/pysisyphus/intcoords/findiffs.py +0 -48
- mlmm_toolkit-0.2.7/pysisyphus/intcoords/generate_derivatives.py +0 -414
- mlmm_toolkit-0.2.7/pysisyphus/intcoords/logging_conf.py +0 -10
- mlmm_toolkit-0.2.7/pysisyphus/intcoords/mp_derivatives.py +0 -10836
- mlmm_toolkit-0.2.7/pysisyphus/intcoords/setup.py +0 -962
- mlmm_toolkit-0.2.7/pysisyphus/interpolate/Geodesic.py +0 -93
- mlmm_toolkit-0.2.7/pysisyphus/interpolate/IDPP.py +0 -55
- mlmm_toolkit-0.2.7/pysisyphus/interpolate/Interpolator.py +0 -116
- mlmm_toolkit-0.2.7/pysisyphus/interpolate/LST.py +0 -70
- mlmm_toolkit-0.2.7/pysisyphus/interpolate/Redund.py +0 -152
- mlmm_toolkit-0.2.7/pysisyphus/interpolate/__init__.py +0 -9
- mlmm_toolkit-0.2.7/pysisyphus/interpolate/helpers.py +0 -34
- mlmm_toolkit-0.2.7/pysisyphus/io/aomix.py +0 -178
- mlmm_toolkit-0.2.7/pysisyphus/io/cube.py +0 -220
- mlmm_toolkit-0.2.7/pysisyphus/io/fchk.py +0 -184
- mlmm_toolkit-0.2.7/pysisyphus/io/molden.py +0 -293
- mlmm_toolkit-0.2.7/pysisyphus/io/orca.py +0 -189
- mlmm_toolkit-0.2.7/pysisyphus/io/pdb.py +0 -299
- mlmm_toolkit-0.2.7/pysisyphus/io/psf.py +0 -79
- mlmm_toolkit-0.2.7/pysisyphus/io/pubchem.py +0 -31
- mlmm_toolkit-0.2.7/pysisyphus/io/sdf.py +0 -29
- mlmm_toolkit-0.2.7/pysisyphus/irc/DampedVelocityVerlet.py +0 -134
- mlmm_toolkit-0.2.7/pysisyphus/irc/Euler.py +0 -22
- mlmm_toolkit-0.2.7/pysisyphus/irc/EulerPC.py +0 -349
- mlmm_toolkit-0.2.7/pysisyphus/irc/GonzalezSchlegel.py +0 -187
- mlmm_toolkit-0.2.7/pysisyphus/irc/IMKMod.py +0 -164
- mlmm_toolkit-0.2.7/pysisyphus/irc/IRC.py +0 -888
- mlmm_toolkit-0.2.7/pysisyphus/irc/IRCDummy.py +0 -10
- mlmm_toolkit-0.2.7/pysisyphus/irc/Instanton.py +0 -307
- mlmm_toolkit-0.2.7/pysisyphus/irc/LQA.py +0 -53
- mlmm_toolkit-0.2.7/pysisyphus/irc/ModeKill.py +0 -136
- mlmm_toolkit-0.2.7/pysisyphus/irc/ParamPlot.py +0 -53
- mlmm_toolkit-0.2.7/pysisyphus/irc/RK4.py +0 -36
- mlmm_toolkit-0.2.7/pysisyphus/irc/__init__.py +0 -31
- mlmm_toolkit-0.2.7/pysisyphus/irc/initial_displ.py +0 -219
- mlmm_toolkit-0.2.7/pysisyphus/line_searches/Backtracking.py +0 -88
- mlmm_toolkit-0.2.7/pysisyphus/line_searches/HagerZhang.py +0 -184
- mlmm_toolkit-0.2.7/pysisyphus/line_searches/LineSearch.py +0 -232
- mlmm_toolkit-0.2.7/pysisyphus/line_searches/StrongWolfe.py +0 -108
- mlmm_toolkit-0.2.7/pysisyphus/line_searches/__init__.py +0 -9
- mlmm_toolkit-0.2.7/pysisyphus/line_searches/interpol.py +0 -15
- mlmm_toolkit-0.2.7/pysisyphus/modefollow/__init__.py +0 -10
- mlmm_toolkit-0.2.7/pysisyphus/modefollow/davidson.py +0 -199
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/BFGS.py +0 -99
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/ConjugateGradient.py +0 -98
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/CubicNewton.py +0 -75
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/FIRE.py +0 -113
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/HessianOptimizer.py +0 -1176
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/LayerOpt.py +0 -411
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/MicroOptimizer.py +0 -169
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/NCOptimizer.py +0 -90
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/Optimizer.py +0 -1086
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/PreconLBFGS.py +0 -260
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/PreconSteepestDescent.py +0 -7
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/QuickMin.py +0 -74
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/RSA.py +0 -99
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/StabilizedQNMethod.py +0 -248
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/SteepestDescent.py +0 -23
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/__init__.py +0 -41
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/cls_map.py +0 -58
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/gdiis.py +0 -280
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/hessian_updates.py +0 -355
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/precon.py +0 -153
- mlmm_toolkit-0.2.7/pysisyphus/optimizers/restrict_step.py +0 -24
- mlmm_toolkit-0.2.7/pysisyphus/pack.py +0 -172
- mlmm_toolkit-0.2.7/pysisyphus/peakdetect.py +0 -948
- mlmm_toolkit-0.2.7/pysisyphus/plot.py +0 -1031
- mlmm_toolkit-0.2.7/pysisyphus/run.py +0 -2106
- mlmm_toolkit-0.2.7/pysisyphus/socket_helper.py +0 -74
- mlmm_toolkit-0.2.7/pysisyphus/stocastic/__init__.py +0 -21
- mlmm_toolkit-0.2.7/pysisyphus/testing.py +0 -96
- mlmm_toolkit-0.2.7/pysisyphus/thermo.py +0 -156
- mlmm_toolkit-0.2.7/pysisyphus/trj.py +0 -824
- mlmm_toolkit-0.2.7/pysisyphus/tsoptimizers/RSPRFOptimizer.py +0 -182
- mlmm_toolkit-0.2.7/pysisyphus/tsoptimizers/TRIM.py +0 -59
- mlmm_toolkit-0.2.7/pysisyphus/tsoptimizers/TSHessianOptimizer.py +0 -463
- mlmm_toolkit-0.2.7/pysisyphus/tsoptimizers/__init__.py +0 -23
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/Basis.py +0 -239
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/DIIS.py +0 -76
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/__init__.py +0 -25
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/build_ext.py +0 -42
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/cart2sph.py +0 -190
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/diabatization.py +0 -304
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/excited_states.py +0 -435
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/gen_ints.py +0 -1811
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/helpers.py +0 -104
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/boys.py +0 -193
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/boys_table_N_64_xasym_27.1_step_0.01.npy +0 -0
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/cart_gto3d.py +0 -176
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/coulomb3d.py +0 -25928
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/diag_quadrupole3d.py +0 -10036
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/dipole3d.py +0 -8762
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/int2c2e3d.py +0 -7198
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/int3c2e3d_sph.py +0 -65040
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/kinetic3d.py +0 -8240
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/ovlp3d.py +0 -3777
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/quadrupole3d.py +0 -15054
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints/self_ovlp3d.py +0 -198
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/localization.py +0 -458
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/multipole.py +0 -159
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/normalization.py +0 -36
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/pop_analysis.py +0 -134
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/shells.py +0 -1171
- mlmm_toolkit-0.2.7/pysisyphus/wavefunction/wavefunction.py +0 -504
- mlmm_toolkit-0.2.7/pysisyphus/wrapper/__init__.py +0 -11
- mlmm_toolkit-0.2.7/pysisyphus/wrapper/exceptions.py +0 -2
- mlmm_toolkit-0.2.7/pysisyphus/wrapper/jmol.py +0 -120
- mlmm_toolkit-0.2.7/pysisyphus/wrapper/mwfn.py +0 -169
- mlmm_toolkit-0.2.7/pysisyphus/wrapper/packmol.py +0 -71
- mlmm_toolkit-0.2.7/pysisyphus/yaml_mods.py +0 -45
- mlmm_toolkit-0.2.7/scripts/check_all_scan_contract.py +0 -123
- mlmm_toolkit-0.2.7/scripts/check_intro_template.py +0 -100
- mlmm_toolkit-0.2.7/scripts/check_markdown_links.py +0 -122
- mlmm_toolkit-0.2.7/scripts/generate_reference.py +0 -297
- mlmm_toolkit-0.2.7/scripts/run_docs_quality.py +0 -75
- mlmm_toolkit-0.2.7/scripts/smoke_docs_commands.py +0 -293
- mlmm_toolkit-0.2.7/scripts/smoke_dump_trajectories.py +0 -239
- mlmm_toolkit-0.2.7/tests/README.md +0 -124
- mlmm_toolkit-0.2.7/tests/conftest.py +0 -11
- mlmm_toolkit-0.2.7/tests/smoke/p_complex.rst7 +0 -63
- mlmm_toolkit-0.2.7/tests/smoke/pocket_p.pdb +0 -63
- mlmm_toolkit-0.2.7/tests/smoke/pocket_r.pdb +0 -48
- mlmm_toolkit-0.2.7/tests/smoke/run.sh +0 -127
- mlmm_toolkit-0.2.7/tests/test_bool_compat_cli.py +0 -64
- mlmm_toolkit-0.2.7/tests/test_cli_feature_regressions.py +0 -116
- mlmm_toolkit-0.2.7/tests/test_cli_help.py +0 -201
- mlmm_toolkit-0.2.7/tests/test_cli_utils.py +0 -53
- mlmm_toolkit-0.2.7/tests/test_default_group.py +0 -204
- mlmm_toolkit-0.2.7/tests/test_defaults.py +0 -78
- mlmm_toolkit-0.2.7/tests/test_e2e_minimal.py +0 -102
- mlmm_toolkit-0.2.7/tests/test_error_handling.py +0 -103
- mlmm_toolkit-0.2.7/tests/test_extract.py +0 -170
- mlmm_toolkit-0.2.7/tests/test_imports.py +0 -34
- mlmm_toolkit-0.2.7/tests/test_mm_parm_preflight.py +0 -30
- mlmm_toolkit-0.2.7/tests/test_opt.py +0 -97
- mlmm_toolkit-0.2.7/tests/test_preflight.py +0 -62
- mlmm_toolkit-0.2.7/tests/test_scan_oniom_smoke.py +0 -386
- mlmm_toolkit-0.2.7/tests/test_summary_log.py +0 -67
- mlmm_toolkit-0.2.7/tests/test_utils.py +0 -267
- mlmm_toolkit-0.2.7/thermoanalysis/__init__.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/.github/workflows/docs.yml +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/.github/workflows/release.yml +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/LICENSE +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/docs/Makefile +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/docs/_static/custom.css +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/docs/_static/theme_toggle.js +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/docs/_templates/page.html +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/docs/make.bat +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/docs/requirements_docs.txt +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/methyltransferase/complex.parm7 +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/methyltransferase/complex.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/methyltransferase/complex.rst7 +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/methyltransferase/pocket.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/methyltransferase/r_layered.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/methyltransferase/run_all.sh +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/methyltransferase/run_stepwise.sh +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/toy_system/ml_region_p.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/toy_system/ml_region_r.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/toy_system/p_complex.parm7 +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/toy_system/p_complex.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/toy_system/p_complex.rst7 +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/toy_system/p_complex_layered.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/toy_system/r_complex.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/examples/toy_system/r_complex_layered.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/__init__.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/analytical_hessian.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/constants.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/forcefield.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/loaders.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/native/Makefile +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/native/__init__.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/native/analytical_hessian.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/native/analytical_hessian_ext.cpp +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/native/bonded.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/native/bonded_ext.cpp +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/native/nonbonded.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/native/nonbonded_ext.cpp +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/prmtop_parmed.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/system.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/terms/__init__.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/terms/angle.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/terms/bond.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/terms/cmap.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/terms/dihedral.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/terms/nonbonded.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/__init__.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/conftest.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/data/small/complex.parm7 +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/data/small/complex.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/data/small/complex.rst7 +0 -0
- {mlmm_toolkit-0.2.7/tests/smoke → mlmm_toolkit-0.3.0/hessian_ff/tests/data/small}/p_complex.parm7 +0 -0
- {mlmm_toolkit-0.2.7/tests/smoke → mlmm_toolkit-0.3.0/hessian_ff/tests/data/small}/p_complex_layered.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/test_coords_input.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/test_energy_force.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/test_hessian.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/test_smoke.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/tests/test_validation.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/hessian_ff/workflows.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/mlmm/__main__.py +0 -0
- {mlmm_toolkit-0.2.7/mlmm → mlmm_toolkit-0.3.0/mlmm/cli}/preflight.py +0 -0
- {mlmm_toolkit-0.2.7/mlmm → mlmm_toolkit-0.3.0/mlmm/io}/hessian_cache.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/mlmm/py.typed +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/mlmm_toolkit.egg-info/dependency_links.txt +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/mlmm_toolkit.egg-info/top_level.txt +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/LICENSE +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/TablePrinter.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/calculators/Calculator.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/calculators/Dimer.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/config.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/constants.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/cos/GrowingChainOfStates.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/helpers_pure.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Bend.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Bend2.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/BondedFragment.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Cartesian.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/CartesianCoords.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Coords.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/DLC.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/DistanceFunction.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/DummyImproper.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/DummyTorsion.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/LinearBend.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/LinearDisplacement.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/OutOfPlane.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/PrimTypes.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Primitive.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/RedundantCoords.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/RobustTorsion.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Rotation.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Stretch.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Torsion.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Torsion2.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/Translation.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/__init__.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/augment_bonds.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/derivatives.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/eval.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/exceptions.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/helpers.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/setup_fast.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/update.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/intcoords/valid.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/__init__.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/cjson.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/crd.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/hdf5.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/hessian.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/mol2.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/qcschema.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/xyz.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/io/zmat.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/irc/DWI.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/linalg.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/modefollow/NormalMode.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/modefollow/lanczos.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/optimizers/BacktrackingOptimizer.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/optimizers/LBFGS.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/optimizers/RFOptimizer.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/optimizers/StringOptimizer.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/optimizers/closures.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/optimizers/exceptions.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/optimizers/guess_hessians.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/optimizers/poly_fit.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/stocastic/FragmentKick.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/stocastic/Kick.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/stocastic/Pipeline.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/stocastic/align.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/tsoptimizers/RSIRFOptimizer.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/pysisyphus/xyzloader.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/setup.cfg +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/tests/smoke/p_complex.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/tests/smoke/r_complex.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/tests/smoke/r_complex_layered.pdb +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/tests/test_all_multiplicity_option.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/thermoanalysis/LICENSE +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/thermoanalysis/QCData.py +0 -0
- {mlmm_toolkit-0.2.7/pysisyphus/wavefunction/ints → mlmm_toolkit-0.3.0/thermoanalysis}/__init__.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/thermoanalysis/config.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/thermoanalysis/constants.py +0 -0
- {mlmm_toolkit-0.2.7 → mlmm_toolkit-0.3.0}/thermoanalysis/thermo.py +0 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Verify that options forwarded from `mlmm all` to `mlmm scan` exist on scan CLI."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import ast
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Set
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
12
|
+
ALL_PY = REPO_ROOT / "mlmm" / "workflows" / "all.py"
|
|
13
|
+
SCAN_PY = REPO_ROOT / "mlmm" / "workflows" / "scan.py"
|
|
14
|
+
# Shared option decorators (e.g. ``add_ml_layer_detection_options``) inject
|
|
15
|
+
# Click flags onto ``scan.cli`` from here, so they count as declared too.
|
|
16
|
+
COMMON_OPTIONS_PY = REPO_ROOT / "mlmm" / "cli" / "common_options.py"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _is_click_option_call(node: ast.Call) -> bool:
|
|
20
|
+
func = node.func
|
|
21
|
+
return (
|
|
22
|
+
isinstance(func, ast.Attribute)
|
|
23
|
+
and func.attr == "option"
|
|
24
|
+
and isinstance(func.value, ast.Name)
|
|
25
|
+
and func.value.id == "click"
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _const_flag(node: ast.AST) -> str | None:
|
|
30
|
+
if isinstance(node, ast.Constant) and isinstance(node.value, str):
|
|
31
|
+
value = node.value.strip()
|
|
32
|
+
if value.startswith("--"):
|
|
33
|
+
return value
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _expand_flag_spec(spec: str) -> Set[str]:
|
|
38
|
+
# click toggle declarations may appear as "--a/--b".
|
|
39
|
+
parts = [p.strip() for p in spec.split("/") if p.strip()]
|
|
40
|
+
flags = {p for p in parts if p.startswith("--")}
|
|
41
|
+
if flags:
|
|
42
|
+
return flags
|
|
43
|
+
return {spec}
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _collect_scan_declared_flags(scan_tree: ast.AST) -> Set[str]:
|
|
47
|
+
flags: Set[str] = set()
|
|
48
|
+
for node in ast.walk(scan_tree):
|
|
49
|
+
if not isinstance(node, ast.Call) or not _is_click_option_call(node):
|
|
50
|
+
continue
|
|
51
|
+
for arg in node.args:
|
|
52
|
+
flag = _const_flag(arg)
|
|
53
|
+
if flag is not None:
|
|
54
|
+
flags.update(_expand_flag_spec(flag))
|
|
55
|
+
return flags
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class _ForwardedScanFlags(ast.NodeVisitor):
|
|
59
|
+
def __init__(self) -> None:
|
|
60
|
+
self.in_cli = False
|
|
61
|
+
self.flags: Set[str] = set()
|
|
62
|
+
|
|
63
|
+
def visit_FunctionDef(self, node: ast.FunctionDef) -> None:
|
|
64
|
+
was_in_cli = self.in_cli
|
|
65
|
+
if node.name == "cli":
|
|
66
|
+
self.in_cli = True
|
|
67
|
+
self.generic_visit(node)
|
|
68
|
+
self.in_cli = was_in_cli
|
|
69
|
+
|
|
70
|
+
def visit_Assign(self, node: ast.Assign) -> None:
|
|
71
|
+
if self.in_cli:
|
|
72
|
+
for target in node.targets:
|
|
73
|
+
if isinstance(target, ast.Name) and target.id == "scan_args":
|
|
74
|
+
if isinstance(node.value, ast.List):
|
|
75
|
+
for elt in node.value.elts:
|
|
76
|
+
flag = _const_flag(elt)
|
|
77
|
+
if flag is not None:
|
|
78
|
+
self.flags.add(flag)
|
|
79
|
+
self.generic_visit(node)
|
|
80
|
+
|
|
81
|
+
def visit_Call(self, node: ast.Call) -> None:
|
|
82
|
+
if self.in_cli:
|
|
83
|
+
if isinstance(node.func, ast.Name) and node.func.id == "_append_cli_arg":
|
|
84
|
+
if len(node.args) >= 2 and isinstance(node.args[0], ast.Name) and node.args[0].id == "scan_args":
|
|
85
|
+
flag = _const_flag(node.args[1])
|
|
86
|
+
if flag is not None:
|
|
87
|
+
self.flags.add(flag)
|
|
88
|
+
|
|
89
|
+
if isinstance(node.func, ast.Attribute) and node.func.attr == "append":
|
|
90
|
+
if isinstance(node.func.value, ast.Name) and node.func.value.id == "scan_args" and node.args:
|
|
91
|
+
value = node.args[0]
|
|
92
|
+
flag = _const_flag(value)
|
|
93
|
+
if flag is not None:
|
|
94
|
+
self.flags.add(flag)
|
|
95
|
+
elif isinstance(value, ast.IfExp):
|
|
96
|
+
body_flag = _const_flag(value.body)
|
|
97
|
+
else_flag = _const_flag(value.orelse)
|
|
98
|
+
if body_flag is not None:
|
|
99
|
+
self.flags.add(body_flag)
|
|
100
|
+
if else_flag is not None:
|
|
101
|
+
self.flags.add(else_flag)
|
|
102
|
+
self.generic_visit(node)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def main() -> int:
|
|
106
|
+
all_tree = ast.parse(ALL_PY.read_text(encoding="utf-8"), filename=str(ALL_PY))
|
|
107
|
+
scan_tree = ast.parse(SCAN_PY.read_text(encoding="utf-8"), filename=str(SCAN_PY))
|
|
108
|
+
|
|
109
|
+
declared = _collect_scan_declared_flags(scan_tree)
|
|
110
|
+
# scan.cli also pulls in flags from shared option decorators defined in
|
|
111
|
+
# mlmm/cli/common_options.py (--detect-layer, --precision, ...).
|
|
112
|
+
if COMMON_OPTIONS_PY.exists():
|
|
113
|
+
common_tree = ast.parse(
|
|
114
|
+
COMMON_OPTIONS_PY.read_text(encoding="utf-8"), filename=str(COMMON_OPTIONS_PY)
|
|
115
|
+
)
|
|
116
|
+
declared |= _collect_scan_declared_flags(common_tree)
|
|
117
|
+
collector = _ForwardedScanFlags()
|
|
118
|
+
collector.visit(all_tree)
|
|
119
|
+
forwarded = collector.flags
|
|
120
|
+
|
|
121
|
+
missing = sorted(flag for flag in forwarded if flag not in declared)
|
|
122
|
+
if missing:
|
|
123
|
+
print("Detected all->scan option contract drift.")
|
|
124
|
+
for flag in missing:
|
|
125
|
+
print(f" missing in scan CLI: {flag}")
|
|
126
|
+
return 1
|
|
127
|
+
|
|
128
|
+
print(f"[scan-contract] all forwards {len(forwarded)} scan options; all are declared.")
|
|
129
|
+
return 0
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
if __name__ == "__main__":
|
|
133
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Engineering-marker coverage check.
|
|
3
|
+
|
|
4
|
+
Three static gates ported from the retired ``tests/test_fingerprint.py``:
|
|
5
|
+
|
|
6
|
+
* ``# CHEMISTRY-RULE:N`` coverage — every rule this repo is responsible for
|
|
7
|
+
must be annotated somewhere in the package source.
|
|
8
|
+
* ``# DOMAIN_PURE`` coverage — the modules that must stay backend-agnostic
|
|
9
|
+
carry this marker.
|
|
10
|
+
* External-library import scope — MLIP-only SDKs (``fairchem`` / ``orb_models``
|
|
11
|
+
/ ``mace`` / ``aimnet``) may only be imported under ``backends/`` so the
|
|
12
|
+
rest of the package keeps a stable, lightweight import graph.
|
|
13
|
+
|
|
14
|
+
Run from the repository root::
|
|
15
|
+
|
|
16
|
+
python .github/scripts/check_engineering_markers.py
|
|
17
|
+
|
|
18
|
+
Exit code 0 = all gates pass, 1 = at least one violation (printed to stderr).
|
|
19
|
+
"""
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import re
|
|
23
|
+
import sys
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
|
|
26
|
+
PKG = "mlmm"
|
|
27
|
+
|
|
28
|
+
REQUIRED_CHEMISTRY_RULES: set[int] = {1, 2, 3, 4, 5, 6, 7, 8, 9}
|
|
29
|
+
|
|
30
|
+
REQUIRED_DOMAIN_PURE: tuple[str, ...] = (
|
|
31
|
+
"mlmm/backends/mlmm_calc.py",
|
|
32
|
+
"mlmm/workflows/tsopt.py",
|
|
33
|
+
"mlmm/workflows/freq.py",
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
EXTERNAL_LIBS_DENY: set[str] = {"fairchem", "orb_models", "mace", "aimnet"}
|
|
37
|
+
|
|
38
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
39
|
+
PKG_ROOT = REPO_ROOT / PKG
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _check_chemistry_rules() -> list[str]:
|
|
43
|
+
found: set[int] = set()
|
|
44
|
+
for py in PKG_ROOT.rglob("*.py"):
|
|
45
|
+
for m in re.finditer(r"CHEMISTRY-RULE:(\d+)", py.read_text(errors="ignore")):
|
|
46
|
+
found.add(int(m.group(1)))
|
|
47
|
+
missing = sorted(REQUIRED_CHEMISTRY_RULES - found)
|
|
48
|
+
return [f"missing CHEMISTRY-RULE markers in {PKG}: {missing}"] if missing else []
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _check_domain_pure() -> list[str]:
|
|
52
|
+
missing = [
|
|
53
|
+
rel for rel in REQUIRED_DOMAIN_PURE
|
|
54
|
+
if "# DOMAIN_PURE" not in (REPO_ROOT / rel).read_text(errors="ignore")
|
|
55
|
+
]
|
|
56
|
+
return [f"missing # DOMAIN_PURE marker in: {missing}"] if missing else []
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _check_external_library_scope() -> list[str]:
|
|
60
|
+
backends_dir = PKG_ROOT / "backends"
|
|
61
|
+
violations: list[str] = []
|
|
62
|
+
for py in PKG_ROOT.rglob("*.py"):
|
|
63
|
+
if backends_dir in py.parents or py == backends_dir:
|
|
64
|
+
continue
|
|
65
|
+
text = py.read_text(errors="ignore")
|
|
66
|
+
for mod in EXTERNAL_LIBS_DENY:
|
|
67
|
+
if re.search(
|
|
68
|
+
rf"^(?:import\s+{re.escape(mod)}\b|from\s+{re.escape(mod)})",
|
|
69
|
+
text, re.M,
|
|
70
|
+
):
|
|
71
|
+
violations.append(f"{py.relative_to(REPO_ROOT)}: imports {mod}")
|
|
72
|
+
return ["external library import outside backends/:", *violations] if violations else []
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def main() -> int:
|
|
76
|
+
failures: list[str] = []
|
|
77
|
+
failures += _check_chemistry_rules()
|
|
78
|
+
failures += _check_domain_pure()
|
|
79
|
+
failures += _check_external_library_scope()
|
|
80
|
+
if failures:
|
|
81
|
+
for line in failures:
|
|
82
|
+
print(line, file=sys.stderr)
|
|
83
|
+
return 1
|
|
84
|
+
print("engineering markers OK")
|
|
85
|
+
return 0
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if __name__ == "__main__":
|
|
89
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Static drift check for the primary `--help` option registry.
|
|
3
|
+
|
|
4
|
+
Validates ``mlmm.cli.app._SUBCOMMAND_PRIMARY_HELP_OPTIONS`` against the actual
|
|
5
|
+
Click commands that back each subcommand:
|
|
6
|
+
|
|
7
|
+
* Every entry must include ``"--help-advanced"`` so the discoverability flag
|
|
8
|
+
itself is not hidden when the registry filters non-primary options.
|
|
9
|
+
* Every other token in each frozenset must correspond to an actual
|
|
10
|
+
``@click.option`` opt string on the resolved Click command — long opts via
|
|
11
|
+
``Option.opts`` and short opts via ``Option.opts`` / ``Option.secondary_opts``.
|
|
12
|
+
Orphan entries (dead aliases / removed flags) fail this check.
|
|
13
|
+
|
|
14
|
+
Run from the repository root::
|
|
15
|
+
|
|
16
|
+
python .github/scripts/check_help_registry.py
|
|
17
|
+
|
|
18
|
+
Exit 0 = registry consistent, 1 = drift (printed to stderr).
|
|
19
|
+
"""
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import importlib
|
|
23
|
+
import sys
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
|
|
26
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
27
|
+
sys.path.insert(0, str(REPO_ROOT))
|
|
28
|
+
|
|
29
|
+
# ``--help-advanced`` is injected by ``cli.help_pages._ensure_help_advanced_option``
|
|
30
|
+
# so it is NOT declared on the lazy Click commands themselves. Treat it as the
|
|
31
|
+
# single allow-listed token that need not resolve to a ``command.params`` opt.
|
|
32
|
+
_INJECTED_OPTS: frozenset[str] = frozenset({"--help-advanced"})
|
|
33
|
+
|
|
34
|
+
from mlmm.cli.app import ( # noqa: E402
|
|
35
|
+
_LAZY_SUBCOMMANDS,
|
|
36
|
+
_SUBCOMMAND_PRIMARY_HELP_OPTIONS,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _resolve_command(spec: tuple[str, str, str]):
|
|
41
|
+
module_name, attr, _help = spec
|
|
42
|
+
mod = importlib.import_module(module_name)
|
|
43
|
+
return getattr(mod, attr)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _declared_opts(command) -> set[str]:
|
|
47
|
+
opts: set[str] = set()
|
|
48
|
+
for param in getattr(command, "params", ()): # click.Option / click.Argument
|
|
49
|
+
opts.update(getattr(param, "opts", ()) or ())
|
|
50
|
+
opts.update(getattr(param, "secondary_opts", ()) or ())
|
|
51
|
+
return opts
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def main() -> int:
|
|
55
|
+
errors: list[str] = []
|
|
56
|
+
|
|
57
|
+
for subcmd, primary in _SUBCOMMAND_PRIMARY_HELP_OPTIONS.items():
|
|
58
|
+
if "--help-advanced" not in primary:
|
|
59
|
+
errors.append(
|
|
60
|
+
f"[{subcmd}] missing '--help-advanced' in primary set "
|
|
61
|
+
f"(would self-hide the discoverability flag)"
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
spec = _LAZY_SUBCOMMANDS.get(subcmd)
|
|
65
|
+
if spec is None:
|
|
66
|
+
errors.append(
|
|
67
|
+
f"[{subcmd}] registry entry has no corresponding "
|
|
68
|
+
f"_LAZY_SUBCOMMANDS spec"
|
|
69
|
+
)
|
|
70
|
+
continue
|
|
71
|
+
|
|
72
|
+
try:
|
|
73
|
+
command = _resolve_command(spec)
|
|
74
|
+
except Exception as exc: # pragma: no cover - import failure surfaces here
|
|
75
|
+
errors.append(f"[{subcmd}] could not import {spec[0]}.{spec[1]}: {exc}")
|
|
76
|
+
continue
|
|
77
|
+
|
|
78
|
+
declared = _declared_opts(command)
|
|
79
|
+
for token in sorted(primary - _INJECTED_OPTS):
|
|
80
|
+
if token not in declared:
|
|
81
|
+
errors.append(
|
|
82
|
+
f"[{subcmd}] primary token {token!r} is not declared by "
|
|
83
|
+
f"any @click.option on {spec[0]}.{spec[1]} "
|
|
84
|
+
f"(orphan / dead registry entry)"
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
if errors:
|
|
88
|
+
print("help registry drift detected:", file=sys.stderr)
|
|
89
|
+
for line in errors:
|
|
90
|
+
print(f" - {line}", file=sys.stderr)
|
|
91
|
+
return 1
|
|
92
|
+
|
|
93
|
+
print("help registry OK")
|
|
94
|
+
return 0
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
if __name__ == "__main__":
|
|
98
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Validate the command-page heading template (EN/JA).
|
|
3
|
+
|
|
4
|
+
EN canonical template: a one-paragraph intro (the "when to use" guidance is
|
|
5
|
+
folded into the opening sentence — no separate heading), then ``## Examples``
|
|
6
|
+
before the ``## Workflow`` body, and none of the legacy ``When to use`` /
|
|
7
|
+
``Quick examples`` / ``Inputs`` headings.
|
|
8
|
+
|
|
9
|
+
JA pages follow the same canonical template (## 実行例 before ## 処理の流れ,
|
|
10
|
+
with the legacy 使いどころ / 入力 headings removed).
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
19
|
+
DOCS_ROOT = REPO_ROOT / "docs"
|
|
20
|
+
|
|
21
|
+
TARGETS = (
|
|
22
|
+
"all",
|
|
23
|
+
"scan",
|
|
24
|
+
"scan2d",
|
|
25
|
+
"scan3d",
|
|
26
|
+
"tsopt",
|
|
27
|
+
"freq",
|
|
28
|
+
"opt",
|
|
29
|
+
"path-opt",
|
|
30
|
+
"path-search",
|
|
31
|
+
"irc",
|
|
32
|
+
"dft",
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# EN canonical template.
|
|
36
|
+
EN_REQUIRED = ("## Examples",)
|
|
37
|
+
EN_BODY = "## Workflow"
|
|
38
|
+
EN_FORBIDDEN = (
|
|
39
|
+
"## When to use",
|
|
40
|
+
"## Quick examples",
|
|
41
|
+
"## Common examples",
|
|
42
|
+
"## Minimal example",
|
|
43
|
+
"## Usage",
|
|
44
|
+
"## Inputs",
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# JA canonical template (mirrors the EN template).
|
|
48
|
+
JA_REQUIRED = ("## 実行例",)
|
|
49
|
+
JA_BODY = "## 処理の流れ"
|
|
50
|
+
JA_FORBIDDEN = (
|
|
51
|
+
"## 使いどころ",
|
|
52
|
+
"## クイック例",
|
|
53
|
+
"## 使用例",
|
|
54
|
+
"## 例",
|
|
55
|
+
"## 最小例",
|
|
56
|
+
"## 入力",
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _heading_positions(path: Path) -> dict[str, int]:
|
|
61
|
+
positions: dict[str, int] = {}
|
|
62
|
+
for i, line in enumerate(path.read_text(encoding="utf-8").splitlines(), start=1):
|
|
63
|
+
if line.startswith("## "):
|
|
64
|
+
positions.setdefault(line.strip(), i)
|
|
65
|
+
return positions
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def _check(
|
|
69
|
+
path: Path,
|
|
70
|
+
required: tuple[str, ...],
|
|
71
|
+
body_heading: str,
|
|
72
|
+
forbidden: tuple[str, ...],
|
|
73
|
+
errors: list[str],
|
|
74
|
+
) -> None:
|
|
75
|
+
if not path.exists():
|
|
76
|
+
errors.append(f"{path}: missing file")
|
|
77
|
+
return
|
|
78
|
+
|
|
79
|
+
positions = _heading_positions(path)
|
|
80
|
+
|
|
81
|
+
missing = [h for h in required if h not in positions]
|
|
82
|
+
if missing:
|
|
83
|
+
errors.append(f"{path}: missing headings: {', '.join(missing)}")
|
|
84
|
+
|
|
85
|
+
present_forbidden = [h for h in forbidden if h in positions]
|
|
86
|
+
if present_forbidden:
|
|
87
|
+
errors.append(
|
|
88
|
+
f"{path}: legacy headings must be removed: {', '.join(present_forbidden)}"
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
body_line = positions.get(body_heading)
|
|
92
|
+
if body_line is not None:
|
|
93
|
+
late = [h for h in required if h in positions and positions[h] > body_line]
|
|
94
|
+
if late:
|
|
95
|
+
errors.append(
|
|
96
|
+
f"{path}: heading(s) must precede '{body_heading}': {', '.join(late)}"
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def main() -> int:
|
|
101
|
+
errors: list[str] = []
|
|
102
|
+
|
|
103
|
+
for name in TARGETS:
|
|
104
|
+
_check(DOCS_ROOT / f"{name}.md", EN_REQUIRED, EN_BODY, EN_FORBIDDEN, errors)
|
|
105
|
+
_check(DOCS_ROOT / "ja" / f"{name}.md", JA_REQUIRED, JA_BODY, JA_FORBIDDEN, errors)
|
|
106
|
+
|
|
107
|
+
if errors:
|
|
108
|
+
print("[intro-check] failed:")
|
|
109
|
+
for e in errors:
|
|
110
|
+
print(f"- {e}")
|
|
111
|
+
return 1
|
|
112
|
+
|
|
113
|
+
print(f"[intro-check] validated {len(TARGETS) * 2} pages.")
|
|
114
|
+
return 0
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
if __name__ == "__main__":
|
|
118
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Validate local markdown links under docs/."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import re
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
11
|
+
DOCS_ROOT = REPO_ROOT / "docs"
|
|
12
|
+
LINK_RE = re.compile(r"(?<!\!)\[[^\]]+\]\(([^)]+)\)")
|
|
13
|
+
EXTERNAL_PREFIXES = ("http://", "https://", "mailto:", "tel:")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _normalize_target(raw: str) -> str:
|
|
17
|
+
target = raw.strip()
|
|
18
|
+
if target.startswith("<") and target.endswith(">"):
|
|
19
|
+
target = target[1:-1].strip()
|
|
20
|
+
if " " in target:
|
|
21
|
+
target = target.split(" ", 1)[0]
|
|
22
|
+
return target
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _iter_links(path: Path) -> list[tuple[int, str]]:
|
|
26
|
+
links: list[tuple[int, str]] = []
|
|
27
|
+
in_fence = False
|
|
28
|
+
for lineno, line in enumerate(path.read_text(encoding="utf-8").splitlines(), start=1):
|
|
29
|
+
stripped = line.strip()
|
|
30
|
+
if stripped.startswith("```"):
|
|
31
|
+
in_fence = not in_fence
|
|
32
|
+
continue
|
|
33
|
+
if in_fence:
|
|
34
|
+
continue
|
|
35
|
+
for match in LINK_RE.finditer(line):
|
|
36
|
+
links.append((lineno, _normalize_target(match.group(1))))
|
|
37
|
+
return links
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _iter_toctree_targets(path: Path) -> list[tuple[int, str]]:
|
|
41
|
+
targets: list[tuple[int, str]] = []
|
|
42
|
+
in_toctree = False
|
|
43
|
+
for lineno, line in enumerate(path.read_text(encoding="utf-8").splitlines(), start=1):
|
|
44
|
+
stripped = line.strip()
|
|
45
|
+
if stripped.startswith("```"):
|
|
46
|
+
marker = stripped[3:].strip().lower()
|
|
47
|
+
if not in_toctree and marker.startswith("{toctree}"):
|
|
48
|
+
in_toctree = True
|
|
49
|
+
continue
|
|
50
|
+
if in_toctree:
|
|
51
|
+
in_toctree = False
|
|
52
|
+
continue
|
|
53
|
+
if not in_toctree:
|
|
54
|
+
continue
|
|
55
|
+
if not stripped or stripped.startswith(":"):
|
|
56
|
+
continue
|
|
57
|
+
# Handle MyST toctree "Title <target>" syntax
|
|
58
|
+
angle = re.match(r".*<([^>]+)>\s*$", stripped)
|
|
59
|
+
if angle:
|
|
60
|
+
targets.append((lineno, angle.group(1).strip()))
|
|
61
|
+
else:
|
|
62
|
+
targets.append((lineno, stripped.split()[0]))
|
|
63
|
+
return targets
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _resolve_doc_target(path: Path, target: str) -> Path | None:
|
|
67
|
+
if not target or target.startswith(EXTERNAL_PREFIXES) or target.startswith("#"):
|
|
68
|
+
return None
|
|
69
|
+
if "*" in target:
|
|
70
|
+
return None
|
|
71
|
+
base = (path.parent / target).resolve()
|
|
72
|
+
if base.suffix:
|
|
73
|
+
return base
|
|
74
|
+
for candidate in (base.with_suffix(".md"), base.with_suffix(".rst"), base):
|
|
75
|
+
if candidate.exists():
|
|
76
|
+
return candidate
|
|
77
|
+
return base.with_suffix(".md")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _check_path(path: Path, errors: list[str]) -> None:
|
|
81
|
+
for lineno, target in _iter_links(path):
|
|
82
|
+
if not target or target.startswith(EXTERNAL_PREFIXES):
|
|
83
|
+
continue
|
|
84
|
+
if target.startswith("#"):
|
|
85
|
+
continue
|
|
86
|
+
target_path = target.split("#", 1)[0]
|
|
87
|
+
if not target_path:
|
|
88
|
+
continue
|
|
89
|
+
resolved = (path.parent / target_path).resolve()
|
|
90
|
+
if not resolved.exists():
|
|
91
|
+
errors.append(
|
|
92
|
+
f"{path.relative_to(REPO_ROOT)}:{lineno}: broken local link -> {target}"
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
for lineno, target in _iter_toctree_targets(path):
|
|
96
|
+
resolved = _resolve_doc_target(path, target)
|
|
97
|
+
if resolved is None:
|
|
98
|
+
continue
|
|
99
|
+
if not resolved.exists():
|
|
100
|
+
errors.append(
|
|
101
|
+
f"{path.relative_to(REPO_ROOT)}:{lineno}: broken toctree target -> {target}"
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def main() -> int:
|
|
106
|
+
errors: list[str] = []
|
|
107
|
+
pages = sorted(DOCS_ROOT.rglob("*.md"))
|
|
108
|
+
for md in pages:
|
|
109
|
+
_check_path(md, errors)
|
|
110
|
+
|
|
111
|
+
if errors:
|
|
112
|
+
print("[link-check] failed:")
|
|
113
|
+
for e in errors:
|
|
114
|
+
print(f"- {e}")
|
|
115
|
+
return 1
|
|
116
|
+
|
|
117
|
+
print(f"[link-check] validated local links in {len(pages)} pages.")
|
|
118
|
+
return 0
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
if __name__ == "__main__":
|
|
122
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Audit fenced ``bash`` blocks in skills/**/*.md.
|
|
3
|
+
|
|
4
|
+
For every line that starts with ``mlmm <subcommand>``, parse out flag
|
|
5
|
+
tokens (``--foo`` and ``-f``) and verify each one is registered on that
|
|
6
|
+
subcommand via Click introspection. Stale flags from past edits are
|
|
7
|
+
reported with file:line.
|
|
8
|
+
|
|
9
|
+
This is intentionally conservative:
|
|
10
|
+
* shell line continuations (\\) are joined.
|
|
11
|
+
* placeholders / templates (``<arg>``, ``{xyz,pdb,gjf}``) are skipped.
|
|
12
|
+
* values for known boolean flags (``--tsopt true``, ``--no-tsopt``) are
|
|
13
|
+
accepted as flag-only.
|
|
14
|
+
* free-form prose example fragments inside backticks (single-line
|
|
15
|
+
``mlmm extract --foo``) are also checked.
|
|
16
|
+
|
|
17
|
+
Exits non-zero on any unknown flag.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import re
|
|
23
|
+
import shlex
|
|
24
|
+
import sys
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
|
|
27
|
+
import click
|
|
28
|
+
|
|
29
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
30
|
+
SKILLS_DIR = REPO_ROOT / "skills"
|
|
31
|
+
|
|
32
|
+
sys.path.insert(0, str(REPO_ROOT))
|
|
33
|
+
from mlmm.cli import cli as root_cli # noqa: E402
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _collect_subcommand_flags() -> dict[str, set[str]]:
|
|
37
|
+
flags_per_cmd: dict[str, set[str]] = {}
|
|
38
|
+
ctx = click.Context(root_cli)
|
|
39
|
+
for name in root_cli.list_commands(ctx):
|
|
40
|
+
cmd = root_cli.get_command(ctx, name)
|
|
41
|
+
if cmd is None:
|
|
42
|
+
continue
|
|
43
|
+
flags: set[str] = set()
|
|
44
|
+
for p in cmd.params:
|
|
45
|
+
for opt in getattr(p, "opts", []) or []:
|
|
46
|
+
flags.add(opt)
|
|
47
|
+
for opt in getattr(p, "secondary_opts", []) or []:
|
|
48
|
+
flags.add(opt)
|
|
49
|
+
# universal flags every subcommand inherits in our setup
|
|
50
|
+
flags.update({"--help", "--help-advanced"})
|
|
51
|
+
flags_per_cmd[name] = flags
|
|
52
|
+
return flags_per_cmd
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
_FENCE_RE = re.compile(r"^```(?:bash|console|sh)?\s*$")
|
|
56
|
+
_FENCE_END_RE = re.compile(r"^```\s*$")
|
|
57
|
+
_INLINE_RE = re.compile(r"`(mlmm\s+[^`]+)`")
|
|
58
|
+
_FLAG_RE = re.compile(r"^-{1,2}[A-Za-z][\w-]*$")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _iter_command_lines(text: str):
|
|
62
|
+
in_fence = False
|
|
63
|
+
pending: list[str] = []
|
|
64
|
+
pending_lineno = 0
|
|
65
|
+
for lineno, line in enumerate(text.splitlines(), start=1):
|
|
66
|
+
if not in_fence and _FENCE_RE.match(line):
|
|
67
|
+
in_fence = True
|
|
68
|
+
continue
|
|
69
|
+
if in_fence and _FENCE_END_RE.match(line):
|
|
70
|
+
in_fence = False
|
|
71
|
+
if pending and "mlmm" in " ".join(pending):
|
|
72
|
+
yield pending_lineno, " ".join(pending)
|
|
73
|
+
pending = []
|
|
74
|
+
continue
|
|
75
|
+
if in_fence:
|
|
76
|
+
stripped = line.rstrip()
|
|
77
|
+
if stripped.endswith("\\"):
|
|
78
|
+
if not pending:
|
|
79
|
+
pending_lineno = lineno
|
|
80
|
+
pending.append(stripped[:-1].strip())
|
|
81
|
+
continue
|
|
82
|
+
# End of a logical command
|
|
83
|
+
if pending:
|
|
84
|
+
pending.append(stripped.strip())
|
|
85
|
+
if "mlmm" in " ".join(pending):
|
|
86
|
+
yield pending_lineno, " ".join(pending)
|
|
87
|
+
pending = []
|
|
88
|
+
else:
|
|
89
|
+
# standalone single-line command
|
|
90
|
+
if "mlmm" in stripped:
|
|
91
|
+
yield lineno, stripped.strip()
|
|
92
|
+
continue
|
|
93
|
+
for m in _INLINE_RE.finditer(line):
|
|
94
|
+
yield lineno, m.group(1)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _check_command(cmd_text: str, flags_per_cmd: dict[str, set[str]]):
|
|
98
|
+
try:
|
|
99
|
+
tokens = shlex.split(cmd_text, posix=True)
|
|
100
|
+
except ValueError:
|
|
101
|
+
return []
|
|
102
|
+
if len(tokens) < 2 or tokens[0] != "mlmm":
|
|
103
|
+
return []
|
|
104
|
+
sub = tokens[1]
|
|
105
|
+
if sub not in flags_per_cmd:
|
|
106
|
+
return []
|
|
107
|
+
valid = flags_per_cmd[sub]
|
|
108
|
+
bad: list[str] = []
|
|
109
|
+
for tok in tokens[2:]:
|
|
110
|
+
if tok.startswith("<") or tok.startswith("{") or tok.startswith("["):
|
|
111
|
+
continue
|
|
112
|
+
if not tok.startswith("-"):
|
|
113
|
+
continue
|
|
114
|
+
# split --foo=bar
|
|
115
|
+
flag = tok.split("=", 1)[0]
|
|
116
|
+
if not _FLAG_RE.match(flag):
|
|
117
|
+
continue
|
|
118
|
+
if flag not in valid:
|
|
119
|
+
bad.append(flag)
|
|
120
|
+
return bad
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def main() -> int:
|
|
124
|
+
flags_per_cmd = _collect_subcommand_flags()
|
|
125
|
+
n_files = 0
|
|
126
|
+
n_errors = 0
|
|
127
|
+
for path in sorted(SKILLS_DIR.rglob("*.md")):
|
|
128
|
+
text = path.read_text()
|
|
129
|
+
for lineno, cmd in _iter_command_lines(text):
|
|
130
|
+
bad = _check_command(cmd, flags_per_cmd)
|
|
131
|
+
if bad:
|
|
132
|
+
n_errors += 1
|
|
133
|
+
print(f"{path.relative_to(REPO_ROOT)}:{lineno}: unknown flag(s) {bad} in: {cmd[:120]}")
|
|
134
|
+
n_files += 1
|
|
135
|
+
print(f"\nChecked {n_files} skill files; {n_errors} stale flag occurrences.")
|
|
136
|
+
return 1 if n_errors else 0
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
if __name__ == "__main__":
|
|
140
|
+
raise SystemExit(main())
|