Skip to content

Conversation

@anmorgunov
Copy link
Contributor

@anmorgunov anmorgunov commented Nov 15, 2025

Greptile Overview

Greptile Summary

Migrated from manual version management to setuptools-scm for automated git-tag-based versioning and added version tracking to serialized data structures.

Key Changes:

  • Removed manual version-bump workflow that updated pyproject.toml after releases
  • Configured setuptools-scm to derive version dynamically from git tags at build time
  • Added __version__ attribute to package root using importlib.metadata.version()
  • Enhanced serialization: CalculationInput.to_dict() and CalculationResult.to_dict() now include calcflow_version field
  • Maintained backward compatibility: from_dict() methods properly strip calcflow_version field before reconstruction
  • Simplified CI: publish workflow now triggers directly on release publication instead of chaining workflows

Benefits:

  • Single source of truth for versions (git tags)
  • Serialized outputs are now traceable to specific package versions
  • Eliminates manual version synchronization and commit noise
  • Existing tests remain compatible (version field is optional and stripped during deserialization)

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk
  • The changes are well-structured and follow best practices: setuptools-scm is a mature, widely-used solution for version management; backward compatibility is properly maintained through explicit version field removal in deserialization; the workflow simplification reduces complexity; and the existing test suite validates serialization roundtrips remain functional
  • No files require special attention

Important Files Changed

File Analysis

Filename Score Overview
pyproject.toml 5/5 migrated from static version to dynamic version with setuptools-scm for git-tag-based versioning
.github/workflows/publish-pypi.yml 5/5 simplified workflow to trigger on release publication, added fetch-depth: 0 for setuptools-scm
src/calcflow/init.py 5/5 added __version__ attribute using importlib.metadata for runtime version access
src/calcflow/common/input.py 5/5 added calcflow_version field to serialized output for tracking, properly handled in from_dict
src/calcflow/common/results.py 5/5 added calcflow_version field to serialized output for tracking, properly handled in from_dict

Sequence Diagram

sequenceDiagram
    participant Dev as Developer
    participant GH as GitHub Release
    participant Workflow as Publish Workflow
    participant SCM as setuptools-scm
    participant Git as Git Tags
    participant PyPI as PyPI
    participant User as Package User
    
    Note over Dev,GH: Release Process
    Dev->>GH: Create and publish release with tag (e.g., v0.2.3)
    GH->>Workflow: Trigger on release.published event
    
    Note over Workflow,Git: Build Process
    Workflow->>Git: Checkout master with fetch-depth: 0
    Workflow->>SCM: Build package with uv build
    SCM->>Git: Read all git tags and history
    Git-->>SCM: Return tags (v0.2.3)
    SCM->>SCM: Generate version from latest tag
    
    Note over Workflow,PyPI: Publish
    Workflow->>Workflow: Run smoke tests
    Workflow->>PyPI: Publish to PyPI
    
    Note over User: Usage & Serialization
    User->>User: Install package from PyPI
    User->>User: Import calcflow
    Note over User: __version__ = "0.2.3"
    User->>User: Create CalculationInput/Result
    User->>User: Call .to_dict() or .to_json()
    Note over User: Output includes "calcflow_version": "0.2.3"
    User->>User: Call .from_dict() or .from_json()
    Note over User: Version field removed, backward compatible
Loading

@gemini-code-assist
Copy link

Summary of Changes

Hello @anmorgunov, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request modernizes the calcflow project's version management by adopting setuptools-scm for dynamic versioning, which streamlines the release process. A key improvement is the inclusion of the calcflow version directly into serialized CalculationInput and CalculationResult objects, providing crucial metadata for data provenance. The changes also ensure backward compatibility during deserialization and include a minor cleanup by removing an old input file.

Highlights

  • Dynamic Versioning: The project has migrated from a static version declaration to dynamic version management using setuptools-scm. This change automatically derives the package version from Git tags, eliminating manual updates in pyproject.toml and uv.lock.
  • Version Inclusion in Serialization: The calcflow package version is now embedded within the serialized output of CalculationInput and CalculationResult objects. This enhancement aids in tracking data provenance and ensuring compatibility across different versions of the library.
  • Backward Compatibility: Deserialization methods for CalculationInput and CalculationResult have been updated to gracefully handle and ignore the newly introduced calcflow_version field. This ensures that older serialized data can still be processed without errors.
  • File Cleanup: An outdated ORCA input file, h2o.inp, has been removed from the repository.
Ignored Files
  • Ignored by pattern: .github/workflows/** (2)
    • .github/workflows/publish-pypi.yml
    • .github/workflows/version-bump.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@github-actions
Copy link

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                          160     11    93%   154, 156, 160, 165, 178, 182, 186, 219, 236, 246, 317
src/calcflow/common/patterns.py                        53      3    94%   34-35, 102
src/calcflow/common/results.py                        333      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                                                2948    204    93%
============================= 1543 passed in 8.82s =============================

@anmorgunov anmorgunov added scope/ci-cd affects github actions, deployment, or build processes type/feature a new capability or enhancement for the user labels Nov 15, 2025
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request successfully migrates the project to dynamic versioning using setuptools-scm and includes the package version in serialized data structures for improved reproducibility. The changes are logical and well-implemented across pyproject.toml, uv.lock, and the source code. I have a couple of suggestions to optimize the version retrieval during serialization by caching it at module load time, which will improve performance if these methods are called frequently. Please also consider that the tests for serialization will likely need updates to account for the new calcflow_version field in the output dictionaries.

"""
data = asdict(self)
# asdict already recursively converts nested dataclasses
data["calcflow_version"] = version("calcflow")

Choose a reason for hiding this comment

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

medium

Calling version("calcflow") on every serialization can introduce performance overhead, as it may involve filesystem access to read package metadata. Since the version is constant for a given installation, it's more efficient to query it once when the module is loaded and cache the result.

Consider this pattern:

# At the top of the file, after imports
_CALCFLOW_VERSION = version("calcflow")

# ...

# In the to_dict method
data["calcflow_version"] = _CALCFLOW_VERSION

This change will prevent repeated lookups if to_dict() is called in a hot loop. A similar improvement can be made in src/calcflow/common/results.py.

Includes calcflow_version for tracking which version created this result."""
data = super().to_dict()
data.pop("raw_output", None)
data["calcflow_version"] = get_version("calcflow")

Choose a reason for hiding this comment

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

medium

To improve performance, the package version should be fetched only once at module load time instead of on every call to to_dict(). This avoids the potential overhead of repeated filesystem access from get_version().

You can cache the version in a module-level constant:

# At the top of the file, after imports
_CALCFLOW_VERSION = get_version("calcflow")

# ...

# Then, inside the to_dict method
data["calcflow_version"] = _CALCFLOW_VERSION

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.

7 files reviewed, no comments

Edit Code Review Agent Settings | Greptile

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

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                          161     11    93%   157, 159, 163, 168, 181, 185, 189, 222, 239, 249, 320
src/calcflow/common/patterns.py                        53      3    94%   34-35, 102
src/calcflow/common/results.py                        334      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                                                2950    204    93%
============================= 1543 passed in 8.60s =============================

@anmorgunov anmorgunov added the type/feature a new capability or enhancement for the user label Nov 15, 2025
@anmorgunov anmorgunov merged commit 9d63e1a into master Nov 15, 2025
4 checks passed
@anmorgunov anmorgunov deleted the ci/packaging branch November 15, 2025 18:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

scope/ci-cd affects github actions, deployment, or build processes 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