nabu 2024.1.7__tar.gz → 2024.1.8.post1__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 (301) hide show
  1. {nabu-2024.1.7/nabu.egg-info → nabu-2024.1.8.post1}/PKG-INFO +1 -1
  2. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/__init__.py +1 -1
  3. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fullfield/chunked.py +8 -3
  4. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fullfield/processconfig.py +7 -2
  5. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fullfield/reconstruction.py +10 -0
  6. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/cone.py +22 -1
  7. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/test_cone.py +61 -2
  8. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/overlap.py +1 -1
  9. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/test_z_stitching.py +0 -13
  10. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/z_stitching.py +1 -1
  11. {nabu-2024.1.7 → nabu-2024.1.8.post1/nabu.egg-info}/PKG-INFO +1 -1
  12. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu.egg-info/requires.txt +2 -2
  13. {nabu-2024.1.7 → nabu-2024.1.8.post1}/pyproject.toml +2 -2
  14. {nabu-2024.1.7 → nabu-2024.1.8.post1}/LICENSE +0 -0
  15. {nabu-2024.1.7 → nabu-2024.1.8.post1}/README.md +0 -0
  16. {nabu-2024.1.7 → nabu-2024.1.8.post1}/doc/conf.py +0 -0
  17. {nabu-2024.1.7 → nabu-2024.1.8.post1}/doc/create_conf_doc.py +0 -0
  18. {nabu-2024.1.7 → nabu-2024.1.8.post1}/doc/get_mathjax.py +0 -0
  19. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/__init__.py +0 -0
  20. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/bootstrap.py +0 -0
  21. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/bootstrap_stitching.py +0 -0
  22. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/cast_volume.py +0 -0
  23. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/cli_configs.py +0 -0
  24. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/compare_volumes.py +0 -0
  25. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/composite_cor.py +0 -0
  26. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/correct_rot.py +0 -0
  27. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/create_distortion_map_from_poly.py +0 -0
  28. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/diag_to_pix.py +0 -0
  29. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/diag_to_rot.py +0 -0
  30. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/double_flatfield.py +0 -0
  31. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/generate_header.py +0 -0
  32. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/histogram.py +0 -0
  33. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/multicor.py +0 -0
  34. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/nx_z_splitter.py +0 -0
  35. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/parse_reconstruction_log.py +0 -0
  36. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/prepare_weights_double.py +0 -0
  37. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/reconstruct.py +0 -0
  38. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/reconstruct_helical.py +0 -0
  39. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/reduce_dark_flat.py +0 -0
  40. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/rotate.py +0 -0
  41. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/shrink_dataset.py +0 -0
  42. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/stitching.py +0 -0
  43. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/tests/__init__.py +0 -0
  44. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/tests/test_reduce_dark_flat.py +0 -0
  45. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/utils.py +0 -0
  46. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/app/validator.py +0 -0
  47. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/__init__.py +0 -0
  48. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/convolution.py +0 -0
  49. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/fft.py +0 -0
  50. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/kernel.py +0 -0
  51. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/medfilt.py +0 -0
  52. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/padding.py +0 -0
  53. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/processing.py +0 -0
  54. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/ElementOp.cu +0 -0
  55. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/backproj.cu +0 -0
  56. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/backproj_polar.cu +0 -0
  57. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/boundary.h +0 -0
  58. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/convolution.cu +0 -0
  59. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/dfi_fftshift.cu +0 -0
  60. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/flatfield.cu +0 -0
  61. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/fourier_wavelets.cu +0 -0
  62. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/halftomo.cu +0 -0
  63. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/helical_padding.cu +0 -0
  64. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/histogram.cu +0 -0
  65. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/interpolation.cu +0 -0
  66. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/medfilt.cu +0 -0
  67. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/normalization.cu +0 -0
  68. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/padding.cu +0 -0
  69. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/proj.cu +0 -0
  70. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/rotation.cu +0 -0
  71. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/src/transpose.cu +0 -0
  72. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/tests/__init__.py +0 -0
  73. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/cuda/utils.py +0 -0
  74. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/__init__.py +0 -0
  75. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/alignment.py +0 -0
  76. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/cor.py +0 -0
  77. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/cor_sino.py +0 -0
  78. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/distortion.py +0 -0
  79. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/focus.py +0 -0
  80. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/tests/__init__.py +0 -0
  81. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/tests/test_alignment.py +0 -0
  82. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/tests/test_cor.py +0 -0
  83. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/tests/test_focus.py +0 -0
  84. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/tests/test_tilt.py +0 -0
  85. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/tests/test_translation.py +0 -0
  86. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/tilt.py +0 -0
  87. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/translation.py +0 -0
  88. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/estimation/utils.py +0 -0
  89. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/__init__.py +0 -0
  90. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/cast_volume.py +0 -0
  91. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/detector_distortion.py +0 -0
  92. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/reader.py +0 -0
  93. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/reader_helical.py +0 -0
  94. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/tests/__init__.py +0 -0
  95. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/tests/test_cast_volume.py +0 -0
  96. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/tests/test_detector_distortion.py +0 -0
  97. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/tests/test_writers.py +0 -0
  98. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/tiffwriter_zmm.py +0 -0
  99. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/utils.py +0 -0
  100. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/io/writer.py +0 -0
  101. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/__init__.py +0 -0
  102. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/binning.py +0 -0
  103. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/fftshift.py +0 -0
  104. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/filters.py +0 -0
  105. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/fourier_filters.py +0 -0
  106. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/histogram.py +0 -0
  107. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/histogram_cuda.py +0 -0
  108. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/kernel_base.py +0 -0
  109. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/padding.py +0 -0
  110. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/padding_base.py +0 -0
  111. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/processing_base.py +0 -0
  112. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/rotation.py +0 -0
  113. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/rotation_cuda.py +0 -0
  114. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/tests/__init__.py +0 -0
  115. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/tests/test_binning.py +0 -0
  116. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/tests/test_interpolation.py +0 -0
  117. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/transpose.py +0 -0
  118. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/unsharp.py +0 -0
  119. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/unsharp_cuda.py +0 -0
  120. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/unsharp_opencl.py +0 -0
  121. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/misc/utils.py +0 -0
  122. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/__init__.py +0 -0
  123. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/fft.py +0 -0
  124. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/kernel.py +0 -0
  125. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/memcpy.py +0 -0
  126. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/padding.py +0 -0
  127. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/processing.py +0 -0
  128. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/src/ElementOp.cl +0 -0
  129. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/src/backproj.cl +0 -0
  130. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/src/fftshift.cl +0 -0
  131. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/src/halftomo.cl +0 -0
  132. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/src/padding.cl +0 -0
  133. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/src/roll.cl +0 -0
  134. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/src/transpose.cl +0 -0
  135. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/tests/__init__.py +0 -0
  136. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/opencl/utils.py +0 -0
  137. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/__init__.py +0 -0
  138. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/config.py +0 -0
  139. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/config_validators.py +0 -0
  140. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/datadump.py +0 -0
  141. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/dataset_validator.py +0 -0
  142. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/detector_distortion_provider.py +0 -0
  143. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/estimators.py +0 -0
  144. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fallback_utils.py +0 -0
  145. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fullfield/__init__.py +0 -0
  146. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fullfield/chunked_cuda.py +0 -0
  147. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fullfield/computations.py +0 -0
  148. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fullfield/dataset_validator.py +0 -0
  149. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/fullfield/nabu_config.py +0 -0
  150. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/__init__.py +0 -0
  151. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/dataset_validator.py +0 -0
  152. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/fbp.py +0 -0
  153. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/filtering.py +0 -0
  154. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/gridded_accumulator.py +0 -0
  155. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/helical_chunked_regridded.py +0 -0
  156. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/helical_chunked_regridded_cuda.py +0 -0
  157. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/helical_reconstruction.py +0 -0
  158. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/helical_utils.py +0 -0
  159. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/nabu_config.py +0 -0
  160. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/processconfig.py +0 -0
  161. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/span_strategy.py +0 -0
  162. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/tests/__init__.py +0 -0
  163. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/tests/test_accumulator.py +0 -0
  164. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/tests/test_pipeline_elements_full.py +0 -0
  165. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/tests/test_strategy.py +0 -0
  166. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/utils.py +0 -0
  167. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/helical/weight_balancer.py +0 -0
  168. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/params.py +0 -0
  169. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/processconfig.py +0 -0
  170. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/tests/test_chunk_reader.py +0 -0
  171. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/tests/test_estimators.py +0 -0
  172. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/utils.py +0 -0
  173. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/writer.py +0 -0
  174. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/pipeline/xrdct/__init__.py +0 -0
  175. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/__init__.py +0 -0
  176. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/alignment.py +0 -0
  177. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/ccd.py +0 -0
  178. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/ccd_cuda.py +0 -0
  179. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/ctf.py +0 -0
  180. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/ctf_cuda.py +0 -0
  181. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/distortion.py +0 -0
  182. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/double_flatfield.py +0 -0
  183. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/double_flatfield_cuda.py +0 -0
  184. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/double_flatfield_variable_region.py +0 -0
  185. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/flatfield.py +0 -0
  186. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/flatfield_cuda.py +0 -0
  187. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/flatfield_variable_region.py +0 -0
  188. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/phase.py +0 -0
  189. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/phase_cuda.py +0 -0
  190. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/shift.py +0 -0
  191. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/shift_cuda.py +0 -0
  192. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/tests/__init__.py +0 -0
  193. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/tests/test_ccd_corr.py +0 -0
  194. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/tests/test_ctf.py +0 -0
  195. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/tests/test_double_flatfield.py +0 -0
  196. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/tests/test_flatfield.py +0 -0
  197. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/tests/test_paganin.py +0 -0
  198. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/preproc/tests/test_vshift.py +0 -0
  199. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/__init__.py +0 -0
  200. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/convolution_cuda.py +0 -0
  201. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/fft_base.py +0 -0
  202. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/fft_cuda.py +0 -0
  203. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/fft_opencl.py +0 -0
  204. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/fftshift.py +0 -0
  205. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/histogram.py +0 -0
  206. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/histogram_cuda.py +0 -0
  207. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/kernel_base.py +0 -0
  208. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/medfilt_cuda.py +0 -0
  209. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/muladd.py +0 -0
  210. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/muladd_cuda.py +0 -0
  211. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/padding_base.py +0 -0
  212. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/padding_cuda.py +0 -0
  213. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/padding_opencl.py +0 -0
  214. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/processing_base.py +0 -0
  215. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/roll_opencl.py +0 -0
  216. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/rotation.py +0 -0
  217. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/rotation_cuda.py +0 -0
  218. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/__init__.py +0 -0
  219. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_fft.py +0 -0
  220. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_fftshift.py +0 -0
  221. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_histogram.py +0 -0
  222. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_medfilt.py +0 -0
  223. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_muladd.py +0 -0
  224. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_padding.py +0 -0
  225. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_roll.py +0 -0
  226. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_rotation.py +0 -0
  227. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_transpose.py +0 -0
  228. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/tests/test_unsharp.py +0 -0
  229. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/transpose.py +0 -0
  230. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/unsharp.py +0 -0
  231. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/unsharp_cuda.py +0 -0
  232. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/processing/unsharp_opencl.py +0 -0
  233. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/__init__.py +0 -0
  234. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/fbp.py +0 -0
  235. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/fbp_base.py +0 -0
  236. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/fbp_opencl.py +0 -0
  237. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/filtering.py +0 -0
  238. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/filtering_cuda.py +0 -0
  239. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/filtering_opencl.py +0 -0
  240. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/projection.py +0 -0
  241. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/reconstructor.py +0 -0
  242. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/reconstructor_cuda.py +0 -0
  243. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/rings.py +0 -0
  244. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/rings_cuda.py +0 -0
  245. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/sinogram.py +0 -0
  246. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/sinogram_cuda.py +0 -0
  247. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/sinogram_opencl.py +0 -0
  248. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/__init__.py +0 -0
  249. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/test_deringer.py +0 -0
  250. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/test_fbp.py +0 -0
  251. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/test_filtering.py +0 -0
  252. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/test_halftomo.py +0 -0
  253. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/test_projector.py +0 -0
  254. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/test_reconstructor.py +0 -0
  255. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/reconstruction/tests/test_sino_normalization.py +0 -0
  256. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/__init__.py +0 -0
  257. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/cli/__init__.py +0 -0
  258. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/cor.py +0 -0
  259. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/dataset_analyzer.py +0 -0
  260. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/gpu.py +0 -0
  261. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/logger.py +0 -0
  262. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/nxflatfield.py +0 -0
  263. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/templates/__init__.py +0 -0
  264. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/templates/bm05_pag.conf +0 -0
  265. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/templates/id16_ctf.conf +0 -0
  266. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/templates/id16_holo.conf +0 -0
  267. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/templates/id19_pag.conf +0 -0
  268. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/tests/__init__.py +0 -0
  269. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/tests/test_nxflatfield.py +0 -0
  270. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/tests/test_units.py +0 -0
  271. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/resources/utils.py +0 -0
  272. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/__init__.py +0 -0
  273. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/alignment.py +0 -0
  274. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/config.py +0 -0
  275. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/definitions.py +0 -0
  276. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/frame_composition.py +0 -0
  277. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/sample_normalization.py +0 -0
  278. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/slurm_utils.py +0 -0
  279. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/__init__.py +0 -0
  280. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/test_alignment.py +0 -0
  281. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/test_config.py +0 -0
  282. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/test_frame_composition.py +0 -0
  283. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/test_overlap.py +0 -0
  284. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/test_sample_normalization.py +0 -0
  285. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/test_slurm_utils.py +0 -0
  286. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/tests/test_utils.py +0 -0
  287. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/stitching/utils.py +0 -0
  288. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/tests.py +0 -0
  289. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/testutils.py +0 -0
  290. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/thirdparty/__init__.py +0 -0
  291. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/thirdparty/algotom_convert_sino.py +0 -0
  292. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/thirdparty/pore3d_deringer_munch.py +0 -0
  293. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/thirdparty/tomocupy_remove_stripe.py +0 -0
  294. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/thirdparty/tomopy_phase.py +0 -0
  295. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/thirdparty/tomwer_load_flats_darks.py +0 -0
  296. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu/utils.py +0 -0
  297. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu.egg-info/SOURCES.txt +0 -0
  298. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu.egg-info/dependency_links.txt +0 -0
  299. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu.egg-info/entry_points.txt +0 -0
  300. {nabu-2024.1.7 → nabu-2024.1.8.post1}/nabu.egg-info/top_level.txt +0 -0
  301. {nabu-2024.1.7 → nabu-2024.1.8.post1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nabu
3
- Version: 2024.1.7
3
+ Version: 2024.1.8.post1
4
4
  Summary: Nabu - Tomography software
5
5
  Author-email: Pierre Paleo <pierre.paleo@esrf.fr>, Henri Payno <henri.payno@esrf.fr>, Alessandro Mirone <mirone@esrf.fr>, Jérôme Lesaint <jerome.lesaint@esrf.fr>
6
6
  Maintainer-email: Pierre Paleo <pierre.paleo@esrf.fr>
@@ -1,4 +1,4 @@
1
- __version__ = "2024.1.7"
1
+ __version__ = "2024.1.8.post1"
2
2
  __nabu_modules__ = [
3
3
  "app",
4
4
  "cuda",
@@ -575,10 +575,11 @@ class ChunkedPipeline:
575
575
  (self.radios_shape[1],) + self.sino_shape,
576
576
  source_sample_dist,
577
577
  sample_detector_dist,
578
- angles=options["angles"],
579
- # TODO one center for each angle to handle "x translations"
578
+ angles=-options["angles"],
580
579
  rot_center=options["rotation_axis_position"],
580
+ axis_correction=(-options["axis_correction"] if options["axis_correction"] is not None else None),
581
581
  pixel_size=1,
582
+ scale_factor=1.0 / options["voxel_size_cm"][0],
582
583
  )
583
584
 
584
585
  self._allocate_recs(*self.process_config.rec_shape, n_slices=n_slices)
@@ -732,12 +733,16 @@ class ChunkedPipeline:
732
733
  """
733
734
 
734
735
  n_angles, n_z, n_x = self.radios.shape
736
+
737
+ # FIXME
735
738
  # can't do a discontiguous single copy...
736
739
  sinos_contig = self._allocate_array((n_z, n_angles, n_x), np.float32, "sinos_cone")
737
740
  for i in range(n_z):
738
741
  sinos_contig[i] = self.radios[:, i, :]
739
- #
742
+ # ---
740
743
 
744
+ # In principle radios are not cropped at this stage,
745
+ # so self.sub_region[2][0] can be used instead of self.get_slice_start_index() instead of self.sub_region[2][0]
741
746
  z_min, z_max = self.sub_region_xz[2:]
742
747
  n_z_tot = self.process_config.radio_shape(binning=True)[0]
743
748
 
@@ -517,10 +517,15 @@ class ProcessConfig(ProcessConfigBase):
517
517
  #
518
518
  # Translation movements
519
519
  #
520
+
520
521
  translations = dataset_info.translations
521
522
  if translations is not None:
522
- tasks.append("radios_movements")
523
- options["radios_movements"] = {"translation_movements": dataset_info.translations}
523
+ if np.max(np.abs(translations[:, 1])) < 1e-5:
524
+ self.logger.warning("No vertical translation greater than 1e-5 - disabling vertical shifts")
525
+ # horizontal movements are handled in backprojector
526
+ else:
527
+ tasks.append("radios_movements")
528
+ options["radios_movements"] = {"translation_movements": dataset_info.translations}
524
529
  #
525
530
  # Sinogram normalization (before half-tomo)
526
531
  #
@@ -359,6 +359,16 @@ class FullFieldReconstructor:
359
359
 
360
360
  return (max_overlap, 0)
361
361
 
362
+ def _compute_rotation_margin(self):
363
+ if "rotate_projections" in self.process_config.processing_steps:
364
+ # Partial radios rotation yields too much error in single-slice mode
365
+ # Forcing a big margin circumvents the problem
366
+ # This is likely to trigger the 'grouped mode', but perhaps grouped mode should always be used when rotating radios
367
+ nz, nx = self.process_config.radio_shape(binning=True)
368
+ return nz // 3, nx // 3
369
+ else:
370
+ return 0, 0
371
+
362
372
  def _ensure_good_chunk_size_and_margin(self):
363
373
  """
364
374
  Check that "chunk_size" and "margin" (if any) are a multiple of binning factor.
@@ -23,7 +23,9 @@ class ConebeamReconstructor:
23
23
  volume_shape=None,
24
24
  rot_center=None,
25
25
  relative_z_position=None,
26
+ axis_correction=None,
26
27
  pixel_size=None,
28
+ scale_factor=None,
27
29
  cuda_options=None,
28
30
  ):
