Skip to content

Conversation

@anmorgunov
Copy link
Contributor

@anmorgunov anmorgunov commented Nov 6, 2025

TL;DR

Added SLURM job submission script generation capabilities to CalcFlow.

What changed?

  • Added a new SlurmJob class in calcflow.slurm module for generating SLURM submission scripts
  • Implemented program-specific SLURM directives for ORCA and Q-Chem
  • Added support for different parallelism modes (OpenMP/MPI)
  • Updated README with examples of SLURM job script generation
  • Added comprehensive test suite for SLURM functionality
  • Uncommented SLURM-related code in the ORCA input example script
  • Added .gitignore entry for h2o_calc_spec.json

How to test?

from calcflow import CalculationInput
from calcflow.slurm import SlurmJob

# Create calculation
calc = CalculationInput(
    charge=0, spin_multiplicity=1, task="energy",
    level_of_theory="wB97X-D3", basis_set="def2-tzvp", n_cores=16
)

# Create SLURM job configuration
job = SlurmJob(
    job_name="h2o_tddft",
    time="04:00:00",
    n_cores=16,
    memory_mb=64000,
    partition="gpu",
    account="my_research_group"
).add_modules(["orca/5.0", "openmpi/4.1.1"])

# Generate complete SLURM script
slurm_script = job.export(calc, program="orca", 
                          input_filename="h2o.inp", 
                          output_filename="h2o.out")

# Save script for cluster submission
with open("submit_h2o.sh", "w") as f:
    f.write(slurm_script)

Why make this change?

This change enhances CalcFlow's usability in high-performance computing environments by providing automated generation of SLURM job submission scripts. Users can now seamlessly move from calculation definition to cluster submission without manually writing SLURM scripts, ensuring proper resource allocation and program-specific parallelism directives are correctly configured.

Greptile Overview

Updated On: 2025-11-06 15:33:18 UTC

Greptile Summary

Adds SLURM job submission script generation capability to CalcFlow, enabling users to generate cluster submission scripts for ORCA and Q-Chem calculations.

Key changes:

  • New calcflow.slurm.SlurmJob class with fluent API for building SLURM scripts
  • Extended OrcaBuilder and QchemBuilder with get_slurm_directives() and get_launch_command() methods
  • Program-specific parallelism handling (MPI for ORCA, OpenMP/MPI modes for Q-Chem)
  • Comprehensive test suite (911 lines) covering unit, contract, integration, and regression tests
  • Updated documentation with clear usage examples

Implementation approach:
The design follows CalcFlow's philosophy of separation of concerns - SlurmJob handles HPC scheduler configuration, while program builders provide quantum chemistry program-specific directives. This allows the SLURM module to remain program-agnostic while still generating correct parallelism flags.

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • Score reflects excellent code quality: comprehensive test coverage (911 lines of tests), clean architecture following CalcFlow's design patterns (frozen dataclasses, fluent API), proper type annotations, and only minor style suggestions. The feature is well-isolated with no changes to existing functionality.
  • No files require special attention - only minor style improvements suggested in src/calcflow/slurm.py lines 93 and 98

Important Files Changed

File Analysis

Filename Score Overview
src/calcflow/slurm.py 4/5 Core SLURM job generation module with fluent API - well-structured but has minor potential issue with line 93
src/calcflow/io/orca/builder.py 5/5 Added get_slurm_directives() and get_launch_command() methods for ORCA integration
src/calcflow/io/qchem/builder.py 5/5 Added SLURM methods with OpenMP/MPI parallelism support - correctly handles different modes
tests/test_slurm.py 5/5 Comprehensive test suite with 911 lines covering unit, contract, integration, and regression tests

Sequence Diagram

