xarray-sentinel 0.9.4__tar.gz → 0.9.6__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.
Files changed (122) hide show
  1. xarray_sentinel-0.9.6/.env.in +8 -0
  2. xarray_sentinel-0.9.6/.github/workflows/on-push.yml +180 -0
  3. xarray_sentinel-0.9.6/.gitignore +470 -0
  4. xarray_sentinel-0.9.6/.pre-commit-config-cruft.yaml +7 -0
  5. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/.pre-commit-config.yaml +16 -18
  6. xarray_sentinel-0.9.6/.python-version +1 -0
  7. xarray_sentinel-0.9.6/Makefile +29 -0
  8. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/PKG-INFO +308 -75
  9. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/README.md +83 -66
  10. xarray_sentinel-0.9.6/docs/Makefile +20 -0
  11. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/docs/USER-REQUIREMENTS.md +10 -3
  12. xarray_sentinel-0.9.6/docs/_templates/.gitkeep +0 -0
  13. xarray_sentinel-0.9.6/docs/conf.py +78 -0
  14. xarray_sentinel-0.9.6/docs/index.md +17 -0
  15. xarray_sentinel-0.9.6/docs/make.bat +35 -0
  16. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/notebooks/Sentinel-1_GRD_IW.ipynb +70 -36
  17. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/notebooks/Sentinel-1_GRD_SM.ipynb +66 -34
  18. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/notebooks/Sentinel-1_SLC_IW.ipynb +54 -21
  19. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/notebooks/Sentinel-1_SLC_SM.ipynb +52 -33
  20. xarray_sentinel-0.9.6/notebooks/fsspec.ipynb +150 -0
  21. xarray_sentinel-0.9.6/pyproject.toml +145 -0
  22. xarray_sentinel-0.9.6/setup.cfg +4 -0
  23. xarray_sentinel-0.9.6/tests/test_00_version.py +5 -0
  24. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/test_10_esa_safe.py +10 -4
  25. xarray_sentinel-0.9.6/tests/test_15_eopf_metadata.py +92 -0
  26. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/test_20_sentinel1.py +34 -16
  27. xarray_sentinel-0.9.6/tests/test_30_eopf_product.py +18 -0
  28. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/test_30_sentinel1_fsspec.py +2 -2
  29. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/test_30_xarray_backends.py +9 -9
  30. xarray_sentinel-0.9.6/tests/test_35_xarray_backends_dask.py +60 -0
  31. xarray_sentinel-0.9.6/uv.lock +5806 -0
  32. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/__init__.py +1 -1
  33. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/conventions.py +14 -2
  34. xarray_sentinel-0.9.6/xarray_sentinel/eopf_metadata.py +122 -0
  35. xarray_sentinel-0.9.6/xarray_sentinel/eopf_product.py +82 -0
  36. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/esa_safe.py +25 -21
  37. xarray_sentinel-0.9.6/xarray_sentinel/py.typed +0 -0
  38. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/reformat.py +3 -3
  39. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/sentinel1.py +489 -113
  40. xarray_sentinel-0.9.6/xarray_sentinel/version.py +2 -0
  41. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/xarray_backends.py +8 -6
  42. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel.egg-info/PKG-INFO +308 -75
  43. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel.egg-info/SOURCES.txt +17 -7
  44. xarray_sentinel-0.9.6/xarray_sentinel.egg-info/requires.txt +14 -0
  45. xarray_sentinel-0.9.6/xarray_sentinel.egg-info/scm_file_list.json +100 -0
  46. xarray_sentinel-0.9.6/xarray_sentinel.egg-info/scm_version.json +8 -0
  47. xarray-sentinel-0.9.4/.github/workflows/on-push.yml +0 -135
  48. xarray-sentinel-0.9.4/.gitignore +0 -132
  49. xarray-sentinel-0.9.4/Makefile +0 -30
  50. xarray-sentinel-0.9.4/environment-dev.yml +0 -12
  51. xarray-sentinel-0.9.4/environment-minver.yml +0 -17
  52. xarray-sentinel-0.9.4/environment.yml +0 -19
  53. xarray-sentinel-0.9.4/notebooks/download_data.sh +0 -28
  54. xarray-sentinel-0.9.4/notebooks/fsspec.ipynb +0 -277
  55. xarray-sentinel-0.9.4/pyproject.toml +0 -20
  56. xarray-sentinel-0.9.4/setup.cfg +0 -73
  57. xarray-sentinel-0.9.4/tests/data/S1A_S3_SLC__1SDV_20210401T152855_20210401T152914_037258_04638E_6001.SAFE/annotation/calibration/calibration-s1a-s3-slc-vv-20210401t152855-20210401t152914-037258-04638e-002.xml +0 -218
  58. xarray-sentinel-0.9.4/tests/data/S1A_S3_SLC__1SDV_20210401T152855_20210401T152914_037258_04638E_6001.SAFE/annotation/s1a-s3-slc-vv-20210401t152855-20210401t152914-037258-04638e-002.xml +0 -11696
  59. xarray-sentinel-0.9.4/tests/test_35_xarray_backends_dask.py +0 -20
  60. xarray-sentinel-0.9.4/xarray_sentinel/version.py +0 -2
  61. xarray-sentinel-0.9.4/xarray_sentinel.egg-info/requires.txt +0 -6
  62. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/.github/dependabot.yml +0 -0
  63. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/CONTRIBUTING.md +0 -0
  64. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/LICENSE +0 -0
  65. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/docs/DATATREE.md +0 -0
  66. /xarray-sentinel-0.9.4/xarray_sentinel/py.typed → /xarray_sentinel-0.9.6/docs/_static/.gitkeep +0 -0
  67. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_EW_SLC__1SDH_20210403T122536_20210403T122630_037286_046484_8152.SAFE/annotation/s1a-ew1-slc-hh-20210403t122536-20210403t122628-037286-046484-001.xml +0 -0
  68. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_EW_SLC__1SDH_20210403T122536_20210403T122630_037286_046484_8152.SAFE/annotation/s1a-ew1-slc-hv-20210403t122536-20210403t122628-037286-046484-006.xml +0 -0
  69. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_EW_SLC__1SDH_20210403T122536_20210403T122630_037286_046484_8152.SAFE/manifest.safe +0 -0
  70. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_EW_SLC__1SDH_20210403T122536_20210403T122630_037286_046484_8152.SAFE/measurement/s1a-ew1-slc-hh-20210403t122536-20210403t122628-037286-046484-001.tiff +0 -0
  71. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_EW_SLC__1SDH_20210403T122536_20210403T122630_037286_046484_8152.SAFE/support/s1-level-1-product.xsd +0 -0
  72. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_EW_SLC__1SDH_20210403T122536_20210403T122630_037286_046484_8152.SAFE/support/s1-object-types.xsd +0 -0
  73. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_IW_SLC__1SDH_20220414T102209_20220414T102236_042768_051AA4_E677.SAFE/annotation/s1a-iw1-slc-hh-20220414t102211-20220414t102236-042768-051aa4-001.xml +0 -0
  74. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_IW_SLC__1SDH_20220414T102209_20220414T102236_042768_051AA4_E677.SAFE/manifest.safe +0 -0
  75. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_IW_SLC__1SDH_20220414T102209_20220414T102236_042768_051AA4_E677.SAFE/measurement/s1a-iw1-slc-hh-20220414t102211-20220414t102236-042768-051aa4-001.tiff +0 -0
  76. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_S3_SLC__1SDV_20210401T152855_20210401T152914_037258_04638E_6001.SAFE/annotation/calibration/calibration-s1a-s3-slc-vh-20210401t152855-20210401t152914-037258-04638e-001.xml +0 -0
  77. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_S3_SLC__1SDV_20210401T152855_20210401T152914_037258_04638E_6001.SAFE/annotation/s1a-s3-slc-vh-20210401t152855-20210401t152914-037258-04638e-001.xml +0 -0
  78. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_S3_SLC__1SDV_20210401T152855_20210401T152914_037258_04638E_6001.SAFE/manifest.safe +0 -0
  79. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_S3_SLC__1SDV_20210401T152855_20210401T152914_037258_04638E_6001.SAFE/measurement/s1a-s3-slc-vh-20210401t152855-20210401t152914-037258-04638e-001.tiff +0 -0
  80. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1A_S6_SLC__1SDV_20210402T115512_20210402T115535_037271_046407_39FD.SAFE/manifest.safe +0 -0
  81. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_GRDH_1SDV_20210401T052623_20210401T052648_026269_032297_ECC8.SAFE/annotation/s1b-iw-grd-vh-20210401t052623-20210401t052648-026269-032297-002.xml +0 -0
  82. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_GRDH_1SDV_20210401T052623_20210401T052648_026269_032297_ECC8.SAFE/annotation/s1b-iw-grd-vv-20210401t052623-20210401t052648-026269-032297-001.xml +0 -0
  83. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_GRDH_1SDV_20210401T052623_20210401T052648_026269_032297_ECC8.SAFE/manifest.safe +0 -0
  84. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_GRDH_1SDV_20210401T052623_20210401T052648_026269_032297_ECC8.SAFE/measurement/s1b-iw-grd-vv-20210401t052623-20210401t052648-026269-032297-001.tiff +0 -0
  85. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/calibration/calibration-s1b-iw1-slc-vh-20210401t052624-20210401t052649-026269-032297-001.xml +0 -0
  86. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/calibration/calibration-s1b-iw1-slc-vv-20210401t052624-20210401t052649-026269-032297-004.xml +0 -0
  87. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/calibration/calibration-s1b-iw2-slc-vh-20210401t052622-20210401t052650-026269-032297-002.xml +0 -0
  88. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/calibration/noise-s1b-iw1-slc-vh-20210401t052624-20210401t052649-026269-032297-001.xml +0 -0
  89. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/calibration/noise-s1b-iw1-slc-vv-20210401t052624-20210401t052649-026269-032297-004.xml +0 -0
  90. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/calibration/noise-s1b-iw2-slc-vh-20210401t052622-20210401t052650-026269-032297-002.xml +0 -0
  91. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/s1b-iw1-slc-vh-20210401t052624-20210401t052649-026269-032297-001.xml +0 -0
  92. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/s1b-iw1-slc-vv-20210401t052624-20210401t052649-026269-032297-004.xml +0 -0
  93. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/annotation/s1b-iw2-slc-vh-20210401t052622-20210401t052650-026269-032297-002.xml +0 -0
  94. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/manifest.safe +0 -0
  95. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/measurement/s1b-iw1-slc-vh-20210401t052624-20210401t052649-026269-032297-001.tiff +0 -0
  96. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/measurement/s1b-iw1-slc-vv-20210401t052624-20210401t052649-026269-032297-004.tiff +0 -0
  97. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/measurement/s1b-iw2-slc-vh-20210401t052622-20210401t052650-026269-032297-002.tiff +0 -0
  98. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/support/s1-level-1-product.xsd +0 -0
  99. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.SAFE/support/s1-object-types.xsd +0 -0
  100. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_IW_SLC__1SDV_20210401T052622_20210401T052650_026269_032297_EFA4.zip +0 -0
  101. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S1B_WV_SLC__1SSV_20210403T083025_20210403T084452_026300_032390_D542.SAFE/manifest.safe +0 -0
  102. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/S2A_MSIL1C_20210403T101021_N0300_R022_T33TUM_20210403T110551.SAFE/manifest.safe +0 -0
  103. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/data/download.sh +0 -0
  104. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/slow_test_40_reformat.py +0 -0
  105. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/slow_test_50_cfchecker.py +0 -0
  106. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/test_40_reformat_netcdf4.py +0 -0
  107. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/tests/test_40_reformat_zarr.py +0 -0
  108. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/my-gml.xsd +0 -0
  109. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/my-no-namespace.xsd +0 -0
  110. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/my-safe-sentinel-1.0-sentinel-1-sar-level-1.xsd +0 -0
  111. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/my-safe-sentinel-1.0-sentinel-1.xsd +0 -0
  112. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/my-safe-sentinel-1.0.xsd +0 -0
  113. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/my-schema_orb.xsd +0 -0
  114. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/my-xfdu.xsd +0 -0
  115. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/s1-level-1-calibration.xsd +0 -0
  116. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/s1-level-1-noise.xsd +0 -0
  117. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/s1-level-1-product.xsd +0 -0
  118. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/s1-level-1-rfi.xsd +0 -0
  119. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel/resources/sentinel1/s1-object-types.xsd +0 -0
  120. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel.egg-info/dependency_links.txt +0 -0
  121. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel.egg-info/entry_points.txt +0 -0
  122. {xarray-sentinel-0.9.4 → xarray_sentinel-0.9.6}/xarray_sentinel.egg-info/top_level.txt +0 -0
