pymodaq 4.4.6__py3-none-any.whl → 4.4.9__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.
Potentially problematic release.
This version of pymodaq might be problematic. Click here for more details.
- pymodaq/control_modules/daq_move.py +5 -2
- pymodaq/control_modules/daq_move_ui.py +12 -5
- pymodaq/control_modules/move_utility_classes.py +9 -5
- pymodaq/control_modules/utils.py +0 -1
- pymodaq/extensions/daq_scan.py +26 -4
- pymodaq/extensions/daq_scan_ui.py +1 -1
- pymodaq/extensions/pid/daq_move_PID.py +1 -1
- pymodaq/post_treatment/load_and_plot.py +43 -10
- pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +1 -1
- pymodaq/resources/VERSION +1 -1
- pymodaq/resources/config_template.toml +1 -0
- pymodaq/utils/data.py +59 -11
- pymodaq/utils/gui_utils/widgets/__init__.py +1 -1
- pymodaq/utils/gui_utils/widgets/spinbox.py +15 -2
- pymodaq/utils/h5modules/data_saving.py +23 -5
- pymodaq/utils/h5modules/module_saving.py +9 -4
- pymodaq/utils/managers/modules_manager.py +2 -2
- pymodaq/utils/managers/remote_manager.py +1 -1
- pymodaq/utils/parameter/pymodaq_ptypes/slide.py +1 -1
- pymodaq/utils/plotting/data_viewers/viewer2D.py +5 -0
- pymodaq/utils/slicing.py +3 -3
- pymodaq/utils/tcp_ip/serializer.py +73 -40
- {pymodaq-4.4.6.dist-info → pymodaq-4.4.9.dist-info}/METADATA +6 -4
- {pymodaq-4.4.6.dist-info → pymodaq-4.4.9.dist-info}/RECORD +28 -27
- {pymodaq-4.4.6.dist-info → pymodaq-4.4.9.dist-info}/WHEEL +1 -1
- pymodaq-4.4.9.dist-info/licenses/AUTHORS.md +46 -0
- {pymodaq-4.4.6.dist-info → pymodaq-4.4.9.dist-info}/entry_points.txt +0 -0
- {pymodaq-4.4.6.dist-info → pymodaq-4.4.9.dist-info}/licenses/LICENSE +0 -0
|
@@ -12,12 +12,14 @@ import xml.etree.ElementTree as ET
|
|
|
12
12
|
|
|
13
13
|
import numpy as np
|
|
14
14
|
|
|
15
|
+
from pymodaq.utils.logger import set_logger, get_module_name
|
|
15
16
|
from pymodaq.utils.abstract import ABCMeta, abstract_attribute, abstractmethod
|
|
16
17
|
from pymodaq.utils.daq_utils import capitalize
|
|
17
18
|
from pymodaq.utils.data import Axis, DataDim, DataWithAxes, DataToExport, DataDistribution
|
|
18
|
-
from .saving import H5SaverLowLevel
|
|
19
|
-
from .backends import GROUP, CARRAY, Node, GroupType
|
|
20
|
-
from .data_saving import DataToExportSaver, AxisSaverLoader,
|
|
19
|
+
from pymodaq.utils.h5modules.saving import H5SaverLowLevel
|
|
20
|
+
from pymodaq.utils.h5modules.backends import GROUP, CARRAY, Node, GroupType
|
|
21
|
+
from pymodaq.utils.h5modules.data_saving import (DataToExportSaver, AxisSaverLoader,
|
|
22
|
+
DataToExportTimedSaver, DataToExportExtendedSaver)
|
|
21
23
|
from pymodaq.utils.parameter import ioxml
|
|
22
24
|
|
|
23
25
|
if TYPE_CHECKING:
|
|
@@ -27,6 +29,9 @@ if TYPE_CHECKING:
|
|
|
27
29
|
from pymodaq.utils.h5modules.h5logging import H5Logger
|
|
28
30
|
|
|
29
31
|
|
|
32
|
+
logger = set_logger(get_module_name(__file__))
|
|
33
|
+
|
|
34
|
+
|
|
30
35
|
class ModuleSaver(metaclass=ABCMeta):
|
|
31
36
|
"""Abstract base class to save info and data from main modules (DAQScan, DAQViewer, DAQMove, ...)"""
|
|
32
37
|
group_type: GroupType = abstract_attribute()
|
|
@@ -373,7 +378,7 @@ class ScanSaver(ModuleSaver):
|
|
|
373
378
|
try:
|
|
374
379
|
detector.insert_data(indexes, where=self._module_group, distribution=distribution)
|
|
375
380
|
except Exception as e:
|
|
376
|
-
|
|
381
|
+
logger.exception(f'Cannot insert data: {str(e)}')
|
|
377
382
|
|
|
378
383
|
|
|
379
384
|
class LoggerSaver(ScanSaver):
|
|
@@ -355,12 +355,12 @@ class ModulesManager(QObject, ParameterManager):
|
|
|
355
355
|
sig.connect(slot)
|
|
356
356
|
else:
|
|
357
357
|
|
|
358
|
-
for sig in [mod.grab_done_signal for mod in self.
|
|
358
|
+
for sig in [mod.grab_done_signal for mod in self.detectors]:
|
|
359
359
|
try:
|
|
360
360
|
sig.disconnect(slot)
|
|
361
361
|
except TypeError as e:
|
|
362
362
|
# means the slot was not previously connected
|
|
363
|
-
logger.info(
|
|
363
|
+
logger.info(f'Could not disconnect grab signal from the {slot} slot', stacklevel=2)
|
|
364
364
|
|
|
365
365
|
self.detectors_connected = connect
|
|
366
366
|
|
|
@@ -17,7 +17,7 @@ logger = set_logger(get_module_name(__file__))
|
|
|
17
17
|
remote_path = pymodaq.utils.config.get_set_remote_path()
|
|
18
18
|
remote_types = ['ShortCut', 'Joystick']
|
|
19
19
|
|
|
20
|
-
actuator_actions = ['
|
|
20
|
+
actuator_actions = ['move_rel', 'move_rel_p', 'move_rel_m']
|
|
21
21
|
detector_actions = ['snap', 'grab', 'stop']
|
|
22
22
|
remote_types = ['Keyboard', 'Joystick']
|
|
23
23
|
try:
|
|
@@ -465,6 +465,8 @@ class View2D(ActionManager, QtCore.QObject):
|
|
|
465
465
|
tip='Flip the image left/right', checkable=True)
|
|
466
466
|
self.add_action('rotate', 'Rotate', 'rotation2',
|
|
467
467
|
tip='Rotate the image', checkable=True)
|
|
468
|
+
self.add_action('opposite', 'Opposite', 'remove',
|
|
469
|
+
tip='Take the opposite of the image', checkable=True)
|
|
468
470
|
self.add_action('legend', 'Legend', 'RGB',
|
|
469
471
|
tip='Show the legend', checkable=True)
|
|
470
472
|
|
|
@@ -877,6 +879,8 @@ class Viewer2D(ViewerBase):
|
|
|
877
879
|
data = np.fliplr(data)
|
|
878
880
|
if self.view.is_action_checked('rotate'):
|
|
879
881
|
data = np.flipud(np.transpose(data))
|
|
882
|
+
if self.view.is_action_checked('opposite'):
|
|
883
|
+
data = -data
|
|
880
884
|
return data
|
|
881
885
|
|
|
882
886
|
def set_visible_items(self):
|
|
@@ -917,6 +921,7 @@ class Viewer2D(ViewerBase):
|
|
|
917
921
|
self.view.connect_action('flip_ud', slot=self.update_data)
|
|
918
922
|
self.view.connect_action('flip_lr', slot=self.update_data)
|
|
919
923
|
self.view.connect_action('rotate', slot=self.update_data)
|
|
924
|
+
self.view.connect_action('opposite', slot=self.update_data)
|
|
920
925
|
self.view.connect_action('autolevels', slot=self.update_data)
|
|
921
926
|
self.view.connect_action('isocurve', slot=self.update_data)
|
|
922
927
|
self.view.histogrammer.gradient_changed.connect(lambda: setattr(self, '_is_gradient_manually_set', True))
|
pymodaq/utils/slicing.py
CHANGED
|
@@ -26,7 +26,7 @@ class SpecialSlicersData(SpecialSlicers):
|
|
|
26
26
|
def __setitem__(self, slices, data: Union[np.ndarray, 'DataWithAxes', 'Axis']):
|
|
27
27
|
"""x.__setitem__(slices, data) <==> x[slices]=data
|
|
28
28
|
"""
|
|
29
|
-
|
|
29
|
+
total_slices, slices_index = self.obj._compute_slices(slices, self.is_navigation)
|
|
30
30
|
|
|
31
31
|
if hasattr(self.obj, 'base_type') and self.obj.base_type == 'Axis':
|
|
32
32
|
if isinstance(data, np.ndarray):
|
|
@@ -35,14 +35,14 @@ class SpecialSlicersData(SpecialSlicers):
|
|
|
35
35
|
data_to_replace = data.get_data()
|
|
36
36
|
if hasattr(self.obj, 'units') and self.obj.data is None:
|
|
37
37
|
self.obj.create_linear_data(len(self.obj))
|
|
38
|
-
self.obj.data[
|
|
38
|
+
self.obj.data[total_slices] = data_to_replace
|
|
39
39
|
else:
|
|
40
40
|
for ind in range(len(self.obj)):
|
|
41
41
|
if isinstance(data, np.ndarray):
|
|
42
42
|
data_to_replace = data
|
|
43
43
|
else: # means it's a DataWithAxes
|
|
44
44
|
data_to_replace = data[ind]
|
|
45
|
-
self.obj[ind][
|
|
45
|
+
self.obj[ind][total_slices] = data_to_replace
|
|
46
46
|
|
|
47
47
|
def __len__(self):
|
|
48
48
|
return self.obj.axes_manager.sig_shape[0]
|
|
@@ -5,8 +5,9 @@ Created the 20/10/2023
|
|
|
5
5
|
@author: Sebastien Weber
|
|
6
6
|
"""
|
|
7
7
|
from base64 import b64encode, b64decode
|
|
8
|
+
from enum import Enum
|
|
8
9
|
import numbers
|
|
9
|
-
from typing import Tuple, List, Union, TYPE_CHECKING
|
|
10
|
+
from typing import Optional, Tuple, List, Union, TYPE_CHECKING
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
import numpy as np
|
|
@@ -20,17 +21,38 @@ if TYPE_CHECKING:
|
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
SERIALIZABLE = Union[
|
|
23
|
-
|
|
24
|
+
# native
|
|
25
|
+
bool,
|
|
26
|
+
bytes,
|
|
24
27
|
str,
|
|
25
|
-
|
|
28
|
+
complex, # float and int are subtypes for type hinting
|
|
29
|
+
float,
|
|
30
|
+
int,
|
|
26
31
|
list,
|
|
32
|
+
# numpy
|
|
27
33
|
np.ndarray,
|
|
34
|
+
# pymodaq
|
|
28
35
|
Axis,
|
|
29
36
|
DataWithAxes,
|
|
30
37
|
DataToExport,
|
|
38
|
+
putils.ParameterWithPath,
|
|
31
39
|
]
|
|
32
40
|
|
|
33
41
|
|
|
42
|
+
class SerializableTypes(Enum):
|
|
43
|
+
"""Type names of serializable types"""
|
|
44
|
+
BOOL = "bool"
|
|
45
|
+
BYTES = "bytes"
|
|
46
|
+
STRING = "string"
|
|
47
|
+
SCALAR = "scalar"
|
|
48
|
+
LIST = "list"
|
|
49
|
+
ARRAY = "array"
|
|
50
|
+
AXIS = "axis"
|
|
51
|
+
DATA_WITH_AXES = "dwa"
|
|
52
|
+
DATA_TO_EXPORT = "dte"
|
|
53
|
+
PARAMETER = "parameter"
|
|
54
|
+
|
|
55
|
+
|
|
34
56
|
class SocketString:
|
|
35
57
|
"""Mimic the Socket object but actually using a bytes string not a socket connection
|
|
36
58
|
|
|
@@ -86,7 +108,7 @@ class Serializer:
|
|
|
86
108
|
"""Used to Serialize to bytes python objects, numpy arrays and PyMoDAQ DataWithAxes and
|
|
87
109
|
DataToExport objects"""
|
|
88
110
|
|
|
89
|
-
def __init__(self, obj: SERIALIZABLE = None):
|
|
111
|
+
def __init__(self, obj: Optional[SERIALIZABLE] = None) -> None:
|
|
90
112
|
self._bytes_string = b''
|
|
91
113
|
self._obj = obj
|
|
92
114
|
|
|
@@ -154,7 +176,7 @@ class Serializer:
|
|
|
154
176
|
return message.encode()
|
|
155
177
|
|
|
156
178
|
@classmethod
|
|
157
|
-
def str_len_to_bytes(cls, message: Union[str, bytes]) ->
|
|
179
|
+
def str_len_to_bytes(cls, message: Union[str, bytes]) -> Tuple[bytes, bytes]:
|
|
158
180
|
""" Convert a string and its length to two bytes
|
|
159
181
|
Parameters
|
|
160
182
|
----------
|
|
@@ -174,7 +196,7 @@ class Serializer:
|
|
|
174
196
|
return message, cls.int_to_bytes(len(message))
|
|
175
197
|
|
|
176
198
|
def _int_serialization(self, int_obj: int) -> bytes:
|
|
177
|
-
"""
|
|
199
|
+
"""Serialize an unsigned integer used for getting the length of messages internally, for outside integer
|
|
178
200
|
serialization or deserialization use scalar_serialization"""
|
|
179
201
|
int_bytes = self.int_to_bytes(int_obj)
|
|
180
202
|
bytes_string = int_bytes
|
|
@@ -205,18 +227,19 @@ class Serializer:
|
|
|
205
227
|
self._bytes_string += bytes_string
|
|
206
228
|
return bytes_string
|
|
207
229
|
|
|
208
|
-
def scalar_serialization(self, scalar:
|
|
230
|
+
def scalar_serialization(self, scalar: complex) -> bytes:
|
|
209
231
|
""" Convert a scalar into a bytes message together with the info to convert it back
|
|
210
232
|
|
|
211
233
|
Parameters
|
|
212
234
|
----------
|
|
213
|
-
scalar:
|
|
235
|
+
scalar: A python number (complex or subtypes like float and int)
|
|
214
236
|
|
|
215
237
|
Returns
|
|
216
238
|
-------
|
|
217
239
|
bytes: the total bytes message to serialize the scalar
|
|
218
240
|
"""
|
|
219
241
|
if not isinstance(scalar, numbers.Number):
|
|
242
|
+
# type hint is complex, instance comparison Number
|
|
220
243
|
raise TypeError(f'{scalar} should be an integer or a float, not a {type(scalar)}')
|
|
221
244
|
scalar_array = np.array([scalar])
|
|
222
245
|
data_type = scalar_array.dtype.descr[0][1]
|
|
@@ -350,49 +373,56 @@ class Serializer:
|
|
|
350
373
|
self._bytes_string += bytes_string
|
|
351
374
|
return bytes_string
|
|
352
375
|
|
|
353
|
-
def type_and_object_serialization(self, obj):
|
|
376
|
+
def type_and_object_serialization(self, obj: Optional[SERIALIZABLE] = None) -> bytes:
|
|
377
|
+
"""Serialize an object with its type, such that it can be retrieved by
|
|
378
|
+
`DeSerializer.type_and_object_deserialization`.
|
|
379
|
+
"""
|
|
380
|
+
|
|
381
|
+
if obj is None and self._obj is not None:
|
|
382
|
+
obj = self._obj
|
|
383
|
+
|
|
354
384
|
bytes_string = b''
|
|
355
385
|
if isinstance(obj, DataWithAxes):
|
|
356
|
-
bytes_string += self.string_serialization(
|
|
386
|
+
bytes_string += self.string_serialization(SerializableTypes.DATA_WITH_AXES.value)
|
|
357
387
|
bytes_string += self.dwa_serialization(obj)
|
|
358
388
|
|
|
359
389
|
elif isinstance(obj, Axis):
|
|
360
|
-
bytes_string += self.string_serialization(
|
|
390
|
+
bytes_string += self.string_serialization(SerializableTypes.AXIS.value)
|
|
361
391
|
bytes_string += self.axis_serialization(obj)
|
|
362
392
|
|
|
363
393
|
elif isinstance(obj, np.ndarray):
|
|
364
|
-
bytes_string += self.string_serialization(
|
|
394
|
+
bytes_string += self.string_serialization(SerializableTypes.ARRAY.value)
|
|
365
395
|
bytes_string += self.ndarray_serialization(obj)
|
|
366
396
|
|
|
367
397
|
elif isinstance(obj, bytes):
|
|
368
|
-
bytes_string += self.string_serialization(
|
|
398
|
+
bytes_string += self.string_serialization(SerializableTypes.BYTES.value)
|
|
369
399
|
bytes_string += self.bytes_serialization(obj)
|
|
370
400
|
|
|
371
401
|
elif isinstance(obj, str):
|
|
372
|
-
bytes_string += self.string_serialization(
|
|
402
|
+
bytes_string += self.string_serialization(SerializableTypes.STRING.value)
|
|
373
403
|
bytes_string += self.string_serialization(obj)
|
|
374
404
|
|
|
375
|
-
elif isinstance(obj,
|
|
376
|
-
bytes_string += self.string_serialization(
|
|
405
|
+
elif isinstance(obj, bool):
|
|
406
|
+
bytes_string += self.string_serialization(SerializableTypes.BOOL.value)
|
|
377
407
|
bytes_string += self.scalar_serialization(obj)
|
|
378
408
|
|
|
379
|
-
elif isinstance(obj,
|
|
380
|
-
bytes_string += self.string_serialization(
|
|
381
|
-
bytes_string += self.scalar_serialization(
|
|
409
|
+
elif isinstance(obj, numbers.Number):
|
|
410
|
+
bytes_string += self.string_serialization(SerializableTypes.SCALAR.value)
|
|
411
|
+
bytes_string += self.scalar_serialization(obj)
|
|
382
412
|
|
|
383
413
|
elif isinstance(obj, list):
|
|
384
|
-
bytes_string += self.string_serialization(
|
|
414
|
+
bytes_string += self.string_serialization(SerializableTypes.LIST.value)
|
|
385
415
|
bytes_string += self.list_serialization(obj)
|
|
386
416
|
|
|
387
417
|
elif isinstance(obj, putils.ParameterWithPath):
|
|
388
418
|
path = obj.path
|
|
389
419
|
param_as_xml = ioxml.parameter_to_xml_string(obj.parameter)
|
|
390
|
-
bytes_string += self.string_serialization(
|
|
420
|
+
bytes_string += self.string_serialization(SerializableTypes.PARAMETER.value)
|
|
391
421
|
bytes_string += self.list_serialization(path)
|
|
392
|
-
bytes_string += self.
|
|
422
|
+
bytes_string += self.bytes_serialization(param_as_xml)
|
|
393
423
|
|
|
394
424
|
elif isinstance(obj, DataToExport):
|
|
395
|
-
bytes_string += self.string_serialization(
|
|
425
|
+
bytes_string += self.string_serialization(SerializableTypes.DATA_TO_EXPORT.value)
|
|
396
426
|
bytes_string += self.dte_serialization(obj)
|
|
397
427
|
|
|
398
428
|
else:
|
|
@@ -509,7 +539,7 @@ class DeSerializer:
|
|
|
509
539
|
:py:class:`~pymodaq.utils.tcp_ip.mysocket.Socket`
|
|
510
540
|
"""
|
|
511
541
|
|
|
512
|
-
def __init__(self, bytes_string: Union[bytes, 'Socket'] = None):
|
|
542
|
+
def __init__(self, bytes_string: Union[bytes, 'Socket'] = None) -> None:
|
|
513
543
|
if isinstance(bytes_string, bytes):
|
|
514
544
|
bytes_string = SocketString(bytes_string)
|
|
515
545
|
self._bytes_string = bytes_string
|
|
@@ -531,7 +561,7 @@ class DeSerializer:
|
|
|
531
561
|
return int.from_bytes(bytes_string, 'big')
|
|
532
562
|
|
|
533
563
|
@staticmethod
|
|
534
|
-
def bytes_to_scalar(data: bytes, dtype: np.dtype) ->
|
|
564
|
+
def bytes_to_scalar(data: bytes, dtype: np.dtype) -> complex:
|
|
535
565
|
"""Convert bytes to a scalar given a certain numpy dtype
|
|
536
566
|
|
|
537
567
|
Parameters
|
|
@@ -588,8 +618,8 @@ class DeSerializer:
|
|
|
588
618
|
str_obj = self._bytes_string.get_first_nbytes(string_len).decode()
|
|
589
619
|
return str_obj
|
|
590
620
|
|
|
591
|
-
def scalar_deserialization(self) ->
|
|
592
|
-
"""Convert bytes into a
|
|
621
|
+
def scalar_deserialization(self) -> complex:
|
|
622
|
+
"""Convert bytes into a python number object
|
|
593
623
|
|
|
594
624
|
Get first the data type from a string deserialization, then the data length and finally convert this
|
|
595
625
|
length of bytes into a number (float, int)
|
|
@@ -602,9 +632,11 @@ class DeSerializer:
|
|
|
602
632
|
data_len = self._int_deserialization()
|
|
603
633
|
number = np.frombuffer(self._bytes_string.get_first_nbytes(data_len), dtype=data_type)[0]
|
|
604
634
|
if 'f' in data_type:
|
|
605
|
-
number = float(number) # because one get numpy
|
|
635
|
+
number = float(number) # because one get numpy float type
|
|
606
636
|
elif 'i' in data_type:
|
|
607
637
|
number = int(number) # because one get numpy int type
|
|
638
|
+
elif 'c' in data_type:
|
|
639
|
+
number = complex(number) # because one get numpy complex type
|
|
608
640
|
return number
|
|
609
641
|
|
|
610
642
|
def boolean_deserialization(self) -> bool:
|
|
@@ -642,7 +674,7 @@ class DeSerializer:
|
|
|
642
674
|
ndarray = np.atleast_1d(ndarray) # remove singleton dimensions
|
|
643
675
|
return ndarray
|
|
644
676
|
|
|
645
|
-
def type_and_object_deserialization(self):
|
|
677
|
+
def type_and_object_deserialization(self) -> SERIALIZABLE:
|
|
646
678
|
""" Deserialize specific objects from their binary representation (inverse of `Serializer.type_and_object_serialization`).
|
|
647
679
|
|
|
648
680
|
See Also
|
|
@@ -652,28 +684,29 @@ class DeSerializer:
|
|
|
652
684
|
"""
|
|
653
685
|
obj_type = self.string_deserialization()
|
|
654
686
|
elt = None
|
|
655
|
-
if obj_type ==
|
|
687
|
+
if obj_type == SerializableTypes.SCALAR.value:
|
|
656
688
|
elt = self.scalar_deserialization()
|
|
657
|
-
elif obj_type ==
|
|
689
|
+
elif obj_type == SerializableTypes.STRING.value:
|
|
658
690
|
elt = self.string_deserialization()
|
|
659
|
-
elif obj_type ==
|
|
691
|
+
elif obj_type == SerializableTypes.BYTES.value:
|
|
660
692
|
elt = self.bytes_deserialization()
|
|
661
|
-
elif obj_type ==
|
|
693
|
+
elif obj_type == SerializableTypes.ARRAY.value:
|
|
662
694
|
elt = self.ndarray_deserialization()
|
|
663
|
-
elif obj_type ==
|
|
695
|
+
elif obj_type == SerializableTypes.DATA_WITH_AXES.value:
|
|
664
696
|
elt = self.dwa_deserialization()
|
|
665
|
-
elif obj_type ==
|
|
697
|
+
elif obj_type == SerializableTypes.DATA_TO_EXPORT.value:
|
|
666
698
|
elt = self.dte_deserialization()
|
|
667
|
-
elif obj_type ==
|
|
699
|
+
elif obj_type == SerializableTypes.AXIS.value:
|
|
668
700
|
elt = self.axis_deserialization()
|
|
669
|
-
elif obj_type ==
|
|
701
|
+
elif obj_type == SerializableTypes.BOOL.value:
|
|
670
702
|
elt = self.boolean_deserialization()
|
|
671
|
-
elif obj_type ==
|
|
703
|
+
elif obj_type == SerializableTypes.LIST.value:
|
|
672
704
|
elt = self.list_deserialization()
|
|
673
|
-
elif obj_type ==
|
|
705
|
+
elif obj_type == SerializableTypes.PARAMETER.value:
|
|
674
706
|
elt = self.parameter_deserialization()
|
|
675
707
|
else:
|
|
676
708
|
print(f'invalid object type {obj_type}')
|
|
709
|
+
elt = None # desired behavior?
|
|
677
710
|
return elt
|
|
678
711
|
|
|
679
712
|
def list_deserialization(self) -> list:
|
|
@@ -774,4 +807,4 @@ class DeSerializer:
|
|
|
774
807
|
data=self.list_deserialization(),
|
|
775
808
|
)
|
|
776
809
|
dte.timestamp = timestamp
|
|
777
|
-
return dte
|
|
810
|
+
return dte
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pymodaq
|
|
3
|
-
Version: 4.4.
|
|
3
|
+
Version: 4.4.9
|
|
4
4
|
Summary: Modular Data Acquisition with Python
|
|
5
5
|
Project-URL: Homepage, http://pymodaq.cnrs.fr
|
|
6
6
|
Project-URL: Source, https://github.com/PyMoDAQ/PyMoDAQ
|
|
@@ -27,6 +27,7 @@ License: The MIT License (MIT)
|
|
|
27
27
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
28
28
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
29
29
|
THE SOFTWARE.
|
|
30
|
+
License-File: AUTHORS.md
|
|
30
31
|
License-File: LICENSE
|
|
31
32
|
Classifier: Development Status :: 5 - Production/Stable
|
|
32
33
|
Classifier: Environment :: Other Environment
|
|
@@ -44,7 +45,7 @@ Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
|
44
45
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
45
46
|
Classifier: Topic :: Software Development :: User Interfaces
|
|
46
47
|
Requires-Python: >=3.7
|
|
47
|
-
Requires-Dist: bayesian-optimization
|
|
48
|
+
Requires-Dist: bayesian-optimization<2.0.0
|
|
48
49
|
Requires-Dist: easydict
|
|
49
50
|
Requires-Dist: importlib-metadata; python_version < '3.8'
|
|
50
51
|
Requires-Dist: multipledispatch
|
|
@@ -62,7 +63,8 @@ Requires-Dist: qtpy
|
|
|
62
63
|
Requires-Dist: scipy
|
|
63
64
|
Requires-Dist: setuptools>=60
|
|
64
65
|
Requires-Dist: simple-pid
|
|
65
|
-
Requires-Dist: tables<3.9
|
|
66
|
+
Requires-Dist: tables<3.9; python_version < '3.10'
|
|
67
|
+
Requires-Dist: tables>=3.10; python_version >= '3.10'
|
|
66
68
|
Requires-Dist: toml
|
|
67
69
|
Description-Content-Type: text/x-rst
|
|
68
70
|
|
|
@@ -3,13 +3,13 @@ pymodaq/dashboard.py,sha256=4fbV92erom0yWwqPMtx3KW1q-d6QYflV-EhOZMg24a4,64476
|
|
|
3
3
|
pymodaq/icon.ico,sha256=hOHHfNDENKphQvG1WDleSEYcHukneR2eRFJu8isIlD4,74359
|
|
4
4
|
pymodaq/splash.png,sha256=ow8IECF3tPRUMA4tf2tMu1aRiMaxx91_Y2ckVxkrmF0,53114
|
|
5
5
|
pymodaq/control_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
pymodaq/control_modules/daq_move.py,sha256
|
|
7
|
-
pymodaq/control_modules/daq_move_ui.py,sha256=
|
|
6
|
+
pymodaq/control_modules/daq_move.py,sha256=-bYcTAMDNliNDoQKZ9skp6RohZv_yNU3ipyoQL16i0E,37967
|
|
7
|
+
pymodaq/control_modules/daq_move_ui.py,sha256=qHlZW_FQUCIENBVlZ1HciPzmXTcLf1kyXi3YHWqJyV8,16447
|
|
8
8
|
pymodaq/control_modules/daq_viewer.py,sha256=5CYmdWHGE7sQApeMfdWNV3zbPyoxxYtzFlQ1PaEw4fI,57883
|
|
9
9
|
pymodaq/control_modules/daq_viewer_ui.py,sha256=FWP3jdIOR9vTgYqNaaodteGZ3dwgQ1GdWKrOpOAuSrs,15693
|
|
10
10
|
pymodaq/control_modules/mocks.py,sha256=hh_xSWp9g1UV3NAQVD9Ft9tNWfTsSvKU0OU0trgzP2w,1956
|
|
11
|
-
pymodaq/control_modules/move_utility_classes.py,sha256=
|
|
12
|
-
pymodaq/control_modules/utils.py,sha256=
|
|
11
|
+
pymodaq/control_modules/move_utility_classes.py,sha256=y0gzF1DnKdh8i3b34FasJHRlFHVaYQn2rp93ntLfjf0,43465
|
|
12
|
+
pymodaq/control_modules/utils.py,sha256=3uJWizLRKmHvM_9sUOhChrCW31r2Q8GtyYpFw1diBKE,19985
|
|
13
13
|
pymodaq/control_modules/viewer_utility_classes.py,sha256=OHxwue1t3z2AXyeqNjnwPT2pMc8yXhnqyiWc9IdCI2c,26841
|
|
14
14
|
pymodaq/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
15
|
pymodaq/examples/custom_app.py,sha256=2wQR0hlPWjZrWK0abNF6ASv8iQyJqRn2CKnBa_nAgN4,10452
|
|
@@ -38,8 +38,8 @@ pymodaq/examples/Labview_TCP_Client/cmd_types.ctl,sha256=gwuDyGcte11Zqx0C-U8ljRy
|
|
|
38
38
|
pymodaq/extensions/__init__.py,sha256=MGZb_QDwL5nlV7XLvBGW9x0GpUwPSpECyD8lCf9EN38,459
|
|
39
39
|
pymodaq/extensions/console.py,sha256=_hlHupD7DeoOcvEvN_OiGDB6_no50x2J8R6pE2eACgo,2303
|
|
40
40
|
pymodaq/extensions/daq_logger.py,sha256=hEAb98fv1qJxcH9NPvaiLp1SPWkBVBwpujJhuyAiVmQ,18820
|
|
41
|
-
pymodaq/extensions/daq_scan.py,sha256=
|
|
42
|
-
pymodaq/extensions/daq_scan_ui.py,sha256=
|
|
41
|
+
pymodaq/extensions/daq_scan.py,sha256=gZwol7p4puiLGAiUexCGYh5iWFJXHvVDgK8menFCgZk,50684
|
|
42
|
+
pymodaq/extensions/daq_scan_ui.py,sha256=EHIpTZIG8wTtPI9zVzUTYBgSvvYYjc4KGSNXKGR18RI,10182
|
|
43
43
|
pymodaq/extensions/h5browser.py,sha256=eQZ8YhPHdiBCyHIn1JJJLn7OgZsc1XlcETgqdafofZs,1140
|
|
44
44
|
pymodaq/extensions/utils.py,sha256=sh4SxJx5_lGJ6aJE8p8VJ2zrptW8pyze73aT_52xOwQ,2255
|
|
45
45
|
pymodaq/extensions/bayesian/__init__.py,sha256=QMV9tq8Axi6YjoGj4UguBO8Zvuh26r5s91bm6YU7Itk,55
|
|
@@ -47,11 +47,11 @@ pymodaq/extensions/bayesian/bayesian_optimisation.py,sha256=zB6DoyHx6nsKHsl3G4T0
|
|
|
47
47
|
pymodaq/extensions/bayesian/utils.py,sha256=1m_NpYMr-Swg2ImtMvbh-XOxutkAVwc0M2BWeK_NMIg,15544
|
|
48
48
|
pymodaq/extensions/pid/__init__.py,sha256=jm4axOgTnYVPsftjcjlvC_07KsdTY1H7CnOCYhOvY-o,473
|
|
49
49
|
pymodaq/extensions/pid/actuator_controller.py,sha256=SOE2GjevbqxqxXewW0DMgoqNL_0CaPdNLjyKNc6ULKI,377
|
|
50
|
-
pymodaq/extensions/pid/daq_move_PID.py,sha256=
|
|
50
|
+
pymodaq/extensions/pid/daq_move_PID.py,sha256=oH-Q9QLQgxsa8J3iWPpHMAPUCfbr72NWww1CvtKDsOA,2155
|
|
51
51
|
pymodaq/extensions/pid/pid_controller.py,sha256=5iTEiv69MlHW7-sUFCzvQlqZzAoXiJ_mRQtFntvFBIE,28511
|
|
52
52
|
pymodaq/extensions/pid/utils.py,sha256=pxexKSg-3a1CWLQtCFZR6ZtdI8NY1Yl7J87aSBi2q2o,7984
|
|
53
53
|
pymodaq/post_treatment/__init__.py,sha256=xaaLFZJ7OLqI_7yPurFk89A7m2ywSbYDXAsdE-QQ8Zg,81
|
|
54
|
-
pymodaq/post_treatment/load_and_plot.py,sha256=
|
|
54
|
+
pymodaq/post_treatment/load_and_plot.py,sha256=a-qU4TfW7htsa_4CcJy_mB8N8Fw12Je7q7syud3y7tQ,13902
|
|
55
55
|
pymodaq/post_treatment/process_to_scalar.py,sha256=NHntybqpDhDjQJ224Dhf9Ij_ql-fAEMRT6egA6UEGfA,11568
|
|
56
56
|
pymodaq/post_treatment/daq_analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
57
|
pymodaq/post_treatment/daq_measurement/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -59,15 +59,15 @@ pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py,sha256=1u7hWDaiwsZ
|
|
|
59
59
|
pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui,sha256=PyzbCWPMkh5oIYYteZczXyWMeHKW9EJmM1QlzXhnyTk,7037
|
|
60
60
|
pymodaq/post_treatment/daq_measurement/daq_measurement_main.py,sha256=CAKwcWMOD86aXB8mbdxOK7e8nZRos5d59FzDtqK1QoY,17093
|
|
61
61
|
pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat,sha256=e1tu2A67MS9fk3jhriF6saQgRxWIucIvNW92iWXFP6E,164
|
|
62
|
-
pymodaq/resources/VERSION,sha256=
|
|
62
|
+
pymodaq/resources/VERSION,sha256=HCHu__82Om9w1u_QhsnnzUERTkbBbAZvkhKcnN1x334,19
|
|
63
63
|
pymodaq/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
-
pymodaq/resources/config_template.toml,sha256=
|
|
64
|
+
pymodaq/resources/config_template.toml,sha256=twhcKsROU3fFKPQq7CcB5gXI4w6U6ZeAxaUQZcRmxZ4,3232
|
|
65
65
|
pymodaq/resources/preset_default.xml,sha256=Dt8iWLwPPOPtcG00JCVP-mh-G7KC6B0YN8hd8RQdnNI,27256
|
|
66
66
|
pymodaq/resources/setup_plugin.py,sha256=jvMuSp4UxGaPUe9uPUvHg9DrdwyFakG6_sFy_zXb1f8,3182
|
|
67
67
|
pymodaq/resources/triangulation_data.npy,sha256=Dzq6eE8f_i7Woloy1iUn6N1OfVdBZ4WnK4J4SCoqXso,9320
|
|
68
68
|
pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat,sha256=gqBmrc6Cfzn7wIZQtzgcglKRQ8zLXLW9Xt8LWxkJdw0,205
|
|
69
69
|
pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc,sha256=S99847o7hvKYOWa9lR3qErMHwcjhjYPEduoq2ylCn4I,10123
|
|
70
|
-
pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py,sha256=
|
|
70
|
+
pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py,sha256=1JdB2hKdHSrBH-uIFylPcuTtTN94hhgiP0zlfWRyAfQ,8332434
|
|
71
71
|
pymodaq/resources/QtDesigner_Ressources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
72
|
pymodaq/resources/QtDesigner_Ressources/credit.rst,sha256=F2PpCDeMkzYWb47RwrIrwujefiiiN25gI2d3s5QqjeI,342
|
|
73
73
|
pymodaq/resources/QtDesigner_Ressources/icons.svg,sha256=7leLubaJv4E_JnmTdQw00HvrmFBZ3koShefBUbZ2UkU,5703
|
|
@@ -312,7 +312,7 @@ pymodaq/utils/chrono_timer.py,sha256=rwX8apS8B-IKhA0Cp2H9tLz0BRN7G3Pg5ptozvd3MKM
|
|
|
312
312
|
pymodaq/utils/config.py,sha256=0QqoBJC4ECuIeh1UsvUQqhxkKl7Vfgi4iERp-6qNWAc,16202
|
|
313
313
|
pymodaq/utils/conftests.py,sha256=3Ak8WEpa3EhAp73Yb1LLq8YFONhPqiL7gG9eSDIoTNc,58
|
|
314
314
|
pymodaq/utils/daq_utils.py,sha256=0jTrbT0aaZr3KaTgeDicmK9FbVnu3iaWBmNHnNJpr3A,28050
|
|
315
|
-
pymodaq/utils/data.py,sha256=
|
|
315
|
+
pymodaq/utils/data.py,sha256=v5ONtOH4E51ZNIIsPEtMTnHlFSrhC7t5gwno_Z3dckw,114198
|
|
316
316
|
pymodaq/utils/enums.py,sha256=wpRipioUJkKcEfoaY2NrDQ2WhGxZTZiZoJty5f2Ljpc,2236
|
|
317
317
|
pymodaq/utils/exceptions.py,sha256=wLO6VlofzfwWkOOWMN2B-3NEWMfpgygyeEdakIx_rAs,668
|
|
318
318
|
pymodaq/utils/factory.py,sha256=QLqAPFnTZ93eUpmAAIr7kESDk2enD57RNSuFUsjxE4E,2311
|
|
@@ -320,7 +320,7 @@ pymodaq/utils/logger.py,sha256=VxymWeeS38VjNre3wjY_lBv06ynstPyI5JrFNgo4PXc,2754
|
|
|
320
320
|
pymodaq/utils/math_utils.py,sha256=bh8pMXomoAv_Lxfq26izDacK9RByFi3QUbPd-zFVqpA,18532
|
|
321
321
|
pymodaq/utils/messenger.py,sha256=N5SPc9NomIGtK0TihQ0oq9evlxyWNYELWfpr2s8PoWw,2072
|
|
322
322
|
pymodaq/utils/qvariant.py,sha256=iIBp-DDk5OVBIEqX5SwqwrJyy5t2cRgFFyfgvxQOHqM,311
|
|
323
|
-
pymodaq/utils/slicing.py,sha256=
|
|
323
|
+
pymodaq/utils/slicing.py,sha256=gvxJPe-A7pWoCSZ1U2ukOq3m6VRf981ggSmcETQ5DGI,2239
|
|
324
324
|
pymodaq/utils/units.py,sha256=Tj4O5qZBMBuUbjTZSH10UzSbU5z_SHVSu2VLw82tceE,3959
|
|
325
325
|
pymodaq/utils/abstract/__init__.py,sha256=m7GEoQdFlnWuhwp-qlJ5S_Il6pKDyMEX8MAPlfDSxKU,1260
|
|
326
326
|
pymodaq/utils/abstract/logger.py,sha256=I-t-2nSIVHHUfHJ-3IoqsuULZiIsXRe4saotaEL3-Fk,1095
|
|
@@ -336,22 +336,22 @@ pymodaq/utils/gui_utils/layout.py,sha256=6oczLLGwwEN4EQ8yUDnz0-4Ue2wlyCRklKsVD1G
|
|
|
336
336
|
pymodaq/utils/gui_utils/list_picker.py,sha256=ddYnRTlRlgwdJSy0Q98IzYWHzIf2GS6ABl8XSS9kVXM,1190
|
|
337
337
|
pymodaq/utils/gui_utils/loader_utils.py,sha256=Gg0d31fjkqDq3l1WuRMbLzKiKPOIYdbUrcfGOgoXRk0,1298
|
|
338
338
|
pymodaq/utils/gui_utils/utils.py,sha256=aPxFCnG4skDp-0UuhAudq6BPZnEXoAf6FOEJyrhUjx0,6089
|
|
339
|
-
pymodaq/utils/gui_utils/widgets/__init__.py,sha256=
|
|
339
|
+
pymodaq/utils/gui_utils/widgets/__init__.py,sha256=vtDpBo8YEW6KR_Kyu85Po1hlTbyudmiRRS00jiQyst0,217
|
|
340
340
|
pymodaq/utils/gui_utils/widgets/label.py,sha256=C2MU8i_Yy_oVRW7yal_ghB1Y5Bj_a9o8IFZWW3br-KM,600
|
|
341
341
|
pymodaq/utils/gui_utils/widgets/lcd.py,sha256=jBleZJ-ChpbSt0iJ3T-XFwAhPUTBsofceCXJylzgA9s,3325
|
|
342
342
|
pymodaq/utils/gui_utils/widgets/push.py,sha256=pS_KTG6JV4EKmaUzpX1pAX5RsXXDeRxBWOEwcY-BZKA,4748
|
|
343
343
|
pymodaq/utils/gui_utils/widgets/qled.py,sha256=HuVDYApG8rwiiNhVrN-ZWZ2W8OxK7A29MX1zQAKjJqc,2096
|
|
344
|
-
pymodaq/utils/gui_utils/widgets/spinbox.py,sha256=
|
|
344
|
+
pymodaq/utils/gui_utils/widgets/spinbox.py,sha256=0wl1IWgvxYu-qPEu3MicA6Du0wY2SpBeOeC0jMAKWdA,1408
|
|
345
345
|
pymodaq/utils/gui_utils/widgets/table.py,sha256=zMvjf5-HUx_sHV3Wh99HlH4LO1GLDBnS1ONOTXfKjnc,8770
|
|
346
346
|
pymodaq/utils/gui_utils/widgets/tree_layout.py,sha256=OCXj59SzVQPi1ksxxvvbr5AIZ5mXN0_JdwcNMMR5wUg,6625
|
|
347
347
|
pymodaq/utils/gui_utils/widgets/tree_toml.py,sha256=0O2j_F0kzVjyG2dSwYtw4HNtmS0WJo0VWZF1rnil68A,4704
|
|
348
348
|
pymodaq/utils/h5modules/__init__.py,sha256=x3_4ELvG9onTKEFgIt9xEGg_mA1bB07dvVbU9q0xQKw,104
|
|
349
349
|
pymodaq/utils/h5modules/backends.py,sha256=i-3x_DtTbnYKqft9Y3V1PuinGRXZ9DVv0Mg9TNTA33Q,33269
|
|
350
350
|
pymodaq/utils/h5modules/browsing.py,sha256=B39JZFdm3WCaOTnG0tioPnp6A1zFCRWZkbcXfgI_eHE,23542
|
|
351
|
-
pymodaq/utils/h5modules/data_saving.py,sha256=
|
|
351
|
+
pymodaq/utils/h5modules/data_saving.py,sha256=rI7uxfhHEWG7Nl6lqvXwBeRpKAJEkKwBqRIT5MsL4j8,43255
|
|
352
352
|
pymodaq/utils/h5modules/exporter.py,sha256=iCfUjkuGjs3-ijcUkt38NMrjO8tI9wXShvwYHJIUU70,3670
|
|
353
353
|
pymodaq/utils/h5modules/h5logging.py,sha256=UhRo9YvjU5Ujw_i5aPHXOgOdw_IszxmekOa7gYUY5AQ,2492
|
|
354
|
-
pymodaq/utils/h5modules/module_saving.py,sha256=
|
|
354
|
+
pymodaq/utils/h5modules/module_saving.py,sha256=3x85IrN-YNK2-xySpDA7UJYgvt3fvoGcEz6_OCXxnx0,14271
|
|
355
355
|
pymodaq/utils/h5modules/saving.py,sha256=Hfw8gGG7AM_ZroxIOhTvfwHr4CDW9VarWw-zMkQS5TM,34036
|
|
356
356
|
pymodaq/utils/h5modules/utils.py,sha256=0isF661xthXlT3hFJvXTcgGqkZcGQmSanTNAGSInez4,3368
|
|
357
357
|
pymodaq/utils/h5modules/exporters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -369,12 +369,12 @@ pymodaq/utils/leco/utils.py,sha256=jCHhco89uG9UA-t9LpaEuyZQMQW5XQP_t0URcvqLDNU,2
|
|
|
369
369
|
pymodaq/utils/managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
370
370
|
pymodaq/utils/managers/action_manager.py,sha256=v99NuRq7uT_PNTAsqbUyoWyDGUzhlP6dYtdAO30_cbc,17756
|
|
371
371
|
pymodaq/utils/managers/batchscan_manager.py,sha256=jcL08YvFafX5kiy03BV1_6obt2Xogiby5pvTKeN8_ho,13905
|
|
372
|
-
pymodaq/utils/managers/modules_manager.py,sha256=
|
|
372
|
+
pymodaq/utils/managers/modules_manager.py,sha256=Fdp92kpHKjULAfFnCSftyIzwLL5XTjlLc3kJnFzxANw,20881
|
|
373
373
|
pymodaq/utils/managers/overshoot_manager.py,sha256=fe_CR1Bkw85BER34MoVFlm-xtKl9Hr9bkf2nyaz9hXg,7158
|
|
374
374
|
pymodaq/utils/managers/parameter_manager.py,sha256=hO3RXcpkYOtuqjAQaD5H3r71rVEHntYg64VHZwVCQBg,11473
|
|
375
375
|
pymodaq/utils/managers/preset_manager.py,sha256=m8r_TcfFbUatddBX9SJj7XI_GZ3FhoiwzhFgocw9jZ8,9481
|
|
376
376
|
pymodaq/utils/managers/preset_manager_utils.py,sha256=d148YBjeNOP9FTkFoTsfdRDxMIXOR8JJHqbOmoL2aVA,8155
|
|
377
|
-
pymodaq/utils/managers/remote_manager.py,sha256=
|
|
377
|
+
pymodaq/utils/managers/remote_manager.py,sha256=SwzefJuGpgzvvjTbJSo3T3Rc2rncvHHyPYPBd8gCQX8,22251
|
|
378
378
|
pymodaq/utils/managers/roi_manager.py,sha256=RRICNSLMxiUoq8tEBKihpdydIVAu78ogkYOFWWphaHE,29892
|
|
379
379
|
pymodaq/utils/parameter/__init__.py,sha256=fMljZeQ9EVvh2bmss550C5BpxFeKOxT8_AVJdPxQ0kQ,433
|
|
380
380
|
pymodaq/utils/parameter/ioxml.py,sha256=jduHhMrpc0lkSJlznnI-LRHUJ0Ofc4PoFfNlxLbLmw8,17091
|
|
@@ -388,7 +388,7 @@ pymodaq/utils/parameter/pymodaq_ptypes/led.py,sha256=oDKM3k4aPy_CArgQIEqjLx3KG5C
|
|
|
388
388
|
pymodaq/utils/parameter/pymodaq_ptypes/list.py,sha256=bXGlUxKVAA5_QY41BmzG2iWWoh1Qq-w-QHgMo-_Kc7Q,5716
|
|
389
389
|
pymodaq/utils/parameter/pymodaq_ptypes/numeric.py,sha256=lzklQWAnzh9LDC20hdlGbAj2NdVzNDDeJke1KnPi7GU,560
|
|
390
390
|
pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py,sha256=vIhWscDZRM7Bc3RRf4kBs2g0QNE3-tfp1P4T8EO7AxY,5534
|
|
391
|
-
pymodaq/utils/parameter/pymodaq_ptypes/slide.py,sha256=
|
|
391
|
+
pymodaq/utils/parameter/pymodaq_ptypes/slide.py,sha256=1mhGLSei9DRqNKhDF5PFR7WNfBREDZ-TjPHD53ETs7g,5751
|
|
392
392
|
pymodaq/utils/parameter/pymodaq_ptypes/table.py,sha256=kM6Kb_KZfJ-sA6tSgn76EDBZK_Cbpc4jfw2KEJ5E2Cg,4819
|
|
393
393
|
pymodaq/utils/parameter/pymodaq_ptypes/tableview.py,sha256=EXMHEGlkL2JC7_fau2ysL3oCvq2XmeCuJNYEu-hp9iY,4866
|
|
394
394
|
pymodaq/utils/parameter/pymodaq_ptypes/text.py,sha256=iPMS3dEz2evsX_1ThX-sqNzfyIL8w0D0tpM87jF8ODo,4708
|
|
@@ -404,7 +404,7 @@ pymodaq/utils/plotting/data_viewers/viewer.py,sha256=DhPa4Dw42HfOdqEGEq2KKmIXg_z
|
|
|
404
404
|
pymodaq/utils/plotting/data_viewers/viewer0D.py,sha256=YgCNuqAW5NOURw2pqPWT4WHHaowXjySDWoYgY7lbl-s,11609
|
|
405
405
|
pymodaq/utils/plotting/data_viewers/viewer1D.py,sha256=7Iz0fDIgP_IpDt2QtB3Do8nONM0eZemcHSrv3XeJn_Q,32239
|
|
406
406
|
pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py,sha256=u91tVhmi_WIlVa8areapb0xWu0NOr5pVRLMylY_in7g,7432
|
|
407
|
-
pymodaq/utils/plotting/data_viewers/viewer2D.py,sha256=
|
|
407
|
+
pymodaq/utils/plotting/data_viewers/viewer2D.py,sha256=KKWIQoFeZ21WMhByUcMC5WNQQu1Ahy_s-8vwlfc5HE4,46495
|
|
408
408
|
pymodaq/utils/plotting/data_viewers/viewer2D_basic.py,sha256=aRLu8JVZZI8PH6Lxl8oITpHwUXaUY3PyLW6eHzkf76o,5588
|
|
409
409
|
pymodaq/utils/plotting/data_viewers/viewerND.py,sha256=NrEPrFcE-UxuC95l5W258YqrP58-4WvTg2H80wfucaA,38531
|
|
410
410
|
pymodaq/utils/plotting/items/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -437,10 +437,11 @@ pymodaq/utils/svg/svg_view.py,sha256=bmXpDqnw9S-Bp3F8Hi_oeYB5Y9gebiCNsQWVJzCq-PA
|
|
|
437
437
|
pymodaq/utils/svg/svg_viewer2D.py,sha256=LTJ3Ulb5zWXdRPr7vqcWumbpq7ZctzrYUMtD5QV3x60,1523
|
|
438
438
|
pymodaq/utils/tcp_ip/__init__.py,sha256=1e_EK0AgvdoLAD_CSGGEaITZdy6OWCO7ih9IAIp7HT4,81
|
|
439
439
|
pymodaq/utils/tcp_ip/mysocket.py,sha256=StAWj8dzHeMnbLj68Sel81uWFy-YkKVNRnVf7gXrESI,3452
|
|
440
|
-
pymodaq/utils/tcp_ip/serializer.py,sha256=
|
|
440
|
+
pymodaq/utils/tcp_ip/serializer.py,sha256=kXmvFLR5ZedjY2rVGUs83lsJk9Z9l_iAWR6srDxzaYQ,29262
|
|
441
441
|
pymodaq/utils/tcp_ip/tcp_server_client.py,sha256=xIMTNgVW_rKK0yTi4FDNFLf85-Akb27Jz2LdrvOrP68,30660
|
|
442
|
-
pymodaq-4.4.
|
|
443
|
-
pymodaq-4.4.
|
|
444
|
-
pymodaq-4.4.
|
|
445
|
-
pymodaq-4.4.
|
|
446
|
-
pymodaq-4.4.
|
|
442
|
+
pymodaq-4.4.9.dist-info/METADATA,sha256=QZsI_riuGZguU4s4L6f93v9MzJOs9GfPcectvJw26Ac,7737
|
|
443
|
+
pymodaq-4.4.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
444
|
+
pymodaq-4.4.9.dist-info/entry_points.txt,sha256=RAzdYNjvUT28I2eiCKki_g2NzXq0woWxhev6lwzwRv8,348
|
|
445
|
+
pymodaq-4.4.9.dist-info/licenses/AUTHORS.md,sha256=8f-B6E-I2KPlBSJIcutEZTedoYQHERaXADbx6q_9vjg,1295
|
|
446
|
+
pymodaq-4.4.9.dist-info/licenses/LICENSE,sha256=VKOejxexXAe3XwfhAhcFGqeXQ12irxVHdeAojZwFEI8,1108
|
|
447
|
+
pymodaq-4.4.9.dist-info/RECORD,,
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Here is a list of the main contributors:
|
|
2
|
+
|
|
3
|
+
## Main modules
|
|
4
|
+
***************
|
|
5
|
+
|
|
6
|
+
Functionalities
|
|
7
|
+
---------------
|
|
8
|
+
|
|
9
|
+
* Sébastien Weber, Research Engineer at CEMES/CNRS
|
|
10
|
+
* David Bresteau, Research Engineer at Attolab facility, CEA Saclay
|
|
11
|
+
* Nicolas Tappy, Engineer at Attolight (https://attolight.com/)
|
|
12
|
+
|
|
13
|
+
Cleaning
|
|
14
|
+
--------
|
|
15
|
+
|
|
16
|
+
* Sébastien Weber, Research Engineer at CEMES/CNRS
|
|
17
|
+
* David Trémouilles, Researcher at LAAS/CNRS
|
|
18
|
+
* Loïc GUILMARD, Engineer at CETHIL/CNRS
|
|
19
|
+
|
|
20
|
+
## Plugins
|
|
21
|
+
**********
|
|
22
|
+
|
|
23
|
+
* Sébastien Weber, Research Engineer at CEMES/CNRS
|
|
24
|
+
* Sophie Meuret, Researcher at CEMES/CNRS
|
|
25
|
+
* David Bresteau, Research Engineer at Attolab facility, CEA Saclay
|
|
26
|
+
* and many others...
|
|
27
|
+
|
|
28
|
+
## Extensions
|
|
29
|
+
*************
|
|
30
|
+
|
|
31
|
+
* Sébastien Weber, Research Engineer at CEMES/CNRS
|
|
32
|
+
* Romain Geneaux, Researcher at CEA Saclay contributed to the PyMoDAQ-Femto extension
|
|
33
|
+
|
|
34
|
+
## Documentation
|
|
35
|
+
****************
|
|
36
|
+
|
|
37
|
+
* Sébastien Weber, Research Engineer at CEMES/CNRS
|
|
38
|
+
* Matthieu Cabos helped with this documentation
|
|
39
|
+
* David Bresteau wrote the documentation of the PID extension and the tutorial: :ref:`plugin_development`
|
|
40
|
+
* Loïc GUILMARD, Engineer at CETHIL/CNRS
|
|
41
|
+
|
|
42
|
+
## Testing
|
|
43
|
+
**********
|
|
44
|
+
|
|
45
|
+
* Sébastien Weber, Research Engineer at CEMES/CNRS
|
|
46
|
+
* Pierre Jannot wrote tests with a total of 5000 lines of code tested during his internship at CEMES in 2021
|
|
File without changes
|
|
File without changes
|