sequenceDiagram
    participant User
    participant SlurmJob
    participant CalculationInput
    participant BUILDERS
    participant OrcaBuilder
    participant QchemBuilder

    User->>SlurmJob: create(job_name, time, n_cores, ...)
    User->>SlurmJob: add_modules(["orca/5.0"])
    User->>SlurmJob: export(calc, program="orca", input_filename, output_filename)
    
    SlurmJob->>BUILDERS: get builder for program
    BUILDERS-->>SlurmJob: OrcaBuilder instance
    
    SlurmJob->>OrcaBuilder: get_slurm_directives(calculation)
    OrcaBuilder-->>SlurmJob: ["#SBATCH --ntasks=N", "#SBATCH --nodes=1"]
    
    SlurmJob->>OrcaBuilder: get_launch_command(calculation, input_fname, output_fname)
    OrcaBuilder-->>SlurmJob: "$(which orca) input.inp > output.out"
    
    SlurmJob->>SlurmJob: build(directives, launch_command)
    Note over SlurmJob: Constructs SLURM script with:<br/>- shebang<br/>- SBATCH directives<br/>- module loads<br/>- launch command
    
    SlurmJob-->>User: complete SLURM script string
Loading

- Implement SlurmJob class with fluent API for SLURM configuration
- Support for job name, time, cores, memory, partition, account, queue, and module loading
- Integrate with OrcaBuilder and QchemBuilder via get_slurm_directives() and get_launch_command()
- Add 52 comprehensive tests covering unit, contract, integration, and regression testing
- Tests validate sbatch directives, program-specific parallelism (OpenMP/MPI), module loading
- Semantic regression tests ensure functional correctness without brittle string matching
- Update README with SLURM usage examples for ORCA and Q-Chem
- Update LLM documentation with SLURM workflow examples
- Maintain zero external dependencies and full type annotations
@github-actions
Copy link

github-actions bot commented Nov 6, 2025

Pytest Coverage Report 🧪

============================= test session starts ==============================
platform linux -- Python 3.13.9, pytest-8.4.2, pluggy-1.6.0
rootdir: /home/runner/work/project-prometheus/project-prometheus
configfile: pyproject.toml
plugins: cov-7.0.0
collected 1543 items

