anemoi-utils 0.4.11__tar.gz → 0.4.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of anemoi-utils might be problematic. Click here for more details.

Files changed (104) hide show
  1. anemoi_utils-0.4.13/.github/dependabot.yml +10 -0
  2. anemoi_utils-0.4.13/.github/labeler.yml +43 -0
  3. anemoi_utils-0.4.13/.github/pull_request_template.md +46 -0
  4. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.github/release.yml +5 -2
  5. anemoi_utils-0.4.13/.github/workflows/downstream-ci-hpc.yml +60 -0
  6. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.github/workflows/pr-conventional-commit.yml +2 -1
  7. anemoi_utils-0.4.13/.github/workflows/pr-label-conventional-commits.yml +48 -0
  8. anemoi_utils-0.4.13/.github/workflows/pr-label-file-based.yml +17 -0
  9. anemoi_utils-0.4.11/.github/workflows/label-public-pr.yml → anemoi_utils-0.4.13/.github/workflows/pr-label-public.yml +2 -2
  10. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.github/workflows/python-publish.yml +2 -2
  11. anemoi_utils-0.4.13/.github/workflows/python-pull-request.yml +25 -0
  12. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.github/workflows/readthedocs-pr-update.yml +2 -0
  13. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.github/workflows/release-please.yml +7 -3
  14. anemoi_utils-0.4.13/.gitignore +137 -0
  15. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.pre-commit-config.yaml +8 -4
  16. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.readthedocs.yaml +1 -1
  17. anemoi_utils-0.4.13/.release-please-config.json +20 -0
  18. anemoi_utils-0.4.13/.release-please-manifest.json +3 -0
  19. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/CHANGELOG.md +35 -0
  20. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/CONTRIBUTORS.md +2 -2
  21. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/LICENSE +1 -1
  22. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/PKG-INFO +7 -4
  23. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/README.md +2 -2
  24. anemoi_utils-0.4.13/docs/_static/logo.png +0 -0
  25. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/pyproject.toml +18 -2
  26. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/__init__.py +1 -0
  27. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/__main__.py +12 -2
  28. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/_version.py +9 -4
  29. anemoi_utils-0.4.13/src/anemoi/utils/caching.py +249 -0
  30. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/checkpoints.py +81 -13
  31. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/cli.py +83 -7
  32. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/commands/__init__.py +4 -0
  33. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/commands/config.py +19 -2
  34. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/commands/requests.py +24 -4
  35. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/compatibility.py +6 -5
  36. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/config.py +254 -23
  37. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/dates.py +216 -55
  38. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/devtools.py +68 -7
  39. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/grib.py +30 -9
  40. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/grids.py +85 -8
  41. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/hindcasts.py +25 -8
  42. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/humanize.py +357 -52
  43. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/logs.py +31 -3
  44. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/mars/__init__.py +46 -12
  45. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/mars/requests.py +15 -1
  46. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/provenance.py +185 -28
  47. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/registry.py +122 -13
  48. anemoi_utils-0.4.13/src/anemoi/utils/remote/__init__.py +680 -0
  49. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/remote/s3.py +252 -29
  50. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/remote/ssh.py +140 -8
  51. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/s3.py +77 -4
  52. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/sanitise.py +52 -7
  53. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/text.py +218 -54
  54. anemoi_utils-0.4.13/src/anemoi/utils/timer.py +150 -0
  55. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi_utils.egg-info/PKG-INFO +7 -4
  56. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi_utils.egg-info/SOURCES.txt +7 -3
  57. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi_utils.egg-info/requires.txt +6 -2
  58. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_caching.py +94 -15
  59. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_compatibility.py +3 -0
  60. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_dates.py +21 -5
  61. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_frequency.py +4 -2
  62. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_grids.py +2 -1
  63. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_provenance.py +2 -2
  64. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_remote.py +92 -10
  65. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_sanetise.py +4 -2
  66. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test_utils.py +31 -4
  67. anemoi_utils-0.4.11/.github/workflows/ci.yml +0 -58
  68. anemoi_utils-0.4.11/.github/workflows/merge-main-into-develop.yml +0 -31
  69. anemoi_utils-0.4.11/.github/workflows/python-pull-request.yml +0 -28
  70. anemoi_utils-0.4.11/.gitignore +0 -188
  71. anemoi_utils-0.4.11/.release-please-config.json +0 -19
  72. anemoi_utils-0.4.11/.release-please-manifest.json +0 -3
  73. anemoi_utils-0.4.11/docs/_static/logo.png +0 -0
  74. anemoi_utils-0.4.11/src/anemoi/utils/caching.py +0 -124
  75. anemoi_utils-0.4.11/src/anemoi/utils/remote/__init__.py +0 -332
  76. anemoi_utils-0.4.11/src/anemoi/utils/timer.py +0 -74
  77. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.gitattributes +0 -0
  78. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.github/CODEOWNERS +0 -0
  79. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/.github/ci-hpc-config.yml +0 -0
  80. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/Makefile +0 -0
  81. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/_static/style.css +0 -0
  82. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/_templates/.gitkeep +0 -0
  83. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/conf.py +0 -0
  84. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/index.rst +0 -0
  85. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/installing.rst +0 -0
  86. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/modules/checkpoints.rst +0 -0
  87. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/modules/config.rst +0 -0
  88. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/modules/dates.rst +0 -0
  89. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/modules/grib.rst +0 -0
  90. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/modules/humanize.rst +0 -0
  91. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/modules/provenance.rst +0 -0
  92. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/modules/s3.rst +0 -0
  93. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/docs/modules/text.rst +0 -0
  94. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/setup.cfg +0 -0
  95. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/mars/mars.yaml +0 -0
  96. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi/utils/sanitize.py +0 -0
  97. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi_utils.egg-info/dependency_links.txt +0 -0
  98. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi_utils.egg-info/entry_points.txt +0 -0
  99. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/src/anemoi_utils.egg-info/top_level.txt +0 -0
  100. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test-transfer-data/directory/b/c/x +0 -0
  101. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test-transfer-data/directory/b/y +0 -0
  102. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test-transfer-data/directory/exotic filename ;^/"'[=.,#]()/303/252/303/274/303/247/303/262/342/234/205.txt" +0 -0
  103. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test-transfer-data/directory/z +0 -0
  104. {anemoi_utils-0.4.11 → anemoi_utils-0.4.13}/tests/test-transfer-data/file +0 -0
