slide2vec 5.4.0__tar.gz → 5.6.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.
- {slide2vec-5.4.0 → slide2vec-5.6.0}/PKG-INFO +3 -3
- {slide2vec-5.4.0 → slide2vec-5.6.0}/pyproject.toml +6 -5
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/__init__.py +9 -1
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/api.py +415 -48
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/artifacts.py +233 -43
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/configs/default.yaml +3 -3
- slide2vec-5.6.0/slide2vec/data/dataset.py +157 -0
- slide2vec-5.6.0/slide2vec/distributed/dense_image_worker.py +86 -0
- slide2vec-5.6.0/slide2vec/distributed/dense_worker.py +80 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/distributed/direct_embed_worker.py +1 -3
- slide2vec-5.6.0/slide2vec/distributed/image_worker.py +73 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/distributed/pipeline_worker.py +1 -3
- slide2vec-5.6.0/slide2vec/distributed/worker_entry.py +87 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/__init__.py +2 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/gigapath.py +7 -1
- slide2vec-5.6.0/slide2vec/encoders/models/isight.py +305 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/prost40m.py +1 -1
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/registry.py +30 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/validation.py +8 -1
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/inference.py +71 -56
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/artifacts_collect.py +13 -16
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/batching.py +109 -213
- slide2vec-5.6.0/slide2vec/runtime/dense_encoder_input.py +119 -0
- slide2vec-5.6.0/slide2vec/runtime/dense_image_reading.py +260 -0
- slide2vec-5.6.0/slide2vec/runtime/dense_image_recipe.py +290 -0
- slide2vec-5.6.0/slide2vec/runtime/dense_image_shard.py +341 -0
- slide2vec-5.6.0/slide2vec/runtime/dense_image_stage.py +303 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/dense_regions.py +201 -48
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/dense_shard.py +12 -28
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/dense_stage.py +8 -1
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/distributed.py +4 -12
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/distributed_stage.py +3 -1
- slide2vec-5.6.0/slide2vec/runtime/effective_encoder_input.py +124 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/embedding.py +6 -4
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/embedding_pipeline.py +16 -20
- slide2vec-5.6.0/slide2vec/runtime/encoder_input_contract.py +122 -0
- slide2vec-5.6.0/slide2vec/runtime/image_shard.py +223 -0
- slide2vec-5.6.0/slide2vec/runtime/image_specs.py +218 -0
- slide2vec-5.6.0/slide2vec/runtime/image_stage.py +156 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/patient_pipeline.py +2 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/persist_callbacks.py +2 -4
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/persistence.py +51 -47
- slide2vec-5.6.0/slide2vec/runtime/pooled_encoder_input.py +85 -0
- slide2vec-5.6.0/slide2vec/runtime/preprocessing.py +196 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/serialization.py +70 -2
- slide2vec-5.6.0/slide2vec/runtime/sharding.py +34 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/slide_encode.py +5 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/config.py +47 -27
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/tiling_io.py +40 -10
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/PKG-INFO +3 -3
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/SOURCES.txt +29 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/requires.txt +2 -2
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_architecture_runtime_split.py +1 -0
- slide2vec-5.6.0/tests/test_dense_encoder_input.py +317 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_extraction.py +1 -1
- slide2vec-5.6.0/tests/test_dense_image_reading.py +408 -0
- slide2vec-5.6.0/tests/test_dense_image_resume.py +431 -0
- slide2vec-5.6.0/tests/test_dense_image_shard.py +870 -0
- slide2vec-5.6.0/tests/test_dense_image_stage.py +1052 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_shard.py +46 -74
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_stage.py +23 -4
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_worker.py +14 -2
- slide2vec-5.6.0/tests/test_encoder_input_contract.py +350 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_encoder_registry.py +1 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_hs2p_package_cutover.py +78 -0
- slide2vec-5.6.0/tests/test_image_shard.py +313 -0
- slide2vec-5.6.0/tests/test_image_stage.py +355 -0
- slide2vec-5.6.0/tests/test_isight.py +239 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_patch_size_metadata.py +33 -6
- slide2vec-5.6.0/tests/test_patient_manifest.py +108 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_pooled_encoder_input.py +44 -39
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_progress.py +6 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_regression_core.py +454 -12
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_regression_inference.py +343 -37
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_regression_models.py +64 -2
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_runtime_batching.py +21 -1
- slide2vec-5.6.0/tests/test_sharding.py +58 -0
- slide2vec-5.6.0/tests/test_slide_coordinate_preparation.py +263 -0
- slide2vec-5.6.0/tests/test_soma_migration.py +557 -0
- slide2vec-5.4.0/slide2vec/data/dataset.py +0 -47
- slide2vec-5.4.0/slide2vec/distributed/dense_worker.py +0 -98
- slide2vec-5.4.0/slide2vec/runtime/pooled_encoder_input.py +0 -102
- {slide2vec-5.4.0 → slide2vec-5.6.0}/LICENSE +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/README.md +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/setup.cfg +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/__main__.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/cli.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/configs/__init__.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/configs/resources.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/data/__init__.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/data/tile_reader.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/data/tile_store.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/distributed/__init__.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/__init__.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/base.py +10 -10
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/conch.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/dinov2.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/genbio.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/gpfm.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/hibou.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/hoptimus.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/lunit.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/midnight.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/__init__.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/blocks.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/case.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/loading.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/slide.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/types.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/mstar.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/musk.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/phikon.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/prism.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/titan.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/uni.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/virchow.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/progress.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/__init__.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/cpu_budget.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/dense_sliding.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/embedding_persist.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/hierarchical.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/manifest.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/model_settings.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/process_list.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/progress_bridge.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/registry.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/tiling.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/tiling_pipeline.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/types.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/worker_io.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/__init__.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/coordinates.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/log_utils.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/utils.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/dependency_links.txt +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/entry_points.txt +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/not-zip-safe +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/top_level.txt +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_attention_extraction.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_regions.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_sliding.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dinov2_natimage.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_gpfm_genbio_heavy.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_output_consistency.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_pooled_geometry.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_tile_store.py +0 -0
- {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_tiling_pipeline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: slide2vec
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.6.0
|
|
4
4
|
Summary: Embedding of whole slide images with Foundation Models
|
|
5
5
|
Author-email: Clément Grisi <clement.grisi@radboudumc.nl>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -15,7 +15,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
15
15
|
Requires-Python: >=3.10
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
|
-
Requires-Dist: hs2p[asap,cucim,openslide,sam2,vips]>=4.
|
|
18
|
+
Requires-Dist: hs2p[asap,cucim,openslide,sam2,vips]>=4.4.0
|
|
19
19
|
Requires-Dist: omegaconf
|
|
20
20
|
Requires-Dist: matplotlib
|
|
21
21
|
Requires-Dist: numpy<2
|
|
@@ -65,7 +65,7 @@ Requires-Dist: numpy<2; extra == "fm"
|
|
|
65
65
|
Requires-Dist: pandas; extra == "fm"
|
|
66
66
|
Requires-Dist: pillow; extra == "fm"
|
|
67
67
|
Requires-Dist: rich; extra == "fm"
|
|
68
|
-
Requires-Dist: hs2p[asap,cucim,openslide,sam2,vips]>=4.
|
|
68
|
+
Requires-Dist: hs2p[asap,cucim,openslide,sam2,vips]>=4.4.0; extra == "fm"
|
|
69
69
|
Requires-Dist: wandb; extra == "fm"
|
|
70
70
|
Requires-Dist: torch<2.8,>=2.3; extra == "fm"
|
|
71
71
|
Requires-Dist: torchvision>=0.18.0; extra == "fm"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "slide2vec"
|
|
7
|
-
version = "5.
|
|
7
|
+
version = "5.6.0"
|
|
8
8
|
description = "Embedding of whole slide images with Foundation Models"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -21,7 +21,7 @@ classifiers = [
|
|
|
21
21
|
"Programming Language :: Python :: 3.13",
|
|
22
22
|
]
|
|
23
23
|
dependencies = [
|
|
24
|
-
"hs2p[asap,cucim,openslide,sam2,vips]>=4.
|
|
24
|
+
"hs2p[asap,cucim,openslide,sam2,vips]>=4.4.0",
|
|
25
25
|
"omegaconf",
|
|
26
26
|
"matplotlib",
|
|
27
27
|
"numpy<2",
|
|
@@ -88,7 +88,7 @@ fm = [
|
|
|
88
88
|
"pandas",
|
|
89
89
|
"pillow",
|
|
90
90
|
"rich",
|
|
91
|
-
"hs2p[asap,cucim,openslide,sam2,vips]>=4.
|
|
91
|
+
"hs2p[asap,cucim,openslide,sam2,vips]>=4.4.0",
|
|
92
92
|
"wandb",
|
|
93
93
|
"torch>=2.3,<2.8",
|
|
94
94
|
"torchvision>=0.18.0",
|
|
@@ -141,12 +141,13 @@ slide2vec = ["py.typed"]
|
|
|
141
141
|
"slide2vec.configs" = ["*.yaml", "models/*.yaml", "preprocessing/*.yaml"]
|
|
142
142
|
|
|
143
143
|
[tool.pytest.ini_options]
|
|
144
|
-
addopts = "--cov=slide2vec"
|
|
144
|
+
addopts = "--cov=slide2vec -m 'not gpu_integration'"
|
|
145
145
|
testpaths = [
|
|
146
146
|
"tests",
|
|
147
147
|
]
|
|
148
148
|
markers = [
|
|
149
149
|
"heavy: real-weight foundation-model inference on CPU; minutes per test. Excluded from the PR suite via `-m 'not heavy'`; run on the scheduled/manual heavy workflow (.github/workflows/nightly-heavy.yaml).",
|
|
150
|
+
"gpu_integration: real one-GPU versus multi-GPU parity; requires at least two visible CUDA devices. Run explicitly with `CUDA_VISIBLE_DEVICES=0,1 python -m pytest -m gpu_integration --no-cov`.",
|
|
150
151
|
]
|
|
151
152
|
|
|
152
153
|
[tool.mypy]
|
|
@@ -167,7 +168,7 @@ no_implicit_reexport = true
|
|
|
167
168
|
max-line-length = 160
|
|
168
169
|
|
|
169
170
|
[tool.bumpver]
|
|
170
|
-
current_version = "5.
|
|
171
|
+
current_version = "5.6.0"
|
|
171
172
|
version_pattern = "MAJOR.MINOR.PATCH"
|
|
172
173
|
commit = false # We do version bumping in CI, not as a commit
|
|
173
174
|
tag = false # Git tag already exists — we don't auto-tag
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
from slide2vec.api import (
|
|
2
|
+
DenseImageOptions,
|
|
2
3
|
DenseOptions,
|
|
3
4
|
EmbeddedPatient,
|
|
4
5
|
EmbeddedSlide,
|
|
5
6
|
ExecutionOptions,
|
|
7
|
+
ImageSpec,
|
|
6
8
|
Model,
|
|
7
9
|
Pipeline,
|
|
8
10
|
PreprocessingConfig,
|
|
@@ -11,14 +13,16 @@ from slide2vec.api import (
|
|
|
11
13
|
list_models,
|
|
12
14
|
)
|
|
13
15
|
from slide2vec.artifacts import (
|
|
16
|
+
DenseImageArtifact,
|
|
14
17
|
DenseRegionArtifact,
|
|
15
18
|
HierarchicalEmbeddingArtifact,
|
|
19
|
+
ImageEmbeddingArtifact,
|
|
16
20
|
SlideEmbeddingArtifact,
|
|
17
21
|
TileEmbeddingArtifact,
|
|
18
22
|
)
|
|
19
23
|
|
|
20
24
|
|
|
21
|
-
__version__ = "5.
|
|
25
|
+
__version__ = "5.6.0"
|
|
22
26
|
|
|
23
27
|
__all__ = [
|
|
24
28
|
"Model",
|
|
@@ -26,7 +30,9 @@ __all__ = [
|
|
|
26
30
|
"Pipeline",
|
|
27
31
|
"PreprocessingConfig",
|
|
28
32
|
"DenseOptions",
|
|
33
|
+
"DenseImageOptions",
|
|
29
34
|
"SlideRegions",
|
|
35
|
+
"ImageSpec",
|
|
30
36
|
"ExecutionOptions",
|
|
31
37
|
"RunResult",
|
|
32
38
|
"EmbeddedPatient",
|
|
@@ -35,5 +41,7 @@ __all__ = [
|
|
|
35
41
|
"HierarchicalEmbeddingArtifact",
|
|
36
42
|
"TileEmbeddingArtifact",
|
|
37
43
|
"DenseRegionArtifact",
|
|
44
|
+
"DenseImageArtifact",
|
|
45
|
+
"ImageEmbeddingArtifact",
|
|
38
46
|
"__version__",
|
|
39
47
|
]
|