@@ -0,0 +1,8 @@
1
+ # Configure your CDSE S3 credentials: https://eodata-s3keysmanager.dataspace.copernicus.eu/panel/s3-credentials
2
+
3
+ # AWS_ACCESS_KEY_ID=
4
+ # AWS_SECRET_ACCESS_KEY=
5
+
6
+ AWS_ENDPOINT_URL=https://eodata.dataspace.copernicus.eu/
7
+ AWS_S3_ENDPOINT=eodata.dataspace.copernicus.eu
8
+ AWS_VIRTUAL_HOSTING=False
@@ -0,0 +1,180 @@
1
+ name: on-push
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ tags:
8
+ - '*'
9
+ pull_request:
10
+ branches:
11
+ - main
12
+
13
+ concurrency:
14
+ group: ${{ github.workflow }}-${{ github.ref }}
15
+ cancel-in-progress: true
16
+
17
+ defaults:
18
+ run:
19
+ shell: bash -l {0}
20
+
21
+ jobs:
22
+ pre-commit:
23
+ runs-on: ubuntu-latest
24
+ steps:
25
+ - uses: actions/checkout@v6
26
+ - uses: actions/setup-python@v6
27
+ with:
28
+ python-version: 3.x
29
+ - uses: pre-commit/action@v3.0.1
30
+
31
+ unit-tests:
32
+ name: unit-tests
33
+ runs-on: ubuntu-latest
34
+ strategy:
35
+ matrix:
36
+ python-version:
37
+ - "3.14"
38
+
39
+ steps:
40
+ - uses: actions/checkout@v6
41
+ - name: Install uv and set the python version
42
+ uses: astral-sh/setup-uv@v7
43
+ with:
44
+ version: "0.11.17"
45
+ enable-cache: true
46
+ python-version: ${{ matrix.python-version }}
47
+
48
+ - name: Run unit tests
49
+ run: make unit-tests COV_REPORT=xml
50
+
51
+ type-check:
52
+ needs: [unit-tests]
53
+ runs-on: ubuntu-latest
54
+
55
+ steps:
56
+ - uses: actions/checkout@v6
57
+ - name: Install uv and set the python version
58
+ uses: astral-sh/setup-uv@v7
59
+ with:
60
+ version: "0.11.17"
61
+ enable-cache: true
62
+ python-version: "3.14"
63
+ - name: Run type checks
64
+ run: make type-check
65
+
66
+ docs-build:
67
+ needs: [unit-tests]
68
+ runs-on: ubuntu-latest
69
+
70
+ steps:
71
+ - uses: actions/checkout@v6
72
+ - name: Install uv
73
+ uses: astral-sh/setup-uv@v7
74
+ with:
75
+ version: "0.11.17"
76
+ enable-cache: true
77
+ python-version: "3.14"
78
+ - name: Build documentation
79
+ run: uv run --frozen make docs-build
80
+
81
+ integration-tests:
82
+ needs: [unit-tests]
83
+ if: |
84
+ success() && true
85
+ runs-on: ubuntu-latest
86
+ strategy:
87
+ matrix:
88
+ python-version:
89
+ - "3.10"
90
+ - "3.11"
91
+ - "3.12"
92
+ - "3.13"
93
+
94
+ steps:
95
+ - uses: actions/checkout@v6
96
+
97
+ - name: Install uv and set the python version
98
+ uses: astral-sh/setup-uv@v7
99
+ with:
100
+ version: "0.11.17"
101
+ enable-cache: true
102
+ python-version: ${{ matrix.python-version }}
103
+
104
+ - name: Run unit tests
105
+ run: uv run --frozen -m pytest .
106
+
107
+ minver-tests:
108
+ needs: [unit-tests]
109
+ if: |
110
+ success() && true
111
+ runs-on: ubuntu-latest
112
+
113
+ steps:
114
+ - uses: actions/checkout@v6
115
+
116
+ - name: Install uv and set the python version
117
+ uses: astral-sh/setup-uv@v7
118
+ with:
119
+ version: "0.11.17"
120
+ enable-cache: true
121
+ python-version: "3.14"
122
+ - name: Run tests
123
+ run: uv run --resolution lowest-direct -p python3.10 -m pytest .
124
+
125
+ distribution:
126
+ runs-on: ubuntu-latest
127
+ needs: [unit-tests, type-check, docs-build, integration-tests]
128
+ if: |
129
+ always() &&
130
+ needs.unit-tests.result == 'success' &&
131
+ needs.type-check.result == 'success' &&
132
+ needs.docs-build.result == 'success' &&
133
+ (needs.integration-tests.result == 'success' || needs.integration-tests.result == 'skipped')
134
+
135
+ steps:
136
+ - uses: actions/checkout@v6
137
+ - uses: actions/setup-python@v6
138
+ with:
139
+ python-version-file: ".python-version"
140
+ - name: Install package
141
+ run: |
142
+ python -m pip install --upgrade pip
143
+ python -m pip install build twine
144
+ - name: Build distribution
145
+ run: |
146
+ python -m build
147
+ - name: Check wheels
148
+ run: |
149
+ cd dist || exit
150
+ python -m pip install xarray_sentinel*.whl || exit
151
+ python -m twine check --strict * || exit
152
+ python -c "import xarray_sentinel" || exit
153
+ cd ..
154
+ - uses: actions/upload-artifact@v7
155
+ with:
156
+ name: distribution
157
+ path: dist
158
+
159
+ upload-to-pypi:
160
+ runs-on: ubuntu-latest
161
+ needs: distribution
162
+ if: |
163
+ always() && true &&
164
+ needs.distribution.result == 'success' &&
165
+ github.event_name == 'push' &&
166
+ startsWith(github.ref, 'refs/tags')
167
+ environment:
168
+ name: pypi
169
+ url: https://pypi.org/p/xarray-sentinel
170
+ permissions:
171
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publish
172
+
173
+ steps:
174
+ - uses: actions/download-artifact@v8
175
+ with:
176
+ name: distribution
177
+ path: dist
178
+ - uses: pypa/gh-action-pypi-publish@v1.14.0
179
+ with:
180
+ verbose: true
@@ -0,0 +1,470 @@
1
+ # setuptools-scm
2
+ version.py
3
+
4
+ # Sphinx automatic generation of API
5
+ docs/README.md
6
+ docs/_api/
7
+
8
+ # Created by https://www.toptal.com/developers/gitignore/api/python,jupyternotebooks,vim,visualstudiocode,pycharm,emacs,linux,macos,windows
9
+ # Edit at https://www.toptal.com/developers/gitignore?templates=python,jupyternotebooks,vim,visualstudiocode,pycharm,emacs,linux,macos,windows
10
+
11
+ ### Emacs ###
12
+ # -*- mode: gitignore; -*-
13
+ *~
14
+ \#*\#
15
+ /.emacs.desktop
16
+ /.emacs.desktop.lock
17
+ *.elc
18
+ auto-save-list
19
+ tramp
20
+ .\#*
21
+
22
+ # Org-mode
23
+ .org-id-locations
24
+ *_archive
25
+
26
+ # flymake-mode
27
+ *_flymake.*
28
+
29
+ # eshell files
30
+ /eshell/history
31
+ /eshell/lastdir
32
+
33
+ # elpa packages
34
+ /elpa/
35
+
36
+ # reftex files
37
+ *.rel
38
+
39
+ # AUCTeX auto folder
40
+ /auto/
41
+
42
+ # cask packages
43
+ .cask/
44
+ dist/
45
+
46
+ # Flycheck
47
+ flycheck_*.el
48
+
49
+ # server auth directory
50
+ /server/
51
+
52
+ # projectiles files
53
+ .projectile
54
+
55
+ # directory configuration
56
+ .dir-locals.el
57
+
58
+ # network security
59
+ /network-security.data
60
+
61
+
62
+ ### JupyterNotebooks ###
63
+ # gitignore template for Jupyter Notebooks
64
+ # website: http://jupyter.org/
65
+
66
+ .ipynb_checkpoints
67
+ */.ipynb_checkpoints/*
68
+
69
+ # IPython
70
+ profile_default/
71
+ ipython_config.py
72
+
73
+ # Remove previous ipynb_checkpoints
74
+ # git rm -r .ipynb_checkpoints/
75
+
76
+ ### Linux ###
77
+
78
+ # temporary files which can be created if a process still has a handle open of a deleted file
79
+ .fuse_hidden*
80
+
81
+ # KDE directory preferences
82
+ .directory
83
+
84
+ # Linux trash folder which might appear on any partition or disk
85
+ .Trash-*
86
+
87
+ # .nfs files are created when an open file is removed but is still being accessed
88
+ .nfs*
89
+
90
+ ### macOS ###
91
+ # General
92
+ .DS_Store
93
+ .AppleDouble
94
+ .LSOverride
95
+
96
+ # Icon must end with two \r
97
+ Icon
98
+
99
+ # Thumbnails
100
+ ._*
101
+
102
+ # Files that might appear in the root of a volume
103
+ .DocumentRevisions-V100
104
+ .fseventsd
105
+ .Spotlight-V100
106
+ .TemporaryItems
107
+ .Trashes
108
+ .VolumeIcon.icns
109
+ .com.apple.timemachine.donotpresent
110
+
111
+ # Directories potentially created on remote AFP share
112
+ .AppleDB
113
+ .AppleDesktop
114
+ Network Trash Folder
115
+ Temporary Items
116
+ .apdisk
117
+
118
+ ### macOS Patch ###
119
+ # iCloud generated files
120
+ *.icloud
121
+
122
+ ### PyCharm ###
123
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
124
+ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
125
+
126
+ # User-specific stuff
127
+ .idea/**/workspace.xml
128
+ .idea/**/tasks.xml
129
+ .idea/**/usage.statistics.xml
130
+ .idea/**/dictionaries
131
+ .idea/**/shelf
132
+
133
+ # AWS User-specific
134
+ .idea/**/aws.xml
135
+
136
+ # Generated files
137
+ .idea/**/contentModel.xml
138
+
139
+ # Sensitive or high-churn files
140
+ .idea/**/dataSources/
141
+ .idea/**/dataSources.ids
142
+ .idea/**/dataSources.local.xml
143
+ .idea/**/sqlDataSources.xml
144
+ .idea/**/dynamic.xml
145
+ .idea/**/uiDesigner.xml
146
+ .idea/**/dbnavigator.xml
147
+
148
+ # Gradle
149
+ .idea/**/gradle.xml
150
+ .idea/**/libraries
151
+
152
+ # Gradle and Maven with auto-import
153
+ # When using Gradle or Maven with auto-import, you should exclude module files,
154
+ # since they will be recreated, and may cause churn. Uncomment if using
155
+ # auto-import.
156
+ # .idea/artifacts
157
+ # .idea/compiler.xml
158
+ # .idea/jarRepositories.xml
159
+ # .idea/modules.xml
160
+ # .idea/*.iml
161
+ # .idea/modules
162
+ # *.iml
163
+ # *.ipr
164
+
165
+ # CMake
166
+ cmake-build-*/
167
+
168
+ # Mongo Explorer plugin
169
+ .idea/**/mongoSettings.xml
170
+
171
+ # File-based project format
172
+ *.iws
173
+
174
+ # IntelliJ
175
+ out/
176
+
177
+ # mpeltonen/sbt-idea plugin
178
+ .idea_modules/
179
+
180
+ # JIRA plugin
181
+ atlassian-ide-plugin.xml
182
+
183
+ # Cursive Clojure plugin
184
+ .idea/replstate.xml
185
+
186
+ # SonarLint plugin
187
+ .idea/sonarlint/
188
+
189
+ # Crashlytics plugin (for Android Studio and IntelliJ)
190
+ com_crashlytics_export_strings.xml
191
+ crashlytics.properties
192
+ crashlytics-build.properties
193
+ fabric.properties
194
+
195
+ # Editor-based Rest Client
196
+ .idea/httpRequests
197
+
198
+ # Android studio 3.1+ serialized cache file
199
+ .idea/caches/build_file_checksums.ser
200
+
201
+ ### PyCharm Patch ###
202
+ # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
203
+
204
+ # *.iml
205
+ # modules.xml
206
+ # .idea/misc.xml
207
+ # *.ipr
208
+
209
+ # Sonarlint plugin
210
+ # https://plugins.jetbrains.com/plugin/7973-sonarlint
211
+ .idea/**/sonarlint/
212
+
213
+ # SonarQube Plugin
214
+ # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
215
+ .idea/**/sonarIssues.xml
216
+
217
+ # Markdown Navigator plugin
218
+ # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
219
+ .idea/**/markdown-navigator.xml
220
+ .idea/**/markdown-navigator-enh.xml
221
+ .idea/**/markdown-navigator/
222
+
223
+ # Cache file creation bug
224
+ # See https://youtrack.jetbrains.com/issue/JBR-2257
225
+ .idea/$CACHE_FILE$
226
+
227
+ # CodeStream plugin
228
+ # https://plugins.jetbrains.com/plugin/12206-codestream
229
+ .idea/codestream.xml
230
+
231
+ # Azure Toolkit for IntelliJ plugin
232
+ # https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
233
+ .idea/**/azureSettings.xml
234
+
235
+ ### Python ###
236
+ # Byte-compiled / optimized / DLL files
237
+ __pycache__/
238
+ *.py[cod]
239
+ *$py.class
240
+
241
+ # C extensions
242
+ *.so
243
+
244
+ # Distribution / packaging
245
+ .Python
246
+ build/
247
+ develop-eggs/
248
+ downloads/
249
+ eggs/
250
+ .eggs/
251
+ lib/
252
+ lib64/
253
+ parts/
254
+ sdist/
255
+ var/
256
+ wheels/
257
+ share/python-wheels/
258
+ *.egg-info/
259
+ .installed.cfg
260
+ *.egg
261
+ MANIFEST
262
+
263
+ # PyInstaller
264
+ # Usually these files are written by a python script from a template
265
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
266
+ *.manifest
267
+ *.spec
268
+
269
+ # Installer logs
270
+ pip-log.txt
271
+ pip-delete-this-directory.txt
272
+
273
+ # Unit test / coverage reports
274
+ htmlcov/
275
+ .tox/
276
+ .nox/
277
+ .coverage
278
+ .coverage.*
279
+ .cache
280
+ nosetests.xml
281
+ coverage.xml
282
+ *.cover
283
+ *.py,cover
284
+ .hypothesis/
285
+ .pytest_cache/
286
+ cover/
287
+
288
+ # Translations
289
+ *.mo
290
+ *.pot
291
+
292
+ # Django stuff:
293
+ *.log
294
+ local_settings.py
295
+ db.sqlite3
296
+ db.sqlite3-journal
297
+
298
+ # Flask stuff:
299
+ instance/
300
+ .webassets-cache
301
+
302
+ # Scrapy stuff:
303
+ .scrapy
304
+
305
+ # Sphinx documentation
306
+ docs/_build/
307
+
308
+ # PyBuilder
309
+ .pybuilder/
310
+ target/
311
+
312
+ # Jupyter Notebook
313
+
314
+ # IPython
315
+
316
+ # pyenv
317
+ # For a library or package, you might want to ignore these files since the code is
318
+ # intended to run in multiple environments; otherwise, check them in:
319
+ # .python-version
320
+
321
+ # pipenv
322
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
323
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
324
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
325
+ # install all needed dependencies.
326
+ #Pipfile.lock
327
+
328
+ # poetry
329
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
330
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
331
+ # commonly ignored for libraries.
332
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
333
+ #poetry.lock
334
+
335
+ # pdm
336
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
337
+ #pdm.lock
338
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
339
+ # in version control.
340
+ # https://pdm.fming.dev/#use-with-ide
341
+ .pdm.toml
342
+
343
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
344
+ __pypackages__/
345
+
346
+ # Celery stuff
347
+ celerybeat-schedule
348
+ celerybeat.pid
349
+
350
+ # SageMath parsed files
351
+ *.sage.py
352
+
353
+ # Environments
354
+ .env
355
+ .env.bck
356
+ .venv
357
+ env/
358
+ venv/
359
+ ENV/
360
+ env.bak/
361
+ venv.bak/
362
+
363
+ # Spyder project settings
364
+ .spyderproject
365
+ .spyproject
366
+
367
+ # Rope project settings
368
+ .ropeproject
369
+
370
+ # mkdocs documentation
371
+ /site
372
+
373
+ # mypy
374
+ .mypy_cache/
375
+ .dmypy.json
376
+ dmypy.json
377
+
378
+ # Pyre type checker
379
+ .pyre/
380
+
381
+ # pytype static type analyzer
382
+ .pytype/
383
+
384
+ # Cython debug symbols
385
+ cython_debug/
386
+
387
+ # PyCharm
388
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
389
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
390
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
391
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
392
+ #.idea/
393
+
394
+ ### Python Patch ###
395
+ # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
396
+ poetry.toml
397
+
398
+ # ruff
399
+ .ruff_cache/
400
+
401
+ # LSP config files
402
+ pyrightconfig.json
403
+
404
+ ### Vim ###
405
+ # Swap
406
+ [._]*.s[a-v][a-z]
407
+ !*.svg # comment out if you don't need vector files
408
+ [._]*.sw[a-p]
409
+ [._]s[a-rt-v][a-z]
410
+ [._]ss[a-gi-z]
411
+ [._]sw[a-p]
412
+
413
+ # Session
414
+ Session.vim
415
+ Sessionx.vim
416
+
417
+ # Temporary
418
+ .netrwhist
419
+ # Auto-generated tag files
420
+ tags
421
+ # Persistent undo
422
+ [._]*.un~
423
+
424
+ ### VisualStudioCode ###
425
+ .vscode/
426
+ # .vscode/*
427
+ # !.vscode/settings.json
428
+ # !.vscode/tasks.json
429
+ # !.vscode/launch.json
430
+ # !.vscode/extensions.json
431
+ # !.vscode/*.code-snippets
432
+
433
+ # Local History for Visual Studio Code
434
+ .history/
435
+
436
+ # Built Visual Studio Code Extensions
437
+ *.vsix
438
+
439
+ ### VisualStudioCode Patch ###
440
+ # Ignore all local history of files
441
+ .history
442
+ .ionide
443
+
444
+ ### Windows ###
445
+ # Windows thumbnail cache files
446
+ Thumbs.db
447
+ Thumbs.db:encryptable
448
+ ehthumbs.db
449
+ ehthumbs_vista.db
450
+
451
+ # Dump file
452
+ *.stackdump
453
+
454
+ # Folder config file
455
+ [Dd]esktop.ini
456
+
457
+ # Recycle Bin used on file shares
458
+ $RECYCLE.BIN/
459
+
460
+ # Windows Installer files
461
+ *.cab
462
+ *.msi
463
+ *.msix
464
+ *.msm
465
+ *.msp
466
+
467
+ # Windows shortcuts
468
+ *.lnk
469
+
470
+ # End of https://www.toptal.com/developers/gitignore/api/python,jupyternotebooks,vim,visualstudiocode,pycharm,emacs,linux,macos,windows
@@ -0,0 +1,7 @@
1
+ repos:
2
+ - repo: https://github.com/cruft/cruft
3
+ rev: 2.16.0
4
+ hooks:
5
+ - id: cruft
6
+ entry: cruft update -y
7
+ additional_dependencies: [toml]
@@ -1,6 +1,6 @@
1
1
  repos:
2
2
  - repo: https://github.com/pre-commit/pre-commit-hooks
3
- rev: v4.3.0
3
+ rev: v6.0.0
4
4
  hooks:
5
5
  - id: trailing-whitespace
6
6
  - id: end-of-file-fixer
@@ -8,34 +8,32 @@ repos:
8
8
  - id: check-yaml
9
9
  - id: check-toml
10
10
  - id: check-added-large-files
11
+ - id: check-merge-conflict
11
12
  - id: debug-statements
12
13
  - id: mixed-line-ending
13
- - repo: https://github.com/PyCQA/isort
14
- rev: 5.10.1
15
- hooks:
16
- - id: isort
17
- - repo: https://github.com/psf/black
18
- rev: 22.3.0
19
- hooks:
20
- - id: black
21
14
  - repo: https://github.com/keewis/blackdoc
22
- rev: v0.3.4
15
+ rev: v0.4.6
23
16
  hooks:
24
17
  - id: blackdoc
25
- exclude: generate_reductions.py
26
- additional_dependencies: [black==22.3.0]
27
- - repo: https://github.com/PyCQA/flake8
28
- rev: 4.0.1
18
+ additional_dependencies: [black==26.3.0]
19
+ - repo: https://github.com/astral-sh/ruff-pre-commit
20
+ rev: v0.15.14
29
21
  hooks:
30
- - id: flake8
22
+ - id: ruff
23
+ args: [--fix, --show-fixes]
24
+ - id: ruff-format
31
25
  - repo: https://github.com/executablebooks/mdformat
32
- rev: 0.7.14
26
+ rev: 1.0.0
33
27
  hooks:
34
28
  - id: mdformat
35
29
  - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
36
- rev: v2.3.0
30
+ rev: v2.16.0
37
31
  hooks:
38
32
  - id: pretty-format-yaml
39
- args: [--autofix]
33
+ args: [--autofix, --preserve-quotes]
40
34
  - id: pretty-format-toml
41
35
  args: [--autofix]
36
+ # - repo: https://github.com/gitleaks/gitleaks
37
+ # rev: v8.30.0
38
+ # hooks:
39
+ # - id: gitleaks
@@ -0,0 +1 @@
1
+ 3.14