@@ -0,0 +1,10 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ # - package-ecosystem: "github-actions"
8
+ # directory: "/"
9
+ # schedule:
10
+ # interval: "monthly"
@@ -0,0 +1,43 @@
1
+ # This is the configuration file for the labeler action.
2
+ # It assigns labels to pull requests based on the files changed in the PR.
3
+ # See more here: https://github.com/actions/labeler
4
+ dependencies:
5
+ - changed-files:
6
+ - any-glob-to-any-file:
7
+ - "**/requirements.txt"
8
+ - "**/setup.py"
9
+ - "**/pyproject.toml"
10
+ - "**/Pipfile"
11
+ - "**/Pipfile.lock"
12
+ - "**/requirements/*.txt"
13
+ - "**/requirements/*.in"
14
+
15
+ documentation:
16
+ - changed-files:
17
+ - any-glob-to-any-file:
18
+ - "**/docs/**/*"
19
+ - "*.md"
20
+ - "*.rst"
21
+
22
+ config:
23
+ - changed-files:
24
+ - any-glob-to-any-file:
25
+ - "**/src/**/config/**/*"
26
+ - "**/src/anemoi/inference/config.py"
27
+
28
+ CI/CD:
29
+ - changed-files:
30
+ - any-glob-to-any-file:
31
+ - "**/.pre-commit-config.yaml"
32
+ - ".github/**/*"
33
+ - "tox.ini"
34
+ - ".coveragerc"
35
+
36
+ tests:
37
+ - changed-files:
38
+ - any-glob-to-any-file:
39
+ - "**/tests/**/*"
40
+ - "**/test/**/*"
41
+ - "**/test_*.py"
42
+ - "**/test.py"
43
+ - "**/conftest.py"
@@ -0,0 +1,46 @@
1
+ ## Description
2
+
3
+ <!-- Provide a brief summary of the changes introduced in this pull request. -->
4
+
5
+ ## Type of Change
6
+
7
+ - [ ] Bug fix (non-breaking change which fixes an issue)
8
+ - [ ] New feature (non-breaking change which adds functionality)
9
+ - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
10
+ - [ ] Documentation update
11
+
12
+ ## Issue Number
13
+
14
+ <!-- Link the Issue number this change addresses, ideally in one of the "magic format" such as Closes #XYZ -->
15
+
16
+ <!-- Alternatively, explain the motivation behind the changes and the context in which they are being made. -->
17
+
18
+ ## Code Compatibility
19
+
20
+ - [ ] I have performed a self-review of my code
21
+
22
+ ### Code Performance and Testing
23
+
24
+ - [ ] I have added tests that prove my fix is effective or that my feature works
25
+ - [ ] I ran the [complete Pytest test](https://anemoi.readthedocs.io/projects/training/en/latest/dev/testing.html) suite locally, and they pass
26
+
27
+ <!-- In case this affects the model sharding or other specific components please describe these here. -->
28
+
29
+ ### Dependencies
30
+
31
+ - [ ] I have ensured that the code is still pip-installable after the changes and runs
32
+ - [ ] I have tested that new dependencies themselves are pip-installable.
33
+
34
+ <!-- List any new dependencies that are required for this change and the justification to add them. -->
35
+
36
+ ### Documentation
37
+
38
+ - [ ] My code follows the style guidelines of this project
39
+ - [ ] I have updated the documentation and docstrings to reflect the changes
40
+ - [ ] I have added comments to my code, particularly in hard-to-understand areas
41
+
42
+ <!-- Describe any major updates to the documentation -->
43
+
44
+ ## Additional Notes
45
+
46
+ <!-- Include any additional information, caveats, or considerations that the reviewer should be aware of. -->
@@ -11,10 +11,13 @@ changelog:
11
11
  categories:
12
12
  - title: Breaking Changes 🛠
13
13
  labels:
14
- - breaking-change
14
+ - "breaking change"
15
15
  - title: Exciting New Features 🎉
16
16
  labels:
17
17
  - enhancement
18
- - title: Other Changes
18
+ - title: Config Changes 📑
19
+ labels:
20
+ - config
21
+ - title: Other Changes 🔗
19
22
  labels:
20
23
  - "*"
@@ -0,0 +1,60 @@
1
+ # This workflow triggers tests on dependent packages.
2
+ # The dependency tree itself is defined in ecmwf-actions/downstream-ci/
3
+ name: Test downstream dependent packages on HPC
4
+
5
+ on:
6
+ # Trigger the workflow on push to main or develop, except tag creation
7
+ push:
8
+ branches:
9
+ - 'main'
10
+ - 'develop'
11
+ tags-ignore:
12
+ - '**'
13
+ paths-ignore:
14
+ - "docs/**"
15
+ - "CHANGELOG.md"
16
+ - "README.md"
17
+
18
+ # Trigger the workflow on pull request
19
+ pull_request:
20
+ paths-ignore:
21
+ - "docs/**"
22
+ - "CHANGELOG.md"
23
+ - "README.md"
24
+
25
+ # Trigger the workflow manually
26
+ workflow_dispatch: ~
27
+
28
+ # Trigger after public PR approved for CI
29
+ pull_request_target:
30
+ types: [labeled]
31
+ paths-ignore:
32
+ - "docs/**"
33
+ - "CHANGELOG.md"
34
+ - "README.md"
35
+
36
+ jobs:
37
+ # Run CI including downstream packages on self-hosted runners
38
+ downstream-ci:
39
+ name: downstream-ci
40
+ if: ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }}
41
+ uses: ecmwf-actions/downstream-ci/.github/workflows/downstream-ci.yml@main
42
+ with:
43
+ anemoi-utils: ecmwf/anemoi-utils@${{ github.event.pull_request.head.sha || github.sha }}
44
+ codecov_upload: true
45
+ # Only run on fedora
46
+ skip_matrix_jobs: |
47
+ gnu@debian-11
48
+ gnu@rocky-8.6
49
+ clang@rocky-8.6
50
+ gnu@ubuntu-22.04
51
+ secrets: inherit
52
+
53
+ # # Build downstream packages on HPC
54
+ # downstream-ci-hpc:
55
+ # name: downstream-ci-hpc
56
+ # if: ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }}
57
+ # uses: ecmwf-actions/downstream-ci/.github/workflows/downstream-ci-hpc.yml@main
58
+ # with:
59
+ # anemoi-utils: ecmwf/anemoi-utils@${{ github.event.pull_request.head.sha || github.sha }}
60
+ # secrets: inherit
@@ -1,4 +1,5 @@
1
- name: "Ensure Conventional Commit in PR title"
1
+ # This workflow ensures that the PR title follows the Conventional Commit format.
2
+ name: "[Pull Request] Ensure Conventional Commit in PR title"
2
3
 
3
4
  on:
4
5
  pull_request_target:
@@ -0,0 +1,48 @@
1
+ # This workflow assigns labels to a pull request based on the Conventional Commits format.
2
+ # This is necessary for release-please to work properly.
3
+ name: "[Pull Request] Label Conventional Commits"
4
+
5
+ on:
6
+ pull_request:
7
+ branches: [main]
8
+ types:
9
+ [opened, reopened, labeled, unlabeled]
10
+
11
+ permissions:
12
+ pull-requests: write
13
+
14
+ jobs:
15
+ assign-labels:
16
+ runs-on: ubuntu-latest
17
+ name: Assign labels in pull request
18
+ if: github.event.pull_request.merged == false
19
+ steps:
20
+ - uses: actions/checkout@v3
21
+ - name: Assign labels from Conventional Commits
22
+ id: action-assign-labels
23
+ uses: mauroalderete/action-assign-labels@v1
24
+ with:
25
+ pull-request-number: ${{ github.event.pull_request.number }}
26
+ github-token: ${{ secrets.GITHUB_TOKEN }}
27
+ conventional-commits: |
28
+ conventional-commits:
29
+ - type: 'fix'
30
+ nouns: ['FIX', 'Fix', 'fix', 'FIXED', 'Fixed', 'fixed']
31
+ labels: ['bug']
32
+ - type: 'feature'
33
+ nouns: ['FEATURE', 'Feature', 'feature', 'FEAT', 'Feat', 'feat']
34
+ labels: ['enhancement']
35
+ - type: 'breaking_change'
36
+ nouns: ['BREAKING CHANGE', 'BREAKING', 'MAJOR']
37
+ labels: ['breaking change']
38
+ - type: 'documentation'
39
+ nouns: ['doc','docs','docu','document','documentation']
40
+ labels: ['documentation']
41
+ - type: 'build'
42
+ nouns: ['build','rebuild','ci']
43
+ labels: ['CI/CD']
44
+ - type: 'config'
45
+ nouns: ['config', 'conf', 'configuration']
46
+ labels: ['config']
47
+ maintain-labels-not-matched: true
48
+ apply-changes: true
@@ -0,0 +1,17 @@
1
+ # This workflow assigns labels to a pull request based on the files changed in the PR.
2
+ # The labels are defined in the `.github/labels.yml` file.
3
+ name: "[Pull Request] Label File-based"
4
+ on:
5
+ pull_request_target:
6
+ types: [opened, synchronize]
7
+
8
+ permissions:
9
+ contents: read
10
+ pull-requests: write
11
+
12
+ jobs:
13
+ labeler:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Assign labels from file changes
17
+ uses: actions/labeler@v5
@@ -1,5 +1,5 @@
1
1
  # Manage labels of pull requests that originate from forks
