datalab-platform 1.0.1__py3-none-any.whl → 1.0.3__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.
- datalab/__init__.py +1 -1
- datalab/adapters_metadata/common.py +2 -2
- datalab/adapters_plotpy/converters.py +3 -1
- datalab/adapters_plotpy/coordutils.py +157 -0
- datalab/adapters_plotpy/roi/image.py +35 -6
- datalab/adapters_plotpy/roi/signal.py +8 -1
- datalab/config.py +88 -26
- datalab/control/baseproxy.py +70 -0
- datalab/control/proxy.py +33 -0
- datalab/control/remote.py +35 -0
- datalab/data/doc/DataLab_en.pdf +0 -0
- datalab/data/doc/DataLab_fr.pdf +0 -0
- datalab/data/icons/create/linear_chirp.svg +1 -1
- datalab/data/icons/create/logistic.svg +1 -1
- datalab/gui/actionhandler.py +16 -2
- datalab/gui/h5io.py +25 -0
- datalab/gui/macroeditor.py +37 -6
- datalab/gui/main.py +62 -5
- datalab/gui/newobject.py +7 -0
- datalab/gui/objectview.py +18 -3
- datalab/gui/panel/base.py +89 -16
- datalab/gui/panel/macro.py +26 -0
- datalab/gui/plothandler.py +20 -2
- datalab/gui/processor/base.py +72 -26
- datalab/gui/processor/image.py +6 -2
- datalab/gui/processor/signal.py +10 -0
- datalab/gui/roieditor.py +2 -2
- datalab/locale/fr/LC_MESSAGES/datalab.mo +0 -0
- datalab/locale/fr/LC_MESSAGES/datalab.po +3288 -0
- datalab/objectmodel.py +1 -1
- datalab/tests/features/common/auto_analysis_recompute_unit_test.py +81 -0
- datalab/tests/features/common/coordutils_unit_test.py +212 -0
- datalab/tests/features/common/result_deletion_unit_test.py +121 -1
- datalab/tests/features/common/roi_plotitem_unit_test.py +4 -2
- datalab/tests/features/common/update_tree_robustness_test.py +65 -0
- datalab/tests/features/control/remoteclient_unit.py +10 -0
- datalab/tests/features/hdf5/h5workspace_unit_test.py +133 -0
- datalab/tests/features/image/roigrid_unit_test.py +75 -0
- datalab/tests/features/macro/macroeditor_unit_test.py +104 -3
- datalab/tests/features/signal/custom_signal_bug_unit_test.py +96 -0
- datalab/widgets/imagebackground.py +13 -4
- datalab/widgets/instconfviewer.py +2 -2
- datalab/widgets/signalcursor.py +7 -2
- datalab/widgets/signaldeltax.py +4 -1
- {datalab_platform-1.0.1.dist-info → datalab_platform-1.0.3.dist-info}/METADATA +3 -3
- {datalab_platform-1.0.1.dist-info → datalab_platform-1.0.3.dist-info}/RECORD +50 -43
- {datalab_platform-1.0.1.dist-info → datalab_platform-1.0.3.dist-info}/WHEEL +0 -0
- {datalab_platform-1.0.1.dist-info → datalab_platform-1.0.3.dist-info}/entry_points.txt +0 -0
- {datalab_platform-1.0.1.dist-info → datalab_platform-1.0.3.dist-info}/licenses/LICENSE +0 -0
- {datalab_platform-1.0.1.dist-info → datalab_platform-1.0.3.dist-info}/top_level.txt +0 -0
|
@@ -55,6 +55,81 @@ def test_roi_grid_geometry_headless() -> None:
|
|
|
55
55
|
assert dy == img.height / 2 * 0.5
|
|
56
56
|
|
|
57
57
|
|
|
58
|
+
def test_roi_grid_custom_step() -> None:
|
|
59
|
+
"""Test ROI grid with custom xstep/ystep parameters.
|
|
60
|
+
|
|
61
|
+
This test verifies the bug fix for Issue #XXX where grid ROI extraction
|
|
62
|
+
was not working correctly for images with non-uniformly distributed features
|
|
63
|
+
(e.g., laser spot arrays with gaps between spots).
|
|
64
|
+
|
|
65
|
+
The bug was that xstep and ystep parameters were missing, so users couldn't
|
|
66
|
+
adjust the spacing between ROIs when spots don't fill the entire image.
|
|
67
|
+
"""
|
|
68
|
+
img = create_grid_of_gaussian_images()
|
|
69
|
+
|
|
70
|
+
# Test Case 1: Custom step to simulate tighter spacing (e.g., laser spots)
|
|
71
|
+
gp = ROIGridParam()
|
|
72
|
+
gp.nx, gp.ny = 3, 3
|
|
73
|
+
gp.xsize = gp.ysize = 20 # Small ROI size (20% of cell)
|
|
74
|
+
gp.xtranslation = gp.ytranslation = 50 # Centered
|
|
75
|
+
gp.xstep = gp.ystep = 75 # Tighter spacing (75% instead of 100%)
|
|
76
|
+
gp.xdirection = gp.ydirection = Direction.INCREASING
|
|
77
|
+
|
|
78
|
+
with qt_app_context():
|
|
79
|
+
dlg = ImageGridROIEditor(parent=None, obj=img, gridparam=gp)
|
|
80
|
+
dlg.update_obj(update_item=False)
|
|
81
|
+
roi = dlg.get_roi()
|
|
82
|
+
assert roi is not None
|
|
83
|
+
# 9 ROIs for 3x3 grid
|
|
84
|
+
assert len(list(roi)) == 9
|
|
85
|
+
|
|
86
|
+
# Verify spacing is correctly applied
|
|
87
|
+
r11 = next(r for r in roi if r.title == "ROI(1,1)")
|
|
88
|
+
r12 = next(r for r in roi if r.title == "ROI(1,2)")
|
|
89
|
+
x0_r11, _, _, _ = r11.get_physical_coords(img)
|
|
90
|
+
x0_r12, _, _, _ = r12.get_physical_coords(img)
|
|
91
|
+
|
|
92
|
+
# Expected spacing: (width / nx) * (xstep / 100)
|
|
93
|
+
expected_spacing = (img.width / gp.nx) * (gp.xstep / 100.0)
|
|
94
|
+
actual_spacing = x0_r12 - x0_r11
|
|
95
|
+
|
|
96
|
+
# Allow 1% tolerance for numerical precision
|
|
97
|
+
assert abs(actual_spacing - expected_spacing) / expected_spacing < 0.01
|
|
98
|
+
|
|
99
|
+
# Test Case 2: Different X and Y steps
|
|
100
|
+
gp2 = ROIGridParam()
|
|
101
|
+
gp2.nx, gp2.ny = 2, 2
|
|
102
|
+
gp2.xsize = gp2.ysize = 30
|
|
103
|
+
gp2.xtranslation = gp2.ytranslation = 50
|
|
104
|
+
gp2.xstep = 80 # Tighter X spacing
|
|
105
|
+
gp2.ystep = 120 # Wider Y spacing
|
|
106
|
+
gp2.xdirection = gp2.ydirection = Direction.INCREASING
|
|
107
|
+
|
|
108
|
+
with qt_app_context():
|
|
109
|
+
dlg2 = ImageGridROIEditor(parent=None, obj=img, gridparam=gp2)
|
|
110
|
+
dlg2.update_obj(update_item=False)
|
|
111
|
+
roi2 = dlg2.get_roi()
|
|
112
|
+
assert roi2 is not None
|
|
113
|
+
assert len(list(roi2)) == 4
|
|
114
|
+
|
|
115
|
+
# Verify X spacing (80%)
|
|
116
|
+
r11 = next(r for r in roi2 if r.title == "ROI(1,1)")
|
|
117
|
+
r12 = next(r for r in roi2 if r.title == "ROI(1,2)")
|
|
118
|
+
x0_r11, y0_r11, _, _ = r11.get_physical_coords(img)
|
|
119
|
+
x0_r12, _, _, _ = r12.get_physical_coords(img)
|
|
120
|
+
expected_x_spacing = (img.width / gp2.nx) * 0.8
|
|
121
|
+
actual_x_spacing = x0_r12 - x0_r11
|
|
122
|
+
assert abs(actual_x_spacing - expected_x_spacing) / expected_x_spacing < 0.01
|
|
123
|
+
|
|
124
|
+
# Verify Y spacing (120%)
|
|
125
|
+
r21 = next(r for r in roi2 if r.title == "ROI(2,1)")
|
|
126
|
+
_, y0_r21, _, _ = r21.get_physical_coords(img)
|
|
127
|
+
expected_y_spacing = (img.height / gp2.ny) * 1.2
|
|
128
|
+
actual_y_spacing = y0_r21 - y0_r11
|
|
129
|
+
assert abs(actual_y_spacing - expected_y_spacing) / expected_y_spacing < 0.01
|
|
130
|
+
|
|
131
|
+
|
|
58
132
|
if __name__ == "__main__":
|
|
59
133
|
test_roi_grid_geometry_headless()
|
|
134
|
+
test_roi_grid_custom_step()
|
|
60
135
|
test_roi_grid(screenshots=True)
|
|
@@ -18,13 +18,15 @@ All other methods should be tested here.
|
|
|
18
18
|
# guitest: show
|
|
19
19
|
|
|
20
20
|
import os.path as osp
|
|
21
|
+
import time
|
|
21
22
|
|
|
22
23
|
from guidata.qthelpers import qt_app_context
|
|
24
|
+
from qtpy import QtWidgets as QW
|
|
23
25
|
|
|
24
26
|
from datalab.env import execenv
|
|
25
27
|
from datalab.gui.macroeditor import Macro
|
|
26
|
-
from datalab.gui.panel import
|
|
27
|
-
from datalab.tests import helpers
|
|
28
|
+
from datalab.gui.panel.macro import MacroPanel
|
|
29
|
+
from datalab.tests import datalab_test_app_context, helpers
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
def get_macro_example_path() -> str:
|
|
@@ -54,7 +56,7 @@ print("All done! :)")
|
|
|
54
56
|
def test_macro_editor():
|
|
55
57
|
"""Test dep viewer window"""
|
|
56
58
|
with qt_app_context(exec_loop=True):
|
|
57
|
-
widget =
|
|
59
|
+
widget = MacroPanel(None)
|
|
58
60
|
widget.resize(800, 600)
|
|
59
61
|
widget.show()
|
|
60
62
|
|
|
@@ -98,5 +100,104 @@ def test_macro_editor():
|
|
|
98
100
|
assert widget.get_macro_titles()[0] == osp.basename(macro_path)
|
|
99
101
|
|
|
100
102
|
|
|
103
|
+
def test_macro_unicode_encoding():
|
|
104
|
+
"""Test that macros can print Unicode characters without encoding errors.
|
|
105
|
+
|
|
106
|
+
This test verifies the fix for the UnicodeEncodeError that occurred on Windows
|
|
107
|
+
systems with locales like cp1252 when macros printed Unicode characters.
|
|
108
|
+
|
|
109
|
+
The test creates and runs a macro that prints various Unicode characters,
|
|
110
|
+
simulating the scenario where RemoteProxy connection messages (which contain
|
|
111
|
+
arrows →) would cause encoding errors on Windows with cp1252 locale.
|
|
112
|
+
|
|
113
|
+
Without the UTF-8 encoding fix in Macro.run(), this test would fail with:
|
|
114
|
+
UnicodeEncodeError: 'charmap' codec can't encode character '\u2192'
|
|
115
|
+
"""
|
|
116
|
+
with helpers.WorkdirRestoringTempDir():
|
|
117
|
+
with datalab_test_app_context(console=False) as win:
|
|
118
|
+
win.set_current_panel("macro")
|
|
119
|
+
|
|
120
|
+
# Create a macro that prints various Unicode characters
|
|
121
|
+
macro = win.macropanel.add_macro()
|
|
122
|
+
macro.title = "Unicode Test Macro"
|
|
123
|
+
|
|
124
|
+
# This test verifies that Unicode characters can be printed successfully.
|
|
125
|
+
# The macro prints Unicode characters without any encoding manipulation.
|
|
126
|
+
# With the UTF-8 fix in Macro.run(), these print statements work correctly.
|
|
127
|
+
# Without the fix, on systems with cp1252 locale, these would fail.
|
|
128
|
+
#
|
|
129
|
+
# Note: We cannot reliably simulate cp1252 locale in the test because:
|
|
130
|
+
# 1. Modern Python often defaults to UTF-8
|
|
131
|
+
# 2. If we manually reconfigure to cp1252 in the macro, it overrides
|
|
132
|
+
# any fix done before the macro code runs
|
|
133
|
+
# 3. The PYTHONIOENCODING env var might be set system-wide
|
|
134
|
+
#
|
|
135
|
+
# This test serves as a regression test - it will catch if the fix
|
|
136
|
+
# is removed, but only on systems that actually default to cp1252.
|
|
137
|
+
unicode_code = """
|
|
138
|
+
import sys
|
|
139
|
+
|
|
140
|
+
# Print encoding info for debugging
|
|
141
|
+
print(f"stdout encoding: {sys.stdout.encoding}")
|
|
142
|
+
print(f"stderr encoding: {sys.stderr.encoding}")
|
|
143
|
+
|
|
144
|
+
# Print various Unicode characters that are not in cp1252
|
|
145
|
+
# On systems with cp1252 default locale, without the UTF-8 fix,
|
|
146
|
+
# these would cause UnicodeEncodeError
|
|
147
|
+
print("Testing Unicode output:")
|
|
148
|
+
print(" → Arrow character (U+2192)")
|
|
149
|
+
print(" ✓ Check mark (U+2713)")
|
|
150
|
+
print(" • Bullet point (U+2022)")
|
|
151
|
+
print(" … Ellipsis (U+2026)")
|
|
152
|
+
print(" Emoji: 🎉 🚀 ⚡")
|
|
153
|
+
|
|
154
|
+
# Simulate RemoteProxy connection message format
|
|
155
|
+
print("Setting XML-RPC port... [input:None] →[execenv.xmlrpcport:None] OK")
|
|
156
|
+
|
|
157
|
+
print("All Unicode tests passed! ✓")
|
|
158
|
+
"""
|
|
159
|
+
macro.set_code(unicode_code)
|
|
160
|
+
|
|
161
|
+
# Run the macro and wait for completion
|
|
162
|
+
execenv.print("Running Unicode test macro...")
|
|
163
|
+
win.macropanel.run_macro()
|
|
164
|
+
|
|
165
|
+
# Wait for macro to complete (with timeout)
|
|
166
|
+
# We need to process Qt events for the QProcess signals to be delivered
|
|
167
|
+
max_wait = 10 # seconds
|
|
168
|
+
elapsed = 0
|
|
169
|
+
while macro.is_running() and elapsed < max_wait:
|
|
170
|
+
QW.QApplication.processEvents()
|
|
171
|
+
time.sleep(0.1)
|
|
172
|
+
elapsed += 0.1
|
|
173
|
+
|
|
174
|
+
# Verify the macro completed (not still running)
|
|
175
|
+
# If there was an encoding error, the process would have crashed
|
|
176
|
+
assert not macro.is_running(), (
|
|
177
|
+
"Macro did not complete within timeout - "
|
|
178
|
+
"likely failed with encoding error"
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# Check the exit code - should be 0 for success
|
|
182
|
+
# With the UTF-8 fix, the macro completes successfully (exit code 0)
|
|
183
|
+
# Without the fix, it crashes with UnicodeEncodeError (exit code 1)
|
|
184
|
+
exit_code = macro.get_exit_code()
|
|
185
|
+
assert exit_code == 0, (
|
|
186
|
+
f"Macro exited with error code {exit_code} - "
|
|
187
|
+
f"likely UnicodeEncodeError when trying to print Unicode characters"
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
execenv.print("✓ Unicode test macro completed successfully!")
|
|
191
|
+
execenv.print(
|
|
192
|
+
"Note: This test verifies Unicode support works. On systems with "
|
|
193
|
+
"UTF-8 as default encoding, it may pass even without the fix. "
|
|
194
|
+
"The fix is critical for Windows systems with cp1252 locale."
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
# Clean up
|
|
198
|
+
win.macropanel.remove_all_objects()
|
|
199
|
+
|
|
200
|
+
|
|
101
201
|
if __name__ == "__main__":
|
|
102
202
|
test_macro_editor()
|
|
203
|
+
test_macro_unicode_encoding()
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Test for Custom Signal creation bug fix
|
|
5
|
+
========================================
|
|
6
|
+
|
|
7
|
+
This test verifies that creating a Custom signal doesn't crash with AttributeError
|
|
8
|
+
when xyarray is None.
|
|
9
|
+
|
|
10
|
+
Bug report: "Créer un signal Custom déclenche immédiatement l'erreur
|
|
11
|
+
AttributeError: 'NoneType' object has no attribute 'T'."
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import pytest
|
|
15
|
+
from guidata.qthelpers import qt_app_context
|
|
16
|
+
|
|
17
|
+
from datalab.gui.newobject import CustomSignalParam, create_signal_gui
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_custom_signal_param_initialization():
|
|
21
|
+
"""Test that CustomSignalParam initializes properly"""
|
|
22
|
+
with qt_app_context():
|
|
23
|
+
param = CustomSignalParam()
|
|
24
|
+
# Initially, xyarray should be None
|
|
25
|
+
assert param.xyarray is None
|
|
26
|
+
# But other defaults should exist
|
|
27
|
+
assert param.size == 10
|
|
28
|
+
assert param.xmin == 0.0
|
|
29
|
+
assert param.xmax == 1.0
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_custom_signal_param_setup_array():
|
|
33
|
+
"""Test that setup_array creates the xyarray properly"""
|
|
34
|
+
with qt_app_context():
|
|
35
|
+
param = CustomSignalParam()
|
|
36
|
+
assert param.xyarray is None
|
|
37
|
+
|
|
38
|
+
# Call setup_array to initialize
|
|
39
|
+
param.setup_array(size=10, xmin=0.0, xmax=1.0)
|
|
40
|
+
|
|
41
|
+
# Now xyarray should exist and be transposable
|
|
42
|
+
assert param.xyarray is not None
|
|
43
|
+
assert param.xyarray.shape == (10, 2)
|
|
44
|
+
|
|
45
|
+
# Should be able to transpose without error
|
|
46
|
+
transposed = param.xyarray.T
|
|
47
|
+
assert transposed.shape == (2, 10)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_custom_signal_param_generate_1d_data():
|
|
51
|
+
"""Test that generate_1d_data works even with None xyarray"""
|
|
52
|
+
with qt_app_context():
|
|
53
|
+
param = CustomSignalParam()
|
|
54
|
+
assert param.xyarray is None
|
|
55
|
+
|
|
56
|
+
# generate_1d_data should call setup_array internally
|
|
57
|
+
x, y = param.generate_1d_data()
|
|
58
|
+
|
|
59
|
+
# Should succeed without AttributeError
|
|
60
|
+
assert x is not None
|
|
61
|
+
assert y is not None
|
|
62
|
+
assert len(x) == param.size
|
|
63
|
+
assert len(y) == param.size
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_custom_signal_creation_forces_edit_mode():
|
|
67
|
+
"""Test that creating a custom signal with edit=False forces edit=True
|
|
68
|
+
|
|
69
|
+
This test verifies the bug fix for:
|
|
70
|
+
"Créer un signal Custom déclenche immédiatement l'erreur
|
|
71
|
+
AttributeError: 'NoneType' object has no attribute 'T'."
|
|
72
|
+
|
|
73
|
+
The bug occurred when edit=False was passed (the default), which caused
|
|
74
|
+
setup_array to not be called, leaving xyarray as None, which then crashed
|
|
75
|
+
when trying to access xyarray.T.
|
|
76
|
+
|
|
77
|
+
The fix forces edit=True for CustomSignalParam to ensure the user is always
|
|
78
|
+
prompted to set up the array properly.
|
|
79
|
+
"""
|
|
80
|
+
# This test can't actually test the dialog interaction, but we can verify
|
|
81
|
+
# that the code doesn't crash immediately with AttributeError due to None xyarray
|
|
82
|
+
# The test framework will handle the unattended mode appropriately
|
|
83
|
+
with qt_app_context():
|
|
84
|
+
# In unattended mode, the dialogs will be auto-canceled, so this should
|
|
85
|
+
# return None rather than crashing
|
|
86
|
+
param = CustomSignalParam()
|
|
87
|
+
# In actual usage with GUI, this would show dialogs
|
|
88
|
+
# In unattended test mode, dialogs are auto-canceled
|
|
89
|
+
# The important thing is it doesn't crash with AttributeError
|
|
90
|
+
_signal = create_signal_gui(param, edit=False, parent=None)
|
|
91
|
+
# In unattended mode, this will be None because dialogs are canceled
|
|
92
|
+
# But it shouldn't have crashed with AttributeError
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
if __name__ == "__main__":
|
|
96
|
+
pytest.main([__file__, "-v"])
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
-
from typing import TYPE_CHECKING
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
10
|
|
|
11
11
|
import numpy as np
|
|
12
12
|
from guidata.configtools import get_icon
|
|
13
13
|
from plotpy.builder import make
|
|
14
|
-
from plotpy.plot import PlotDialog
|
|
14
|
+
from plotpy.plot import PlotDialog, PlotOptions
|
|
15
15
|
|
|
16
16
|
from datalab.adapters_plotpy import create_adapter_from_object
|
|
17
17
|
from datalab.config import _
|
|
@@ -29,16 +29,25 @@ class ImageBackgroundDialog(PlotDialog):
|
|
|
29
29
|
Args:
|
|
30
30
|
image: image object
|
|
31
31
|
parent: parent widget. Defaults to None.
|
|
32
|
+
options: plot options. Defaults to None.
|
|
32
33
|
"""
|
|
33
34
|
|
|
34
|
-
def __init__(
|
|
35
|
+
def __init__(
|
|
36
|
+
self,
|
|
37
|
+
image: ImageObj,
|
|
38
|
+
parent: QWidget | None = None,
|
|
39
|
+
options: PlotOptions | dict[str, Any] | None = None,
|
|
40
|
+
) -> None:
|
|
35
41
|
self.__background: float | None = None
|
|
36
42
|
self.__rect_coords: tuple[float, float, float, float] | None = None
|
|
37
43
|
self.imageitem: MaskedXYImageItem | None = None
|
|
38
44
|
self.rectarea: RectangleShape | None = None
|
|
39
45
|
self.comput2d: RangeComputation2d | None = None
|
|
40
46
|
super().__init__(
|
|
41
|
-
title=_("Image background selection"),
|
|
47
|
+
title=_("Image background selection"),
|
|
48
|
+
edit=True,
|
|
49
|
+
parent=parent,
|
|
50
|
+
options=options,
|
|
42
51
|
)
|
|
43
52
|
self.setObjectName("backgroundselection")
|
|
44
53
|
if parent is None:
|
|
@@ -89,8 +89,8 @@ def get_manifest_package_info(manifest_path: Path) -> str:
|
|
|
89
89
|
result_lines.append(f"{name:{name_width}} {version:{version_width}}")
|
|
90
90
|
|
|
91
91
|
return os.linesep.join(result_lines)
|
|
92
|
-
except Exception as
|
|
93
|
-
return f"Error reading manifest file: {
|
|
92
|
+
except Exception as exc: # pylint: disable=broad-except
|
|
93
|
+
return f"Error reading manifest file: {exc}"
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
def get_install_info() -> str:
|
datalab/widgets/signalcursor.py
CHANGED
|
@@ -12,6 +12,7 @@ import numpy as np
|
|
|
12
12
|
from guidata.configtools import get_icon
|
|
13
13
|
from plotpy.builder import make
|
|
14
14
|
from plotpy.plot import PlotDialog
|
|
15
|
+
from qtpy import QtCore as QC
|
|
15
16
|
from qtpy import QtGui as QG
|
|
16
17
|
from qtpy import QtWidgets as QW
|
|
17
18
|
from sigima.tools.signal.features import find_x_values_at_y
|
|
@@ -76,10 +77,14 @@ class SignalCursorDialog(PlotDialog):
|
|
|
76
77
|
ylabel = QW.QLabel("Y=")
|
|
77
78
|
self.xlineedit = QW.QLineEdit()
|
|
78
79
|
self.xlineedit.editingFinished.connect(self.xlineedit_editing_finished)
|
|
79
|
-
|
|
80
|
+
x_validator = QG.QDoubleValidator()
|
|
81
|
+
x_validator.setLocale(QC.QLocale("C"))
|
|
82
|
+
self.xlineedit.setValidator(x_validator)
|
|
80
83
|
self.ylineedit = QW.QLineEdit()
|
|
81
84
|
self.ylineedit.editingFinished.connect(self.ylineedit_editing_finished)
|
|
82
|
-
|
|
85
|
+
y_validator = QG.QDoubleValidator()
|
|
86
|
+
y_validator.setLocale(QC.QLocale("C"))
|
|
87
|
+
self.ylineedit.setValidator(y_validator)
|
|
83
88
|
self.xlineedit.setReadOnly(self.__cursor_orientation == "horizontal")
|
|
84
89
|
self.xlineedit.setDisabled(self.__cursor_orientation == "horizontal")
|
|
85
90
|
self.ylineedit.setReadOnly(self.__cursor_orientation == "vertical")
|
datalab/widgets/signaldeltax.py
CHANGED
|
@@ -15,6 +15,7 @@ import numpy as np
|
|
|
15
15
|
from guidata.configtools import get_icon
|
|
16
16
|
from plotpy.builder import make
|
|
17
17
|
from plotpy.plot import PlotDialog
|
|
18
|
+
from qtpy import QtCore as QC
|
|
18
19
|
from qtpy import QtGui as QG
|
|
19
20
|
from qtpy import QtWidgets as QW
|
|
20
21
|
from sigima.tools.signal.pulse import full_width_at_y
|
|
@@ -68,7 +69,9 @@ class SignalDeltaXDialog(PlotDialog):
|
|
|
68
69
|
self.deltaxlineedit.setDisabled(True)
|
|
69
70
|
self.ylineedit = QW.QLineEdit()
|
|
70
71
|
self.ylineedit.editingFinished.connect(self.ylineedit_editing_finished)
|
|
71
|
-
|
|
72
|
+
y_validator = QG.QDoubleValidator()
|
|
73
|
+
y_validator.setLocale(QC.QLocale("C"))
|
|
74
|
+
self.ylineedit.setValidator(y_validator)
|
|
72
75
|
xygroup = QW.QGroupBox(_("Cursor position"))
|
|
73
76
|
xylayout = QW.QHBoxLayout()
|
|
74
77
|
xylayout.addWidget(xlabel)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datalab-platform
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: DataLab is a data processing and analysis software for scientific and industrial applications
|
|
5
5
|
Author-email: Pierre Raybaut <p.raybaut@codra.fr>
|
|
6
6
|
Maintainer-email: DataLab Platform Developers <p.raybaut@codra.fr>
|
|
@@ -32,9 +32,9 @@ Classifier: Topic :: Software Development :: Widget Sets
|
|
|
32
32
|
Requires-Python: <4,>=3.9
|
|
33
33
|
Description-Content-Type: text/markdown
|
|
34
34
|
License-File: LICENSE
|
|
35
|
-
Requires-Dist: guidata>=3.13.
|
|
35
|
+
Requires-Dist: guidata>=3.13.4
|
|
36
36
|
Requires-Dist: PlotPy>=2.8.2
|
|
37
|
-
Requires-Dist: Sigima>=1.0.
|
|
37
|
+
Requires-Dist: Sigima>=1.0.4
|
|
38
38
|
Requires-Dist: NumPy>=1.22
|
|
39
39
|
Requires-Dist: SciPy>=1.10.1
|
|
40
40
|
Requires-Dist: scikit-image>=0.19.2
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
datalab/__init__.py,sha256=
|
|
1
|
+
datalab/__init__.py,sha256=tcHTf_MJ4QWBZIe0RUC5qsCe0qCYvZh20A2khoVwO3I,1245
|
|
2
2
|
datalab/app.py,sha256=DEr6IQ211YfltLD8xdHngb5-Zv8Tng9G2t2snW-AowQ,3004
|
|
3
|
-
datalab/config.py,sha256=
|
|
3
|
+
datalab/config.py,sha256=TFh_rItt2S285gdA-_A0_J1vixbxw0AJqHupn8sZKN0,37435
|
|
4
4
|
datalab/env.py,sha256=gWfLH7wWdj7b7nTocvSi1ptEF1KkGZry5Sw9g7ND2N8,18769
|
|
5
|
-
datalab/objectmodel.py,sha256=
|
|
5
|
+
datalab/objectmodel.py,sha256=pwxiHNOqEWJjTiJmo5f3uqtPEBjogRzpLJrdl4_y8q8,22417
|
|
6
6
|
datalab/plugins.py,sha256=hTkbeDDD2oGovKLWCcuuleEkTLZWI3dnyhqPQh7saZM,11950
|
|
7
7
|
datalab/adapters_metadata/__init__.py,sha256=XyKDWfkko1KRgXcdRP2BZhdc8Y8ghG9hhf3mPXJ58Y0,815
|
|
8
8
|
datalab/adapters_metadata/base_adapter.py,sha256=Y4MGQuw5HMFDUmGWuBf2ctgjrGCp7ttRawpmnCmAzbI,9999
|
|
9
|
-
datalab/adapters_metadata/common.py,sha256=
|
|
9
|
+
datalab/adapters_metadata/common.py,sha256=4qmvqndfUeFbyzWa3jklhRkOf6XTwPA-x3wE10aVbjY,15375
|
|
10
10
|
datalab/adapters_metadata/geometry_adapter.py,sha256=M1zHd-gJ27wSFWiq40Ap_5sMqA0yERNbA48d4SX-21s,2930
|
|
11
11
|
datalab/adapters_metadata/table_adapter.py,sha256=DZ3kD3A-wiiXWzRQ2P-ld3v-Fv5EwXkgkJFA4wYfVvs,2488
|
|
12
12
|
datalab/adapters_plotpy/__init__.py,sha256=YKQa4-mB6TQPN8QVc4sknnmWb6muRWpnPrmbsx9W4Jw,1471
|
|
13
13
|
datalab/adapters_plotpy/annotations.py,sha256=zDMFw2OYzDUDq-yKDkDuWxHTxrDHc3mNBJEyCc7gCUc,3985
|
|
14
14
|
datalab/adapters_plotpy/base.py,sha256=xk4Zu0SamshK8Fb9htn-w2y4BPLLkiZOmJ3DXpQoI3Y,2906
|
|
15
|
-
datalab/adapters_plotpy/converters.py,sha256=
|
|
15
|
+
datalab/adapters_plotpy/converters.py,sha256=dRR-eno4iZjh56j9cuU1TVjISYC0FlqdgG67OtvOb9M,2682
|
|
16
|
+
datalab/adapters_plotpy/coordutils.py,sha256=noHhA8PI0fbqiRU2HoZcnSTSA_TXMsmK9KjVABKdSxA,5887
|
|
16
17
|
datalab/adapters_plotpy/factories.py,sha256=5_cb2mGNJPR2bS97J36XvNkuf9rwu4xHquP5T_hOnHg,2986
|
|
17
18
|
datalab/adapters_plotpy/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
19
|
datalab/adapters_plotpy/objects/base.py,sha256=MSWv2I057_2qtJhY02GslJ23TRdK_2GqWgD0Ap1eTjg,6914
|
|
@@ -22,14 +23,14 @@ datalab/adapters_plotpy/objects/signal.py,sha256=Bp8ahogAPzq_ndY2wK5t4MflhMoYKTA
|
|
|
22
23
|
datalab/adapters_plotpy/roi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
24
|
datalab/adapters_plotpy/roi/base.py,sha256=FbqYb9cf1FASWri901Jkf162GyUYn0FQp97tzTmGEo8,3992
|
|
24
25
|
datalab/adapters_plotpy/roi/factory.py,sha256=vH8ko4hWoxySSwQjpblOgU7PSGXZ0aa2_cl33nkKiqc,2908
|
|
25
|
-
datalab/adapters_plotpy/roi/image.py,sha256=
|
|
26
|
-
datalab/adapters_plotpy/roi/signal.py,sha256=
|
|
26
|
+
datalab/adapters_plotpy/roi/image.py,sha256=nhW60NPQJwUvx-cwJylzJp1kNg_SEY9NyjP-i5niIPs,8285
|
|
27
|
+
datalab/adapters_plotpy/roi/signal.py,sha256=ZPQehXVAw9rIEUmwUsAmM-6t9yU_2VHdNQTbLJUSJXA,2439
|
|
27
28
|
datalab/control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
datalab/control/baseproxy.py,sha256
|
|
29
|
-
datalab/control/proxy.py,sha256=
|
|
30
|
-
datalab/control/remote.py,sha256=
|
|
31
|
-
datalab/data/doc/DataLab_en.pdf,sha256=
|
|
32
|
-
datalab/data/doc/DataLab_fr.pdf,sha256=
|
|
29
|
+
datalab/control/baseproxy.py,sha256=-T_R2JgC_gXx1HAfd28nWqDWG439mF9OhY4jVPO8ctY,27545
|
|
30
|
+
datalab/control/proxy.py,sha256=Aj7xOr04QVNXtYs4aHCrhMl-BOKNB21nDEy3BotHeVU,12257
|
|
31
|
+
datalab/control/remote.py,sha256=DcklNCDILT1uQlV0ydaaMvQv2Zn3E66jODXoSSHTixE,36718
|
|
32
|
+
datalab/data/doc/DataLab_en.pdf,sha256=sgDH0_iSAJ19WvRpsjKDV6VcZxztpBwVcnhHoyueNHI,17242202
|
|
33
|
+
datalab/data/doc/DataLab_fr.pdf,sha256=LbSglp7beQhcqgFv-2wtK8RKQYYsl_eQ30k8d9_baEc,17287221
|
|
33
34
|
datalab/data/icons/analysis.svg,sha256=jDZAqd1UpSfyiIPXnk3AyUcxqYByYvcKlJ61PI3g7bE,6592
|
|
34
35
|
datalab/data/icons/apply.svg,sha256=VQQxY3a2UA7Chu5gJ7XQUwiRHdqfkOmmRNhv34PA0SY,471
|
|
35
36
|
datalab/data/icons/check_all.svg,sha256=pe7FtRiD64KvzBPh3JJpQN9tDmdwtbTHy3YHx90KGq8,4254
|
|
@@ -106,8 +107,8 @@ datalab/data/icons/create/cosine.svg,sha256=qH7yVUMYh5VUvt8tpN8oGJssIr7hrkYHw9Y5
|
|
|
106
107
|
datalab/data/icons/create/exponential.svg,sha256=KyBCK9DHakA8a7yKirWm0wumrI7SNLHQ9RhVn3r2AjI,1734
|
|
107
108
|
datalab/data/icons/create/gaussian.svg,sha256=qNtRIbYoH2zsipGceLm87hCCcsL72X3bTmZVKwW5jd8,6584
|
|
108
109
|
datalab/data/icons/create/grating.svg,sha256=NVUKaliu_fmoAm-Zy3ED5-kJMZm7DgKHFDWkFoP8voU,2632
|
|
109
|
-
datalab/data/icons/create/linear_chirp.svg,sha256=
|
|
110
|
-
datalab/data/icons/create/logistic.svg,sha256=
|
|
110
|
+
datalab/data/icons/create/linear_chirp.svg,sha256=YoiyF75Byoeum9djc2KZVuDLmUfTEbxRae2Fo31saZU,836
|
|
111
|
+
datalab/data/icons/create/logistic.svg,sha256=HiGJ-B7GClZSgnwP8SNvSa5mlwszs12SZLOJTB-HoJc,766
|
|
111
112
|
datalab/data/icons/create/lorentzian.svg,sha256=GCH5wniyiMq-rFz-WQfI8ys53VICNEPEV-3hcS1Mwhc,6417
|
|
112
113
|
datalab/data/icons/create/planck.svg,sha256=DuEa8qogqFIJD6DEe34rwIcOeKmfUYvWZWGdzfaJV7Y,6412
|
|
113
114
|
datalab/data/icons/create/polynomial.svg,sha256=7IbiblyA-3oJZR5nuiLAtVBEHTiK8gTZlp31UTvnR9M,718
|
|
@@ -297,34 +298,36 @@ datalab/data/tutorials/laser_beam/TEM00_z_70.jpg,sha256=monLxXE8zwzHmv8i2eVwToEr
|
|
|
297
298
|
datalab/data/tutorials/laser_beam/TEM00_z_75.jpg,sha256=4sQ17VWtte7E6RbMWiUcluGCXjWYLmnfCW6I3b1lWHg,81376
|
|
298
299
|
datalab/data/tutorials/laser_beam/TEM00_z_80.jpg,sha256=5KMSrqB02sAyOqytQyRgMsTfrRT3Cna9vhcBRL4PWis,80464
|
|
299
300
|
datalab/gui/__init__.py,sha256=ueRKAHh4jpIM7psJWmn-ddRpTU9Yy7gUljWJb6uluJw,2923
|
|
300
|
-
datalab/gui/actionhandler.py,sha256=
|
|
301
|
+
datalab/gui/actionhandler.py,sha256=SOTI5KUJt_XbHiJ5qpWv6J3Aba7mRww9P4NhpCZBWIs,73498
|
|
301
302
|
datalab/gui/docks.py,sha256=Fan4Pv9vQ4xrZdFgB4KfqbM28E5JHK93_ZARSfGEXz8,17164
|
|
302
|
-
datalab/gui/h5io.py,sha256=
|
|
303
|
-
datalab/gui/macroeditor.py,sha256=
|
|
304
|
-
datalab/gui/main.py,sha256=
|
|
305
|
-
datalab/gui/newobject.py,sha256=
|
|
306
|
-
datalab/gui/objectview.py,sha256=
|
|
307
|
-
datalab/gui/plothandler.py,sha256=
|
|
303
|
+
datalab/gui/h5io.py,sha256=_h930rKql0pzXohovfqGx7tOQQ7k6ANfwGemPWk3Cow,6710
|
|
304
|
+
datalab/gui/macroeditor.py,sha256=XLb1EbVPC2oPFSgqWGVZFG9707StwPuuChQrRxnN0hY,10649
|
|
305
|
+
datalab/gui/main.py,sha256=8F698RBG4GFFF8l9OCpgs1mxBdBux0MGpv_emBvMB1E,84307
|
|
306
|
+
datalab/gui/newobject.py,sha256=dfGWiQF13CeJ0LHDS3fcYjuVTpszl3e2XAc6xyUQXKc,7625
|
|
307
|
+
datalab/gui/objectview.py,sha256=bTUE_kCepfV-_OpUrlEZqlSjCHkiGYwwzlQaOJPrfro,32828
|
|
308
|
+
datalab/gui/plothandler.py,sha256=GBVdU61sSJ6bMfF14J5aSR-lomv6P1MEod5_Vfr2DdA,34086
|
|
308
309
|
datalab/gui/profiledialog.py,sha256=n7X-XwJPYD9fi7lQ1V3WemsHq-fNokwfLfqMIwY30tA,12799
|
|
309
|
-
datalab/gui/roieditor.py,sha256=
|
|
310
|
+
datalab/gui/roieditor.py,sha256=g2_8SyIJ5i8u8o_p-_h-vyML10mA0N0TteAScZMn-6c,22276
|
|
310
311
|
datalab/gui/roigrideditor.py,sha256=Ce4g2E65S0dROaYZSyOJekgeKDReNS8MCwt_WHLWH3k,7984
|
|
311
312
|
datalab/gui/settings.py,sha256=lf5NMn1StgrmlriAqcWhD0dobWSPbrzFx7SoNt81je0,22561
|
|
312
313
|
datalab/gui/tour.py,sha256=PzT9hIFohrLovQ7yCBEqPhGYYFLNIDkh053nTmj2y1U,32399
|
|
313
314
|
datalab/gui/panel/__init__.py,sha256=ZVgYukxTkP763BoNUWEIoHjrt_GnEiAsGexXTu4QiJQ,1452
|
|
314
|
-
datalab/gui/panel/base.py,sha256=
|
|
315
|
+
datalab/gui/panel/base.py,sha256=ON__SfFVN_1kJDd9_jgCpZQjzTzDcX0VYfxxMEJJUSg,138104
|
|
315
316
|
datalab/gui/panel/image.py,sha256=8SWLS24RdPKzO-tCoc-8PDFb2PQbjNcVb_heItRpZjI,5696
|
|
316
|
-
datalab/gui/panel/macro.py,sha256=
|
|
317
|
+
datalab/gui/panel/macro.py,sha256=0PsAPwQQPdjXk4VxtfLhNqdG_YFcwwwbBbhUxhNw_9o,21773
|
|
317
318
|
datalab/gui/panel/signal.py,sha256=LRsF-py96xvWa-XKJW9Qpay-4O3F_zLs2UFydrjCnYw,5762
|
|
318
319
|
datalab/gui/processor/__init__.py,sha256=6-Boho-VTI8I5s1UWaauT17gW8fp_UK2DBWqvMZ4qF8,3132
|
|
319
|
-
datalab/gui/processor/base.py,sha256=
|
|
320
|
+
datalab/gui/processor/base.py,sha256=aqSS90lcgSdh-ycl4Gy5cnWgU2ZdoIQfZq5YnAHwSl8,102774
|
|
320
321
|
datalab/gui/processor/catcher.py,sha256=g8_cEA7gOyej-vwjmUksgpcBbFlRZwHsGM9aYTyL6Ys,2667
|
|
321
|
-
datalab/gui/processor/image.py,sha256=
|
|
322
|
-
datalab/gui/processor/signal.py,sha256=
|
|
322
|
+
datalab/gui/processor/image.py,sha256=l4AQwQCyFy4s7Eavt_N7VaUKol0uw4l-3r466uzZEi4,48254
|
|
323
|
+
datalab/gui/processor/signal.py,sha256=Dyj6fHSXOqY_tCNmeubz5lyqOtyYa4pSSnXkXdBUbXA,29055
|
|
323
324
|
datalab/h5/__init__.py,sha256=N55pl08bbGH-QCTqoA-8BCe5Hgj-N1QxvvCd2ZvGQ9Q,301
|
|
324
325
|
datalab/h5/common.py,sha256=zfXNZT4ZnTlLCe5Hz2vv44FXSKJqhpidUiRqY8CYCLI,10268
|
|
325
326
|
datalab/h5/generic.py,sha256=s51etvOl2acgkvqhhq_o_VxldmPCj3TsK6_N_2U4l8E,20737
|
|
326
327
|
datalab/h5/native.py,sha256=xXQ7R5gT3iGQBPolpWovB8texJrPItJ4RUo01VDxPdA,991
|
|
327
328
|
datalab/h5/utils.py,sha256=PWwNKwsuEgL1Ofx638omTDwhCYcgA-mkl38vZAzjhiE,2858
|
|
329
|
+
datalab/locale/fr/LC_MESSAGES/datalab.mo,sha256=hTQJ_JoLBQYd0wEh0J6HIBYG4dht66eWsTXMqsREMWk,98947
|
|
330
|
+
datalab/locale/fr/LC_MESSAGES/datalab.po,sha256=k1gfpf2T-1yzFY3-0WRC9qwTZPB0XDMo6wpM0a2VoO0,105990
|
|
328
331
|
datalab/plugins/_readme_.txt,sha256=9SOgCDB34veOgCmYrA3ZTzYbv5ywraJGkgNislN9ogg,278
|
|
329
332
|
datalab/plugins/datalab_imageformats.py,sha256=0_GxhtWLLE3Lii-ej2pkehsJpi7NBBGj1gj8GtPSXTA,5788
|
|
330
333
|
datalab/plugins/datalab_testdata.py,sha256=IiRuPrz6iWxm8UL44hCtccEutlX-420KfB1lLko7IYg,7697
|
|
@@ -356,7 +359,8 @@ datalab/tests/features/common/__init__.py,sha256=_6Yl-eMBve0mGQA-aiFg4qvQ7GUCV5e
|
|
|
356
359
|
datalab/tests/features/common/add_metadata_app_test.py,sha256=0OYyXZpIkidmqb4dbPMjuWpcdt4At2O0srVriVqL_jA,4545
|
|
357
360
|
datalab/tests/features/common/add_metadata_unit_test.py,sha256=ypbwZfhEcW6WrEy6BhG3gdlv8AWRerTkFMMn-U3rMcQ,9269
|
|
358
361
|
datalab/tests/features/common/annotations_management_unit_test.py,sha256=Sjoywcz9sdzqlNw_aqLT__HQDhwew1oL1jPUC_QQDD4,5379
|
|
359
|
-
datalab/tests/features/common/auto_analysis_recompute_unit_test.py,sha256=
|
|
362
|
+
datalab/tests/features/common/auto_analysis_recompute_unit_test.py,sha256=2jQ-OxeKySU4qoe2estv4V5FxYtp47qwWjCXZKlOdI4,14258
|
|
363
|
+
datalab/tests/features/common/coordutils_unit_test.py,sha256=w_od5ing5Xh3l3MSsZK5QoqcOeeG5smnfl7my_bVO0c,6704
|
|
360
364
|
datalab/tests/features/common/createobject_unit_test.py,sha256=2_LnW_RF0nhKDtmwBQn6tl7vM_1CFiJN7urDNFFUJFU,1631
|
|
361
365
|
datalab/tests/features/common/geometry_results_app_test.py,sha256=pB9Hj6IvNl8HUEuTAyeW5LHX0pVymxFnGUWhdEyJFz8,5192
|
|
362
366
|
datalab/tests/features/common/interactive_processing_test.py,sha256=lNWRw9oHGu5U5Rnk5BCKJVXJdBii2fWLHmG5sumVLWA,46488
|
|
@@ -371,10 +375,10 @@ datalab/tests/features/common/multiple_table_results_unit_test.py,sha256=HBuT6Sy
|
|
|
371
375
|
datalab/tests/features/common/operation_modes_app_test.py,sha256=Gozh-e3rS-MqWGaDl2hXxeJoJmSWfwiDNmIHtpcJTQY,16403
|
|
372
376
|
datalab/tests/features/common/plot_results_app_test.py,sha256=YnyKgwszRg7XTUxjUwHERHOtwUxXAxQJpNKlcEptgKs,11601
|
|
373
377
|
datalab/tests/features/common/reorder_app_test.py,sha256=pIYbvBNjhWe-Eu6_EMJzczphkptQuUNbgrTmZU71PVY,3059
|
|
374
|
-
datalab/tests/features/common/result_deletion_unit_test.py,sha256=
|
|
378
|
+
datalab/tests/features/common/result_deletion_unit_test.py,sha256=NRTuFlvhrLn-AqOm15G-SbN3r04Ep_xYHAJrNibzGGc,9029
|
|
375
379
|
datalab/tests/features/common/result_merged_label_unit_test.py,sha256=VUf4vfrUbgtdOyU5x6lj3-xg4vklYHdU5q-3DCpRVTg,6387
|
|
376
380
|
datalab/tests/features/common/result_shape_settings_unit_test.py,sha256=NceT85JMqfVUScZ9p8-D_E6L9ct51V2Ev6v5zpajpPg,9406
|
|
377
|
-
datalab/tests/features/common/roi_plotitem_unit_test.py,sha256=
|
|
381
|
+
datalab/tests/features/common/roi_plotitem_unit_test.py,sha256=wQHycjeNL3V01ldQn4NQvtsqkAKHXd1G6yP1d2GRESU,2584
|
|
378
382
|
datalab/tests/features/common/roieditor_unit_test.py,sha256=1jnQTv_tPiFLM4EQutAENFBatZMv9HIo1TjEVaINwWc,4272
|
|
379
383
|
datalab/tests/features/common/save_to_dir_app_test.py,sha256=g-73KBzAehTW1iJ4cmI_rXqYlTV8vDXnx9dVcsvHkhs,6345
|
|
380
384
|
datalab/tests/features/common/save_to_dir_unit_test.py,sha256=a_IAnJ-f18rxTK8JVxfUHdReluUukt1VXuWKhrj3XNQ,17324
|
|
@@ -382,6 +386,7 @@ datalab/tests/features/common/stat_app_test.py,sha256=i5zGgu3yTjGCidmQ5TqA0xnqjv
|
|
|
382
386
|
datalab/tests/features/common/stats_tools_unit_test.py,sha256=msE_WL8W_WBzjJRCYBHxjTptn-9AXxGMOP5l0rlL-zQ,2640
|
|
383
387
|
datalab/tests/features/common/table_results_app_test.py,sha256=QaZ120LLH2_Q0JHQ0uDkdM1KcQcYri6uk5hpDTJKPHo,1649
|
|
384
388
|
datalab/tests/features/common/textimport_unit_test.py,sha256=kI6nmd5OGEgw_FDQhf2mpSpljmT_Owzv3zFMfAF2ez8,5509
|
|
389
|
+
datalab/tests/features/common/update_tree_robustness_test.py,sha256=20UDQcu0Qh54I6ojyCSVVhqu03em-BKcNb8byEjUL8M,2480
|
|
385
390
|
datalab/tests/features/common/uuid_preservation_test.py,sha256=oWT6rWYST23-7PYOsYnp9XXjOT3TSK6qGQkl1Qb4wjk,12563
|
|
386
391
|
datalab/tests/features/common/worker_unit_test.py,sha256=xJsiyzUGL8RKaetO1Fco6mIAmo2K4M-H5-gH8ergSeQ,15242
|
|
387
392
|
datalab/tests/features/control/__init__.py,sha256=_6Yl-eMBve0mGQA-aiFg4qvQ7GUCV5eGvIcoRf4mEPw,3
|
|
@@ -389,7 +394,7 @@ datalab/tests/features/control/connect_dialog.py,sha256=tfkgrsJMj-WGFj7WUapEDR6R
|
|
|
389
394
|
datalab/tests/features/control/embedded1_unit_test.py,sha256=2fEOlqxjMGG4yrnUjDQVyZcvGpmmE9KXdpXhsml-fiY,10606
|
|
390
395
|
datalab/tests/features/control/embedded2_unit_test.py,sha256=X0xDDy_o3XTprmQdDWVyLTku9TMUBCaDOMLpQanIcJM,1563
|
|
391
396
|
datalab/tests/features/control/remoteclient_app_test.py,sha256=bsQFcBDxzDNJam2-T91YoYWYcDK-pO8YjDlARzRF984,8028
|
|
392
|
-
datalab/tests/features/control/remoteclient_unit.py,sha256=
|
|
397
|
+
datalab/tests/features/control/remoteclient_unit.py,sha256=lAu_UFUbKLo7uha8npqqxoz8hbBad5_mzHuOTvf_Vxs,3048
|
|
393
398
|
datalab/tests/features/control/simpleclient_unit_test.py,sha256=9p5mS02syo-xfPDN3nS26RJU-Ca8_LMppW0h47dVcIE,13130
|
|
394
399
|
datalab/tests/features/hdf5/__init__.py,sha256=_6Yl-eMBve0mGQA-aiFg4qvQ7GUCV5eGvIcoRf4mEPw,3
|
|
395
400
|
datalab/tests/features/hdf5/h5browser1_unit_test.py,sha256=vqWpa4fhLqTtmS82oP6WJG2OZLd-ZwyRA3PSV1fqTBA,958
|
|
@@ -397,6 +402,7 @@ datalab/tests/features/hdf5/h5browser2_unit.py,sha256=2TcNVXdEYG5l3XNrn0SHRurs-B
|
|
|
397
402
|
datalab/tests/features/hdf5/h5browser_app_test.py,sha256=e1yAg6Io6M8UR8bpf0W7Bug9JVJ3R7YgJM6kNtRpnX0,2212
|
|
398
403
|
datalab/tests/features/hdf5/h5import_app_test.py,sha256=uglmmb4OSQyjFkwoKZwRRXvFl2K6HOFeDysIOmX5_30,656
|
|
399
404
|
datalab/tests/features/hdf5/h5importer_app_test.py,sha256=HOgdU5VVE8ndDikt-XaBqcP1Y1C5A6No-gC5s6bOXP8,1098
|
|
405
|
+
datalab/tests/features/hdf5/h5workspace_unit_test.py,sha256=k7-8Zg6HmBEiEaPTZiOnElPrajb5-x5y__0WRQ6xnB4,5040
|
|
400
406
|
datalab/tests/features/image/__init__.py,sha256=_6Yl-eMBve0mGQA-aiFg4qvQ7GUCV5eGvIcoRf4mEPw,3
|
|
401
407
|
datalab/tests/features/image/annotations_app_test.py,sha256=2k2unIBnwigjv0IGI6s1ZUhZo0YYsTi2DjVhf99Un5Y,811
|
|
402
408
|
datalab/tests/features/image/annotations_unit_test.py,sha256=H3iRzuWw9YAySOndRSO__q3cHMPpQm2S-GBGHPkFjzY,3089
|
|
@@ -423,13 +429,14 @@ datalab/tests/features/image/profile_dialog_test.py,sha256=x2wWVlseQrEr3KE7o5HCR
|
|
|
423
429
|
datalab/tests/features/image/roi_app_test.py,sha256=tIt731Xu0uCB13S_F_R167hUjs_bvZNk_nPupb0kNPY,3513
|
|
424
430
|
datalab/tests/features/image/roi_circ_app_test.py,sha256=rD72vTeV7GH7y9PhAnN53fi8rqmfaj2L1aFRmekmx8I,2081
|
|
425
431
|
datalab/tests/features/image/roi_manipulation_app_test.py,sha256=W-UJpRp0FJKQmgDo5AbReXEdYMXH6lFiDIhJ4qcmtxk,11040
|
|
426
|
-
datalab/tests/features/image/roigrid_unit_test.py,sha256=
|
|
432
|
+
datalab/tests/features/image/roigrid_unit_test.py,sha256=_GYuqKuV10aPDRs2fsdHf98ypscux4_b5QLD3Be1zJE,5222
|
|
427
433
|
datalab/tests/features/image/side_by_side_app_test.py,sha256=x7C4873p6dGe9ck-O-uGA6BS0RwtZnpMM28SXP7KiKA,1540
|
|
428
434
|
datalab/tests/features/macro/__init__.py,sha256=_6Yl-eMBve0mGQA-aiFg4qvQ7GUCV5eGvIcoRf4mEPw,3
|
|
429
435
|
datalab/tests/features/macro/macro_app_test.py,sha256=BKT9usab_k8dLsfvanHfiv2I2vA4wiOqMDmzITDdY1g,804
|
|
430
|
-
datalab/tests/features/macro/macroeditor_unit_test.py,sha256=
|
|
436
|
+
datalab/tests/features/macro/macroeditor_unit_test.py,sha256=FVibXRX21ILYs8eJNMK10xKYt46jMNCkTm_ccC1JFXE,7873
|
|
431
437
|
datalab/tests/features/signal/__init__.py,sha256=_6Yl-eMBve0mGQA-aiFg4qvQ7GUCV5eGvIcoRf4mEPw,3
|
|
432
438
|
datalab/tests/features/signal/baseline_dialog_test.py,sha256=wYdWKEpXJ74DXbMeEjxOSCFIvh36QLXiDH0yP-Xjfg8,1804
|
|
439
|
+
datalab/tests/features/signal/custom_signal_bug_unit_test.py,sha256=8tyNX6pxp4ToTSV61OxgNBsUld5NBcBm6RWtQI6LTNg,3609
|
|
433
440
|
datalab/tests/features/signal/deltax_dialog_unit_test.py,sha256=9I4-gIAUlkFRyiDr_6s1Se-2Zp1rv_Ix6wcQ137pKKw,1166
|
|
434
441
|
datalab/tests/features/signal/fft1d_app_test.py,sha256=8560mrwMuq4wBF163VkrcdEjOSHGa7nT06oTPD3EQYA,730
|
|
435
442
|
datalab/tests/features/signal/filter_app_test.py,sha256=iDaA7mOnti2xVMV80k0m7i948M0q_CmaO1mE8_swIKo,1663
|
|
@@ -475,20 +482,20 @@ datalab/widgets/filedialog.py,sha256=KP3gyvumoNdBC6zDzjsAHb_q6ET-VUcPwIhAU9cFuzY
|
|
|
475
482
|
datalab/widgets/fileviewer.py,sha256=q9nGwaOXuWGDy8C61gbGt0WucQndDWD0tXqfCfDcAwk,2335
|
|
476
483
|
datalab/widgets/fitdialog.py,sha256=G9223TxY7PuEfrVhfyqlpZ-ZEXI94lE9HCOW8oiNfto,25386
|
|
477
484
|
datalab/widgets/h5browser.py,sha256=wI5ZBEmrCAjC7zL28Md_p4_7V0cgQiMwodERJ4ytZn8,35159
|
|
478
|
-
datalab/widgets/imagebackground.py,sha256=
|
|
479
|
-
datalab/widgets/instconfviewer.py,sha256=
|
|
485
|
+
datalab/widgets/imagebackground.py,sha256=OStOjxF1O2vxPefd8qbCl3cG7XQZO-cS6vATUeaCGBM,4253
|
|
486
|
+
datalab/widgets/instconfviewer.py,sha256=OAzUe3hWid6sXIa3Am3J9baK6aKVysM3-mAOQUa320Q,6193
|
|
480
487
|
datalab/widgets/logviewer.py,sha256=K3d1N5rgDowOBoCIEeyDNgrjfnByXeNWT9H_x0okfJU,2908
|
|
481
488
|
datalab/widgets/signalbaseline.py,sha256=Zutrc4g2PPpFLw_Dgcubop6R46HdzIl91THF0302860,3395
|
|
482
|
-
datalab/widgets/signalcursor.py,sha256=
|
|
483
|
-
datalab/widgets/signaldeltax.py,sha256=
|
|
489
|
+
datalab/widgets/signalcursor.py,sha256=U75z0roxRXIabEyLiDDkf6EJg3aOH0hq9ZMmU0K9D-Y,8591
|
|
490
|
+
datalab/widgets/signaldeltax.py,sha256=oRt0VXS38fYAwOdg61GAgO165iM_Q-bwP1xnHXUFsEk,5936
|
|
484
491
|
datalab/widgets/signalpeak.py,sha256=CrAmdGQW4LZNd6yppZsSW8NXRhFlq3-OGIdM3zrc0AI,6835
|
|
485
492
|
datalab/widgets/status.py,sha256=LopY06Mom3RqvxGCdqKJUobH3-7OxCNz5YGeAY_EQHE,8036
|
|
486
493
|
datalab/widgets/textimport.py,sha256=NqJH8JsqEoIvjZeebW4GZkCD4ubxBuDJih6RzFki1K0,27997
|
|
487
494
|
datalab/widgets/warningerror.py,sha256=KiPagfry7-OJ7bHPw9r6RqhJm5e8SZfrjrC_DuNtVJw,8258
|
|
488
495
|
datalab/widgets/wizard.py,sha256=KN7NYadQuxO921WK9q0NfWAlw66l4c8JF4yeOhcRaAo,9904
|
|
489
|
-
datalab_platform-1.0.
|
|
490
|
-
datalab_platform-1.0.
|
|
491
|
-
datalab_platform-1.0.
|
|
492
|
-
datalab_platform-1.0.
|
|
493
|
-
datalab_platform-1.0.
|
|
494
|
-
datalab_platform-1.0.
|
|
496
|
+
datalab_platform-1.0.3.dist-info/licenses/LICENSE,sha256=iMgU90_yimtLdU_nI3rWUq2mDMCvdm_EOVliNKyNLXo,1565
|
|
497
|
+
datalab_platform-1.0.3.dist-info/METADATA,sha256=p7mz8qAG1H3s_H1LYOkaOTHcPyyWPbQF6raNL95Chyw,6945
|
|
498
|
+
datalab_platform-1.0.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
499
|
+
datalab_platform-1.0.3.dist-info/entry_points.txt,sha256=9qI5xVtl8G_ivVnsIYV-v2rPZ98HVO1WF1Of78ZxZhg,122
|
|
500
|
+
datalab_platform-1.0.3.dist-info/top_level.txt,sha256=sK3HGZNGMtLR-m29UNms9QgVzVqwSNCtmuR-_hmamdc,8
|
|
501
|
+
datalab_platform-1.0.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|