simind-python-connector 2.0.0__tar.gz → 2.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. simind_python_connector-2.0.1/.github/workflows/containers.yml +52 -0
  2. simind_python_connector-2.0.1/.github/workflows/docs.yml +53 -0
  3. simind_python_connector-2.0.1/.github/workflows/publish.yml +47 -0
  4. simind_python_connector-2.0.1/.github/workflows/tests.yml +91 -0
  5. simind_python_connector-2.0.1/.readthedocs.yaml +19 -0
  6. simind_python_connector-2.0.1/.zenodo.json +35 -0
  7. simind_python_connector-2.0.1/CHANGELOG.md +592 -0
  8. simind_python_connector-2.0.1/CITATION.cff +26 -0
  9. simind_python_connector-2.0.1/MANIFEST.in +67 -0
  10. simind_python_connector-2.0.1/PKG-INFO +149 -0
  11. simind_python_connector-2.0.1/README.md +98 -0
  12. simind_python_connector-2.0.1/docker/README.md +94 -0
  13. simind_python_connector-2.0.1/docker/compose.yaml +76 -0
  14. simind_python_connector-2.0.1/docker/constraints.txt +6 -0
  15. simind_python_connector-2.0.1/docker/import_guard/sitecustomize.py +52 -0
  16. simind_python_connector-2.0.1/docker/python/Dockerfile +40 -0
  17. simind_python_connector-2.0.1/docker/python/install_mpich_compat.sh +24 -0
  18. simind_python_connector-2.0.1/docker/pytomography/Dockerfile +47 -0
  19. simind_python_connector-2.0.1/docker/sirf/Dockerfile +44 -0
  20. simind_python_connector-2.0.1/docker/stir/Dockerfile +49 -0
  21. simind_python_connector-2.0.1/docs/LICENSE +195 -0
  22. simind_python_connector-2.0.1/docs/_gallery.py +65 -0
  23. simind_python_connector-2.0.1/docs/_static/.gitkeep +0 -0
  24. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/docs/api.rst +41 -11
  25. simind_python_connector-2.0.1/docs/backends.rst +92 -0
  26. simind_python_connector-2.0.1/docs/changelog.rst +866 -0
  27. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/docs/conf.py +50 -2
  28. simind_python_connector-2.0.1/docs/contributing.rst +129 -0
  29. simind_python_connector-2.0.1/docs/datasets.rst +95 -0
  30. simind_python_connector-2.0.1/docs/examples.rst +36 -0
  31. simind_python_connector-2.0.1/docs/geometry.rst +194 -0
  32. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/docs/index.rst +20 -3
  33. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/docs/installation.rst +23 -5
  34. simind_python_connector-2.0.1/docs/normalisation.rst +164 -0
  35. simind_python_connector-2.0.1/docs/phantoms.rst +126 -0
  36. simind_python_connector-2.0.1/docs/reconstruction.rst +295 -0
  37. simind_python_connector-2.0.1/docs/simind_validation.md +210 -0
  38. simind_python_connector-2.0.1/docs/spectub_cache_interference.md +143 -0
  39. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/docs/testing.rst +83 -24
  40. simind_python_connector-2.0.1/docs/tutorial.rst +217 -0
  41. simind_python_connector-2.0.1/docs/usage.rst +256 -0
  42. simind_python_connector-2.0.1/examples/README.rst +5 -0
  43. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/examples/_python_connector_helpers.py +3 -2
  44. simind_python_connector-2.0.1/examples/backends/README.rst +2 -0
  45. simind_python_connector-2.0.1/examples/backends/plot_07a_stir_adaptor_osem.py +233 -0
  46. simind_python_connector-2.0.1/examples/backends/plot_07b_sirf_adaptor_osem.py +218 -0
  47. simind_python_connector-2.0.1/examples/backends/plot_07c_pytomography_adaptor_osem.py +209 -0
  48. simind_python_connector-2.0.1/examples/backends/plot_08a_stir_adaptor_from_dicom.py +86 -0
  49. simind_python_connector-2.0.1/examples/backends/plot_08b_sirf_adaptor_from_dicom.py +80 -0
  50. simind_python_connector-2.0.1/examples/backends/plot_08c_pytomography_adaptor_from_dicom.py +76 -0
  51. simind_python_connector-2.0.1/examples/cil/README.rst +2 -0
  52. simind_python_connector-2.0.1/examples/cil/plot_14_cil_scatter.py +365 -0
  53. simind_python_connector-2.0.1/examples/cil/plot_15_cil_rdp_svrg.py +438 -0
  54. simind_python_connector-2.0.1/examples/getting_started/README.rst +2 -0
  55. simind_python_connector-2.0.1/examples/getting_started/plot_01_basic_simulation.py +109 -0
  56. simind_python_connector-2.0.1/examples/getting_started/plot_02_runtime_switch_comparison.py +131 -0
  57. simind_python_connector-2.0.1/examples/getting_started/plot_03_multi_window.py +146 -0
  58. simind_python_connector-2.0.1/examples/getting_started/plot_04_custom_config.py +122 -0
  59. simind_python_connector-2.0.0/examples/05_scattwin_vs_penetrate_comparison.py → simind_python_connector-2.0.1/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +177 -125
  60. simind_python_connector-2.0.1/examples/getting_started/plot_06_schneider_density_conversion.py +226 -0
  61. simind_python_connector-2.0.1/examples/mc_scatter/README.rst +2 -0
  62. simind_python_connector-2.0.1/examples/mc_scatter/plot_11_mc_scatter_osem.py +376 -0
  63. simind_python_connector-2.0.1/examples/mc_scatter/plot_12_scatter_normalisation.py +558 -0
  64. simind_python_connector-2.0.1/examples/mc_scatter/plot_13_residual_correction.py +430 -0
  65. simind_python_connector-2.0.1/examples/phantoms/README.rst +2 -0
  66. simind_python_connector-2.0.1/examples/phantoms/plot_09_phantom_library.py +159 -0
  67. simind_python_connector-2.0.1/examples/phantoms/plot_10_nema_osem.py +256 -0
  68. simind_python_connector-2.0.1/examples/real_data/README.rst +53 -0
  69. simind_python_connector-2.0.1/examples/real_data/plot_16a_stir_ct_conversion.py +772 -0
  70. simind_python_connector-2.0.1/examples/real_data/plot_16b_sirf_ct_conversion.py +742 -0
  71. simind_python_connector-2.0.1/examples/real_data/plot_16c_pytomography_ct_conversion.py +851 -0
  72. simind_python_connector-2.0.1/examples/real_data/plot_17_y90_effective_energy.py +1036 -0
  73. simind_python_connector-2.0.1/examples/real_data/plot_18_y90_mc_scatter.py +2584 -0
  74. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/pyproject.toml +35 -6
  75. simind_python_connector-2.0.1/scripts/build_gallery.sh +79 -0
  76. simind_python_connector-2.0.1/scripts/check_gallery_current.py +29 -0
  77. simind_python_connector-2.0.1/scripts/check_simind_mpi.py +81 -0
  78. simind_python_connector-2.0.1/scripts/check_wheel_resources.py +116 -0
  79. simind_python_connector-2.0.1/scripts/fix.sh +14 -0
  80. simind_python_connector-2.0.1/scripts/make_y90_bundle.py +112 -0
  81. simind_python_connector-2.0.1/scripts/prepare_release.py +229 -0
  82. simind_python_connector-2.0.1/scripts/release.sh +97 -0
  83. simind_python_connector-2.0.1/scripts/run_all_examples.py +270 -0
  84. simind_python_connector-2.0.1/scripts/run_container_examples.sh +292 -0
  85. simind_python_connector-2.0.1/scripts/run_container_validation.sh +349 -0
  86. simind_python_connector-2.0.1/scripts/run_validation.sh +147 -0
  87. simind_python_connector-2.0.1/scripts/validation_report.py +103 -0
  88. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/__init__.py +3 -3
  89. simind_python_connector-2.0.1/simind_python_connector/builders/_native.py +92 -0
  90. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/builders/acquisition_builder.py +97 -104
  91. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/builders/image_builder.py +16 -72
  92. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/__init__.py +10 -4
  93. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/connectors/__init__.py +0 -2
  94. simind_python_connector-2.0.1/simind_python_connector/connectors/_native_adaptor.py +471 -0
  95. simind_python_connector-2.0.1/simind_python_connector/connectors/python_connector.py +1387 -0
  96. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/connectors/pytomography_adaptor.py +94 -28
  97. simind_python_connector-2.0.1/simind_python_connector/connectors/sirf_adaptor.py +43 -0
  98. simind_python_connector-2.0.1/simind_python_connector/connectors/stir_adaptor.py +45 -0
  99. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/converters/__init__.py +2 -2
  100. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/converters/attenuation.py +48 -51
  101. simind_python_connector-2.0.1/simind_python_connector/converters/simind_to_stir.py +473 -0
  102. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/core/config.py +432 -123
  103. simind_python_connector-2.0.1/simind_python_connector/core/executor.py +358 -0
  104. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/core/types.py +16 -25
  105. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/data/__init__.py +3 -3
  106. simind_python_connector-2.0.1/simind_python_connector/data/bone.atn +178 -0
  107. simind_python_connector-2.0.1/simind_python_connector/data/h2o.atn +84 -0
  108. simind_python_connector-2.0.1/simind_python_connector/datasets.py +67 -0
  109. simind_python_connector-2.0.1/simind_python_connector/normalisation.py +90 -0
  110. simind_python_connector-2.0.1/simind_python_connector/phantoms.py +390 -0
  111. simind_python_connector-2.0.1/simind_python_connector/recon/__init__.py +43 -0
  112. simind_python_connector-2.0.1/simind_python_connector/recon/cil.py +185 -0
  113. simind_python_connector-2.0.1/simind_python_connector/recon/corrections.py +150 -0
  114. simind_python_connector-2.0.1/simind_python_connector/recon/diagnostics.py +41 -0
  115. simind_python_connector-2.0.1/simind_python_connector/recon/osem.py +59 -0
  116. simind_python_connector-2.0.1/simind_python_connector/recon/projector.py +141 -0
  117. simind_python_connector-2.0.1/simind_python_connector/recon/updates.py +88 -0
  118. simind_python_connector-2.0.1/simind_python_connector/utils/__init__.py +69 -0
  119. simind_python_connector-2.0.1/simind_python_connector/utils/interfile.py +690 -0
  120. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/utils/simind_utils.py +23 -28
  121. simind_python_connector-2.0.1/simind_python_connector.egg-info/SOURCES.txt +213 -0
  122. simind_python_connector-2.0.1/tests/conftest.py +53 -0
  123. simind_python_connector-2.0.1/tests/fixtures/golden/circular.hs +37 -0
  124. simind_python_connector-2.0.1/tests/fixtures/golden/ignored_substrings.hs +5 -0
  125. simind_python_connector-2.0.1/tests/fixtures/golden/orbit.hs +39 -0
  126. simind_python_connector-2.0.1/tests/fixtures/golden/penetrate_component_12.hs +8 -0
  127. simind_python_connector-2.0.1/tests/fixtures/minimal_variable_sections.smc +36 -0
  128. simind_python_connector-2.0.1/tests/recon/__init__.py +0 -0
  129. simind_python_connector-2.0.1/tests/recon/conftest.py +138 -0
  130. simind_python_connector-2.0.1/tests/recon/fakes.py +93 -0
  131. simind_python_connector-2.0.1/tests/recon/test_cil_functions.py +46 -0
  132. simind_python_connector-2.0.1/tests/recon/test_cil_sirf.py +229 -0
  133. simind_python_connector-2.0.1/tests/recon/test_corrections.py +179 -0
  134. simind_python_connector-2.0.1/tests/recon/test_diagnostics.py +60 -0
  135. simind_python_connector-2.0.1/tests/recon/test_import_boundary.py +38 -0
  136. simind_python_connector-2.0.1/tests/recon/test_osem_sirf.py +113 -0
  137. simind_python_connector-2.0.1/tests/recon/test_projector.py +193 -0
  138. simind_python_connector-2.0.1/tests/recon/test_residual.py +77 -0
  139. simind_python_connector-2.0.1/tests/recon/test_residual_cil.py +52 -0
  140. simind_python_connector-2.0.1/tests/recon/test_residual_sirf.py +137 -0
  141. simind_python_connector-2.0.1/tests/recon/test_updates.py +146 -0
  142. simind_python_connector-2.0.1/tests/test_acquisition_builder_unit.py +350 -0
  143. simind_python_connector-2.0.1/tests/test_attenuation_utils.py +68 -0
  144. simind_python_connector-2.0.1/tests/test_builders_lifetime.py +74 -0
  145. simind_python_connector-2.0.1/tests/test_builders_native.py +162 -0
  146. simind_python_connector-2.0.1/tests/test_configure_phantom.py +404 -0
  147. simind_python_connector-2.0.1/tests/test_connector_backend_separation.py +199 -0
  148. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/tests/test_container_library_isolation.py +8 -1
  149. simind_python_connector-2.0.1/tests/test_container_scripts.py +375 -0
  150. simind_python_connector-2.0.1/tests/test_converter_golden.py +128 -0
  151. simind_python_connector-2.0.1/tests/test_datasets.py +71 -0
  152. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/tests/test_dicom_builder.py +66 -7
  153. simind_python_connector-2.0.1/tests/test_energy_window_filename_simind.py +34 -0
  154. simind_python_connector-2.0.1/tests/test_examples_backend_separation.py +77 -0
  155. simind_python_connector-2.0.1/tests/test_executor.py +604 -0
  156. simind_python_connector-2.0.1/tests/test_gallery_config.py +114 -0
  157. simind_python_connector-2.0.1/tests/test_ground_truth_sirf.py +38 -0
  158. simind_python_connector-2.0.1/tests/test_image_builder_unit.py +108 -0
  159. simind_python_connector-2.0.1/tests/test_import_side_effects.py +31 -0
  160. simind_python_connector-2.0.1/tests/test_interfile.py +1334 -0
  161. simind_python_connector-2.0.1/tests/test_make_y90_bundle.py +82 -0
  162. simind_python_connector-2.0.1/tests/test_marker_policy.py +67 -0
  163. simind_python_connector-2.0.1/tests/test_measured_geometry_simind.py +252 -0
  164. simind_python_connector-2.0.1/tests/test_native_adaptors.py +1460 -0
  165. simind_python_connector-2.0.1/tests/test_nema_phantom.py +95 -0
  166. simind_python_connector-2.0.1/tests/test_non_square_slices_simind.py +62 -0
  167. simind_python_connector-2.0.1/tests/test_normalisation.py +98 -0
  168. simind_python_connector-2.0.1/tests/test_packaging_resources.py +165 -0
  169. simind_python_connector-2.0.1/tests/test_phantoms.py +102 -0
  170. simind_python_connector-2.0.1/tests/test_phantoms_simind.py +249 -0
  171. simind_python_connector-2.0.1/tests/test_python_connector.py +3618 -0
  172. simind_python_connector-2.0.1/tests/test_pytomography_adaptor.py +625 -0
  173. simind_python_connector-2.0.1/tests/test_release_regressions_simind.py +311 -0
  174. simind_python_connector-2.0.1/tests/test_release_tools.py +782 -0
  175. simind_python_connector-2.0.1/tests/test_runtime_switches.py +191 -0
  176. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/tests/test_schneider_density.py +24 -0
  177. simind_python_connector-2.0.1/tests/test_simind_mpi.py +29 -0
  178. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/tests/test_simind_to_stir_converter.py +355 -31
  179. simind_python_connector-2.0.1/tests/test_simulation_config.py +548 -0
  180. simind_python_connector-2.0.1/tests/test_template_geometry_sirf.py +97 -0
  181. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/tests/test_utils_small.py +1 -29
  182. simind_python_connector-2.0.1/tests/test_validation_framework.py +129 -0
  183. simind_python_connector-2.0.1/tests/test_voxelise.py +130 -0
  184. simind_python_connector-2.0.1/tests/test_y90_ct_conversion.py +673 -0
  185. simind_python_connector-2.0.1/tests/test_y90_reconstruction.py +772 -0
  186. simind_python_connector-2.0.1/tests/test_y90_spectra.py +300 -0
  187. simind_python_connector-2.0.1/tests/validation/__init__.py +0 -0
  188. simind_python_connector-2.0.1/tests/validation/conftest.py +155 -0
  189. simind_python_connector-2.0.1/tests/validation/test_activity.py +98 -0
  190. simind_python_connector-2.0.1/tests/validation/test_anisotropic_voxels.py +110 -0
  191. simind_python_connector-2.0.1/tests/validation/test_backend_agreement.py +274 -0
  192. simind_python_connector-2.0.1/tests/validation/test_cil.py +288 -0
  193. simind_python_connector-2.0.1/tests/validation/test_interfile.py +130 -0
  194. simind_python_connector-2.0.1/tests/validation/test_measured_geometry.py +81 -0
  195. simind_python_connector-2.0.1/tests/validation/test_mpi.py +188 -0
  196. simind_python_connector-2.0.1/tests/validation/test_mu_map.py +168 -0
  197. simind_python_connector-2.0.1/tests/validation/test_phantoms.py +280 -0
  198. simind_python_connector-2.0.1/tests/validation/test_recon.py +418 -0
  199. simind_python_connector-2.0.1/tests/validation/test_runtime_switches.py +338 -0
  200. simind_python_connector-2.0.1/tests/validation/test_scale_to_reference.py +194 -0
  201. simind_python_connector-2.0.1/tests/validation/test_versions.py +85 -0
  202. simind_python_connector-2.0.1/uv.lock +2489 -0
  203. simind_python_connector-2.0.0/MANIFEST.in +0 -13
  204. simind_python_connector-2.0.0/PKG-INFO +0 -283
  205. simind_python_connector-2.0.0/README.md +0 -240
  206. simind_python_connector-2.0.0/docs/backends.rst +0 -56
  207. simind_python_connector-2.0.0/docs/changelog.rst +0 -380
  208. simind_python_connector-2.0.0/docs/connector_modernization_plan.rst +0 -45
  209. simind_python_connector-2.0.0/docs/contributing.rst +0 -46
  210. simind_python_connector-2.0.0/docs/examples/01_basic_simulation.py +0 -93
  211. simind_python_connector-2.0.0/docs/examples/02_runtime_switch_comparison.py +0 -108
  212. simind_python_connector-2.0.0/docs/examples/03_multi_window.py +0 -120
  213. simind_python_connector-2.0.0/docs/examples/04_custom_config.py +0 -228
  214. simind_python_connector-2.0.0/docs/examples/05_scattwin_vs_penetrate_comparison.py +0 -473
  215. simind_python_connector-2.0.0/docs/examples/06_schneider_density_conversion.py +0 -322
  216. simind_python_connector-2.0.0/docs/examples/07A_stir_adaptor_osem.py +0 -211
  217. simind_python_connector-2.0.0/docs/examples/07B_sirf_adaptor_osem.py +0 -193
  218. simind_python_connector-2.0.0/docs/examples/07C_pytomography_adaptor_osem.py +0 -184
  219. simind_python_connector-2.0.0/docs/examples/08A_stir_adaptor_from_dicom.py +0 -64
  220. simind_python_connector-2.0.0/docs/examples/08B_sirf_adaptor_from_dicom.py +0 -64
  221. simind_python_connector-2.0.0/docs/examples/08C_pytomography_adaptor_from_dicom.py +0 -82
  222. simind_python_connector-2.0.0/docs/examples/_python_connector_helpers.py +0 -56
  223. simind_python_connector-2.0.0/docs/examples.rst +0 -125
  224. simind_python_connector-2.0.0/docs/geometry.rst +0 -64
  225. simind_python_connector-2.0.0/docs/usage.rst +0 -152
  226. simind_python_connector-2.0.0/examples/01_basic_simulation.py +0 -93
  227. simind_python_connector-2.0.0/examples/02_runtime_switch_comparison.py +0 -108
  228. simind_python_connector-2.0.0/examples/03_multi_window.py +0 -120
  229. simind_python_connector-2.0.0/examples/04_custom_config.py +0 -228
  230. simind_python_connector-2.0.0/examples/06_schneider_density_conversion.py +0 -322
  231. simind_python_connector-2.0.0/examples/07A_stir_adaptor_osem.py +0 -211
  232. simind_python_connector-2.0.0/examples/07B_sirf_adaptor_osem.py +0 -193
  233. simind_python_connector-2.0.0/examples/07C_pytomography_adaptor_osem.py +0 -184
  234. simind_python_connector-2.0.0/examples/08A_stir_adaptor_from_dicom.py +0 -64
  235. simind_python_connector-2.0.0/examples/08B_sirf_adaptor_from_dicom.py +0 -64
  236. simind_python_connector-2.0.0/examples/08C_pytomography_adaptor_from_dicom.py +0 -82
  237. simind_python_connector-2.0.0/requirements-dev.txt +0 -23
  238. simind_python_connector-2.0.0/requirements.txt +0 -10
  239. simind_python_connector-2.0.0/simind_python_connector/backends/__init__.py +0 -487
  240. simind_python_connector-2.0.0/simind_python_connector/backends/base.py +0 -387
  241. simind_python_connector-2.0.0/simind_python_connector/backends/sirf_backend.py +0 -309
  242. simind_python_connector-2.0.0/simind_python_connector/backends/stir_backend.py +0 -395
  243. simind_python_connector-2.0.0/simind_python_connector/connectors/_spacing.py +0 -75
  244. simind_python_connector-2.0.0/simind_python_connector/connectors/python_connector.py +0 -447
  245. simind_python_connector-2.0.0/simind_python_connector/connectors/sirf_adaptor.py +0 -167
  246. simind_python_connector-2.0.0/simind_python_connector/connectors/stir_adaptor.py +0 -167
  247. simind_python_connector-2.0.0/simind_python_connector/converters/dicom_to_stir.py +0 -3
  248. simind_python_connector-2.0.0/simind_python_connector/converters/simind_to_stir.py +0 -771
  249. simind_python_connector-2.0.0/simind_python_connector/core/executor.py +0 -125
  250. simind_python_connector-2.0.0/simind_python_connector/data/bone.atn +0 -187
  251. simind_python_connector-2.0.0/simind_python_connector/data/h2o.atn +0 -92
  252. simind_python_connector-2.0.0/simind_python_connector/utils/__init__.py +0 -120
  253. simind_python_connector-2.0.0/simind_python_connector/utils/backend_access.py +0 -121
  254. simind_python_connector-2.0.0/simind_python_connector/utils/import_helpers.py +0 -78
  255. simind_python_connector-2.0.0/simind_python_connector/utils/interfile_numpy.py +0 -205
  256. simind_python_connector-2.0.0/simind_python_connector/utils/interfile_parser.py +0 -177
  257. simind_python_connector-2.0.0/simind_python_connector/utils/io_utils.py +0 -14
  258. simind_python_connector-2.0.0/simind_python_connector/utils/sirf_stir_utils.py +0 -194
  259. simind_python_connector-2.0.0/simind_python_connector/utils/stir_utils.py +0 -490
  260. simind_python_connector-2.0.0/simind_python_connector.egg-info/PKG-INFO +0 -283
  261. simind_python_connector-2.0.0/simind_python_connector.egg-info/SOURCES.txt +0 -126
  262. simind_python_connector-2.0.0/simind_python_connector.egg-info/dependency_links.txt +0 -1
  263. simind_python_connector-2.0.0/simind_python_connector.egg-info/requires.txt +0 -19
  264. simind_python_connector-2.0.0/simind_python_connector.egg-info/top_level.txt +0 -1
  265. simind_python_connector-2.0.0/tests/conftest.py +0 -128
  266. simind_python_connector-2.0.0/tests/test_acquisition_builder_unit.py +0 -227
  267. simind_python_connector-2.0.0/tests/test_arithmetic_operations.py +0 -106
  268. simind_python_connector-2.0.0/tests/test_attenuation_utils.py +0 -116
  269. simind_python_connector-2.0.0/tests/test_backends.py +0 -367
  270. simind_python_connector-2.0.0/tests/test_connector_backend_separation.py +0 -118
  271. simind_python_connector-2.0.0/tests/test_connectors_base.py +0 -27
  272. simind_python_connector-2.0.0/tests/test_container_scripts.py +0 -290
  273. simind_python_connector-2.0.0/tests/test_example_config_profile.py +0 -40
  274. simind_python_connector-2.0.0/tests/test_examples_backend_separation.py +0 -74
  275. simind_python_connector-2.0.0/tests/test_executor.py +0 -217
  276. simind_python_connector-2.0.0/tests/test_geometry_isolation_forward_projection.py +0 -352
  277. simind_python_connector-2.0.0/tests/test_image_builder_unit.py +0 -113
  278. simind_python_connector-2.0.0/tests/test_interfile_numpy.py +0 -295
  279. simind_python_connector-2.0.0/tests/test_interfile_parser.py +0 -41
  280. simind_python_connector-2.0.0/tests/test_legacy_surface_policy.py +0 -20
  281. simind_python_connector-2.0.0/tests/test_marker_policy.py +0 -117
  282. simind_python_connector-2.0.0/tests/test_native_adaptors.py +0 -485
  283. simind_python_connector-2.0.0/tests/test_osem_geometry_diagnostics.py +0 -363
  284. simind_python_connector-2.0.0/tests/test_package_identity.py +0 -18
  285. simind_python_connector-2.0.0/tests/test_packaging_resources.py +0 -113
  286. simind_python_connector-2.0.0/tests/test_python_connector.py +0 -615
  287. simind_python_connector-2.0.0/tests/test_pytomography_adaptor.py +0 -275
  288. simind_python_connector-2.0.0/tests/test_simulation_config.py +0 -208
  289. simind_python_connector-2.0.0/tests/test_sirf_stir_utils.py +0 -56
  290. simind_python_connector-2.0.0/tests/test_stir_utils_backend_choice_unit.py +0 -78
  291. simind_python_connector-2.0.0/tests/test_utils.py +0 -134
  292. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/LICENSE +0 -0
  293. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/docs/intro.rst +0 -0
  294. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/setup.cfg +0 -0
  295. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/builders/__init__.py +0 -0
  296. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/AnyScan.yaml +0 -0
  297. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/Discovery670.yaml +0 -0
  298. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/Example.yaml +0 -0
  299. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/MLD001_SCAN0.yaml +0 -0
  300. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/input.smc +0 -0
  301. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/connectors/base.py +0 -0
  302. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/core/__init__.py +0 -0
  303. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/simind_python_connector/data/Schneider2000.json +0 -0
  304. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/tests/__init__.py +0 -0
  305. {simind_python_connector-2.0.0 → simind_python_connector-2.0.1}/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,53 @@
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 without executing examples
41
+ env:
42
+ SIMIND_GALLERY_BACKEND: ""
43
+ run: |
44
+ python -m sphinx -b html -W --keep-going docs docs/_build/html
45
+ - name: Check the generated gallery indexes are committed
46
+ run: |
47
+ git status --porcelain -- docs/auto_examples
48
+ test -z "$(git status --porcelain -- docs/auto_examples)"
49
+ - name: Upload the built documentation
50
+ uses: actions/upload-artifact@v4
51
+ with:
52
+ name: documentation
53
+ 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 gallery outputs are current
39
+ run: python scripts/check_gallery_current.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 and not macos_v9" --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.1"
35
+ }