spatialdata-io 0.7.1__tar.gz → 0.7.2__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 (117) hide show
  1. spatialdata_io-0.7.2/.codecov.yaml +17 -0
  2. spatialdata_io-0.7.2/.cruft.json +44 -0
  3. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/.editorconfig +3 -0
  4. spatialdata_io-0.7.2/.github/ISSUE_TEMPLATE/bug_report.yml +93 -0
  5. spatialdata_io-0.7.2/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. spatialdata_io-0.7.2/.github/ISSUE_TEMPLATE/feature_request.yml +11 -0
  7. spatialdata_io-0.7.2/.github/dependabot.yml +21 -0
  8. spatialdata_io-0.7.2/.github/release.yml +29 -0
  9. spatialdata_io-0.7.2/.github/workflows/autofix.yaml +31 -0
  10. spatialdata_io-0.7.2/.github/workflows/build.yaml +30 -0
  11. spatialdata_io-0.7.2/.github/workflows/prepare_test_data.yaml +107 -0
  12. spatialdata_io-0.7.2/.github/workflows/release.yaml +33 -0
  13. spatialdata_io-0.7.2/.github/workflows/test.yaml +114 -0
  14. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/.gitignore +16 -31
  15. spatialdata_io-0.7.2/.panache.toml +14 -0
  16. spatialdata_io-0.7.2/.pre-commit-config.yaml +58 -0
  17. spatialdata_io-0.7.2/.readthedocs.yaml +16 -0
  18. spatialdata_io-0.7.2/CHANGELOG.md +34 -0
  19. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/PKG-INFO +21 -34
  20. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/README.md +10 -10
  21. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/_version.py +2 -2
  22. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/asv.conf.json +1 -1
  23. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/benchmarks/benchmark_xenium.py +2 -0
  24. spatialdata_io-0.7.2/biome.jsonc +18 -0
  25. spatialdata_io-0.7.2/docs/_static/css/custom.css +4 -0
  26. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/api.md +25 -25
  27. spatialdata_io-0.7.2/docs/changelog.md +2 -0
  28. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/cli.md +2 -0
  29. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/conf.py +37 -42
  30. spatialdata_io-0.7.2/docs/contributing.md +326 -0
  31. spatialdata_io-0.7.1/docs/contributing.md → spatialdata_io-0.7.2/docs/contributing_io.md +52 -38
  32. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/index.md +2 -2
  33. spatialdata_io-0.7.2/docs/references.bib +27 -0
  34. spatialdata_io-0.7.2/pyproject.toml +206 -0
  35. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/__init__.py +7 -7
  36. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/_constants/_constants.py +10 -0
  37. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/converters/legacy_anndata.py +3 -0
  38. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/_utils/_image.py +0 -1
  39. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/_utils/_utils.py +9 -1
  40. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/codex.py +3 -2
  41. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/cosmx.py +6 -5
  42. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/curio.py +15 -8
  43. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/dbit.py +17 -9
  44. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/generic.py +9 -5
  45. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/macsima.py +13 -10
  46. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/mcmicro.py +2 -3
  47. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/merscope.py +9 -6
  48. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/seqfish.py +5 -3
  49. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/steinbock.py +2 -0
  50. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/stereoseq.py +7 -3
  51. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/visium.py +6 -3
  52. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/visium_hd.py +6 -5
  53. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/xenium.py +299 -80
  54. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/_utils.py +3 -3
  55. spatialdata_io-0.7.2/tests/fixtures/ATTRIBUTION.md +32 -0
  56. spatialdata_io-0.7.2/tests/fixtures/xenium-1.0.2-csv-tiny/cell_boundaries.csv.gz +0 -0
  57. spatialdata_io-0.7.2/tests/fixtures/xenium-1.0.2-csv-tiny/cell_feature_matrix.h5 +0 -0
  58. spatialdata_io-0.7.2/tests/fixtures/xenium-1.0.2-csv-tiny/cells.csv.gz +0 -0
  59. spatialdata_io-0.7.2/tests/fixtures/xenium-1.0.2-csv-tiny/experiment.xenium +38 -0
  60. spatialdata_io-0.7.2/tests/fixtures/xenium-1.0.2-csv-tiny/nucleus_boundaries.csv.gz +0 -0
  61. spatialdata_io-0.7.2/tests/fixtures/xenium-1.0.2-csv-tiny/transcripts.csv.gz +0 -0
  62. spatialdata_io-0.7.2/tests/fixtures/xenium-3.0.0-csv-hex-tiny/cell_boundaries.csv.gz +0 -0
  63. spatialdata_io-0.7.2/tests/fixtures/xenium-3.0.0-csv-hex-tiny/cell_feature_matrix.h5 +0 -0
  64. spatialdata_io-0.7.2/tests/fixtures/xenium-3.0.0-csv-hex-tiny/cells.csv.gz +0 -0
  65. spatialdata_io-0.7.2/tests/fixtures/xenium-3.0.0-csv-hex-tiny/experiment.xenium +56 -0
  66. spatialdata_io-0.7.2/tests/fixtures/xenium-3.0.0-csv-hex-tiny/nucleus_boundaries.csv.gz +0 -0
  67. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/test_cli_alignment.py +0 -1
  68. spatialdata_io-0.7.2/tests/test_dbit.py +33 -0
  69. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/test_generic.py +8 -8
  70. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/test_macsima.py +88 -52
  71. spatialdata_io-0.7.2/tests/test_merscope.py +32 -0
  72. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/test_seqfish.py +2 -2
  73. spatialdata_io-0.7.2/tests/test_visium.py +161 -0
  74. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/test_xenium.py +132 -3
  75. spatialdata_io-0.7.1/.bumpversion.cfg +0 -8
  76. spatialdata_io-0.7.1/.codecov.yaml +0 -17
  77. spatialdata_io-0.7.1/.github/codecov.yml +0 -17
  78. spatialdata_io-0.7.1/.github/release.yml +0 -29
  79. spatialdata_io-0.7.1/.github/workflows/prepare_test_data.yaml +0 -83
  80. spatialdata_io-0.7.1/.github/workflows/release.yaml +0 -31
  81. spatialdata_io-0.7.1/.github/workflows/test.yaml +0 -75
  82. spatialdata_io-0.7.1/.mypy.ini +0 -27
  83. spatialdata_io-0.7.1/.pre-commit-config.yaml +0 -43
  84. spatialdata_io-0.7.1/.readthedocs.yaml +0 -15
  85. spatialdata_io-0.7.1/docs/_templates/autosummary/class.rst +0 -75
  86. spatialdata_io-0.7.1/docs/changelog.md +0 -4
  87. spatialdata_io-0.7.1/docs/extensions/typed_returns.py +0 -29
  88. spatialdata_io-0.7.1/docs/references.bib +0 -17
  89. spatialdata_io-0.7.1/pyproject.toml +0 -205
  90. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/LICENSE +0 -0
  91. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/benchmarks/__init__.py +0 -0
  92. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/benchmarks/benchmark_image.py +0 -0
  93. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/benchmarks/benchmark_imports.py +0 -0
  94. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/Makefile +0 -0
  95. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/_static/.gitkeep +0 -0
  96. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/_templates/.gitkeep +0 -0
  97. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/make.bat +0 -0
  98. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/docs/references.md +0 -0
  99. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/__main__.py +0 -0
  100. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/_constants/__init__.py +0 -0
  101. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/_constants/_enum.py +0 -0
  102. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/_docs.py +0 -0
  103. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/_utils.py +0 -0
  104. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/converters/__init__.py +0 -0
  105. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/converters/generic_to_zarr.py +0 -0
  106. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/experimental/__init__.py +0 -0
  107. /spatialdata_io-0.7.1/docs/extensions/.gitkeep → /spatialdata_io-0.7.2/src/spatialdata_io/py.typed +0 -0
  108. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/__init__.py +0 -0
  109. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/_utils/__init__.py +0 -0
  110. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/src/spatialdata_io/readers/iss.py +0 -0
  111. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/__init__.py +0 -0
  112. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/conftest.py +0 -0
  113. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/converters/__init__.py +0 -0
  114. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/converters/test_legacy_anndata.py +0 -0
  115. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/readers/test_utils_image.py +0 -0
  116. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/test_init.py +0 -0
  117. {spatialdata_io-0.7.1 → spatialdata_io-0.7.2}/tests/test_visium_hd.py +0 -0
