spatialdata 0.8.0__tar.gz → 0.9.0__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 (206) hide show
  1. spatialdata-0.8.0/.github/codecov.yml → spatialdata-0.9.0/.codecov.yaml +3 -3
  2. spatialdata-0.9.0/.cruft.json +44 -0
  3. {spatialdata-0.8.0 → spatialdata-0.9.0}/.editorconfig +3 -0
  4. spatialdata-0.9.0/.github/ISSUE_TEMPLATE/bug_report.yml +116 -0
  5. spatialdata-0.9.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. spatialdata-0.9.0/.github/ISSUE_TEMPLATE/feature_request.yml +11 -0
  7. spatialdata-0.9.0/.github/dependabot.yml +21 -0
  8. spatialdata-0.9.0/.github/workflows/autofix.yaml +32 -0
  9. spatialdata-0.9.0/.github/workflows/build.yaml +32 -0
  10. {spatialdata-0.8.0 → spatialdata-0.9.0}/.github/workflows/build_image.yml +12 -6
  11. spatialdata-0.9.0/.github/workflows/release.yaml +33 -0
  12. spatialdata-0.9.0/.github/workflows/test.yaml +103 -0
  13. {spatialdata-0.8.0 → spatialdata-0.9.0}/.gitignore +12 -19
  14. {spatialdata-0.8.0 → spatialdata-0.9.0}/.gitmodules +1 -1
  15. spatialdata-0.9.0/.panache.toml +15 -0
  16. spatialdata-0.9.0/.pre-commit-config.yaml +64 -0
  17. {spatialdata-0.8.0 → spatialdata-0.9.0}/.readthedocs.yaml +4 -5
  18. spatialdata-0.9.0/.vscode/extensions.json +19 -0
  19. spatialdata-0.9.0/.vscode/launch.json +33 -0
  20. spatialdata-0.9.0/.vscode/settings.json +21 -0
  21. spatialdata-0.9.0/AGENTS.md +67 -0
  22. {spatialdata-0.8.0 → spatialdata-0.9.0}/PKG-INFO +33 -24
  23. {spatialdata-0.8.0 → spatialdata-0.9.0}/README.md +13 -10
  24. {spatialdata-0.8.0 → spatialdata-0.9.0}/_version.py +2 -2
  25. {spatialdata-0.8.0 → spatialdata-0.9.0}/asv.conf.json +2 -1
  26. {spatialdata-0.8.0 → spatialdata-0.9.0}/benchmarks/README.md +5 -2
  27. spatialdata-0.9.0/benchmarks/spatialdata_benchmark.py +111 -0
  28. spatialdata-0.9.0/biome.jsonc +30 -0
  29. spatialdata-0.9.0/docs/_static/css/custom.css +31 -0
  30. spatialdata-0.9.0/docs/_static/img/spatialdata_horizontal.svg +109 -0
  31. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/data_formats.md +8 -0
  32. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/datasets.md +1 -0
  33. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/io.md +1 -1
  34. spatialdata-0.9.0/docs/changelog.md +16 -0
  35. spatialdata-0.9.0/docs/citation.md +5 -0
  36. spatialdata-0.9.0/docs/conf.py +128 -0
  37. spatialdata-0.9.0/docs/contributing.md +378 -0
  38. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/design_doc.md +56 -50
  39. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/glossary.md +4 -4
  40. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/index.md +52 -20
  41. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/installation.md +1 -1
  42. spatialdata-0.9.0/docs/interoperability.md +20 -0
  43. spatialdata-0.9.0/docs/quickstart.md +33 -0
  44. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/references.bib +11 -0
  45. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/references.md +1 -1
  46. spatialdata-0.9.0/docs/user_guide.md +168 -0
  47. spatialdata-0.9.0/pyproject.toml +381 -0
  48. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/__init__.py +1 -1
  49. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/_deepcopy.py +28 -12
  50. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/centroids.py +21 -10
  51. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/concatenate.py +11 -4
  52. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/data_extent.py +15 -41
  53. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/operations/_utils.py +13 -5
  54. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/operations/aggregate.py +56 -20
  55. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/operations/map.py +13 -5
  56. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/operations/rasterize.py +81 -46
  57. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/operations/rasterize_bins.py +46 -33
  58. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/operations/transform.py +20 -12
  59. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/operations/vectorize.py +25 -11
  60. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/query/_utils.py +13 -10
  61. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/query/relational_query.py +156 -53
  62. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/query/spatial_query.py +256 -167
  63. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/spatialdata.py +328 -150
  64. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/validation.py +6 -2
  65. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_io/_utils.py +39 -25
  66. spatialdata-0.9.0/src/spatialdata/_io/exceptions.py +26 -0
  67. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_io/format.py +3 -1
  68. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_io/io_points.py +25 -7
  69. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_io/io_raster.py +91 -28
  70. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_io/io_shapes.py +46 -14
  71. spatialdata-0.9.0/src/spatialdata/_io/io_table.py +137 -0
  72. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_io/io_zarr.py +48 -9
  73. spatialdata-0.9.0/src/spatialdata/_types.py +28 -0
  74. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_utils.py +29 -19
  75. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/dataloader/datasets.py +36 -20
  76. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/datasets.py +84 -10
  77. spatialdata-0.9.0/src/spatialdata/datasets.yaml +27 -0
  78. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/models/_accessor.py +2 -1
  79. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/models/_utils.py +20 -10
  80. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/models/models.py +134 -102
  81. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/testing.py +4 -1
  82. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/transformations/_utils.py +12 -4
  83. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/transformations/ngff/_utils.py +3 -0
  84. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/transformations/ngff/ngff_coordinate_system.py +9 -1
  85. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/transformations/ngff/ngff_transformations.py +9 -1
  86. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/transformations/operations.py +14 -7
  87. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/transformations/transformations.py +381 -128
  88. spatialdata-0.9.0/src/spatialdata/utils/points.py +15 -0
  89. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/conftest.py +17 -9
  90. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/query/test_relational_query.py +170 -0
  91. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/query/test_spatial_query.py +192 -0
  92. spatialdata-0.9.0/tests/core/test_get_attrs.py +138 -0
  93. spatialdata-0.9.0/tests/data/multipolygon.json +29 -0
  94. spatialdata-0.9.0/tests/data/polygon.json +17 -0
  95. spatialdata-0.9.0/tests/datasets/test_datasets.py +93 -0
  96. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/io/test_readwrite.py +46 -10
  97. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/models/test_models.py +52 -0
  98. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/transformations/test_transformations.py +254 -117
  99. spatialdata-0.9.0/tests/utils/__init__.py +0 -0
  100. spatialdata-0.8.0/.bumpversion.cfg +0 -8
  101. spatialdata-0.8.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -54
  102. spatialdata-0.8.0/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  103. spatialdata-0.8.0/.github/workflows/release.yaml +0 -31
  104. spatialdata-0.8.0/.github/workflows/test.yaml +0 -69
  105. spatialdata-0.8.0/.mypy.ini +0 -27
  106. spatialdata-0.8.0/.pre-commit-config.yaml +0 -27
  107. spatialdata-0.8.0/benchmarks/spatialdata_benchmark.py +0 -67
  108. spatialdata-0.8.0/docs/Makefile +0 -24
  109. spatialdata-0.8.0/docs/_static/css/custom.css +0 -12
  110. spatialdata-0.8.0/docs/changelog.md +0 -4
  111. spatialdata-0.8.0/docs/conf.py +0 -185
  112. spatialdata-0.8.0/docs/contributing.md +0 -267
  113. spatialdata-0.8.0/docs/extensions/typed_returns.py +0 -31
  114. spatialdata-0.8.0/docs/user_guide.md +0 -216
  115. spatialdata-0.8.0/pyproject.toml +0 -246
  116. spatialdata-0.8.0/src/spatialdata/_io/io_table.py +0 -71
  117. spatialdata-0.8.0/src/spatialdata/_types.py +0 -16
  118. spatialdata-0.8.0/tests/core/test_get_attrs.py +0 -72
  119. spatialdata-0.8.0/tests/data/multipolygon.json +0 -55
  120. spatialdata-0.8.0/tests/data/polygon.json +0 -27
  121. spatialdata-0.8.0/tests/datasets/test_datasets.py +0 -28
  122. {spatialdata-0.8.0 → spatialdata-0.9.0}/.claude/skills/memray/SKILL.md +0 -0
  123. {spatialdata-0.8.0 → spatialdata-0.9.0}/.claude/skills/profimp/SKILL.md +0 -0
  124. {spatialdata-0.8.0 → spatialdata-0.9.0}/.claude/skills/pyspy/SKILL.md +0 -0
  125. {spatialdata-0.8.0 → spatialdata-0.9.0}/.github/release.yml +0 -0
  126. {spatialdata-0.8.0 → spatialdata-0.9.0}/Dockerfile +0 -0
  127. {spatialdata-0.8.0 → spatialdata-0.9.0}/LICENSE +0 -0
  128. {spatialdata-0.8.0 → spatialdata-0.9.0}/benchmarks/__init__.py +0 -0
  129. {spatialdata-0.8.0 → spatialdata-0.9.0}/benchmarks/benchmark_dataloader.py +0 -0
  130. {spatialdata-0.8.0 → spatialdata-0.9.0}/benchmarks/benchmark_imports.py +0 -0
  131. {spatialdata-0.8.0 → spatialdata-0.9.0}/benchmarks/utils.py +0 -0
  132. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/_static/.gitkeep +0 -0
  133. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/_static/img/spatialdata_horizontal.png +0 -0
  134. /spatialdata-0.8.0/CHANGELOG.md → /spatialdata-0.9.0/docs/_templates/.gitkeep +0 -0
  135. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/SpatialData.md +0 -0
  136. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/dataloader.md +0 -0
  137. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/models.md +0 -0
  138. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/models_utils.md +0 -0
  139. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/operations.md +0 -0
  140. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/testing.md +0 -0
  141. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/transformations.md +0 -0
  142. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api/transformations_utils.md +0 -0
  143. {spatialdata-0.8.0 → spatialdata-0.9.0}/docs/api.md +0 -0
  144. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/__main__.py +0 -0
  145. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_bridges/__init__.py +0 -0
  146. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/__init__.py +0 -0
  147. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/_elements.py +0 -0
  148. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/_utils.py +0 -0
  149. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/operations/__init__.py +0 -0
  150. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_core/query/__init__.py +0 -0
  151. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_docs.py +0 -0
  152. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_io/__init__.py +0 -0
  153. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/_logging.py +0 -0
  154. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/config.py +0 -0
  155. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/dataloader/__init__.py +0 -0
  156. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/io/__init__.py +0 -0
  157. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/models/__init__.py +0 -0
  158. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/models/chunks_utils.py +0 -0
  159. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/models/pyramids_utils.py +0 -0
  160. /spatialdata-0.8.0/src/spatialdata/transformations/ngff/__init__.py → /spatialdata-0.9.0/src/spatialdata/py.typed +0 -0
  161. {spatialdata-0.8.0 → spatialdata-0.9.0}/src/spatialdata/transformations/__init__.py +0 -0
  162. {spatialdata-0.8.0/tests → spatialdata-0.9.0/src/spatialdata/transformations/ngff}/__init__.py +0 -0
  163. {spatialdata-0.8.0/tests/core → spatialdata-0.9.0/tests}/__init__.py +0 -0
  164. {spatialdata-0.8.0/tests/core/operations → spatialdata-0.9.0/tests/core}/__init__.py +0 -0
  165. {spatialdata-0.8.0/tests/core/query → spatialdata-0.9.0/tests/core/operations}/__init__.py +0 -0
  166. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/operations/conftest.py +0 -0
  167. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/operations/test_aggregations.py +0 -0
  168. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/operations/test_map.py +0 -0
  169. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/operations/test_rasterize.py +0 -0
  170. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/operations/test_rasterize_bins.py +0 -0
  171. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/operations/test_spatialdata_operations.py +0 -0
  172. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/operations/test_transform.py +0 -0
  173. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/operations/test_vectorize.py +0 -0
  174. {spatialdata-0.8.0/tests/datasets → spatialdata-0.9.0/tests/core/query}/__init__.py +0 -0
  175. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/query/test_relational_query_match_sdata_to_table.py +0 -0
  176. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/test_centroids.py +0 -0
  177. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/test_data_extent.py +0 -0
  178. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/test_deepcopy.py +0 -0
  179. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/core/test_validation.py +0 -0
  180. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/data/points.json +0 -0
  181. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/dataloader/__init__.py +0 -0
  182. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/dataloader/conftest.py +0 -0
  183. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/dataloader/test_datasets.py +0 -0
  184. {spatialdata-0.8.0/tests/io → spatialdata-0.9.0/tests/datasets}/__init__.py +0 -0
  185. {spatialdata-0.8.0/tests/models → spatialdata-0.9.0/tests/io}/__init__.py +0 -0
  186. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/io/test_attrs_io.py +0 -0
  187. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/io/test_format.py +0 -0
  188. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/io/test_metadata.py +0 -0
  189. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/io/test_multi_table.py +0 -0
  190. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/io/test_partial_read.py +0 -0
  191. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/io/test_pyramids_performance.py +0 -0
  192. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/io/test_utils.py +0 -0
  193. {spatialdata-0.8.0/tests/transformations → spatialdata-0.9.0/tests/models}/__init__.py +0 -0
  194. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/models/test_accessor.py +0 -0
  195. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/models/test_chunks_utils.py +0 -0
  196. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/models/test_pyramids_utils.py +0 -0
  197. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/test_init.py +0 -0
  198. {spatialdata-0.8.0/tests/transformations/ngff → spatialdata-0.9.0/tests/transformations}/__init__.py +0 -0
  199. {spatialdata-0.8.0/tests/utils → spatialdata-0.9.0/tests/transformations/ngff}/__init__.py +0 -0
  200. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/transformations/ngff/conftest.py +0 -0
  201. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/transformations/ngff/test_ngff_coordinate_system.py +0 -0
  202. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/transformations/ngff/test_ngff_transformations.py +0 -0
  203. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/transformations/test_transformations_utils.py +0 -0
  204. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/utils/test_element_utils.py +0 -0
  205. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/utils/test_sanitize.py +0 -0
  206. {spatialdata-0.8.0 → spatialdata-0.9.0}/tests/utils/test_testing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  # Based on pydata/xarray
