sigima 0.0.1.dev0__tar.gz → 1.0.0__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.

Potentially problematic release.


This version of sigima might be problematic. Click here for more details.

Files changed (355) hide show
  1. sigima-1.0.0/CHANGELOG.md +312 -0
  2. {sigima-0.0.1.dev0 → sigima-1.0.0}/LICENSE +29 -29
  3. {sigima-0.0.1.dev0 → sigima-1.0.0}/MANIFEST.in +3 -3
  4. sigima-1.0.0/PKG-INFO +233 -0
  5. sigima-1.0.0/README.md +162 -0
  6. sigima-1.0.0/doc/_static/DataLab-Banner.svg +104 -0
  7. sigima-1.0.0/doc/_static/DataLab-Title.svg +94 -0
  8. sigima-1.0.0/doc/_static/DataLab.svg +83 -0
  9. sigima-1.0.0/doc/_static/Sigima-Frontpage.png +0 -0
  10. sigima-1.0.0/doc/_static/Sigima-Title.svg +135 -0
  11. sigima-1.0.0/doc/_static/codra.png +0 -0
  12. sigima-1.0.0/doc/_static/favicon.ico +0 -0
  13. sigima-1.0.0/doc/_static/pypi.svg +1 -0
  14. sigima-1.0.0/doc/api/client.rst +2 -0
  15. sigima-1.0.0/doc/api/config.rst +2 -0
  16. sigima-1.0.0/doc/api/index.rst +43 -0
  17. sigima-1.0.0/doc/api/objects.rst +2 -0
  18. sigima-1.0.0/doc/api/params.rst +2 -0
  19. sigima-1.0.0/doc/api/proc.rst +2 -0
  20. sigima-1.0.0/doc/api/tools.rst +1 -0
  21. sigima-1.0.0/doc/conf.py +258 -0
  22. sigima-1.0.0/doc/contributing/contribute_code.rst +38 -0
  23. sigima-1.0.0/doc/contributing/dependencies.rst +66 -0
  24. sigima-1.0.0/doc/contributing/environment.md +111 -0
  25. sigima-1.0.0/doc/contributing/gitworkflow.rst +204 -0
  26. sigima-1.0.0/doc/contributing/guidelines.rst +74 -0
  27. sigima-1.0.0/doc/contributing/index.rst +120 -0
  28. sigima-1.0.0/doc/examples/README.txt +15 -0
  29. sigima-1.0.0/doc/examples/features/README.txt +2 -0
  30. sigima-1.0.0/doc/examples/features/convolution.py +288 -0
  31. sigima-1.0.0/doc/examples/features/coordinate_systems.py +294 -0
  32. sigima-1.0.0/doc/examples/features/datalab_client.py +58 -0
  33. sigima-1.0.0/doc/examples/features/datetime_signals.py +240 -0
  34. sigima-1.0.0/doc/examples/getting_started/README.txt +2 -0
  35. sigima-1.0.0/doc/examples/getting_started/image_creation.py +185 -0
  36. sigima-1.0.0/doc/examples/getting_started/signal_creation.py +213 -0
  37. sigima-1.0.0/doc/examples/use_cases/README.txt +2 -0
  38. sigima-1.0.0/doc/examples/use_cases/blob_detection.py +199 -0
  39. sigima-1.0.0/doc/examples/use_cases/fabry_perot.py +194 -0
  40. sigima-1.0.0/doc/examples/use_cases/laser_beam.py +360 -0
  41. sigima-1.0.0/doc/examples/use_cases/spectrum_analysis.py +277 -0
  42. sigima-1.0.0/doc/images/Sigima-Banner.png +0 -0
  43. sigima-1.0.0/doc/images/Sigima-Banner.svg +135 -0
  44. sigima-1.0.0/doc/images/Sigima.svg +135 -0
  45. sigima-1.0.0/doc/images/logos/cea.svg +29 -0
  46. sigima-1.0.0/doc/images/logos/codra.svg +65 -0
  47. sigima-1.0.0/doc/images/logos/nlnet.svg +41 -0
  48. sigima-1.0.0/doc/index.rst +90 -0
  49. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/api/index.po +71 -0
  50. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/features/convolution.po +119 -0
  51. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/features/coordinate_systems.po +107 -0
  52. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/features/datalab_client.po +47 -0
  53. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/features/datetime_signals.po +119 -0
  54. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/features/index.po +36 -0
  55. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/image_creation.po +135 -0
  56. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/index.po +29 -0
  57. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/getting_started/signal_creation.po +153 -0
  58. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/index.po +75 -0
  59. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/blob_detection.po +118 -0
  60. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/convolution.po +120 -0
  61. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/fabry_perot.po +107 -0
  62. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/index.po +36 -0
  63. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/laser_beam.po +137 -0
  64. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/auto_examples/use_cases/spectrum_analysis.po +130 -0
  65. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/changelog.po +789 -0
  66. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/contributing/contribute_code.po +48 -0
  67. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/contributing/dependencies.po +104 -0
  68. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/contributing/environment.po +239 -0
  69. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/contributing/gitworkflow.po +173 -0
  70. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/contributing/guidelines.po +96 -0
  71. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/contributing/index.po +129 -0
  72. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/index.po +86 -0
  73. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/requirements.po +242 -0
  74. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/user_guide/features.po +1331 -0
  75. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/user_guide/index.po +44 -0
  76. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/user_guide/installation.po +326 -0
  77. sigima-1.0.0/doc/locale/fr/LC_MESSAGES/user_guide/overview.po +418 -0
  78. sigima-1.0.0/doc/remote_example.ipynb +181 -0
  79. sigima-1.0.0/doc/requirements.rst +145 -0
  80. sigima-1.0.0/doc/user_guide/features.rst +740 -0
  81. sigima-1.0.0/doc/user_guide/index.rst +33 -0
  82. sigima-1.0.0/doc/user_guide/installation.rst +143 -0
  83. sigima-1.0.0/doc/user_guide/overview.rst +290 -0
  84. {sigima-0.0.1.dev0 → sigima-1.0.0}/pyproject.toml +46 -14
  85. sigima-1.0.0/requirements.txt +28 -0
  86. {sigima-0.0.1.dev0 → sigima-1.0.0}/setup.cfg +4 -4
  87. sigima-1.0.0/sigima/__init__.py +142 -0
  88. sigima-1.0.0/sigima/client/__init__.py +105 -0
  89. sigima-1.0.0/sigima/client/base.py +780 -0
  90. sigima-1.0.0/sigima/client/remote.py +469 -0
  91. sigima-1.0.0/sigima/client/stub.py +814 -0
  92. sigima-1.0.0/sigima/client/utils.py +90 -0
  93. sigima-1.0.0/sigima/config.py +444 -0
  94. sigima-1.0.0/sigima/data/logo/Sigima.svg +135 -0
  95. sigima-1.0.0/sigima/data/tests/annotations.json +798 -0
  96. sigima-1.0.0/sigima/data/tests/curve_fitting/exponential_fit.txt +511 -0
  97. sigima-1.0.0/sigima/data/tests/curve_fitting/gaussian_fit.txt +100 -0
  98. sigima-1.0.0/sigima/data/tests/curve_fitting/piecewiseexponential_fit.txt +1022 -0
  99. sigima-1.0.0/sigima/data/tests/curve_fitting/polynomial_fit.txt +100 -0
  100. sigima-1.0.0/sigima/data/tests/curve_fitting/twohalfgaussian_fit.txt +1000 -0
  101. sigima-1.0.0/sigima/data/tests/curve_formats/bandwidth.txt +201 -0
  102. sigima-1.0.0/sigima/data/tests/curve_formats/boxcar.npy +0 -0
  103. sigima-1.0.0/sigima/data/tests/curve_formats/datetime.txt +1001 -0
  104. sigima-1.0.0/sigima/data/tests/curve_formats/dynamic_parameters.txt +4000 -0
  105. sigima-1.0.0/sigima/data/tests/curve_formats/fw1e2.txt +301 -0
  106. sigima-1.0.0/sigima/data/tests/curve_formats/fwhm.txt +319 -0
  107. sigima-1.0.0/sigima/data/tests/curve_formats/multiple_curves.csv +29 -0
  108. sigima-1.0.0/sigima/data/tests/curve_formats/noised_saw.mat +0 -0
  109. sigima-1.0.0/sigima/data/tests/curve_formats/oscilloscope.csv +111 -0
  110. sigima-1.0.0/sigima/data/tests/curve_formats/other/other2/recursive2.txt +5 -0
  111. sigima-1.0.0/sigima/data/tests/curve_formats/other/recursive1.txt +5 -0
  112. sigima-1.0.0/sigima/data/tests/curve_formats/paracetamol.npy +0 -0
  113. sigima-1.0.0/sigima/data/tests/curve_formats/paracetamol.txt +1010 -0
  114. sigima-1.0.0/sigima/data/tests/curve_formats/paracetamol_dx_dy.csv +1000 -0
  115. sigima-1.0.0/sigima/data/tests/curve_formats/paracetamol_dy.csv +1001 -0
  116. sigima-1.0.0/sigima/data/tests/curve_formats/pulse1.npy +0 -0
  117. sigima-1.0.0/sigima/data/tests/curve_formats/pulse2.npy +0 -0
  118. sigima-1.0.0/sigima/data/tests/curve_formats/simple.txt +5 -0
  119. sigima-1.0.0/sigima/data/tests/curve_formats/spectrum.mca +2139 -0
  120. sigima-1.0.0/sigima/data/tests/curve_formats/square2.npy +0 -0
  121. sigima-1.0.0/sigima/data/tests/curve_formats/step.npy +0 -0
  122. sigima-1.0.0/sigima/data/tests/fabry-perot1.jpg +0 -0
  123. sigima-1.0.0/sigima/data/tests/fabry-perot2.jpg +0 -0
  124. sigima-1.0.0/sigima/data/tests/flower.npy +0 -0
  125. sigima-1.0.0/sigima/data/tests/image_formats/NF 180338201.scor-data +11003 -0
  126. sigima-1.0.0/sigima/data/tests/image_formats/binary_image.npy +0 -0
  127. sigima-1.0.0/sigima/data/tests/image_formats/binary_image.png +0 -0
  128. sigima-1.0.0/sigima/data/tests/image_formats/centroid_test.npy +0 -0
  129. sigima-1.0.0/sigima/data/tests/image_formats/coordinated_text/complex_image.txt +10011 -0
  130. sigima-1.0.0/sigima/data/tests/image_formats/coordinated_text/complex_ref_image.txt +10010 -0
  131. sigima-1.0.0/sigima/data/tests/image_formats/coordinated_text/image.txt +15 -0
  132. sigima-1.0.0/sigima/data/tests/image_formats/coordinated_text/image2.txt +14 -0
  133. sigima-1.0.0/sigima/data/tests/image_formats/coordinated_text/image_no_unit_no_label.txt +14 -0
  134. sigima-1.0.0/sigima/data/tests/image_formats/coordinated_text/image_with_nan.txt +15 -0
  135. sigima-1.0.0/sigima/data/tests/image_formats/coordinated_text/image_with_unit.txt +14 -0
  136. sigima-1.0.0/sigima/data/tests/image_formats/fiber.csv +480 -0
  137. sigima-1.0.0/sigima/data/tests/image_formats/fiber.jpg +0 -0
  138. sigima-1.0.0/sigima/data/tests/image_formats/fiber.png +0 -0
  139. sigima-1.0.0/sigima/data/tests/image_formats/fiber.txt +480 -0
  140. sigima-1.0.0/sigima/data/tests/image_formats/gaussian_spot_with_noise.npy +0 -0
  141. sigima-1.0.0/sigima/data/tests/image_formats/mr-brain.dcm +0 -0
  142. sigima-1.0.0/sigima/data/tests/image_formats/noised_gaussian.mat +0 -0
  143. sigima-1.0.0/sigima/data/tests/image_formats/sif_reader/nd_lum_image_no_glue.sif +0 -0
  144. sigima-1.0.0/sigima/data/tests/image_formats/sif_reader/raman1.sif +0 -0
  145. sigima-1.0.0/sigima/data/tests/image_formats/tiling.txt +10 -0
  146. sigima-1.0.0/sigima/data/tests/image_formats/uint16.tiff +0 -0
  147. sigima-1.0.0/sigima/data/tests/image_formats/uint8.tiff +0 -0
  148. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_13.jpg +0 -0
  149. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_18.jpg +0 -0
  150. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_23.jpg +0 -0
  151. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_30.jpg +0 -0
  152. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_35.jpg +0 -0
  153. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_40.jpg +0 -0
  154. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_45.jpg +0 -0
  155. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_50.jpg +0 -0
  156. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_55.jpg +0 -0
  157. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_60.jpg +0 -0
  158. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_65.jpg +0 -0
  159. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_70.jpg +0 -0
  160. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_75.jpg +0 -0
  161. sigima-1.0.0/sigima/data/tests/laser_beam/TEM00_z_80.jpg +0 -0
  162. sigima-1.0.0/sigima/enums.py +195 -0
  163. sigima-1.0.0/sigima/io/__init__.py +123 -0
  164. sigima-1.0.0/sigima/io/base.py +311 -0
  165. sigima-1.0.0/sigima/io/common/__init__.py +5 -0
  166. sigima-1.0.0/sigima/io/common/basename.py +164 -0
  167. sigima-1.0.0/sigima/io/common/converters.py +189 -0
  168. sigima-1.0.0/sigima/io/common/objmeta.py +181 -0
  169. sigima-1.0.0/sigima/io/common/textreader.py +58 -0
  170. sigima-1.0.0/sigima/io/convenience.py +157 -0
  171. sigima-1.0.0/sigima/io/enums.py +17 -0
  172. sigima-1.0.0/sigima/io/ftlab.py +395 -0
  173. sigima-1.0.0/sigima/io/image/__init__.py +9 -0
  174. sigima-1.0.0/sigima/io/image/base.py +177 -0
  175. sigima-1.0.0/sigima/io/image/formats.py +1016 -0
  176. sigima-1.0.0/sigima/io/image/funcs.py +414 -0
  177. sigima-1.0.0/sigima/io/signal/__init__.py +9 -0
  178. sigima-1.0.0/sigima/io/signal/base.py +129 -0
  179. sigima-1.0.0/sigima/io/signal/formats.py +290 -0
  180. sigima-1.0.0/sigima/io/signal/funcs.py +723 -0
  181. sigima-1.0.0/sigima/objects/__init__.py +260 -0
  182. sigima-1.0.0/sigima/objects/base.py +937 -0
  183. sigima-1.0.0/sigima/objects/image/__init__.py +88 -0
  184. sigima-1.0.0/sigima/objects/image/creation.py +556 -0
  185. sigima-1.0.0/sigima/objects/image/object.py +524 -0
  186. sigima-1.0.0/sigima/objects/image/roi.py +904 -0
  187. sigima-1.0.0/sigima/objects/scalar/__init__.py +57 -0
  188. sigima-1.0.0/sigima/objects/scalar/common.py +215 -0
  189. sigima-1.0.0/sigima/objects/scalar/geometry.py +502 -0
  190. sigima-1.0.0/sigima/objects/scalar/table.py +784 -0
  191. sigima-1.0.0/sigima/objects/shape.py +290 -0
  192. sigima-1.0.0/sigima/objects/signal/__init__.py +133 -0
  193. sigima-1.0.0/sigima/objects/signal/constants.py +27 -0
  194. sigima-1.0.0/sigima/objects/signal/creation.py +1428 -0
  195. sigima-1.0.0/sigima/objects/signal/object.py +444 -0
  196. sigima-1.0.0/sigima/objects/signal/roi.py +274 -0
  197. sigima-1.0.0/sigima/params.py +405 -0
  198. sigima-1.0.0/sigima/proc/__init__.py +96 -0
  199. sigima-1.0.0/sigima/proc/base.py +381 -0
  200. sigima-1.0.0/sigima/proc/decorator.py +330 -0
  201. sigima-1.0.0/sigima/proc/image/__init__.py +513 -0
  202. sigima-1.0.0/sigima/proc/image/arithmetic.py +335 -0
  203. sigima-1.0.0/sigima/proc/image/base.py +260 -0
  204. sigima-1.0.0/sigima/proc/image/detection.py +519 -0
  205. sigima-1.0.0/sigima/proc/image/edges.py +329 -0
  206. sigima-1.0.0/sigima/proc/image/exposure.py +406 -0
  207. sigima-1.0.0/sigima/proc/image/extraction.py +458 -0
  208. sigima-1.0.0/sigima/proc/image/filtering.py +219 -0
  209. sigima-1.0.0/sigima/proc/image/fourier.py +147 -0
  210. sigima-1.0.0/sigima/proc/image/geometry.py +661 -0
  211. sigima-1.0.0/sigima/proc/image/mathops.py +340 -0
  212. sigima-1.0.0/sigima/proc/image/measurement.py +195 -0
  213. sigima-1.0.0/sigima/proc/image/morphology.py +155 -0
  214. sigima-1.0.0/sigima/proc/image/noise.py +107 -0
  215. sigima-1.0.0/sigima/proc/image/preprocessing.py +182 -0
  216. sigima-1.0.0/sigima/proc/image/restoration.py +235 -0
  217. sigima-1.0.0/sigima/proc/image/threshold.py +217 -0
  218. sigima-1.0.0/sigima/proc/image/transformations.py +393 -0
  219. sigima-1.0.0/sigima/proc/signal/__init__.py +376 -0
  220. sigima-1.0.0/sigima/proc/signal/analysis.py +206 -0
  221. sigima-1.0.0/sigima/proc/signal/arithmetic.py +551 -0
  222. sigima-1.0.0/sigima/proc/signal/base.py +262 -0
  223. sigima-1.0.0/sigima/proc/signal/extraction.py +60 -0
  224. sigima-1.0.0/sigima/proc/signal/features.py +310 -0
  225. sigima-1.0.0/sigima/proc/signal/filtering.py +484 -0
  226. sigima-1.0.0/sigima/proc/signal/fitting.py +276 -0
  227. sigima-1.0.0/sigima/proc/signal/fourier.py +259 -0
  228. sigima-1.0.0/sigima/proc/signal/mathops.py +420 -0
  229. sigima-1.0.0/sigima/proc/signal/processing.py +580 -0
  230. sigima-1.0.0/sigima/proc/signal/stability.py +175 -0
  231. sigima-1.0.0/sigima/proc/title_formatting.py +227 -0
  232. sigima-1.0.0/sigima/proc/validation.py +272 -0
  233. sigima-1.0.0/sigima/tests/__init__.py +7 -0
  234. sigima-1.0.0/sigima/tests/common/__init__.py +0 -0
  235. sigima-1.0.0/sigima/tests/common/arithmeticparam_unit_test.py +26 -0
  236. sigima-1.0.0/sigima/tests/common/basename_unit_test.py +126 -0
  237. sigima-1.0.0/sigima/tests/common/client_unit_test.py +412 -0
  238. sigima-1.0.0/sigima/tests/common/converters_unit_test.py +77 -0
  239. sigima-1.0.0/sigima/tests/common/decorator_unit_test.py +176 -0
  240. sigima-1.0.0/sigima/tests/common/examples_unit_test.py +104 -0
  241. sigima-1.0.0/sigima/tests/common/kernel_normalization_unit_test.py +242 -0
  242. sigima-1.0.0/sigima/tests/common/roi_basic_unit_test.py +73 -0
  243. sigima-1.0.0/sigima/tests/common/roi_geometry_unit_test.py +171 -0
  244. sigima-1.0.0/sigima/tests/common/scalar_builder_unit_test.py +142 -0
  245. sigima-1.0.0/sigima/tests/common/scalar_unit_test.py +991 -0
  246. sigima-1.0.0/sigima/tests/common/shape_unit_test.py +183 -0
  247. sigima-1.0.0/sigima/tests/common/stat_unit_test.py +138 -0
  248. sigima-1.0.0/sigima/tests/common/title_formatting_unit_test.py +338 -0
  249. sigima-1.0.0/sigima/tests/common/tools_coordinates_unit_test.py +60 -0
  250. sigima-1.0.0/sigima/tests/common/transformations_unit_test.py +178 -0
  251. sigima-1.0.0/sigima/tests/common/validation_unit_test.py +205 -0
  252. sigima-1.0.0/sigima/tests/conftest.py +129 -0
  253. sigima-1.0.0/sigima/tests/data.py +998 -0
  254. sigima-1.0.0/sigima/tests/env.py +280 -0
  255. sigima-1.0.0/sigima/tests/guiutils.py +163 -0
  256. sigima-1.0.0/sigima/tests/helpers.py +532 -0
  257. sigima-1.0.0/sigima/tests/image/__init__.py +28 -0
  258. sigima-1.0.0/sigima/tests/image/binning_unit_test.py +128 -0
  259. sigima-1.0.0/sigima/tests/image/blob_detection_unit_test.py +312 -0
  260. sigima-1.0.0/sigima/tests/image/centroid_unit_test.py +170 -0
  261. sigima-1.0.0/sigima/tests/image/check_2d_array_unit_test.py +63 -0
  262. sigima-1.0.0/sigima/tests/image/contour_unit_test.py +172 -0
  263. sigima-1.0.0/sigima/tests/image/convolution_unit_test.py +178 -0
  264. sigima-1.0.0/sigima/tests/image/datatype_unit_test.py +67 -0
  265. sigima-1.0.0/sigima/tests/image/edges_unit_test.py +155 -0
  266. sigima-1.0.0/sigima/tests/image/enclosingcircle_unit_test.py +88 -0
  267. sigima-1.0.0/sigima/tests/image/exposure_unit_test.py +223 -0
  268. sigima-1.0.0/sigima/tests/image/fft2d_unit_test.py +189 -0
  269. sigima-1.0.0/sigima/tests/image/filtering_unit_test.py +166 -0
  270. sigima-1.0.0/sigima/tests/image/geometry_unit_test.py +654 -0
  271. sigima-1.0.0/sigima/tests/image/hough_circle_unit_test.py +147 -0
  272. sigima-1.0.0/sigima/tests/image/imageobj_unit_test.py +737 -0
  273. sigima-1.0.0/sigima/tests/image/morphology_unit_test.py +71 -0
  274. sigima-1.0.0/sigima/tests/image/noise_unit_test.py +57 -0
  275. sigima-1.0.0/sigima/tests/image/offset_correction_unit_test.py +72 -0
  276. sigima-1.0.0/sigima/tests/image/operation_unit_test.py +518 -0
  277. sigima-1.0.0/sigima/tests/image/peak2d_limits_unit_test.py +41 -0
  278. sigima-1.0.0/sigima/tests/image/peak2d_unit_test.py +133 -0
  279. sigima-1.0.0/sigima/tests/image/profile_unit_test.py +159 -0
  280. sigima-1.0.0/sigima/tests/image/projections_unit_test.py +121 -0
  281. sigima-1.0.0/sigima/tests/image/restoration_unit_test.py +141 -0
  282. sigima-1.0.0/sigima/tests/image/roi2dparam_unit_test.py +53 -0
  283. sigima-1.0.0/sigima/tests/image/roi_advanced_unit_test.py +588 -0
  284. sigima-1.0.0/sigima/tests/image/roi_grid_unit_test.py +279 -0
  285. sigima-1.0.0/sigima/tests/image/spectrum2d_unit_test.py +40 -0
  286. sigima-1.0.0/sigima/tests/image/threshold_unit_test.py +91 -0
  287. sigima-1.0.0/sigima/tests/io/__init__.py +0 -0
  288. sigima-1.0.0/sigima/tests/io/addnewformat_unit_test.py +125 -0
  289. sigima-1.0.0/sigima/tests/io/convenience_funcs_unit_test.py +470 -0
  290. sigima-1.0.0/sigima/tests/io/coordinated_text_format_unit_test.py +495 -0
  291. sigima-1.0.0/sigima/tests/io/datetime_csv_unit_test.py +198 -0
  292. sigima-1.0.0/sigima/tests/io/imageio_formats_test.py +41 -0
  293. sigima-1.0.0/sigima/tests/io/ioregistry_unit_test.py +69 -0
  294. sigima-1.0.0/sigima/tests/io/objmeta_unit_test.py +87 -0
  295. sigima-1.0.0/sigima/tests/io/readobj_unit_test.py +130 -0
  296. sigima-1.0.0/sigima/tests/io/readwriteobj_unit_test.py +67 -0
  297. sigima-1.0.0/sigima/tests/signal/__init__.py +0 -0
  298. sigima-1.0.0/sigima/tests/signal/analysis_unit_test.py +135 -0
  299. sigima-1.0.0/sigima/tests/signal/check_1d_arrays_unit_test.py +169 -0
  300. sigima-1.0.0/sigima/tests/signal/convolution_unit_test.py +404 -0
  301. sigima-1.0.0/sigima/tests/signal/datetime_unit_test.py +176 -0
  302. sigima-1.0.0/sigima/tests/signal/fft1d_unit_test.py +303 -0
  303. sigima-1.0.0/sigima/tests/signal/filters_unit_test.py +403 -0
  304. sigima-1.0.0/sigima/tests/signal/fitting_unit_test.py +929 -0
  305. sigima-1.0.0/sigima/tests/signal/fwhm_unit_test.py +111 -0
  306. sigima-1.0.0/sigima/tests/signal/noise_unit_test.py +128 -0
  307. sigima-1.0.0/sigima/tests/signal/offset_correction_unit_test.py +34 -0
  308. sigima-1.0.0/sigima/tests/signal/operation_unit_test.py +489 -0
  309. sigima-1.0.0/sigima/tests/signal/peakdetection_unit_test.py +145 -0
  310. sigima-1.0.0/sigima/tests/signal/processing_unit_test.py +657 -0
  311. sigima-1.0.0/sigima/tests/signal/pulse/__init__.py +112 -0
  312. sigima-1.0.0/sigima/tests/signal/pulse/crossing_times_unit_test.py +123 -0
  313. sigima-1.0.0/sigima/tests/signal/pulse/plateau_detection_unit_test.py +102 -0
  314. sigima-1.0.0/sigima/tests/signal/pulse/pulse_unit_test.py +1824 -0
  315. sigima-1.0.0/sigima/tests/signal/roi_advanced_unit_test.py +392 -0
  316. sigima-1.0.0/sigima/tests/signal/signalobj_unit_test.py +603 -0
  317. sigima-1.0.0/sigima/tests/signal/stability_unit_test.py +431 -0
  318. sigima-1.0.0/sigima/tests/signal/uncertainty_unit_test.py +611 -0
  319. sigima-1.0.0/sigima/tests/vistools.py +1030 -0
  320. sigima-1.0.0/sigima/tools/__init__.py +59 -0
  321. sigima-1.0.0/sigima/tools/checks.py +290 -0
  322. sigima-1.0.0/sigima/tools/coordinates.py +308 -0
  323. sigima-1.0.0/sigima/tools/datatypes.py +26 -0
  324. sigima-1.0.0/sigima/tools/image/__init__.py +97 -0
  325. sigima-1.0.0/sigima/tools/image/detection.py +451 -0
  326. sigima-1.0.0/sigima/tools/image/exposure.py +77 -0
  327. sigima-1.0.0/sigima/tools/image/extraction.py +48 -0
  328. sigima-1.0.0/sigima/tools/image/fourier.py +260 -0
  329. sigima-1.0.0/sigima/tools/image/geometry.py +190 -0
  330. sigima-1.0.0/sigima/tools/image/preprocessing.py +165 -0
  331. sigima-1.0.0/sigima/tools/signal/__init__.py +86 -0
  332. sigima-1.0.0/sigima/tools/signal/dynamic.py +254 -0
  333. sigima-1.0.0/sigima/tools/signal/features.py +135 -0
  334. sigima-1.0.0/sigima/tools/signal/filtering.py +171 -0
  335. sigima-1.0.0/sigima/tools/signal/fitting.py +1171 -0
  336. sigima-1.0.0/sigima/tools/signal/fourier.py +466 -0
  337. sigima-1.0.0/sigima/tools/signal/interpolation.py +70 -0
  338. sigima-1.0.0/sigima/tools/signal/peakdetection.py +126 -0
  339. sigima-1.0.0/sigima/tools/signal/pulse.py +1626 -0
  340. sigima-1.0.0/sigima/tools/signal/scaling.py +50 -0
  341. sigima-1.0.0/sigima/tools/signal/stability.py +258 -0
  342. sigima-1.0.0/sigima/tools/signal/windowing.py +90 -0
  343. sigima-1.0.0/sigima/worker.py +79 -0
  344. sigima-1.0.0/sigima.egg-info/PKG-INFO +233 -0
  345. sigima-1.0.0/sigima.egg-info/SOURCES.txt +346 -0
  346. sigima-1.0.0/sigima.egg-info/requires.txt +42 -0
  347. sigima-0.0.1.dev0/PKG-INFO +0 -60
  348. sigima-0.0.1.dev0/README.md +0 -5
  349. sigima-0.0.1.dev0/requirements.txt +0 -25
  350. sigima-0.0.1.dev0/sigima/__init__.py +0 -2
  351. sigima-0.0.1.dev0/sigima.egg-info/PKG-INFO +0 -60
  352. sigima-0.0.1.dev0/sigima.egg-info/SOURCES.txt +0 -11
  353. sigima-0.0.1.dev0/sigima.egg-info/requires.txt +0 -26
  354. {sigima-0.0.1.dev0 → sigima-1.0.0}/sigima.egg-info/dependency_links.txt +0 -0
  355. {sigima-0.0.1.dev0 → sigima-1.0.0}/sigima.egg-info/top_level.txt +0 -0
@@ -0,0 +1,312 @@
1
+ # Release notes #
2
+
3
+ The `sigima` library is part of the DataLab open-source platform.
4
+ See DataLab [roadmap page](https://datalab-platform.com/en/contributing/roadmap.html) for future and past milestones.
5
+
6
+ ## sigima 1.0.0 ##
7
+
8
+ 💥 New features and enhancements:
9
+
10
+ * **Signals to image conversion**: New feature to combine multiple signals into a 2D image
11
+ * New computation function `signals_to_image()` in `sigima.proc.signal.arithmetic`
12
+ * Takes a list of signals and combines them into an image by stacking Y-arrays
13
+ * Two orientation modes:
14
+ * **Rows**: Each signal becomes a row in the image (default)
15
+ * **Columns**: Each signal becomes a column in the image
16
+ * Optional normalization:
17
+ * Supports multiple normalization methods (Z-score, Min-Max, Maximum)
18
+ * Normalizes each signal independently before stacking
19
+ * Useful for visualizing signals with different amplitude ranges
20
+ * Validates that all signals have the same size before combining
21
+ * New parameter class `SignalsToImageParam` with orientation and normalization settings
22
+ * New enum `SignalsToImageOrientation` for specifying row/column orientation
23
+ * Comprehensive validation tests for all combinations of parameters
24
+ * Ideal for creating spectrograms, heatmaps, or waterfall displays from signal collections
25
+
26
+ * **Non-uniform coordinate support for images**: Added comprehensive support for non-uniform pixel coordinates
27
+ * `ImageObj` now supports both uniform and non-uniform coordinate systems:
28
+ * Uniform coordinates: defined by origin (`x0`, `y0`) and pixel spacing (`dx`, `dy`)
29
+ * Non-uniform coordinates: defined by coordinate arrays (`xcoords`, `ycoords`)
30
+ * New methods for coordinate manipulation:
31
+ * `set_coords()`: Set non-uniform X and Y coordinate arrays
32
+ * `is_uniform_coords`: Property to check if coordinates are uniform
33
+ * New computation function `set_uniform_coords()`: Convert non-uniform to uniform coordinates
34
+ * Automatically extracts uniform spacing from non-uniform arrays
35
+ * Handles numerical precision issues from linspace-generated arrays
36
+ * Preserves image data while transforming coordinate system
37
+ * Enhanced `calibration()` function with polynomial support:
38
+ * Now supports polynomial calibration up to cubic order: `dst = a0 + a1*src + a2*src² + a3*src³`
39
+ * Parameter class changed from `a, b` (linear) to `a0, a1, a2, a3` (polynomial)
40
+ * Works on X-axis, Y-axis (creating non-uniform coordinates), and Z-axis (data values)
41
+ * Linear calibration is a special case with `a2=0, a3=0`
42
+ * Automatically handles conversion between uniform and non-uniform coordinate systems
43
+ * Enhanced I/O support:
44
+ * HDF5 format now serializes/deserializes non-uniform coordinates
45
+ * Coordinated text files support non-uniform coordinate arrays
46
+ * All geometric operations updated to handle both coordinate types:
47
+ * Coordinate transformations preserve or create appropriate coordinate system
48
+ * ROI operations work seamlessly with both uniform and non-uniform coordinates
49
+
50
+ * **DateTime support for signal data**: Added comprehensive datetime handling for signal X-axis data
51
+ * Automatic detection and conversion of datetime columns when reading CSV files
52
+ * Detects datetime values in the first or second column (handling index columns)
53
+ * Validates datetime format and ensures reasonable date ranges (post-1900)
54
+ * Converts datetime strings to float timestamps for efficient computation
55
+ * Preserves datetime metadata for proper display and export
56
+ * New `SignalObj` methods for datetime manipulation:
57
+ * `set_x_from_datetime()`: Convert datetime objects/strings to signal X data with configurable time units (s, ms, μs, ns, min, h)
58
+ * `get_x_as_datetime()`: Retrieve X values as datetime objects for display or export
59
+ * `is_x_datetime()`: Check if signal contains datetime data
60
+ * Enhanced CSV export to preserve datetime format when writing signals with datetime X-axis
61
+ * New constants module (`sigima.objects.signal.constants`) defining datetime metadata keys and time unit conversion factors
62
+ * Comprehensive unit tests covering datetime conversion, I/O roundtrip, and edge cases
63
+ * Example test data file with real-world temperature/humidity logger data (`datetime.txt`)
64
+
65
+ * **New client subpackage**: Migrated DataLab client functionality to `sigima.client`
66
+ * Added `sigima.client.remote.SimpleRemoteProxy` for XML-RPC communication with DataLab
67
+ * Added `sigima.client.base.SimpleBaseProxy` as abstract base class for DataLab proxies
68
+ * Included comprehensive unit tests and API documentation
69
+ * Maintains headless design principle (GUI components excluded)
70
+ * Enables remote control of DataLab application from Python scripts and Jupyter notebooks
71
+ * Client functionality is now directly accessible: `from sigima import SimpleRemoteProxy`
72
+
73
+ * **New image ROI feature**: Added inverse ROI functionality for image ROIs
74
+ * Added `inside` parameter to `BaseSingleImageROI` base class, inherited by all image ROI types (`PolygonalROI`, `RectangularROI`, `CircularROI`)
75
+ * When `inside=True`, ROI represents the region inside the shape (inverted behavior)
76
+ * When `inside=False` (default), ROI represents the region outside the shape (original behavior)
77
+ * Fully integrated with serialization (`to_dict`/`from_dict`) and parameter conversion (`to_param`/`from_param`)
78
+ * Signal ROIs (`SegmentROI`) are unaffected as the concept doesn't apply to 1D intervals
79
+ * Optimal architecture with zero code duplication - all `inside` functionality implemented once in the base class
80
+ * Individual ROI classes no longer need custom constructors, inheriting directly from base class
81
+
82
+ * New image operation:
83
+ * Convolution.
84
+
85
+ * New image format support:
86
+ * **Coordinated text image files**: Added support for reading coordinated text files (`.txt` extension), similar to the Matris image format.
87
+ * Supports both real and complex-valued image data with optional error images.
88
+ * Automatically handles NaN values in the data.
89
+ * Reads metadata including units (X, Y, Z) and labels from file headers.
90
+
91
+ * New image analysis features:
92
+ * Horizontal and vertical projections
93
+ * Compute the horizontal projection profile by summing values along the y-axis (`sigima.proc.image.measurement.horizontal_projection`).
94
+ * Compute the vertical projection profile by summing values along the x-axis (`sigima.proc.image.measurement.vertical_projection`).
95
+
96
+ * **New curve fitting algorithms**: Complete curve fitting framework with `sigima.tools.signal.fitting` module:
97
+ * **Core fitting functions**: Comprehensive set of curve fitting algorithms for scientific data analysis:
98
+ * `linear_fit`: Linear regression fitting
99
+ * `polynomial_fit`: Polynomial fitting with configurable degree
100
+ * `gaussian_fit`: Gaussian profile fitting for peak analysis
101
+ * `lorentzian_fit`: Lorentzian profile fitting for spectroscopy
102
+ * `voigt_fit`: Voigt profile fitting (convolution of Gaussian and Lorentzian profiles)
103
+ * `exponential_fit`: Single exponential fitting with overflow protection
104
+ * `piecewiseexponential_fit`: Piecewise exponential (raise-decay) fitting with advanced parameter estimation
105
+ * `planckian_fit`: Planckian (blackbody radiation) fitting with correct physics implementation
106
+ * `twohalfgaussian_fit`: Asymmetric peak fitting with separate left/right parameters
107
+ * `multilorentzian_fit`: Multi-peak Lorentzian fitting for complex spectra
108
+ * `sinusoidal_fit`: Sinusoidal fitting with FFT-based frequency estimation
109
+ * `cdf_fit`: Cumulative Distribution Function fitting using error function
110
+ * `sigmoid_fit`: Sigmoid (logistic) function fitting for S-shaped curves
111
+ * **Advanced piecewise exponential (raise-decay) fitting**: Enhanced algorithm with:
112
+ * Standard piecewise exponential model: `y = a_left*exp(b_left*x) + a_right*exp(b_right*x) + y0`
113
+ * Multi-start optimization strategy for robust convergence to global minimum
114
+ * Support for both positive and negative exponential rates (growth and decay components)
115
+ * Comprehensive parameter bounds validation to prevent optimization errors
116
+ * **Enhanced asymmetric peak fitting**: Advanced `twohalfgaussian_fit` with:
117
+ * Separate baseline offsets for left and right sides (`y0_left`, `y0_right`)
118
+ * Independent amplitude parameters (`amp_left`, `amp_right`) for better asymmetric modeling
119
+ * Robust baseline estimation using percentile-based methods
120
+ * **Technical features**: All fitting functions include:
121
+ * Automatic initial parameter estimation from data characteristics
122
+ * Proper bounds enforcement ensuring optimization stability
123
+ * Comprehensive error handling and parameter validation
124
+ * Consistent dataclass-based parameter structures
125
+ * Full test coverage with synthetic and experimental data validation
126
+
127
+ * New common signal/image feature:
128
+ * Added `phase` (argument) feature to extract the phase information from complex signals or images.
129
+ * Added operation to create complex-valued signal/image from real and imaginary parts.
130
+ * Added operation to create complex-valued signal/image from magnitude and phase.
131
+ * Standard deviation of the selected signals or images (this complements the "Average" feature).
132
+ * Generate new signal or image: Poisson noise.
133
+ * Add noise to the selected signals or images.
134
+ * Gaussian, Poisson or uniform noise can be added.
135
+ * New utility functions to generate file basenames.
136
+ * Deconvolution in the frequency domain.
137
+
138
+ * New ROI features:
139
+ * Improved single ROI title handling, using default title based on the index of the ROI when no title is provided.
140
+ * Added `combine_with` method to ROI objects (`SignalROI` and `ImageROI`) to return a new ROI that combines the current ROI with another one (union) and handling duplicate ROIs.
141
+ * Image ROI transformations:
142
+ * Before this change, image ROI were removed after applying each single computation function.
143
+ * Now, the geometry computation functions preserve the ROI information across transformations: the transformed ROIs are automatically updated in the image object.
144
+ * Image ROI coordinates:
145
+ * Before this change, image ROI coordinates were defined using indices by default.
146
+ * Now, `ROI2DParam` uses physical coordinates by default.
147
+ * Note that ROI may still be defined using indices instead (using `create_image_roi` function).
148
+ * Image ROI grid:
149
+ * New `generate_image_grid_roi` function: create a grid of ROIs from an image, with customizable parameters for grid size, spacing, and naming.
150
+ * This function allows for easy extraction of multiple ROIs from an image in a structured manner.
151
+ * Parameters are handled via the `ROIGridParam` class, which provides a convenient way to specify grid properties:
152
+ * `nx` / `ny`: Number of grid cells in the X/Y direction.
153
+ * `xsize` / `ysize`: Size of each grid cell in pixels.
154
+ * `xtranslation` / `ytranslation`: Translation of the grid in pixels.
155
+ * `xdirection` / `ydirection`: Direction of the grid (increasing/decreasing).
156
+
157
+ * New image processing features:
158
+ * New "2D resampling" feature:
159
+ * This feature allows to resample 2D images to a new coordinate grid using interpolation.
160
+ * It supports two resampling modes: pixel size and output shape.
161
+ * Multiple interpolation methods are available: linear, cubic, and nearest neighbor.
162
+ * The `fill_value` parameter controls how out-of-bounds pixels are handled, with support for numeric values or NaN.
163
+ * Automatic data type conversion ensures proper NaN handling for integer images.
164
+ * It is implemented in the `sigima.proc.image.resampling` function with parameters defined in `Resampling2DParam`.
165
+ * New "Frequency domain Gaussian filter" feature:
166
+ * This feature allows to filter an image in the frequency domain using a Gaussian filter.
167
+ * It is implemented in the `sigima.proc.image.frequency_domain_gaussian_filter` function.
168
+ * New "Erase" feature:
169
+ * This feature allows to erase an area of the image using the mean value of the image.
170
+ * It is implemented in the `sigima.proc.image.erase` function.
171
+ * The erased area is defined by a region of interest (ROI) parameter set.
172
+ * Example usage:
173
+
174
+ ```python
175
+ import numpy as np
176
+ import sigima.objects as sio
177
+ import sigima.proc.image as sipi
178
+
179
+ obj = sio.create_image("test_image", data=np.random.rand(1024, 1024))
180
+ p = sio.ROI2DParam.create(x0=600, y0=800, width=300, height=200)
181
+ dst = sipi.erase(obj, p)
182
+ ```
183
+
184
+ * By default, pixel binning changes the pixel size.
185
+
186
+ * Improved centroid estimation:
187
+ * New `get_centroid_auto` method implements an adaptive strategy that chooses between the Fourier-based centroid and a more robust fallback (scikit-image), based on agreement with a projected profile-based reference.
188
+ * Introduced `get_projected_profile_centroid` function for robust estimation via 1D projections (median or barycentric), offering high accuracy even with truncated or noisy images.
189
+ * These changes improve centroid accuracy and stability in edge cases (e.g. truncated disks or off-center spots), while preserving noise robustness.
190
+ * See [DataLab issue #251](https://github.com/DataLab-Platform/DataLab/issues/251) for more details.
191
+
192
+ * New signal processing features:
193
+ * New "Brick wall filter" feature:
194
+ * This feature allows to filter a signal in the frequency domain using an ideal ("brick wall") filter.
195
+ * It is implemented in `sigima.proc.signal.frequency_filter`, along the other frequency domain filtering features (`Bessel`, `Butterworth`, etc.).
196
+ * Enhanced zero padding to support prepend and append. Change default strategy to next power of 2.
197
+ * **Pulse analysis algorithms**: Comprehensive pulse feature extraction framework in `sigima.tools.signal.pulse` module:
198
+ * **Core pulse analysis functions**: Complete set of algorithms for step and square pulse characterization:
199
+ * `extract_pulse_features`: Main function for automated pulse feature extraction
200
+ * `heuristically_recognize_shape`: Intelligent signal type detection (step, square, or other)
201
+ * `detect_polarity`: Robust polarity detection using baseline analysis
202
+ * **Advanced timing parameter extraction**: Precise measurement algorithms for:
203
+ * Rise and fall time calculations with configurable start/stop ratios (e.g., 10%-90%)
204
+ * Timing parameters at specific fractions (x10, x50, x90, x100) of signal amplitude
205
+ * Full width at half maximum (FWHM) computation for square pulses
206
+ * Foot duration measurement for pulse characterization
207
+ * **Baseline analysis capabilities**: Statistical methods for:
208
+ * Automatic baseline range detection from signal extremes
209
+ * Robust baseline level estimation using mean values within ranges
210
+ * Start and end baseline characterization for differential analysis
211
+ * **Signal validation and error handling**: Comprehensive input validation with:
212
+ * Data array consistency checks and NaN/infinity detection
213
+ * Signal length validation and range boundary verification
214
+ * Graceful error handling with descriptive exception messages
215
+ * **PulseFeatures dataclass**: Structured result container with all extracted parameters:
216
+ * Amplitude, polarity, and offset measurements
217
+ * Timing parameters (rise_time, fall_time, fwhm, x10, x50, x90, x100)
218
+ * Baseline ranges (xstartmin, xstartmax, xendmin, xendmax)
219
+ * Signal shape classification and foot duration
220
+ * Implementation leverages robust statistical methods and provides both high-level convenience functions and low-level building blocks for custom pulse analysis workflows.
221
+ * Comprehensive uncertainty propagation implementation:
222
+ * Added mathematically correct uncertainty propagation to ~15 core signal processing functions.
223
+ * Enhanced `Wrap1to1Func` class to handle uncertainty propagation for mathematical functions (`sqrt`, `log10`, `exp`, `clip`, `absolute`, `real`, `imag`).
224
+ * Implemented uncertainty propagation for arithmetic operations (`product_constant`, `division_constant`).
225
+ * Added uncertainty propagation for advanced processing functions (`power`, `normalize`, `derivative`, `integral`, `calibration`).
226
+ * All implementations use proper error propagation formulas with numerical stability handling (NaN/infinity protection).
227
+ * Optimized for memory efficiency by leveraging `dst_1_to_1` automatic uncertainty copying and in-place modifications.
228
+ * Maintains backward compatibility with existing signal processing workflows.
229
+
230
+ * New 2D ramp image generator:
231
+ * This feature allows to generate a 2D ramp image: z = a(x − x₀) + b(y − y₀) + c
232
+ * It is implemented in the `sigima.objects.Ramp2DParam` parameter class.
233
+ * Example usage:
234
+
235
+ ```python
236
+ import sigima.objects as sio
237
+ param = sio.Ramp2DParam.create(width=100, height=100, a=1.0, b=2.0)
238
+ image = sio.create_image_from_param(param)
239
+ ```
240
+
241
+ * New signal generators: linear chirp, logistic function, Planck function.
242
+
243
+ * New image "Extent" computed parameters:
244
+ * Added computed parameters for image extent: `xmin`, `xmax`, `ymin`, and `ymax`.
245
+ * These parameters are automatically calculated based on the image origin, pixel spacing, and dimensions.
246
+ * They provide the physical coordinate boundaries of the image for enhanced spatial analysis.
247
+
248
+ * New I/O features:
249
+ * Added HDF5 format for signal and image objects (extensions `.h5sig` and `.h5ima`) that may be opened with any HDF5 viewer.
250
+ * Added support for MCA (Multi-Channel Analyzer) spectrum file format:
251
+ * Reading MCA files (`.mca` extension) commonly used in spectroscopy and radiation detection
252
+ * Automatically extracts spectrum data and calibration information
253
+ * Supports energy calibration with interpolation for accurate X-axis values
254
+ * Parses metadata from multiple sections (PMCA SPECTRUM, DPP STATUS, CALIBRATION)
255
+ * Handles various encoding formats (UTF-8, Latin-1, CP1252) for maximum compatibility
256
+ * Added support for FT-Lab signal and image format.
257
+ * Added functions to read and write metadata and ROIs in JSON format:
258
+ * `sigima.io.read_metadata` and `sigima.io.write_metadata` for metadata.
259
+ * `sigima.io.read_roi` and `sigima.io.write_roi` for ROIs.
260
+ * Added convenience I/O functions `write_signals` and `write_images` with `SaveToDirectoryParam` support:
261
+ * These functions enable batch saving of multiple signal or image objects to a directory with configurable naming patterns.
262
+ * `SaveToDirectoryParam` provides control over file basenames (with Python format string support), extensions, directory paths, and overwrite behavior.
263
+ * Automatic filename conflict resolution ensures unique filenames when duplicates would occur.
264
+ * Enhanced workflow efficiency for processing and saving multiple objects in batch operations.
265
+
266
+ ✨ Core architecture update: scalar result types
267
+
268
+ * Introduced two new immutable result types: `TableResult` and `GeometryResult`, replacing the legacy `ResultProperties` and `ResultShape` objects.
269
+ * These new result types are computation-oriented and free of application-specific logic (e.g., Qt, metadata), enabling better separation of concerns and future reuse.
270
+ * Added a `TableResultBuilder` utility to incrementally define tabular computations (e.g., statistics on signals or images) and generate a `TableResult` object.
271
+ * All metadata-related behaviors of former result types have been migrated to the DataLab application layer.
272
+ * Removed obsolete or tightly coupled features such as `from_metadata_entry()` and `transform_shapes()` from the Sigima core.
273
+ * This refactoring greatly improves modularity, testability, and the clarity of the scalar computation API.
274
+
275
+ 🛠️ Bug fixes:
276
+
277
+ * Fix how data is managed in signal objects (`SignalObj`):
278
+ * Signal data is stored internally as a 2D array with shape `(2, n)`, where the first row is the x data and the second row is the y data: that is the `xydata` attribute.
279
+ * Because of this, when storing complex Y data, the data type is propagated to the x data, which is not always desired.
280
+ * As a workaround, the `x` property now returns the real part of the x data.
281
+ * Furthermore, the `get_data` method now returns a tuple of numpy arrays instead of a single array, allowing to access both x and y data separately, keeping the original data type.
282
+ * Fix ROI conversion between physical and indices coordinates:
283
+ * The conversion between physical coordinates and indices has been corrected (half pixel error was removed).
284
+ * The `indices_to_physical` and `physical_to_indices` methods now raise a `ValueError` if the input does not contain an even number of elements (x, y pairs).
285
+
286
+ 🔒 Security fixes:
287
+
288
+ * **Dependency vulnerability fix**: Fixed CVE-2023-4863 vulnerability in opencv-python-headless
289
+ * Updated minimum requirement from 4.5.4.60 to 4.8.1.78
290
+ * Addresses libwebp binaries vulnerability in bundled OpenCV wheels
291
+ * See [DataLab security advisory](https://github.com/DataLab-Platform/DataLab/security/dependabot/1) for details
292
+
293
+ ## sigima 0.2.0 ##
294
+
295
+ ⚠️ Major API changes:
296
+
297
+ * Rename `sigima.computation` to `sigima.proc`.
298
+ * Rename `sigima.algorithms` to `sigima.tools`.
299
+ * Rename `sigima.obj` to `sigima.objects`.
300
+ * Rename `sigima.param` to `sigima.params`.
301
+
302
+ ℹ️ Various changes:
303
+
304
+ * Add Sigima SVG logo.
305
+
306
+ 🛠️ Bug fixes:
307
+
308
+ * Fix API documentation and docstrings.
309
+
310
+ ## sigima 0.1.0 ##
311
+
312
+ This first version of the library is the result of the externalization of the signal and image processing features from the DataLab main repository.
@@ -1,29 +1,29 @@
1
- BSD 3-Clause License
2
-
3
- Copyright (c) 2023, DataLab Platform Developers.
4
- All rights reserved.
5
-
6
- Redistribution and use in source and binary forms, with or without
7
- modification, are permitted provided that the following conditions are met:
8
-
9
- 1. Redistributions of source code must retain the above copyright notice, this
10
- list of conditions and the following disclaimer.
11
-
12
- 2. Redistributions in binary form must reproduce the above copyright notice,
13
- this list of conditions and the following disclaimer in the documentation
14
- and/or other materials provided with the distribution.
15
-
16
- 3. Neither the name of the copyright holder nor the names of its
17
- contributors may be used to endorse or promote products derived from
18
- this software without specific prior written permission.
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2023, DataLab Platform Developers.
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ 3. Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1,4 +1,4 @@
1
- graft doc
2
- include CHANGELOG.md
3
- include CONTRIBUTING.md
1
+ graft doc
2
+ include CHANGELOG.md
3
+ include CONTRIBUTING.md
4
4
  include requirements.txt
sigima-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,233 @@
1
+ Metadata-Version: 2.4
2
+ Name: sigima
3
+ Version: 1.0.0
4
+ Summary: Scientific computing engine for 1D signals and 2D images, part of the DataLab open-source platform.
5
+ Author-email: Pierre Raybaut <p.raybaut@codra.fr>
6
+ Maintainer-email: DataLab Platform Developers <p.raybaut@codra.fr>
7
+ License-Expression: BSD-3-Clause
8
+ Project-URL: Homepage, https://github.com/DataLab-Platform/Sigima
9
+ Project-URL: Documentation, https://sigima.readthedocs.io/en/latest/
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Education
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Intended Audience :: End Users/Desktop
15
+ Classifier: Operating System :: MacOS :: MacOS X
16
+ Classifier: Operating System :: Microsoft :: Windows :: Windows 7
17
+ Classifier: Operating System :: Microsoft :: Windows :: Windows 8
18
+ Classifier: Operating System :: Microsoft :: Windows :: Windows 10
19
+ Classifier: Operating System :: Microsoft :: Windows :: Windows 11
20
+ Classifier: Operating System :: POSIX :: Linux
21
+ Classifier: Programming Language :: Python :: 3.9
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Programming Language :: Python :: 3.13
26
+ Classifier: Topic :: Scientific/Engineering
27
+ Classifier: Topic :: Scientific/Engineering :: Image Processing
28
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
29
+ Requires-Python: <4,>=3.9
30
+ Description-Content-Type: text/markdown
31
+ License-File: LICENSE
32
+ Requires-Dist: guidata>=3.13
33
+ Requires-Dist: NumPy>=1.22
34
+ Requires-Dist: SciPy>=1.10.1
35
+ Requires-Dist: scikit-image>=0.19.2
36
+ Requires-Dist: pandas>=1.4
37
+ Requires-Dist: PyWavelets>=1.2
38
+ Requires-Dist: packaging>=21.3
39
+ Requires-Dist: typing-extensions>=4.0
40
+ Requires-Dist: makefun>=1.13.1
41
+ Provides-Extra: opencv
42
+ Requires-Dist: opencv-python-headless>=4.8.1.78; extra == "opencv"
43
+ Provides-Extra: dev
44
+ Requires-Dist: build; extra == "dev"
45
+ Requires-Dist: babel; extra == "dev"
46
+ Requires-Dist: ruff; extra == "dev"
47
+ Requires-Dist: pylint; extra == "dev"
48
+ Requires-Dist: Coverage; extra == "dev"
49
+ Requires-Dist: pre-commit; extra == "dev"
50
+ Provides-Extra: doc
51
+ Requires-Dist: sphinx; extra == "doc"
52
+ Requires-Dist: sphinx-gallery; extra == "doc"
53
+ Requires-Dist: sphinx_intl; extra == "doc"
54
+ Requires-Dist: myst_parser; extra == "doc"
55
+ Requires-Dist: sphinx_design; extra == "doc"
56
+ Requires-Dist: sphinx-copybutton; extra == "doc"
57
+ Requires-Dist: pydata-sphinx-theme; extra == "doc"
58
+ Requires-Dist: sphinx-gallery; extra == "doc"
59
+ Requires-Dist: qtpy; extra == "doc"
60
+ Requires-Dist: PyQt5; extra == "doc"
61
+ Requires-Dist: plotpy; extra == "doc"
62
+ Requires-Dist: opencv-python-headless>=4.8.1.78; extra == "doc"
63
+ Provides-Extra: test
64
+ Requires-Dist: pytest; extra == "test"
65
+ Requires-Dist: pytest-xvfb; extra == "test"
66
+ Provides-Extra: qt
67
+ Requires-Dist: qtpy; extra == "qt"
68
+ Requires-Dist: PyQt5; extra == "qt"
69
+ Requires-Dist: plotpy; extra == "qt"
70
+ Dynamic: license-file
71
+
72
+ # Sigima - Scientific Image and Signal Processing Library
73
+
74
+ ![Sigima](https://raw.githubusercontent.com/DataLab-Platform/Sigima/main/doc/images/Sigima-Banner.svg)
75
+
76
+ [![license](https://img.shields.io/pypi/l/sigima.svg)](./LICENSE)
77
+ [![pypi version](https://img.shields.io/pypi/v/sigima.svg)](https://pypi.org/project/sigima/)
78
+ [![PyPI status](https://img.shields.io/pypi/status/sigima.svg)](https://github.com/DataLab-Platform/Sigima)
79
+ [![PyPI pyversions](https://img.shields.io/pypi/pyversions/sigima.svg)](https://pypi.org/project/sigima/)
80
+
81
+ **Sigima** is an **open-source Python library for scientific image and signal processing**,
82
+ designed as a modular and testable foundation for building advanced analysis pipelines.
83
+
84
+ 🔬 Developed by the [DataLab Platform Developers](https://github.com/DataLab-Platform), Sigima powers the computation backend of [DataLab](https://datalab-platform.com/).
85
+
86
+ ## 🌟 Project & Sponsors
87
+
88
+ | Project/Sponsor | Description |
89
+ |---------------------|-------------|
90
+ | <a href="https://datalab-platform.com/"><img src="https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/resources/DataLab-Banner.svg" alt="DataLab logo" style="height:80px;"/></a> | Open-source platform for scientific signal and image processing, powered by Sigima. |
91
+ | <a href="https://nlnet.nl/"><img src="https://nlnet.nl/logo/banner.svg" alt="NLnet logo" style="height:80px;width:209px;"/></a> | European non-profit supporting open-source and internet projects. Sigima has received funding from NLnet for its development, through the DataLab project. |
92
+
93
+ ---
94
+
95
+ ## ✨ Highlights
96
+
97
+ - Unified processing model for **1D signals** and **2D images**
98
+ - Works with **object-oriented wrappers** (`SignalObj`, `ImageObj`) extending NumPy arrays
99
+ - Includes common processing tasks: filtering, smoothing, binning, thresholding, labeling, etc.
100
+ - Structured for **testability**, **modularity**, and **headless usage**
101
+ - 100% **independent of GUI frameworks** (no Qt/PlotPyStack dependencies)
102
+
103
+ ---
104
+
105
+ ## 💡 Use cases
106
+
107
+ Sigima is meant to be:
108
+
109
+ - A **processing backend** for scientific/industrial tools
110
+ - A library to **build reproducible analysis pipelines**
111
+ - A component for **headless automation or remote execution**
112
+ - A testbed for **developing and validating new signal/image operations**
113
+
114
+ ---
115
+
116
+ ## 📖 Design Philosophy
117
+
118
+ The main goal of **Sigima** is to provide a unified, high-level API for handling and processing **1D signals** and **2D images**, through dedicated Python objects: `SignalObj` and `ImageObj`.
119
+
120
+ The library is organized to separate concerns clearly:
121
+
122
+ - `sigima.objects`: defines the object model for signals and images.
123
+ - `sigima.params`: contains parameter classes for configuring processing functions.
124
+ - `sigima.proc`: provides high-level processing functions that operate directly on `SignalObj` and `ImageObj` instances.
125
+ - `sigima.io`: handles input/output operations (CSV files, image formats, etc.) for signals and images.
126
+ - `sigima.tools`: contains **low-level, NumPy-based functions** that implement the core logic behind many processing routines.
127
+
128
+ This structure supports a **layered programming model**:
129
+
130
+ - Developers can use `computation` to process full signal/image objects in an object-oriented manner.
131
+ - Or they can directly use `tools` to process raw NumPy arrays — for instance, in custom tools or when integrating Sigima into other projects.
132
+
133
+ > ⚠️ `sigima.tools` is not intended as a general-purpose NumPy extension. Its purpose is to **fill in the gaps** of common scientific libraries (NumPy, SciPy, scikit-image, etc.), offering consistent tools for signal/image processing in the context of Sigima and similar projects.
134
+
135
+ ---
136
+
137
+ ## Usage Outside Sigima
138
+
139
+ Although Sigima is designed primarily for object-based processing, some of its core functions are useful on their own.
140
+
141
+ For instance, the [DataLab](https://datalab-platform.com) project — an open-source platform for signal/image processing — uses many functions from `sigima.tools` independently of the object model. This demonstrates how `sigima.tools` can serve as a **lightweight utility layer** in scientific and industrial Python applications, even when the object model is not used directly.
142
+
143
+ To maintain this flexibility and avoid confusion, the distinction between `tools` (array-based) and `computation` (object-based) is intentional and explicit.
144
+
145
+ ---
146
+
147
+ ## 📦 Installation
148
+
149
+ ```bash
150
+ pip install sigima
151
+ ```
152
+
153
+ Or in a development environment:
154
+
155
+ ```bash
156
+ git clone https://github.com/DataLab-Platform/Sigima.git
157
+ cd Sigima
158
+ pip install -e .
159
+ ```
160
+
161
+ ---
162
+
163
+ ## 📚 Documentation
164
+
165
+ 📖 Full documentation (in progress) is available at:
166
+ 👉 <https://sigima.readthedocs.io/>
167
+
168
+ > Want to use Sigima inside DataLab with GUI tools?
169
+ > Check out the full platform: [DataLab](https://datalab-platform.com/)
170
+
171
+ ---
172
+
173
+ ## ⚙️ Architecture
174
+
175
+ Sigima is organized by data type:
176
+
177
+ ```text
178
+ sigima/
179
+ ├── tools/ # Low-level NumPy-based algorithms supporting some computation functions
180
+ ├── proc/ # High-level processing functions operating on SignalObj/ImageObj
181
+ │ ├── base/ # Common processing functions
182
+ │ ├── signal/ # 1D signal processing
183
+ │ └── image/ # 2D image processing
184
+ ```
185
+
186
+ Each domain provides:
187
+
188
+ - Low-level functions operating on NumPy arrays
189
+ - High-level functions operating on `SignalObj` or `ImageObj`
190
+
191
+ ---
192
+
193
+ ## 🧪 Testing
194
+
195
+ Sigima comes with unit tests based on `pytest`.
196
+
197
+ To run all tests:
198
+
199
+ ```bash
200
+ pytest
201
+ ```
202
+
203
+ To run GUI-assisted validation tests (optional):
204
+
205
+ ```bash
206
+ pytest --gui
207
+ ```
208
+
209
+ ---
210
+
211
+ ## 🧠 License
212
+
213
+ Sigima is distributed under the terms of the BSD 3-Clause license.
214
+ See [LICENSE](./LICENSE) for details.
215
+
216
+ ---
217
+
218
+ ## 🤝 Contributing
219
+
220
+ Bug reports, feature requests and pull requests are welcome!
221
+ See the [CONTRIBUTING](https://datalab-platform.com/en/contributing) guide to get started.
222
+
223
+ ---
224
+
225
+ ![Python](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/Python.png)
226
+ ![NumPy](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/NumPy.png)
227
+ ![SciPy](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/SciPy.png)
228
+ ![scikit-image](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/scikit-image.png)
229
+ ![OpenCV](https://raw.githubusercontent.com/DataLab-Platform/DataLab/main/doc/images/logos/OpenCV.png)
230
+
231
+ ---
232
+
233
+ © DataLab Platform Developers