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.
Files changed (148) hide show
  1. {slide2vec-5.4.0 → slide2vec-5.6.0}/PKG-INFO +3 -3
  2. {slide2vec-5.4.0 → slide2vec-5.6.0}/pyproject.toml +6 -5
  3. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/__init__.py +9 -1
  4. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/api.py +415 -48
  5. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/artifacts.py +233 -43
  6. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/configs/default.yaml +3 -3
  7. slide2vec-5.6.0/slide2vec/data/dataset.py +157 -0
  8. slide2vec-5.6.0/slide2vec/distributed/dense_image_worker.py +86 -0
  9. slide2vec-5.6.0/slide2vec/distributed/dense_worker.py +80 -0
  10. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/distributed/direct_embed_worker.py +1 -3
  11. slide2vec-5.6.0/slide2vec/distributed/image_worker.py +73 -0
  12. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/distributed/pipeline_worker.py +1 -3
  13. slide2vec-5.6.0/slide2vec/distributed/worker_entry.py +87 -0
  14. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/__init__.py +2 -0
  15. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/gigapath.py +7 -1
  16. slide2vec-5.6.0/slide2vec/encoders/models/isight.py +305 -0
  17. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/prost40m.py +1 -1
  18. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/registry.py +30 -0
  19. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/validation.py +8 -1
  20. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/inference.py +71 -56
  21. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/artifacts_collect.py +13 -16
  22. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/batching.py +109 -213
  23. slide2vec-5.6.0/slide2vec/runtime/dense_encoder_input.py +119 -0
  24. slide2vec-5.6.0/slide2vec/runtime/dense_image_reading.py +260 -0
  25. slide2vec-5.6.0/slide2vec/runtime/dense_image_recipe.py +290 -0
  26. slide2vec-5.6.0/slide2vec/runtime/dense_image_shard.py +341 -0
  27. slide2vec-5.6.0/slide2vec/runtime/dense_image_stage.py +303 -0
  28. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/dense_regions.py +201 -48
  29. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/dense_shard.py +12 -28
  30. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/dense_stage.py +8 -1
  31. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/distributed.py +4 -12
  32. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/distributed_stage.py +3 -1
  33. slide2vec-5.6.0/slide2vec/runtime/effective_encoder_input.py +124 -0
  34. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/embedding.py +6 -4
  35. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/embedding_pipeline.py +16 -20
  36. slide2vec-5.6.0/slide2vec/runtime/encoder_input_contract.py +122 -0
  37. slide2vec-5.6.0/slide2vec/runtime/image_shard.py +223 -0
  38. slide2vec-5.6.0/slide2vec/runtime/image_specs.py +218 -0
  39. slide2vec-5.6.0/slide2vec/runtime/image_stage.py +156 -0
  40. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/patient_pipeline.py +2 -0
  41. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/persist_callbacks.py +2 -4
  42. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/persistence.py +51 -47
  43. slide2vec-5.6.0/slide2vec/runtime/pooled_encoder_input.py +85 -0
  44. slide2vec-5.6.0/slide2vec/runtime/preprocessing.py +196 -0
  45. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/serialization.py +70 -2
  46. slide2vec-5.6.0/slide2vec/runtime/sharding.py +34 -0
  47. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/slide_encode.py +5 -0
  48. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/config.py +47 -27
  49. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/tiling_io.py +40 -10
  50. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/PKG-INFO +3 -3
  51. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/SOURCES.txt +29 -0
  52. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/requires.txt +2 -2
  53. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_architecture_runtime_split.py +1 -0
  54. slide2vec-5.6.0/tests/test_dense_encoder_input.py +317 -0
  55. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_extraction.py +1 -1
  56. slide2vec-5.6.0/tests/test_dense_image_reading.py +408 -0
  57. slide2vec-5.6.0/tests/test_dense_image_resume.py +431 -0
  58. slide2vec-5.6.0/tests/test_dense_image_shard.py +870 -0
  59. slide2vec-5.6.0/tests/test_dense_image_stage.py +1052 -0
  60. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_shard.py +46 -74
  61. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_stage.py +23 -4
  62. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_worker.py +14 -2
  63. slide2vec-5.6.0/tests/test_encoder_input_contract.py +350 -0
  64. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_encoder_registry.py +1 -0
  65. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_hs2p_package_cutover.py +78 -0
  66. slide2vec-5.6.0/tests/test_image_shard.py +313 -0
  67. slide2vec-5.6.0/tests/test_image_stage.py +355 -0
  68. slide2vec-5.6.0/tests/test_isight.py +239 -0
  69. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_patch_size_metadata.py +33 -6
  70. slide2vec-5.6.0/tests/test_patient_manifest.py +108 -0
  71. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_pooled_encoder_input.py +44 -39
  72. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_progress.py +6 -0
  73. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_regression_core.py +454 -12
  74. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_regression_inference.py +343 -37
  75. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_regression_models.py +64 -2
  76. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_runtime_batching.py +21 -1
  77. slide2vec-5.6.0/tests/test_sharding.py +58 -0
  78. slide2vec-5.6.0/tests/test_slide_coordinate_preparation.py +263 -0
  79. slide2vec-5.6.0/tests/test_soma_migration.py +557 -0
  80. slide2vec-5.4.0/slide2vec/data/dataset.py +0 -47
  81. slide2vec-5.4.0/slide2vec/distributed/dense_worker.py +0 -98
  82. slide2vec-5.4.0/slide2vec/runtime/pooled_encoder_input.py +0 -102
  83. {slide2vec-5.4.0 → slide2vec-5.6.0}/LICENSE +0 -0
  84. {slide2vec-5.4.0 → slide2vec-5.6.0}/README.md +0 -0
  85. {slide2vec-5.4.0 → slide2vec-5.6.0}/setup.cfg +0 -0
  86. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/__main__.py +0 -0
  87. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/cli.py +0 -0
  88. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/configs/__init__.py +0 -0
  89. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/configs/resources.py +0 -0
  90. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/data/__init__.py +0 -0
  91. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/data/tile_reader.py +0 -0
  92. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/data/tile_store.py +0 -0
  93. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/distributed/__init__.py +0 -0
  94. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/__init__.py +0 -0
  95. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/base.py +10 -10
  96. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/conch.py +0 -0
  97. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/dinov2.py +0 -0
  98. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/genbio.py +0 -0
  99. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/gpfm.py +0 -0
  100. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/hibou.py +0 -0
  101. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/hoptimus.py +0 -0
  102. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/lunit.py +0 -0
  103. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/midnight.py +0 -0
  104. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/__init__.py +0 -0
  105. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/blocks.py +0 -0
  106. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/case.py +0 -0
  107. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/loading.py +0 -0
  108. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/slide.py +0 -0
  109. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/moozy/types.py +0 -0
  110. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/mstar.py +0 -0
  111. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/musk.py +0 -0
  112. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/phikon.py +0 -0
  113. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/prism.py +0 -0
  114. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/titan.py +0 -0
  115. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/uni.py +0 -0
  116. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/encoders/models/virchow.py +0 -0
  117. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/progress.py +0 -0
  118. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/__init__.py +0 -0
  119. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/cpu_budget.py +0 -0
  120. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/dense_sliding.py +0 -0
  121. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/embedding_persist.py +0 -0
  122. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/hierarchical.py +0 -0
  123. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/manifest.py +0 -0
  124. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/model_settings.py +0 -0
  125. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/process_list.py +0 -0
  126. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/progress_bridge.py +0 -0
  127. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/registry.py +0 -0
  128. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/tiling.py +0 -0
  129. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/tiling_pipeline.py +0 -0
  130. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/types.py +0 -0
  131. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/runtime/worker_io.py +0 -0
  132. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/__init__.py +0 -0
  133. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/coordinates.py +0 -0
  134. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/log_utils.py +0 -0
  135. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec/utils/utils.py +0 -0
  136. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/dependency_links.txt +0 -0
  137. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/entry_points.txt +0 -0
  138. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/not-zip-safe +0 -0
  139. {slide2vec-5.4.0 → slide2vec-5.6.0}/slide2vec.egg-info/top_level.txt +0 -0
  140. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_attention_extraction.py +0 -0
  141. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_regions.py +0 -0
  142. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dense_sliding.py +0 -0
  143. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_dinov2_natimage.py +0 -0
  144. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_gpfm_genbio_heavy.py +0 -0
  145. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_output_consistency.py +0 -0
  146. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_pooled_geometry.py +0 -0
  147. {slide2vec-5.4.0 → slide2vec-5.6.0}/tests/test_tile_store.py +0 -0
  148. {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.4.0
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.3.0
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.3.0; extra == "fm"
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.4.0"
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.3.0",
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.3.0",
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.4.0"
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.4.0"
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
  ]