29
31
  """
@@ -88,6 +90,7 @@ class ConebeamReconstructor:
88
90
  Optics Express. 24. 25129-25147. 10.1364/OE.24.025129.
89
91
  """
90
92
  self._init_cuda(cuda_options)
93
+ self.scale_factor = scale_factor
91
94
  self._init_geometry(
92
95
  sinos_shape,
93
96
  source_origin_dist,
@@ -97,6 +100,7 @@ class ConebeamReconstructor:
97
100
  volume_shape,
98
101
  rot_center,
99
102
  relative_z_position,
103
+ axis_correction,
100
104
  )
101
105
  self._alg_id = None
102
106
  self._vol_id = None
@@ -133,6 +137,7 @@ class ConebeamReconstructor:
133
137
  volume_shape,
134
138
  rot_center,
135
139
  relative_z_position,
140
+ axis_correction,
136
141
  ):
137
142
  self._set_sino_shape(sinos_shape)
138
143
  if angles is None:
@@ -153,6 +158,7 @@ class ConebeamReconstructor:
153
158
  if rot_center is not None:
154
159
  self._cor_shift = (self.prj_width - 1) / 2.0 - rot_center
155
160
  self._set_pixel_size(pixel_size)
161
+ self._axis_corrections = axis_correction
156
162
  self._create_astra_proj_geometry(relative_z_position)
