feat: Parsl-based simulation orchestration (Issue #16) - #25
Conversation
…execution pipeline
…put YAML or prod.xtc
…lt normalisation from progress UI
…-agnostic configs
…pport and _execute_stage_list
… prod.xtc in output check
… next-step hint generic
… become one-liner wrappers
…etect_needed_stages a thin wrapper; add domain validation to run_simulations
…as pure/shared helpers; remove hardcoded deffnm comparisons from bash output validation
…functions; simplify _wait_with_progress poll loop
…ulate; simplify simulate_systems; remove duplicated autodiscovery block
Progress UpdateRefactored the TUI SLURM wizard's stage-override prompts to be context-aware:
Commit: Progress tracked by mach6 |
Progress UpdateAdded rescue retry integration tests that validate the mechanism with real GROMACS execution. Test suite (
|
…ulate (#37) * feat(tui): include detected GROMACS modules in default worker init for simulate * docs: document GROMACS module auto-detection in HPC guide
* chore: open PR for issue 34 * fix: unwrap Parsl DependencyError to surface grompp root cause * fix(tests): add _describe_failure test for DependencyError __cause__ path
Progress UpdateAdded interactive GROMACS detection to the SLURM TUI wizard (simulate only, skipped for build):
Commit: Progress tracked by mach6 |
Progress UpdateIssues closedAudited acceptance criteria for issues 30, 32, and 34 — all criteria met:
Formatting & lintingRan Commits: Progress tracked by mach6 |
) * chore: open PR for issue 38 * feat: add --clean flag to simulate and fix stale-cpt detection Add clean_simulation_outputs() that removes stage outputs (tpr, cpt, log, edr, gro, xtc/trr, rescue MDPs, GROMACS backups, mdout.mdp) while preserving build inputs. Respects --stages filter and integrates with --dry-run for preview. Fix _detect_stage_state: trajectory stages (Production) with cpt+tpr but no trajectory file now return not_started instead of partial, preventing the stale-cpt-append crash where GROMACS refuses -append without a trajectory to append to. * docs: add --clean flag to CLI reference, troubleshooting, and HPC guide * test: add integration tests for clean=True wiring in run_simulations * style: apply ruff formatting
Progress UpdateClosed the remaining acceptance criteria gaps from Issue #16: Dry-run with resolved commands
Findings write-upAdded
Custom workflow compositionDeferred to Issue #10 (GPU MPS) — see comment on #16. The Parsl-native Commits: Progress tracked by mach6 |
* chore: open PR for issue 40 * refactor: replace worker_init with structured EnvironmentConfig - Add EnvironmentConfig model (modules, pixi_manifest, conda_env, venv_path, extra_init) - compose_worker_init() produces shell snippet from structured fields - detect() classmethod auto-detects pixi/conda/venv from environment - Refactor TUI into 3 visual sections with Rich Rule separators - Remove dead _detect_gromacs_modules (shadowed definition) - Update docs and example YAML to new environment: section format * test: add _prompt_environment tests for stages=() GROMACS skip * feat: add config environment command with global persistence * fix: use saved environment.yaml in TUI instead of re-prompting * feat: add per-stage progress bars for simulation orchestration * fix: review findings — config update, fail-fast on corrupt env, add missing tests
DESIGN.md Review: Simulation Orchestration RefactoringReviewed the full PR against DESIGN.md principles (lean, YAGNI, DRY, SOLID, readable, minimal dependencies). Applied 10 refactoring steps — net result: -554 lines, same functionality, all 257 tests pass. Changes Made
What Was NOT Changed (intentionally)
VerificationAll orchestration tests pass (257 passed) after each step. No public API changes. |
Closes #16. Replaces Nextflow with Python-native Parsl workflow for GROMACS campaigns on SLURM.
Core: EM → NVT → NPT → Production chained via
inputs=[prev_future]; independent systems run in parallel. Checkpoint detection skips completed stages before opening a Parsl session.Notable decisions:
stage_overridesinSlurmExecutorConfigfor per-stage CPU/walltime — the same knob Issue Implement scalability benchmark sweep #9 benchmark sweep will tuneparsl.clear()on exit) — enables benchmark → production pattern without process restartfind_structure_filepromoted to public API inmdfactory.orchestration— prep forperformance/benchmark.pyPartial-campaign builds: systems with missing build files are skipped with a warning rather than aborting the run.
64 unit tests; integration-tested on cluster (mixedbox tutorial campaign).