tomwer 1.3.16__py3-none-any.whl → 1.3.18__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.
@@ -34,7 +34,6 @@ from silx.gui import qt
34
34
  from silx.gui.dialog.ColormapDialog import DisplayMode
35
35
  from silx.gui.plot.ImageStack import ImageStack as _ImageStack
36
36
  from silx.gui.plot.ImageStack import UrlLoader
37
- from silx.gui.utils.signal import SignalProxy
38
37
  from silx.io.url import DataUrl
39
38
  from silx.utils.enum import Enum as _Enum
40
39
 
@@ -86,17 +85,6 @@ class DataViewer(qt.QMainWindow):
86
85
  self._viewer.getPlotWidget().setKeepDataAspectRatio(True)
87
86
  self.setCentralWidget(self._viewer)
88
87
 
89
- # signal / slot
90
- # add a signal proxy on the QSlider
91
- self._viewer._slider.sigCurrentUrlIndexChanged.disconnect(
92
- self._viewer.setCurrentUrlIndex
93
- )
94
- self._proxySig = SignalProxy(
95
- self._viewer._slider.sigCurrentUrlIndexChanged,
96
- delay=0.3,
97
- slot=self._urlIndexDelayed,
98
- )
99
-
100
88
  # display control
101
89
  self._controls = DisplayControl(parent=self)
102
90
  self._controlsDW = qt.QDockWidget(self)
@@ -110,6 +98,33 @@ class DataViewer(qt.QMainWindow):
110
98
  self._controls.sigDisplayModeChanged.connect(self._updateDisplay)
111
99
  self._controls.sigDisplayModeChanged.connect(self.sigConfigChanged)
112
100
 
101
+ # upgrade of the slider (see details in '__sliderPressed' docstring).
102
+ horizontal_slider = self._viewer._slider
103
+ horizontal_slider._slider.sliderReleased.connect(self.__sliderReleased)
104
+ horizontal_slider._slider.sliderPressed.connect(self.__sliderPressed)
105
+
106
+ def __sliderPressed(self):
107
+ """
108
+ today each time the slider value is modified it will load the frame and display it
109
+ but in our case we cannot afford it as it will take too much memory.
110
+ So we will disconnect the callback (self._viewer.setCurrentUrlIndex) until the slider is active
111
+ and reactivate it afterwards
112
+ """
113
+ self._viewer._slider.sigCurrentUrlIndexChanged.disconnect(
114
+ self._viewer.setCurrentUrlIndex
115
+ )
116
+
117
+ def __sliderReleased(self):
118
+ """
119
+ See details in '__sliderPressed'
120
+ """
121
+ horizontal_slider = self._viewer._slider
122
+ self._viewer._slider.sigCurrentUrlIndexChanged.connect(
123
+ self._viewer.setCurrentUrlIndex
124
+ )
125
+ # set the url with the latest value to display the requested frame
126
+ self._viewer.setCurrentUrlIndex(horizontal_slider.value())
127
+
113
128
  def getPlotWidget(self):
114
129
  return self._viewer.getPlotWidget()
115
130
 
@@ -134,9 +149,6 @@ class DataViewer(qt.QMainWindow):
134
149
  self._viewer = None
135
150
  super().close()
136
151
 
137
- def _urlIndexDelayed(self, *args, **kwargs):
138
- self._viewer.setCurrentUrlIndex(args[0][0])
139
-
140
152
  def getScan(self):
141
153
  if self._scan:
142
154
  return self._scan()
@@ -25,6 +25,7 @@
25
25
  """
26
26
  contains gui relative frame difference display
27
27
  """
28
+ from __future__ import annotations
28
29
 
29
30
  __authors__ = ["H. Payno"]
30
31
  __license__ = "MIT"
@@ -148,7 +149,7 @@ class _FrameSelector(qt.QWidget):
148
149
  return
149
150
 
150
151
  urls = []
151
- angles = []
152
+ urls_to_angles: dict[str, float] = {}
152
153
  self._currentFrameUrlsText.clear()
153
154
  self._frameUrlCB.clear()
154
155
  if type_selected == self.FrameType.DARKS:
@@ -162,7 +163,7 @@ class _FrameSelector(qt.QWidget):
162
163
  angles_and_urls = self._scan.get_proj_angle_url(with_alignment=False)
163
164
  for angle, url in angles_and_urls.items():
164
165
  urls.append(url)
165
- angles.append(angle)
166
+ urls_to_angles[url.path()] = angle
166
167
  else:
167
168
  urls = self._scan.projections.values()
168
169
  elif type_selected == self.FrameType.ALIGN_PROJ:
@@ -174,14 +175,14 @@ class _FrameSelector(qt.QWidget):
174
175
  raise ValueError(f"Type {type_selected} not managed")
175
176
  urls = sorted(urls, key=lambda url: url.path())
176
177
 
177
- # if thre is some angles missing, avoiding setting any angle because they are probably wrong
178
+ # if there is some angles missing, avoiding setting any angle because they are probably wrong
178
179
  # this will probably fail with EDF but this is legacy
179
- if len(angles) != len(urls):
180
- angles = []
180
+ if len(urls_to_angles) != len(urls):
181
+ urls_to_angles.clear()
181
182
 
182
- for i_url, url in enumerate(urls):
183
- if len(angles) > 0:
184
- text = f"angle={angles[i_url]}&"
183
+ for url in urls:
184
+ if len(urls_to_angles) > 0:
185
+ text = f"angle={urls_to_angles[url.path()]}&"
185
186
  else:
186
187
  text = ""
187
188
  if url.data_slice() is not None:
tomwer/version.py CHANGED
@@ -77,7 +77,7 @@ RELEASE_LEVEL_VALUE = {
77
77
 
78
78
  MAJOR = 1
79
79
  MINOR = 3
80
- MICRO = 16
80
+ MICRO = 18
81
81
  RELEV = "final" # <16
82
82
  SERIAL = 0 # <16
83
83
 
@@ -0,0 +1 @@
1
+ import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('orangecontrib',));importlib = has_mfs and __import__('importlib.util');has_mfs and __import__('importlib.machinery');m = has_mfs and 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.16
3
+ Version: 1.3.18
4
4
  Summary: "tomography workflow tools"
5
5
  Home-page: https://gitlab.esrf.fr/tomotools/tomwer
6
6
  Author: data analysis unit
@@ -34,7 +34,7 @@ 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
37
+ Requires-Dist: pyunitsystem <2.0,>=1.1.0
38
38
  Provides-Extra: _dev_spec
39
39
  Requires-Dist: black ; extra == '_dev_spec'
40
40
  Requires-Dist: flake8 ; extra == '_dev_spec'
@@ -77,7 +77,7 @@ Requires-Dist: tifffile ; extra == 'dev'
77
77
  Requires-Dist: hdf5plugin ; extra == 'dev'
78
78
  Requires-Dist: pyicat-plus ; extra == 'dev'
79
79
  Requires-Dist: nabu[full] >=2023.3.1dev ; extra == 'dev'
80
- Requires-Dist: pycuda ; extra == 'dev'
80
+ Requires-Dist: pycuda <2024.1.1 ; extra == 'dev'
81
81
  Requires-Dist: scikit-cuda ; extra == 'dev'
82
82
  Requires-Dist: black ; extra == 'dev'
83
83
  Requires-Dist: flake8 ; extra == 'dev'
@@ -151,7 +151,7 @@ Requires-Dist: tifffile ; extra == 'full'
151
151
  Requires-Dist: hdf5plugin ; extra == 'full'
152
152
  Requires-Dist: pyicat-plus ; extra == 'full'
153
153
  Requires-Dist: nabu[full] >=2023.3.1dev ; extra == 'full'
154
- Requires-Dist: pycuda ; extra == 'full'
154
+ Requires-Dist: pycuda <2024.1.1 ; extra == 'full'
155
155
  Requires-Dist: scikit-cuda ; extra == 'full'
156
156
  Provides-Extra: full_no_cuda
157
157
  Requires-Dist: orange-canvas-core ; extra == 'full_no_cuda'
@@ -1,4 +1,4 @@
1
- tomwer-1.3.16-py3.11-nspkg.pth,sha256=UYCZtLWueceGiAlmXKRJUZ0TWQEubpPoQ1pVnAAsME0,502
1
+ tomwer-1.3.18-py3.11-nspkg.pth,sha256=xeeGR3TjdoVxdFeF6T-zSwZWh6Et--EYuPWu67LxL_c,574
2
2
  orangecontrib/tomwer/__init__.py,sha256=B4DXy1gY_wXmNYa2aOfapmJb2mEuCAjoaNEGnpBs70g,148
3
3
  orangecontrib/tomwer/state_summary.py,sha256=5_dPzweL3r0ye4ZfJo6IV2ThJI8fQhWoO2ySdJJajj8,1711
4
4
  orangecontrib/tomwer/orange/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -220,7 +220,7 @@ orangecontrib/tomwer/widgets/visualization/icons/volumeviewer.svg,sha256=2uT9_px
220
220
  tomwer/__init__.py,sha256=82Jp1abyG4UWdGuT4nNU7LxaUV6xxkOte5pIz3w69Do,1745
221
221
  tomwer/__main__.py,sha256=jsDfWA2yl5am0dHQVkYwlKLxxqKNont6VDF-LusuawE,8575
222
222
  tomwer/utils.py,sha256=EgVwJ5CQVjoBvcKNwyVoXv_P4ciI11oxb8fNyy82Lck,8465
223
- tomwer/version.py,sha256=tdxCOIwn5mKxt6KhNwxT5w6DB1JmpWNjqHF4HxajG5s,4387
223
+ tomwer/version.py,sha256=H4Y_5_SwDCCqNGu7TA9h039XASYEMV-YWRRCBHr2lKQ,4387
224
224
  tomwer/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
225
  tomwer/app/axis.py,sha256=Ax0wlTp9u0Ll_3ax23QP5Ck16_M9Kop7wx0hAbXrXyM,6004
226
226
  tomwer/app/canvas.py,sha256=RbQqgE7DuNjv4nGG6BNfnSevQO5_lCl7N71hGcLoxwE,1561
@@ -587,7 +587,7 @@ tomwer/gui/utils/waiterthread.py,sha256=XEp6CRQt4aHCuyS2C6ZeQIMWESGilbuhaJjm9CzQ
587
587
  tomwer/gui/utils/lineselector/__init__.py,sha256=GZ847ef5X2wk_sAHxg6h24TarPYmb4NZjQI3jjkc7jE,75
588
588
  tomwer/gui/utils/lineselector/lineselector.py,sha256=R-RhrTQj1wTPylD0D9MKNzM6voJx-O-z4nhIVwMqj5M,8179
589
589
  tomwer/gui/visualization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
590
- tomwer/gui/visualization/dataviewer.py,sha256=X632o237-0cW4gWTIXajA_vkOW9STchEbEY8VEZdM-A,27024
590
+ tomwer/gui/visualization/dataviewer.py,sha256=Hh76ttfOeZzJUQVaT5F5AGJONK6DdMu46A8OBkWIpGg,27694
591
591
  tomwer/gui/visualization/fullscreenplot.py,sha256=ptLrhF8DUsYNMj-KDioe9Y-KxnOzqepGlS8K2A2hjck,3639
592
592
  tomwer/gui/visualization/nxtomometadata.py,sha256=uR2bHPnMp66mOJkE9WscTcQaiasr01pt3IbLUPP1F5M,683
593
593
  tomwer/gui/visualization/reconstructionparameters.py,sha256=19W0uAdkda8kzp9rWj4gbMuG4t16kBc3j6RwM_1hogk,10230
