tomwer 1.3.4__py3-none-any.whl → 1.3.26__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 (59) hide show
  1. orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py +1 -0
  2. orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py +184 -184
  3. tomwer/app/canvas_launcher/mainwindow.py +0 -1
  4. tomwer/app/zstitching.py +0 -1
  5. tomwer/core/cluster/cluster.py +0 -9
  6. tomwer/core/process/control/datalistener/datalistener.py +15 -12
  7. tomwer/core/process/control/datawatcher/edfdwprocess.py +0 -9
  8. tomwer/core/process/reconstruction/axis/axis.py +3 -3
  9. tomwer/core/process/reconstruction/axis/params.py +3 -3
  10. tomwer/core/process/reconstruction/darkref/darkrefscopy.py +37 -8
  11. tomwer/core/process/reconstruction/nabu/nabucommon.py +3 -4
  12. tomwer/core/process/reconstruction/nabu/nabuscores.py +1 -0
  13. tomwer/core/process/reconstruction/nabu/nabuslices.py +6 -52
  14. tomwer/core/process/reconstruction/nabu/nabuvolume.py +2 -5
  15. tomwer/core/process/reconstruction/nabu/utils.py +10 -2
  16. tomwer/core/process/reconstruction/saaxis/saaxis.py +2 -0
  17. tomwer/core/process/reconstruction/sadeltabeta/sadeltabeta.py +2 -0
  18. tomwer/core/process/task.py +4 -2
  19. tomwer/core/process/test/test_data_transfer.py +4 -3
  20. tomwer/core/scan/blissscan.py +3 -3
  21. tomwer/core/scan/nxtomoscan.py +2 -2
  22. tomwer/core/scan/scanbase.py +5 -6
  23. tomwer/core/utils/scanutils.py +5 -1
  24. tomwer/gui/cluster/slurm.py +1 -21
  25. tomwer/gui/cluster/test/test_cluster.py +0 -1
  26. tomwer/gui/control/datawatcher/datawatcher.py +1 -24
  27. tomwer/gui/control/reducedarkflatselector.py +2 -2
  28. tomwer/gui/control/selectorwidgetbase.py +3 -1
  29. tomwer/gui/edit/dkrfpatch.py +4 -4
  30. tomwer/gui/edit/nxtomoeditor.py +28 -20
  31. tomwer/gui/edit/nxtomowarmer.py +3 -2
  32. tomwer/gui/edit/test/test_nx_editor.py +58 -1
  33. tomwer/gui/imagefromfile.py +2 -2
  34. tomwer/gui/qfolderdialog.py +4 -0
  35. tomwer/gui/reconstruction/axis/axis.py +16 -13
  36. tomwer/gui/reconstruction/axis/radioaxis.py +3 -1
  37. tomwer/gui/reconstruction/darkref/darkrefcopywidget.py +11 -0
  38. tomwer/gui/reconstruction/nabu/nabuconfig/preprocessing.py +16 -14
  39. tomwer/gui/reconstruction/saaxis/saaxis.py +2 -2
  40. tomwer/gui/stitching/stitching.py +8 -3
  41. tomwer/gui/visualization/dataviewer.py +27 -15
  42. tomwer/gui/visualization/diffviewer/diffviewer.py +9 -8
  43. tomwer/gui/visualization/volumeviewer.py +10 -4
  44. tomwer/io/utils/h5pyutils.py +3 -7
  45. tomwer/io/utils/utils.py +3 -3
  46. tomwer/synctools/stacks/reconstruction/castvolume.py +20 -5
  47. tomwer/synctools/stacks/reconstruction/dkrefcopy.py +10 -0
  48. tomwer/tests/datasets.py +5 -1
  49. tomwer/utils.py +1 -4
  50. tomwer/version.py +1 -1
  51. tomwer-1.3.26-py3.11-nspkg.pth +1 -0
  52. {tomwer-1.3.4.dist-info → tomwer-1.3.26.dist-info}/METADATA +34 -48
  53. {tomwer-1.3.4.dist-info → tomwer-1.3.26.dist-info}/RECORD +58 -58
  54. {tomwer-1.3.4.dist-info → tomwer-1.3.26.dist-info}/WHEEL +1 -1
  55. tomwer-1.3.4-py3.11-nspkg.pth +0 -1
  56. {tomwer-1.3.4.dist-info → tomwer-1.3.26.dist-info}/LICENSE +0 -0
  57. {tomwer-1.3.4.dist-info → tomwer-1.3.26.dist-info}/entry_points.txt +0 -0
  58. {tomwer-1.3.4.dist-info → tomwer-1.3.26.dist-info}/namespace_packages.txt +0 -0
  59. {tomwer-1.3.4.dist-info → tomwer-1.3.26.dist-info}/top_level.txt +0 -0
@@ -15,7 +15,6 @@ from tomoscan.esrf.volume.hdf5volume import HDF5Volume
15
15
  from tomoscan.factory import Factory
16
16
  from tomoscan.identifier import VolumeIdentifier
17
17
  from tomoscan.volumebase import VolumeBase
18
- from tomoscan.io import HDF5File, get_swmr_mode
19
18
 
20
19
  from tomwer.core.scan.scanbase import TomwerScanBase
21
20
  from tomwer.gui.visualization.reconstructionparameters import ReconstructionParameters
@@ -298,9 +297,16 @@ class VolumeViewer(qt.QMainWindow):
298
297
 
299
298
  self._close_h5_file()
300
299
  if isinstance(volume, HDF5Volume):
301
- self._h5_file = HDF5File(
302
- filename=volume.data_url.file_path(), mode="r", swmr=get_swmr_mode()
303
- )
300
+ try:
301
+ self._h5_file = h5py.File(volume.data_url.file_path(), mode="r")
302
+ except OSError:
303
+ self._h5_file = h5py.File(
304
+ volume.data_url.file_path(),
305
+ mode="r",
306
+ libver="latest",
307
+ swmr=True,
308
+ )
309
+
304
310
  if volume.data_url.data_path() in self._h5_file:
305
311
  data = self._h5_file[volume.data_url.data_path()]
306
312
  state = "loaded"
@@ -35,7 +35,7 @@ import contextlib
35
35
 
36
36
  import h5py
37
37
  from silx.io.url import DataUrl
38
- from tomoscan.io import HDF5File, get_swmr_mode
38
+ from silx.io.utils import open as open_hdf5
39
39
 
40
40
 
41
41
  class _BaseReader(contextlib.AbstractContextManager):
@@ -60,9 +60,7 @@ class EntryReader(_BaseReader):
60
60
  """Context manager used to read a bliss node"""
61
61
 
62
62
  def __enter__(self):
63
- self._file_handler = HDF5File(
64
- filename=self._url.file_path(), mode="r", swmr=get_swmr_mode()
65
- )
63
+ self._file_handler = open_hdf5(filename=self._url.file_path())
66
64
  entry = self._file_handler[self._url.data_path()]
67
65
  if not isinstance(entry, h5py.Group):
68
66
  raise ValueError("Data path should point to a bliss node (h5py.Group)")
@@ -73,9 +71,7 @@ class DatasetReader(_BaseReader):
73
71
  """Context manager used to read a bliss node"""
74
72
 
75
73
  def __enter__(self):
76
- self._file_handler = HDF5File(
77
- filename=self._url.file_path(), mode="r", swmr=get_swmr_mode()
78
- )
74
+ self._file_handler = open_hdf5(filename=self._url.file_path())
79
75
  entry = self._file_handler[self._url.data_path()]
80
76
  if not isinstance(entry, h5py.Dataset):
81
77
  raise ValueError("Data path should point to a dtaset (h5py.Dataset)")
tomwer/io/utils/utils.py CHANGED
@@ -37,9 +37,9 @@ import os
37
37
  import h5py
38
38
  import numpy.lib.npyio
39
39
  from PIL import Image
40
+ from silx.io.utils import open as open_hdf5
40
41
  from tomoscan.esrf import has_glymur
41
42
  from tomoscan.esrf.scan.utils import get_data as tomoscan_get_data
42
- from tomoscan.io import HDF5File, get_swmr_mode
43
43
  from typing import Union
44
44
 
45
45
  from tomwer.core.utils import ftseriesutils
@@ -201,7 +201,7 @@ def get_linked_files_with_entry(hdf5_file: str, entry: str) -> set:
201
201
  if item in treated_items:
202
202
  continue
203
203
  dirname = os.path.dirname(abs_file_path)
204
- with HDF5File(abs_file_path, mode="r", swmr=get_swmr_mode()) as h5f:
204
+ with open_hdf5(abs_file_path) as h5f:
205
205
  node = h5f.get(data_path, getlink=True)
206
206
  if isinstance(node, h5py.ExternalLink):
207
207
  ext_file_path = node.filename
@@ -252,7 +252,7 @@ def get_linked_files_with_vds(hdf5_file: str, dataset_path: str) -> set:
252
252
  if item in treated_items:
253
253
  continue
254
254
  dirname = os.path.dirname(abs_file_path)
255
- with HDF5File(abs_file_path, mode="r", swmr=get_swmr_mode()) as h5f:
255
+ with open_hdf5(abs_file_path) as h5f:
256
256
  dataset = h5f[dataset_path]
257
257
  if dataset.is_virtual:
258
258
  for vs_info in dataset.virtual_sources():
@@ -94,11 +94,26 @@ class CastVolumeProcessStack(FIFO, qt.QObject):
94
94
  self.scan_ready(scan=data)
95
95
  else:
96
96
  self._data_currently_computed = data
97
- self._computationThread.init(data=data, configuration=configuration)
98
- # need to manage connect before starting it because
99
- fct_callback = functools.partial(self._end_threaded_computation, callback)
100
- self._computationThread.finished.connect(fct_callback)
101
- self._computationThread.start()
97
+ try:
98
+ self._computationThread.init(data=data, configuration=configuration)
99
+ except ValueError as e:
100
+ # initialization can fail (for example for cast volume is there is no volume or be case this will raise an error)
101
+ # then we want to keep the thread active
102
+ self._data_currently_computed = None
103
+ ProcessManager().notify_dataset_state(
104
+ dataset=data, process=self._process_id, state=DatasetState.SKIPPED
105
+ )
106
+ _logger.processSkipped(f"thread initialization failed. Error is {e}")
107
+ if callback is not None:
108
+ callback()
109
+ self.scan_ready(scan=data)
110
+ else:
111
+ # need to manage connect before starting it because
112
+ fct_callback = functools.partial(
113
+ self._end_threaded_computation, callback
114
+ )
115
+ self._computationThread.finished.connect(fct_callback)
116
+ self._computationThread.start()
102
117
 
103
118
  def _end_computation(self, data, future_tomo_obj, callback):
104
119
  """
@@ -30,6 +30,7 @@ import functools
30
30
  import logging
31
31
  import shutil
32
32
  import tempfile
33
+ import os
33
34
 
34
35
  from processview.core.manager import DatasetState, ProcessManager
35
36
  from processview.core.superviseprocess import SuperviseProcess
@@ -132,6 +133,15 @@ class DarkRefCopyProcessStack(FIFO, qt.QObject):
132
133
  def _create_processing_thread(self, process_id=None) -> qt.QThread:
133
134
  return _ProcessingThread(process_id=process_id, save_dir=self._save_dir)
134
135
 
136
+ def clear_cache(self):
137
+ """
138
+ remove the file used to cache the reduced darks / flats.
139
+ This can be used in the case it contain unrelevant data. Like frame with another shape...
140
+ """
141
+ cache_file = DarkRefsCopy.get_save_file(self._save_dir)
142
+ if os.path.exists(cache_file):
143
+ os.remove(cache_file)
144
+
135
145
 
136
146
  class _ProcessingThread(ProcessingThread, SuperviseProcess):
137
147
  """
tomwer/tests/datasets.py CHANGED
@@ -1,5 +1,9 @@
1
1
  import os
2
- from tomoscan.test.datasets import GitlabProject
2
+
3
+ try:
4
+ from tomoscan.test.datasets import GitlabProject
5
+ except ImportError:
6
+ from tomoscan.tests.datasets import GitlabProject
3
7
 
4
8
  TomwerCIDatasets = GitlabProject(
5
9
  branch_name="tomwer",
tomwer/utils.py CHANGED
@@ -81,10 +81,7 @@ class LauncherCommand(_LauncherCommand):
81
81
  """Description of a command"""
82
82
 
83
83
  def get_module(self):
84
- """Returns the python module to execute. If any.
85
-
86
- :rtype: module
87
- """
84
+ """Returns the python module to execute. If any."""
88
85
  try:
89
86
  module = importlib.import_module(self.module_name)
90
87
  return module
tomwer/version.py CHANGED
@@ -77,7 +77,7 @@ RELEASE_LEVEL_VALUE = {
77
77
 
78
78
  MAJOR = 1
79
79
  MINOR = 3
80
- MICRO = 4
80
+ MICRO = 26
81
81
  RELEV = "final" # <16
82
82
  SERIAL = 0 # <16
83
83
 
@@ -0,0 +1 @@
1
+ import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('orangecontrib',));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('orangecontrib', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('orangecontrib', [os.path.dirname(p)])));m = m or sys.modules.setdefault('orangecontrib', types.ModuleType('orangecontrib'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tomwer
3
- Version: 1.3.4
3
+ Version: 1.3.26
4
4
  Summary: "tomography workflow tools"
5
5
  Home-page: https://gitlab.esrf.fr/tomotools/tomwer
6
6
  Author: data analysis unit
@@ -18,49 +18,24 @@ Classifier: Operating System :: POSIX
18
18
  Classifier: Natural Language :: English
19
19
  Classifier: Topic :: Scientific/Engineering :: Physics
20
20
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
- Requires-Python: >=3.6
22
- Description-Content-Type: text/markdown
21
+ Requires-Python: >=3.8
22
+ Description-Content-Type: text/x-rst
23
23
  License-File: LICENSE
24
24
  Requires-Dist: numpy
25
25
  Requires-Dist: setuptools
26
26
  Requires-Dist: psutil
27
27
  Requires-Dist: silx[full] >=2.0
28
- Requires-Dist: tomoscan >=2.0.0a11
29
- Requires-Dist: nxtomo >=1.2.3rc1
30
- Requires-Dist: nxtomomill >=1.0dev
28
+ Requires-Dist: tomoscan <2.1,>=2.0.0a11
29
+ Requires-Dist: nxtomo <1.3,>=1.2.3rc1
30
+ Requires-Dist: nxtomomill <1.1,>=1.0dev
31
31
  Requires-Dist: processview >=1.3
32
32
  Requires-Dist: ewoks >=0.1.1
33
- Requires-Dist: ewoksorange ==0.6
33
+ Requires-Dist: ewoksorange <0.7,>=0.6
34
34
  Requires-Dist: sluurp >=0.3.3
35
35
  Requires-Dist: packaging
36
36
  Requires-Dist: flufl-lock
37
- Requires-Dist: pyunitsystem >=1.1.0
38
- Provides-Extra: _dev_spec
39
- Requires-Dist: black ; extra == '_dev_spec'
40
- Requires-Dist: flake8 ; extra == '_dev_spec'
41
- Requires-Dist: timeout-decorator ; extra == '_dev_spec'
42
- Requires-Dist: pyopencl ; extra == '_dev_spec'
43
- Provides-Extra: _full_base
44
- Requires-Dist: orange-canvas-core ; extra == '_full_base'
45
- Requires-Dist: orange-widget-base ; extra == '_full_base'
46
- Requires-Dist: ewoks[orange] >=0.1.1 ; extra == '_full_base'
47
- Requires-Dist: rsyncmanager ; extra == '_full_base'
48
- Requires-Dist: graypy ; extra == '_full_base'
49
- Requires-Dist: fabio ; extra == '_full_base'
50
- Requires-Dist: h5py >=3 ; extra == '_full_base'
51
- Requires-Dist: lxml ; extra == '_full_base'
52
- Requires-Dist: werkzeug ; extra == '_full_base'
53
- Requires-Dist: json-rpc ; extra == '_full_base'
54
- Requires-Dist: scipy ; extra == '_full_base'
55
- Requires-Dist: Pillow ; extra == '_full_base'
56
- Requires-Dist: glymur ; extra == '_full_base'
57
- Requires-Dist: resource ; extra == '_full_base'
58
- Requires-Dist: tifffile ; extra == '_full_base'
59
- Requires-Dist: hdf5plugin ; extra == '_full_base'
60
- Requires-Dist: pyicat-plus ; extra == '_full_base'
37
+ Requires-Dist: pyunitsystem <2.0,>=1.1.0
61
38
  Provides-Extra: dev
62
- Requires-Dist: orange-canvas-core ; extra == 'dev'
63
- Requires-Dist: orange-widget-base ; extra == 'dev'
64
39
  Requires-Dist: ewoks[orange] >=0.1.1 ; extra == 'dev'
65
40
  Requires-Dist: rsyncmanager ; extra == 'dev'
66
41
  Requires-Dist: graypy ; extra == 'dev'
@@ -77,15 +52,13 @@ Requires-Dist: tifffile ; extra == 'dev'
77
52
  Requires-Dist: hdf5plugin ; extra == 'dev'
78
53
  Requires-Dist: pyicat-plus ; extra == 'dev'
79
54
  Requires-Dist: nabu[full] >=2023.3.1dev ; extra == 'dev'
80
- Requires-Dist: pycuda ; extra == 'dev'
55
+ Requires-Dist: pycuda <2024.1.1 ; extra == 'dev'
81
56
  Requires-Dist: scikit-cuda ; extra == 'dev'
82
57
  Requires-Dist: black ; extra == 'dev'
83
58
  Requires-Dist: flake8 ; extra == 'dev'
84
59
  Requires-Dist: timeout-decorator ; extra == 'dev'
85
60
  Requires-Dist: pyopencl ; extra == 'dev'
86
61
  Provides-Extra: dev_no_cuda
87
- Requires-Dist: orange-canvas-core ; extra == 'dev_no_cuda'
88
- Requires-Dist: orange-widget-base ; extra == 'dev_no_cuda'
89
62
  Requires-Dist: ewoks[orange] >=0.1.1 ; extra == 'dev_no_cuda'
90
63
  Requires-Dist: rsyncmanager ; extra == 'dev_no_cuda'
91
64
  Requires-Dist: graypy ; extra == 'dev_no_cuda'
@@ -101,14 +74,17 @@ Requires-Dist: resource ; extra == 'dev_no_cuda'
101
74
  Requires-Dist: tifffile ; extra == 'dev_no_cuda'
102
75
  Requires-Dist: hdf5plugin ; extra == 'dev_no_cuda'
103
76
  Requires-Dist: pyicat-plus ; extra == 'dev_no_cuda'
104
- Requires-Dist: nabu >=2023.3.1dev ; extra == 'dev_no_cuda'
77
+ Requires-Dist: nabu <2024.2,>=2023.3.1dev ; extra == 'dev_no_cuda'
105
78
  Requires-Dist: black ; extra == 'dev_no_cuda'
106
79
  Requires-Dist: flake8 ; extra == 'dev_no_cuda'
107
80
  Requires-Dist: timeout-decorator ; extra == 'dev_no_cuda'
108
81
  Requires-Dist: pyopencl ; extra == 'dev_no_cuda'
82
+ Provides-Extra: dev_spec
83
+ Requires-Dist: black ; extra == 'dev_spec'
84
+ Requires-Dist: flake8 ; extra == 'dev_spec'
85
+ Requires-Dist: timeout-decorator ; extra == 'dev_spec'
86
+ Requires-Dist: pyopencl ; extra == 'dev_spec'
109
87
  Provides-Extra: doc
110
- Requires-Dist: orange-canvas-core ; extra == 'doc'
111
- Requires-Dist: orange-widget-base ; extra == 'doc'
112
88
  Requires-Dist: ewoks[orange] >=0.1.1 ; extra == 'doc'
113
89
  Requires-Dist: rsyncmanager ; extra == 'doc'
114
90
  Requires-Dist: graypy ; extra == 'doc'
@@ -124,7 +100,7 @@ Requires-Dist: resource ; extra == 'doc'
124
100
  Requires-Dist: tifffile ; extra == 'doc'
125
101
  Requires-Dist: hdf5plugin ; extra == 'doc'
126
102
  Requires-Dist: pyicat-plus ; extra == 'doc'
127
- Requires-Dist: nabu >=2023.3.1dev ; extra == 'doc'
103
+ Requires-Dist: nabu <2024.2,>=2023.3.1dev ; extra == 'doc'
128
104
  Requires-Dist: Sphinx >=4.0.0 ; extra == 'doc'
129
105
  Requires-Dist: nbsphinx ; extra == 'doc'
130
106
  Requires-Dist: pandoc ; extra == 'doc'
@@ -133,8 +109,6 @@ Requires-Dist: pydata-sphinx-theme ; extra == 'doc'
133
109
  Requires-Dist: sphinx-design ; extra == 'doc'
134
110
  Requires-Dist: sphinx-autodoc-typehints ; extra == 'doc'
135
111
  Provides-Extra: full
136
- Requires-Dist: orange-canvas-core ; extra == 'full'
137
- Requires-Dist: orange-widget-base ; extra == 'full'
138
112
  Requires-Dist: ewoks[orange] >=0.1.1 ; extra == 'full'
139
113
  Requires-Dist: rsyncmanager ; extra == 'full'
140
114
  Requires-Dist: graypy ; extra == 'full'
@@ -151,11 +125,25 @@ Requires-Dist: tifffile ; extra == 'full'
151
125
  Requires-Dist: hdf5plugin ; extra == 'full'
152
126
  Requires-Dist: pyicat-plus ; extra == 'full'
153
127
  Requires-Dist: nabu[full] >=2023.3.1dev ; extra == 'full'
154
- Requires-Dist: pycuda ; extra == 'full'
128
+ Requires-Dist: pycuda <2024.1.1 ; extra == 'full'
155
129
  Requires-Dist: scikit-cuda ; extra == 'full'
130
+ Provides-Extra: full_base
131
+ Requires-Dist: ewoks[orange] >=0.1.1 ; extra == 'full_base'
132
+ Requires-Dist: rsyncmanager ; extra == 'full_base'
133
+ Requires-Dist: graypy ; extra == 'full_base'
134
+ Requires-Dist: fabio ; extra == 'full_base'
135
+ Requires-Dist: h5py >=3 ; extra == 'full_base'
136
+ Requires-Dist: lxml ; extra == 'full_base'
137
+ Requires-Dist: werkzeug ; extra == 'full_base'
138
+ Requires-Dist: json-rpc ; extra == 'full_base'
139
+ Requires-Dist: scipy ; extra == 'full_base'
140
+ Requires-Dist: Pillow ; extra == 'full_base'
141
+ Requires-Dist: glymur ; extra == 'full_base'
142
+ Requires-Dist: resource ; extra == 'full_base'
143
+ Requires-Dist: tifffile ; extra == 'full_base'
144
+ Requires-Dist: hdf5plugin ; extra == 'full_base'
145
+ Requires-Dist: pyicat-plus ; extra == 'full_base'
156
146
  Provides-Extra: full_no_cuda
157
- Requires-Dist: orange-canvas-core ; extra == 'full_no_cuda'
158
- Requires-Dist: orange-widget-base ; extra == 'full_no_cuda'
159
147
  Requires-Dist: ewoks[orange] >=0.1.1 ; extra == 'full_no_cuda'
160
148
  Requires-Dist: rsyncmanager ; extra == 'full_no_cuda'
161
149
  Requires-Dist: graypy ; extra == 'full_no_cuda'
@@ -171,10 +159,8 @@ Requires-Dist: resource ; extra == 'full_no_cuda'
171
159
  Requires-Dist: tifffile ; extra == 'full_no_cuda'
172
160
  Requires-Dist: hdf5plugin ; extra == 'full_no_cuda'
173
161
  Requires-Dist: pyicat-plus ; extra == 'full_no_cuda'
174
- Requires-Dist: nabu >=2023.3.1dev ; extra == 'full_no_cuda'
162
+ Requires-Dist: nabu <2024.2,>=2023.3.1dev ; extra == 'full_no_cuda'
175
163
  Provides-Extra: full_no_nabu
176
- Requires-Dist: orange-canvas-core ; extra == 'full_no_nabu'
177
- Requires-Dist: orange-widget-base ; extra == 'full_no_nabu'
178
164
  Requires-Dist: ewoks[orange] >=0.1.1 ; extra == 'full_no_nabu'
179
165
  Requires-Dist: rsyncmanager ; extra == 'full_no_nabu'
180
166
  Requires-Dist: graypy ; extra == 'full_no_nabu'