Skip to content

Use EasyBuild's LooseVersion to compare version numbers on software overview page#752

Merged
boegel merged 14 commits intoEESSI:mainfrom
bedroge:compare_versions_fix
May 1, 2026
Merged

Use EasyBuild's LooseVersion to compare version numbers on software overview page#752
boegel merged 14 commits intoEESSI:mainfrom
bedroge:compare_versions_fix

Conversation

@bedroge
Copy link
Copy Markdown
Collaborator

@bedroge bedroge commented May 1, 2026

I noticed that version numbers are currently sorted alphabetically on the software overview page, for software, extensions, and the ldjson metadata. This fixes it by using EB's LooseVersion. I tried using Python's packaging.version.Version and https://pypi.org/project/looseversion/, but they have issues with certain version numbers, e.g. LAMMPS 2Aug2023_update2.

@bedroge
Copy link
Copy Markdown
Collaborator Author

bedroge commented May 1, 2026

Ran it locally, some diffs between the new and old version:

# Cython:
-  softwareVersion: '[''3.1.2'', ''3.1.1'', ''3.0.8'', ''3.0.10'']'
+  softwareVersion: '[''3.1.2'', ''3.1.1'', ''3.0.10'', ''3.0.8'']'

 |Cython version|Supported CPU targets|Supported GPU targets|EESSI version|Module|
 | --- | --- | --- | --- | --- |
+|3.0.8|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202306">2023.06</span>|`Cython/3.0.8-GCCcore-12.3.0`|
 |3.0.10|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202306">2023.06</span>|`Cython/3.0.10-GCCcore-13.2.0`|
 |3.0.10|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202506">2025.06</span>|`Cython/3.0.10-GCCcore-13.3.0`|
-|3.0.8|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202306">2023.06</span>|`Cython/3.0.8-GCCcore-12.3.0`|
 |3.1.1|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202506">2025.06</span>|`Cython/3.1.1-GCCcore-14.2.0`|
 |3.1.2|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202506">2025.06</span>|`Cython/3.1.2-GCCcore-14.3.0`|


# GDAL:
-  softwareVersion: '[''3.9.0'', ''3.7.1'', ''3.6.2'', ''3.10.0'']'
+  softwareVersion: '[''3.10.0'', ''3.9.0'', ''3.7.1'', ''3.6.2'']'

-|3.10.0|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202506">2025.06</span>|`GDAL/3.10.0-foss-2024a`|
 |3.6.2|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202306">2023.06</span>|`GDAL/3.6.2-foss-2022b`|
 |3.7.1|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202306">2023.06</span>|`GDAL/3.7.1-foss-2023a`|
-|3.9.0|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202306">2023.06</span>|`GDAL/3.9.0-foss-2023b`|
\ No newline at end of file
+|3.9.0|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202306">2023.06</span>|`GDAL/3.9.0-foss-2023b`|
+|3.10.0|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202506">2025.06</span>|`GDAL/3.10.0-foss-2024a`|
\ No newline at end of file


# numexpr extension in SciPy-bundle:
 |`numexpr` version|SciPy-bundle modules that include it|
 | --- | --- |
-|2.10.0|`SciPy-bundle/2024.05-gfbf-2024a`|
-|2.11.0|`SciPy-bundle/2025.06-gfbf-2025a`<br/>`SciPy-bundle/2025.07-gfbf-2025b`|
 |2.8.4|`SciPy-bundle/2023.02-gfbf-2022b`<br/>`SciPy-bundle/2023.07-gfbf-2023a`|
 |2.8.7|`SciPy-bundle/2023.11-gfbf-2023b`|
+|2.10.0|`SciPy-bundle/2024.05-gfbf-2024a`|
+|2.11.0|`SciPy-bundle/2025.06-gfbf-2025a`<br/>`SciPy-bundle/2025.07-gfbf-2025b`|

@bedroge
Copy link
Copy Markdown
Collaborator Author

bedroge commented May 1, 2026

Should we also reverse the ordering on the page itself, i.e. list newest versions first? We already do the same for the ldjson metadata.

Copy link
Copy Markdown
Member

@ocaisa ocaisa left a comment

Choose a reason for hiding this comment

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

Looks ok to me, the test seems like it needs to be updated

@bedroge
Copy link
Copy Markdown
Collaborator Author

bedroge commented May 1, 2026

Should we also reverse the ordering on the page itself, i.e. list newest versions first? We already do the same for the ldjson metadata.

Done in 4d5942c.

@ocaisa
Copy link
Copy Markdown
Member

ocaisa commented May 1, 2026

Bit of work to do now to update the tests for the new ordering

Comment thread scripts/available_software/tests/reference_detail/ESPResSo.md Outdated
@ocaisa
Copy link
Copy Markdown
Member

ocaisa commented May 1, 2026

We might want to consider making the test failures a bit more helpful. My AI friend says

with open(target_markdown_file) as f1, open(reference_file) as f2:
    assert f1.read() == f2.read()

@bedroge
Copy link
Copy Markdown
Collaborator Author

bedroge commented May 1, 2026

Ran the test myself to get the diff, the generated output has:

|1.27.0|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202506">2025.06</span>|`hatchling/1.27.0-GCCcore-14.2.0`|
|1.27.0|`generic`: `aarch64`, `x86_64`<br/><span class="software-cpu-arm">Arm</span>: `a64fx`, `neoverse_n1`, `neoverse_v1`, `nvidia/grace`<br/><span class="software-cpu-amd">AMD</span>: `zen2`, `zen3`, `zen4`<br/><span class="software-cpu-intel">Intel</span>: `haswell`, `skylake_avx512`, `sapphirerapids`, `icelake`, `cascadelake`<br/>|*(none)*|<span class="software-eessi-version-202506">2025.06</span>|`hatchling/1.27.0-GCCcore-14.3.0`|

Ideally, I'd like to list the same version with a newer toolchain first, but I'll have to check if we can easily do that.

edit: the metadata has a module_version which we can use as the key for sorting.

@bedroge
Copy link
Copy Markdown
Collaborator Author

bedroge commented May 1, 2026

I sort of would have expected/preferred ESPResSo/4.2.2-foss-2023a to be listed above ESPResSo/4.2.2-foss-2023a-CUDA-12.1.1, but LooseVersion sorts them that way:

>>> LooseVersion('ESPResSo/4.2.2-foss-2023a-CUDA-12.1.1') > LooseVersion('ESPResSo/4.2.2-foss-2023a')
True

So I guess it is what it is. @ocaisa I think this should be ready now.

Copy link
Copy Markdown
Member

@ocaisa ocaisa left a comment

Choose a reason for hiding this comment

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

LGTM

Copy link
Copy Markdown
Contributor

@boegel boegel left a comment

Choose a reason for hiding this comment

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

lgtm

@boegel boegel merged commit 734a5f6 into EESSI:main May 1, 2026
3 checks passed
@bedroge bedroge deleted the compare_versions_fix branch May 1, 2026 14:24
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.

3 participants