2
2
  codecov:
3
- require_ci_to_pass: false
3
+ require_ci_to_pass: no
4
4
 
5
5
  coverage:
6
6
  status:
@@ -12,6 +12,6 @@ coverage:
12
12
  changes: false
13
13
 
14
14
  comment:
15
- layout: "diff, flags, files"
15
+ layout: diff, flags, files
16
16
  behavior: once
17
- require_base: false
17
+ require_base: no
@@ -0,0 +1,44 @@
1
+ {
2
+ "template": "https://github.com/scverse/cookiecutter-scverse",
3
+ "commit": "eb4523fde2e18bcfc121ff2cd722c9037ff8b910",
4
+ "checkout": "main",
5
+ "context": {
6
+ "cookiecutter": {
7
+ "project_name": "spatialdata",
8
+ "package_name": "spatialdata",
9
+ "project_description": "Spatial data format.",
10
+ "author_full_name": "scverse",
11
+ "author_email": "luca.marconato@scverse.org",
12
+ "github_user": "scverse",
13
+ "github_repo": "spatialdata",
14
+ "license": "BSD 3-Clause License",
15
+ "ide_integration": true,
16
+ "issue_categorization": "issue types",
17
+ "_copy_without_render": [
18
+ ".github/workflows/build.yaml",
19
+ ".github/workflows/test.yaml",
20
+ "docs/_templates/autosummary/**.rst"
21
+ ],
22
+ "_exclude_on_template_update": [
23
+ "CHANGELOG.md",
24
+ "LICENSE",
25
+ "README.md",
26
+ "docs/api.md",
27
+ "docs/index.md",
28
+ "docs/notebooks/example.ipynb",
29
+ "docs/references.bib",
30
+ "docs/references.md",
31
+ "src/**",
32
+ "tests/**"
33
+ ],
34
+ "_render_devdocs": false,
35
+ "_jinja2_env_vars": {
36
+ "lstrip_blocks": true,
37
+ "trim_blocks": true
38
+ },
39
+ "_template": "https://github.com/scverse/cookiecutter-scverse",
40
+ "_commit": "eb4523fde2e18bcfc121ff2cd722c9037ff8b910"
41
+ }
42
+ },
43
+ "directory": null
44
+ }
@@ -9,5 +9,8 @@ trim_trailing_whitespace = true
9
9
  insert_final_newline = true