2
- name: label-public-pr
2
+ name: "[Pull Request] Label PRs from public forks"
3
3
 
4
4
  on:
5
5
  pull_request_target:
@@ -7,4 +7,4 @@ on:
7
7
 
8
8
  jobs:
9
9
  label:
10
- uses: ecmwf-actions/reusable-workflows/.github/workflows/label-pr.yml@v2
10
+ uses: ecmwf/reusable-workflows/.github/workflows/label-pr.yml@v2
@@ -1,7 +1,7 @@
1
1
  # This workflow will upload a Python Package using Twine when a release is created
2
2
  # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3
3
 
4
- name: Upload Python Package
4
+ name: Upload Python Package to PyPI
5
5
 
6
6
  on:
7
7
  release:
@@ -9,5 +9,5 @@ on:
9
9
 
10
10
  jobs:
11
11
  deploy:
12
- uses: ecmwf-actions/reusable-workflows/.github/workflows/cd-pypi.yml@v2
12
+ uses: ecmwf/reusable-workflows/.github/workflows/cd-pypi.yml@v2
13
13
  secrets: inherit
@@ -0,0 +1,25 @@
1
+ # This workflow runs pre-commit checks and pytest tests against multiple platforms and Python versions.
2
+ name: Code Quality checks and Testing
3
+
4
+ on:
5
+ pull_request:
6
+ types: [opened, synchronize, reopened]
7
+ push:
8
+ branches:
9
+ - main
10
+ schedule:
11
+ - cron: "9 2 * * 0" # at 9:02 on sunday
12
+
13
+ jobs:
14
+ quality:
15
+ uses: ecmwf/reusable-workflows/.github/workflows/qa-precommit-run.yml@v2
16
+ with:
17
+ skip-hooks: "no-commit-to-branch"
18
+
19
+ checks:
20
+ strategy:
21
+ matrix:
22
+ python-version: ["3.9", "3.10", "3.11", "3.12"]
23
+ uses: ecmwf/reusable-workflows/.github/workflows/qa-pytest-pyproject.yml@v2
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
@@ -1,3 +1,5 @@
1
+ # This workflow adds a link to the experimental documentation build to the PR.
2
+ # This does NOT trigger a build of the documentation, this is handled through webhooks.
1
3
  name: Read the Docs PR Preview