tests/common/test_api_docs.py ..................                         [  1%]
tests/common/test_input_serialization.py ............................... [  3%]
.........                                                                [  3%]
tests/common/test_results_serialization.py ............................. [  5%]
......                                                                   [  6%]
tests/geometry/test_static.py ..................                         [  7%]
tests/geometry/test_trajectory.py .......                                [  7%]
tests/io/orca/orca_builders/test_builder_basic.py ...................... [  9%]
............................                                             [ 10%]
tests/io/orca/orca_builders/test_builder_ri.py ......................... [ 12%]
.....                                                                    [ 12%]
tests/io/orca/orca_builders/test_builder_solvation.py .................. [ 13%]
.............                                                            [ 14%]
tests/io/orca/orca_builders/test_builder_tddft.py ...................... [ 16%]
............                                                             [ 17%]
tests/io/orca/orca_builders/test_builder_validation.py ................. [ 18%]
........                                                                 [ 18%]
tests/io/orca/orca_parsers/test_orca_sp_charges.py ..............        [ 19%]
tests/io/orca/orca_parsers/test_orca_sp_dipole.py ..........             [ 20%]
tests/io/orca/orca_parsers/test_orca_sp_dispersion.py .................. [ 21%]
....                                                                     [ 21%]
tests/io/orca/orca_parsers/test_orca_sp_finalization.py ......           [ 22%]
tests/io/orca/orca_parsers/test_orca_sp_orbitals.py ...........          [ 22%]
tests/io/orca/orca_parsers/test_orca_sp_scf.py .................         [ 23%]
tests/io/orca/orca_parsers/test_orca_sp_timing.py .......                [ 24%]
tests/io/qchem/qchem_builders/test_builder_basic.py .................... [ 25%]
...............................                                          [ 27%]
tests/io/qchem/qchem_builders/test_builder_helpers.py .................. [ 28%]
.....                                                                    [ 29%]
tests/io/qchem/qchem_builders/test_builder_mom.py ...................... [ 30%]
.......................                                                  [ 32%]
tests/io/qchem/qchem_builders/test_builder_solvation.py ................ [ 33%]
..................                                                       [ 34%]
tests/io/qchem/qchem_builders/test_builder_tddft.py .................... [ 35%]
.......................                                                  [ 37%]
tests/io/qchem/qchem_builders/test_builder_validation.py ............... [ 37%]
....                                                                     [ 38%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_excitations.py ..... [ 38%]
.......................................................................  [ 43%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_gs_ref.py .......... [ 43%]
.....................                                                    [ 45%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_nto.py ............. [ 46%]
...........................                                              [ 47%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_trans_dm.py ........ [ 48%]
....................................                                     [ 50%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_unrel_dm.py ........ [ 51%]
..............................                                           [ 53%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_xas_excitations.py ....... [ 53%]
.......................                                                  [ 55%]
tests/io/qchem/qchem_parsers/test_qchem_scf_mom.py ..................... [ 56%]
...................................................                      [ 59%]
tests/io/qchem/qchem_parsers/test_qchem_sp_charges.py .................. [ 60%]
..................                                                       [ 62%]
tests/io/qchem/qchem_parsers/test_qchem_sp_finalization.py ............. [ 62%]
.............                                                            [ 63%]
tests/io/qchem/qchem_parsers/test_qchem_sp_geometry.py ................. [ 64%]
......................................................................   [ 69%]
tests/io/qchem/qchem_parsers/test_qchem_sp_meta.py .....                 [ 69%]
tests/io/qchem/qchem_parsers/test_qchem_sp_multipole.py ................ [ 70%]
................................................................         [ 74%]
tests/io/qchem/qchem_parsers/test_qchem_sp_orbitals.py ................. [ 75%]
..........................................................               [ 79%]
tests/io/qchem/qchem_parsers/test_qchem_sp_scf.py ...................... [ 81%]
........................................................................ [ 85%]
..........                                                               [ 86%]
tests/io/qchem/qchem_parsers/test_qchem_sp_timing.py ................... [ 87%]
...............................                                          [ 89%]
tests/io/qchem/qchem_parsers/test_qchem_tddft_basics.py ................ [ 90%]
........................................................................ [ 95%]
........                                                                 [ 95%]
tests/smoke_test.py ...........                                          [ 96%]
tests/test_slurm.py .................................................... [100%]

================================ tests coverage ================================
_______________ coverage: platform linux, python 3.13.9-final-0 ________________

Name                                                Stmts   Miss  Cover   Missing
---------------------------------------------------------------------------------
src/calcflow/basis/loader.py                            0      0   100%
src/calcflow/basis/models.py                            0      0   100%
src/calcflow/common/exceptions.py                       7      0   100%
src/calcflow/common/input.py                          157     11    93%   153, 155, 159, 164, 177, 181, 185, 218, 235, 245, 316
src/calcflow/common/patterns.py                        53      3    94%   34-35, 102
src/calcflow/common/results.py                        329      0   100%
src/calcflow/geometry/static.py                        69      1    99%   59
src/calcflow/geometry/trajectory.py                    42      0   100%
src/calcflow/io/core.py                                43     10    77%   59-65, 72-79, 83
src/calcflow/io/orca/blocks/charges.py                 44      8    82%   65, 70-72, 96-98, 102-103
src/calcflow/io/orca/blocks/dipole.py                  45      7    84%   69-70, 76-77, 83, 86, 103
src/calcflow/io/orca/blocks/dispersion.py             112      5    96%   166-170, 179, 183
src/calcflow/io/orca/blocks/finalization.py            17      0   100%
src/calcflow/io/orca/blocks/geometry.py                28      3    89%   30-31, 34
src/calcflow/io/orca/blocks/orbitals.py                50      6    88%   83, 115-121, 124
src/calcflow/io/orca/blocks/scf.py                    105      3    97%   55, 151, 163
src/calcflow/io/orca/blocks/timing.py                  31      1    97%   39
src/calcflow/io/orca/builder.py                        81      0   100%
src/calcflow/io/orca/parser.py                         14      0   100%
src/calcflow/io/qchem/blocks/charges.py                38      8    79%   58-60, 72, 83-85, 89-90
src/calcflow/io/qchem/blocks/finalization.py           16      0   100%
src/calcflow/io/qchem/blocks/geometry.py               58      6    90%   71, 75, 98-102, 105
src/calcflow/io/qchem/blocks/metadata.py               20      0   100%
src/calcflow/io/qchem/blocks/multipole.py             117     16    86%   79-81, 101, 128-129, 145-146, 156-157, 167-168, 185, 205-207, 215
src/calcflow/io/qchem/blocks/orbitals.py               95      9    91%   62, 75-76, 142, 144, 159, 186-188, 214
src/calcflow/io/qchem/blocks/patterns.py                6      0   100%
src/calcflow/io/qchem/blocks/scf.py                   108      8    93%   93-94, 125-126, 145, 150, 187, 203
src/calcflow/io/qchem/blocks/tddft/excitations.py      97      5    95%   76, 175-176, 186, 190
src/calcflow/io/qchem/blocks/tddft/gs_ref.py          108      8    93%   138-139, 199, 201, 203, 205, 207, 233
src/calcflow/io/qchem/blocks/tddft/nto.py              91      7    92%   95-96, 123-124, 190-192
src/calcflow/io/qchem/blocks/tddft/trans_dm.py        322     34    89%   35, 38-39, 87-92, 95-98, 143-147, 163, 172-177, 182-184, 227-228, 245, 254, 274-275, 353, 428-429
src/calcflow/io/qchem/blocks/tddft/unrel_dm.py        233     22    91%   35, 38-39, 87-92, 95-98, 144-145, 150-152, 228-229, 244, 264-265, 282, 339
src/calcflow/io/qchem/blocks/timing.py                 18      0   100%
src/calcflow/io/qchem/builder.py                      251     19    92%   51, 101, 220, 224, 235-236, 247, 277, 344, 348, 354-357, 370, 381, 387, 395, 425, 435
src/calcflow/io/qchem/parser.py                        50      4    92%   83, 100, 126-127
src/calcflow/io/state.py                               39      0   100%
src/calcflow/slurm.py                                  47      0   100%
src/calcflow/visualize/opt.py                           0      0   100%
src/calcflow/visualize/scf.py                           0      0   100%
---------------------------------------------------------------------------------
TOTAL                                                2941    204    93%
============================= 1543 passed in 8.48s =============================

@anmorgunov anmorgunov added scope/domain the core logic, abstractions, and internal workings of the package or application type/feature a new capability or enhancement for the user labels Nov 6, 2025
Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

8 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile


# add program-specific directives for parallelism
lines.extend(program_directives)
lines.append("\n")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: appending "\n" to the list will create an empty line in the output, but joining with "\n".join() treats this as a literal string "\n" which becomes \n in the output (double newline). consider appending "" instead for clarity

Suggested change
lines.append("\n")
lines.append("")
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/calcflow/slurm.py
Line: 93:93

Comment:
**style:** appending `"\n"` to the list will create an empty line in the output, but joining with `"\n".join()` treats this as a literal string `"\n"` which becomes `\n` in the output (double newline). consider appending `""` instead for clarity

```suggestion
        lines.append("")
```

How can I resolve this? If you propose a fix, please make it concise.

if self.modules:
for module in self.modules:
lines.append(f"module load {module}")
lines.append("\n")
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: same as line 93 - appending "\n" creates double newline when joined. use "" for clarity

Suggested change
lines.append("\n")
lines.append("")
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/calcflow/slurm.py
Line: 98:98

Comment:
**style:** same as line 93 - appending `"\n"` creates double newline when joined. use `""` for clarity

```suggestion
            lines.append("")
```

How can I resolve this? If you propose a fix, please make it concise.

@github-actions github-actions bot removed the type/feature a new capability or enhancement for the user label Nov 6, 2025
@github-actions
Copy link

github-actions bot commented Nov 6, 2025

Pytest Coverage Report 🧪

============================= test session starts ==============================
platform linux -- Python 3.13.9, pytest-8.4.2, pluggy-1.6.0
rootdir: /home/runner/work/project-prometheus/project-prometheus
configfile: pyproject.toml
plugins: cov-7.0.0
collected 1543 items

tests/common/test_api_docs.py ..................                         [  1%]
tests/common/test_input_serialization.py ............................... [  3%]
.........                                                                [  3%]
tests/common/test_results_serialization.py ............................. [  5%]
......                                                                   [  6%]
tests/geometry/test_static.py ..................                         [  7%]
tests/geometry/test_trajectory.py .......                                [  7%]
tests/io/orca/orca_builders/test_builder_basic.py ...................... [  9%]
............................                                             [ 10%]
tests/io/orca/orca_builders/test_builder_ri.py ......................... [ 12%]
.....                                                                    [ 12%]
tests/io/orca/orca_builders/test_builder_solvation.py .................. [ 13%]
.............                                                            [ 14%]
tests/io/orca/orca_builders/test_builder_tddft.py ...................... [ 16%]
............                                                             [ 17%]
tests/io/orca/orca_builders/test_builder_validation.py ................. [ 18%]
........                                                                 [ 18%]
tests/io/orca/orca_parsers/test_orca_sp_charges.py ..............        [ 19%]
tests/io/orca/orca_parsers/test_orca_sp_dipole.py ..........             [ 20%]
tests/io/orca/orca_parsers/test_orca_sp_dispersion.py .................. [ 21%]
....                                                                     [ 21%]
tests/io/orca/orca_parsers/test_orca_sp_finalization.py ......           [ 22%]
tests/io/orca/orca_parsers/test_orca_sp_orbitals.py ...........          [ 22%]
tests/io/orca/orca_parsers/test_orca_sp_scf.py .................         [ 23%]
tests/io/orca/orca_parsers/test_orca_sp_timing.py .......                [ 24%]
tests/io/qchem/qchem_builders/test_builder_basic.py .................... [ 25%]
...............................                                          [ 27%]
tests/io/qchem/qchem_builders/test_builder_helpers.py .................. [ 28%]
.....                                                                    [ 29%]
tests/io/qchem/qchem_builders/test_builder_mom.py ...................... [ 30%]
.......................                                                  [ 32%]
tests/io/qchem/qchem_builders/test_builder_solvation.py ................ [ 33%]
..................                                                       [ 34%]
tests/io/qchem/qchem_builders/test_builder_tddft.py .................... [ 35%]
.......................                                                  [ 37%]
tests/io/qchem/qchem_builders/test_builder_validation.py ............... [ 37%]
....                                                                     [ 38%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_excitations.py ..... [ 38%]
.......................................................................  [ 43%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_gs_ref.py .......... [ 43%]
.....................                                                    [ 45%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_nto.py ............. [ 46%]
...........................                                              [ 47%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_trans_dm.py ........ [ 48%]
....................................                                     [ 50%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_tddft_unrel_dm.py ........ [ 51%]
..............................                                           [ 53%]
tests/io/qchem/qchem_parsers/tddft/test_qchem_xas_excitations.py ....... [ 53%]
.......................                                                  [ 55%]
tests/io/qchem/qchem_parsers/test_qchem_scf_mom.py ..................... [ 56%]
...................................................                      [ 59%]
tests/io/qchem/qchem_parsers/test_qchem_sp_charges.py .................. [ 60%]
..................                                                       [ 62%]
tests/io/qchem/qchem_parsers/test_qchem_sp_finalization.py ............. [ 62%]
.............                                                            [ 63%]
tests/io/qchem/qchem_parsers/test_qchem_sp_geometry.py ................. [ 64%]
......................................................................   [ 69%]
tests/io/qchem/qchem_parsers/test_qchem_sp_meta.py .....                 [ 69%]
tests/io/qchem/qchem_parsers/test_qchem_sp_multipole.py ................ [ 70%]
................................................................         [ 74%]
tests/io/qchem/qchem_parsers/test_qchem_sp_orbitals.py ................. [ 75%]
..........................................................               [ 79%]
tests/io/qchem/qchem_parsers/test_qchem_sp_scf.py ...................... [ 81%]
........................................................................ [ 85%]
..........                                                               [ 86%]
tests/io/qchem/qchem_parsers/test_qchem_sp_timing.py ................... [ 87%]
...............................                                          [ 89%]
tests/io/qchem/qchem_parsers/test_qchem_tddft_basics.py ................ [ 90%]
........................................................................ [ 95%]
........                                                                 [ 95%]
tests/smoke_test.py ...........                                          [ 96%]
tests/test_slurm.py .................................................... [100%]

================================ tests coverage ================================
_______________ coverage: platform linux, python 3.13.9-final-0 ________________

Name                                                Stmts   Miss  Cover   Missing
---------------------------------------------------------------------------------
src/calcflow/basis/loader.py                            0      0   100%
src/calcflow/basis/models.py                            0      0   100%
src/calcflow/common/exceptions.py                       7      0   100%
src/calcflow/common/input.py                          157     11    93%   153, 155, 159, 164, 177, 181, 185, 218, 235, 245, 316
src/calcflow/common/patterns.py                        53      3    94%   34-35, 102
src/calcflow/common/results.py                        329      0   100%
src/calcflow/geometry/static.py                        69      1    99%   59
src/calcflow/geometry/trajectory.py                    42      0   100%
src/calcflow/io/core.py                                43     10    77%   59-65, 72-79, 83
src/calcflow/io/orca/blocks/charges.py                 44      8    82%   65, 70-72, 96-98, 102-103
src/calcflow/io/orca/blocks/dipole.py                  45      7    84%   69-70, 76-77, 83, 86, 103
src/calcflow/io/orca/blocks/dispersion.py             112      5    96%   166-170, 179, 183
src/calcflow/io/orca/blocks/finalization.py            17      0   100%
src/calcflow/io/orca/blocks/geometry.py                28      3    89%   30-31, 34
src/calcflow/io/orca/blocks/orbitals.py                50      6    88%   83, 115-121, 124
src/calcflow/io/orca/blocks/scf.py                    105      3    97%   55, 151, 163
src/calcflow/io/orca/blocks/timing.py                  31      1    97%   39
src/calcflow/io/orca/builder.py                        81      0   100%
src/calcflow/io/orca/parser.py                         14      0   100%
src/calcflow/io/qchem/blocks/charges.py                38      8    79%   58-60, 72, 83-85, 89-90
src/calcflow/io/qchem/blocks/finalization.py           16      0   100%
src/calcflow/io/qchem/blocks/geometry.py               58      6    90%   71, 75, 98-102, 105
src/calcflow/io/qchem/blocks/metadata.py               20      0   100%
src/calcflow/io/qchem/blocks/multipole.py             117     16    86%   79-81, 101, 128-129, 145-146, 156-157, 167-168, 185, 205-207, 215
src/calcflow/io/qchem/blocks/orbitals.py               95      9    91%   62, 75-76, 142, 144, 159, 186-188, 214
src/calcflow/io/qchem/blocks/patterns.py                6      0   100%
src/calcflow/io/qchem/blocks/scf.py                   108      8    93%   93-94, 125-126, 145, 150, 187, 203
src/calcflow/io/qchem/blocks/tddft/excitations.py      97      5    95%   76, 175-176, 186, 190
src/calcflow/io/qchem/blocks/tddft/gs_ref.py          108      8    93%   138-139, 199, 201, 203, 205, 207, 233
src/calcflow/io/qchem/blocks/tddft/nto.py              91      7    92%   95-96, 123-124, 190-192
src/calcflow/io/qchem/blocks/tddft/trans_dm.py        322     34    89%   35, 38-39, 87-92, 95-98, 143-147, 163, 172-177, 182-184, 227-228, 245, 254, 274-275, 353, 428-429
src/calcflow/io/qchem/blocks/tddft/unrel_dm.py        233     22    91%   35, 38-39, 87-92, 95-98, 144-145, 150-152, 228-229, 244, 264-265, 282, 339
src/calcflow/io/qchem/blocks/timing.py                 18      0   100%
src/calcflow/io/qchem/builder.py                      251     19    92%   51, 101, 220, 224, 235-236, 247, 277, 344, 348, 354-357, 370, 381, 387, 395, 425, 435
src/calcflow/io/qchem/parser.py                        50      4    92%   83, 100, 126-127
src/calcflow/io/state.py                               39      0   100%
src/calcflow/slurm.py                                  47      0   100%
src/calcflow/visualize/opt.py                           0      0   100%
src/calcflow/visualize/scf.py                           0      0   100%
---------------------------------------------------------------------------------
TOTAL                                                2941    204    93%
============================= 1543 passed in 8.46s =============================

@anmorgunov anmorgunov added the type/feature a new capability or enhancement for the user label Nov 6, 2025
@anmorgunov anmorgunov merged commit c573b08 into master Nov 6, 2025
4 checks passed
@anmorgunov anmorgunov deleted the feat/slurm-module branch November 6, 2025 15:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope/domain the core logic, abstractions, and internal workings of the package or application type/feature a new capability or enhancement for the user

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant