Skip to content

Prepare the release: licenses, metadata, legacy modules, HPO smoke tests - #34

Merged
ludgerpaehler merged 1 commit into
mainfrom
chore/release-fixes
Oct 11, 2026
Merged

ludgerpaehler merged 1 commit into
mainfrom
chore/release-fixes

Conversation

@ludgerpaehler

Copy link
Copy Markdown
Collaborator

Summary

Fixes from the final release audit, in one PR.

1. Licenses

  • LICENSE.md is now the MIT license of KoopmanRL alone, so GitHub detects it as MIT instead of "Other".
  • LICENSES/ holds the third-party texts:
    • MIT-CleanRL.txt;
    • LGPL-3.0-only.txt, for the observables adapted from d3s, whose repository is LGPL-3.0;
    • GPL-3.0-only.txt, the text the LGPL supplements. It was missing before. Both GNU texts are verbatim from gnu.org.
  • LICENSES/README.md says which file is under which license. The old list named value_function_continuous_action.py, which does not exist.
  • SPDX headers (LGPL-3.0-only) are added to koopmanrl/koopman_observables.py and koopmanrl/koopman_tensor/observables/{numpy,torch}_observables.py. The first and last stay identical.
  • License declarations:
    • pyproject.toml: license = "MIT AND LGPL-3.0-only", plus license-files. The built wheel ships all four license files.
    • CITATION.cff: license: [MIT, LGPL-3.0-only].
    • .zenodo.json: keeps "license": "MIT", since a Zenodo deposit takes one license, and its description now names the LGPL part.
    • README.md: a new License section.

2–4. Citation metadata

  • .zenodo.json:
    • title is now KoopmanRL.
    • The related identifier pointed to github.com/dynamicslab/koopman-rl, which does not exist. It now points to arXiv:2403.02290 (isSupplementTo, scheme arxiv).
    • Affiliations and the other fields are unchanged; they are left for the author to update.
  • CITATION.cff: date-released: 2026-10-10.

5–7. pyproject.toml

  • repository is not a valid [project] key, so the built package carried no project URLs. They now live in [project.urls]: Repository, Documentation and Paper.
  • Development Status :: 2 - Pre-Alpha becomes 3 - Alpha.
  • Preston Rozwood's email is now pwr@cornell.edu, as in CITATION.cff.

8. Legacy modules removed

These two modules were broken and no longer used:

  • koopmanrl/interpretability_discrete_value_iteration.py imported a module analysis that does not exist, so it could not even be imported.
  • koopmanrl_utils/plot_csv_from_tensorboards.py had hard-coded 2024 run names and a "TODO: Debug", and used pandas, which is not a declared dependency.

The docs API table and the two AGENTS.md trees no longer list them.

9. Hyperparameter-optimization tests are smoke tests

tests/test_hparam_opt.py:

  • Each test is one Ray Tune study with --num_samples=1, --max_concurrent=1 and --cpu_cores_per_trial=1. Before, it requested 16 cores per trial, so on smaller machines it hung until the 600 s timeout.
  • By default only LinearSystem-v0 runs: one study per algorithm, about 1.5 minutes.
  • The other three environments carry a new marker, hpo_full, which addopts in pyproject.toml deselects. Run them with uv run pytest tests/test_hparam_opt.py -m hpo_full, or everything with -m "".
  • Ray's temporary directory is now a short directory under /tmp, removed afterwards. With pytest's tmp_path, Ray's AF_UNIX socket paths exceeded the macOS limit, so these tests could not run on macOS at all. They now do.
  • tests/AGENTS.md, the root AGENTS.md and docs/docs/developers/contributing.md describe the new behaviour.

10. README: the uv run gap

After the alternative setup (uv venv + uv pip install .), the README went on with uv run ..., which re-syncs the environment to the lock file and so replaces the uv pip install .. The first-run example now shows both forms, uv run -m after uv sync and python -m in the activated environment, and a note explains the difference.

11. Merged branches

The 14 fully merged branches on GitHub have been deleted (each was checked to be an ancestor of main). Only main and this PR's branch remain.

Test plan

  • uv run pytest: 282 passed, 6 deselected (hpo_full), in 4 min 14 s
  • uv run pytest tests/test_hparam_opt.py: 2 passed in 90 s, on macOS with 16 cores
  • uv run pytest tests/test_hparam_opt.py -m hpo_full: 6 passed in 4 min 45 s
  • No Ray processes left after the tests
  • uv run pre-commit run --all-files
  • uv lock --check
  • cffconvert --validate
  • json.tool on .zenodo.json
  • validate-pyproject
  • uv build: the wheel METADATA has License-Expression: MIT AND LGPL-3.0-only, four License-Files, three Project-URLs, 3 - Alpha, and the corrected email
  • cd docs && npm ci && npm run build

🤖 Generated with Claude Code

Licenses: LICENSE.md is the MIT license of KoopmanRL alone, so that it is
detected as MIT. The third-party texts move to LICENSES/: CleanRL's MIT
license, and the LGPL-3.0 of the observables adapted from d3s together with
the GPL-3.0 it supplements, which was missing. LICENSES/README.md says which
file is under which license (the list named a file that does not exist).
The three d3s-derived files carry SPDX headers, and pyproject, CITATION.cff
and .zenodo.json declare MIT AND LGPL-3.0-only.

Metadata:
* .zenodo.json: title KoopmanRL; the related identifier pointed to a
  repository that does not exist and now names arXiv:2403.02290.
* CITATION.cff: date-released is today.
* pyproject.toml: `repository` was not a valid [project] key, so the
  package had no project URLs; they are in [project.urls]. Development
  status 3 - Alpha. Preston Rozwood's email as in CITATION.cff.

Legacy modules removed: koopmanrl/interpretability_discrete_value_iteration.py
(imported a module `analysis` that does not exist) and
koopmanrl_utils/plot_csv_from_tensorboards.py (hard-coded 2024 run names, a
"TODO: Debug", undeclared pandas). Neither was used.

test_hparam_opt is a smoke test: one single-sample study on one CPU core per
algorithm, on the linear system by default; the other environments carry
the hpo_full marker, deselected by default. Ray's temporary directory is a
short directory under /tmp, so the tests also run on macOS.

README: in a virtual environment set up with `uv pip install .`, commands
run with `python -m`, since `uv run` would re-sync the environment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ludgerpaehler
ludgerpaehler merged commit da9862d into main Oct 11, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant