tomwer 1.1.1__py3-none-any.whl → 1.2.0a0__py3-none-any.whl

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 (353) hide show
  1. orangecontrib/tomwer/__init__.py +1 -0
  2. orangecontrib/tomwer/orange/managedprocess.py +6 -4
  3. orangecontrib/tomwer/state_summary.py +3 -2
  4. orangecontrib/tomwer/widgets/__init__.py +2 -2
  5. orangecontrib/tomwer/widgets/cluster/FutureSupervisorOW.py +9 -7
  6. orangecontrib/tomwer/widgets/cluster/SlurmClusterOW.py +6 -5
  7. orangecontrib/tomwer/widgets/control/AdvancementOW.py +2 -1
  8. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +235 -0
  9. orangecontrib/tomwer/widgets/control/DataListOW.py +7 -5
  10. orangecontrib/tomwer/widgets/control/DataListenerOW.py +13 -14
  11. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +8 -6
  12. orangecontrib/tomwer/widgets/control/DataTransfertOW.py +9 -9
  13. orangecontrib/tomwer/widgets/control/DataValidatorOW.py +7 -8
  14. orangecontrib/tomwer/widgets/control/DataWatcherOW.py +25 -17
  15. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +8 -8
  16. orangecontrib/tomwer/widgets/control/FilterOW.py +9 -8
  17. orangecontrib/tomwer/widgets/control/NXTomomillMixIn.py +3 -4
  18. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +13 -14
  19. orangecontrib/tomwer/widgets/control/NotifierOW.py +3 -4
  20. orangecontrib/tomwer/widgets/control/SingleTomoObjOW.py +7 -5
  21. orangecontrib/tomwer/widgets/control/TimerOW.py +6 -5
  22. orangecontrib/tomwer/widgets/control/TomoObjSerieOW.py +5 -3
  23. orangecontrib/tomwer/widgets/control/VolumeSelector.py +8 -6
  24. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +10 -9
  25. orangecontrib/tomwer/widgets/control/icons/datadiscover.png +0 -0
  26. orangecontrib/tomwer/widgets/control/icons/datadiscover.svg +137 -0
  27. orangecontrib/tomwer/widgets/control/icons/nxtomomill.png +0 -0
  28. orangecontrib/tomwer/widgets/control/icons/nxtomomill.svg +5 -8
  29. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +13 -15
  30. orangecontrib/tomwer/widgets/debugtools/ObjectInspectorOW.py +3 -2
  31. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +10 -7
  32. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +8 -5
  33. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +5 -2
  34. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +6 -3
  35. orangecontrib/tomwer/widgets/edit/test/test_dark_flat_patch.py +8 -6
  36. orangecontrib/tomwer/widgets/edit/test/test_image_key_editor.py +3 -1
  37. orangecontrib/tomwer/widgets/edit/test/test_image_key_upgrader.py +3 -1
  38. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -1
  39. orangecontrib/tomwer/widgets/other/PythonScriptOW.py +11 -11
  40. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +22 -27
  41. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +13 -11
  42. orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +11 -9
  43. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +16 -14
  44. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +27 -32
  45. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +27 -34
  46. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +23 -25
  47. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +16 -18
  48. orangecontrib/tomwer/widgets/reconstruction/TofuOW.py +9 -7
  49. orangecontrib/tomwer/widgets/reconstruction/icons/nabu_2d.png +0 -0
  50. orangecontrib/tomwer/widgets/reconstruction/icons/nabu_2d.svg +8 -11
  51. orangecontrib/tomwer/widgets/visualization/DataViewerOW.py +8 -8
  52. orangecontrib/tomwer/widgets/visualization/DiffViewerOW.py +6 -4
  53. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +4 -3
  54. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +4 -3
  55. orangecontrib/tomwer/widgets/visualization/RadioStackOW.py +6 -4
  56. orangecontrib/tomwer/widgets/visualization/SampleMovedOW.py +8 -6
  57. orangecontrib/tomwer/widgets/visualization/SinogramViewerOW.py +6 -3
  58. orangecontrib/tomwer/widgets/visualization/SliceStackOW.py +7 -5
  59. orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +5 -4
  60. tomwer/__init__.py +1 -1
  61. tomwer/__main__.py +2 -1
  62. tomwer/app/axis.py +18 -14
  63. tomwer/app/canvas.py +7 -5
  64. tomwer/app/canvas_launcher/config.py +8 -6
  65. tomwer/app/canvas_launcher/environ.py +1 -2
  66. tomwer/app/canvas_launcher/mainwindow.py +23 -22
  67. tomwer/app/canvas_launcher/splash.py +1 -0
  68. tomwer/app/canvas_launcher/widgetsscheme.py +3 -3
  69. tomwer/app/darkref.py +7 -6
  70. tomwer/app/darkrefpatch.py +8 -6
  71. tomwer/app/diffframe.py +6 -4
  72. tomwer/app/imagekeyeditor.py +10 -10
  73. tomwer/app/imagekeyupgrader.py +8 -6
  74. tomwer/app/intensitynormalization.py +8 -8
  75. tomwer/app/lamino.py +5 -3
  76. tomwer/app/nabuapp.py +8 -6
  77. tomwer/app/nxtomoeditor.py +6 -5
  78. tomwer/app/radiostack.py +8 -6
  79. tomwer/app/rsync.py +3 -3
  80. tomwer/app/saaxis.py +22 -23
  81. tomwer/app/sadeltabeta.py +21 -21
  82. tomwer/app/samplemoved.py +8 -6
  83. tomwer/app/scanviewer.py +7 -6
  84. tomwer/app/sinogramviewer.py +8 -7
  85. tomwer/app/slicestack.py +8 -6
  86. tomwer/app/stopdatalistener.py +2 -1
  87. tomwer/core/futureobject.py +15 -6
  88. tomwer/core/log/logger.py +4 -3
  89. tomwer/core/log/processlog.py +0 -1
  90. tomwer/core/process/conditions/filters.py +3 -3
  91. tomwer/core/process/control/datadiscovery.py +7 -0
  92. tomwer/core/process/control/datalistener/datalistener.py +22 -21
  93. tomwer/core/process/control/datalistener/rpcserver.py +18 -28
  94. tomwer/core/process/control/datawatcher/datawatcher.py +15 -12
  95. tomwer/core/process/control/datawatcher/datawatcherobserver.py +11 -8
  96. tomwer/core/process/control/datawatcher/datawatcherprocess.py +7 -5
  97. tomwer/core/process/control/datawatcher/edfdwprocess.py +5 -15
  98. tomwer/core/process/control/datawatcher/hdf5dwprocess.py +3 -1
  99. tomwer/core/process/control/datawatcher/status.py +2 -0
  100. tomwer/core/process/control/nxtomomill.py +7 -6
  101. tomwer/core/process/control/scanlist.py +2 -1
  102. tomwer/core/process/control/scanselector.py +1 -0
  103. tomwer/core/process/control/scantransfer.py +12 -12
  104. tomwer/core/process/control/scanvalidator.py +7 -6
  105. tomwer/core/process/control/test/test_volume_link.py +5 -4
  106. tomwer/core/process/control/timer.py +4 -4
  107. tomwer/core/process/control/volumeselector.py +1 -0
  108. tomwer/core/process/control/volumesymlink.py +8 -9
  109. tomwer/core/process/edit/darkflatpatch.py +9 -12
  110. tomwer/core/process/edit/imagekeyeditor.py +11 -13
  111. tomwer/core/process/reconstruction/axis/axis.py +36 -38
  112. tomwer/core/process/reconstruction/axis/mode.py +2 -1
  113. tomwer/core/process/reconstruction/axis/params.py +23 -28
  114. tomwer/core/process/reconstruction/darkref/darkrefs.py +23 -27
  115. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +14 -18
  116. tomwer/core/process/reconstruction/darkref/params.py +3 -1
  117. tomwer/core/process/reconstruction/lamino/tofu.py +11 -15
  118. tomwer/core/process/reconstruction/nabu/castvolume.py +15 -18
  119. tomwer/core/process/reconstruction/nabu/nabucommon.py +19 -20
  120. tomwer/core/process/reconstruction/nabu/nabuscores.py +16 -14
  121. tomwer/core/process/reconstruction/nabu/nabuslices.py +27 -22
  122. tomwer/core/process/reconstruction/nabu/nabuvolume.py +20 -22
  123. tomwer/core/process/reconstruction/nabu/utils.py +17 -15
  124. tomwer/core/process/reconstruction/normalization/__init__.py +1 -3
  125. tomwer/core/process/reconstruction/normalization/normalization.py +16 -21
  126. tomwer/core/process/reconstruction/normalization/params.py +2 -2
  127. tomwer/core/process/reconstruction/saaxis/__init__.py +1 -1
  128. tomwer/core/process/reconstruction/saaxis/params.py +6 -7
  129. tomwer/core/process/reconstruction/saaxis/saaxis.py +44 -55
  130. tomwer/core/process/reconstruction/sadeltabeta/__init__.py +1 -1
  131. tomwer/core/process/reconstruction/sadeltabeta/params.py +9 -13
  132. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +40 -46
  133. tomwer/core/process/reconstruction/scores/__init__.py +2 -2
  134. tomwer/core/process/reconstruction/scores/params.py +6 -9
  135. tomwer/core/process/reconstruction/scores/scores.py +10 -13
  136. tomwer/core/process/reconstruction/test/test_axis_params.py +4 -2
  137. tomwer/core/process/reconstruction/test/test_darkref.py +1 -2
  138. tomwer/core/process/reconstruction/test/test_darkref_copy.py +3 -1
  139. tomwer/core/process/reconstruction/test/test_paramsbase.py +1 -1
  140. tomwer/core/process/reconstruction/test/test_saaxis.py +11 -7
  141. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +5 -4
  142. tomwer/core/process/reconstruction/test/test_utils.py +3 -2
  143. tomwer/core/process/script/python.py +6 -8
  144. tomwer/core/process/task.py +11 -12
  145. tomwer/core/process/test/test_axis.py +12 -9
  146. tomwer/core/process/test/test_conditions.py +8 -8
  147. tomwer/core/process/test/test_dark_and_flat.py +9 -8
  148. tomwer/core/process/test/test_data_listener.py +5 -3
  149. tomwer/core/process/test/test_data_transfer.py +14 -12
  150. tomwer/core/process/test/test_data_watcher.py +3 -1
  151. tomwer/core/process/test/test_lamino.py +3 -1
  152. tomwer/core/process/test/test_nabu.py +13 -12
  153. tomwer/core/process/test/test_normalization.py +7 -5
  154. tomwer/core/process/test/test_timer.py +2 -1
  155. tomwer/core/process/utils.py +9 -9
  156. tomwer/core/progress.py +3 -4
  157. tomwer/core/scan/blissscan.py +4 -2
  158. tomwer/core/scan/edfscan.py +26 -29
  159. tomwer/core/scan/futurescan.py +2 -1
  160. tomwer/core/scan/hdf5scan.py +21 -28
  161. tomwer/core/scan/scanbase.py +18 -18
  162. tomwer/core/scan/scanfactory.py +20 -21
  163. tomwer/core/scan/scantype.py +7 -0
  164. tomwer/core/scan/test/test_edf.py +2 -1
  165. tomwer/core/scan/test/test_future_scan.py +2 -1
  166. tomwer/core/scan/test/test_h5.py +5 -4
  167. tomwer/core/scan/test/test_process_registration.py +5 -3
  168. tomwer/core/scan/test/test_scan.py +11 -9
  169. tomwer/core/settings.py +1 -2
  170. tomwer/core/test/test_lamino.py +3 -2
  171. tomwer/core/test/test_scanutils.py +3 -2
  172. tomwer/core/test/test_utils.py +6 -4
  173. tomwer/core/utils/__init__.py +8 -6
  174. tomwer/core/utils/deprecation.py +2 -2
  175. tomwer/core/utils/image.py +4 -3
  176. tomwer/core/utils/locker.py +1 -1
  177. tomwer/core/utils/normalization.py +1 -0
  178. tomwer/core/utils/nxtomoutils.py +2 -1
  179. tomwer/core/utils/scanutils.py +9 -6
  180. tomwer/core/utils/slurm.py +2 -1
  181. tomwer/core/utils/time.py +2 -4
  182. tomwer/core/utils/volumeutils.py +2 -1
  183. tomwer/core/volume/__init__.py +1 -1
  184. tomwer/core/volume/edfvolume.py +4 -3
  185. tomwer/core/volume/hdf5volume.py +6 -8
  186. tomwer/core/volume/jp2kvolume.py +4 -3
  187. tomwer/core/volume/rawvolume.py +7 -7
  188. tomwer/core/volume/tiffvolume.py +8 -6
  189. tomwer/core/volume/volumebase.py +1 -0
  190. tomwer/core/volume/volumefactory.py +18 -18
  191. tomwer/gui/cluster/slurm.py +2 -0
  192. tomwer/gui/cluster/supervisor.py +4 -2
  193. tomwer/gui/cluster/test/test_cluster.py +5 -4
  194. tomwer/gui/cluster/test/test_supervisor.py +4 -2
  195. tomwer/gui/conditions/filter.py +7 -6
  196. tomwer/gui/control/actions.py +1 -0
  197. tomwer/gui/control/datadiscovery.py +168 -0
  198. tomwer/gui/control/datalist.py +29 -28
  199. tomwer/gui/control/datalistener.py +8 -4
  200. tomwer/gui/control/datareacheractions.py +2 -1
  201. tomwer/gui/control/datatransfert.py +3 -1
  202. tomwer/gui/control/datavalidator.py +11 -12
  203. tomwer/gui/control/datawatcher/configuration.py +12 -1
  204. tomwer/gui/control/datawatcher/controlwidget.py +116 -0
  205. tomwer/gui/control/datawatcher/datawatcher.py +63 -121
  206. tomwer/gui/control/datawatcher/datawatcherobserver.py +7 -9
  207. tomwer/gui/control/history.py +3 -1
  208. tomwer/gui/control/observations.py +7 -7
  209. tomwer/gui/control/scanselectorwidget.py +4 -2
  210. tomwer/gui/control/selectorwidgetbase.py +3 -1
  211. tomwer/gui/control/serie/seriecreator.py +11 -12
  212. tomwer/gui/control/singletomoobj.py +4 -4
  213. tomwer/gui/control/test/test_datadiscovery.py +27 -0
  214. tomwer/gui/control/test/test_datalist.py +7 -6
  215. tomwer/gui/control/test/test_datalistener.py +4 -4
  216. tomwer/gui/control/test/test_datavalidator.py +3 -1
  217. tomwer/gui/control/test/test_inputwidget.py +5 -4
  218. tomwer/gui/control/test/test_process_manager.py +3 -3
  219. tomwer/gui/control/test/test_scanselector.py +6 -4
  220. tomwer/gui/control/test/test_scanvalidator.py +6 -5
  221. tomwer/gui/control/test/test_single_tomo_obj.py +5 -3
  222. tomwer/gui/control/test/test_volume_dialog.py +7 -5
  223. tomwer/gui/control/test/test_volumeselector.py +8 -6
  224. tomwer/gui/control/volumeselectorwidget.py +2 -1
  225. tomwer/gui/debugtools/datasetgenerator.py +2 -1
  226. tomwer/gui/debugtools/objectinspector.py +6 -7
  227. tomwer/gui/edit/dkrfpatch.py +11 -10
  228. tomwer/gui/edit/imagekeyeditor.py +12 -12
  229. tomwer/gui/edit/nxtomoeditor.py +8 -7
  230. tomwer/gui/edit/test/test_dkrf_patch.py +10 -9
  231. tomwer/gui/edit/test/test_image_key_editor.py +8 -6
  232. tomwer/gui/edit/test/test_nx_editor.py +7 -5
  233. tomwer/gui/icons.py +3 -2
  234. tomwer/gui/illustrations.py +3 -2
  235. tomwer/gui/imagefromfile.py +3 -1
  236. tomwer/gui/qfolderdialog.py +14 -12
  237. tomwer/gui/reconstruction/axis/CompareImages.py +9 -8
  238. tomwer/gui/reconstruction/axis/__init__.py +1 -1
  239. tomwer/gui/reconstruction/axis/axis.py +9 -7
  240. tomwer/gui/reconstruction/axis/radioaxis.py +30 -32
  241. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +6 -5
  242. tomwer/gui/reconstruction/darkref/darkrefwidget.py +4 -2
  243. tomwer/gui/reconstruction/lamino/tofu/misc.py +3 -1
  244. tomwer/gui/reconstruction/lamino/tofu/projections.py +16 -8
  245. tomwer/gui/reconstruction/lamino/tofu/tofu.py +6 -3
  246. tomwer/gui/reconstruction/lamino/tofu/tofuexpert.py +5 -2
  247. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +8 -5
  248. tomwer/gui/reconstruction/nabu/action.py +1 -0
  249. tomwer/gui/reconstruction/nabu/castvolume.py +6 -4
  250. tomwer/gui/reconstruction/nabu/check.py +3 -2
  251. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +5 -2
  252. tomwer/gui/reconstruction/nabu/nabuconfig/ctf.py +6 -3
  253. tomwer/gui/reconstruction/nabu/nabuconfig/nabuconfig.py +4 -3
  254. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +7 -5
  255. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +8 -6
  256. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +7 -7
  257. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +40 -33
  258. tomwer/gui/reconstruction/nabu/nabuflow.py +7 -4
  259. tomwer/gui/reconstruction/nabu/slices.py +14 -10
  260. tomwer/gui/reconstruction/nabu/slurm.py +1 -0
  261. tomwer/gui/reconstruction/nabu/volume.py +5 -3
  262. tomwer/gui/reconstruction/normalization/intensity.py +14 -13
  263. tomwer/gui/reconstruction/saaxis/corrangeselector.py +36 -35
  264. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +5 -4
  265. tomwer/gui/reconstruction/saaxis/saaxis.py +17 -17
  266. tomwer/gui/reconstruction/saaxis/sliceselector.py +5 -5
  267. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +33 -36
  268. tomwer/gui/reconstruction/scores/scoreplot.py +19 -18
  269. tomwer/gui/reconstruction/test/test_axis.py +14 -13
  270. tomwer/gui/reconstruction/test/test_lamino.py +3 -2
  271. tomwer/gui/reconstruction/test/test_nabu.py +8 -6
  272. tomwer/gui/reconstruction/test/test_saaxis.py +17 -15
  273. tomwer/gui/reconstruction/test/test_sadeltabeta.py +15 -13
  274. tomwer/gui/samplemoved/__init__.py +8 -7
  275. tomwer/gui/samplemoved/selectiontable.py +4 -2
  276. tomwer/gui/stackplot.py +14 -13
  277. tomwer/gui/stacks.py +11 -9
  278. tomwer/gui/test/test_axis_gui.py +5 -4
  279. tomwer/gui/test/test_qfolder_dialog.py +2 -1
  280. tomwer/gui/utils/__init__.py +5 -5
  281. tomwer/gui/utils/buttons.py +1 -0
  282. tomwer/gui/utils/completer.py +1 -0
  283. tomwer/gui/utils/flow.py +4 -2
  284. tomwer/gui/utils/illustrations.py +1 -0
  285. tomwer/gui/utils/inputwidget.py +11 -17
  286. tomwer/gui/utils/lineselector/lineselector.py +6 -8
  287. tomwer/gui/utils/qt_utils.py +1 -0
  288. tomwer/gui/utils/scandescription.py +2 -0
  289. tomwer/gui/utils/splashscreen.py +1 -1
  290. tomwer/gui/utils/unitsystem.py +3 -1
  291. tomwer/gui/utils/vignettes.py +8 -8
  292. tomwer/gui/utils/waiterthread.py +2 -1
  293. tomwer/gui/visualization/dataviewer.py +20 -28
  294. tomwer/gui/visualization/diffviewer/diffviewer.py +17 -20
  295. tomwer/gui/visualization/diffviewer/shiftwidget.py +3 -1
  296. tomwer/gui/visualization/nxtomometadata.py +1 -0
  297. tomwer/gui/visualization/reconstructionparameters.py +13 -12
  298. tomwer/gui/visualization/scanoverview.py +5 -3
  299. tomwer/gui/visualization/sinogramviewer.py +3 -2
  300. tomwer/gui/visualization/test/test_dataviewer.py +3 -1
  301. tomwer/gui/visualization/test/test_diffviewer.py +8 -6
  302. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +5 -3
  303. tomwer/gui/visualization/test/test_reconstruction_parameters.py +5 -3
  304. tomwer/gui/visualization/test/test_sinogramviewer.py +10 -9
  305. tomwer/gui/visualization/test/test_stacks.py +8 -6
  306. tomwer/gui/visualization/test/test_volumeviewer.py +10 -8
  307. tomwer/gui/visualization/tomoobjoverview.py +7 -4
  308. tomwer/gui/visualization/volumeoverview.py +5 -3
  309. tomwer/gui/visualization/volumeviewer.py +15 -14
  310. tomwer/io/utils/__init__.py +3 -3
  311. tomwer/io/utils/h5pyutils.py +2 -1
  312. tomwer/io/utils/utils.py +17 -21
  313. tomwer/resources/__init__.py +1 -1
  314. tomwer/synctools/axis.py +3 -1
  315. tomwer/synctools/darkref.py +3 -2
  316. tomwer/synctools/datalistener.py +10 -6
  317. tomwer/synctools/datatransfert.py +2 -3
  318. tomwer/synctools/imageloaderthread.py +5 -3
  319. tomwer/synctools/rsyncmanager.py +3 -2
  320. tomwer/synctools/saaxis.py +3 -1
  321. tomwer/synctools/sadeltabeta.py +3 -1
  322. tomwer/synctools/stacks/control/datalistener.py +9 -12
  323. tomwer/synctools/stacks/edit/darkflatpatch.py +13 -12
  324. tomwer/synctools/stacks/edit/imagekeyeditor.py +12 -11
  325. tomwer/synctools/stacks/processingstack.py +3 -2
  326. tomwer/synctools/stacks/reconstruction/axis.py +12 -12
  327. tomwer/synctools/stacks/reconstruction/castvolume.py +8 -5
  328. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +10 -9
  329. tomwer/synctools/stacks/reconstruction/lamino.py +9 -7
  330. tomwer/synctools/stacks/reconstruction/nabu.py +18 -17
  331. tomwer/synctools/stacks/reconstruction/normalization.py +12 -16
  332. tomwer/synctools/stacks/reconstruction/saaxis.py +13 -11
  333. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +16 -14
  334. tomwer/synctools/test/test_darkRefs.py +4 -3
  335. tomwer/synctools/test/test_foldertransfer.py +14 -12
  336. tomwer/synctools/test/test_scanstages.py +8 -7
  337. tomwer/synctools/utils/scanstages.py +7 -5
  338. tomwer/tests/conftest.py +4 -4
  339. tomwer/tests/test_scripts.py +3 -2
  340. tomwer/tests/utils/__init__.py +5 -4
  341. tomwer/tests/utils/utilstest.py +5 -6
  342. tomwer/third_party/nabu/preproc/phase.py +7 -5
  343. tomwer/third_party/nabu/utils.py +3 -2
  344. tomwer/utils.py +12 -12
  345. tomwer/version.py +4 -4
  346. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/METADATA +2 -2
  347. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/RECORD +353 -345
  348. /tomwer-1.1.1-py3.8-nspkg.pth → /tomwer-1.2.0a0-py3.8-nspkg.pth +0 -0
  349. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/LICENSE +0 -0
  350. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/WHEEL +0 -0
  351. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/entry_points.txt +0 -0
  352. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/namespace_packages.txt +0 -0
  353. {tomwer-1.1.1.dist-info → tomwer-1.2.0a0.dist-info}/top_level.txt +0 -0
@@ -27,21 +27,23 @@ __license__ = "MIT"
27
27
  __date__ = "09/06/2021"
28
28
 
29
29
 
30
- from tomwer.tests.utils import skip_gui_test
31
- from silx.gui.utils.testutils import TestCaseQt
32
- from tomwer.core.utils.scanutils import MockHDF5
33
- from tomwer.gui.reconstruction.sadeltabeta import SADeltaBetaWindow
34
- from tomwer.core.process.reconstruction.sadeltabeta.params import SADeltaBetaParams
35
- from tomwer.core.process.reconstruction.scores.params import ScoreMethod
36
- from tomwer.core.process.reconstruction.scores import ComputedScore
37
- from silx.io.url import DataUrl
38
- from silx.gui import qt
39
- import pytest
40
- import numpy
30
+ import os
41
31
  import shutil
42
32
  import tempfile
43
- import os
33
+
44
34
  import h5py
35
+ import numpy
36
+ import pytest
37
+ from silx.gui import qt
38
+ from silx.gui.utils.testutils import TestCaseQt
39
+ from silx.io.url import DataUrl
40
+
41
+ from tomwer.core.process.reconstruction.sadeltabeta.params import SADeltaBetaParams
42
+ from tomwer.core.process.reconstruction.scores import ComputedScore
43
+ from tomwer.core.process.reconstruction.scores.params import ScoreMethod
44
+ from tomwer.core.utils.scanutils import MockHDF5
45
+ from tomwer.gui.reconstruction.sadeltabeta import SADeltaBetaWindow
46
+ from tomwer.tests.utils import skip_gui_test
45
47
 
46
48
 
47
49
  @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
@@ -58,7 +60,7 @@ class TestSADeltaBetaWindow(TestCaseQt):
58
60
  self._cor_scores = {}
59
61
 
60
62
  for i in range(self._N_OUTPUT_URLS):
61
- output_file = os.path.join(self.folder, "recons_{}.h5".format(i))
63
+ output_file = os.path.join(self.folder, f"recons_{i}.h5")
62
64
  with h5py.File(output_file, mode="a") as h5f:
63
65
  h5f["data"] = numpy.random.random(100 * 100).reshape(100, 100)
64
66
  url = DataUrl(file_path=output_file, data_path="data", scheme="silx")
@@ -30,16 +30,17 @@ __license__ = "MIT"
30
30
  __date__ = "19/03/2018"
31
31
 
32
32
 
33
- from collections import OrderedDict
33
+ import logging
34
34
  import weakref
35
- from tomwer.core.scan.scanbase import TomwerScanBase
36
- from tomwer.gui.samplemoved.selectiontable import AngleSelectionTable
37
- from tomoscan.esrf.scan.utils import get_data
38
- from silx.gui import qt
39
- import silx.io.utils
35
+ from collections import OrderedDict
36
+
40
37
  import silx.io.url
41
- import logging
38
+ import silx.io.utils
39
+ from silx.gui import qt
40
+ from tomoscan.esrf.scan.utils import get_data
42
41
 
42
+ from tomwer.core.scan.scanbase import TomwerScanBase
43
+ from tomwer.gui.samplemoved.selectiontable import AngleSelectionTable
43
44
  from tomwer.gui.settings import Y_AXIS_DOWNWARD
44
45
 
45
46
  _logger = logging.getLogger(__name__)
@@ -30,13 +30,15 @@ __license__ = "MIT"
30
30
  __date__ = "17/08/2021"
31
31
 
32
32
 
33
+ import functools
34
+ import logging
33
35
  import os
34
36
  from collections import OrderedDict
35
- import functools
37
+
36
38
  from silx.gui import qt
37
39
  from silx.io.url import DataUrl
40
+
38
41
  from tomwer.gui.imagefromfile import FileWithImage
39
- import logging
40
42
 
41
43
  logger = logging.getLogger(__name__)
42
44
 
tomwer/gui/stackplot.py CHANGED
@@ -28,24 +28,25 @@ __author__ = ["P. Paleo", "H. Payno"]
28
28
  __license__ = "MIT"
29
29
  __date__ = "24/05/2016"
30
30
 
31
+ import functools
32
+ import logging
33
+ import os
34
+ import time
35
+ from collections import OrderedDict, namedtuple
36
+ from typing import Iterable, Optional
37
+
38
+ import numpy
31
39
  from silx.gui import qt
