tomwer 1.2.9__py3-none-any.whl → 1.3.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 (253) hide show
  1. orangecontrib/tomwer/tutorials/icat_publication.ows +58 -0
  2. orangecontrib/tomwer/widgets/__init__.py +1 -0
  3. orangecontrib/tomwer/widgets/control/DataDiscoveryOW.py +2 -2
  4. orangecontrib/tomwer/widgets/control/DataListOW.py +9 -7
  5. orangecontrib/tomwer/widgets/control/DataSelectorOW.py +21 -10
  6. orangecontrib/tomwer/widgets/control/EDF2NXTomomillOW.py +11 -5
  7. orangecontrib/tomwer/widgets/control/EmailOW.py +4 -4
  8. orangecontrib/tomwer/widgets/control/NXTomomillOW.py +31 -18
  9. orangecontrib/tomwer/widgets/control/NXtomoConcatenate.py +14 -7
  10. orangecontrib/tomwer/widgets/control/NotifierOW.py +1 -0
  11. orangecontrib/tomwer/widgets/control/VolumeSelector.py +7 -4
  12. orangecontrib/tomwer/widgets/control/VolumeSymLinkOW.py +182 -182
  13. orangecontrib/tomwer/widgets/debugtools/DatasetGeneratorOW.py +4 -4
  14. orangecontrib/tomwer/widgets/edit/DarkFlatPatchOW.py +4 -4
  15. orangecontrib/tomwer/widgets/edit/ImageKeyEditorOW.py +3 -3
  16. orangecontrib/tomwer/widgets/edit/ImageKeyUpgraderOW.py +2 -0
  17. orangecontrib/tomwer/widgets/edit/NXtomoEditorOW.py +3 -3
  18. orangecontrib/tomwer/widgets/edit/test/test_nxtomo_editor.py +3 -3
  19. orangecontrib/tomwer/widgets/icat/PublishProcessedDataOW.py +115 -0
  20. orangecontrib/tomwer/widgets/icat/RawDataScreenshotCreatorOW.py +98 -0
  21. orangecontrib/tomwer/widgets/icat/SaveToGalleryAndPublishOW.py +129 -0
  22. orangecontrib/tomwer/widgets/icat/__init__.py +13 -0
  23. orangecontrib/tomwer/widgets/icat/icons/add_gallery.png +0 -0
  24. orangecontrib/tomwer/widgets/icat/icons/add_gallery.svg +82 -0
  25. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.png +0 -0
  26. orangecontrib/tomwer/widgets/icat/icons/publish_processed_data.svg +95 -0
  27. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.png +0 -0
  28. orangecontrib/tomwer/widgets/icat/icons/raw_screenshots.svg +143 -0
  29. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.png +0 -0
  30. orangecontrib/tomwer/widgets/icons/tomwer_data_portal.svg +76 -0
  31. orangecontrib/tomwer/widgets/reconstruction/AxisOW.py +9 -8
  32. orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py +3 -3
  33. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +179 -169
  34. orangecontrib/tomwer/widgets/reconstruction/NabuOW.py +23 -0
  35. orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py +39 -5
  36. orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py +7 -13
  37. orangecontrib/tomwer/widgets/reconstruction/SADeltaBetaOW.py +7 -17
  38. orangecontrib/tomwer/widgets/reconstruction/SinoNormOW.py +3 -4
  39. orangecontrib/tomwer/widgets/visualization/LivesliceOW.py +1 -1
  40. orangecontrib/tomwer/widgets/visualization/NXtomoMetadataViewerOW.py +3 -3
  41. orangecontrib/tomwer/widgets/visualization/VolumeViewerOW.py +3 -29
  42. tomwer/__main__.py +11 -58
  43. tomwer/app/canvas.py +8 -0
  44. tomwer/app/canvas_launcher/config.py +13 -11
  45. tomwer/app/darkref.py +1 -1
  46. tomwer/app/darkrefpatch.py +1 -1
  47. tomwer/app/imagekeyeditor.py +5 -5
  48. tomwer/app/imagekeyupgrader.py +5 -5
  49. tomwer/app/intensitynormalization.py +2 -2
  50. tomwer/app/radiostack.py +2 -2
  51. tomwer/app/zstitching.py +74 -3
  52. tomwer/core/cluster/cluster.py +26 -0
  53. tomwer/core/log/logger.py +7 -5
  54. tomwer/core/process/conditions/filters.py +1 -1
  55. tomwer/core/process/control/datalistener/datalistener.py +3 -3
  56. tomwer/core/process/control/nxtomoconcatenate.py +13 -13
  57. tomwer/core/process/control/nxtomomill.py +83 -25
  58. tomwer/core/process/control/scantransfer.py +11 -10
  59. tomwer/core/process/control/scanvalidator.py +3 -2
  60. tomwer/core/process/control/test/test_concatenate_nxtomos.py +9 -9
  61. tomwer/core/process/control/test/test_email.py +4 -4
  62. tomwer/core/process/control/test/test_h52nx_process.py +59 -7
  63. tomwer/core/process/control/test/test_volume_link.py +64 -64
  64. tomwer/core/process/control/timer.py +1 -1
  65. tomwer/core/process/control/volumesymlink.py +200 -200
  66. tomwer/core/process/edit/darkflatpatch.py +6 -6
  67. tomwer/core/process/edit/imagekeyeditor.py +17 -18
  68. tomwer/core/process/icat/__init__.py +0 -0
  69. tomwer/core/process/icat/createscreenshots.py +100 -0
  70. tomwer/core/process/icat/gallery.py +377 -0
  71. tomwer/core/process/icat/icatbase.py +36 -0
  72. tomwer/core/process/icat/publish.py +228 -0
  73. tomwer/core/process/icat/screenshots.py +26 -0
  74. tomwer/core/process/output.py +52 -0
  75. tomwer/core/process/reconstruction/axis/axis.py +17 -10
  76. tomwer/core/process/reconstruction/axis/mode.py +4 -0
  77. tomwer/core/process/reconstruction/axis/params.py +9 -4
  78. tomwer/core/process/reconstruction/darkref/darkrefs.py +8 -6
  79. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +1 -1
  80. tomwer/core/process/reconstruction/darkref/params.py +1 -1
  81. tomwer/core/process/reconstruction/lamino/tofu.py +4 -4
  82. tomwer/core/process/reconstruction/nabu/castvolume.py +1 -1
  83. tomwer/core/process/reconstruction/nabu/helical.py +9 -5
  84. tomwer/core/process/reconstruction/nabu/nabucommon.py +32 -62
  85. tomwer/core/process/reconstruction/nabu/nabuscores.py +387 -61
  86. tomwer/core/process/reconstruction/nabu/nabuslices.py +33 -21
  87. tomwer/core/process/reconstruction/nabu/nabuvolume.py +37 -14
  88. tomwer/core/process/reconstruction/nabu/settings.py +2 -2
  89. tomwer/core/process/reconstruction/nabu/utils.py +129 -24
  90. tomwer/core/process/reconstruction/output.py +108 -0
  91. tomwer/core/process/reconstruction/saaxis/saaxis.py +233 -263
  92. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +140 -86
  93. tomwer/core/process/reconstruction/scores/params.py +4 -1
  94. tomwer/core/process/reconstruction/scores/scores.py +13 -0
  95. tomwer/core/process/reconstruction/test/test_axis_params.py +2 -2
  96. tomwer/core/process/reconstruction/test/test_darkref.py +3 -3
  97. tomwer/core/process/reconstruction/test/test_darkref_copy.py +3 -3
  98. tomwer/core/process/reconstruction/test/test_saaxis.py +3 -4
  99. tomwer/core/process/reconstruction/test/test_sadeltabeta.py +2 -2
  100. tomwer/core/process/stitching/nabustitcher.py +2 -2
  101. tomwer/core/process/test/test_axis.py +6 -6
  102. tomwer/core/process/test/test_dark_and_flat.py +10 -7
  103. tomwer/core/process/test/test_data_transfer.py +7 -6
  104. tomwer/core/process/test/test_nabu.py +4 -4
  105. tomwer/core/process/test/test_normalization.py +2 -2
  106. tomwer/core/scan/edfscan.py +4 -1
  107. tomwer/core/scan/hdf5scan.py +19 -500
  108. tomwer/core/scan/nxtomoscan.py +532 -0
  109. tomwer/core/scan/scanbase.py +42 -20
  110. tomwer/core/scan/scanfactory.py +13 -13
  111. tomwer/core/scan/test/test_future_scan.py +2 -2
  112. tomwer/core/scan/test/test_h5.py +12 -10
  113. tomwer/core/scan/test/test_process_registration.py +2 -2
  114. tomwer/core/scan/test/test_scan.py +4 -3
  115. tomwer/core/settings.py +20 -0
  116. tomwer/core/test/test_scanutils.py +8 -7
  117. tomwer/core/test/test_utils.py +33 -26
  118. tomwer/core/utils/__init__.py +0 -466
  119. tomwer/core/utils/deprecation.py +1 -1
  120. tomwer/core/utils/dictutils.py +14 -0
  121. tomwer/core/utils/lbsram.py +35 -0
  122. tomwer/core/utils/nxtomoutils.py +1 -1
  123. tomwer/core/utils/scanutils.py +6 -6
  124. tomwer/core/utils/spec.py +263 -0
  125. tomwer/core/volume/volumefactory.py +2 -2
  126. tomwer/gui/cluster/slurm.py +260 -60
  127. tomwer/gui/cluster/test/test_cluster.py +13 -0
  128. tomwer/gui/cluster/test/test_supervisor.py +2 -2
  129. tomwer/gui/configuration/__init__.py +0 -0
  130. tomwer/gui/{reconstruction/nabu → configuration}/action.py +1 -32
  131. tomwer/gui/configuration/level.py +22 -0
  132. tomwer/gui/control/actions.py +54 -0
  133. tomwer/gui/control/datalist.py +78 -16
  134. tomwer/gui/control/datalistener.py +4 -16
  135. tomwer/gui/control/{email.py → emailnotifier.py} +9 -18
  136. tomwer/gui/control/history.py +2 -2
  137. tomwer/gui/control/observations.py +2 -2
  138. tomwer/gui/control/reducedarkflatselector.py +1 -1
  139. tomwer/gui/control/selectorwidgetbase.py +36 -9
  140. tomwer/gui/control/serie/seriecreator.py +5 -22
  141. tomwer/gui/control/test/test_email.py +1 -1
  142. tomwer/gui/control/test/test_scanvalidator.py +6 -5
  143. tomwer/gui/control/test/test_single_tomo_obj.py +2 -2
  144. tomwer/gui/control/tomoobjdisplaymode.py +8 -0
  145. tomwer/gui/debugtools/datasetgenerator.py +3 -3
  146. tomwer/gui/edit/dkrfpatch.py +16 -22
  147. tomwer/gui/edit/imagekeyeditor.py +8 -11
  148. tomwer/gui/edit/nxtomoeditor.py +111 -44
  149. tomwer/gui/edit/nxtomowarmer.py +4 -4
  150. tomwer/gui/edit/test/test_dkrf_patch.py +7 -7
  151. tomwer/gui/edit/test/test_image_key_editor.py +3 -3
  152. tomwer/gui/edit/test/test_nx_editor.py +40 -16
  153. tomwer/gui/icat/__init__.py +0 -0
  154. tomwer/gui/icat/createscreenshots.py +80 -0
  155. tomwer/gui/icat/gallery.py +214 -0
  156. tomwer/gui/icat/publish.py +187 -0
  157. tomwer/gui/reconstruction/axis/axis.py +171 -57
  158. tomwer/gui/reconstruction/axis/radioaxis.py +80 -95
  159. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +3 -2
  160. tomwer/gui/reconstruction/lamino/tofu/projections.py +1 -1
  161. tomwer/gui/reconstruction/lamino/tofu/tofuoutput.py +3 -6
  162. tomwer/gui/reconstruction/nabu/castvolume.py +1 -1
  163. tomwer/gui/reconstruction/nabu/check.py +9 -9
  164. tomwer/gui/reconstruction/nabu/helical.py +29 -12
  165. tomwer/gui/reconstruction/nabu/nabuconfig/base.py +2 -4
  166. tomwer/gui/reconstruction/nabu/nabuconfig/output.py +110 -33
  167. tomwer/gui/reconstruction/nabu/nabuconfig/phase.py +9 -12
  168. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +219 -29
  169. tomwer/gui/reconstruction/nabu/nabuconfig/reconstruction.py +3 -6
  170. tomwer/gui/reconstruction/nabu/nabuflow.py +12 -20
  171. tomwer/gui/reconstruction/nabu/slices.py +6 -7
  172. tomwer/gui/reconstruction/nabu/volume.py +22 -10
  173. tomwer/gui/reconstruction/normalization/intensity.py +15 -23
  174. tomwer/gui/reconstruction/saaxis/corrangeselector.py +7 -23
  175. tomwer/gui/reconstruction/saaxis/dimensionwidget.py +1 -1
  176. tomwer/gui/reconstruction/saaxis/saaxis.py +7 -9
  177. tomwer/gui/reconstruction/sadeltabeta/saadeltabeta.py +2 -1
  178. tomwer/gui/reconstruction/scores/control.py +2 -9
  179. tomwer/gui/reconstruction/scores/scoreplot.py +11 -5
  180. tomwer/gui/reconstruction/test/test_axis.py +23 -12
  181. tomwer/gui/reconstruction/test/test_lamino.py +8 -3
  182. tomwer/gui/reconstruction/test/test_nabu.py +28 -9
  183. tomwer/gui/reconstruction/test/test_saaxis.py +3 -3
  184. tomwer/gui/reconstruction/test/test_sadeltabeta.py +2 -2
  185. tomwer/gui/settings.py +5 -28
  186. tomwer/gui/stackplot.py +2 -5
  187. tomwer/gui/stitching/action.py +49 -0
  188. tomwer/gui/stitching/config/axisparams.py +7 -24
  189. tomwer/gui/stitching/config/output.py +10 -8
  190. tomwer/gui/stitching/config/positionoveraxis.py +22 -23
  191. tomwer/gui/stitching/normalization.py +117 -0
  192. tomwer/gui/stitching/stitchandbackground.py +4 -6
  193. tomwer/gui/stitching/stitching.py +265 -43
  194. tomwer/gui/stitching/stitching_preview.py +62 -5
  195. tomwer/gui/stitching/stitching_raw.py +2 -5
  196. tomwer/gui/stitching/z_stitching/fineestimation.py +0 -60
  197. tomwer/gui/utils/buttons.py +112 -29
  198. tomwer/gui/utils/inputwidget.py +33 -25
  199. tomwer/gui/utils/scandescription.py +4 -0
  200. tomwer/gui/utils/step.py +144 -0
  201. tomwer/gui/utils/unitsystem.py +2 -5
  202. tomwer/gui/utils/vignettes.py +176 -15
  203. tomwer/gui/visualization/dataviewer.py +1 -4
  204. tomwer/gui/visualization/diffviewer/diffviewer.py +7 -16
  205. tomwer/gui/visualization/diffviewer/shiftwidget.py +2 -5
  206. tomwer/gui/visualization/scanoverview.py +1 -1
  207. tomwer/gui/visualization/sinogramviewer.py +1 -10
  208. tomwer/gui/visualization/test/test_diffviewer.py +3 -3
  209. tomwer/gui/visualization/test/test_nx_tomo_metadata_viewer.py +4 -4
  210. tomwer/gui/visualization/test/test_sinogramviewer.py +2 -2
  211. tomwer/gui/visualization/test/test_stacks.py +3 -3
  212. tomwer/gui/visualization/test/test_volumeviewer.py +2 -2
  213. tomwer/io/utils/raw_and_processed_data.py +84 -0
  214. tomwer/io/utils/tomoobj.py +4 -6
  215. tomwer/resources/gui/icons/ruler.png +0 -0
  216. tomwer/resources/gui/icons/ruler.svg +273 -0
  217. tomwer/resources/gui/icons/short_description.png +0 -0
  218. tomwer/resources/gui/icons/short_description.svg +58 -0
  219. tomwer/resources/gui/icons/url.png +0 -0
  220. tomwer/resources/gui/icons/url.svg +58 -0
  221. tomwer/synctools/stacks/edit/darkflatpatch.py +2 -2
  222. tomwer/synctools/stacks/edit/imagekeyeditor.py +2 -2
  223. tomwer/synctools/stacks/reconstruction/axis.py +4 -4
  224. tomwer/synctools/stacks/reconstruction/castvolume.py +2 -2
  225. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +4 -10
  226. tomwer/synctools/stacks/reconstruction/nabu.py +2 -2
  227. tomwer/synctools/stacks/reconstruction/normalization.py +2 -2
  228. tomwer/synctools/stacks/reconstruction/saaxis.py +2 -2
  229. tomwer/synctools/stacks/reconstruction/sadeltabeta.py +2 -2
  230. tomwer/synctools/test/test_darkRefs.py +7 -58
  231. tomwer/synctools/test/test_foldertransfer.py +6 -6
  232. tomwer/synctools/utils/scanstages.py +6 -6
  233. tomwer/tests/conftest.py +34 -0
  234. tomwer/tests/datasets.py +13 -0
  235. tomwer/tests/test_scripts.py +92 -39
  236. tomwer/tests/utils.py +5 -0
  237. tomwer/version.py +3 -3
  238. {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/METADATA +39 -39
  239. {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/RECORD +248 -209
  240. tomwer/resources/gui/icons/esrf_1.svg +0 -307
  241. tomwer/resources/gui/icons/triangle.svg +0 -80
  242. tomwer/synctools/test/test_scanstages.py +0 -162
  243. tomwer/tests/utils/__init__.py +0 -247
  244. tomwer/tests/utils/utilstest.py +0 -220
  245. /tomwer/app/{saaxis.py → multicor.py} +0 -0
  246. /tomwer/app/{sadeltabeta.py → multipag.py} +0 -0
  247. /tomwer/core/process/control/{email.py → emailnotifier.py} +0 -0
  248. /tomwer-1.2.9-py3.11-nspkg.pth → /tomwer-1.3.0a0-py3.11-nspkg.pth +0 -0
  249. {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/LICENSE +0 -0
  250. {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/WHEEL +0 -0
  251. {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/entry_points.txt +0 -0
  252. {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/namespace_packages.txt +0 -0
  253. {tomwer-1.2.9.dist-info → tomwer-1.3.0a0.dist-info}/top_level.txt +0 -0
@@ -38,9 +38,8 @@ from silx.gui.utils.testutils import TestCaseQt
38
38
 
39
39
  from tomwer.core.process.reconstruction.darkref.darkrefs import DarkRefsTask
40
40
  from tomwer.core.process.reconstruction.darkref.params import DKRFRP, ReduceMethod
41
- from tomwer.core.scan.scanfactory import ScanFactory
42
41
  from tomwer.core.utils.scanutils import MockEDF
43
- from tomwer.tests.utils import UtilsTest
42
+ from tomwer.tests.datasets import TomwerCIDatasets
44
43
 
45
44
 
46
45
  class TestDarkRefsBehavior(TestCaseQt):
@@ -58,7 +57,9 @@ class TestDarkRefsBehavior(TestCaseQt):
58
57
  """number of theoretical dark file the algorithm should create"""
59
58
  self.dataset_folder = os.path.join(self.tmpDir, self.datasetsID)
60
59
 
61
- dataDir = UtilsTest.getEDFDataset(self.datasetsID)
60
+ dataDir = TomwerCIDatasets.get_dataset(
61
+ f"edf_datasets/{self.datasetsID}",
62
+ )
62
63
  shutil.copytree(dataDir, self.dataset_folder)
63
64
  files = os.listdir(self.dataset_folder)
64
65
  for _f in files:
@@ -380,7 +381,9 @@ class TestDarkAccumulation(TestCaseQt):
380
381
  def setUp(self):
381
382
  super().setUp()
382
383
  self.dataset = "bone8_1_"
383
- dataDir = UtilsTest.getEDFDataset(self.dataset)
384
+ dataDir = TomwerCIDatasets.get_dataset(
385
+ f"edf_datasets/{self.dataset}",
386
+ )
384
387
  self.outputdir = tempfile.mkdtemp()
385
388
  shutil.copytree(src=dataDir, dst=os.path.join(self.outputdir, self.dataset))
386
389
  self.darkFile = os.path.join(self.outputdir, self.dataset, "dark.edf")
@@ -418,57 +421,3 @@ class TestDarkAccumulation(TestCaseQt):
418
421
  with fabio.open(self.darkFile) as dsc:
419
422
  self.computed_dark = dsc.data
420
423
  self.assertTrue(numpy.array_equal(self.computed_dark, self.dark_reference))
421
-
422
-
423
- class TestPCOTomo(TestCaseQt):
424
- """Test processing of DKRF are correct"""
425
-
426
- def setUp(self):
427
- TestCaseQt.setUp(self)
428
- self.tmp_dir = tempfile.mkdtemp()
429
- MockEDF.fastMockAcquisition(self.tmp_dir)
430
-
431
- self.recons_params = DKRFRP()
432
- self.recons_params.flat_calc_method = ReduceMethod.NONE
433
- self.recons_params.dark_calc_method = ReduceMethod.NONE
434
- self.recons_params.dark_pattern = ".*_dark_.*"
435
- self.recons_params.flat_pattern = ".*_ref_.*"
436
- self.recons_params._set_remove_opt(True)
437
-
438
- def copyDataset(self, dataset):
439
- folder = os.path.join(self.tmp_dir, dataset)
440
- shutil.copytree(os.path.join(UtilsTest.getEDFDataset(dataset)), folder)
441
- self.scan = ScanFactory.create_scan_object(scan_path=folder)
442
-
443
- def tearDown(self):
444
- shutil.rmtree(self.tmp_dir)
445
-
446
- def testDark2x2Scan(self):
447
- self.dataset = "pcotomo_2x2scan_refdarkbeg_end_conti"
448
- self.copyDataset(self.dataset)
449
- self.recons_params.dark_calc_method = ReduceMethod.MEDIAN
450
- dar_ref_process = DarkRefsTask(
451
- inputs={
452
- "dark_ref_params": self.recons_params,
453
- "data": self.scan,
454
- "darkhst_prefix": "darkHST",
455
- "force_sync": True,
456
- "serialize_output_data": False,
457
- }
458
- )
459
- dar_ref_process.run()
460
-
461
- def testRef2x2Scan(self):
462
- self.dataset = "pcotomo_2x2scan_refdarkbeg_end_conti"
463
- self.copyDataset(self.dataset)
464
- self.recons_params.flat_calc_method = ReduceMethod.MEDIAN
465
- dar_ref_process = DarkRefsTask(
466
- inputs={
467
- "dark_ref_params": self.recons_params,
468
- "data": self.scan,
469
- "darkhst_prefix": "darkHST",
470
- "force_sync": True,
471
- "serialize_output_data": False,
472
- }
473
- )
474
- dar_ref_process.run()
@@ -40,12 +40,12 @@ from nxtomomill.converter import from_h5_to_nx
40
40
  from nxtomomill.io.config.hdf5config import TomoHDF5Config
41
41
  from silx.gui.utils.testutils import TestCaseQt
42
42
 
43
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
43
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
44
44
  from tomwer.core.scan.scanfactory import ScanFactory
45
- from tomwer.core.utils import rebaseParFile
45
+ from tomwer.core.utils.spec import rebaseParFile
46
46
  from tomwer.core.utils.scanutils import MockEDF
47
47
  from tomwer.synctools.datatransfert import ScanTransfer
48
- from tomwer.tests.utils import UtilsTest
48
+ from tomwer.tests.datasets import TomwerCIDatasets
49
49
 
50
50
  try:
51
51
  from tomwer.synctools.rsyncmanager import RSyncManager
@@ -239,7 +239,7 @@ class TestHDFDataTransfert(TestCaseQt):
239
239
  self.input_dir = tempfile.mkdtemp()
240
240
  self.output_dir = tempfile.mkdtemp()
241
241
  shutil.copytree(
242
- UtilsTest.getBlissDataset(folderID="sample"),
242
+ TomwerCIDatasets.get_dataset("bliss/sample"),
243
243
  os.path.join(self.input_dir, "sample"),
244
244
  )
245
245
 
@@ -272,7 +272,7 @@ class TestHDFDataTransfert(TestCaseQt):
272
272
  output_file_path, entry = results[0]
273
273
  assert os.path.exists(output_file_path)
274
274
  assert os.path.isfile(output_file_path)
275
- self.scan = HDF5TomoScan(scan=output_file_path, entry=entry)
275
+ self.scan = NXtomoScan(scan=output_file_path, entry=entry)
276
276
 
277
277
  # register information regarding origin of the file
278
278
  from tomwer.core.process.control.datalistener import DataListener
@@ -333,7 +333,7 @@ class TestPreTransfert(unittest.TestCase):
333
333
 
334
334
  def setUp(self):
335
335
  unittest.TestCase.setUp(self)
336
- folderDataset = UtilsTest.getEDFDataset("scan_3_")
336
+ folderDataset = TomwerCIDatasets.get_dataset("edf_datasets/scan_3_")
337
337
  self.tmpdir = tempfile.mkdtemp()
338
338
  self.outputfolder = tempfile.mkdtemp()
339
339
  scan_path = os.path.join(self.tmpdir, "scan_3_")
@@ -38,7 +38,7 @@ from silx.io.url import DataUrl
38
38
  from silx.utils.enum import Enum as _Enum
39
39
 
40
40
  from tomwer.core.scan.edfscan import EDFTomoScan
41
- from tomwer.core.scan.hdf5scan import HDF5TomoScan
41
+ from tomwer.core.scan.nxtomoscan import NXtomoScan
42
42
  from tomwer.core.scan.scanbase import TomwerScanBase
43
43
  from tomwer.synctools.rsyncmanager import RSyncManager
44
44
 
@@ -117,7 +117,7 @@ class ScanStages:
117
117
  RSyncManager().sync_file(
118
118
  source=info_file, target=file_info_dest, wait=True
119
119
  )
120
- elif isinstance(self.scan, HDF5TomoScan):
120
+ elif isinstance(self.scan, NXtomoScan):
121
121
  raise NotImplementedError()
122
122
  elif stage is ScanStages.AcquisitionStage.ACQUI_ON_GOING:
123
123
  # copy half of the acquisition file
@@ -129,7 +129,7 @@ class ScanStages:
129
129
  n_url -= 1
130
130
  self._copy_url_file(url=urls[keys[n_url]], dest_dir=dest_dir)
131
131
 
132
- elif isinstance(self.scan, HDF5TomoScan):
132
+ elif isinstance(self.scan, NXtomoScan):
133
133
  raise NotImplementedError()
134
134
  elif stage is ScanStages.AcquisitionStage.ACQUI_ENDED:
135
135
  if isinstance(self.scan, EDFTomoScan):
@@ -142,7 +142,7 @@ class ScanStages:
142
142
  )
143
143
  xml_dest = os.path.join(dest_dir, os.path.basename(xml_file))
144
144
  RSyncManager().sync_file(source=xml_file, target=xml_dest, wait=True)
145
- elif isinstance(self.scan, HDF5TomoScan):
145
+ elif isinstance(self.scan, NXtomoScan):
146
146
  raise NotImplementedError()
147
147
  elif stage is ScanStages.AcquisitionStage.RECONSTRUCTION_ADDED:
148
148
  # copy reconstruction
@@ -188,14 +188,14 @@ class ScanStages:
188
188
  RSyncManager().sync_file(
189
189
  source=_xml_file, target=xml_dest, wait=True
190
190
  )
191
- elif isinstance(self.scan, HDF5TomoScan):
191
+ elif isinstance(self.scan, NXtomoScan):
192
192
  raise NotImplementedError()
193
193
  elif stage is ScanStages.AcquisitionStage.COMPLETE:
194
194
  if isinstance(self.scan, EDFTomoScan):
195
195
  for file_ in os.listdir(self.scan.path):
196
196
  file_fp = os.path.join(self.scan.path, file_)
197
197
  RSyncManager().sync_file(source=file_fp, target=dest_dir, wait=True)
198
- elif isinstance(self.scan, HDF5TomoScan):
198
+ elif isinstance(self.scan, NXtomoScan):
199
199
  raise NotImplementedError()
200
200
  else:
201
201
  raise ValueError("given stage is not recognized", stage)
tomwer/tests/conftest.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import gc
2
+ import os
2
3
  import logging
3
4
 
4
5
  import pytest
@@ -49,3 +50,36 @@ def warn_qtwidgets_alive():
49
50
  len(widgets),
50
51
  "\n ".join(map(str, widgets)),
51
52
  )
53
+
54
+
55
+ @pytest.fixture(scope="function")
56
+ def nxtomo_scan_180(tmp_path):
57
+ test_path = tmp_path / "test"
58
+ test_path.mkdir()
59
+ yield create_default_scan(
60
+ scan_path=os.path.join(test_path, "scan_180"),
61
+ scan_range=180,
62
+ )
63
+
64
+
65
+ @pytest.fixture(scope="function")
66
+ def nxtomo_scan_360(tmp_path):
67
+ test_path = tmp_path / "test"
68
+ test_path.mkdir()
69
+ yield create_default_scan(
70
+ scan_path=os.path.join(test_path, "scan_360"),
71
+ scan_range=360,
72
+ )
73
+
74
+
75
+ def create_default_scan(scan_path: str, scan_range: int):
76
+ from tomwer.core.utils.scanutils import MockNXtomo
77
+
78
+ return MockNXtomo(
79
+ scan_path=scan_path,
80
+ n_proj=10,
81
+ n_ini_proj=10,
82
+ scan_range=scan_range,
83
+ dim=20,
84
+ energy=12.3,
85
+ ).scan
@@ -0,0 +1,13 @@
1
+ import os
2
+ from tomoscan.test.datasets import GitlabProject
3
+
4
+ TomwerCIDatasets = GitlabProject(
5
+ branch_name="tomwer",
6
+ host="https://gitlab.esrf.fr",
7
+ cache_dir=os.path.join(
8
+ os.path.dirname(__file__),
9
+ "__archive__",
10
+ ),
11
+ token=None,
12
+ project_id=4299, # https://gitlab.esrf.fr/tomotools/ci_datasets
13
+ )
@@ -1,44 +1,10 @@
1
- # coding: utf-8
2
- # /*##########################################################################
3
- # Copyright (C) 2016 European Synchrotron Radiation Facility
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
22
- #
23
- #############################################################################*/
24
-
25
-
26
- from __future__ import absolute_import, division, print_function
27
-
28
1
  """Test suite to scripts"""
29
2
 
30
- __authors__ = ["V.Valls", "H.Payno"]
31
- __license__ = "MIT"
32
- __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France"
33
- __date__ = "21/02/2018"
34
-
35
-
36
3
  import logging
37
4
  import subprocess
38
5
  import sys
39
6
  import unittest
40
-
41
- from tomwer.tests.utils.utilstest import UtilsTest
7
+ import os
42
8
 
43
9
  _logger = logging.getLogger(__name__)
44
10
 
@@ -77,8 +43,9 @@ class TestScriptsHelp(unittest.TestCase):
77
43
  self.assertEqual(p.returncode, 0)
78
44
 
79
45
  def executeAppHelp(self, script_name, module_name):
80
- script = UtilsTest.script_path(script_name, module_name)
81
- env = UtilsTest.get_test_env()
46
+ test_script = ScriptTest()
47
+ script = test_script.script_path(script_name, module_name)
48
+ env = test_script.get_test_env()
82
49
  if script.endswith(".exe"):
83
50
  command_line = [script]
84
51
  else:
@@ -89,23 +56,109 @@ class TestScriptsHelp(unittest.TestCase):
89
56
  def testAxis(self):
90
57
  self.executeAppHelp("axis", "tomwer.app.axis")
91
58
 
59
+ def testCanvas(self):
60
+ self.executeAppHelp("axis", "tomwer.app.canvas")
61
+
92
62
  def testDarkRef(self):
93
63
  self.executeAppHelp("darkref", "tomwer.app.darkref")
94
64
 
65
+ def testDarkRefPath(self):
66
+ self.executeAppHelp("darkrefpatch", "tomwer.app.darkrefpatch")
67
+
68
+ def testDiffFrame(self):
69
+ self.executeAppHelp("diffFrame", "tomwer.app.diffframe")
70
+
71
+ def testImageKeyEditor(self):
72
+ self.executeAppHelp("image-key-editor", "tomwer.app.imagekeyeditor")
73
+
74
+ def testImageKeyUpgrader(self):
75
+ self.executeAppHelp("image-key-upgrader", "tomwer.app.imagekeyupgrader")
76
+
77
+ def testIntensityNormalization(self):
78
+ self.executeAppHelp(
79
+ "intensity-normalization", "tomwer.app.intensitynormalization"
80
+ )
81
+
95
82
  def testLamino(self):
96
83
  self.executeAppHelp("lamino", "tomwer.app.lamino")
97
84
 
85
+ def testMulticor(self):
86
+ self.executeAppHelp("multicor", "tomwer.app.multicor")
87
+
88
+ def testMultiPag(self):
89
+ self.executeAppHelp("multipag", "tomwer.app.multipag")
90
+
98
91
  def testNabu(self):
99
92
  self.executeAppHelp("nabu", "tomwer.app.nabuapp")
100
93
 
94
+ def testNxTomoEditor(self):
95
+ self.executeAppHelp("nxtomo-editor", "tomwer.app.nxtomoeditor")
96
+
97
+ def testPatchRawDarkflat(self):
98
+ self.executeAppHelp("patch-raw-dark-flat", "tomwer.app.patchrawdarkflat")
99
+
101
100
  def testRadioStack(self):
102
101
  self.executeAppHelp("radiostack", "tomwer.app.radiostack")
103
102
 
103
+ def testReduceDarkFlat(self):
104
+ self.executeAppHelp("reduce-dark-flat", "tomwer.app.reducedarkflat")
105
+
106
+ def testRSync(self):
107
+ self.executeAppHelp("rsync", "tomwer.app.rsync")
108
+
104
109
  def testSampleMoved(self):
105
110
  self.executeAppHelp("samplemoved", "tomwer.app.samplemoved")
106
111
 
112
+ def testScanviewer(self):
113
+ self.executeAppHelp("scanviewer", "tomwer.app.scanviewer")
114
+
115
+ def testSinogramViewer(self):
116
+ self.executeAppHelp("sinogramviewer", "tomwer.app.sinogramviewer")
117
+
107
118
  def testSliceStack(self):
108
119
  self.executeAppHelp("slicestack", "tomwer.app.slicestack")
109
120
 
110
- def testRSync(self):
111
- self.executeAppHelp("rsync", "tomwer.app.rsync")
121
+ def testStopDataListener(self):
122
+ self.executeAppHelp("stop-data-listener", "tomwer.app.stopdatalistener")
123
+
124
+ def testZStitching(self):
125
+ self.executeAppHelp("zstitching", "tomwer.app.zstitching")
126
+
127
+
128
+ class ScriptTest:
129
+ """
130
+ Class providing useful stuff for preparing script tests.
131
+ """
132
+
133
+ def get_test_env(self):
134
+ """
135
+ Returns an associated environment with a working project.
136
+ """
137
+ env = dict((str(k), str(v)) for k, v in os.environ.items())
138
+ env["PYTHONPATH"] = os.pathsep.join(sys.path)
139
+ return env
140
+
141
+ def script_path(self, script_name, module_name):
142
+ """Returns the script path according to it's location"""
143
+ import importlib
144
+
145
+ module = importlib.import_module(module_name)
146
+ script = module.__file__
147
+ return script
148
+
149
+ def get_installed_script_path(self, script):
150
+ """
151
+ Returns the path of the executable and the associated environment
152
+
153
+ In Windows, it checks availability of script using .py .bat, and .exe
154
+ file extensions.
155
+ """
156
+ paths = os.environ.get("PATH", "").split(os.pathsep)
157
+ for base in paths:
158
+ # clean up extra quotes from paths
159
+ if base.startswith('"') and base.endswith('"'):
160
+ base = base[1:-1]
161
+ # script not found
162
+ _logger.warning("Script '%s' not found in paths: %s", script, ":".join(paths))
163
+ script_path = script
164
+ return script_path
tomwer/tests/utils.py ADDED
@@ -0,0 +1,5 @@
1
+ import os
2
+
3
+
4
+ def skip_gui_test():
5
+ return os.environ.get("_TOMWER_NO_GUI_UNIT_TESTS", "False") == "True"
tomwer/version.py CHANGED
@@ -76,9 +76,9 @@ RELEASE_LEVEL_VALUE = {
76
76
  }
77
77
 
78
78
  MAJOR = 1
79
- MINOR = 2
80
- MICRO = 9
81
- RELEV = "final" # <16
79
+ MINOR = 3
80
+ MICRO = 0
81
+ RELEV = "alpha" # <16
82
82
  SERIAL = 0 # <16
83
83
 
84
84
  date = __date__
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tomwer
3
- Version: 1.2.9
3
+ Version: 1.3.0a0
4
4
  Summary: "tomography workflow tools"
5
5
  Home-page: https://gitlab.esrf.fr/tomotools/tomwer
6
6
  Author: data analysis unit
@@ -24,24 +24,22 @@ License-File: LICENSE
24
24
  Requires-Dist: numpy
25
25
  Requires-Dist: setuptools
26
26
  Requires-Dist: psutil
27
- Requires-Dist: silx (>=1.0)
28
- Requires-Dist: tomoscan (<2.0,>=1.3.0a4)
29
- Requires-Dist: nxtomomill (<1.0,>=0.12.2)
27
+ Requires-Dist: silx (<2.0,>=1.0)
28
+ Requires-Dist: tomoscan (>=2.0.0a11)
29
+ Requires-Dist: nxtomo (>=1.0.4)
30
+ Requires-Dist: nxtomomill (>=1.0dev)
30
31
  Requires-Dist: processview (>=1.3)
31
32
  Requires-Dist: ewoks (>=0.1.1)
32
- Requires-Dist: sluurp (>=0.2.7)
33
+ Requires-Dist: sluurp (>=0.3.3)
33
34
  Requires-Dist: packaging
34
35
  Requires-Dist: flufl-lock
36
+ Requires-Dist: pyunitsystem (>=1.1.0)
35
37
  Provides-Extra: _dev_spec
36
38
  Requires-Dist: black ; extra == '_dev_spec'
37
39
  Requires-Dist: flake8 ; extra == '_dev_spec'
38
40
  Requires-Dist: timeout-decorator ; extra == '_dev_spec'
39
41
  Requires-Dist: pyopencl ; extra == '_dev_spec'
40
42
  Provides-Extra: _full_base
41
- Requires-Dist: Sphinx (>=4.0.0) ; extra == '_full_base'
42
- Requires-Dist: nbsphinx ; extra == '_full_base'
43
- Requires-Dist: pandoc ; extra == '_full_base'
44
- Requires-Dist: jupyterlab ; extra == '_full_base'
45
43
  Requires-Dist: orange-canvas-core ; extra == '_full_base'
46
44
  Requires-Dist: orange-widget-base ; extra == '_full_base'
47
45
  Requires-Dist: ewoks[orange] (>=0.1.1) ; extra == '_full_base'
@@ -55,16 +53,11 @@ Requires-Dist: json-rpc ; extra == '_full_base'
55
53
  Requires-Dist: scipy ; extra == '_full_base'
56
54
  Requires-Dist: Pillow ; extra == '_full_base'
57
55
  Requires-Dist: glymur ; extra == '_full_base'
58
- Requires-Dist: pytest ; extra == '_full_base'
59
- Requires-Dist: pytest-asyncio ; extra == '_full_base'
60
56
  Requires-Dist: resource ; extra == '_full_base'
61
57
  Requires-Dist: tifffile ; extra == '_full_base'
62
58
  Requires-Dist: hdf5plugin ; extra == '_full_base'
59
+ Requires-Dist: pyicat-plus ; extra == '_full_base'
63
60
  Provides-Extra: dev
64
- Requires-Dist: Sphinx (>=4.0.0) ; extra == 'dev'
65
- Requires-Dist: nbsphinx ; extra == 'dev'
66
- Requires-Dist: pandoc ; extra == 'dev'
67
- Requires-Dist: jupyterlab ; extra == 'dev'
68
61
  Requires-Dist: orange-canvas-core ; extra == 'dev'
69
62
  Requires-Dist: orange-widget-base ; extra == 'dev'
70
63
  Requires-Dist: ewoks[orange] (>=0.1.1) ; extra == 'dev'
@@ -78,12 +71,11 @@ Requires-Dist: json-rpc ; extra == 'dev'
78
71
  Requires-Dist: scipy ; extra == 'dev'
79
72
  Requires-Dist: Pillow ; extra == 'dev'
80
73
  Requires-Dist: glymur ; extra == 'dev'
81
- Requires-Dist: pytest ; extra == 'dev'
82
- Requires-Dist: pytest-asyncio ; extra == 'dev'
83
74
  Requires-Dist: resource ; extra == 'dev'
84
75
  Requires-Dist: tifffile ; extra == 'dev'
85
76
  Requires-Dist: hdf5plugin ; extra == 'dev'
86
- Requires-Dist: nabu[full] (>=2023.2.0rc2) ; extra == 'dev'
77
+ Requires-Dist: pyicat-plus ; extra == 'dev'
78
+ Requires-Dist: nabu[full] (>=2023.3.0dev) ; extra == 'dev'
87
79
  Requires-Dist: pycuda ; extra == 'dev'
88
80
  Requires-Dist: scikit-cuda ; extra == 'dev'
89
81
  Requires-Dist: black ; extra == 'dev'
@@ -91,10 +83,6 @@ Requires-Dist: flake8 ; extra == 'dev'
91
83
  Requires-Dist: timeout-decorator ; extra == 'dev'
92
84
  Requires-Dist: pyopencl ; extra == 'dev'
93
85
  Provides-Extra: dev_no_cuda
94
- Requires-Dist: Sphinx (>=4.0.0) ; extra == 'dev_no_cuda'
95
- Requires-Dist: nbsphinx ; extra == 'dev_no_cuda'
96
- Requires-Dist: pandoc ; extra == 'dev_no_cuda'
97
- Requires-Dist: jupyterlab ; extra == 'dev_no_cuda'
98
86
  Requires-Dist: orange-canvas-core ; extra == 'dev_no_cuda'
99
87
  Requires-Dist: orange-widget-base ; extra == 'dev_no_cuda'
100
88
  Requires-Dist: ewoks[orange] (>=0.1.1) ; extra == 'dev_no_cuda'
@@ -108,26 +96,41 @@ Requires-Dist: json-rpc ; extra == 'dev_no_cuda'
108
96
  Requires-Dist: scipy ; extra == 'dev_no_cuda'
109
97
  Requires-Dist: Pillow ; extra == 'dev_no_cuda'
110
98
  Requires-Dist: glymur ; extra == 'dev_no_cuda'
111
- Requires-Dist: pytest ; extra == 'dev_no_cuda'
112
- Requires-Dist: pytest-asyncio ; extra == 'dev_no_cuda'
113
99
  Requires-Dist: resource ; extra == 'dev_no_cuda'
114
100
  Requires-Dist: tifffile ; extra == 'dev_no_cuda'
115
101
  Requires-Dist: hdf5plugin ; extra == 'dev_no_cuda'
116
- Requires-Dist: nabu (<2023.3,>=2023.2.0rc2) ; extra == 'dev_no_cuda'
102
+ Requires-Dist: pyicat-plus ; extra == 'dev_no_cuda'
103
+ Requires-Dist: nabu (>=2023.3.0dev) ; extra == 'dev_no_cuda'
117
104
  Requires-Dist: black ; extra == 'dev_no_cuda'
118
105
  Requires-Dist: flake8 ; extra == 'dev_no_cuda'
119
106
  Requires-Dist: timeout-decorator ; extra == 'dev_no_cuda'
120
107
  Requires-Dist: pyopencl ; extra == 'dev_no_cuda'
121
108
  Provides-Extra: doc
109
+ Requires-Dist: orange-canvas-core ; extra == 'doc'
110
+ Requires-Dist: orange-widget-base ; extra == 'doc'
111
+ Requires-Dist: ewoks[orange] (>=0.1.1) ; extra == 'doc'
112
+ Requires-Dist: rsyncmanager ; extra == 'doc'
113
+ Requires-Dist: graypy ; extra == 'doc'
114
+ Requires-Dist: fabio ; extra == 'doc'
115
+ Requires-Dist: h5py (>=3) ; extra == 'doc'
116
+ Requires-Dist: lxml ; extra == 'doc'
117
+ Requires-Dist: werkzeug ; extra == 'doc'
118
+ Requires-Dist: json-rpc ; extra == 'doc'
119
+ Requires-Dist: scipy ; extra == 'doc'
120
+ Requires-Dist: Pillow ; extra == 'doc'
121
+ Requires-Dist: glymur ; extra == 'doc'
122
+ Requires-Dist: resource ; extra == 'doc'
123
+ Requires-Dist: tifffile ; extra == 'doc'
124
+ Requires-Dist: hdf5plugin ; extra == 'doc'
125
+ Requires-Dist: pyicat-plus ; extra == 'doc'
126
+ Requires-Dist: nabu (>=2023.3.0dev) ; extra == 'doc'
122
127
  Requires-Dist: Sphinx (>=4.0.0) ; extra == 'doc'
123
128
  Requires-Dist: nbsphinx ; extra == 'doc'
124
129
  Requires-Dist: pandoc ; extra == 'doc'
125
130
  Requires-Dist: jupyterlab ; extra == 'doc'
131
+ Requires-Dist: pydata-sphinx-theme ; extra == 'doc'
132
+ Requires-Dist: sphinx-design ; extra == 'doc'
126
133
  Provides-Extra: full
127
- Requires-Dist: Sphinx (>=4.0.0) ; extra == 'full'
128
- Requires-Dist: nbsphinx ; extra == 'full'
129
- Requires-Dist: pandoc ; extra == 'full'
130
- Requires-Dist: jupyterlab ; extra == 'full'
131
134
  Requires-Dist: orange-canvas-core ; extra == 'full'
132
135
  Requires-Dist: orange-widget-base ; extra == 'full'
133
136
  Requires-Dist: ewoks[orange] (>=0.1.1) ; extra == 'full'
@@ -141,19 +144,14 @@ Requires-Dist: json-rpc ; extra == 'full'
141
144
  Requires-Dist: scipy ; extra == 'full'
142
145
  Requires-Dist: Pillow ; extra == 'full'
143
146
  Requires-Dist: glymur ; extra == 'full'
144
- Requires-Dist: pytest ; extra == 'full'
145
- Requires-Dist: pytest-asyncio ; extra == 'full'
146
147
  Requires-Dist: resource ; extra == 'full'
147
148
  Requires-Dist: tifffile ; extra == 'full'
148
149
  Requires-Dist: hdf5plugin ; extra == 'full'
149
- Requires-Dist: nabu[full] (>=2023.2.0rc2) ; extra == 'full'
150
+ Requires-Dist: pyicat-plus ; extra == 'full'
151
+ Requires-Dist: nabu[full] (>=2023.3.0dev) ; extra == 'full'
150
152
  Requires-Dist: pycuda ; extra == 'full'
151
153
  Requires-Dist: scikit-cuda ; extra == 'full'
152
154
  Provides-Extra: full_no_cuda
153
- Requires-Dist: Sphinx (>=4.0.0) ; extra == 'full_no_cuda'
154
- Requires-Dist: nbsphinx ; extra == 'full_no_cuda'
155
- Requires-Dist: pandoc ; extra == 'full_no_cuda'
156
- Requires-Dist: jupyterlab ; extra == 'full_no_cuda'
157
155
  Requires-Dist: orange-canvas-core ; extra == 'full_no_cuda'
158
156
  Requires-Dist: orange-widget-base ; extra == 'full_no_cuda'
159
157
  Requires-Dist: ewoks[orange] (>=0.1.1) ; extra == 'full_no_cuda'
@@ -167,15 +165,17 @@ Requires-Dist: json-rpc ; extra == 'full_no_cuda'
167
165
  Requires-Dist: scipy ; extra == 'full_no_cuda'
168
166
  Requires-Dist: Pillow ; extra == 'full_no_cuda'
169
167
  Requires-Dist: glymur ; extra == 'full_no_cuda'
170
- Requires-Dist: pytest ; extra == 'full_no_cuda'
171
- Requires-Dist: pytest-asyncio ; extra == 'full_no_cuda'
172
168
  Requires-Dist: resource ; extra == 'full_no_cuda'
173
169
  Requires-Dist: tifffile ; extra == 'full_no_cuda'
174
170
  Requires-Dist: hdf5plugin ; extra == 'full_no_cuda'
175
- Requires-Dist: nabu (<2023.3,>=2023.2.0rc2) ; extra == 'full_no_cuda'
171
+ Requires-Dist: pyicat-plus ; extra == 'full_no_cuda'
172
+ Requires-Dist: nabu (>=2023.3.0dev) ; extra == 'full_no_cuda'
176
173
  Provides-Extra: setup_requires
177
174
  Requires-Dist: setuptools ; extra == 'setup_requires'
178
175
  Requires-Dist: numpy (>=1.12) ; extra == 'setup_requires'
176
+ Provides-Extra: test
177
+ Requires-Dist: pytest-asyncio ; extra == 'test'
178
+ Requires-Dist: tomoscan[test] (>=2.0.0a11) ; extra == 'test'
179
179
 
180
180
  tomwer
181
181
  ======