simind-python-connector 2.0.0__tar.gz → 2.0.2__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 (369) hide show
  1. simind_python_connector-2.0.2/.github/workflows/containers.yml +52 -0
  2. simind_python_connector-2.0.2/.github/workflows/docs.yml +49 -0
  3. simind_python_connector-2.0.2/.github/workflows/publish.yml +47 -0
  4. simind_python_connector-2.0.2/.github/workflows/tests.yml +91 -0
  5. simind_python_connector-2.0.2/.readthedocs.yaml +19 -0
  6. simind_python_connector-2.0.2/.zenodo.json +35 -0
  7. simind_python_connector-2.0.2/CHANGELOG.md +626 -0
  8. simind_python_connector-2.0.2/CITATION.cff +26 -0
  9. simind_python_connector-2.0.2/MANIFEST.in +66 -0
  10. simind_python_connector-2.0.2/PKG-INFO +130 -0
  11. simind_python_connector-2.0.2/README.md +79 -0
  12. simind_python_connector-2.0.2/docker/README.md +94 -0
  13. simind_python_connector-2.0.2/docker/compose.yaml +76 -0
  14. simind_python_connector-2.0.2/docker/constraints.txt +6 -0
  15. simind_python_connector-2.0.2/docker/import_guard/sitecustomize.py +52 -0
  16. simind_python_connector-2.0.2/docker/python/Dockerfile +40 -0
  17. simind_python_connector-2.0.2/docker/python/install_mpich_compat.sh +24 -0
  18. simind_python_connector-2.0.2/docker/pytomography/Dockerfile +47 -0
  19. simind_python_connector-2.0.2/docker/sirf/Dockerfile +44 -0
  20. simind_python_connector-2.0.2/docker/stir/Dockerfile +48 -0
  21. simind_python_connector-2.0.2/docs/LICENSE +195 -0
  22. simind_python_connector-2.0.2/docs/_docs.py +291 -0
  23. simind_python_connector-2.0.2/docs/_static/.gitkeep +0 -0
  24. simind_python_connector-2.0.2/docs/_static/examples/.gitkeep +0 -0
  25. simind_python_connector-2.0.2/docs/_static/examples/basic_simulation/basic_simulation.png +0 -0
  26. simind_python_connector-2.0.2/docs/_static/examples/cil_rdp_svrg/reconstructions.png +0 -0
  27. simind_python_connector-2.0.2/docs/_static/examples/cil_rdp_svrg/recovery.png +0 -0
  28. simind_python_connector-2.0.2/docs/_static/examples/cil_scatter/reconstructions.png +0 -0
  29. simind_python_connector-2.0.2/docs/_static/examples/cil_scatter/recovery.png +0 -0
  30. simind_python_connector-2.0.2/docs/_static/examples/density_conversion/density_conversion.png +0 -0
  31. simind_python_connector-2.0.2/docs/_static/examples/mc_scatter_osem/reconstructions.png +0 -0
  32. simind_python_connector-2.0.2/docs/_static/examples/mc_scatter_osem/recovery.png +0 -0
  33. simind_python_connector-2.0.2/docs/_static/examples/multi_window/multi_window.png +0 -0
  34. simind_python_connector-2.0.2/docs/_static/examples/phantom_library/phantom_library.png +0 -0
  35. simind_python_connector-2.0.2/docs/_static/examples/pytomography_osem/pytomography_osem.png +0 -0
  36. simind_python_connector-2.0.2/docs/_static/examples/residual_correction/reconstructions.png +0 -0
  37. simind_python_connector-2.0.2/docs/_static/examples/residual_correction/recovery.png +0 -0
  38. simind_python_connector-2.0.2/docs/_static/examples/scatter_normalisation/recovery.png +0 -0
  39. simind_python_connector-2.0.2/docs/_static/examples/scatter_normalisation/scale_scatter.png +0 -0
  40. simind_python_connector-2.0.2/docs/_static/examples/scattwin_vs_penetrate/decomposition.png +0 -0
  41. simind_python_connector-2.0.2/docs/_static/examples/sirf_osem/sirf_osem.png +0 -0
  42. simind_python_connector-2.0.2/docs/_static/examples/stir_osem/stir_osem.png +0 -0
  43. simind_python_connector-2.0.2/docs/_static/examples/y90_ct_conversion/maps.png +0 -0
  44. simind_python_connector-2.0.2/docs/_static/examples/y90_ct_conversion/registration.png +0 -0
  45. simind_python_connector-2.0.2/docs/_static/examples/y90_effective_energy/attenuation_maps.png +0 -0
  46. simind_python_connector-2.0.2/docs/_static/examples/y90_effective_energy/detected_spectrum.png +0 -0
  47. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/docs/api.rst +39 -11
  48. simind_python_connector-2.0.2/docs/backends.rst +80 -0
  49. simind_python_connector-2.0.2/docs/changelog.rst +786 -0
  50. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/docs/conf.py +10 -2
  51. simind_python_connector-2.0.2/docs/contributing.rst +98 -0
  52. simind_python_connector-2.0.2/docs/datasets.rst +62 -0
  53. simind_python_connector-2.0.2/docs/example_pages/_template.rst.txt +19 -0
  54. simind_python_connector-2.0.2/docs/example_pages/basic_simulation.rst +19 -0
  55. simind_python_connector-2.0.2/docs/example_pages/cil_rdp_svrg.rst +31 -0
  56. simind_python_connector-2.0.2/docs/example_pages/cil_scatter.rst +29 -0
  57. simind_python_connector-2.0.2/docs/example_pages/custom_configuration.rst +11 -0
  58. simind_python_connector-2.0.2/docs/example_pages/density_conversion.rst +18 -0
  59. simind_python_connector-2.0.2/docs/example_pages/dicom_recipe.rst +36 -0
  60. simind_python_connector-2.0.2/docs/example_pages/index.rst +44 -0
  61. simind_python_connector-2.0.2/docs/example_pages/mc_scatter_osem.rst +29 -0
  62. simind_python_connector-2.0.2/docs/example_pages/multi_window.rst +21 -0
  63. simind_python_connector-2.0.2/docs/example_pages/phantom_library.rst +18 -0
  64. simind_python_connector-2.0.2/docs/example_pages/pytomography_osem.rst +21 -0
  65. simind_python_connector-2.0.2/docs/example_pages/residual_correction.rst +33 -0
  66. simind_python_connector-2.0.2/docs/example_pages/scatter_normalisation.rst +39 -0
  67. simind_python_connector-2.0.2/docs/example_pages/scattwin_vs_penetrate.rst +21 -0
  68. simind_python_connector-2.0.2/docs/example_pages/sirf_osem.rst +21 -0
  69. simind_python_connector-2.0.2/docs/example_pages/stir_osem.rst +21 -0
  70. simind_python_connector-2.0.2/docs/example_pages/y90_ct_conversion.rst +46 -0
  71. simind_python_connector-2.0.2/docs/example_pages/y90_effective_energy.rst +29 -0
  72. simind_python_connector-2.0.2/docs/example_pages.json +114 -0
  73. simind_python_connector-2.0.2/docs/examples/README.rst +5 -0
  74. simind_python_connector-2.0.2/docs/examples/_nema.py +572 -0
  75. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2/docs}/examples/_python_connector_helpers.py +3 -2
  76. simind_python_connector-2.0.2/docs/examples/_scatter_normalisation.py +49 -0
  77. simind_python_connector-2.0.2/docs/examples/_y90.py +220 -0
  78. simind_python_connector-2.0.2/docs/examples/_y90_spectrum.py +151 -0
  79. simind_python_connector-2.0.2/docs/examples/backends/plot_07a_stir_adaptor_osem.py +159 -0
  80. simind_python_connector-2.0.2/docs/examples/backends/plot_07b_sirf_adaptor_osem.py +153 -0
  81. simind_python_connector-2.0.2/docs/examples/backends/plot_07c_pytomography_adaptor_osem.py +159 -0
  82. simind_python_connector-2.0.2/docs/examples/cil/README.rst +2 -0
  83. simind_python_connector-2.0.2/docs/examples/cil/plot_14_cil_scatter.py +203 -0
  84. simind_python_connector-2.0.2/docs/examples/cil/plot_15_cil_rdp_svrg.py +259 -0
  85. simind_python_connector-2.0.2/docs/examples/getting_started/plot_01_basic_simulation.py +109 -0
  86. simind_python_connector-2.0.2/docs/examples/getting_started/plot_03_multi_window.py +130 -0
  87. simind_python_connector-2.0.2/docs/examples/getting_started/plot_04_custom_config.py +42 -0
  88. simind_python_connector-2.0.2/docs/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +193 -0
  89. simind_python_connector-2.0.2/docs/examples/getting_started/plot_06_schneider_density_conversion.py +101 -0
  90. simind_python_connector-2.0.2/docs/examples/mc_scatter/README.rst +2 -0
  91. simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_11_mc_scatter_osem.py +200 -0
  92. simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_12_scatter_normalisation.py +266 -0
  93. simind_python_connector-2.0.2/docs/examples/mc_scatter/plot_13_residual_correction.py +252 -0
  94. simind_python_connector-2.0.2/docs/examples/phantoms/README.rst +2 -0
  95. simind_python_connector-2.0.2/docs/examples/phantoms/plot_09_phantom_library.py +88 -0
  96. simind_python_connector-2.0.2/docs/examples/real_data/README.rst +21 -0
  97. simind_python_connector-2.0.2/docs/examples/real_data/plot_17_y90_effective_energy.py +308 -0
  98. simind_python_connector-2.0.2/docs/geometry.rst +161 -0
  99. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/docs/index.rst +20 -4
  100. simind_python_connector-2.0.2/docs/installation.rst +92 -0
  101. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/docs/intro.rst +5 -11
  102. simind_python_connector-2.0.2/docs/normalisation.rst +178 -0
  103. simind_python_connector-2.0.2/docs/phantoms.rst +122 -0
  104. simind_python_connector-2.0.2/docs/reconstruction.rst +226 -0
  105. simind_python_connector-2.0.2/docs/simind_validation.md +191 -0
  106. simind_python_connector-2.0.2/docs/spectub_cache_interference.md +13 -0
  107. simind_python_connector-2.0.2/docs/testing.rst +124 -0
  108. simind_python_connector-2.0.2/docs/tutorial.rst +121 -0
  109. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/docs/usage.rst +83 -4
  110. simind_python_connector-2.0.2/examples/README.rst +5 -0
  111. simind_python_connector-2.0.2/examples/_nema.py +572 -0
  112. {simind_python_connector-2.0.0/docs → simind_python_connector-2.0.2}/examples/_python_connector_helpers.py +3 -2
  113. simind_python_connector-2.0.2/examples/_scatter_normalisation.py +49 -0
  114. simind_python_connector-2.0.2/examples/_y90.py +220 -0
  115. simind_python_connector-2.0.2/examples/_y90_spectrum.py +151 -0
  116. simind_python_connector-2.0.2/examples/backends/plot_07a_stir_adaptor_osem.py +159 -0
  117. simind_python_connector-2.0.2/examples/backends/plot_07b_sirf_adaptor_osem.py +153 -0
  118. simind_python_connector-2.0.2/examples/backends/plot_07c_pytomography_adaptor_osem.py +159 -0
  119. simind_python_connector-2.0.2/examples/cil/README.rst +2 -0
  120. simind_python_connector-2.0.2/examples/cil/plot_14_cil_scatter.py +203 -0
  121. simind_python_connector-2.0.2/examples/cil/plot_15_cil_rdp_svrg.py +259 -0
  122. simind_python_connector-2.0.2/examples/getting_started/plot_01_basic_simulation.py +109 -0
  123. simind_python_connector-2.0.2/examples/getting_started/plot_03_multi_window.py +130 -0
  124. simind_python_connector-2.0.2/examples/getting_started/plot_04_custom_config.py +42 -0
  125. simind_python_connector-2.0.2/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +193 -0
  126. simind_python_connector-2.0.2/examples/getting_started/plot_06_schneider_density_conversion.py +101 -0
  127. simind_python_connector-2.0.2/examples/mc_scatter/README.rst +2 -0
  128. simind_python_connector-2.0.2/examples/mc_scatter/plot_11_mc_scatter_osem.py +200 -0
  129. simind_python_connector-2.0.2/examples/mc_scatter/plot_12_scatter_normalisation.py +266 -0
  130. simind_python_connector-2.0.2/examples/mc_scatter/plot_13_residual_correction.py +252 -0
  131. simind_python_connector-2.0.2/examples/phantoms/README.rst +2 -0
  132. simind_python_connector-2.0.2/examples/phantoms/plot_09_phantom_library.py +88 -0
  133. simind_python_connector-2.0.2/examples/real_data/README.rst +21 -0
  134. simind_python_connector-2.0.2/examples/real_data/plot_17_y90_effective_energy.py +308 -0
  135. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/pyproject.toml +34 -6
  136. simind_python_connector-2.0.2/scripts/check_docs.py +52 -0
  137. simind_python_connector-2.0.2/scripts/check_simind_mpi.py +81 -0
  138. simind_python_connector-2.0.2/scripts/check_wheel_resources.py +116 -0
  139. simind_python_connector-2.0.2/scripts/fix.sh +14 -0
  140. simind_python_connector-2.0.2/scripts/make_y90_bundle.py +112 -0
  141. simind_python_connector-2.0.2/scripts/prepare_release.py +229 -0
  142. simind_python_connector-2.0.2/scripts/release.sh +97 -0
  143. simind_python_connector-2.0.2/scripts/run_all_examples.py +261 -0
  144. simind_python_connector-2.0.2/scripts/run_container_examples.sh +291 -0
  145. simind_python_connector-2.0.2/scripts/run_container_validation.sh +348 -0
  146. simind_python_connector-2.0.2/scripts/run_validation.sh +120 -0
  147. simind_python_connector-2.0.2/scripts/validation_report.py +120 -0
  148. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/__init__.py +3 -3
  149. simind_python_connector-2.0.2/simind_python_connector/builders/_native.py +92 -0
  150. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/builders/acquisition_builder.py +97 -104
  151. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/builders/image_builder.py +16 -72
  152. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/configs/__init__.py +10 -4
  153. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/connectors/__init__.py +0 -2
  154. simind_python_connector-2.0.2/simind_python_connector/connectors/_native_adaptor.py +471 -0
  155. simind_python_connector-2.0.2/simind_python_connector/connectors/python_connector.py +1387 -0
  156. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/connectors/pytomography_adaptor.py +94 -28
  157. simind_python_connector-2.0.2/simind_python_connector/connectors/sirf_adaptor.py +43 -0
  158. simind_python_connector-2.0.2/simind_python_connector/connectors/stir_adaptor.py +45 -0
  159. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/converters/__init__.py +2 -2
  160. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/converters/attenuation.py +48 -51
  161. simind_python_connector-2.0.2/simind_python_connector/converters/simind_to_stir.py +473 -0
  162. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/core/config.py +432 -123
  163. simind_python_connector-2.0.2/simind_python_connector/core/executor.py +358 -0
  164. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/core/types.py +16 -25
  165. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/data/__init__.py +3 -3
  166. simind_python_connector-2.0.2/simind_python_connector/data/bone.atn +178 -0
  167. simind_python_connector-2.0.2/simind_python_connector/data/h2o.atn +84 -0
  168. simind_python_connector-2.0.2/simind_python_connector/datasets.py +67 -0
  169. simind_python_connector-2.0.2/simind_python_connector/normalisation.py +90 -0
  170. simind_python_connector-2.0.2/simind_python_connector/phantoms.py +390 -0
  171. simind_python_connector-2.0.2/simind_python_connector/recon/__init__.py +43 -0
  172. simind_python_connector-2.0.2/simind_python_connector/recon/cil.py +185 -0
  173. simind_python_connector-2.0.2/simind_python_connector/recon/corrections.py +192 -0
  174. simind_python_connector-2.0.2/simind_python_connector/recon/diagnostics.py +41 -0
  175. simind_python_connector-2.0.2/simind_python_connector/recon/osem.py +63 -0
  176. simind_python_connector-2.0.2/simind_python_connector/recon/projector.py +141 -0
  177. simind_python_connector-2.0.2/simind_python_connector/recon/updates.py +88 -0
  178. simind_python_connector-2.0.2/simind_python_connector/utils/__init__.py +69 -0
  179. simind_python_connector-2.0.2/simind_python_connector/utils/interfile.py +690 -0
  180. simind_python_connector-2.0.2/simind_python_connector/utils/projection_metrics.py +153 -0
  181. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/utils/simind_utils.py +23 -28
  182. simind_python_connector-2.0.2/simind_python_connector.egg-info/SOURCES.txt +276 -0
  183. simind_python_connector-2.0.2/tests/conftest.py +53 -0
  184. simind_python_connector-2.0.2/tests/fixtures/golden/circular.hs +37 -0
  185. simind_python_connector-2.0.2/tests/fixtures/golden/ignored_substrings.hs +5 -0
  186. simind_python_connector-2.0.2/tests/fixtures/golden/orbit.hs +39 -0
  187. simind_python_connector-2.0.2/tests/fixtures/golden/penetrate_component_12.hs +8 -0
  188. simind_python_connector-2.0.2/tests/fixtures/minimal_variable_sections.smc +36 -0
  189. simind_python_connector-2.0.2/tests/recon/__init__.py +0 -0
  190. simind_python_connector-2.0.2/tests/recon/conftest.py +138 -0
  191. simind_python_connector-2.0.2/tests/recon/fakes.py +93 -0
  192. simind_python_connector-2.0.2/tests/recon/test_cil_functions.py +46 -0
  193. simind_python_connector-2.0.2/tests/recon/test_cil_sirf.py +250 -0
  194. simind_python_connector-2.0.2/tests/recon/test_corrections.py +636 -0
  195. simind_python_connector-2.0.2/tests/recon/test_diagnostics.py +60 -0
  196. simind_python_connector-2.0.2/tests/recon/test_import_boundary.py +38 -0
  197. simind_python_connector-2.0.2/tests/recon/test_osem_sirf.py +152 -0
  198. simind_python_connector-2.0.2/tests/recon/test_projector.py +193 -0
  199. simind_python_connector-2.0.2/tests/recon/test_residual.py +77 -0
  200. simind_python_connector-2.0.2/tests/recon/test_residual_cil.py +52 -0
  201. simind_python_connector-2.0.2/tests/recon/test_residual_sirf.py +137 -0
  202. simind_python_connector-2.0.2/tests/recon/test_updates.py +146 -0
  203. simind_python_connector-2.0.2/tests/test_acquisition_builder_unit.py +350 -0
  204. simind_python_connector-2.0.2/tests/test_attenuation_utils.py +68 -0
  205. simind_python_connector-2.0.2/tests/test_builders_lifetime.py +74 -0
  206. simind_python_connector-2.0.2/tests/test_builders_native.py +162 -0
  207. simind_python_connector-2.0.2/tests/test_configure_phantom.py +404 -0
  208. simind_python_connector-2.0.2/tests/test_connector_backend_separation.py +199 -0
  209. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/tests/test_container_library_isolation.py +8 -1
  210. simind_python_connector-2.0.2/tests/test_container_scripts.py +392 -0
  211. simind_python_connector-2.0.2/tests/test_converter_golden.py +128 -0
  212. simind_python_connector-2.0.2/tests/test_datasets.py +71 -0
  213. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/tests/test_dicom_builder.py +66 -7
  214. simind_python_connector-2.0.2/tests/test_docs_check.py +179 -0
  215. simind_python_connector-2.0.2/tests/test_energy_window_filename_simind.py +34 -0
  216. simind_python_connector-2.0.2/tests/test_examples_backend_separation.py +60 -0
  217. simind_python_connector-2.0.2/tests/test_examples_navigation.py +56 -0
  218. simind_python_connector-2.0.2/tests/test_executor.py +604 -0
  219. simind_python_connector-2.0.2/tests/test_ground_truth_sirf.py +38 -0
  220. simind_python_connector-2.0.2/tests/test_image_builder_unit.py +108 -0
  221. simind_python_connector-2.0.2/tests/test_import_side_effects.py +31 -0
  222. simind_python_connector-2.0.2/tests/test_interfile.py +1334 -0
  223. simind_python_connector-2.0.2/tests/test_make_y90_bundle.py +82 -0
  224. simind_python_connector-2.0.2/tests/test_marker_policy.py +66 -0
  225. simind_python_connector-2.0.2/tests/test_measured_geometry_simind.py +252 -0
  226. simind_python_connector-2.0.2/tests/test_native_adaptors.py +1460 -0
  227. simind_python_connector-2.0.2/tests/test_nema_examples.py +437 -0
  228. simind_python_connector-2.0.2/tests/test_nema_phantom.py +95 -0
  229. simind_python_connector-2.0.2/tests/test_non_square_slices_simind.py +62 -0
  230. simind_python_connector-2.0.2/tests/test_normalisation.py +98 -0
  231. simind_python_connector-2.0.2/tests/test_packaging_resources.py +168 -0
  232. simind_python_connector-2.0.2/tests/test_phantoms.py +102 -0
  233. simind_python_connector-2.0.2/tests/test_phantoms_simind.py +249 -0
  234. simind_python_connector-2.0.2/tests/test_projection_metrics.py +186 -0
  235. simind_python_connector-2.0.2/tests/test_python_connector.py +3618 -0
  236. simind_python_connector-2.0.2/tests/test_pytomography_adaptor.py +625 -0
  237. simind_python_connector-2.0.2/tests/test_release_regressions_simind.py +309 -0
  238. simind_python_connector-2.0.2/tests/test_release_tools.py +779 -0
  239. simind_python_connector-2.0.2/tests/test_runtime_switches.py +191 -0
  240. simind_python_connector-2.0.2/tests/test_scatter_normalisation_options.py +38 -0
  241. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/tests/test_schneider_density.py +24 -0
  242. simind_python_connector-2.0.2/tests/test_simind_mpi.py +29 -0
  243. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/tests/test_simind_to_stir_converter.py +355 -31
  244. simind_python_connector-2.0.2/tests/test_simulation_config.py +548 -0
  245. simind_python_connector-2.0.2/tests/test_template_geometry_sirf.py +97 -0
  246. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/tests/test_utils_small.py +1 -29
  247. simind_python_connector-2.0.2/tests/test_validation_framework.py +150 -0
  248. simind_python_connector-2.0.2/tests/test_voxelise.py +130 -0
  249. simind_python_connector-2.0.2/tests/test_y90_ct_conversion.py +235 -0
  250. simind_python_connector-2.0.2/tests/test_y90_spectra.py +252 -0
  251. simind_python_connector-2.0.2/tests/validation/__init__.py +0 -0
  252. simind_python_connector-2.0.2/tests/validation/conftest.py +142 -0
  253. simind_python_connector-2.0.2/tests/validation/test_activity.py +98 -0
  254. simind_python_connector-2.0.2/tests/validation/test_anisotropic_voxels.py +110 -0
  255. simind_python_connector-2.0.2/tests/validation/test_backend_agreement.py +274 -0
  256. simind_python_connector-2.0.2/tests/validation/test_cil.py +288 -0
  257. simind_python_connector-2.0.2/tests/validation/test_interfile.py +130 -0
  258. simind_python_connector-2.0.2/tests/validation/test_measured_geometry.py +81 -0
  259. simind_python_connector-2.0.2/tests/validation/test_mpi.py +188 -0
  260. simind_python_connector-2.0.2/tests/validation/test_mu_map.py +168 -0
  261. simind_python_connector-2.0.2/tests/validation/test_phantoms.py +276 -0
  262. simind_python_connector-2.0.2/tests/validation/test_recon.py +417 -0
  263. simind_python_connector-2.0.2/tests/validation/test_runtime_switches.py +278 -0
  264. simind_python_connector-2.0.2/tests/validation/test_scale_to_reference.py +188 -0
  265. simind_python_connector-2.0.2/tests/validation/test_versions.py +70 -0
  266. simind_python_connector-2.0.2/uv.lock +2474 -0
  267. simind_python_connector-2.0.0/MANIFEST.in +0 -13
  268. simind_python_connector-2.0.0/PKG-INFO +0 -283
  269. simind_python_connector-2.0.0/README.md +0 -240
  270. simind_python_connector-2.0.0/docs/backends.rst +0 -56
  271. simind_python_connector-2.0.0/docs/changelog.rst +0 -380
  272. simind_python_connector-2.0.0/docs/connector_modernization_plan.rst +0 -45
  273. simind_python_connector-2.0.0/docs/contributing.rst +0 -46
  274. simind_python_connector-2.0.0/docs/examples/01_basic_simulation.py +0 -93
  275. simind_python_connector-2.0.0/docs/examples/02_runtime_switch_comparison.py +0 -108
  276. simind_python_connector-2.0.0/docs/examples/03_multi_window.py +0 -120
  277. simind_python_connector-2.0.0/docs/examples/04_custom_config.py +0 -228
  278. simind_python_connector-2.0.0/docs/examples/05_scattwin_vs_penetrate_comparison.py +0 -473
  279. simind_python_connector-2.0.0/docs/examples/06_schneider_density_conversion.py +0 -322
  280. simind_python_connector-2.0.0/docs/examples/07A_stir_adaptor_osem.py +0 -211
  281. simind_python_connector-2.0.0/docs/examples/07B_sirf_adaptor_osem.py +0 -193
  282. simind_python_connector-2.0.0/docs/examples/07C_pytomography_adaptor_osem.py +0 -184
  283. simind_python_connector-2.0.0/docs/examples/08A_stir_adaptor_from_dicom.py +0 -64
  284. simind_python_connector-2.0.0/docs/examples/08B_sirf_adaptor_from_dicom.py +0 -64
  285. simind_python_connector-2.0.0/docs/examples/08C_pytomography_adaptor_from_dicom.py +0 -82
  286. simind_python_connector-2.0.0/docs/examples.rst +0 -125
  287. simind_python_connector-2.0.0/docs/geometry.rst +0 -64
  288. simind_python_connector-2.0.0/docs/installation.rst +0 -130
  289. simind_python_connector-2.0.0/docs/testing.rst +0 -236
  290. simind_python_connector-2.0.0/examples/01_basic_simulation.py +0 -93
  291. simind_python_connector-2.0.0/examples/02_runtime_switch_comparison.py +0 -108
  292. simind_python_connector-2.0.0/examples/03_multi_window.py +0 -120
  293. simind_python_connector-2.0.0/examples/04_custom_config.py +0 -228
  294. simind_python_connector-2.0.0/examples/05_scattwin_vs_penetrate_comparison.py +0 -473
  295. simind_python_connector-2.0.0/examples/06_schneider_density_conversion.py +0 -322
  296. simind_python_connector-2.0.0/examples/07A_stir_adaptor_osem.py +0 -211
  297. simind_python_connector-2.0.0/examples/07B_sirf_adaptor_osem.py +0 -193
  298. simind_python_connector-2.0.0/examples/07C_pytomography_adaptor_osem.py +0 -184
  299. simind_python_connector-2.0.0/examples/08A_stir_adaptor_from_dicom.py +0 -64
  300. simind_python_connector-2.0.0/examples/08B_sirf_adaptor_from_dicom.py +0 -64
  301. simind_python_connector-2.0.0/examples/08C_pytomography_adaptor_from_dicom.py +0 -82
  302. simind_python_connector-2.0.0/requirements-dev.txt +0 -23
  303. simind_python_connector-2.0.0/requirements.txt +0 -10
  304. simind_python_connector-2.0.0/simind_python_connector/backends/__init__.py +0 -487
  305. simind_python_connector-2.0.0/simind_python_connector/backends/base.py +0 -387
  306. simind_python_connector-2.0.0/simind_python_connector/backends/sirf_backend.py +0 -309
  307. simind_python_connector-2.0.0/simind_python_connector/backends/stir_backend.py +0 -395
  308. simind_python_connector-2.0.0/simind_python_connector/connectors/_spacing.py +0 -75
  309. simind_python_connector-2.0.0/simind_python_connector/connectors/python_connector.py +0 -447
  310. simind_python_connector-2.0.0/simind_python_connector/connectors/sirf_adaptor.py +0 -167
  311. simind_python_connector-2.0.0/simind_python_connector/connectors/stir_adaptor.py +0 -167
  312. simind_python_connector-2.0.0/simind_python_connector/converters/dicom_to_stir.py +0 -3
  313. simind_python_connector-2.0.0/simind_python_connector/converters/simind_to_stir.py +0 -771
  314. simind_python_connector-2.0.0/simind_python_connector/core/executor.py +0 -125
  315. simind_python_connector-2.0.0/simind_python_connector/data/bone.atn +0 -187
  316. simind_python_connector-2.0.0/simind_python_connector/data/h2o.atn +0 -92
  317. simind_python_connector-2.0.0/simind_python_connector/utils/__init__.py +0 -120
  318. simind_python_connector-2.0.0/simind_python_connector/utils/backend_access.py +0 -121
  319. simind_python_connector-2.0.0/simind_python_connector/utils/import_helpers.py +0 -78
  320. simind_python_connector-2.0.0/simind_python_connector/utils/interfile_numpy.py +0 -205
  321. simind_python_connector-2.0.0/simind_python_connector/utils/interfile_parser.py +0 -177
  322. simind_python_connector-2.0.0/simind_python_connector/utils/io_utils.py +0 -14
  323. simind_python_connector-2.0.0/simind_python_connector/utils/sirf_stir_utils.py +0 -194
  324. simind_python_connector-2.0.0/simind_python_connector/utils/stir_utils.py +0 -490
  325. simind_python_connector-2.0.0/simind_python_connector.egg-info/PKG-INFO +0 -283
  326. simind_python_connector-2.0.0/simind_python_connector.egg-info/SOURCES.txt +0 -126
  327. simind_python_connector-2.0.0/simind_python_connector.egg-info/dependency_links.txt +0 -1
  328. simind_python_connector-2.0.0/simind_python_connector.egg-info/requires.txt +0 -19
  329. simind_python_connector-2.0.0/simind_python_connector.egg-info/top_level.txt +0 -1
  330. simind_python_connector-2.0.0/tests/conftest.py +0 -128
  331. simind_python_connector-2.0.0/tests/test_acquisition_builder_unit.py +0 -227
  332. simind_python_connector-2.0.0/tests/test_arithmetic_operations.py +0 -106
  333. simind_python_connector-2.0.0/tests/test_attenuation_utils.py +0 -116
  334. simind_python_connector-2.0.0/tests/test_backends.py +0 -367
  335. simind_python_connector-2.0.0/tests/test_connector_backend_separation.py +0 -118
  336. simind_python_connector-2.0.0/tests/test_connectors_base.py +0 -27
  337. simind_python_connector-2.0.0/tests/test_container_scripts.py +0 -290
  338. simind_python_connector-2.0.0/tests/test_example_config_profile.py +0 -40
  339. simind_python_connector-2.0.0/tests/test_examples_backend_separation.py +0 -74
  340. simind_python_connector-2.0.0/tests/test_executor.py +0 -217
  341. simind_python_connector-2.0.0/tests/test_geometry_isolation_forward_projection.py +0 -352
  342. simind_python_connector-2.0.0/tests/test_image_builder_unit.py +0 -113
  343. simind_python_connector-2.0.0/tests/test_interfile_numpy.py +0 -295
  344. simind_python_connector-2.0.0/tests/test_interfile_parser.py +0 -41
  345. simind_python_connector-2.0.0/tests/test_legacy_surface_policy.py +0 -20
  346. simind_python_connector-2.0.0/tests/test_marker_policy.py +0 -117
  347. simind_python_connector-2.0.0/tests/test_native_adaptors.py +0 -485
  348. simind_python_connector-2.0.0/tests/test_osem_geometry_diagnostics.py +0 -363
  349. simind_python_connector-2.0.0/tests/test_package_identity.py +0 -18
  350. simind_python_connector-2.0.0/tests/test_packaging_resources.py +0 -113
  351. simind_python_connector-2.0.0/tests/test_python_connector.py +0 -615
  352. simind_python_connector-2.0.0/tests/test_pytomography_adaptor.py +0 -275
  353. simind_python_connector-2.0.0/tests/test_simulation_config.py +0 -208
  354. simind_python_connector-2.0.0/tests/test_sirf_stir_utils.py +0 -56
  355. simind_python_connector-2.0.0/tests/test_stir_utils_backend_choice_unit.py +0 -78
  356. simind_python_connector-2.0.0/tests/test_utils.py +0 -134
  357. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/LICENSE +0 -0
  358. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/setup.cfg +0 -0
  359. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/builders/__init__.py +0 -0
  360. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/configs/AnyScan.yaml +0 -0
  361. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/configs/Discovery670.yaml +0 -0
  362. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/configs/Example.yaml +0 -0
  363. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/configs/MLD001_SCAN0.yaml +0 -0
  364. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/configs/input.smc +0 -0
  365. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/connectors/base.py +0 -0
  366. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/core/__init__.py +0 -0
  367. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/simind_python_connector/data/Schneider2000.json +0 -0
  368. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/tests/__init__.py +0 -0
  369. {simind_python_connector-2.0.0 → simind_python_connector-2.0.2}/tests/test_integration.py +0 -0
@@ -0,0 +1,52 @@
1
+ name: Container tests
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ schedule:
6
+ - cron: "0 3 * * 1"
7
+ pull_request:
8
+ paths:
9
+ - "simind_python_connector/recon/**"
10
+ - "simind_python_connector/connectors/**"
11
+ - "simind_python_connector/builders/**"
12
+ - "simind_python_connector/utils/interfile.py"
13
+ - "docker/**"
14
+
15
+ jobs:
16
+ sirf:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ - uses: docker/setup-buildx-action@v3
21
+ - uses: docker/build-push-action@v6
22
+ with:
23
+ context: .
24
+ file: docker/sirf/Dockerfile
25
+ tags: simind-python-connector/sirf:ci
26
+ load: true
27
+ cache-from: type=gha,scope=sirf
28
+ cache-to: type=gha,mode=max,scope=sirf
29
+ - name: SIRF and CIL tests
30
+ run: >
31
+ docker run --rm -e CI=true -v "$PWD:/workspace" -w /workspace
32
+ simind-python-connector/sirf:ci
33
+ python -m pytest -q -m "(requires_sirf or requires_cil) and not requires_simind"
34
+
35
+ stir:
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: docker/setup-buildx-action@v3
40
+ - uses: docker/build-push-action@v6
41
+ with:
42
+ context: .
43
+ file: docker/stir/Dockerfile
44
+ tags: simind-python-connector/stir:ci
45
+ load: true
46
+ cache-from: type=gha,scope=stir
47
+ cache-to: type=gha,mode=max,scope=stir
48
+ - name: STIR tests
49
+ run: >
50
+ docker run --rm -e CI=true -v "$PWD:/workspace" -w /workspace
51
+ simind-python-connector/stir:ci
52
+ python -m pytest -q -m "requires_stir and not requires_simind"
@@ -0,0 +1,49 @@
1
+ name: Documentation
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, develop, "release/**" ]
6
+ pull_request:
7
+ branches: [ main, develop, "release/**" ]
8
+ workflow_call:
9
+ inputs:
10
+ ref:
11
+ description: Ref (for example a release tag) to check out and document
12
+ required: false
13
+ type: string
14
+ default: ""
15
+
16
+ jobs:
17
+ docs:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ with:
22
+ ref: ${{ inputs.ref || github.ref }}
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: "3.10"
27
+ - name: Install dependencies
28
+ run: |
29
+ python -m pip install --upgrade pip
30
+ pip install -e ".[dev]"
31
+ - name: Check the tag matches the documented version
32
+ run: |
33
+ # Python 3.10 (matched to Read the Docs) predates the TOML parser in
34
+ # the standard library, so read [project] version with pathlib/re.
35
+ version=$(python -c 'import pathlib, re; text = pathlib.Path("pyproject.toml").read_text(encoding="utf-8"); project = re.search(r"(?ms)^\[project\].*?(?=^\[|\Z)", text).group(0); print(re.search(r"(?m)^version\s*=\s*\"([^\"]+)\"", project).group(1))')
36
+ if [[ "$GITHUB_REF_NAME" == v* ]] && [ "$GITHUB_REF_NAME" != "v${version}" ]; then
37
+ echo "Tag $GITHUB_REF_NAME does not match version v${version}"
38
+ exit 1
39
+ fi
40
+ - name: Build the documentation
41
+ run: |
42
+ python -m sphinx -b html -W --keep-going docs docs/_build/html
43
+ - name: Check authored documentation inventory and figures
44
+ run: python scripts/check_docs.py --html-dir docs/_build/html
45
+ - name: Upload the built documentation
46
+ uses: actions/upload-artifact@v4
47
+ with:
48
+ name: documentation
49
+ path: docs/_build/html
@@ -0,0 +1,47 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ tests:
9
+ uses: ./.github/workflows/tests.yml
10
+ with:
11
+ ref: ${{ github.event.release.tag_name }}
12
+
13
+ docs:
14
+ uses: ./.github/workflows/docs.yml
15
+ with:
16
+ ref: ${{ github.event.release.tag_name }}
17
+
18
+ publish:
19
+ needs: [tests, docs]
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ id-token: write
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ ref: ${{ github.event.release.tag_name }}
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v5
29
+ with:
30
+ python-version: "3.12"
31
+ - name: Check the tag matches the package version
32
+ run: |
33
+ version=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
34
+ if [ "$GITHUB_REF_NAME" != "v${version}" ]; then
35
+ echo "Tag $GITHUB_REF_NAME does not match version v${version}"
36
+ exit 1
37
+ fi
38
+ - name: Install build dependencies
39
+ run: |
40
+ python -m pip install --upgrade pip
41
+ pip install build twine
42
+ - name: Build package
43
+ run: python -m build
44
+ - name: Check package
45
+ run: twine check dist/*
46
+ - name: Publish to PyPI
47
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,91 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, develop, "release/**" ]
6
+ pull_request:
7
+ branches: [ main, develop, "release/**" ]
8
+ workflow_call:
9
+ inputs:
10
+ ref:
11
+ description: Ref (for example a release tag) to check out and test
12
+ required: false
13
+ type: string
14
+ default: ""
15
+
16
+ jobs:
17
+ test:
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ matrix:
21
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ with:
25
+ ref: ${{ inputs.ref || github.ref }}
26
+ - name: Set up Python ${{ matrix.python-version }}
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: ${{ matrix.python-version }}
30
+ - name: Install dependencies
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ pip install -e ".[dev]"
34
+ - name: Lint and format check with ruff
35
+ run: |
36
+ ruff check .
37
+ ruff format --check .
38
+ - name: Check authored documentation inventory
39
+ run: python scripts/check_docs.py
40
+ - name: Run CI-friendly tests
41
+ run: |
42
+ python -m pytest -m "not integration and not requires_sirf and not requires_stir and not requires_simind and not requires_pytomography and not requires_cil and not ci_skip and not validation" --cov=simind_python_connector --cov-report=xml
43
+ - name: Upload coverage to Codecov
44
+ uses: codecov/codecov-action@v4
45
+ with:
46
+ file: ./coverage.xml
47
+ flags: unittests
48
+ name: codecov-umbrella
49
+ fail_ci_if_error: false
50
+
51
+ build:
52
+ runs-on: ubuntu-latest
53
+ steps:
54
+ - uses: actions/checkout@v4
55
+ with:
56
+ ref: ${{ inputs.ref || github.ref }}
57
+ - name: Set up Python
58
+ uses: actions/setup-python@v5
59
+ with:
60
+ python-version: "3.10"
61
+ - name: Install build dependencies
62
+ run: |
63
+ python -m pip install --upgrade pip
64
+ pip install build twine
65
+ - name: Build package
66
+ run: |
67
+ python -m build
68
+ - name: Check package
69
+ run: |
70
+ twine check dist/*
71
+ - name: Smoke-test wheel resources outside the checkout
72
+ run: |
73
+ repo="$GITHUB_WORKSPACE"
74
+ venv="$(mktemp -d)/wheel-env"
75
+ python -m venv "$venv"
76
+ "$venv/bin/python" -m pip install --quiet dist/*.whl
77
+ workdir="$(mktemp -d)"
78
+ cd "$workdir"
79
+ "$venv/bin/python" "$repo/scripts/check_wheel_resources.py" --repo "$repo"
80
+
81
+ container-core:
82
+ runs-on: ubuntu-latest
83
+ steps:
84
+ - uses: actions/checkout@v4
85
+ with:
86
+ ref: ${{ inputs.ref || github.ref }}
87
+ - name: Core container validation
88
+ run: bash scripts/run_container_validation.sh --only-core
89
+
90
+ - name: Core container examples (SIMIND optional)
91
+ run: bash scripts/run_container_examples.sh --only-core
@@ -0,0 +1,19 @@
1
+ version: 2
2
+
3
+ build:
4
+ os: ubuntu-22.04
5
+ tools:
6
+ python: "3.10"
7
+
8
+ sphinx:
9
+ configuration: docs/conf.py
10
+ # Fail the public deployment on any warning (including a duplicate object
11
+ # description) so it matches the docs job in .github/workflows/docs.yml.
12
+ fail_on_warning: true
13
+
14
+ python:
15
+ install:
16
+ - method: pip
17
+ path: .
18
+ extra_requirements:
19
+ - dev
@@ -0,0 +1,35 @@
1
+ {
2
+ "title": "simind-python-connector: Python SIMIND Monte Carlo connector with STIR/SIRF/PyTomography adaptors",
3
+ "upload_type": "software",
4
+ "description": "A Python package providing SIMIND Monte Carlo simulation connector with adaptors for STIR/SIRF and PyTomography reconstruction frameworks. Enables Python-driven SIMIND simulations and data processing workflows.",
5
+ "creators": [
6
+ {
7
+ "name": "Porter, Sam",
8
+ "affiliation": "University College London",
9
+ "orcid": "0000-0002-1815-4716"
10
+ },
11
+ {
12
+ "name": "Varzakis, Efstathios (Stahis)",
13
+ "affiliation": "University College London",
14
+ "orcid": "0000-0003-3503-7754"
15
+ },
16
+ {
17
+ "name": "Thielemans, Kris",
18
+ "affiliation": "University College London",
19
+ "orcid": "0000-0001-6353-9538"
20
+ }
21
+ ],
22
+ "keywords": [
23
+ "SPECT",
24
+ "Monte Carlo",
25
+ "medical imaging",
26
+ "SIMIND",
27
+ "SIRF",
28
+ "STIR",
29
+ "PyTomography",
30
+ "Python"
31
+ ],
32
+ "access_right": "open",
33
+ "license": "apache-2.0",
34
+ "version": "2.0.2"
35
+ }