157
163
 
158
164
  def _create_astra_proj_geometry(self, relative_z_position):
@@ -170,13 +176,26 @@ class ConebeamReconstructor:
170
176
  self.origin_detector_dist,
171
177
  )
172
178
  self.relative_z_position = relative_z_position or 0.0
179
+ # This will turn the geometry of type "cone" into a geometry of type "cone_vec"
173
180
  self.proj_geom = astra.geom_postalignment(self.proj_geom, (self._cor_shift, 0))
181
+ # (src, detector_center, u, v) = (srcX, srcY, srcZ, dX, dY, dZ, uX, uY, uZ, vX, vY, vZ)
182
+ vecs = self.proj_geom["Vectors"]
183
+
184
+ # To adapt the center of rotation:
185
+ # dX = cor_shift * cos(theta) - origin_detector_dist * sin(theta)
186
+ # dY = origin_detector_dist * cos(theta) + cor_shift * sin(theta)
187
+ if self._axis_corrections is not None:
188
+ # should we check that dX and dY match the above formulas ?
189
+ cor_shifts = self._cor_shift + self._axis_corrections
190
+ vecs[:, 3] = cor_shifts * np.cos(self.angles) - self.origin_detector_dist * np.sin(self.angles)
191
+ vecs[:, 4] = self.origin_detector_dist * np.cos(self.angles) + cor_shifts * np.sin(self.angles)
192
+
193
+ # To adapt the z position:
174
194
  # Component 2 of vecs is the z coordinate of the source, component 5 is the z component of the detector position
