simind-python-connector 1.2.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 (303) 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-1.2.0 → simind_python_connector-2.0.1}/docker/README.md +5 -6
  13. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docker/compose.yaml +8 -8
  14. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docker/constraints.txt +0 -2
  15. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docker/python/Dockerfile +3 -2
  16. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docker/python/install_mpich_compat.sh +3 -1
  17. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docker/pytomography/Dockerfile +18 -4
  18. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docker/sirf/Dockerfile +16 -4
  19. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docker/stir/Dockerfile +19 -4
  20. simind_python_connector-2.0.1/docs/LICENSE +195 -0
  21. simind_python_connector-2.0.1/docs/_gallery.py +65 -0
  22. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docs/api.rst +41 -11
  23. simind_python_connector-2.0.1/docs/backends.rst +92 -0
  24. simind_python_connector-2.0.1/docs/changelog.rst +866 -0
  25. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docs/conf.py +56 -5
  26. simind_python_connector-2.0.1/docs/contributing.rst +129 -0
  27. simind_python_connector-2.0.1/docs/datasets.rst +95 -0
  28. simind_python_connector-2.0.1/docs/examples.rst +36 -0
  29. simind_python_connector-2.0.1/docs/geometry.rst +194 -0
  30. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docs/index.rst +20 -3
  31. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docs/installation.rst +22 -21
  32. simind_python_connector-2.0.1/docs/normalisation.rst +164 -0
  33. simind_python_connector-2.0.1/docs/phantoms.rst +126 -0
  34. simind_python_connector-2.0.1/docs/reconstruction.rst +295 -0
  35. simind_python_connector-2.0.1/docs/simind_validation.md +210 -0
  36. simind_python_connector-2.0.1/docs/spectub_cache_interference.md +143 -0
  37. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docs/testing.rst +121 -31
  38. simind_python_connector-2.0.1/docs/tutorial.rst +217 -0
  39. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docs/usage.rst +71 -77
  40. simind_python_connector-2.0.1/examples/README.rst +5 -0
  41. simind_python_connector-2.0.1/examples/backends/README.rst +2 -0
  42. simind_python_connector-2.0.1/examples/backends/plot_07a_stir_adaptor_osem.py +233 -0
  43. simind_python_connector-2.0.1/examples/backends/plot_07b_sirf_adaptor_osem.py +218 -0
  44. simind_python_connector-2.0.1/examples/backends/plot_07c_pytomography_adaptor_osem.py +209 -0
  45. simind_python_connector-2.0.1/examples/backends/plot_08a_stir_adaptor_from_dicom.py +86 -0
  46. simind_python_connector-2.0.1/examples/backends/plot_08b_sirf_adaptor_from_dicom.py +80 -0
  47. simind_python_connector-2.0.1/examples/backends/plot_08c_pytomography_adaptor_from_dicom.py +76 -0
  48. simind_python_connector-2.0.1/examples/cil/README.rst +2 -0
  49. simind_python_connector-2.0.1/examples/cil/plot_14_cil_scatter.py +365 -0
  50. simind_python_connector-2.0.1/examples/cil/plot_15_cil_rdp_svrg.py +438 -0
  51. simind_python_connector-2.0.1/examples/getting_started/README.rst +2 -0
  52. simind_python_connector-2.0.1/examples/getting_started/plot_01_basic_simulation.py +109 -0
  53. simind_python_connector-2.0.1/examples/getting_started/plot_02_runtime_switch_comparison.py +131 -0
  54. simind_python_connector-2.0.1/examples/getting_started/plot_03_multi_window.py +146 -0
  55. simind_python_connector-2.0.1/examples/getting_started/plot_04_custom_config.py +122 -0
  56. simind_python_connector-1.2.0/examples/05_scattwin_vs_penetrate_comparison.py → simind_python_connector-2.0.1/examples/getting_started/plot_05_scattwin_vs_penetrate_comparison.py +176 -129
  57. simind_python_connector-2.0.1/examples/getting_started/plot_06_schneider_density_conversion.py +226 -0
  58. simind_python_connector-2.0.1/examples/mc_scatter/README.rst +2 -0
  59. simind_python_connector-2.0.1/examples/mc_scatter/plot_11_mc_scatter_osem.py +376 -0
  60. simind_python_connector-2.0.1/examples/mc_scatter/plot_12_scatter_normalisation.py +558 -0
  61. simind_python_connector-2.0.1/examples/mc_scatter/plot_13_residual_correction.py +430 -0
  62. simind_python_connector-2.0.1/examples/phantoms/README.rst +2 -0
  63. simind_python_connector-2.0.1/examples/phantoms/plot_09_phantom_library.py +159 -0
  64. simind_python_connector-2.0.1/examples/phantoms/plot_10_nema_osem.py +256 -0
  65. simind_python_connector-2.0.1/examples/real_data/README.rst +53 -0
  66. simind_python_connector-2.0.1/examples/real_data/plot_16a_stir_ct_conversion.py +772 -0
  67. simind_python_connector-2.0.1/examples/real_data/plot_16b_sirf_ct_conversion.py +742 -0
  68. simind_python_connector-2.0.1/examples/real_data/plot_16c_pytomography_ct_conversion.py +851 -0
  69. simind_python_connector-2.0.1/examples/real_data/plot_17_y90_effective_energy.py +1036 -0
  70. simind_python_connector-2.0.1/examples/real_data/plot_18_y90_mc_scatter.py +2584 -0
  71. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/pyproject.toml +26 -19
  72. simind_python_connector-2.0.1/scripts/build_gallery.sh +79 -0
  73. simind_python_connector-2.0.1/scripts/check_gallery_current.py +29 -0
  74. simind_python_connector-2.0.1/scripts/check_simind_mpi.py +81 -0
  75. simind_python_connector-2.0.1/scripts/check_wheel_resources.py +116 -0
  76. simind_python_connector-2.0.1/scripts/make_y90_bundle.py +112 -0
  77. simind_python_connector-2.0.1/scripts/prepare_release.py +229 -0
  78. simind_python_connector-2.0.1/scripts/release.sh +97 -0
  79. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/scripts/run_all_examples.py +12 -12
  80. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/scripts/run_container_examples.sh +19 -16
  81. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/scripts/run_container_validation.sh +44 -18
  82. simind_python_connector-2.0.1/scripts/run_validation.sh +147 -0
  83. simind_python_connector-2.0.1/scripts/validation_report.py +103 -0
  84. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/__init__.py +13 -4
  85. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/builders/__init__.py +2 -2
  86. simind_python_connector-2.0.1/simind_python_connector/builders/_native.py +92 -0
  87. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/builders/acquisition_builder.py +76 -93
  88. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/builders/image_builder.py +17 -76
  89. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/__init__.py +12 -5
  90. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/connectors/__init__.py +2 -4
  91. simind_python_connector-2.0.1/simind_python_connector/connectors/_native_adaptor.py +471 -0
  92. simind_python_connector-2.0.1/simind_python_connector/connectors/base.py +40 -0
  93. simind_python_connector-2.0.1/simind_python_connector/connectors/python_connector.py +1387 -0
  94. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/connectors/pytomography_adaptor.py +89 -49
  95. simind_python_connector-2.0.1/simind_python_connector/connectors/sirf_adaptor.py +43 -0
  96. simind_python_connector-2.0.1/simind_python_connector/connectors/stir_adaptor.py +45 -0
  97. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/converters/__init__.py +2 -2
  98. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/converters/attenuation.py +43 -35
  99. simind_python_connector-2.0.1/simind_python_connector/converters/simind_to_stir.py +473 -0
  100. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/core/config.py +120 -156
  101. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/core/executor.py +168 -183
  102. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/core/types.py +3 -25
  103. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/data/__init__.py +3 -5
  104. simind_python_connector-2.0.1/simind_python_connector/data/bone.atn +178 -0
  105. simind_python_connector-2.0.1/simind_python_connector/data/h2o.atn +84 -0
  106. simind_python_connector-2.0.1/simind_python_connector/datasets.py +67 -0
  107. simind_python_connector-2.0.1/simind_python_connector/normalisation.py +90 -0
  108. simind_python_connector-2.0.1/simind_python_connector/phantoms.py +390 -0
  109. simind_python_connector-2.0.1/simind_python_connector/recon/__init__.py +43 -0
  110. simind_python_connector-2.0.1/simind_python_connector/recon/cil.py +185 -0
  111. simind_python_connector-2.0.1/simind_python_connector/recon/corrections.py +150 -0
  112. simind_python_connector-2.0.1/simind_python_connector/recon/diagnostics.py +41 -0
  113. simind_python_connector-2.0.1/simind_python_connector/recon/osem.py +59 -0
  114. simind_python_connector-2.0.1/simind_python_connector/recon/projector.py +141 -0
  115. simind_python_connector-2.0.1/simind_python_connector/recon/updates.py +88 -0
  116. simind_python_connector-2.0.1/simind_python_connector/utils/__init__.py +69 -0
  117. simind_python_connector-2.0.1/simind_python_connector/utils/interfile.py +690 -0
  118. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/utils/simind_utils.py +8 -36
  119. simind_python_connector-2.0.1/simind_python_connector.egg-info/SOURCES.txt +213 -0
  120. simind_python_connector-2.0.1/tests/conftest.py +53 -0
  121. simind_python_connector-2.0.1/tests/fixtures/golden/circular.hs +37 -0
  122. simind_python_connector-2.0.1/tests/fixtures/golden/ignored_substrings.hs +5 -0
  123. simind_python_connector-2.0.1/tests/fixtures/golden/orbit.hs +39 -0
  124. simind_python_connector-2.0.1/tests/fixtures/golden/penetrate_component_12.hs +8 -0
  125. simind_python_connector-2.0.1/tests/recon/__init__.py +0 -0
  126. simind_python_connector-2.0.1/tests/recon/conftest.py +138 -0
  127. simind_python_connector-2.0.1/tests/recon/fakes.py +93 -0
  128. simind_python_connector-2.0.1/tests/recon/test_cil_functions.py +46 -0
  129. simind_python_connector-2.0.1/tests/recon/test_cil_sirf.py +229 -0
  130. simind_python_connector-2.0.1/tests/recon/test_corrections.py +179 -0
  131. simind_python_connector-2.0.1/tests/recon/test_diagnostics.py +60 -0
  132. simind_python_connector-2.0.1/tests/recon/test_import_boundary.py +38 -0
  133. simind_python_connector-2.0.1/tests/recon/test_osem_sirf.py +113 -0
  134. simind_python_connector-2.0.1/tests/recon/test_projector.py +193 -0
  135. simind_python_connector-2.0.1/tests/recon/test_residual.py +77 -0
  136. simind_python_connector-2.0.1/tests/recon/test_residual_cil.py +52 -0
  137. simind_python_connector-2.0.1/tests/recon/test_residual_sirf.py +137 -0
  138. simind_python_connector-2.0.1/tests/recon/test_updates.py +146 -0
  139. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_acquisition_builder_unit.py +139 -34
  140. simind_python_connector-2.0.1/tests/test_attenuation_utils.py +68 -0
  141. simind_python_connector-2.0.1/tests/test_builders_lifetime.py +74 -0
  142. simind_python_connector-2.0.1/tests/test_builders_native.py +162 -0
  143. simind_python_connector-2.0.1/tests/test_configure_phantom.py +404 -0
  144. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_connector_backend_separation.py +30 -42
  145. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_container_library_isolation.py +1 -1
  146. simind_python_connector-2.0.1/tests/test_container_scripts.py +375 -0
  147. simind_python_connector-2.0.1/tests/test_converter_golden.py +128 -0
  148. simind_python_connector-2.0.1/tests/test_datasets.py +71 -0
  149. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_dicom_builder.py +54 -22
  150. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_energy_window_filename_simind.py +2 -1
  151. simind_python_connector-2.0.1/tests/test_examples_backend_separation.py +77 -0
  152. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_executor.py +229 -186
  153. simind_python_connector-2.0.1/tests/test_gallery_config.py +114 -0
  154. simind_python_connector-2.0.1/tests/test_ground_truth_sirf.py +38 -0
  155. simind_python_connector-2.0.1/tests/test_image_builder_unit.py +108 -0
  156. simind_python_connector-2.0.1/tests/test_import_side_effects.py +31 -0
  157. simind_python_connector-2.0.1/tests/test_integration.py +38 -0
  158. simind_python_connector-2.0.1/tests/test_interfile.py +1334 -0
  159. simind_python_connector-2.0.1/tests/test_make_y90_bundle.py +82 -0
  160. simind_python_connector-2.0.1/tests/test_marker_policy.py +67 -0
  161. simind_python_connector-2.0.1/tests/test_measured_geometry_simind.py +252 -0
  162. simind_python_connector-2.0.1/tests/test_native_adaptors.py +1460 -0
  163. simind_python_connector-2.0.1/tests/test_nema_phantom.py +95 -0
  164. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_non_square_slices_simind.py +8 -11
  165. simind_python_connector-2.0.1/tests/test_normalisation.py +98 -0
  166. simind_python_connector-2.0.1/tests/test_packaging_resources.py +165 -0
  167. simind_python_connector-2.0.1/tests/test_phantoms.py +102 -0
  168. simind_python_connector-2.0.1/tests/test_phantoms_simind.py +249 -0
  169. simind_python_connector-2.0.1/tests/test_python_connector.py +3618 -0
  170. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_pytomography_adaptor.py +258 -110
  171. simind_python_connector-2.0.1/tests/test_release_regressions_simind.py +311 -0
  172. simind_python_connector-2.0.1/tests/test_release_tools.py +782 -0
  173. simind_python_connector-2.0.1/tests/test_runtime_switches.py +191 -0
  174. simind_python_connector-2.0.1/tests/test_schneider_density.py +322 -0
  175. simind_python_connector-2.0.1/tests/test_simind_mpi.py +29 -0
  176. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_simind_to_stir_converter.py +235 -165
  177. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_simulation_config.py +104 -82
  178. simind_python_connector-2.0.1/tests/test_template_geometry_sirf.py +97 -0
  179. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/test_utils_small.py +1 -61
  180. simind_python_connector-2.0.1/tests/test_validation_framework.py +129 -0
  181. simind_python_connector-2.0.1/tests/test_voxelise.py +130 -0
  182. simind_python_connector-2.0.1/tests/test_y90_ct_conversion.py +673 -0
  183. simind_python_connector-2.0.1/tests/test_y90_reconstruction.py +772 -0
  184. simind_python_connector-2.0.1/tests/test_y90_spectra.py +300 -0
  185. simind_python_connector-2.0.1/tests/validation/__init__.py +0 -0
  186. simind_python_connector-2.0.1/tests/validation/conftest.py +155 -0
  187. simind_python_connector-2.0.1/tests/validation/test_activity.py +98 -0
  188. simind_python_connector-2.0.1/tests/validation/test_anisotropic_voxels.py +110 -0
  189. simind_python_connector-2.0.1/tests/validation/test_backend_agreement.py +274 -0
  190. simind_python_connector-2.0.1/tests/validation/test_cil.py +288 -0
  191. simind_python_connector-2.0.1/tests/validation/test_interfile.py +130 -0
  192. simind_python_connector-2.0.1/tests/validation/test_measured_geometry.py +81 -0
  193. simind_python_connector-2.0.1/tests/validation/test_mpi.py +188 -0
  194. simind_python_connector-2.0.1/tests/validation/test_mu_map.py +168 -0
  195. simind_python_connector-2.0.1/tests/validation/test_phantoms.py +280 -0
  196. simind_python_connector-2.0.1/tests/validation/test_recon.py +418 -0
  197. simind_python_connector-2.0.1/tests/validation/test_runtime_switches.py +338 -0
  198. simind_python_connector-2.0.1/tests/validation/test_scale_to_reference.py +194 -0
  199. simind_python_connector-2.0.1/tests/validation/test_versions.py +85 -0
  200. simind_python_connector-2.0.1/uv.lock +2489 -0
  201. simind_python_connector-1.2.0/.dockerignore +0 -17
  202. simind_python_connector-1.2.0/MANIFEST.in +0 -20
  203. simind_python_connector-1.2.0/PKG-INFO +0 -301
  204. simind_python_connector-1.2.0/README.md +0 -259
  205. simind_python_connector-1.2.0/docs/backends.rst +0 -57
  206. simind_python_connector-1.2.0/docs/changelog.rst +0 -670
  207. simind_python_connector-1.2.0/docs/connector_modernization_plan.rst +0 -45
  208. simind_python_connector-1.2.0/docs/contributing.rst +0 -67
  209. simind_python_connector-1.2.0/docs/examples/01_basic_simulation.py +0 -95
  210. simind_python_connector-1.2.0/docs/examples/02_runtime_switch_comparison.py +0 -110
  211. simind_python_connector-1.2.0/docs/examples/03_multi_window.py +0 -122
  212. simind_python_connector-1.2.0/docs/examples/04_custom_config.py +0 -228
  213. simind_python_connector-1.2.0/docs/examples/05_scattwin_vs_penetrate_comparison.py +0 -478
  214. simind_python_connector-1.2.0/docs/examples/06_schneider_density_conversion.py +0 -322
  215. simind_python_connector-1.2.0/docs/examples/07A_stir_adaptor_osem.py +0 -208
  216. simind_python_connector-1.2.0/docs/examples/07B_sirf_adaptor_osem.py +0 -190
  217. simind_python_connector-1.2.0/docs/examples/07C_pytomography_adaptor_osem.py +0 -175
  218. simind_python_connector-1.2.0/docs/examples/08A_stir_adaptor_from_dicom.py +0 -64
  219. simind_python_connector-1.2.0/docs/examples/08B_sirf_adaptor_from_dicom.py +0 -64
  220. simind_python_connector-1.2.0/docs/examples/08C_pytomography_adaptor_from_dicom.py +0 -82
  221. simind_python_connector-1.2.0/docs/examples.rst +0 -125
  222. simind_python_connector-1.2.0/docs/geometry.rst +0 -122
  223. simind_python_connector-1.2.0/examples/01_basic_simulation.py +0 -95
  224. simind_python_connector-1.2.0/examples/02_runtime_switch_comparison.py +0 -110
  225. simind_python_connector-1.2.0/examples/03_multi_window.py +0 -122
  226. simind_python_connector-1.2.0/examples/04_custom_config.py +0 -228
  227. simind_python_connector-1.2.0/examples/06_schneider_density_conversion.py +0 -322
  228. simind_python_connector-1.2.0/examples/07A_stir_adaptor_osem.py +0 -208
  229. simind_python_connector-1.2.0/examples/07B_sirf_adaptor_osem.py +0 -190
  230. simind_python_connector-1.2.0/examples/07C_pytomography_adaptor_osem.py +0 -175
  231. simind_python_connector-1.2.0/examples/08A_stir_adaptor_from_dicom.py +0 -64
  232. simind_python_connector-1.2.0/examples/08B_sirf_adaptor_from_dicom.py +0 -64
  233. simind_python_connector-1.2.0/examples/08C_pytomography_adaptor_from_dicom.py +0 -82
  234. simind_python_connector-1.2.0/examples/_python_connector_helpers.py +0 -57
  235. simind_python_connector-1.2.0/examples/run_all_examples.sh +0 -246
  236. simind_python_connector-1.2.0/scripts/release.sh +0 -127
  237. simind_python_connector-1.2.0/simind_python_connector/_version.py +0 -3
  238. simind_python_connector-1.2.0/simind_python_connector/backends/__init__.py +0 -490
  239. simind_python_connector-1.2.0/simind_python_connector/backends/base.py +0 -342
  240. simind_python_connector-1.2.0/simind_python_connector/backends/sirf_backend.py +0 -305
  241. simind_python_connector-1.2.0/simind_python_connector/backends/stir_backend.py +0 -423
  242. simind_python_connector-1.2.0/simind_python_connector/connectors/_spacing.py +0 -187
  243. simind_python_connector-1.2.0/simind_python_connector/connectors/base.py +0 -73
  244. simind_python_connector-1.2.0/simind_python_connector/connectors/python_connector.py +0 -825
  245. simind_python_connector-1.2.0/simind_python_connector/connectors/sirf_adaptor.py +0 -208
  246. simind_python_connector-1.2.0/simind_python_connector/connectors/stir_adaptor.py +0 -211
  247. simind_python_connector-1.2.0/simind_python_connector/converters/dicom_to_stir.py +0 -3
  248. simind_python_connector-1.2.0/simind_python_connector/converters/simind_to_stir.py +0 -812
  249. simind_python_connector-1.2.0/simind_python_connector/data/bone.atn +0 -187
  250. simind_python_connector-1.2.0/simind_python_connector/data/h2o.atn +0 -92
  251. simind_python_connector-1.2.0/simind_python_connector/utils/__init__.py +0 -110
  252. simind_python_connector-1.2.0/simind_python_connector/utils/backend_access.py +0 -121
  253. simind_python_connector-1.2.0/simind_python_connector/utils/geometry_phantom.py +0 -42
  254. simind_python_connector-1.2.0/simind_python_connector/utils/import_helpers.py +0 -105
  255. simind_python_connector-1.2.0/simind_python_connector/utils/interfile_numpy.py +0 -226
  256. simind_python_connector-1.2.0/simind_python_connector/utils/interfile_parser.py +0 -185
  257. simind_python_connector-1.2.0/simind_python_connector/utils/io_utils.py +0 -14
  258. simind_python_connector-1.2.0/simind_python_connector/utils/sirf_stir_utils.py +0 -194
  259. simind_python_connector-1.2.0/simind_python_connector/utils/stir_utils.py +0 -484
  260. simind_python_connector-1.2.0/simind_python_connector.egg-info/PKG-INFO +0 -301
  261. simind_python_connector-1.2.0/simind_python_connector.egg-info/SOURCES.txt +0 -145
  262. simind_python_connector-1.2.0/simind_python_connector.egg-info/dependency_links.txt +0 -1
  263. simind_python_connector-1.2.0/simind_python_connector.egg-info/requires.txt +0 -19
  264. simind_python_connector-1.2.0/simind_python_connector.egg-info/top_level.txt +0 -1
  265. simind_python_connector-1.2.0/tests/conftest.py +0 -47
  266. simind_python_connector-1.2.0/tests/test_adaptor_release_simind.py +0 -159
  267. simind_python_connector-1.2.0/tests/test_anisotropic_voxels_simind.py +0 -54
  268. simind_python_connector-1.2.0/tests/test_arithmetic_operations.py +0 -84
  269. simind_python_connector-1.2.0/tests/test_attenuation_utils.py +0 -129
  270. simind_python_connector-1.2.0/tests/test_backends.py +0 -279
  271. simind_python_connector-1.2.0/tests/test_container_scripts.py +0 -198
  272. simind_python_connector-1.2.0/tests/test_image_builder_unit.py +0 -143
  273. simind_python_connector-1.2.0/tests/test_integration.py +0 -33
  274. simind_python_connector-1.2.0/tests/test_interfile_numpy.py +0 -328
  275. simind_python_connector-1.2.0/tests/test_interfile_parser.py +0 -60
  276. simind_python_connector-1.2.0/tests/test_native_adaptors.py +0 -839
  277. simind_python_connector-1.2.0/tests/test_native_geometry_real.py +0 -56
  278. simind_python_connector-1.2.0/tests/test_packaging_resources.py +0 -118
  279. simind_python_connector-1.2.0/tests/test_patch_release_simind.py +0 -535
  280. simind_python_connector-1.2.0/tests/test_python_connector.py +0 -1478
  281. simind_python_connector-1.2.0/tests/test_release_versioning.py +0 -71
  282. simind_python_connector-1.2.0/tests/test_schneider_density.py +0 -104
  283. simind_python_connector-1.2.0/tests/test_single_window_simind.py +0 -49
  284. simind_python_connector-1.2.0/tests/test_sirf_stir_utils.py +0 -56
  285. simind_python_connector-1.2.0/tests/test_stir_backend_arithmetic.py +0 -181
  286. simind_python_connector-1.2.0/tests/test_stir_utils_backend_choice_unit.py +0 -78
  287. simind_python_connector-1.2.0/tests/test_utils.py +0 -99
  288. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/LICENSE +0 -0
  289. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docker/import_guard/sitecustomize.py +0 -0
  290. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docs/_static/.gitkeep +0 -0
  291. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/docs/intro.rst +0 -0
  292. {simind_python_connector-1.2.0/docs → simind_python_connector-2.0.1}/examples/_python_connector_helpers.py +0 -0
  293. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/scripts/fix.sh +0 -0
  294. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/setup.cfg +0 -0
  295. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/AnyScan.yaml +0 -0
  296. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/Discovery670.yaml +0 -0
  297. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/Example.yaml +0 -0
  298. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/MLD001_SCAN0.yaml +0 -0
  299. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/configs/input.smc +0 -0
  300. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/core/__init__.py +0 -0
  301. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/simind_python_connector/data/Schneider2000.json +0 -0
  302. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/__init__.py +0 -0
  303. {simind_python_connector-1.2.0 → simind_python_connector-2.0.1}/tests/fixtures/minimal_variable_sections.smc +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
+ }