patchworks 1.3.0__tar.gz → 1.3.1__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.
- {patchworks-1.3.0 → patchworks-1.3.1}/PKG-INFO +1 -1
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/guide/ome_zarr_napari.md +10 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/guide/snakemake.md +18 -5
- {patchworks-1.3.0 → patchworks-1.3.1}/pyproject.toml +6 -5
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/plugins/napari.py +2 -2
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/plugins/ome_zarr.py +4 -2
- {patchworks-1.3.0 → patchworks-1.3.1}/.github/workflows/docs.yml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/.github/workflows/lint.yml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/.github/workflows/release.yml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/.gitignore +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/.markdownlint-cli2.yaml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/LICENSE +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/README.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/cliff.toml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/chunks.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/cluster.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/io.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/merge_tile_labels.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/plugins/cellpose.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/plugins/dog.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/plugins/napari.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/plugins/ome_zarr.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/postprocess.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/relabel.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/api/tile_process.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/assets/logo.png +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/cellpose_2d.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/cellpose_2d.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/cellpose_3d.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/cellpose_3d.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/custom.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/custom_method.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/dog.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/dog.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/standalone_merge.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/stardist.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/examples/stardist_2d.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/getting_started.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/guide/gpu_distributed.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/guide/merging.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/guide/performance.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/guide/pitfalls.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/guide/skip_empty.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/guide/tiling.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/docs/index.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/mkdocs.yml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/__init__.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_chunks.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_cluster.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_core.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_distributed.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_io.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_merge.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_postprocess.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_relabel.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/_relations.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/plugins/__init__.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/plugins/cellpose.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/src/patchworks/plugins/dog.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/tests/test_core.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/tests/test_distributed.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/tests/test_dog.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/tests/test_napari.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/tests/test_ome_zarr.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/tests/test_postprocess.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/tests/test_relations.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/README.md +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/Snakefile +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/config/config.yaml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/config/config_cilia.yaml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/config/config_cyto.yaml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/config/config_nuclei.yaml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/config/multi.yaml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/pixi.toml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/profile/slurm/config.yaml +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/rules/common.smk +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/rules/convert.smk +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/rules/merge.smk +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/rules/segment.smk +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/scripts/_pw.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/scripts/convert.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/scripts/fetch_model.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/scripts/merge.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/scripts/prepare_tiles.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/scripts/run_multi.py +0 -0
- {patchworks-1.3.0 → patchworks-1.3.1}/workflow/scripts/segment_tile.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: patchworks
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.1
|
|
4
4
|
Summary: Tiled processing of arbitrarily large images with globally consistent labels
|
|
5
5
|
Project-URL: Homepage, https://github.com/imcf/patchworks
|
|
6
6
|
Project-URL: Issues, https://github.com/imcf/patchworks/issues
|
|
@@ -152,6 +152,16 @@ just one channel instead: `view_in_napari("scan.zarr", channel=0)`.
|
|
|
152
152
|
napari ships in `patchworks[all]`, or install just it with
|
|
153
153
|
`pip install "patchworks[napari]"`.
|
|
154
154
|
|
|
155
|
+
!!! tip "Measuring all the objects"
|
|
156
|
+
Once labels are loaded, use
|
|
157
|
+
[napari-chunked-regionprops](https://github.com/imcf/napari-chunked-regionprops)'s
|
|
158
|
+
"Measure" dock widget for area/centroid/intensity stats — it works
|
|
159
|
+
out-of-core straight off the Labels layer's backing dask/zarr array, so
|
|
160
|
+
it scales to the same huge label images `tile_process` writes, unlike
|
|
161
|
+
plain `skimage.measure.regionprops`. Bundled in `patchworks[napari]`. See
|
|
162
|
+
[Measurements](snakemake.md#measurements-fast-whole-volume-regionprops)
|
|
163
|
+
for the non-interactive/headless equivalent.
|
|
164
|
+
|
|
155
165
|
## End-to-end
|
|
156
166
|
|
|
157
167
|
```python
|
|
@@ -361,10 +361,20 @@ needs `pip install "patchworks[dog]"` in the segment jobs' environment.
|
|
|
361
361
|
## Measurements (fast, whole-volume regionprops)
|
|
362
362
|
|
|
363
363
|
`skimage.measure.regionprops` needs the full labelled + intensity array in
|
|
364
|
-
RAM — fine for one tile, not for a hundred-thousand-object OME-ZARR.
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
364
|
+
RAM — fine for one tile, not for a hundred-thousand-object OME-ZARR.
|
|
365
|
+
|
|
366
|
+
**Interactively, in napari**, this is what
|
|
367
|
+
[napari-chunked-regionprops](https://github.com/imcf/napari-chunked-regionprops)
|
|
368
|
+
is for — its "Measure" dock widget computes area/centroid/intensity stats
|
|
369
|
+
directly off a Labels layer's dask/zarr-backed array, out-of-core, and scales
|
|
370
|
+
with chunk count rather than object count. It's the best fit for measuring
|
|
371
|
+
*every* object in a store this size, not just a cropped region — see
|
|
372
|
+
[View image + labels in napari](ome_zarr_napari.md#view-image--labels-in-napari).
|
|
373
|
+
Bundled in `patchworks[napari]`.
|
|
374
|
+
|
|
375
|
+
**Headless/scripted**, use [`dask-image`](https://image.dask.org)'s
|
|
376
|
+
`ndmeasure`, which computes directly on the dask/zarr-backed arrays,
|
|
377
|
+
chunk-parallel, without materializing the volume:
|
|
368
378
|
|
|
369
379
|
```bash
|
|
370
380
|
pip install dask-image
|
|
@@ -392,7 +402,10 @@ For interactively inspecting individual cells by clicking in the viewer
|
|
|
392
402
|
(not all objects at once), the
|
|
393
403
|
[napari-skimage-regionprops](https://github.com/haesleinhuepf/napari-skimage-regionprops)
|
|
394
404
|
plugin's table widget works well — point it at a cropped region rather than
|
|
395
|
-
the full volume, since it loads its input fully into memory.
|
|
405
|
+
the full volume, since it loads its input fully into memory. For measuring
|
|
406
|
+
*all* objects at once, use
|
|
407
|
+
[napari-chunked-regionprops](https://github.com/imcf/napari-chunked-regionprops)
|
|
408
|
+
instead (see above) — it doesn't have this in-memory limitation.
|
|
396
409
|
|
|
397
410
|
## Custom segmentation function
|
|
398
411
|
|
|
@@ -72,11 +72,12 @@ imaris = ["imaris-ims-file-reader"]
|
|
|
72
72
|
# - lxml-html-clean: napari's notebook_display imports lxml.html.clean, split
|
|
73
73
|
# into a separate package in lxml >= 5.2 (else ImportError on Viewer()).
|
|
74
74
|
# - glasbey: distinct high-contrast label LUTs for view_in_napari.
|
|
75
|
-
# - napari-chunked-regionprops
|
|
76
|
-
# (area/centroid/intensity
|
|
77
|
-
#
|
|
78
|
-
#
|
|
79
|
-
#
|
|
75
|
+
# - napari-chunked-regionprops (https://github.com/imcf/napari-chunked-regionprops):
|
|
76
|
+
# out-of-core regionprops-style measurements (area/centroid/intensity
|
|
77
|
+
# stats) for huge Labels layers, straight off their backing dask/zarr
|
|
78
|
+
# arrays — the "Measure" dock widget. Formerly napari-dask-ndmeasure;
|
|
79
|
+
# renamed when its engine dropped dask_image.ndmeasure for a chunk-local
|
|
80
|
+
# map/merge that scales with chunk count, not object count.
|
|
80
81
|
# - pyqt6 < 6.10: PyQt6-Qt6 6.10.2's Windows wheel fails to import (`DLL load
|
|
81
82
|
# failed while importing QtWidgets: The specified procedure could not be
|
|
82
83
|
# found`) — confirmed unrelated to napari/qtpy, reproduces on a bare
|
|
@@ -187,8 +187,8 @@ def _label_hint(path: Union[str, Path]) -> dict[str, Any]:
|
|
|
187
187
|
during the merge) — the exact id set is then ``range(1, n_objects +
|
|
188
188
|
1)`` by construction, with no scan needed. Passed through as a Labels
|
|
189
189
|
layer's ``metadata`` so a downstream consumer (e.g.
|
|
190
|
-
napari-chunked-regionprops
|
|
191
|
-
set from the array itself.
|
|
190
|
+
napari-chunked-regionprops, https://github.com/imcf/napari-chunked-regionprops)
|
|
191
|
+
can use it instead of re-deriving the id set from the array itself.
|
|
192
192
|
|
|
193
193
|
Parameters
|
|
194
194
|
----------
|
|
@@ -1083,8 +1083,10 @@ def register_labels(
|
|
|
1083
1083
|
``sequential_labels=True``, which means ``ids == range(1, n_objects
|
|
1084
1084
|
+ 1)`` by construction). When given, written into the label group's
|
|
1085
1085
|
attrs as ``n_objects``/``sequential_labels`` so a downstream reader
|
|
1086
|
-
(e.g. napari-chunked-regionprops
|
|
1087
|
-
|
|
1086
|
+
(e.g. napari-chunked-regionprops,
|
|
1087
|
+
https://github.com/imcf/napari-chunked-regionprops) can use the
|
|
1088
|
+
known id set instead of re-deriving it with a full-volume scan of
|
|
1089
|
+
its own.
|
|
1088
1090
|
|
|
1089
1091
|
Returns
|
|
1090
1092
|
-------
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|