2
4
  on:
3
5
  pull_request_target:
@@ -1,8 +1,12 @@
1
+ # This workflow uses an action to run Release Please to create a release PR.
2
+ # It is governed by the config and manifest in the root of the repo.
3
+ # For more information see: https://github.com/googleapis/release-please
1
4
  name: Run Release Please
2
5
  on:
3
6
  push:
4
7
  branches:
5
- - develop
8
+ - main
9
+ - hotfix/*
6
10
 
7
11
  permissions:
8
12
  contents: write
@@ -20,5 +24,5 @@ jobs:
20
24
  token: ${{ secrets.RELEASE_PLEASE_TOKEN }}
21
25
  # optional. customize path to .release-please-config.json
22
26
  config-file: .release-please-config.json
23
- # Currently releases are done "from main" to have a stable branch
24
- # target-branch: main
27
+ # Currently releases are done from main
28
+ target-branch: ${{ github.ref_name }}
@@ -0,0 +1,137 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ __pypackages__/
8
+
9
+ # Distribution / packaging
10
+ build/
11
+ develop-eggs/
12
+ dist/
13
+ downloads/
14
+ eggs/
15
+ .eggs/
16
+ lib/
17
+ lib64/
18
+ parts/
19
+ sdist/
20
+ var/
21
+ wheels/
22
+ share/python-wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+ MANIFEST
27
+
28
+ # Testing and coverage
29
+ htmlcov/
30
+ .tox/
31
+ .nox/
32
+ .coverage
33
+ .coverage.*
34
+ .cache
35
+ nosetests.xml
36
+ coverage.xml
37
+ *.cover
38
+ *.py,cover
39
+ .hypothesis/
40
+ .pytest_cache/
41
+ cover/
42
+
43
+ # Documentation
44
+ docs/_build/
45
+ /site
46
+ *.mo
47
+ *.pot
48
+
49
+ # Environments
50
+ .env
51
+ .envrc
52
+ .venv
53
+ env/
54
+ venv/
55
+ ENV/
56
+ env.bak/
57
+ venv.bak/
58
+
59
+ # IDEs
60
+ .idea/
61
+ .spyderproject
62
+ .spyproject
63
+ .ropeproject
64
+ .vscode/
65
+ *.code-workspace
66
+ *.sublime-project
67
+ *.sublime-workspace
68
+
69
+ # Jupyter Notebook
70
+ .ipynb_checkpoints
71
+
72
+ # Type checking
73
+ .mypy_cache/
74
+ .dmypy.json
75
+ dmypy.json
76
+ .pyre/
77
+ .pytype/
78
+
79
+ # Data files
80
+ *.grib
81
+ *.grib1
82
+ *.grib2
83
+ *.onnx
84
+ *.ckpt
85
+ *.npy
86
+ *.npz
87
+ *.zarr/
88
+ *.nc
89
+ *.h5
90
+ *.hdf5
91
+ *.pkl
92
+ *.parquet
93
+ *.csv
94
+ *.xlsx
95
+ *.xls
96
+
97
+ # ML artifacts
98
+ wandb/
99
+ mlruns/
100
+ lightning_logs/
101
+ *.ckpt
102
+ *.pt
103
+ *.pth
104
+ runs/
105
+ checkpoints/
106
+
107
+ # Temporary and system files
108
+ *.swp
109
+ *.download
110
+ *.out
111
+ *.sync
112
+ *.dot
113
+ *.tmp
114
+ *.log
115
+ *.log.*
116
+ .DS_Store
117
+ ~*
118
+ tmp/
119
+ temp/
120
+ logs/
121
+ _dev/
122
+ outputs/
123
+ *tmp_data/
124
+
125
+ # Project specific
126
+ ?
127
+ ?.*
128
+ foo
129
+ bar
130
+ ~$images.pptx
131
+ test.py
132
+ test.ipynb
133
+ cutout.png
134
+ _version.py
135
+ *.to_upload
136
+ tempCodeRunnerFile.python
137
+ Untitled-*.py
@@ -58,7 +58,12 @@ repos:
58
58
  rev: v0.0.14
59
59
  hooks:
60
60
  - id: rstfmt
61
- exclude: 'cli/.*' # Because we use argparse
61
+ exclude: '(cli|schemas)/.*' # Because we use argparse and pydantic sphinx directives
62
+ - repo: https://github.com/b8raoult/pre-commit-docconvert
63
+ rev: "0.1.4"
64
+ hooks:
65
+ - id: docconvert
66
+ args: ["numpy"]
62
67
  - repo: https://github.com/tox-dev/pyproject-fmt
63
68
  rev: "v2.5.0"
64
69
  hooks:
@@ -73,8 +78,7 @@ repos:
73
78
  - --check-overridden # Check overridden methods
74
79
  - --check-protected # Check protected methods
75
80
  - --check-class # Check class docstrings
76
- - --disable=E113 # Disable empty docstrings
77
- ci:
78
- autoupdate_schedule: monthly
81
+ - --disable=SIG101,SIG102 # Disable empty docstrings
79
82
  ci:
80
83
  autoupdate_schedule: monthly
84
+ autoupdate_commit_msg: "chore(deps): pre-commit.ci autoupdate"
@@ -3,7 +3,7 @@ version: 2
3
3
  build:
4
4
  os: ubuntu-22.04
5
5
  tools:
6
- python: "3.11"
6
+ python: "3.10"
7
7
 
8
8
  sphinx:
9
9
  configuration: docs/conf.py
@@ -0,0 +1,20 @@
1
+ {
2
+ "release-type": "python",
3
+ "bump-minor-pre-major": true,
4
+ "bump-patch-for-minor-pre-major": true,
5
+ "separate-pull-requests": true,
6
+ "always-update": true,
7
+ "changelog-type": "default",
8
+ "include-component-in-tag": false,
9
+ "include-v-in-tag": false,
10
+ "draft-pull-request": true,
11
+ "pull-request-title-pattern": "chore${scope}: Release${component} ${version}",
12
+ "pull-request-header": ":robot: Automated Release PR\n\nThis PR was created by `release-please` to prepare the next release. Once merged:\n\n1. A new version tag will be created\n2. A GitHub release will be published\n3. The changelog will be updated\n\nChanges to be included in the next release:",
13
+ "pull-request-footer": "> [!IMPORTANT]\n> :warning: Merging this PR will:\n> - Create a new release\n> - Trigger deployment pipelines\n> - Update package versions\n\n **Before merging:**\n - Ensure all tests pass\n - Review the changelog carefully\n - Get required approvals\n\n [Release-please documentation](https://github.com/googleapis/release-please)",
14
+ "packages": {
15
+ ".": {
16
+ "package-name": "anemoi-utils"
17
+ }
18
+ },
19
+ "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json"
20
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.4.13"
3
+ }
@@ -8,6 +8,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8
8
  Please add your functional changes to the appropriate section in the PR.
9
9
  Keep it human-readable, your future self will thank you!
10
10
 
11
+ ## [0.4.13](https://github.com/ecmwf/anemoi-utils/compare/0.4.12...0.4.13) (2025-03-14)
12
+
13
+
14
+ ### Features
15
+
16
+ * add robust requests ([#112](https://github.com/ecmwf/anemoi-utils/issues/112)) ([5d87227](https://github.com/ecmwf/anemoi-utils/commit/5d87227e6f0b39f087f8a34f238806a2f73480f1))
17
+ * bugfix ([#100](https://github.com/ecmwf/anemoi-utils/issues/100)) ([c016cb4](https://github.com/ecmwf/anemoi-utils/commit/c016cb46c23b6a0575d9d843b06fd6b9f71b9f27))
18
+ * keep yaml formating in error messages ([#108](https://github.com/ecmwf/anemoi-utils/issues/108)) ([3bd6682](https://github.com/ecmwf/anemoi-utils/commit/3bd66828cf19d8e3d7d3fbed27533161b6285828))
19
+ * re-add default values in transfer function ([#101](https://github.com/ecmwf/anemoi-utils/issues/101)) ([6462205](https://github.com/ecmwf/anemoi-utils/commit/6462205ee25fa35a71af047b1fbb04bd3c4ca2c4))
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * add optional dependency. boto3 &lt;= 1.36 ([#105](https://github.com/ecmwf/anemoi-utils/issues/105)) ([c8c8393](https://github.com/ecmwf/anemoi-utils/commit/c8c8393ab1e886289541d3aa47a614afe5cd379b))
25
+
26
+
27
+ ### Documentation
28
+
29
+ * update logo ([#96](https://github.com/ecmwf/anemoi-utils/issues/96)) ([c297127](https://github.com/ecmwf/anemoi-utils/commit/c297127e066c92023ca065b3e7d36ac4ab62527e))
30
+
31
+ ## 0.4.12 (2025-01-30)
32
+
33
+ <!-- Release notes generated using configuration in .github/release.yml at main -->
34
+
35
+ ## What's Changed
36
+ ### Other Changes 🔗
37
+ * feat: better support for timedelta larger than 24h by @floriankrb in https://github.com/ecmwf/anemoi-utils/pull/81
38
+ * feat(requests): read input from stdin by @gmertes in https://github.com/ecmwf/anemoi-utils/pull/82
39
+ * chore: synced file(s) with ecmwf-actions/reusable-workflows by @DeployDuck in https://github.com/ecmwf/anemoi-utils/pull/80
40
+
41
+ ## New Contributors
42
+ * @DeployDuck made their first contribution in https://github.com/ecmwf/anemoi-utils/pull/80
43
+
44
+ **Full Changelog**: https://github.com/ecmwf/anemoi-utils/compare/0.4.11...0.4.12
45
+
11
46
  ## 0.4.11 (2025-01-17)
12
47
 
13
48
  <!-- Release notes generated using configuration in .github/release.yml at develop -->
@@ -1,6 +1,6 @@
1
1
  ## How to Contribute
2
2
 
3
- Please see the [read the docs](https://anemoi-training.readthedocs.io/en/latest/dev/contributing.html).
3
+ Please see the [read the docs](https://anemoi.readthedocs.io/en/latest/dev/contributing.html).
4
4
 
5
5
 
6
6
  ## Contributors
@@ -10,4 +10,4 @@ Thank you to all the wonderful people who have contributed to Anemoi. Contributi
10
10
 
11
11
  ## Contributing Organisations
12
12
 
13
- Significant contributions have been made by the following organisations: [DWD](https://www.dwd.de/), [MET Norway](https://www.met.no/), [MeteoSwiss](https://www.meteoswiss.admin.ch/), [RMI](https://www.meteo.be/) & [ECMWF](https://www.ecmwf.int/)
13
+ Significant contributions have been made by the following organisations: [DWD](https://www.dwd.de/), [FMI](https://www.ilmatieteenlaitos.fi/), [KNMI](https://www.knmi.nl), [MET Norway](https://www.met.no/), [MeteoSwiss](https://www.meteoswiss.admin.ch/), [RMI](https://www.meteo.be/) & [ECMWF](https://www.ecmwf.int/)
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright [yyyy] [name of copyright owner]
189
+ Copyright 2024-2025 Anemoi Contributors
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: anemoi-utils
3
- Version: 0.4.11
3
+ Version: 0.4.13
4
4
  Summary: A package to hold various functions to support training of ML models on ECMWF data.
5
5
  Author-email: "European Centre for Medium-Range Weather Forecasts (ECMWF)" <software.support@ecmwf.int>
6
6
  License: Apache License
@@ -191,7 +191,7 @@ License: Apache License
191
191
  same "printed page" as the copyright notice for easier
192
192
  identification within third-party archives.
193
193
 
194
- Copyright [yyyy] [name of copyright owner]
194
+ Copyright 2024-2025 Anemoi Contributors
195
195
 
196
196
  Licensed under the Apache License, Version 2.0 (the "License");
197
197
  you may not use this file except in compliance with the License.
@@ -226,13 +226,14 @@ Requires-Python: >=3.9
226
226
  License-File: LICENSE
227
227
  Requires-Dist: aniso8601
228
228
  Requires-Dist: importlib-metadata; python_version < "3.10"
229
+ Requires-Dist: multiurl
229
230
  Requires-Dist: numpy
230
231
  Requires-Dist: python-dateutil
231
232
  Requires-Dist: pyyaml
232
233
  Requires-Dist: tomli; python_version < "3.11"
233
234
  Requires-Dist: tqdm
234
235
  Provides-Extra: all
235
- Requires-Dist: anemoi-utils[grib,provenance,text]; extra == "all"
236
+ Requires-Dist: anemoi-utils[grib,provenance,s3,text]; extra == "all"
236
237
  Provides-Extra: dev
237
238
  Requires-Dist: anemoi-utils[all,docs,tests]; extra == "dev"
238
239
  Provides-Extra: docs
@@ -240,7 +241,7 @@ Requires-Dist: nbsphinx; extra == "docs"
240
241
  Requires-Dist: pandoc; extra == "docs"
241
242
  Requires-Dist: requests; extra == "docs"
242
243
  Requires-Dist: sphinx; extra == "docs"
243
- Requires-Dist: sphinx-argparse<0.5; extra == "docs"
244
+ Requires-Dist: sphinx-argparse; extra == "docs"
244
245
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
245
246
  Requires-Dist: termcolor; extra == "docs"
246
247
  Provides-Extra: grib
@@ -248,6 +249,8 @@ Requires-Dist: requests; extra == "grib"
248
249
  Provides-Extra: provenance
249
250
  Requires-Dist: gitpython; extra == "provenance"
250
251
  Requires-Dist: nvsmi; extra == "provenance"
252
+ Provides-Extra: s3
253
+ Requires-Dist: boto3<1.36; extra == "s3"
251
254
  Provides-Extra: tests
252
255
  Requires-Dist: pytest; extra == "tests"
253
256
  Provides-Extra: text
@@ -5,7 +5,7 @@ This project is **BETA** and will be **Experimental** for the foreseeable future
5
5
  Interfaces and functionality are likely to change, and the project itself may be scrapped.
6
6
  **DO NOT** use this software in any project/software that is operational.
7
7
 
8
- Miscellanous tools for training data-driven weather forecasts.
8
+
9
9
 
10
10
  ## Documentation
11
11
 
@@ -22,7 +22,7 @@ $ pip install anemoi-utils
22
22
  ## License
23
23
 
24
24
  ```
25
- Copyright 2024, Anemoi contributors.
25
+ Copyright 2024-2025, Anemoi Contributors.
26
26
 
27
27
  Licensed under the Apache License, Version 2.0 (the "License");
28
28
  you may not use this file except in compliance with the License.