32
40
  from silx.gui.plot import Plot2D
33
- from . import utils
34
- from tomwer.gui import settings
35
- import numpy
36
- import os
37
- from collections import OrderedDict
38
- import tomwer.resources
39
- from .imagefromfile import ImageFromFile, FileWithImage, _Image
40
41
  from silx.gui.plot.actions import PlotAction
41
42
  from silx.gui.plot.actions.control import YAxisInvertedAction
42
43
  from silx.io.url import DataUrl
43
- import logging
44
- from tomwer.gui import icons
45
- import functools
46
- import time
47
- from collections import namedtuple
48
- from typing import Iterable, Optional
44
+
45
+ import tomwer.resources
46
+ from tomwer.gui import icons, settings
47
+
48
+ from . import utils
49
+ from .imagefromfile import FileWithImage, ImageFromFile, _Image
49
50
 
50
51
  logger = logging.getLogger(__name__)
51
52
 
tomwer/gui/stacks.py CHANGED
@@ -30,17 +30,19 @@ __license__ = "MIT"
30
30
  __date__ = "19/03/2018"
31
31
 
32
32
 
33
+ import logging
34
+ from collections import OrderedDict
33
35
  from typing import Union
36
+
37
+ import h5py
34
38
  from silx.gui import qt
35
- from tomwer.gui.stackplot import _QImageFileStackPlot
36
- from collections import OrderedDict
37
- from tomwer.gui.qfolderdialog import QDataDialog
39
+ from tomoscan.factory import Factory
40
+ from tomoscan.identifier import VolumeIdentifier
41
+
38
42
  from tomwer.core.scan.scanbase import TomwerScanBase
39
43
  from tomwer.core.scan.scanfactory import ScanFactory
40
- from tomoscan.identifier import VolumeIdentifier
41
- from tomoscan.factory import Factory
42
- import logging
43
- import h5py
44
+ from tomwer.gui.qfolderdialog import QDataDialog
45
+ from tomwer.gui.stackplot import _QImageFileStackPlot
44
46
 
45
47
  _logger = logging.getLogger(__name__)
46
48
 
@@ -131,8 +133,8 @@ class _ImageStack(qt.QMainWindow):
131
133
  for scan in all_images:
132
134
  try:
133
135
  oScanSlices = OrderedDict(sorted(all_images[scan].items()))
134
- for slice in oScanSlices:
135
- ordered_imgs.append(all_images[scan][slice])
136
+ for scan_slice in oScanSlices:
137
+ ordered_imgs.append(all_images[scan][scan_slice])
136
138
  except TypeError:
137
139
  # in case algorithm could extract recons index
138
140
  ordered_imgs = ordered_imgs + list(all_images[scan].values())
@@ -1,8 +1,9 @@
1
+ import pytest
2
+ from silx.gui.utils.testutils import TestCaseQt
3
+
1
4
  from tomwer.gui.reconstruction.axis.radioaxis import AxisTabWidget
2
5
  from tomwer.synctools.axis import QAxisRP
3
- from silx.gui.utils.testutils import TestCaseQt
4
6
  from tomwer.tests.utils import skip_gui_test
5
- import pytest
6
7
 
7
8
 
8
9
  @pytest.mark.skipif(skip_gui_test(), reason="skip gui test")
@@ -13,10 +14,10 @@ class TestGetNabuCorOpts(TestCaseQt):
13
14
  """
14
15
  axis_params = QAxisRP()
15
16
  widget = AxisTabWidget(recons_params=axis_params)
16
- assert axis_params.get_nabu_cor_options_as_str() == "side='all'"
17
+ assert axis_params.get_nabu_cor_options_as_str() == "side='right'"
17
18
  widget._calculationWidget._corOpts.setText("low_pass=2")
18
19
  widget._calculationWidget._corOpts.editingFinished.emit()
19
- assert axis_params.get_nabu_cor_options_as_str() == "side='all' ; low_pass=2"
20
+ assert axis_params.get_nabu_cor_options_as_str() == "side='right' ; low_pass=2"
20
21
  widget._calculationWidget._corOpts.setText("low_pass=2 ; high_pass=10")
21
22
  widget._calculationWidget._sideCB.setCurrentText("left")
22
23
  widget._calculationWidget._corOpts.editingFinished.emit()
@@ -1,6 +1,7 @@
1
1
  import pytest
2
- from tomwer.tests.conftest import qtapp # noqa F401
2
+
3
3
  from tomwer.gui.qfolderdialog import QDataDialog
4
+ from tomwer.tests.conftest import qtapp # noqa F401
4
5
 
5
6
 
6
7
  @pytest.mark.parametrize("multi_selection", (True, False))
@@ -31,9 +31,9 @@ __license__ = "MIT"
31
31
  __date__ = "29/01/2020"
32
32
 
33
33
 
34
- import subprocess
35
34
  import logging
36
35
  import os
36
+ import subprocess
37
37
 
38
38
  _logger = logging.getLogger(__name__)
39
39
 
@@ -76,10 +76,10 @@ def open_url_with_image_j(url):
76
76
  # for now we only manage the simple case of an edf file
77
77
  try:
78
78
  subprocess.call(["imagej", "-o", url.file_path()])
79
- except Exception:
80
- _logger.warning("Fail to open {}. Reason is {}".format(str(url), str()))
79
+ except Exception as e:
80
+ _logger.warning(f"Fail to open {url}. Reason is {e}")
81
81
  elif __image_j_from == "binary":
82
82
  try:
83
83
  subprocess.call([_IMAGE_J_BIN_PATH, url.file_path()])
84
- except Exception:
85
- _logger.warning("Fail to open {}. Reason is {}".format(str(url), str()))
84
+ except Exception as e:
85
+ _logger.warning(f"Fail to open {url}. Reason is {e}")
@@ -32,6 +32,7 @@ __date__ = "03/10/2018"
32
32
 
33
33
 
34
34
  from silx.gui import qt
35
+
35
36
  from tomwer.gui import icons
36
37
 
37
38
 
@@ -32,6 +32,7 @@ __date__ = "23/03/2022"
32
32
 
33
33
 
34
34
  from typing import Optional
35
+
35
36
  from silx.gui import qt
36
37
 
37
38
 
tomwer/gui/utils/flow.py CHANGED
@@ -28,10 +28,12 @@ __license__ = "MIT"
28
28
  __date__ = "04/03/2019"
29
29
 
30
30
 
31
+ import functools
32
+ from typing import Union
33
+
31
34
  from silx.gui import qt
32
35
  from silx.utils.enum import Enum as _Enum
33
- from typing import Union
34
- import functools
36
+
35
37
  from tomwer.gui import icons
36
38
  from tomwer.utils import docstring
37
39
 
@@ -32,6 +32,7 @@ __date__ = "28/09/2018"
32
32
 
33
33
 
34
34
  from silx.gui import qt
35
+
35
36
  from tomwer.gui import illustrations
36
37
 
37
38
 
@@ -26,17 +26,16 @@ __authors__ = ["H.Payno"]
26
26
  __license__ = "MIT"
27
27
  __date__ = "16/08/2018"
28
28
 
29
- from silx.gui import qt
30
- from tomwer.gui import icons
31
- import numpy
32
29
  import logging
33
-
34
- from nxtomomill.io.config import (
35
- TomoHDF5Config as HDF5Config,
36
- TomoEDFConfig as EDFConfig,
37
- )
38
- from typing import Optional, Union
39
30
  import os
31
+ from typing import Optional, Union
32
+
33
+ import numpy
34
+ from nxtomomill.io.config import TomoEDFConfig as EDFConfig
35
+ from nxtomomill.io.config import TomoHDF5Config as HDF5Config
36
+ from silx.gui import qt
37
+
38
+ from tomwer.gui import icons
40
39
  from tomwer.gui.qlefilesystem import QLFileSystem
41
40
  from tomwer.io.utils import get_default_directory
42
41
 
@@ -98,7 +97,7 @@ class SelectionLineEdit(qt.QWidget):
98
97
  _from, _to, _step = self._qLineEdit.text().split(":")
99
98
  _from, _to, _step = float(_from), float(_to), float(_step)
100
99
  if _from > _to:
101
- _logger.warning("to > from, invert %s and %s" % (_from, _to))
100
+ _logger.warning(f"to > from, invert {_from} and {_to}")
102
101
  tmp = _to
103
102
  _to = _from
104
103
  _from = tmp
@@ -399,18 +398,13 @@ class _ConfigFileSelector(qt.QWidget):
399
398
  try:
400
399
  self._load_config_file(cfg_file)
401
400
  except Exception as e:
402
- mess = (
403
- "Fail to load nxtomomill configuration from {}. "
404
- "Error is {}".format(cfg_file, e)
405
- )
401
+ mess = f"Fail to load nxtomomill configuration from {cfg_file}. Error is {e}"
406
402
  _logger.warning(mess)
407
403
  qt.QMessageBox.warning(
408
404
  self, "Unable to read configuration from file", mess
409
405
  )
410
406
  else:
411
- _logger.info(
412
- "Will use {} as input configuration file." "".format(cfg_file)
413
- )
407
+ _logger.info(f"Will use {cfg_file} as input configuration file.")
414
408
  self.sigConfigFileChanged.emit(cfg_file)
415
409
 
416
410
  def getCFGFilePath(self):
@@ -29,12 +29,13 @@ __license__ = "MIT"
29
29
  __date__ = "15/09/2017"
30
30
 
31
31
  import logging
32
- from silx.gui import qt
33
- from silx.gui.plot import PlotWidget
34
- from typing import Union, Optional
35
- from collections.abc import Iterable
36
32
  from collections import OrderedDict
33
+ from collections.abc import Iterable
34
+ from typing import Optional, Union
35
+
37
36
  import numpy
37
+ from silx.gui import qt
38
+ from silx.gui.plot import PlotWidget
38
39
 
39
40
  logger = logging.getLogger(__name__)
40
41
 
@@ -76,10 +77,7 @@ class QSliceSelectorDialog(qt.QDialog):
76
77
  """
