[MAINT]: Drop Python 3.9 and add Python 3.14 support #474

Merged
synchon merged 11 commits from chore/maintenance into main 2026-03-12 12:19:51 +00:00
synchon commented 2025-11-07 11:50:57 +00:00 (Migrated from github.com)
  • description of feature/fix
  • tests added/passed
  • add an entry for the latest changes

This PR drops Python 3.9 support and adds Python 3.14 support. Upgrades codebase to follow Python >=3.10 syntax changes, bumps dependencies and also adds proper uv support by adding lockfile.

* [x] description of feature/fix * [x] tests added/passed * [x] add an entry for the latest changes This PR drops Python 3.9 support and adds Python 3.14 support. Upgrades codebase to follow Python >=3.10 syntax changes, bumps dependencies and also adds proper `uv` support by adding lockfile.
codecov[bot] commented 2025-11-07 11:51:35 +00:00 (Migrated from github.com)

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 91.55%. Comparing base (9d87a01) to head (ee3c4e6).
⚠️ Report is 12 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #474      +/-   ##
==========================================
- Coverage   91.70%   91.55%   -0.15%     
==========================================
  Files         146      146              
  Lines        5845     5744     -101     
  Branches      931      929       -2     
==========================================
- Hits         5360     5259     -101     
  Misses        313      313              
  Partials      172      172              
Flag Coverage Δ
docs 100.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
junifer/api/functions.py 91.24% <ø> (-0.13%) ⬇️
...er/api/queue_context/gnu_parallel_local_adapter.py 92.78% <ø> (-0.15%) ⬇️
junifer/api/queue_context/htcondor_adapter.py 95.93% <ø> (-0.07%) ⬇️
junifer/cli/cli.py 81.48% <ø> (-0.34%) ⬇️
junifer/cli/parser.py 85.89% <ø> (-0.53%) ⬇️
junifer/data/_dispatch.py 93.50% <ø> (-0.09%) ⬇️
junifer/data/coordinates/_coordinates.py 100.00% <ø> (ø)
junifer/data/maps/_ants_maps_warper.py 100.00% <ø> (ø)
junifer/data/maps/_maps.py 98.88% <ø> (-0.02%) ⬇️
junifer/data/masks/_ants_mask_warper.py 75.00% <ø> (-1.93%) ⬇️
... and 80 more
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
## [Codecov](https://app.codecov.io/gh/juaml/junifer/pull/474?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml) Report :white_check_mark: All modified and coverable lines are covered by tests. :white_check_mark: Project coverage is 91.55%. Comparing base ([`9d87a01`](https://app.codecov.io/gh/juaml/junifer/commit/9d87a015ad680edd8d236165cece8cecdda51ab5?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml)) to head ([`ee3c4e6`](https://app.codecov.io/gh/juaml/junifer/commit/ee3c4e6c7aadea6aa05692b7421f83cb76b8c2d0?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml)). :warning: Report is 12 commits behind head on main. <details><summary>Additional details and impacted files</summary> [![Impacted file tree graph](https://app.codecov.io/gh/juaml/junifer/pull/474/graphs/tree.svg?width=650&height=150&src=pr&token=5H21JuZXMw&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml)](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml) ```diff @@ Coverage Diff @@ ## main #474 +/- ## ========================================== - Coverage 91.70% 91.55% -0.15% ========================================== Files 146 146 Lines 5845 5744 -101 Branches 931 929 -2 ========================================== - Hits 5360 5259 -101 Misses 313 313 Partials 172 172 ``` | [Flag](https://app.codecov.io/gh/juaml/junifer/pull/474/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml) | Coverage Δ | | |---|---|---| | [docs](https://app.codecov.io/gh/juaml/junifer/pull/474/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml) | `100.00% <ø> (ø)` | | Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#carryforward-flags-in-the-pull-request-comment) to find out more. | [Files with missing lines](https://app.codecov.io/gh/juaml/junifer/pull/474?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml) | Coverage Δ | | |---|---|---| | [junifer/api/functions.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fapi%2Ffunctions.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9hcGkvZnVuY3Rpb25zLnB5) | `91.24% <ø> (-0.13%)` | :arrow_down: | | [...er/api/queue\_context/gnu\_parallel\_local\_adapter.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fapi%2Fqueue_context%2Fgnu_parallel_local_adapter.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9hcGkvcXVldWVfY29udGV4dC9nbnVfcGFyYWxsZWxfbG9jYWxfYWRhcHRlci5weQ==) | `92.78% <ø> (-0.15%)` | :arrow_down: | | [junifer/api/queue\_context/htcondor\_adapter.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fapi%2Fqueue_context%2Fhtcondor_adapter.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9hcGkvcXVldWVfY29udGV4dC9odGNvbmRvcl9hZGFwdGVyLnB5) | `95.93% <ø> (-0.07%)` | :arrow_down: | | [junifer/cli/cli.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fcli%2Fcli.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9jbGkvY2xpLnB5) | `81.48% <ø> (-0.34%)` | :arrow_down: | | [junifer/cli/parser.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fcli%2Fparser.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9jbGkvcGFyc2VyLnB5) | `85.89% <ø> (-0.53%)` | :arrow_down: | | [junifer/data/\_dispatch.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fdata%2F_dispatch.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9kYXRhL19kaXNwYXRjaC5weQ==) | `93.50% <ø> (-0.09%)` | :arrow_down: | | [junifer/data/coordinates/\_coordinates.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fdata%2Fcoordinates%2F_coordinates.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9kYXRhL2Nvb3JkaW5hdGVzL19jb29yZGluYXRlcy5weQ==) | `100.00% <ø> (ø)` | | | [junifer/data/maps/\_ants\_maps\_warper.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fdata%2Fmaps%2F_ants_maps_warper.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9kYXRhL21hcHMvX2FudHNfbWFwc193YXJwZXIucHk=) | `100.00% <ø> (ø)` | | | [junifer/data/maps/\_maps.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fdata%2Fmaps%2F_maps.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9kYXRhL21hcHMvX21hcHMucHk=) | `98.88% <ø> (-0.02%)` | :arrow_down: | | [junifer/data/masks/\_ants\_mask\_warper.py](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree&filepath=junifer%2Fdata%2Fmasks%2F_ants_mask_warper.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml#diff-anVuaWZlci9kYXRhL21hc2tzL19hbnRzX21hc2tfd2FycGVyLnB5) | `75.00% <ø> (-1.93%)` | :arrow_down: | | ... and [80 more](https://app.codecov.io/gh/juaml/junifer/pull/474?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=juaml) | | </details> <details><summary> :rocket: New features to boost your workflow: </summary> - :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems. </details>
fraimondo (Migrated from github.com) requested changes 2025-11-07 12:00:32 +00:00
fraimondo (Migrated from github.com) left a comment

