tomwer 1.3.25__py3-none-any.whl → 1.3.27__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.
@@ -1,184 +1,184 @@
1
- import logging
2
-
3
- from orangewidget import gui
4
- from orangewidget.settings import Setting
5
- from orangewidget.widget import Input, Output
6
- from orangecontrib.tomwer.orange.managedprocess import TomwerWithStackStack
7
- from silx.gui import qt
8
- from typing import Optional
9
-
10
- from tomwer.core.futureobject import FutureTomwerObject
11
- from tomwer.core.scan.scanbase import TomwerScanBase
12
- from tomwer.gui.reconstruction.nabu.helical import HelicalPrepareWeightsDouble
13
- from tomwer.core.process.reconstruction.nabu.helical import (
14
- NabuHelicalPrepareWeightsDouble,
15
- )
16
- from tomwer.core.scan.nxtomoscan import NXtomoScan
17
-
18
- _logger = logging.getLogger(__name__)
19
-
20
-
21
- class NabuHelicalPrepareWeightsDoubleOW(
22
- TomwerWithStackStack,
23
- ewokstaskclass=NabuHelicalPrepareWeightsDouble,
24
- ):
25
- """
26
- widget used to call the `nabu-helical-prepare-weights-double` application on a dedicated thread. It define weights map and double flat field.
27
-
28
- :param parent: the parent widget
29
- """
30
-
31
- # note of this widget should be the one registered on the documentation
32
- name = "helical prerate weights double"
33
- id = "orangecontrib.tomwer.widgets.reconstruction.NabuHelicalPrepareWeightsDoubleOW.NabuHelicalPrepareWeightsDoubleOW"
34
- description = "compute map of weights requested for nabu helical reconstruction"
35
- icon = "icons/nabu_prepare_weights_double.svg"
36
- priority = 199
37
- keywords = [
38
- "tomography",
39
- "nabu",
40
- "reconstruction",
41
- "nabu-helical",
42
- "helical",
43
- "weights",
44
- "prepare",
45
- ]
46
-
47
- want_main_area = True
48
- want_control_area = False
49
- resizing_enabled = True
50
-
51
- _ewoks_default_inputs = Setting(
52
- {
53
- "data": None,
54
- "transition_width_vertical": 50,
55
- "transition_width_horizontal": 50,
56
- "processes_file": "",
57
- "rotation_axis_position": 0,
58
- }
59
- )
60
-
61
- _ewoks_inputs_to_hide_from_orange = (
62
- "progress",
63
- "processes_file",
64
- "transition_width_vertical",
65
- "transition_width_horizontal",
66
- "rotation_axis_position",
67
- )
68
-
69
- sigScanReady = qt.Signal(TomwerScanBase)
70
- "Signal emitted when a scan is ended"
71
-
72
- TIMEOUT = 30
73
-
74
- class Inputs:
75
- data = Input(
76
- name="data",
77
- type=TomwerScanBase,
78
- doc="one scan to be process",
79
- default=True,
80
- multiple=False,
81
- )
82
-
83
- class Outputs:
84
- data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
85
- future_tomo_obj = Output(
86
- name="future_tomo_obj",
87
- type=FutureTomwerObject,
88
- doc="future object (process remotely)",
89
- )
90
-
91
- LOGGER = _logger
92
-
93
- def __init__(self, parent=None):
94
- super().__init__(parent)
95
- self.__scan = None
96
-
97
- # gui definition
98
- _layout = gui.vBox(self.mainArea, self.name).layout()
99
- self.widget = HelicalPrepareWeightsDouble(parent=self)
100
- _layout.addWidget(self.widget)
101
-
102
- ## connect signal / slot
103
- self.widget.sigConfigChanged.connect(self._updateSettings)
104
-
105
- if isinstance(self.task_output_changed_callbacks, set):
106
- self.task_output_changed_callbacks.add(self._notify_state)
107
- elif isinstance(self.task_output_changed_callbacks, list):
108
- self.task_output_changed_callbacks.append(self._notify_state)
109
- else:
110
- raise NotImplementedError
111
-
112
- ## handle settings
113
- self._loadSettings()
114
- self.task_executor_queue.sigComputationStarted.connect(self._newTaskStarted)
115
-
116
- def _updateSettings(self):
117
- config = self.widget.getConfiguration()
118
- for key in ("transition_width", "processes_file"):
119
- self._ewoks_default_inputs[key] = config[key] # pylint: disable=E1137
120
-
121
- @property
122
- def request_input(self):
123
- return self.__request_input
124
-
125
- @request_input.setter
126
- def request_input(self, request):
127
- self.__request_input = request
128
-
129
- def get_task_inputs(self):
130
- assert self.__scan is not None
131
- return {
132
- "data": self.__scan,
133
- "transition_width": self.widget.getConfiguration()["transition_width"],
134
- "processes_file": self.widget.getConfiguration()["processes_file"],
135
- }
136
-
137
- def handleNewSignals(self) -> None:
138
- """Invoked by the workflow signal propagation manager after all
139
- signals handlers have been called.
140
- """
141
- # for now we want to avoid propagation any processing.
142
- # task will be executed only when the user validates the dialog
143
- data = super().get_task_inputs().get("data", None)
144
- if data is not None:
145
- if not isinstance(data, NXtomoScan):
146
- raise TypeError(
147
- f"data is expected to be an instance of NXtomoScan. {type(data)} are not handled"
148
- )
149
- self.add(data.path)
150
-
151
- def _loadSettings(self):
152
- self.widget.setConfiguration(self._ewoks_default_inputs)
153
-
154
- def _newTaskStarted(self):
155
- try:
156
- task_executor = self.sender()
157
- scan = task_executor.current_task.inputs.data
158
- self.notify_on_going(scan)
159
- except Exception:
160
- pass
161
-
162
- def _notify_state(self):
163
- try:
164
- task_executor = self.sender()
165
- task_suceeded = task_executor.succeeded
166
- scan = task_executor.current_task.outputs.data
167
- if task_suceeded:
168
- self.notify_succeed(scan=scan)
169
- else:
170
- self.notify_failed(scan=scan)
171
- except Exception as e:
172
- _logger.error(f"failed to handle task finished callback. Raiseon is {e}")
173
-
174
- @Inputs.data
175
- def process_data(self, scan: Optional[TomwerScanBase]):
176
- if scan is None:
177
- return
178
- else:
179
- self.__scan = scan
180
- self.notify_pending(scan=scan)
181
- self.execute_ewoks_task()
182
-
183
- def sizeHint(self) -> qt.QSize:
184
- return qt.QSize(650, 60)
1
+ # import logging
2
+
3
+ # from orangewidget import gui
4
+ # from orangewidget.settings import Setting
5
+ # from orangewidget.widget import Input, Output
6
+ # from orangecontrib.tomwer.orange.managedprocess import TomwerWithStackStack
7
+ # from silx.gui import qt
8
+ # from typing import Optional
9
+
10
+ # from tomwer.core.futureobject import FutureTomwerObject
11
+ # from tomwer.core.scan.scanbase import TomwerScanBase
12
+ # from tomwer.gui.reconstruction.nabu.helical import HelicalPrepareWeightsDouble
13
+ # from tomwer.core.process.reconstruction.nabu.helical import (
14
+ # NabuHelicalPrepareWeightsDouble,
15
+ # )
16
+ # from tomwer.core.scan.nxtomoscan import NXtomoScan
17
+
18
+ # _logger = logging.getLogger(__name__)
19
+
20
+
21
+ # class NabuHelicalPrepareWeightsDoubleOW(
22
+ # TomwerWithStackStack,
23
+ # ewokstaskclass=NabuHelicalPrepareWeightsDouble,
24
+ # ):
25
+ # """
26
+ # widget used to call the `nabu-helical-prepare-weights-double` application on a dedicated thread. It define weights map and double flat field.
27
+
28
+ # :param parent: the parent widget
29
+ # """
30
+
31
+ # # note of this widget should be the one registered on the documentation
32
+ # name = "helical prerate weights double"
33
+ # id = "orangecontrib.tomwer.widgets.reconstruction.NabuHelicalPrepareWeightsDoubleOW.NabuHelicalPrepareWeightsDoubleOW"
34
+ # description = "compute map of weights requested for nabu helical reconstruction"
35
+ # icon = "icons/nabu_prepare_weights_double.svg"
36
+ # priority = 199
37
+ # keywords = [
38
+ # "tomography",
39
+ # "nabu",
40
+ # "reconstruction",
41
+ # "nabu-helical",
42
+ # "helical",
43
+ # "weights",
44
+ # "prepare",
45
+ # ]
46
+
47
+ # want_main_area = True
48
+ # want_control_area = False
49
+ # resizing_enabled = True
50
+
51
+ # _ewoks_default_inputs = Setting(
52
+ # {
53
+ # "data": None,
54
+ # "transition_width_vertical": 50,
55
+ # "transition_width_horizontal": 50,
56
+ # "processes_file": "",
57
+ # "rotation_axis_position": 0,
58
+ # }
59
+ # )
60
+
61
+ # _ewoks_inputs_to_hide_from_orange = (
62
+ # "progress",
63
+ # "processes_file",
64
+ # "transition_width_vertical",
65
+ # "transition_width_horizontal",
66
+ # "rotation_axis_position",
67
+ # )
68
+
69
+ # sigScanReady = qt.Signal(TomwerScanBase)
70
+ # "Signal emitted when a scan is ended"
71
+
72
+ # TIMEOUT = 30
73
+
74
+ # class Inputs:
75
+ # data = Input(
76
+ # name="data",
77
+ # type=TomwerScanBase,
78
+ # doc="one scan to be process",
79
+ # default=True,
80
+ # multiple=False,
81
+ # )
82
+
83
+ # class Outputs:
84
+ # data = Output(name="data", type=TomwerScanBase, doc="one scan to be process")
85
+ # future_tomo_obj = Output(
86
+ # name="future_tomo_obj",
87
+ # type=FutureTomwerObject,
88
+ # doc="future object (process remotely)",
89
+ # )
90
+
91
+ # LOGGER = _logger
92
+
93
+ # def __init__(self, parent=None):
94
+ # super().__init__(parent)
95
+ # self.__scan = None
96
+
97
+ # # gui definition
98
+ # _layout = gui.vBox(self.mainArea, self.name).layout()
99
+ # self.widget = HelicalPrepareWeightsDouble(parent=self)
100
+ # _layout.addWidget(self.widget)
101
+
102
+ # ## connect signal / slot
103
+ # self.widget.sigConfigChanged.connect(self._updateSettings)
104
+
105
+ # if isinstance(self.task_output_changed_callbacks, set):
106
+ # self.task_output_changed_callbacks.add(self._notify_state)
107
+ # elif isinstance(self.task_output_changed_callbacks, list):
108
+ # self.task_output_changed_callbacks.append(self._notify_state)
109
+ # else:
110
+ # raise NotImplementedError
111
+
112
+ # ## handle settings
113
+ # self._loadSettings()
114
+ # self.task_executor_queue.sigComputationStarted.connect(self._newTaskStarted)
115
+
116
+ # def _updateSettings(self):
117
+ # config = self.widget.getConfiguration()
118
+ # for key in ("transition_width", "processes_file"):
119
+ # self._ewoks_default_inputs[key] = config[key] # pylint: disable=E1137
120
+
121
+ # @property
122
+ # def request_input(self):
123
+ # return self.__request_input
124
+
125
+ # @request_input.setter
126
+ # def request_input(self, request):
127
+ # self.__request_input = request
128
+
129
+ # def get_task_inputs(self):
130
+ # assert self.__scan is not None
131
+ # return {
132
+ # "data": self.__scan,
133
+ # "transition_width": self.widget.getConfiguration()["transition_width"],
134
+ # "processes_file": self.widget.getConfiguration()["processes_file"],
135
+ # }
136
+
137
+ # def handleNewSignals(self) -> None:
138
+ # """Invoked by the workflow signal propagation manager after all
139
+ # signals handlers have been called.
140
+ # """
141
+ # # for now we want to avoid propagation any processing.
142
+ # # task will be executed only when the user validates the dialog
143
+ # data = super().get_task_inputs().get("data", None)
144
+ # if data is not None:
145
+ # if not isinstance(data, NXtomoScan):
146
+ # raise TypeError(
147
+ # f"data is expected to be an instance of NXtomoScan. {type(data)} are not handled"
148
+ # )
149
+ # self.add(data.path)
150
+
151
+ # def _loadSettings(self):
152
+ # self.widget.setConfiguration(self._ewoks_default_inputs)
153
+
154
+ # def _newTaskStarted(self):
155
+ # try:
156
+ # task_executor = self.sender()
157
+ # scan = task_executor.current_task.inputs.data
158
+ # self.notify_on_going(scan)
159
+ # except Exception:
160
+ # pass
161
+
162
+ # def _notify_state(self):
163
+ # try:
164
+ # task_executor = self.sender()
165
+ # task_suceeded = task_executor.succeeded
166
+ # scan = task_executor.current_task.outputs.data
167
+ # if task_suceeded:
168
+ # self.notify_succeed(scan=scan)
169
+ # else:
170
+ # self.notify_failed(scan=scan)
171
+ # except Exception as e:
172
+ # _logger.error(f"failed to handle task finished callback. Raiseon is {e}")
173
+
174
+ # @Inputs.data
175
+ # def process_data(self, scan: Optional[TomwerScanBase]):
176
+ # if scan is None:
177
+ # return
178
+ # else:
179
+ # self.__scan = scan
180
+ # self.notify_pending(scan=scan)
181
+ # self.execute_ewoks_task()
182
+
183
+ # def sizeHint(self) -> qt.QSize:
184
+ # return qt.QSize(650, 60)
@@ -304,7 +304,7 @@ def get_multi_cor_recons_volume_identifiers(
304
304
  class _NabuMode(_Enum):
305
305
  FULL_FIELD = "standard acquisition"
306
306
  HALF_ACQ = "half acquisition"
307
- HELICAL = "helical acquisition"
307
+ # HELICAL = "helical acquisition"
308
308
 
309
309
 
310
310
  class _NabuStages(_Enum):
@@ -1148,7 +1148,6 @@ class _ShiftInformation(qt.QWidget):
1148
1148
  self.setPalette(palette)
1149
1149
 
1150
1150
  def _userEndEditing(self, *args, **kwargs):
1151
- print("user end editing")
1152
1151
  palette = self.palette()
1153
1152
  palette.setColor(
1154
1153
  self.backgroundRole(),
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  import os
3
+ import shutil
3
4
  import tempfile
4
5
  import functools
5
6
 
@@ -399,7 +400,7 @@ class ZStitchingWindow(qt.QMainWindow):
399
400
  # separator
400
401
  toolbar.addSeparator()
401
402
 
402
- # configuraiton level / mode
403
+ # configuration level / mode
403
404
  self.__configurationModesAction = qt.QAction(self)
404
405
  self.__configurationModesAction.setCheckable(False)
405
406
  menu = qt.QMenu(self)
@@ -602,6 +603,8 @@ class ZStitchingWindow(qt.QMainWindow):
602
603
  self._callbackToSetSlurmConfig = callback
603
604
 
604
605
  def close(self):
606
+ # remove folder used for preview
607
+ shutil.rmtree(self._previewFolder, ignore_errors=True)
605
608
  self._widget.close()
606
609
  # requested for the waiting plot update
607
610
  super().close()
@@ -618,7 +621,6 @@ class ZStitchingWindow(qt.QMainWindow):
618
621
 
619
622
  def getPreviewFolder(self):
620
623
  if self._previewFolder is None:
621
- # TODO: improve management of file: must be removed when the widget is closed...
622
624
  self._previewFolder = tempfile.mkdtemp(prefix="tomwer_stitcher_preview")
623
625
  return self._previewFolder
624
626
 
@@ -782,7 +784,6 @@ class ZStitchingWindow(qt.QMainWindow):
782
784
  tomo_obj = existing_tomo_obj.get(tomo_obj_id, None)
783
785
  if tomo_obj is None:
784
786
  continue
785
- # TODO: recuperer le tomo obj a partir de l'identifiant
786
787
  if update_requested[0]:
787
788
  tomo_obj.stitching_metadata.setPxPos(int(new_axis_0_pos), 0)
788
789
  if update_requested[2]:
tomwer/version.py CHANGED
@@ -77,7 +77,7 @@ RELEASE_LEVEL_VALUE = {
77
77
 
78
78
  MAJOR = 1
79
79
  MINOR = 3
80
- MICRO = 25
80
+ MICRO = 27
81
81
  RELEV = "final" # <16
82
82
  SERIAL = 0 # <16
83
83
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tomwer
3
- Version: 1.3.25
3
+ Version: 1.3.27
4
4
  Summary: "tomography workflow tools"
5
5
  Home-page: https://gitlab.esrf.fr/tomotools/tomwer
6
6
  Author: data analysis unit
@@ -1,4 +1,4 @@
1
- tomwer-1.3.25-py3.11-nspkg.pth,sha256=UYCZtLWueceGiAlmXKRJUZ0TWQEubpPoQ1pVnAAsME0,502
1
+ tomwer-1.3.27-py3.11-nspkg.pth,sha256=UYCZtLWueceGiAlmXKRJUZ0TWQEubpPoQ1pVnAAsME0,502
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
@@ -152,7 +152,7 @@ orangecontrib/tomwer/widgets/other/icons/hub.svg,sha256=9EYoBKY-P-cO17nM48OPA9VD
152
152
  orangecontrib/tomwer/widgets/reconstruction/AxisOW.py,sha256=ffbMYzHWALir19bZhpXjYIgMfJjyyaeov9Uxp5tNyGs,22342
153
153
  orangecontrib/tomwer/widgets/reconstruction/CastNabuVolumeOW.py,sha256=Ev-TrwZ-HxmdMfZMsz512vhCOgXpGImVsdNdlPSnQIM,9604
154
154
  orangecontrib/tomwer/widgets/reconstruction/DarkRefAndCopyOW.py,sha256=nToQw3tj9Wm8s3wPsVBeMYh_F6FBtCsAKLsc2Dic4kk,11066
155
- orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py,sha256=aI8VcCK7m518xjjjvE8l3kpTQFEwjWF-hCKua4bBkJM,5967
155
+ orangecontrib/tomwer/widgets/reconstruction/NabuHelicalPrepareWeightsDoubleOW.py,sha256=wEtgqonyhoPZQfARnJt86e5vUktzvY7e0zf15lqmyBY,6275
156
156
  orangecontrib/tomwer/widgets/reconstruction/NabuOW.py,sha256=LzHxCuLrEQIVeGaYmcEO7rwxaT98mbXPdpMc6dCaAHE,12673
157
157
  orangecontrib/tomwer/widgets/reconstruction/NabuVolumeOW.py,sha256=B4iZdYHmbsim4qQD5UaMCg2lcJa3ZAim3_AZQC7bYIk,19195
158
158
  orangecontrib/tomwer/widgets/reconstruction/SAAxisOW.py,sha256=MS9l5_li0uglg-7UtY06sAaMTg01mBvI07LuYU2fbXg,18724
@@ -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=o6TW9xqGYyYLHUGvLiiYEiiDHP6lwWlX63jMLPNh374,8432
223
- tomwer/version.py,sha256=PNDHR044uzeRANXIRpsABtCh9cCq6sO2BIeGHBhBYjs,4387
223
+ tomwer/version.py,sha256=LikiIr1yDr-8aLRvF79YWYIuT7PctqXWLiTbACX6erc,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
@@ -331,7 +331,7 @@ tomwer/core/process/reconstruction/nabu/nabuvolume.py,sha256=z7nyfXhMrp0Q3hAN3NY
331
331
  tomwer/core/process/reconstruction/nabu/plane.py,sha256=Cgzth77M0pFgLDULmvmPj4bqFm5MvIMJ7Ien8mRqLsE,134
332
332
  tomwer/core/process/reconstruction/nabu/settings.py,sha256=JpHKf0smiXeWC8i9Mj7h3g67teJ3Gqycd-Uwg2yzGOQ,2279
333
333
  tomwer/core/process/reconstruction/nabu/target.py,sha256=_Z4gViprjR3Vm4KASqsASStLA9GM1wTyoi3Pg0PUSeg,1481
334
- tomwer/core/process/reconstruction/nabu/utils.py,sha256=mrIrukLAjnC5S2wM9uz5bHdpZwPDKg5BGAjoK_Bu9_Y,18433
334
+ tomwer/core/process/reconstruction/nabu/utils.py,sha256=Yih8BSAPLXC6MZ6yiVX6AHnkjUsYpSOoaUE6suBmBaQ,18435
335
335
  tomwer/core/process/reconstruction/normalization/__init__.py,sha256=TDtATpMVFkEOT93wLXLpW0A_TOeiQDiM7AWAqX4FIB0,119
336
336
  tomwer/core/process/reconstruction/normalization/normalization.py,sha256=G-eAZIct47RvzvHNMbKsG4Dt58vTSKhvH-NnIMzxzOs,13210
337
337
  tomwer/core/process/reconstruction/normalization/params.py,sha256=porWC6G5lQWF-4JB03B56uGmuMxjx3u0ZMums-Bh2p8,4790
@@ -508,7 +508,7 @@ tomwer/gui/reconstruction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
508
508
  tomwer/gui/reconstruction/axis/CompareImages.py,sha256=mrlXPCgq71lzmA_XACqrjdzRTK1iYJQBMrJMaeKZAq8,12870
509
509
  tomwer/gui/reconstruction/axis/__init__.py,sha256=fUKWiRiG2o4Y-9RN-41VZMMM8L9Srl6QCn942VL5szY,94
510
510
  tomwer/gui/reconstruction/axis/axis.py,sha256=ygo7QHTKVGK2_zUZQsfl9uKbbGt_Es5kj-MaBzOe3hc,27607
511
- tomwer/gui/reconstruction/axis/radioaxis.py,sha256=hTweuwS-X32ZlpkHvP5X910zJ8p4fiJMsn_oUVtfvXM,92755
511
+ tomwer/gui/reconstruction/axis/radioaxis.py,sha256=Pn28yfTXEPE6C0-LkDiFJKShKIVMzea0NAMqBCWJiC8,92717
512
512
  tomwer/gui/reconstruction/darkref/__init__.py,sha256=g9LASP8OJjxCPEHXO14hN0OLjLkeUve6etaPm1LIz4c,1373
513
513
  tomwer/gui/reconstruction/darkref/darkrefcopywidget.py,sha256=cfU2EJv_9LfCrKTHwnYwt2Kj4G6lMPbw0lbD-yjyT-Y,12053
514
514
  tomwer/gui/reconstruction/darkref/darkrefwidget.py,sha256=O33udHaezaanZD9L5D525KrB4FD77g_Spr7gAUxGEag,16468
@@ -553,7 +553,7 @@ tomwer/gui/stitching/axisorderedlist.py,sha256=w74JrsazMtcrviSPRov61Yd2JguHgNRj9
553
553
  tomwer/gui/stitching/metadataholder.py,sha256=jeR6_DM529aEmxQLeLM3CB-49GHq6KLY2Nc24kSC-HA,913
554
554
  tomwer/gui/stitching/normalization.py,sha256=EuHyoMcjcOnqO7_gepvcjiQx3DBkSZhsNApOiG-o3yM,4454
555
555
  tomwer/gui/stitching/stitchandbackground.py,sha256=0qavlnjKLCf5VcQn6KPHdQxTUG6s2dpW-pSbuJulEa8,5982
556
- tomwer/gui/stitching/stitching.py,sha256=XKL9dcC538Z_Pb2OisEdAIC7CYGfgRLXToU048tuF6s,57013
556
+ tomwer/gui/stitching/stitching.py,sha256=UdY4kI8SmCSUuoSWGYndLwILIM7mS0TbZCmUi2xxHkA,56966
557
557
  tomwer/gui/stitching/stitching_preview.py,sha256=DYkGXw7Tolef6GkmzfDLCbv-f9v92pHUi4K7T-aTokQ,9669
558
558
  tomwer/gui/stitching/stitching_raw.py,sha256=eRCWpBa6scTe1FeSyvMK-3pepx-G-cg1EWEXQzotvhk,22353
559
559
  tomwer/gui/stitching/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -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.25.dist-info/LICENSE,sha256=yR_hIZ1MfDh9x2_s23uFqBH7m5DgrBl9nJKkE37YChM,1877
780
- tomwer-1.3.25.dist-info/METADATA,sha256=uWH80kDdxy7VDmh-59uJWZNmr64EXWEIFpxymag6Kmk,10723
781
- tomwer-1.3.25.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
782
- tomwer-1.3.25.dist-info/entry_points.txt,sha256=fIcDnCxjgwzfIylLYhUsFyiNZjZMxsfRQBxi4f-cJg8,440
783
- tomwer-1.3.25.dist-info/namespace_packages.txt,sha256=Iut-JTfT11SZHHm77_ZeszD7pZDWXcTweCbvrJpqDyQ,14
784
- tomwer-1.3.25.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
785
- tomwer-1.3.25.dist-info/RECORD,,
779
+ tomwer-1.3.27.dist-info/LICENSE,sha256=yR_hIZ1MfDh9x2_s23uFqBH7m5DgrBl9nJKkE37YChM,1877
780
+ tomwer-1.3.27.dist-info/METADATA,sha256=znDWpLXBa0a584TQ-5A2cbLF0hIIGnVp2uROQG5N29Y,10723
781
+ tomwer-1.3.27.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
782
+ tomwer-1.3.27.dist-info/entry_points.txt,sha256=fIcDnCxjgwzfIylLYhUsFyiNZjZMxsfRQBxi4f-cJg8,440
783
+ tomwer-1.3.27.dist-info/namespace_packages.txt,sha256=Iut-JTfT11SZHHm77_ZeszD7pZDWXcTweCbvrJpqDyQ,14
784
+ tomwer-1.3.27.dist-info/top_level.txt,sha256=Yz5zKh0FPiImtzHYcPuztG1AO8-6KEpUWgoChGbA0Ys,21
785
+ tomwer-1.3.27.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.5.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5