77
78
  if self.nRequiredSlice() is not None and len(selection) > self.nRequiredSlice():
78
79
  raise ValueError(
79
- "you provide a selection of {} elements when "
80
- "the user should select {}".format(
81
- len(selection), self._n_required_slice
82
- )
80
+ f"you provide a selection of {len(selection)} elements when the user should select {self._n_required_slice}"
83
81
  )
84
82
  if type(selection) is str:
85
83
  selection = selection.replace("(", "")
@@ -1,4 +1,5 @@
1
1
  from contextlib import contextmanager
2
+
2
3
  from silx.gui import qt
3
4
 
4
5
 
@@ -28,7 +28,9 @@ __date__ = "04/02/2020"
28
28
 
29
29
 
30
30
  from typing import Optional
31
+
31
32
  from silx.gui import qt
33
+
32
34
  from tomwer.core.scan.scanbase import TomwerScanBase
33
35
 
34
36
 
@@ -32,8 +32,8 @@ try:
32
32
  from silx.gui import qt
33
33
  except ImportError:
34
34
  raise ImportError("Can't found silx modules")
35
- from tomwer.gui import icons
36
35
  import tomwer.version
36
+ from tomwer.gui import icons
37
37
 
38
38
 
39
39
  def getMainSplashScreen():
@@ -32,10 +32,12 @@ __license__ = "MIT"
32
32
  __date__ = "21/09/2018"
33
33
 
34
34
 
35
+ import logging
36
+
35
37
  from silx.gui import qt
36
38
  from tomoscan.unitsystem import metricsystem
39
+
37
40
  from tomwer.core.utils.char import MU_CHAR
38
- import logging
39
41
 
40
42
  _logger = logging.getLogger(__name__)
41
43
 
@@ -35,15 +35,15 @@ __license__ = "MIT"
35
35
  __date__ = "26/02/2021"
36
36
 
37
37
 
38
+ import logging
39
+ from typing import Iterable, Union
40
+
41
+ import numpy
38
42
  from silx.gui import qt
39
- from silx.io.url import DataUrl
40
43
  from silx.gui.plot import PlotWindow
41
- from typing import Union
42
- from typing import Iterable
43
- from tomoscan.esrf.scan.utils import get_data
44
44
  from silx.gui.plot.utils.axis import SyncAxes
45
- import numpy
46
- import logging
45
+ from silx.io.url import DataUrl
46
+ from tomoscan.esrf.scan.utils import get_data
47
47
 
48
48
  from tomwer.core.process.reconstruction.scores.scores import ComputedScore
49
49
 
@@ -380,13 +380,13 @@ class ValueLabel(qt.QWidget):
380
380
  str_value = value_format.format(value)
381
381
  else:
382
382
  str_value = str(value)
383
- txt = "{}: {}".format(value_name, str_value)
383
+ txt = f"{value_name}: {str_value}"
384
384
  self._valueLabel = qt.QLabel(txt, self)
385
385
  self.layout().addWidget(self._valueLabel)
386
386
  if score_format is not None:
387
387
  str_score = score_format.format(score)
388
388
  else:
389
389
  str_score = str(score)
390
- txt = "({}: {})".format(score_name, str_score)
390
+ txt = f"({score_name}: {str_score})"
391
391
  self._scoreLabel = qt.QLabel(txt, self)