I think you have some UV stuff filtered. Maybe add them to the .gitignore?

I think you have some UV stuff filtered. Maybe add them to the `.gitignore`?
@ -0,0 +1 @@
3.12
fraimondo (Migrated from github.com) commented 2025-11-07 11:59:57 +00:00

why do we need this?

why do we need this?
github-actions[bot] commented 2025-11-07 12:40:09 +00:00 (Migrated from github.com)
PR Preview Action v1.6.2

🚀 View preview at
https://juaml.github.io/junifer/pr-preview/pr-474/

Built to branch gh-pages at 2025-11-07 13:25 UTC.
Preview will be ready when the GitHub Pages deployment is complete.

[PR Preview Action](https://github.com/rossjrw/pr-preview-action) v1.6.2 :---: | <p></p> :rocket: View preview at <br> https://juaml.github.io/junifer/pr-preview/pr-474/ <br><br> | <h6>Built to branch [`gh-pages`](https://github.com/juaml/junifer/tree/gh-pages) at 2025-11-07 13:25 UTC. <br> Preview will be ready when the [GitHub Pages deployment](https://github.com/juaml/junifer/deployments) is complete. <br><br> </h6> <!-- Sticky Pull Request Commentpr-preview -->
synchon (Migrated from github.com) reviewed 2025-11-07 13:30:29 +00:00
@ -0,0 +1 @@
3.12
synchon (Migrated from github.com) commented 2025-11-07 13:30:29 +00:00

It's for uv to use that version when one does uv sync or any uv stuff. 3.13 or 3.14 does not work due to a versioning issue in scikit-learn.

It's for ``uv`` to use that version when one does ``uv sync`` or any ``uv`` stuff. 3.13 or 3.14 does not work due to a versioning issue in ``scikit-learn``.
fraimondo (Migrated from github.com) reviewed 2025-11-07 17:05:18 +00:00
@ -0,0 +1 @@
3.12
fraimondo (Migrated from github.com) commented 2025-11-07 17:05:18 +00:00

the uv.lock file is needed too?

the `uv.lock` file is needed too?
synchon (Migrated from github.com) reviewed 2025-11-07 17:08:59 +00:00
@ -0,0 +1 @@
3.12
synchon (Migrated from github.com) commented 2025-11-07 17:08:59 +00:00

Yes, for reproducible installs using uv.

Yes, for reproducible installs using uv.
synchon commented 2026-03-12 12:19:20 +00:00 (Migrated from github.com)

CI passes on juseless.

CI passes on juseless.
Sign in to join this conversation.
No reviewers
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
juaml/junifer!474
No description provided.