10
10
  line_length = 120
11
11
 
12
+ [{*.{yml,yaml,toml},.cruft.json}]
13
+ indent_size = 2
14
+
12
15
  [Makefile]
13
16
  indent_style = tab
@@ -0,0 +1,116 @@
1
+ name: Bug report
2
+ description: Report something that is broken or incorrect
3
+ type: Bug
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ **Note**: Please read [this guide](https://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports)
9
+ detailing how to provide the necessary information for us to reproduce your bug. In brief:
10
+ * Please provide exact steps how to reproduce the bug in a clean Python environment.
11
+ * In case it's not clear what's causing this bug, please provide the data or the data generation procedure.
12
+ * Replicate problems on public datasets or share data subsets when full sharing isn't possible.
13
+
14
+ Generally, the easier it is for us to reproduce the issue, the faster we can work on it. If you can, please:
15
+
16
+ 1. Reproduce using the [`blobs` dataset](https://spatialdata.scverse.org/en/stable/api/datasets.html#spatialdata.datasets.blobs):
17
+
18
+ ```python
19
+ from spatialdata.datasets import blobs
20
+
21
+ sdata = blobs()
22
+ ```
23
+
24
+ You can also use [`blobs_annotating_element`](https://spatialdata.scverse.org/en/stable/api/datasets.html#spatialdata.datasets.blobs_annotating_element) for more control:
25
+
26
+ ```python
27
+ from spatialdata.datasets import blobs_annotating_element
28
+
29
+ sdata = blobs_annotating_element("blobs_labels")
30
+ ```
31
+
32
+ 2. If the above is not possible, reproduce using a public dataset and explain how we can download the data.
33
+ 3. If the data is private, consider sharing an anonymized version/subset via a [Zulip private message](https://scverse.zulipchat.com/#user/480560), or provide screenshots/GIFs showing the behavior.
34
+
35
+ Please report only one bug per issue.
36
+
37
+ - type: textarea
38
+ id: report
39
+ attributes:
40
+ label: Report
41
+ description: A clear and concise description of what the bug is.
42
+ validations:
43
+ required: true
44
+
45
+ - type: textarea
46
+ id: versions
47
+ attributes:
48
+ label: Versions
49
+ description: |
50
+ Which version of packages.
51
+
52
+ Please install `session-info2`, run the following command in a notebook,
53
+ click the “Copy as Markdown” button, then paste the results into the text box below.
54
+
55
+ ```python
56
+ In[1]: import session_info2; session_info2.session_info(dependencies=True)
57
+ ```
58
+
59
+ Alternatively, run this in a console:
60
+
61
+ ```python
62
+ >>> import session_info2; print(session_info2.session_info(dependencies=True)._repr_mimebundle_()["text/markdown"])
63
+ ```
64
+ render: python
65
+ placeholder: |
66
+ anndata 0.11.3
67
+ ---- ----
68
+ charset-normalizer 3.4.1
69
+ coverage 7.7.0
70
+ psutil 7.0.0
71
+ dask 2024.7.1
72
+ jaraco.context 5.3.0
73
+ numcodecs 0.15.1
74
+ jaraco.functools 4.0.1
75
+ Jinja2 3.1.6
76
+ sphinxcontrib-jsmath 1.0.1
77
+ sphinxcontrib-htmlhelp 2.1.0
78
+ toolz 1.0.0
79
+ session-info2 0.1.2
80
+ PyYAML 6.0.2
81
+ llvmlite 0.44.0
82
+ scipy 1.15.2
83
+ pandas 2.2.3
84
+ sphinxcontrib-devhelp 2.0.0
85
+ h5py 3.13.0
86
+ tblib 3.0.0
87
+ setuptools-scm 8.2.0
88
+ more-itertools 10.3.0
89
+ msgpack 1.1.0
90
+ sparse 0.15.5
91
+ wrapt 1.17.2
92
+ jaraco.collections 5.1.0
93
+ numba 0.61.0
94
+ pyarrow 19.0.1
95
+ pytz 2025.1
96
+ MarkupSafe 3.0.2
97
+ crc32c 2.7.1
98
+ sphinxcontrib-qthelp 2.0.0
99
+ sphinxcontrib-serializinghtml 2.0.0
100
+ zarr 2.18.4
101
+ asciitree 0.3.3
102
+ six 1.17.0
103
+ sphinxcontrib-applehelp 2.0.0
104
+ numpy 2.1.3
105
+ cloudpickle 3.1.1
106
+ sphinxcontrib-bibtex 2.6.3
107
+ natsort 8.4.0
108
+ jaraco.text 3.12.1
109
+ setuptools 76.1.0
110
+ Deprecated 1.2.18
111
+ packaging 24.2
112
+ python-dateutil 2.9.0.post0
113
+ ---- ----
114
+ Python 3.13.2 | packaged by conda-forge | (main, Feb 17 2025, 14:10:22) [GCC 13.3.0]
115
+ OS Linux-6.11.0-109019-tuxedo-x86_64-with-glibc2.39
116
+ Updated 2025-03-18 15:47
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Scverse Community Forum
4
+ url: https://discourse.scverse.org/
5
+ about: If you have questions about “How to do X”, please ask them here.
@@ -0,0 +1,11 @@
1
+ name: Feature request
2
+ description: Propose a new feature for spatialdata
3
+ type: Enhancement
4
+ body:
5
+ - type: textarea
6
+ id: description
7
+ attributes:
8
+ label: Description of feature
9
+ description: Please describe your suggestion for a new feature. It might help to describe a problem or use case, plus any alternatives that you have considered.
10
+ validations:
11
+ required: true
@@ -0,0 +1,21 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pre-commit
4
+ directory: /
5
+ schedule:
6
+ interval: weekly
7
+ cooldown:
8
+ default-days: 7
9
+ groups:
10
+ pre-commit:
11
+ patterns: ["*"]
12
+ - package-ecosystem: github-actions
13
+ directory: /
14
+ schedule:
15
+ interval: weekly
16
+ cooldown:
17
+ default-days: 7
18
+ groups:
19
+ actions-deps:
20
+ patterns:
21
+ - "*"
@@ -0,0 +1,32 @@
1
+ # The workflow name is mandated by autofix.ci.
2
+ # It needs to be a dedicated workflow, as autofix.ci times out on long runs.
3
+ name: autofix.ci
4
+
5
+ on:
6
+ pull_request:
7
+
8
+ env:
9
+ FORCE_COLOR: "1"
10
+ UV_COMPILE_BYTECODE: "1"
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ lint:
17
+ name: Pre-commit checks
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
+ with:
22
+ fetch-depth: 0
23
+ filter: blob:none
24
+ persist-credentials: false
25
+ - uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
26
+ with:
27
+ enable-cache: true
28
+ - run: uv tool install hatch
29
+ - name: Run pre-commit hooks
30
+ run: uvx prek run --all-files --show-diff-on-failure --color=always
31
+ - uses: autofix-ci/action@c5b2d67aa2274e7b5a18224e8171550871fc7e4a # v1.3.4
32
+ if: ${{ !cancelled() }}
@@ -0,0 +1,32 @@
1
+ name: Check Build
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ concurrency:
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ package:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
+ with:
22
+ filter: blob:none
23
+ fetch-depth: 0
24
+ persist-credentials: false
25
+ - name: Install uv
26
+ uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
27
+ with:
28
+ enable-cache: false
29
+ - name: Build package
30
+ run: uv build
31
+ - name: Check package
32
+ run: uvx twine check --strict dist/*.whl
@@ -2,8 +2,8 @@ name: Build Docker image
2
2
 
3
3
  on:
4
4
  workflow_dispatch:
5
- # schedule:
6
- # - cron: '0 0 * * *' # run daily at midnight UTC
5
+ # schedule:
6
+ # - cron: "0 0 * * *" # run daily at midnight UTC
7
7
 
8
8
  env:
9
9
  REGISTRY: ghcr.io
@@ -13,6 +13,9 @@ concurrency:
13
13
  group: ${{ github.workflow }}-${{ github.ref }}
14
14
  cancel-in-progress: true
15
15
 
16
+ permissions:
17
+ contents: read
18
+
16
19
  jobs:
17
20
  build:
18
21
  runs-on: ubuntu-latest
@@ -29,10 +32,13 @@ jobs:
29
32
 
30
33
  steps:
31
34
  - name: Checkout code
32
- uses: actions/checkout@v4
35
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
36
+ with:
37
+ filter: blob:none
38
+ persist-credentials: false
33
39
 
34
40
  - name: Set up Python
35
- uses: actions/setup-python@v4
41
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
36
42
  with:
37
43
  python-version: "3.x"
38
44
 
@@ -77,13 +83,13 @@ jobs:
77
83
 
78
84
  - name: Login to GitHub Container Registry
79
85
  if: ${{ env.skip_build == 'false' }}
80
- uses: docker/login-action@v3
86
+ uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0
81
87
  with:
82
88
  registry: ${{ env.REGISTRY }}
83
89
  username: ${{ github.actor }}
84
90
  password: ${{ secrets.GITHUB_TOKEN }}
85
91
 
86
- - uses: docker/build-push-action@v5
92
+ - uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
87
93
  if: ${{ env.skip_build == 'false' }}
88
94
  env:
89
95
  IMAGE_TAG: ${{ env.REGISTRY }}/scverse/spatialdata:${{ env.IMAGE_TAG_SUFFIX }}
@@ -0,0 +1,33 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ # Use "trusted publishing", see https://docs.pypi.org/trusted-publishers/
8
+ permissions: {}
9
+
10
+ jobs:
11
+ release:
12
+ name: Upload release to PyPI
13
+ runs-on: ubuntu-latest
14
+ environment:
15
+ name: pypi
16
+ url: https://pypi.org/p/spatialdata
17
+ permissions:
18
+ contents: read
19
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
20
+ steps:
21
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
22
+ with:
23
+ filter: blob:none
24
+ fetch-depth: 0
25
+ persist-credentials: false
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
28
+ with:
29
+ enable-cache: false
30
+ - name: Build package
31
+ run: uv build
32
+ - name: Publish package distributions to PyPI
33
+ uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
@@ -0,0 +1,103 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ schedule:
9
+ - cron: "0 5 1,15 * *"
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ # [tool.hatch.envs.hatch-test.matrix] in pyproject.toml is the single source of truth: the same environments run here and locally.
20
+ get-environments:
21
+ runs-on: ubuntu-slim
22
+ outputs:
23
+ envs: ${{ steps.get-envs.outputs.envs }}
24
+ steps:
25
+ - &clone
26
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
27
+ with:
28
+ filter: blob:none
29
+ fetch-depth: 0
30
+ persist-credentials: false
31
+ - &setup-uv
32
+ uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
33
+ with:
34
+ prune-cache: true
35
+ - name: Get test environments
36
+ id: get-envs
37
+ run: |
38
+ ENVS_JSON=$(uvx hatch env show --json | jq -c 'to_entries
39
+ | map(
40
+ select(.key | startswith("hatch-test"))
41
+ | {
42
+ name: .key,
43
+ label: (if (.key | contains("pre")) then .key + " (PRE-RELEASE DEPENDENCIES)" else .key end),
44
+ python: .value.python
45
+ }
46
+ )')
47
+ echo "envs=${ENVS_JSON}" | tee $GITHUB_OUTPUT
48
+
49
+ test:
50
+ needs: get-environments
51
+ permissions:
52
+ id-token: write # for codecov OIDC
53
+ contents: read
54
+
55
+ strategy:
56
+ fail-fast: false
57
+ matrix:
58
+ os: [ubuntu-latest, macos-latest, windows-latest]
59
+ env: ${{ fromJSON(needs.get-environments.outputs.envs) }}
60
+
61
+ name: ${{ matrix.env.label }} (${{ matrix.os }})
62
+ runs-on: ${{ matrix.os }}
63
+ continue-on-error: ${{ contains(matrix.env.name, 'pre') }} # make "all-green" pass even if pre-release job fails
64
+ env:
65
+ UV_PYTHON: ${{ matrix.env.python }}
66
+
67
+ steps:
68
+ - *clone
69
+ - *setup-uv
70
+ - name: create hatch environment
71
+ run: uvx hatch env create ${{ matrix.env.name }}
72
+ - name: list all all installed package versions
73
+ run: uvx hatch run ${{ matrix.env.name }}:uv pip list
74
+ - name: run tests using hatch
75
+ env:
76
+ MPLBACKEND: agg
77
+ PLATFORM: ${{ matrix.os }}
78
+ DISPLAY: :42
79
+ run: uvx hatch run ${{ matrix.env.name }}:run-cov -v --color=yes -n auto --dist worksteal --run-network
80
+ - name: generate coverage report
81
+ run: |
82
+ # See https://coverage.readthedocs.io/page/config.html#run-patch
83
+ test -f .coverage || uvx hatch run ${{ matrix.env.name }}:cov-combine
84
+ uvx hatch run ${{ matrix.env.name }}:cov-report # report visibly
85
+ uvx hatch run ${{ matrix.env.name }}:coverage xml # create report for upload
86
+ - name: Upload coverage
87
+ uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
88
+ with:
89
+ fail_ci_if_error: true
90
+ use_oidc: true
91
+
92
+ # One required check for branch protection, so it does not need updating whenever the matrix changes.
93
+ check:
94
+ name: Tests pass in all hatch environments
95
+ if: always()
96
+ needs:
97
+ - get-environments
98
+ - test
99
+ runs-on: ubuntu-latest
100
+ steps:
101
+ - uses: re-actors/alls-green@b5b5b37504aa4183270bd3d855c52a67f212be35 # v1.3.0
102
+ with:
103
+ jobs: ${{ toJSON(needs) }}
@@ -1,10 +1,16 @@
1
1
  # Temp files
2
2
  .DS_Store
3
3
  *~
4
+ buck-out/
4
5
  .dmypy.json
6
+ temp/
5
7
 
6
8
  # Compiled files
9
+ .venv/
10
+ uv.lock
11
+ pixi.lock
7
12
  __pycache__/
13
+ .*cache/
8
14
 
9
15
  # Distribution / packaging
10
16
  /build/
@@ -12,27 +18,23 @@ __pycache__/
12
18
  /*.egg-info/
13
19
 
14
20
  # Tests and coverage
15
- /.pytest_cache/
16
- /.cache/
17
21
  /data/
22
+ /node_modules/
23
+ /.coverage*
24
+ /coverage.xml
18
25
 
19
26
  # docs
20
- docs/_build
21
- !docs/api/.md
22
- docs/**/generated
27
+ /docs/generated/
28
+ /docs/_build/
29
+ docs/**/generated/
23
30
  docs/_static/datasets_data.js
24
31
 
25
32
  # IDEs
26
33
  /.idea/
27
- .vscode
28
34
 
29
35
  # data
30
36
  *.zarr/
31
37
 
32
- # temp files
33
- temp/
34
-
35
-
36
38
  # symlinks (luca) for extending the refactoring to satellite projects
37
39
  napari-spatialdata
38
40
  spatialdata-io
@@ -52,12 +54,3 @@ _version.py
52
54
  # benchmarking and profiling
53
55
  .asv/
54
56
  profile.speedscope.json
55
-
56
- # other
57
- node_modules/
58
-
59
- .mypy_cache
60
- .ruff_cache
61
- uv.lock
62
- pixi.lock
63
-
@@ -1,3 +1,3 @@
1
1
  [submodule "docs/tutorials/notebooks"]
2
2
  path = docs/tutorials/notebooks
3
- url = https://github.com/scverse/spatialdata-notebooks
3
+ url = https://github.com/scverse/spatialdata-tutorials
@@ -0,0 +1,15 @@
1
+ #:schema https://panache.bz/panache.schema.json
2
+ flavor = "myst"
3
+ extend-exclude = [".claude/"]
4
+
5
+ [format]
6
+ wrap = "preserve"
7
+ smart-punctuation = "unicode"
8
+ tab-stops = "preserve"
9
+
10
+ # MyST syntax extensions from `scverse_doc.config.MYST_ENABLE_EXTENSIONS`
11
+ [extensions]
12
+ myst-colon-fence = true # colon_fence
13
+ definition-lists = true # deflist
14
+ tex-math-dollars = true # dollarmath, amsmath
15
+ raw-html = true # html_image, html_admonition
@@ -0,0 +1,64 @@
1
+ fail_fast: false
2
+ default_language_version:
3
+ python: python3
4
+ default_stages:
5
+ - pre-commit
6
+ - pre-push
7
+ minimum_pre_commit_version: 2.16.0
8
+ repos:
9
+ - repo: https://github.com/biomejs/pre-commit
10
+ rev: v2.6.4
11
+ hooks:
12
+ - id: biome-format
13
+ exclude: ^\.cruft\.json$ # inconsistent indentation with cruft - file never to be modified manually.
14
+ groups: [format]
15
+ # further file exclusions and other options are configured in biome.jsonc
16
+ - repo: https://github.com/jolars/panache-pre-commit
17
+ rev: v3.18.0
18
+ hooks:
19
+ - id: panache-format
20
+ groups: [format]
21
+ - repo: https://github.com/tox-dev/pyproject-fmt
22
+ rev: v2.30.3
23
+ hooks:
24
+ - id: pyproject-fmt
25
+ groups: [format]
26
+ - repo: https://github.com/astral-sh/ruff-pre-commit
27
+ rev: v0.17.3
28
+ hooks:
29
+ - id: ruff-check
30
+ args: [--fix, --exit-non-zero-on-fix]
31
+ - id: ruff-format
32
+ groups: [format]
33
+ - repo: local
34
+ hooks:
35
+ - id: mypy
36
+ name: mypy
37
+ entry: hatch check types
38
+ language: system
39
+ types: [python]
40
+ files: ^(src|tests)/
41
+ require_serial: true
42
+ pass_filenames: false
43
+ groups: [typecheck]
44
+ - repo: https://github.com/pre-commit/pre-commit-hooks
45
+ rev: v6.0.0
46
+ hooks:
47
+ - id: detect-private-key
48
+ - id: end-of-file-fixer
49
+ groups: [format]
50
+ - id: mixed-line-ending
51
+ args: [--fix=lf]
52
+ groups: [format]
53
+ - id: trailing-whitespace
54
+ groups: [format]
55
+ - id: check-case-conflict
56
+ # Check that there are no merge conflicts (could be generated by template sync)
57
+ - id: check-merge-conflict
58
+ args: [--assume-in-merge]
59
+
60
+ - repo: https://github.com/zizmorcore/zizmor-pre-commit
61
+ rev: v1.32.0
62
+ hooks:
63
+ - id: zizmor
64
+ args: [--no-progress, --fix]
@@ -1,12 +1,12 @@
1
- # https://docs.readthedocs.io/en/stable/config-file/v2.html
1
+ # https://docs.readthedocs.io/page/config-file/v2.html
2
2
  version: 2
3
3
  build:
4
4
  os: ubuntu-24.04
5
5
  tools:
6
- python: "3.13"
6
+ python: "3.14"
7
7
  jobs:
8
8
  post_checkout:
9
- # unshallow so version can be derived from tag
9
+ # unshallow so the version can be derived from the git tag
10
10
  - git fetch --unshallow || true
11
11
  create_environment:
12
12
  - asdf plugin add uv
@@ -14,8 +14,7 @@ build:
14
14
  - asdf global uv latest
15
15
  build:
16
16
  html:
17
- - uv sync --group=docs --extra=torch
18
- - uv run make --directory=docs html
17
+ - uvx hatch run docs:build
19
18
  - mv docs/_build $READTHEDOCS_OUTPUT
20
19
  submodules:
21
20
  include:
@@ -0,0 +1,19 @@
1
+ {
2
+ "recommendations": [
3
+ // GitHub integration
4
+ "github.vscode-github-actions",
5
+ "github.vscode-pull-request-github",
6
+ // Language support
7
+ "ms-python.python",
8
+ "ms-python.vscode-pylance",
9
+ "ms-toolsai.jupyter",
10
+ "tamasfe.even-better-toml",
11
+ // Dependency management
12
+ "ninoseki.vscode-mogami",
13
+ // Linting and formatting
14
+ "editorconfig.editorconfig",
15
+ "charliermarsh.ruff",
16
+ "biomejs.biome",
17
+ "jolars.panache",
18
+ ],
19
+ }