175
195
  # We need to re-create the same inclination of the cone beam, thus we need to keep the inclination of the two z positions.
176
196
  # The detector is centered on the rotation axis, thus moving it up or down, just moves it out of the reconstruction volume.
177
197
  # We can bring back the detector in the correct volume position, by applying a rigid translation of both the detector and the source.
178
198
  # The translation is exactly the amount that brought the detector up or down, but in the opposite direction.
179
- vecs = self.proj_geom["Vectors"]
180
199
  vecs[:, 2] = -self.relative_z_position
181
200
 
182
201
  def _set_output(self, volume):
@@ -229,6 +248,8 @@ class ConebeamReconstructor:
229
248
  result = self.cuda.get_array("output")
230
249
  if output is None:
231
250
  result = result.get()
251
+ if self.scale_factor is not None:
252
+ result *= np.float32(self.scale_factor) # in-place for pycuda
232
253
  self.cuda.recover_arrays_references(["sinos", "output"])
233
254
  return result
234
255
 
@@ -1,7 +1,7 @@
1
1
  import pytest
2
2
  import numpy as np
3
- from scipy.ndimage import gaussian_filter
4
- from nabu.utils import subdivide_into_overlapping_segment
3
+ from scipy.ndimage import gaussian_filter, shift
4
+ from nabu.utils import subdivide_into_overlapping_segment, clip_circle
5
5
 