@@ -597,7 +597,7 @@ tomwer/gui/visualization/tomoobjoverview.py,sha256=YzocBQXhgnzI8IsJg5junE7218WcJ
597
597
  tomwer/gui/visualization/volumeoverview.py,sha256=6Hv1TtsDlaGQPCJKW-IkGy_r5Buue-O95tl1KkpMD-0,2491
598
598
  tomwer/gui/visualization/volumeviewer.py,sha256=LZq0sHlxpkPvBT5D4l7fbMj7jdwRBRylqswQy1bJD_c,16335
599
599
  tomwer/gui/visualization/diffviewer/__init__.py,sha256=rZ7qOTfAChU3FouCdkZllXT9ZZqTdo1XhLZMfmOqUAE,39
600
- tomwer/gui/visualization/diffviewer/diffviewer.py,sha256=Y8tDT1l-AkBSpTkBes31r_bhjbBeAlO__3OAc0Ob6Io,21812
600
+ tomwer/gui/visualization/diffviewer/diffviewer.py,sha256=OZp3e8Fc8AkAKHIkfZI7wxLy9vmT8r40VXV1HPqQs5o,21910
601
601
  tomwer/gui/visualization/diffviewer/shiftwidget.py,sha256=2hpGo6BvubcSbw2QOT823sL74AEWyU32UxnvVZ4bDok,20928
602
602
  tomwer/gui/visualization/test/__init__.py,sha256=nRVmFmNtdzN5PElEurDCb9pDulWIha-fLu-VX8hNn5A,1368
603
603
  tomwer/gui/visualization/test/test_dataviewer.py,sha256=uiF4_tYUsP2w9-R9JrpecerUj7XIQbv0AgRSYPV_itQ,2446
@@ -776,10 +776,10 @@ tomwer/tests/test_utils.py,sha256=D0rNDSK6csEOYBY_7gD-4A3jp8rYAm8L1_Xg34A9I2s,30
776
776
  tomwer/tests/utils.py,sha256=RAXx5A99WD4Vyuv_wjHBdr-Xu7UiThHRKw2eiB5GX10,107
777
777
  tomwer/third_part/WaitingOverlay.py,sha256=GnqiytcJDp_24Cmz_2nZAP5HfpL3Yh7AzR2ATIusGsg,3906
778
778
  tomwer/third_part/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
779
- tomwer-1.3.16.dist-info/LICENSE,sha256=yR_hIZ1MfDh9x2_s23uFqBH7m5DgrBl9nJKkE37YChM,1877
780
- tomwer-1.3.16.dist-info/METADATA,sha256=ek1FtwMJWefeaq4GwgLvgVCai6K7df4dFJ2UtA1dINI,11462
781
- tomwer-1.3.16.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
782
- tomwer-1.3.16.dist-info/entry_points.txt,sha256=fIcDnCxjgwzfIylLYhUsFyiNZjZMxsfRQBxi4f-cJg8,440
783
- tomwer-1.3.16.dist-info/namespace_packages.txt,sha256=Iut-JTfT11SZHHm77_ZeszD7pZDWXcTweCbvrJpqDyQ,14
784
- tomwer-1.3.16.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
785
- tomwer-1.3.16.dist-info/RECORD,,
779
+ tomwer-1.3.18.dist-info/LICENSE,sha256=yR_hIZ1MfDh9x2_s23uFqBH7m5DgrBl9nJKkE37YChM,1877
780
+ tomwer-1.3.18.dist-info/METADATA,sha256=Mub_NcjFAEJu2z-puw6RZ8r_7aU5dNWoCMraoQdqXe8,11487
781
+ tomwer-1.3.18.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
782
+ tomwer-1.3.18.dist-info/entry_points.txt,sha256=fIcDnCxjgwzfIylLYhUsFyiNZjZMxsfRQBxi4f-cJg8,440
783
+ tomwer-1.3.18.dist-info/namespace_packages.txt,sha256=Iut-JTfT11SZHHm77_ZeszD7pZDWXcTweCbvrJpqDyQ,14
784
+ tomwer-1.3.18.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
785
+ tomwer-1.3.18.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (71.1.0)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1 +0,0 @@
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)