@@ -0,0 +1,17 @@
1
+ # Based on pydata/xarray
2
+ codecov:
3
+ require_ci_to_pass: no
4
+
5
+ coverage:
6
+ status:
7
+ project:
8
+ default:
9
+ # Require 1% coverage, i.e., always succeed
10
+ target: 1
11
+ patch: false
12
+ changes: false
13
+
14
+ comment:
15
+ layout: diff, flags, files
16
+ behavior: once
17
+ require_base: no
@@ -0,0 +1,44 @@
1
+ {
2
+ "template": "https://github.com/scverse/cookiecutter-scverse",
3
+ "commit": "707f3faab836f9272912f92188b63b31da70c064",
4
+ "checkout": null,
5
+ "context": {
6
+ "cookiecutter": {
7
+ "project_name": "spatialdata-io",
8
+ "package_name": "spatialdata_io",
9
+ "project_description": "SpatialData IO for common techs",
10
+ "author_full_name": "scverse",
11
+ "author_email": "scverse@scverse.scverse",
12
+ "github_user": "scverse",
13
+ "github_repo": "spatialdata-io",
14
+ "license": "BSD 3-Clause License",
15
+ "ide_integration": false,
16
+ "issue_categorization": "labels",
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": "707f3faab836f9272912f92188b63b31da70c064"
41
+ }
42
+ },
43
+ "directory": null
44
+ }
@@ -8,5 +8,8 @@ charset = utf-8
8
8
  trim_trailing_whitespace = true
9
9
  insert_final_newline = true
10
10
 
11
+ [{*.{yml,yaml,toml},.cruft.json}]
12
+ indent_size = 2
13
+
11
14
  [Makefile]
12
15
  indent_style = tab
@@ -0,0 +1,93 @@
1
+ name: Bug report
2
+ description: Report something that is broken or incorrect
3
+ labels: 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
+ - type: textarea
15
+ id: report
16
+ attributes:
17
+ label: Report
18
+ description: A clear and concise description of what the bug is.
19
+ validations:
20
+ required: true
21
+
22
+ - type: textarea
23
+ id: versions
24
+ attributes:
25
+ label: Versions
26
+ description: |
27
+ Which version of packages.
28
+
29
+ Please install `session-info2`, run the following command in a notebook,
30
+ click the “Copy as Markdown” button, then paste the results into the text box below.
31
+
32
+ ```python
33
+ In[1]: import session_info2; session_info2.session_info(dependencies=True)
34
+ ```
35
+
36
+ Alternatively, run this in a console:
37
+
38
+ ```python
39
+ >>> import session_info2; print(session_info2.session_info(dependencies=True)._repr_mimebundle_()["text/markdown"])
40
+ ```
41
+ render: python
42
+ placeholder: |
43
+ anndata 0.11.3
44
+ ---- ----
45
+ charset-normalizer 3.4.1
46
+ coverage 7.7.0
47
+ psutil 7.0.0
48
+ dask 2024.7.1
49
+ jaraco.context 5.3.0
50
+ numcodecs 0.15.1
51
+ jaraco.functools 4.0.1
52
+ Jinja2 3.1.6
53
+ sphinxcontrib-jsmath 1.0.1
54
+ sphinxcontrib-htmlhelp 2.1.0
55
+ toolz 1.0.0
56
+ session-info2 0.1.2
57
+ PyYAML 6.0.2
58
+ llvmlite 0.44.0
59
+ scipy 1.15.2
60
+ pandas 2.2.3
61
+ sphinxcontrib-devhelp 2.0.0
62
+ h5py 3.13.0
63
+ tblib 3.0.0
64
+ setuptools-scm 8.2.0
65
+ more-itertools 10.3.0
66
+ msgpack 1.1.0
67
+ sparse 0.15.5
68
+ wrapt 1.17.2
69
+ jaraco.collections 5.1.0
70
+ numba 0.61.0
71
+ pyarrow 19.0.1
72
+ pytz 2025.1
73
+ MarkupSafe 3.0.2
74
+ crc32c 2.7.1
75
+ sphinxcontrib-qthelp 2.0.0
76
+ sphinxcontrib-serializinghtml 2.0.0
77
+ zarr 2.18.4
78
+ asciitree 0.3.3
79
+ six 1.17.0
80
+ sphinxcontrib-applehelp 2.0.0
81
+ numpy 2.1.3
82
+ cloudpickle 3.1.1
83
+ sphinxcontrib-bibtex 2.6.3
84
+ natsort 8.4.0
85
+ jaraco.text 3.12.1
86
+ setuptools 76.1.0
87
+ Deprecated 1.2.18
88
+ packaging 24.2
89
+ python-dateutil 2.9.0.post0
90
+ ---- ----
91
+ Python 3.13.2 | packaged by conda-forge | (main, Feb 17 2025, 14:10:22) [GCC 13.3.0]
92
+ OS Linux-6.11.0-109019-tuxedo-x86_64-with-glibc2.39
93
+ 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-io
3
+ labels: 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,29 @@
1
+ changelog:
2
+ exclude:
3
+ labels:
4
+ - release-ignore
5
+ authors:
6
+ - pre-commit-ci
7
+ - pre-commit-ci[bot]
8
+ categories:
9
+ - title: Added
10
+ labels:
11
+ - "release-added"
12
+ - title: Changed
13
+ labels:
14
+ - "release-changed"
15
+ - title: Deprecated
16
+ labels:
17
+ - "release-deprecated"
18
+ - title: Removed
19
+ labels:
20
+ - "release-removed"
21
+ - title: Fixed
22
+ labels:
23
+ - "release-fixed"
24
+ - title: Security
25
+ labels:
26
+ - "release-security"
27
+ - title: Other Changes
28
+ labels:
29
+ - "*"
@@ -0,0 +1,31 @@
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
+ - name: Run pre-commit hooks
29
+ run: uvx prek run --all-files --show-diff-on-failure --color=always
30
+ - uses: autofix-ci/action@c5b2d67aa2274e7b5a18224e8171550871fc7e4a # v1.3.4
31
+ if: ${{ !cancelled() }}
@@ -0,0 +1,30 @@
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@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
27
+ - name: Build package
28
+ run: uv build
29
+ - name: Check package
30
+ run: uvx twine check --strict dist/*.whl
@@ -0,0 +1,107 @@
1
+ name: Prepare test data
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 0 1 * *" # run once a month to prevent artifact expiration
6
+ workflow_dispatch:
7
+ # Uncomment and adjust the branch name if you need to add new datasets to the artifact.
8
+ # It needs to be a branch in the spatialdata-io origin repository, not from a fork.
9
+ # push:
10
+ # branches:
11
+ # - main
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ prepare-data:
18
+ runs-on: ubuntu-latest
19
+
20
+ steps:
21
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
22
+ with:
23
+ filter: blob:none
24
+ persist-credentials: false
25
+
26
+ - name: Download test datasets
27
+ run: |
28
+ mkdir -p ./data
29
+ cd ./data
30
+
31
+ # -------
32
+ # the Xenium datasets are licensed as CC BY 4.0, as shown here
33
+ # https://www.10xgenomics.com/support/software/xenium-onboard-analysis/latest/resources/xenium-example-data
34
+
35
+ # 10x Genomics Xenium 2.0.0
36
+ curl -O https://cf.10xgenomics.com/samples/xenium/2.0.0/Xenium_V1_human_Breast_2fov/Xenium_V1_human_Breast_2fov_outs.zip
37
+ curl -O https://cf.10xgenomics.com/samples/xenium/2.0.0/Xenium_V1_human_Lung_2fov/Xenium_V1_human_Lung_2fov_outs.zip
38
+
39
+ # 10x Genomics Xenium 3.0.0 (5K) Mouse ileum, multimodal cell segmentation
40
+ # this file seems to be corrupted; skipping it for now
41
+ # curl -O https://cf.10xgenomics.com/samples/xenium/3.0.0/Xenium_Prime_MultiCellSeg_Mouse_Ileum_tiny/Xenium_Prime_MultiCellSeg_Mouse_Ileum_tiny.zip
42
+
43
+ # 10x Genomics Xenium 3.0.0 (5K) Mouse ileum, nuclear expansion
44
+ curl -O https://cf.10xgenomics.com/samples/xenium/3.0.0/Xenium_Prime_Mouse_Ileum_tiny/Xenium_Prime_Mouse_Ileum_tiny_outs.zip
45
+
46
+ # 10x Genomics Xenium 4.0.0 (v1) Human ovary, nuclear expansion
47
+ curl -O https://cf.10xgenomics.com/samples/xenium/4.0.0/Xenium_V1_Human_Ovary_tiny/Xenium_V1_Human_Ovary_tiny_outs.zip
48
+
49
+ # 10x Genomics Xenium 4.0.0 (v1) Human ovary, multimodal cell segmentation
50
+ curl -O https://cf.10xgenomics.com/samples/xenium/4.0.0/Xenium_V1_MultiCellSeg_Human_Ovary_tiny/Xenium_V1_MultiCellSeg_Human_Ovary_tiny_outs.zip
51
+
52
+ # 10x Genomics Xenium 4.0.0 (v1+Protein) Human kidney, multimodal cell segmentation
53
+ curl -O https://cf.10xgenomics.com/samples/xenium/4.0.0/Xenium_V1_Protein_Human_Kidney_tiny/Xenium_V1_Protein_Human_Kidney_tiny_outs.zip
54
+
55
+ # -------
56
+ # the Visium dataset is licensed as CC BY 4.0, as shown here
57
+ # https://www.10xgenomics.com/datasets/gene-and-protein-expression-library-of-human-breast-cancer-cytassist-ffpe-2-standard
58
+
59
+ # 10x Genomics Visium CytAssist Gene and Protein Expression Library of Human Breast Cancer, IF, 6.5mm (FFPE)
60
+ mkdir -p CytAssist_FFPE_Protein_Expression_Human_Breast_Cancer
61
+ cd CytAssist_FFPE_Protein_Expression_Human_Breast_Cancer
62
+ # The full-resolution tissue image is deliberately not downloaded (~2 GB): `fullres_image_file`
63
+ # is optional and the reader path it exercises is shared with the other readers.
64
+ curl -O https://cf.10xgenomics.com/samples/spatial-exp/2.1.0/CytAssist_FFPE_Protein_Expression_Human_Breast_Cancer/CytAssist_FFPE_Protein_Expression_Human_Breast_Cancer_filtered_feature_bc_matrix.h5
65
+ curl -O https://cf.10xgenomics.com/samples/spatial-exp/2.1.0/CytAssist_FFPE_Protein_Expression_Human_Breast_Cancer/CytAssist_FFPE_Protein_Expression_Human_Breast_Cancer_spatial.tar.gz
66
+ cd ..
67
+
68
+ # -------
69
+ # the Visium HD dataset is licensed as CC BY 4.0, as shown here
70
+ # https://www.10xgenomics.com/support/software/space-ranger/latest/resources/visium-hd-example-data
71
+
72
+ # 10x Genomics Visium HD 4.0.1 3' Mouse Brain Chunk
73
+ curl -O https://cf.10xgenomics.com/samples/spatial-exp/4.0.1/Visium_HD_Tiny_3prime_Dataset/Visium_HD_Tiny_3prime_Dataset_outs.zip
74
+
75
+ # -------
76
+ # we received written permission to make the following dataset public and integrate it in the CI system of spatialdata-io
77
+ # Spatial Genomics seqFISH v2
78
+ curl -O https://s3.embl.de/spatialdata/raw_data/seqfish-2-test-dataset.zip
79
+
80
+ # -------
81
+ # MACSima OMAP datasets are licensed as CC BY 4.0
82
+ # OMAP23 for format v1.x.x
83
+ curl -o OMAP23_small.zip "https://zenodo.org/api/records/18196452/files-archive"
84
+
85
+ # OMAP10 for format v0.x.x
86
+ curl -o OMAP10_small.zip "https://zenodo.org/api/records/18196366/files-archive"
87
+
88
+ - name: Unzip files
89
+ run: |
90
+ cd ./data
91
+ for file in *.zip; do
92
+ dir="${file%.zip}"
93
+ mkdir -p "$dir"
94
+ unzip "$file" -d "$dir"
95
+ rm "$file"
96
+ done
97
+ # the Visium archive contains a single `spatial/` directory, extracted next to the `.h5`
98
+ for file in */*.tar.gz; do
99
+ tar -xzf "$file" -C "$(dirname "$file")"
100
+ rm "$file"
101
+ done
102
+
103
+ - name: Upload artifacts
104
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
105
+ with:
106
+ name: data
107
+ path: ./data
@@ -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_io
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@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
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@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
@@ -0,0 +1,114 @@
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
+ # Get the test environment from hatch as defined in pyproject.toml.
20
+ # This ensures that the pyproject.toml is the single point of truth for test definitions and the same tests are
21
+ # run locally and on continuous integration.
22
+ # Check [[tool.hatch.envs.hatch-test.matrix]] in pyproject.toml and https://hatch.pypa.io/latest/environment/ for
23
+ # more details.
24
+ get-environments:
25
+ runs-on: ubuntu-slim
26
+ outputs:
27
+ envs: ${{ steps.get-envs.outputs.envs }}
28
+ steps:
29
+ - &clone
30
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
31
+ with:
32
+ filter: blob:none
33
+ fetch-depth: 0
34
+ persist-credentials: false
35
+ - &setup-uv
36
+ uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
37
+ - name: Get test environments
38
+ id: get-envs
39
+ run: |
40
+ ENVS_JSON=$(uvx hatch env show --json | jq -c 'to_entries
41
+ | map(
42
+ select(.key | startswith("hatch-test"))
43
+ | {
44
+ name: .key,
45
+ label: (if (.key | contains("pre")) then .key + " (PRE-RELEASE DEPENDENCIES)" else .key end),
46
+ python: .value.python
47
+ }
48
+ )')
49
+ echo "envs=${ENVS_JSON}" | tee $GITHUB_OUTPUT
50
+
51
+ # Run tests through hatch. Spawns a separate runner for each environment defined in the hatch matrix obtained above.
52
+ test:
53
+ needs: get-environments
54
+ permissions:
55
+ id-token: write # for codecov OIDC
56
+ contents: read
57
+ actions: read # to download the test data artifact
58
+
59
+ strategy:
60
+ fail-fast: false
61
+ matrix:
62
+ os: [ubuntu-latest]
63
+ env: ${{ fromJSON(needs.get-environments.outputs.envs) }}
64
+
65
+ name: ${{ matrix.env.label }}
66
+ runs-on: ${{ matrix.os }}
67
+ continue-on-error: ${{ contains(matrix.env.name, 'pre') }} # make "all-green" pass even if pre-release job fails
68
+ env:
69
+ UV_PYTHON: ${{ matrix.env.python }}
70
+
71
+ steps:
72
+ - *clone
73
+ - *setup-uv
74
+ - name: Download artifact of test data
75
+ uses: dawidd6/action-download-artifact@d63b86af1b34672e53c440b1b83979861906bad7 # v24
76
+ with:
77
+ workflow: prepare_test_data.yaml
78
+ name: data
79
+ path: ./data
80
+ - name: create hatch environment
81
+ run: uvx hatch env create ${{ matrix.env.name }}
82
+ - name: list all all installed package versions
83
+ run: uvx hatch run ${{ matrix.env.name }}:uv pip list
84
+ - name: run tests using hatch
85
+ env:
86
+ MPLBACKEND: agg
87
+ PLATFORM: ${{ matrix.os }}
88
+ DISPLAY: :42
89
+ run: uvx hatch run ${{ matrix.env.name }}:run-cov -v --color=yes -n auto
90
+ - name: generate coverage report
91
+ run: |
92
+ # See https://coverage.readthedocs.io/page/config.html#run-patch
93
+ test -f .coverage || uvx hatch run ${{ matrix.env.name }}:cov-combine
94
+ uvx hatch run ${{ matrix.env.name }}:cov-report # report visibly
95
+ uvx hatch run ${{ matrix.env.name }}:coverage xml # create report for upload
96
+ - name: Upload coverage
97
+ uses: codecov/codecov-action@0b35c9ecc4f0529d0eb674914510c22f85b196b4 # v7.1.0
98
+ with:
99
+ fail_ci_if_error: true
100
+ use_oidc: true
101
+
102
+ # Check that all tests defined above pass. This makes it easy to set a single "required" test in branch
103
+ # protection instead of having to update it frequently. See https://github.com/re-actors/alls-green#why.
104
+ check:
105
+ name: Tests pass in all hatch environments
106
+ if: always()
107
+ needs:
108
+ - get-environments
109
+ - test
110
+ runs-on: ubuntu-latest
111
+ steps:
112
+ - uses: re-actors/alls-green@b5b5b37504aa4183270bd3d855c52a67f212be35 # v1.3.0
113
+ with:
114
+ jobs: ${{ toJSON(needs) }}
@@ -1,51 +1,36 @@
1
1
  # Temp files
2
2
  .DS_Store
3
3
  *~
4
- *.tmp
5
- temp/
4
+ buck-out/
5
+
6
+ # IDEs
7
+ /.idea/
8
+ /.vscode/
9
+ /.spyproject/
10
+ *.code-workspace
6
11
 
7
12
  # Compiled files
13
+ .venv/
8
14
  __pycache__/
15
+ .*cache/
9
16
  .ipynb_checkpoints/
10
17
 
11
18
  # Distribution / packaging
12
- /build/
13
19
  /dist/
14
- /*.egg-info/
20
+ _version.py
21
+ uv.lock
15
22
 
16
23
  # Tests and coverage
17
- /.pytest_cache/
18
- /.cache/
19
24
  /data/
25
+ /node_modules/
26
+ /.coverage*
27
+ /tests/data/
20
28
 
21
29
  # docs
22
30
  /docs/generated/
23
31
  /docs/_build/
24
32
 
25
- # IDEs
26
- /.idea/
27
- /.vscode/
28
- /.spyproject/
29
-
30
- # docs
31
- /docs/generated/
32
- /docs/_build/
33
-
34
- # other
35
- _version.py
36
- node_modules/
37
- .code-workspace
38
- .asv/
39
- uv.lock
40
-
41
- # memray report
33
+ # benchmarks
34
+ /.asv/
42
35
  *.bin
43
-
44
- # speedscope report
45
36
  profile.speedscope.json
46
-
47
- # test datasets (e.g. Xenium ones)
48
- # data folder
49
- data/
50
- tests/data
51
- .venv
@@ -0,0 +1,14 @@
1
+ #:schema https://panache.bz/panache.schema.json
2
+ flavor = "myst"
3
+
4
+ [format]
5
+ wrap = "preserve"
6
+ smart-punctuation = "unicode"
7
+ tab-stops = "preserve"
8
+
9
+ # MyST syntax extensions from `scverse_doc.config.MYST_ENABLE_EXTENSIONS`
10
+ [extensions]
11
+ myst-colon-fence = true # colon_fence
12
+ definition-lists = true # deflist
13
+ tex-math-dollars = true # dollarmath, amsmath
14
+ raw-html = true # html_image, html_admonition