hybrid-sample-generator 1.0.3__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 (258) hide show
  1. hybrid_sample_generator-1.0.3/.gitattributes +2 -0
  2. hybrid_sample_generator-1.0.3/.github/workflows/release.yml +101 -0
  3. hybrid_sample_generator-1.0.3/.github/workflows/tests.yml +39 -0
  4. hybrid_sample_generator-1.0.3/.gitignore +33 -0
  5. hybrid_sample_generator-1.0.3/LICENSE +674 -0
  6. hybrid_sample_generator-1.0.3/PKG-INFO +605 -0
  7. hybrid_sample_generator-1.0.3/README.md +564 -0
  8. hybrid_sample_generator-1.0.3/examples/__init__.py +1 -0
  9. hybrid_sample_generator-1.0.3/examples/common/__init__.py +1 -0
  10. hybrid_sample_generator-1.0.3/examples/common/image_io.py +97 -0
  11. hybrid_sample_generator-1.0.3/examples/image_2d/__init__.py +1 -0
  12. hybrid_sample_generator-1.0.3/examples/image_2d/image_dataloader.py +243 -0
  13. hybrid_sample_generator-1.0.3/examples/image_2d/main.py +60 -0
  14. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/README.md +127 -0
  15. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/__init__.py +1 -0
  16. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/__main__.py +52 -0
  17. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/configuration.py +69 -0
  18. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/dataloader.py +57 -0
  19. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/discovery.py +152 -0
  20. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/README.md +205 -0
  21. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/__init__.py +1 -0
  22. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/configuration.py +95 -0
  23. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/datasets.py +122 -0
  24. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/draem/__init__.py +1 -0
  25. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/draem/losses.py +27 -0
  26. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/draem/model.py +76 -0
  27. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/draem/synthesis.py +59 -0
  28. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/evaluation.py +93 -0
  29. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/patches.py +68 -0
  30. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/runner.py +84 -0
  31. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/sampling.py +18 -0
  32. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/textures.py +102 -0
  33. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/training.py +75 -0
  34. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/downstream/transforms.py +39 -0
  35. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/export.py +37 -0
  36. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/main.py +16 -0
  37. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/pipeline.py +91 -0
  38. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/presets.py +215 -0
  39. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/records.py +35 -0
  40. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/review.py +23 -0
  41. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/settings.py +24 -0
  42. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/splits.py +87 -0
  43. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/steps.py +33 -0
  44. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/studies.py +85 -0
  45. hybrid_sample_generator-1.0.3/examples/mvtec_ad2/workflow.py +80 -0
  46. hybrid_sample_generator-1.0.3/examples/nifti_3d/__init__.py +1 -0
  47. hybrid_sample_generator-1.0.3/examples/nifti_3d/main.py +59 -0
  48. hybrid_sample_generator-1.0.3/examples/nifti_3d/nifti_dataloader.py +331 -0
  49. hybrid_sample_generator-1.0.3/experiments/README.md +47 -0
  50. hybrid_sample_generator-1.0.3/experiments/__init__.py +1 -0
  51. hybrid_sample_generator-1.0.3/experiments/fusion/__init__.py +1 -0
  52. hybrid_sample_generator-1.0.3/experiments/fusion/learned_residual_alpha/__init__.py +6 -0
  53. hybrid_sample_generator-1.0.3/experiments/fusion/learned_residual_alpha/backend.py +463 -0
  54. hybrid_sample_generator-1.0.3/experiments/fusion/learned_residual_alpha/configuration.py +57 -0
  55. hybrid_sample_generator-1.0.3/experiments/fusion/learned_residual_alpha/model.py +89 -0
  56. hybrid_sample_generator-1.0.3/experiments/fusion/learned_residual_alpha/preprocessing.py +90 -0
  57. hybrid_sample_generator-1.0.3/experiments/fusion/learned_residual_alpha/training.py +81 -0
  58. hybrid_sample_generator-1.0.3/experiments/generation/__init__.py +1 -0
  59. hybrid_sample_generator-1.0.3/experiments/generation/latent_diffusion_lora/__init__.py +5 -0
  60. hybrid_sample_generator-1.0.3/experiments/generation/latent_diffusion_lora/configuration.py +18 -0
  61. hybrid_sample_generator-1.0.3/experiments/generation/latent_diffusion_lora/model_2d.py +561 -0
  62. hybrid_sample_generator-1.0.3/experiments/requirements.txt +10 -0
  63. hybrid_sample_generator-1.0.3/experiments/tests/__init__.py +1 -0
  64. hybrid_sample_generator-1.0.3/experiments/tests/test_latent_diffusion_lora.py +26 -0
  65. hybrid_sample_generator-1.0.3/experiments/tests/test_learned_residual_alpha.py +85 -0
  66. hybrid_sample_generator-1.0.3/high_level.png +0 -0
  67. hybrid_sample_generator-1.0.3/hybrid_sample_generator/__init__.py +17 -0
  68. hybrid_sample_generator-1.0.3/hybrid_sample_generator/_version.py +24 -0
  69. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/__init__.py +5 -0
  70. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/augmentation.py +104 -0
  71. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/evaluation.py +42 -0
  72. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/extraction.py +69 -0
  73. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/generation.py +51 -0
  74. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/matching.py +46 -0
  75. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/root.py +180 -0
  76. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/study.py +27 -0
  77. hybrid_sample_generator-1.0.3/hybrid_sample_generator/configuration/training.py +76 -0
  78. hybrid_sample_generator-1.0.3/hybrid_sample_generator/datasets/__init__.py +1 -0
  79. hybrid_sample_generator-1.0.3/hybrid_sample_generator/datasets/record_datasets.py +330 -0
  80. hybrid_sample_generator-1.0.3/hybrid_sample_generator/datasets/study_datasets.py +36 -0
  81. hybrid_sample_generator-1.0.3/hybrid_sample_generator/domain/__init__.py +5 -0
  82. hybrid_sample_generator-1.0.3/hybrid_sample_generator/domain/input_sample.py +54 -0
  83. hybrid_sample_generator-1.0.3/hybrid_sample_generator/domain/records.py +108 -0
  84. hybrid_sample_generator-1.0.3/hybrid_sample_generator/evaluation/__init__.py +5 -0
  85. hybrid_sample_generator-1.0.3/hybrid_sample_generator/evaluation/metrics.py +137 -0
  86. hybrid_sample_generator-1.0.3/hybrid_sample_generator/evaluation/outliers.py +24 -0
  87. hybrid_sample_generator-1.0.3/hybrid_sample_generator/evaluation/pairs.py +59 -0
  88. hybrid_sample_generator-1.0.3/hybrid_sample_generator/evaluation/reporting.py +61 -0
  89. hybrid_sample_generator-1.0.3/hybrid_sample_generator/evaluation/service.py +155 -0
  90. hybrid_sample_generator-1.0.3/hybrid_sample_generator/extraction/__init__.py +11 -0
  91. hybrid_sample_generator-1.0.3/hybrid_sample_generator/extraction/extraction_2d.py +186 -0
  92. hybrid_sample_generator-1.0.3/hybrid_sample_generator/extraction/extraction_3d.py +195 -0
  93. hybrid_sample_generator-1.0.3/hybrid_sample_generator/extraction/normalization.py +44 -0
  94. hybrid_sample_generator-1.0.3/hybrid_sample_generator/extraction/service.py +145 -0
  95. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/__init__.py +6 -0
  96. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/background.py +142 -0
  97. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/classical/__init__.py +6 -0
  98. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/classical/alpha.py +88 -0
  99. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/classical/backend.py +105 -0
  100. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/classical/configuration.py +58 -0
  101. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/classical/intensity.py +356 -0
  102. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/classical/spatial.py +307 -0
  103. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/config_validation.py +39 -0
  104. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/interfaces.py +37 -0
  105. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/preprocessing.py +59 -0
  106. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/registry.py +53 -0
  107. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/service.py +218 -0
  108. hybrid_sample_generator-1.0.3/hybrid_sample_generator/fusion/settings.py +61 -0
  109. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/__init__.py +1 -0
  110. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/interfaces.py +59 -0
  111. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/model_settings.py +231 -0
  112. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/registry.py +103 -0
  113. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/service.py +260 -0
  114. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/training/__init__.py +6 -0
  115. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/training/augmentation.py +136 -0
  116. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/training/loop.py +179 -0
  117. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/training/metrics.py +105 -0
  118. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/training/optuna.py +126 -0
  119. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/__init__.py +1 -0
  120. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/base.py +269 -0
  121. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/conditional_convnext/__init__.py +6 -0
  122. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/conditional_convnext/configuration.py +91 -0
  123. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/conditional_convnext/model_2d.py +452 -0
  124. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/conditional_convnext/model_3d.py +520 -0
  125. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/conditional_convnext/spade_2d.py +231 -0
  126. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/conditional_convnext/spade_3d.py +227 -0
  127. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/convnext/__init__.py +6 -0
  128. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/convnext/configuration.py +87 -0
  129. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/convnext/layers_2d.py +314 -0
  130. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/convnext/layers_3d.py +300 -0
  131. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/convnext/model_2d.py +438 -0
  132. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/convnext/model_3d.py +438 -0
  133. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/resnet/__init__.py +6 -0
  134. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/resnet/configuration.py +87 -0
  135. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/resnet/layers_2d.py +239 -0
  136. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/resnet/layers_3d.py +260 -0
  137. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/resnet/model_2d.py +516 -0
  138. hybrid_sample_generator-1.0.3/hybrid_sample_generator/generation/vae/resnet/model_3d.py +526 -0
  139. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/__init__.py +12 -0
  140. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/__init__.py +14 -0
  141. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/composition.py +27 -0
  142. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/elastic.py +75 -0
  143. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/encoding.py +39 -0
  144. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/geometry.py +158 -0
  145. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/global_transforms.py +62 -0
  146. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/interpolation.py +84 -0
  147. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/local_transforms.py +126 -0
  148. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/target_generation.py +61 -0
  149. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/masks/transform_generator.py +414 -0
  150. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/resampling.py +92 -0
  151. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/roi.py +114 -0
  152. hybrid_sample_generator-1.0.3/hybrid_sample_generator/imaging/similarity.py +31 -0
  153. hybrid_sample_generator-1.0.3/hybrid_sample_generator/matching/__init__.py +5 -0
  154. hybrid_sample_generator-1.0.3/hybrid_sample_generator/matching/candidate_selection.py +80 -0
  155. hybrid_sample_generator-1.0.3/hybrid_sample_generator/matching/pair_matcher.py +114 -0
  156. hybrid_sample_generator-1.0.3/hybrid_sample_generator/matching/planner.py +315 -0
  157. hybrid_sample_generator-1.0.3/hybrid_sample_generator/matching/template_matching.py +102 -0
  158. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/__init__.py +1 -0
  159. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/artifact_store.py +70 -0
  160. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/identifiers.py +17 -0
  161. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/record_mapping.py +152 -0
  162. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/schema.py +129 -0
  163. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/study_paths.py +97 -0
  164. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/study_reader.py +235 -0
  165. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/study_repository.py +38 -0
  166. hybrid_sample_generator-1.0.3/hybrid_sample_generator/persistence/study_writer.py +190 -0
  167. hybrid_sample_generator-1.0.3/hybrid_sample_generator/pipeline/__init__.py +5 -0
  168. hybrid_sample_generator-1.0.3/hybrid_sample_generator/pipeline/hybrid_data_generator.py +126 -0
  169. hybrid_sample_generator-1.0.3/hybrid_sample_generator/pipeline/ingestion.py +168 -0
  170. hybrid_sample_generator-1.0.3/hybrid_sample_generator/randomness.py +33 -0
  171. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/__init__.py +13 -0
  172. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/__main__.py +25 -0
  173. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/app.py +270 -0
  174. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/maintenance.py +257 -0
  175. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/queries.py +356 -0
  176. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/rendering.py +374 -0
  177. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/state.py +42 -0
  178. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/tabs/__init__.py +1 -0
  179. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/tabs/anomalies.py +200 -0
  180. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/tabs/datasource.py +140 -0
  181. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/tabs/evaluation.py +388 -0
  182. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/tabs/hybrids.py +313 -0
  183. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/tabs/overview.py +136 -0
  184. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/tabs/relations.py +448 -0
  185. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/widgets/__init__.py +7 -0
  186. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/widgets/entity_browser.py +215 -0
  187. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/widgets/image_grid.py +165 -0
  188. hybrid_sample_generator-1.0.3/hybrid_sample_generator/visualization/widgets/tree.py +26 -0
  189. hybrid_sample_generator-1.0.3/hybrid_sample_generator.egg-info/PKG-INFO +605 -0
  190. hybrid_sample_generator-1.0.3/hybrid_sample_generator.egg-info/SOURCES.txt +256 -0
  191. hybrid_sample_generator-1.0.3/hybrid_sample_generator.egg-info/dependency_links.txt +1 -0
  192. hybrid_sample_generator-1.0.3/hybrid_sample_generator.egg-info/requires.txt +20 -0
  193. hybrid_sample_generator-1.0.3/hybrid_sample_generator.egg-info/scm_file_list.json +252 -0
  194. hybrid_sample_generator-1.0.3/hybrid_sample_generator.egg-info/scm_version.json +8 -0
  195. hybrid_sample_generator-1.0.3/hybrid_sample_generator.egg-info/top_level.txt +1 -0
  196. hybrid_sample_generator-1.0.3/pyproject.toml +54 -0
  197. hybrid_sample_generator-1.0.3/requirements.txt +11 -0
  198. hybrid_sample_generator-1.0.3/setup.cfg +4 -0
  199. hybrid_sample_generator-1.0.3/tests/__init__.py +1 -0
  200. hybrid_sample_generator-1.0.3/tests/configuration/__init__.py +1 -0
  201. hybrid_sample_generator-1.0.3/tests/configuration/test_configuration.py +159 -0
  202. hybrid_sample_generator-1.0.3/tests/datasets/__init__.py +1 -0
  203. hybrid_sample_generator-1.0.3/tests/datasets/support.py +108 -0
  204. hybrid_sample_generator-1.0.3/tests/datasets/test_record_datasets.py +121 -0
  205. hybrid_sample_generator-1.0.3/tests/datasets/test_study_datasets.py +32 -0
  206. hybrid_sample_generator-1.0.3/tests/domain/__init__.py +1 -0
  207. hybrid_sample_generator-1.0.3/tests/domain/test_input_sample.py +66 -0
  208. hybrid_sample_generator-1.0.3/tests/domain/test_records.py +54 -0
  209. hybrid_sample_generator-1.0.3/tests/evaluation/__init__.py +1 -0
  210. hybrid_sample_generator-1.0.3/tests/evaluation/test_metrics.py +42 -0
  211. hybrid_sample_generator-1.0.3/tests/example_cases/__init__.py +1 -0
  212. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/__init__.py +1 -0
  213. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_cli.py +47 -0
  214. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_configuration.py +81 -0
  215. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_dataset.py +59 -0
  216. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_downstream.py +309 -0
  217. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_legacy_viewer.py +42 -0
  218. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_patches.py +182 -0
  219. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_steps.py +46 -0
  220. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_studies.py +57 -0
  221. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_textures.py +71 -0
  222. hybrid_sample_generator-1.0.3/tests/example_cases/mvtec_ad2/test_workflow.py +158 -0
  223. hybrid_sample_generator-1.0.3/tests/example_cases/test_image_io.py +32 -0
  224. hybrid_sample_generator-1.0.3/tests/extraction/__init__.py +1 -0
  225. hybrid_sample_generator-1.0.3/tests/extraction/test_helpers.py +95 -0
  226. hybrid_sample_generator-1.0.3/tests/extraction/test_service.py +213 -0
  227. hybrid_sample_generator-1.0.3/tests/fusion/__init__.py +1 -0
  228. hybrid_sample_generator-1.0.3/tests/fusion/classical/__init__.py +1 -0
  229. hybrid_sample_generator-1.0.3/tests/fusion/classical/test_alpha.py +59 -0
  230. hybrid_sample_generator-1.0.3/tests/fusion/classical/test_backend.py +142 -0
  231. hybrid_sample_generator-1.0.3/tests/fusion/classical/test_intensity.py +106 -0
  232. hybrid_sample_generator-1.0.3/tests/fusion/test_background.py +64 -0
  233. hybrid_sample_generator-1.0.3/tests/fusion/test_fusion_configuration.py +93 -0
  234. hybrid_sample_generator-1.0.3/tests/fusion/test_preprocessing.py +39 -0
  235. hybrid_sample_generator-1.0.3/tests/fusion/test_service.py +257 -0
  236. hybrid_sample_generator-1.0.3/tests/generation/__init__.py +1 -0
  237. hybrid_sample_generator-1.0.3/tests/generation/test_models.py +143 -0
  238. hybrid_sample_generator-1.0.3/tests/generation/test_service.py +224 -0
  239. hybrid_sample_generator-1.0.3/tests/generation/test_training.py +56 -0
  240. hybrid_sample_generator-1.0.3/tests/imaging/__init__.py +1 -0
  241. hybrid_sample_generator-1.0.3/tests/imaging/test_masks.py +106 -0
  242. hybrid_sample_generator-1.0.3/tests/matching/__init__.py +1 -0
  243. hybrid_sample_generator-1.0.3/tests/matching/test_matching.py +186 -0
  244. hybrid_sample_generator-1.0.3/tests/persistence/__init__.py +1 -0
  245. hybrid_sample_generator-1.0.3/tests/persistence/test_study_repository.py +115 -0
  246. hybrid_sample_generator-1.0.3/tests/pipeline/__init__.py +1 -0
  247. hybrid_sample_generator-1.0.3/tests/pipeline/support.py +62 -0
  248. hybrid_sample_generator-1.0.3/tests/pipeline/test_end_to_end.py +146 -0
  249. hybrid_sample_generator-1.0.3/tests/pipeline/test_ingestion.py +41 -0
  250. hybrid_sample_generator-1.0.3/tests/pipeline/test_materialization.py +68 -0
  251. hybrid_sample_generator-1.0.3/tests/pipeline/test_planning.py +134 -0
  252. hybrid_sample_generator-1.0.3/tests/visualization/__init__.py +1 -0
  253. hybrid_sample_generator-1.0.3/tests/visualization/support.py +234 -0
  254. hybrid_sample_generator-1.0.3/tests/visualization/test_browser.py +143 -0
  255. hybrid_sample_generator-1.0.3/tests/visualization/test_evaluation.py +118 -0
  256. hybrid_sample_generator-1.0.3/tests/visualization/test_maintenance.py +32 -0
  257. hybrid_sample_generator-1.0.3/tests/visualization/test_navigation.py +92 -0
  258. hybrid_sample_generator-1.0.3/tests/visualization/test_rendering.py +112 -0
@@ -0,0 +1,2 @@
1
+ * text=auto eol=lf
2
+ requirements.txt text eol=lf
@@ -0,0 +1,101 @@
1
+ name: Publish Python Package
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ build:
9
+ name: Build distributions
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: read
13
+
14
+ steps:
15
+ - name: Check out release
16
+ uses: actions/checkout@v4
17
+ with:
18
+ ref: ${{ github.event.release.tag_name }}
19
+
20
+ - name: Set up Python
21
+ uses: actions/setup-python@v5
22
+ with:
23
+ python-version: "3.12"
24
+ cache: pip
25
+
26
+ - name: Install build tools
27
+ run: python -m pip install --upgrade build twine
28
+
29
+ - name: Build wheel and source distribution
30
+ run: python -m build
31
+
32
+ - name: Verify release version
33
+ env:
34
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
35
+ run: |
36
+ python - <<'PY'
37
+ import os
38
+ import zipfile
39
+ from pathlib import Path
40
+
41
+ expected = os.environ["RELEASE_TAG"].removeprefix("v")
42
+
43
+ wheels = list(Path("dist").glob("*.whl"))
44
+ if not wheels:
45
+ raise SystemExit("No wheel was built.")
46
+
47
+ for wheel in wheels:
48
+ with zipfile.ZipFile(wheel) as archive:
49
+ metadata_name = next(
50
+ name for name in archive.namelist()
51
+ if name.endswith(".dist-info/METADATA")
52
+ )
53
+ metadata = archive.read(metadata_name).decode()
54
+
55
+ actual = next(
56
+ line.removeprefix("Version: ")
57
+ for line in metadata.splitlines()
58
+ if line.startswith("Version: ")
59
+ )
60
+
61
+ if actual != expected:
62
+ raise SystemExit(
63
+ f"Release tag {expected!r} does not match "
64
+ f"package version {actual!r}."
65
+ )
66
+
67
+ print(f"Release version {expected} verified.")
68
+ PY
69
+
70
+ - name: Check package metadata
71
+ run: python -m twine check dist/*
72
+
73
+ - name: Upload distributions
74
+ uses: actions/upload-artifact@v4
75
+ with:
76
+ name: python-package-distributions
77
+ path: dist/
78
+ if-no-files-found: error
79
+ retention-days: 7
80
+
81
+ publish:
82
+ name: Publish to PyPI
83
+ needs: build
84
+ runs-on: ubuntu-latest
85
+
86
+ environment:
87
+ name: pypi
88
+ url: https://pypi.org/p/hybrid-sample-generator
89
+
90
+ permissions:
91
+ id-token: write
92
+
93
+ steps:
94
+ - name: Download distributions
95
+ uses: actions/download-artifact@v4
96
+ with:
97
+ name: python-package-distributions
98
+ path: dist/
99
+
100
+ - name: Publish distributions to PyPI
101
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,39 @@
1
+ name: Tests
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+ push:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ tests:
15
+ name: Python tests
16
+ runs-on: ubuntu-latest
17
+ timeout-minutes: 20
18
+
19
+ env:
20
+ MPLBACKEND: Agg
21
+
22
+ steps:
23
+ - uses: actions/checkout@v7
24
+ with:
25
+ persist-credentials: false
26
+
27
+ - uses: actions/setup-python@v7
28
+ with:
29
+ python-version: "3.12"
30
+ cache: pip
31
+
32
+ - name: Install dependencies
33
+ run: |
34
+ python -m pip install --upgrade pip
35
+ python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
36
+ python -m pip install -e .
37
+
38
+ - name: Run project tests
39
+ run: python -m unittest discover -s tests -v
@@ -0,0 +1,33 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ hybrid_sample_generator/_version.py
5
+
6
+ .venv/
7
+ venv/
8
+ ENV/
9
+ .env
10
+ .env.*
11
+
12
+ .pytest_cache/
13
+ .mypy_cache/
14
+ .ruff_cache/
15
+ .coverage
16
+ coverage.xml
17
+
18
+ .vscode/
19
+ *.code-workspace
20
+
21
+ checkpoint.pt
22
+ *.pt
23
+ *.pth
24
+ *.ckpt
25
+
26
+ .DS_Store
27
+ Thumbs.db
28
+
29
+ test/
30
+
31
+ build/
32
+ dist/
33
+ *.egg-info/