392
392
  self.layout().addWidget(self._scoreLabel)
@@ -33,9 +33,10 @@ __license__ = "MIT"
33
33
  __date__ = "09/02/2017"
34
34
 
35
35
 
36
- from silx.gui import qt
37
36
  import time
38
37
 
38
+ from silx.gui import qt
39
+
39
40
 
40
41
  class QWaiterThread(qt.QThread):
41
42
  """simple thread wich wait for waitingTime to be finished"""
@@ -27,21 +27,24 @@ __authors__ = ["H. Payno"]
27
27
  __license__ = "MIT"
28
28
  __date__ = "13/08/2021"
29
29
 
30
+ import logging
31
+ import weakref
32
+
30
33
  from silx.gui import qt
31
- from silx.utils.enum import Enum as _Enum
34
+ from silx.gui.plot.ImageStack import ImageStack as _ImageStack
35
+ from silx.gui.plot.ImageStack import UrlLoader
32
36
  from silx.gui.utils.signal import SignalProxy
33
- import weakref
34
- import logging
35
- from silx.gui.plot.ImageStack import UrlLoader, ImageStack as _ImageStack
37
+ from silx.io.url import DataUrl
38
+ from silx.utils.enum import Enum as _Enum
39
+
36
40
  from tomwer.core.scan.scanbase import TomwerScanBase
37
41
  from tomwer.core.utils.ftseriesutils import get_vol_file_shape
38
- from silx.io.url import DataUrl
39
42
  from tomwer.core.volume.volumebase import TomwerVolumeBase
43
+ from tomwer.core.volume.volumefactory import VolumeFactory
40
44
  from tomwer.gui.settings import Y_AXIS_DOWNWARD
41
45
  from tomwer.gui.visualization.reconstructionparameters import ReconstructionParameters
42
46
  from tomwer.gui.visualization.scanoverview import ScanOverviewWidget
43
47
  from tomwer.io.utils.utils import get_slice_data
44
- from tomwer.core.volume.volumefactory import VolumeFactory
45
48
 
46
49
  try:
47
50
  from PIL import Image
@@ -55,10 +58,11 @@ except ImportError: # pragma: no cover
55
58
  has_cv2 = False # pragma: no cover
56
59
  else:
57
60
  has_cv2 = True
61
+ import os
62
+ import time
63
+
58
64
  import numpy
59
65
  import numpy.lib.npyio
60
- import time
61
- import os
62
66
 
63
67
  _logger = logging.getLogger(__name__)
64
68
 
@@ -496,9 +500,7 @@ class ImageStack(_ImageStack):
496
500
  if data.ndim == 3 and data.shape[0] == 1:
497
501
  data = data.reshape((data.shape[1], data.shape[2]))
498
502
  else:
499
- _logger.warning(
500
- "Image Stack only manage 2D data. Url: {}" "".format(url)
501
- )
503
+ _logger.warning(f"Image Stack only manage 2D data. Url: {url}")
502
504
  return
503
505
  if self._normFct is None:
504
506
  self._urlData[url] = data
@@ -525,9 +527,7 @@ class ImageStack(_ImageStack):
525
527
  self._reconsWidget.setUrl(url)
526
528
  except Exception as e:
527
529
  _logger.info(
528
- "Unable to set reconstruction parameters from"
529
- " {}. Not handled for pyhst reconstructions. "
530
- "Error is {}".format(url, str(e))
530
+ f"Unable to set reconstruction parameters from {url}. Not handled for pyhst reconstructions. Error is {e}"
531
531
  )
532
532
  super().setCurrentUrl(url)
533
533
 
@@ -542,13 +542,12 @@ class ImageStack(_ImageStack):
542
542
  url = DataUrl(path=item.text())
543
543
  except Exception:
544
544
  _logger.info(
545
- "fail to deduce data of last modification for "
546
- "{}".format(item.text())
545
+ f"fail to deduce data of last modification for {item.text()}"
547
546
  )
548
547
  else:
549
548
  if os.path.exists(url.file_path()):
550
549
  lst_m = time.ctime(os.path.getmtime(url.file_path()))
551
- item.setToolTip("last modification : {}".format(lst_m))
550
+ item.setToolTip(f"last modification : {lst_m}")
552
551
  items.append(listWidget.item(i))
553
552
 
554
553
 
@@ -586,9 +585,7 @@ class _TomwerUrlLoader(UrlLoader):
586
585
  except ValueError:
587
586
  self.data = None
588
587
  _logger.warning(
589
- "Fail to open {}. Maybe the reconstruction failed.".format(
590
- self.url.path()
591
- )
588
+ f"Fail to open {self.url.path()}. Maybe the reconstruction failed."
592
589
  )
593
590
 
594
591
  def _load_vol(self):
@@ -632,9 +629,7 @@ class _TomwerUrlLoader(UrlLoader):
632
629
  data = data.reshape(shape)
633
630
  except ValueError:
634
631
  _logger.warning(
635
- "unable to fix shape for raw file {}. "
636
- "Look for information in {}"
637
- "".format(raw_file, info_file)
632
+ f"unable to fix shape for raw file {raw_file}. Look for information in {info_file}"
638
633
  )
639
634
  try:
640
635
  sqr = int(numpy.sqrt(len(data)))
@@ -642,15 +637,12 @@ class _TomwerUrlLoader(UrlLoader):
642
637
  data = data.reshape(shape)
643
638
  except ValueError:
644
639
  _logger.info(
645
- "deduction of shape size for {} "
646
- "failed".format(raw_file)
640
+ f"deduction of shape size for {raw_file} failed"
647
641
  )
648
642
  data = None
649
643
  else:
650
644
  _logger.warning(
651
- f"try deducing shape size for {raw_file} "
652
- "might be an incorrect "
653
- "interpretation"
645
+ f"try deducing shape size for {raw_file} might be an incorrect interpretation"
654
646
  )
655
647
  if self.url.data_slice() is None:
656
648
  return data