6
6
  try:
7
7
  import astra
@@ -238,6 +238,65 @@ class TestCone:
238
238
  assert np.max(err_max_profile) < 2e-3
239
239
  assert np.max(err_median_profile) < 5e-6
240
240
 
241
+ def test_reconstruction_horizontal_translations(self):
242
+ n_z = n_y = n_x = 256
243
+ n_a = 500
244
+ src_orig_dist = 1000
245
+ orig_det_dist = 50
246
+
247
+ volume, cone_data = generate_hollow_cube_cone_sinograms(
248
+ vol_shape=(n_z, n_y, n_x),
249
+ n_angles=n_a,
250
+ src_orig_dist=src_orig_dist,
251
+ orig_det_dist=orig_det_dist,
252
+ apply_filter=False,
253
+ )
254
+
255
+ # Apply horizontal translations on projections. This could have been done directly with astra
256
+ shift_min, shift_max = -2, 5
257
+ shifts_float = (shift_max - shift_min) * np.random.rand(n_a) - shift_min
258
+ shifts_int = np.random.randint(shift_min, high=shift_max + 1, size=n_a)
259
+
260
+ reconstructor_args = [
261
+ cone_data.shape,
262
+ src_orig_dist,
263
+ orig_det_dist,
264
+ ]
265
+ reconstructor_kwargs = {
266
+ "volume_shape": volume.shape,
267
+ "cuda_options": {"ctx": self.ctx},
268
+ }
269
+ cone_reconstructor = ConebeamReconstructor(*reconstructor_args, **reconstructor_kwargs)
270
+ rec = cone_reconstructor.reconstruct(cone_data)
271
+
272
+ # Translations done with floating-point shift values give a blurring of the image that cannot be recovered.
273
+ # Error tolerance has to be higher for these shifts.
274
+ for shift_type, shifts, err_tol in [
275
+ ("integer shifts", shifts_int, 5e-3),
276
+ ("float shifts", shifts_float, 1.4e-1),
277
+ ]:
278
+ cone_data_shifted = np.zeros_like(cone_data)
279
+ [shift(cone_data[:, i, :], (0, shifts[i]), output=cone_data_shifted[:, i, :]) for i in range(n_a)]
280
+
281
+ # Reconstruct with horizontal shifts
282
+ cone_reconstructor_with_correction = ConebeamReconstructor(
283
+ *reconstructor_args,
284
+ axis_correction=shifts,
285
+ **reconstructor_kwargs,
286
+ )
287
+
288
+ rec_with_correction = cone_reconstructor_with_correction.reconstruct(cone_data_shifted)
289
+
290
+ metric = lambda img: np.max(np.abs(clip_circle(img, radius=int(0.85 * img.shape[1] // 2))))
291
+ error_profile = np.array([metric(rec[i] - rec_with_correction[i]) for i in range(n_z)])
292
+ assert error_profile.max() < err_tol, "Max error with %s is too high" % shift_type
293
+
294
+ # import matplotlib.pyplot as plt
295
+ # plt.figure()
296
+ # plt.plot(np.arange(n_z), error_profile)
297
+ # plt.legend([shift_type])
298
+ # plt.show()
299
+
241
300
 
242
301
  def generate_hollow_cube_cone_sinograms(
243
302
  vol_shape, n_angles, src_orig_dist, orig_det_dist, prj_width=None, apply_filter=True
@@ -301,7 +301,7 @@ def check_overlaps(frames: Union[tuple, numpy.ndarray], positions: tuple, axis:
301
301
  if raise_error:
302
302
  raise ValueError(error_msg)
303
303
  else:
304
- _logger.error(raise_error)
304
+ _logger.error(error_msg)
305
305
 
306
306
  # convert each frame to appropriate bounding box according to the axis
307
307
  def convert_to_bb(frame: numpy.ndarray, position: tuple, axis: int):
@@ -695,11 +695,6 @@ def test_DistributePostProcessZStitcher(tmp_path, configuration_dist, flip_ud):
695
695
  if complete:
696
696
  concatenate_volumes(output_volume=final_vol, volumes=tuple(reconstructed_sub_volumes), axis=1)
697
697
  final_vol.load_data(store=True)
698
- with h5py.File("debug.hdf5", mode="w") as h5f:
699
- h5f["raw_volume"] = raw_volume
700
- h5f["final_vol"] = final_vol.data
701
- h5f["volume1"] = volume_1.data
702
- h5f["volume2"] = volume_2.data
703
698
  numpy.testing.assert_almost_equal(
704
699
  raw_volume,
705
700
  final_vol.data,
@@ -925,14 +920,6 @@ def test_vol_z_stitching_with_alignment_axis_2(tmp_path, alignment_axis_2):
925
920
 
926
921
  assert output_volume.data.shape == (120, 4, 120)
927
922
 
928
- import h5py
929
-
930
- with h5py.File("input.h5", mode="w") as h5f:
931
- h5f["data"] = raw_volume
932
-
933
- with h5py.File("output.h5", mode="w") as h5f:
934
- h5f["data"] = output_volume.data
935
-
936
923
  if alignment_axis_2 == "center":
937
924
  numpy.testing.assert_array_almost_equal(raw_volume[:, :, 10:-10], output_volume.data[:, :, 10:-10])
938
925
  elif alignment_axis_2 == "left":
@@ -1975,7 +1975,7 @@ def stitch_vertically_raw_frames(
1975
1975
  | | Frame 2 | --------------
1976
1976
  | | |
1977
1977
  | --------------
1978
- \/
1978
+ |
1979
1979
 
1980
1980
  returns stitched_projection, raw_img_1, raw_img_2, computed_overlap
1981
1981
  proj_0 and pro_1 are already expected to be in a row. Having stitching_height_in_px in common. At top of proj_0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nabu
3
- Version: 2024.1.7
3
+ Version: 2024.1.8.post1
4
4
  Summary: Nabu - Tomography software
5
5
  Author-email: Pierre Paleo <pierre.paleo@esrf.fr>, Henri Payno <henri.payno@esrf.fr>, Alessandro Mirone <mirone@esrf.fr>, Jérôme Lesaint <jerome.lesaint@esrf.fr>
6
6
  Maintainer-email: Pierre Paleo <pierre.paleo@esrf.fr>
@@ -1,4 +1,4 @@
1
- numpy>1.9.0
1
+ numpy<2,>1.9.0
2
2
  scipy
3
3
  h5py>=3.0
4
4
  silx>=0.15.0
@@ -17,7 +17,7 @@ nbsphinx
17
17
  scikit-image
18
18
  PyWavelets
19
19
  glymur
20
- pycuda
20
+ pycuda<2024.1.1
21
21
  scikit-cuda
22
22
  pycudwt
23
23
  sluurp>=0.3
@@ -49,7 +49,7 @@ classifiers = [
49
49
 
50
50
  ]
51
51
  dependencies = [
52
- "numpy > 1.9.0",
52
+ "numpy > 1.9.0, < 2",
53
53
  "scipy",
54
54
  "h5py>=3.0",
55
55
  "silx >= 0.15.0",
@@ -73,7 +73,7 @@ full = [
73
73
  "scikit-image",
74
74
  "PyWavelets",
75
75
  "glymur",
76
- "pycuda",
76
+ "pycuda<2024.1.1",
77
77
  "scikit-cuda",
78
78
  "pycudwt",
79
79
  "sluurp >=0.3",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes