slide2vec 6.3.0__tar.gz → 6.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.
- {slide2vec-6.3.0 → slide2vec-6.3.1}/PKG-INFO +1 -1
- {slide2vec-6.3.0 → slide2vec-6.3.1}/pyproject.toml +2 -2
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/__init__.py +1 -1
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/data/tile_reader.py +11 -22
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec.egg-info/PKG-INFO +1 -1
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_hs2p5_integration.py +28 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/LICENSE +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/README.md +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/setup.cfg +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/__main__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/_cufile.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/api.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/artifacts.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/cli.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/configs/__init__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/configs/default.yaml +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/configs/resources.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/cufile.json +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/data/__init__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/data/dataset.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/data/tile_store.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/distributed/__init__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/distributed/dense_image_worker.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/distributed/dense_worker.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/distributed/direct_embed_worker.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/distributed/image_worker.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/distributed/pin_gpu.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/distributed/pipeline_worker.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/distributed/worker_entry.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/__init__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/base.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/__init__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/conch.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/dinov2.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/dinov3.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/genbio.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/gigapath.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/gpfm.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/hibou.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/hoptimus.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/isight.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/lunit.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/mettle.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/midnight.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/moozy/__init__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/moozy/blocks.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/moozy/case.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/moozy/loading.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/moozy/slide.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/moozy/types.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/mstar.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/musk.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/phikon.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/prism.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/prism2.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/prost40m.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/rudolfv2.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/titan.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/uni.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/virchow.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/models/waiv.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/registry.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/encoders/validation.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/inference.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/progress.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/__init__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/artifacts_collect.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/batching.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/cpu_budget.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_encode.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_encoder_input.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_image_reading.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_image_recipe.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_image_shard.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_image_stage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_regions.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_shard.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_sliding.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/dense_stage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/distributed.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/distributed_stage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/effective_encoder_input.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/embedding.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/embedding_persist.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/embedding_pipeline.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/encoder_input_contract.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/feature_identity.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/hierarchical.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/image_shard.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/image_specs.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/image_stage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/manifest.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/model_settings.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/patient_pipeline.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/persist_callbacks.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/persistence.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/pooled_encoder_input.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/preprocessing.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/process_list.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/progress_bridge.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/registry.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/serialization.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/sharding.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/slide_encode.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/tiling.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/tiling_pipeline.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/types.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/runtime/worker_io.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/utils/__init__.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/utils/config.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/utils/coordinates.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/utils/log_utils.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/utils/tiling_io.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec/utils/utils.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec.egg-info/SOURCES.txt +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec.egg-info/dependency_links.txt +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec.egg-info/entry_points.txt +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec.egg-info/not-zip-safe +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec.egg-info/requires.txt +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/slide2vec.egg-info/top_level.txt +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_attention_extraction.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_benchmark_tooling.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_cli_noninteractive.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_cufile_compat_mode.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_encode_kit.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_encoder_input.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_extraction.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_image_reading.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_image_resume.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_image_shard.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_image_stage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_regions.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_shard.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_sliding.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_source_spacing.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_stage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dense_worker.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dinov2_natimage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_dinov3_natimage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_encoder_capabilities.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_encoder_input_contract.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_encoder_plugins.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_encoder_preprocessing.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_encoder_provider_failures.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_encoder_registry.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_feature_identity.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_gigapath.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_gpfm_genbio_heavy.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_hs2p_package_cutover.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_image_shard.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_image_stage.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_inference_benchmark.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_isight.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_load_model_hf_auth.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_mascaret.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_mettle.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_on_slide_persisted.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_output_consistency.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_patch_size_metadata.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_patient_annotation_sampling.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_patient_manifest.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_phaet.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_pooled_encoder_input.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_pooled_geometry.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_prism.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_prism2.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_process_list_performance.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_progress.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_regression_core.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_regression_inference.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_regression_models.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_rudolfv2.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_runtime_batching.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_sharding.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_slide_coordinate_preparation.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_slide_latents.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_soma_migration.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_tile_store.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_tiling_pipeline.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_titan.py +0 -0
- {slide2vec-6.3.0 → slide2vec-6.3.1}/tests/test_worker_gpu_pinning.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "slide2vec"
|
|
7
|
-
version = "6.3.
|
|
7
|
+
version = "6.3.1"
|
|
8
8
|
description = "Embedding of whole slide images with Foundation Models"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -180,7 +180,7 @@ no_implicit_reexport = true
|
|
|
180
180
|
max-line-length = 160
|
|
181
181
|
|
|
182
182
|
[tool.bumpver]
|
|
183
|
-
current_version = "6.3.
|
|
183
|
+
current_version = "6.3.1"
|
|
184
184
|
version_pattern = "MAJOR.MINOR.PATCH"
|
|
185
185
|
commit = false
|
|
186
186
|
tag = false
|
|
@@ -40,31 +40,20 @@ class SuperTileBatchSampler:
|
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
def _open_wsi_backend(image_path: str, backend: str, gpu_decode: bool):
|
|
43
|
-
"""Open a
|
|
44
|
-
if backend == "cucim":
|
|
45
|
-
from hs2p.wsi.backends.cucim import CuCIMReader
|
|
46
|
-
return CuCIMReader(image_path, gpu_decode=gpu_decode)
|
|
47
|
-
elif backend == "openslide":
|
|
48
|
-
from hs2p.wsi.backends.openslide import OpenSlideReader
|
|
49
|
-
return OpenSlideReader(image_path)
|
|
50
|
-
elif backend == "vips":
|
|
51
|
-
from hs2p.wsi.backends.vips import VIPSReader
|
|
52
|
-
return VIPSReader(image_path)
|
|
53
|
-
elif backend == "asap":
|
|
54
|
-
from hs2p.wsi.backends.asap import ASAPReader
|
|
55
|
-
with suppress_c_stderr():
|
|
56
|
-
return ASAPReader(image_path)
|
|
57
|
-
else:
|
|
58
|
-
raise ValueError(
|
|
59
|
-
f"Unknown backend: {backend!r}. "
|
|
60
|
-
"Choose from: cucim, openslide, vips, asap"
|
|
61
|
-
)
|
|
43
|
+
"""Open a slide with the backend tiling resolved for it and return the reader.
|
|
62
44
|
|
|
45
|
+
hs2p's ``open_slide`` knows every backend tiling can resolve, ``pil`` for flat
|
|
46
|
+
PNG/JPEG slides included. Reads address pyramid levels and level-0 pixels only, so a
|
|
47
|
+
slide without spacing metadata opens without it.
|
|
48
|
+
"""
|
|
49
|
+
from hs2p.wsi.reader import open_slide
|
|
63
50
|
|
|
64
|
-
|
|
65
|
-
|
|
51
|
+
with suppress_c_stderr() if backend == "asap" else nullcontext():
|
|
52
|
+
return open_slide(image_path, backend, gpu_decode=gpu_decode, require_spacing=False)
|
|
66
53
|
|
|
67
|
-
|
|
54
|
+
|
|
55
|
+
class WSITileReader:
|
|
56
|
+
"""Random-access tile reader over any slide backend hs2p can open.
|
|
68
57
|
|
|
69
58
|
When ``use_supertiles=True``, tiles are grouped into 8×8/4×4/2×2 blocks so
|
|
70
59
|
that one region read covers multiple tiles. ``num_cucim_workers`` and
|
|
@@ -90,6 +90,34 @@ def test_tile_archive_is_written_when_requested_or_not_reading_on_the_fly(
|
|
|
90
90
|
assert Path(pd.read_csv(process_list).iloc[0]["tiles_tar_path"]) == archive_path
|
|
91
91
|
|
|
92
92
|
|
|
93
|
+
@pytest.mark.parametrize("use_supertiles", [True, False], ids=["supertiles", "single-tiles"])
|
|
94
|
+
def test_flat_slide_tiles_are_read_on_the_fly_with_the_backend_tiling_resolved(
|
|
95
|
+
tmp_path, use_supertiles
|
|
96
|
+
):
|
|
97
|
+
from slide2vec.data.tile_reader import OnTheFlyBatchTileCollator
|
|
98
|
+
|
|
99
|
+
slide = _flat_slide(tmp_path, np.ones((32, 32), dtype=np.uint8))
|
|
100
|
+
pixels = np.random.default_rng(0).integers(0, 256, (128, 128, 3), dtype=np.uint8)
|
|
101
|
+
Image.fromarray(pixels).save(slide.image_path)
|
|
102
|
+
|
|
103
|
+
_, (result,), _ = prepare_tiled_slides(
|
|
104
|
+
[slide], _preprocessing(), output_dir=tmp_path / "out", num_workers=1
|
|
105
|
+
)
|
|
106
|
+
collator = OnTheFlyBatchTileCollator(
|
|
107
|
+
image_path=slide.image_path,
|
|
108
|
+
tiling_result=result,
|
|
109
|
+
backend=result.backend,
|
|
110
|
+
use_supertiles=use_supertiles,
|
|
111
|
+
)
|
|
112
|
+
indices, tiles, _ = collator(list(range(len(result.x))))
|
|
113
|
+
|
|
114
|
+
assert result.backend == "pil"
|
|
115
|
+
assert tiles.shape == (16, 3, 32, 32)
|
|
116
|
+
for index, tile in zip(indices.tolist(), tiles):
|
|
117
|
+
x, y = int(result.x[index]), int(result.y[index])
|
|
118
|
+
np.testing.assert_array_equal(tile.permute(1, 2, 0).numpy(), pixels[y : y + 32, x : x + 32])
|
|
119
|
+
|
|
120
|
+
|
|
93
121
|
@pytest.mark.parametrize("output_mode", ["per_annotation", "merged"])
|
|
94
122
|
def test_spacingless_annotation_mask_groups_values_and_preserves_bag_identity(tmp_path, output_mode):
|
|
95
123
|
labels = np.full((32, 32), 2, dtype=np.uint8)
|
|
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
|
|
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
|
|
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
|