pymodaq 5.0.5__py3-none-any.whl → 5.1.0a0__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.

Files changed (53) hide show
  1. pymodaq/control_modules/daq_move.py +77 -64
  2. pymodaq/control_modules/daq_move_ui.py +16 -15
  3. pymodaq/control_modules/daq_viewer.py +95 -87
  4. pymodaq/control_modules/daq_viewer_ui.py +22 -23
  5. pymodaq/control_modules/mocks.py +2 -2
  6. pymodaq/control_modules/move_utility_classes.py +28 -19
  7. pymodaq/control_modules/thread_commands.py +138 -0
  8. pymodaq/control_modules/utils.py +88 -20
  9. pymodaq/control_modules/viewer_utility_classes.py +8 -17
  10. pymodaq/dashboard.py +90 -27
  11. pymodaq/examples/qt_less_standalone_module.py +48 -11
  12. pymodaq/extensions/__init__.py +7 -3
  13. pymodaq/extensions/adaptive/__init__.py +2 -0
  14. pymodaq/extensions/adaptive/adaptive_optimization.py +159 -0
  15. pymodaq/extensions/adaptive/loss_function/_1d_loss_functions.py +73 -0
  16. pymodaq/extensions/adaptive/loss_function/_2d_loss_functions.py +86 -0
  17. pymodaq/extensions/adaptive/loss_function/__init__.py +3 -0
  18. pymodaq/extensions/adaptive/loss_function/loss_factory.py +106 -0
  19. pymodaq/extensions/adaptive/utils.py +97 -0
  20. pymodaq/extensions/bayesian/__init__.py +1 -1
  21. pymodaq/extensions/bayesian/acquisition/__init__.py +2 -0
  22. pymodaq/extensions/bayesian/acquisition/acquisition_function_factory.py +71 -0
  23. pymodaq/extensions/bayesian/acquisition/base_acquisition_function.py +86 -0
  24. pymodaq/extensions/bayesian/bayesian_optimization.py +121 -0
  25. pymodaq/extensions/bayesian/utils.py +27 -286
  26. pymodaq/extensions/daq_logger/daq_logger.py +7 -12
  27. pymodaq/extensions/daq_logger/h5logging.py +1 -1
  28. pymodaq/extensions/daq_scan.py +18 -47
  29. pymodaq/extensions/h5browser.py +3 -34
  30. pymodaq/extensions/optimizers_base/__init__.py +0 -0
  31. pymodaq/extensions/{bayesian/bayesian_optimisation.py → optimizers_base/optimizer.py} +441 -334
  32. pymodaq/extensions/optimizers_base/thread_commands.py +20 -0
  33. pymodaq/extensions/optimizers_base/utils.py +378 -0
  34. pymodaq/extensions/pid/pid_controller.py +6 -10
  35. pymodaq/extensions/utils.py +12 -0
  36. pymodaq/utils/data.py +1 -0
  37. pymodaq/utils/gui_utils/loader_utils.py +2 -0
  38. pymodaq/utils/h5modules/module_saving.py +134 -22
  39. pymodaq/utils/leco/daq_move_LECODirector.py +73 -73
  40. pymodaq/utils/leco/daq_xDviewer_LECODirector.py +36 -84
  41. pymodaq/utils/leco/director_utils.py +25 -10
  42. pymodaq/utils/leco/leco_director.py +65 -26
  43. pymodaq/utils/leco/pymodaq_listener.py +118 -68
  44. pymodaq/utils/leco/utils.py +24 -24
  45. pymodaq/utils/managers/modules_manager.py +37 -8
  46. pymodaq/utils/scanner/scanners/_1d_scanners.py +0 -38
  47. pymodaq/utils/scanner/scanners/_2d_scanners.py +0 -58
  48. {pymodaq-5.0.5.dist-info → pymodaq-5.1.0a0.dist-info}/METADATA +4 -3
  49. {pymodaq-5.0.5.dist-info → pymodaq-5.1.0a0.dist-info}/RECORD +52 -38
  50. {pymodaq-5.0.5.dist-info → pymodaq-5.1.0a0.dist-info}/entry_points.txt +0 -2
  51. pymodaq/utils/leco/desktop.ini +0 -2
  52. {pymodaq-5.0.5.dist-info → pymodaq-5.1.0a0.dist-info}/WHEEL +0 -0
  53. {pymodaq-5.0.5.dist-info → pymodaq-5.1.0a0.dist-info}/licenses/LICENSE +0 -0
@@ -3,27 +3,17 @@ import subprocess
3
3
  import sys
4
4
  from typing import Any, Optional, Union, get_args, TypeVar
5
5
 
6
+
6
7
  from pymodaq.utils import data
7
- # import also the DeSerializer for easier imports in dependents
8
- from pymodaq_utils.serialize.serializer_legacy import Serializer, DeSerializer, SerializableFactory
8
+ from pymodaq_utils.serialize.factory import SerializableFactory
9
9
 
10
- # type: ignore # noqa
11
10
  from pymodaq_utils.logger import set_logger
12
11
 
13
12
 
14
13
  logger = set_logger('leco_utils')
15
- ser_factory = SerializableFactory()
16
14
  JSON_TYPES = Union[str, int, float]
17
15
 
18
-
19
-
20
- def serialize_object(pymodaq_object: Union[SERIALIZABLE, Any]) -> Union[str, Any]:
21
- """Serialize a pymodaq object, if it is not JSON compatible."""
22
- if isinstance(pymodaq_object, get_args(JSON_TYPES)):
23
- return pymodaq_object
24
- else:
25
- return Serializer(pymodaq_object).to_b64_string() # will raise a proper error if the object
26
- #is not serializable
16
+ ser_factory = SerializableFactory()
27
17
 
28
18
 
29
19
  ## this form below is to be compatible with python <= 3.10
@@ -36,22 +26,33 @@ for klass in ser_factory.get_serializables()[1:]:
36
26
  def binary_serialization(
37
27
  pymodaq_object: Union[SERIALIZABLE, Any],
38
28
  ) -> tuple[Optional[Any], Optional[list[bytes]]]:
39
- """Serialize (binary) a pymodaq object, if it is not JSON compatible."""
29
+ """Serialize (binary) a pymodaq object, if it is not JSON compatible.
30
+
31
+ If an object is JSON serializable, we can send it as a value to the JSON
32
+ encoder and do not need a binary value.
33
+ Otherwise, the JSON value is None and the serialized object is returned.
34
+
35
+ :param pymodaq_object: the object which shall be sent via LECO protocol.
36
+ :return: tuple of the JSON value and a list of additional payload frames.
37
+ """
40
38
  if isinstance(pymodaq_object, get_args(JSON_TYPES)):
41
39
  return pymodaq_object, None
42
- elif isinstance(pymodaq_object, get_args(SERIALIZABLE)):
43
- return None, [Serializer(pymodaq_object).to_bytes()]
44
- else:
45
- raise ValueError(
46
- f"{pymodaq_object} of type '{type(pymodaq_object).__name__}' is neither "
47
- "JSON serializable, nor via PyMoDAQ."
48
- )
40
+ return None, [SerializableFactory().get_apply_serializer(pymodaq_object)]
41
+
49
42
 
50
43
 
51
44
  def binary_serialization_to_kwargs(
52
45
  pymodaq_object: Union[SERIALIZABLE, Any], data_key: str = "data"
53
46
  ) -> dict[str, Any]:
54
- """Create a dictionary of data parameters and of additional payload to send."""
47
+ """Create a dictionary of data parameters and of additional payload to send.
48
+
49
+ This method prepares arguments for PyLECO's :meth:`Communicator.ask_rpc` method.
50
+ In order to send a binary value as an argument `data_key` for a method, the
51
+ argument has to be None, which is JSON describable.
52
+ The binary data has to be sent via the `additional_payload` parameter.
53
+ If the data can be sent as JSON, it is sent directly (`data_key`) and no
54
+ additional frames are sent.
55
+ """
55
56
  d, b = binary_serialization(pymodaq_object=pymodaq_object)
56
57
  return {data_key: d, "additional_payload": b}
57
58
 
@@ -69,6 +70,5 @@ def start_coordinator():
69
70
  run_coordinator()
70
71
  else:
71
72
  logger.info('Coordinator already running')
72
- except ConnectionRefusedError as e:
73
+ except ConnectionRefusedError:
73
74
  run_coordinator()
74
-
@@ -1,4 +1,4 @@
1
- from typing import List, Union, TYPE_CHECKING
1
+ from typing import List, Union, TYPE_CHECKING, Optional, Sequence
2
2
 
3
3
  from collections import OrderedDict
4
4
  from qtpy.QtCore import QObject, Signal, Slot, QThread
@@ -68,9 +68,26 @@ class ModulesManager(QObject, ParameterManager):
68
68
  ]},
69
69
  ]
70
70
 
71
- def __init__(self, detectors=[], actuators=[], selected_detectors=[], selected_actuators=[], **kwargs):
71
+ def __init__(self,
72
+ detectors: Optional[Sequence['DAQ_Viewer']] = None,
73
+ actuators: Optional[Sequence['DAQ_Move']] = None,
74
+ selected_detectors: Optional[Sequence['DAQ_Viewer']] = None,
75
+ selected_actuators: Optional[Sequence['DAQ_Move']] = None,
76
+ parent_name='',
77
+ **kwargs):
78
+
72
79
  QObject.__init__(self)
73
80
  ParameterManager.__init__(self)
81
+ if detectors is None:
82
+ detectors = []
83
+ if actuators is None:
84
+ actuators = []
85
+ if selected_detectors is None:
86
+ selected_detectors = []
87
+ if selected_actuators is None:
88
+ selected_actuators = []
89
+
90
+ self.parent_name = parent_name
74
91
 
75
92
  for mod in selected_actuators:
76
93
  assert mod in actuators
@@ -100,6 +117,9 @@ class ModulesManager(QObject, ParameterManager):
100
117
  self.set_actuators(actuators, selected_actuators)
101
118
  self.set_detectors(detectors, selected_detectors)
102
119
 
120
+ def __repr__(self):
121
+ return f'ModulesManager of "{self.parent_name}" with control modules: {self.get_names(self.modules_all)}'
122
+
103
123
  def show_only_control_modules(self, show: True):
104
124
  self.settings.child('move_done').show(not show)
105
125
  self.settings.child('det_done').show(not show)
@@ -197,7 +217,7 @@ class ModulesManager(QObject, ParameterManager):
197
217
 
198
218
  @property
199
219
  def modules(self):
200
- """Get the list of all detectors and actuators"""
220
+ """Get the list of detectors and actuators"""
201
221
  return self.detectors + self.actuators
202
222
 
203
223
  @property
@@ -287,8 +307,15 @@ class ModulesManager(QObject, ParameterManager):
287
307
  """
288
308
  return self.settings.child('data_dimensions', f'det_data_list{dim.upper()}').value()['selected']
289
309
 
290
- def grab_data(self, **kwargs):
291
- """Do a single grab of connected and selected detectors"""
310
+ def grab_data(self, check_do_override=True, **kwargs):
311
+ """Do a single grab of connected and selected detectors
312
+
313
+ Parameter
314
+ ---------
315
+ check_do_override: bool
316
+ If this is True the signal emission to the DAQ_Viewers will be conditionned to the status of their internal
317
+ override_grab_from_extension attribute
318
+ """
292
319
  self.det_done_datas = DataToExport(name=__class__.__name__, control_module='DAQ_Viewer')
293
320
  self._received_data = 0
294
321
  self.det_done_flag = False
@@ -296,8 +323,9 @@ class ModulesManager(QObject, ParameterManager):
296
323
  tzero = time.perf_counter()
297
324
 
298
325
  for mod in self.detectors:
299
- kwargs.update(dict(Naverage=mod.Naverage))
300
- mod.command_hardware.emit(utils.ThreadCommand("single", kwargs))
326
+ if not (check_do_override and mod.override_grab_from_extension):
327
+ kwargs.update(dict(Naverage=mod.Naverage))
328
+ mod.command_hardware.emit(utils.ThreadCommand("single", kwargs))
301
329
 
302
330
  while not self.det_done_flag:
303
331
  # wait for grab done signals to end
@@ -307,6 +335,7 @@ class ModulesManager(QObject, ParameterManager):
307
335
  self.timeout_signal.emit(True)
308
336
  logger.error('Timeout Fired during waiting for data to be acquired')
309
337
  break
338
+ QThread.msleep(10)
310
339
 
311
340
  self.det_done_signal.emit(self.det_done_datas)
312
341
  return self.det_done_datas
@@ -458,7 +487,7 @@ class ModulesManager(QObject, ParameterManager):
458
487
  self.timeout_signal.emit(True)
459
488
  logger.error('Timeout Fired during waiting for actuators to be moved')
460
489
  break
461
- QThread.msleep(20)
490
+ QThread.msleep(10)
462
491
 
463
492
  self.move_done_signal.emit(self.move_done_positions)
464
493
  return self.move_done_positions
@@ -165,41 +165,3 @@ class Scan1DSparse(Scan1DBase):
165
165
  if len(self.actuators) == 1:
166
166
  self.settings.child('parsed_string').setOpts(title=f'{self.actuators[0].title} Parsed string:')
167
167
 
168
- try:
169
- import adaptive
170
-
171
-
172
- @ScannerFactory.register()
173
- class Scan1DAdaptive(Scan1DBase):
174
-
175
- scan_subtype = 'Adaptive'
176
- params = [
177
- {'title': 'Loss type', 'name': 'scan_loss', 'type': 'list',
178
- 'limits': ['default', 'curvature', 'uniform'], 'tip': 'Type of loss used by the algo. to determine next points'},
179
- {'title': 'Start:', 'name': 'start', 'type': 'float', 'value': 0.},
180
- {'title': 'Stop:', 'name': 'stop', 'type': 'float', 'value': 1.},
181
- ]
182
- distribution = DataDistribution['spread']
183
-
184
- def __init__(self, actuators: List['DAQ_Move'] = None, **_ignored):
185
- super().__init__(actuators=actuators)
186
-
187
- def set_scan(self):
188
- self.axes_unique = [np.array([])]
189
- self.axes_indexes = np.array([], dtype=int)
190
- self.positions = np.array([self.settings['start'], self.settings['stop']])
191
-
192
- def evaluate_steps(self) -> int:
193
- return 1
194
-
195
- def get_nav_axes(self) -> List[Axis]:
196
- return [Axis(label=f'{self.actuators[0].mod_name} axis',
197
- units=f'{self.actuators[0].units}',
198
- data=self.positions[0])]
199
-
200
- def get_scan_shape(self) -> Tuple[int]:
201
- return len(self.positions),
202
-
203
- except ModuleNotFoundError:
204
- logger.info('adaptive module is not present, no adaptive scan possible')
205
-
@@ -286,61 +286,3 @@ class Scan2DSpiral(Scan2DLinear):
286
286
  self.settings.child(ax, f'rmax_{ax}').setValue(
287
287
  (coordinates[0, i] - coordinates[1, i]) / 2)
288
288
 
289
-
290
- try:
291
- import adaptive
292
-
293
- @ScannerFactory.register()
294
- class Scan2DAdaptive(Scan2DLinear):
295
- scan_subtype = 'Adaptive'
296
-
297
- params = [
298
- {'title': 'Loss type', 'name': 'scan_loss', 'type': 'list',
299
- 'limits': ['default', 'curvature', 'uniform'],
300
- 'tip': 'Type of loss used by the algo. to determine next points'},
301
-
302
- {'title': 'Ax1:', 'name': 'axis1', 'type': 'group',
303
- 'children':[
304
- {'title': 'Start Ax1:', 'name': 'start_axis1', 'type': 'float',
305
- 'value': config('scan', 'scan2D', 'linear', 'start1')},
306
- {'title': 'Stop Ax1:', 'name': 'stop_axis1', 'type': 'float',
307
- 'value': config('scan', 'scan2D', 'linear', 'stop1')},
308
- {'title': 'Step Ax1:', 'name': 'step_axis1', 'type': 'float',
309
- 'value': config('scan', 'scan2D', 'linear', 'step1')},
310
- ]},
311
- {'title': 'Ax2:', 'name': 'axis2', 'type': 'group',
312
- 'children':[
313
- {'title': 'Start Ax2:', 'name': 'start_axis2', 'type': 'float',
314
- 'value': config('scan', 'scan2D', 'linear', 'start2')},
315
- {'title': 'Stop Ax2:', 'name': 'stop_axis2', 'type': 'float',
316
- 'value': config('scan', 'scan2D', 'linear', 'stop2')},
317
- {'title': 'Step Ax2:', 'name': 'step_axis2', 'type': 'float',
318
- 'value': config('scan', 'scan2D', 'linear', 'step2')},
319
- ]},
320
- ]
321
- distribution = DataDistribution['spread']
322
-
323
- def __init__(self, actuators: List['DAQ_Move'] = None, **_ignored):
324
- super().__init__(actuators=actuators)
325
-
326
- def set_scan(self):
327
-
328
- self.axes_unique = [np.array([]), np.array([])]
329
- self.axes_indexes = np.array([], dtype=int)
330
- self.positions = np.zeros((0, 2))
331
-
332
- def evaluate_steps(self) -> int:
333
- return 1
334
-
335
- def get_nav_axes(self) -> List[Axis]:
336
- return [Axis(label=f'{act.mod_name} axis',
337
- units=f'{act.units}',
338
- data=self.positions[:, ind],
339
- index=ind) for ind, act in enumerate(self.actuators)]
340
-
341
- def get_scan_shape(self) -> Tuple[int]:
342
- return () # unknown shape
343
-
344
- except ModuleNotFoundError:
345
- logger.info('adaptive module is not present, no adaptive scan possible')
346
-
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pymodaq
3
- Version: 5.0.5
3
+ Version: 5.1.0a0
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
@@ -43,14 +43,15 @@ Classifier: Topic :: Scientific/Engineering :: Visualization
43
43
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
44
44
  Classifier: Topic :: Software Development :: User Interfaces
45
45
  Requires-Python: >=3.8
46
- Requires-Dist: bayesian-optimization<2.0.0
46
+ Requires-Dist: adaptive
47
+ Requires-Dist: bayesian-optimization>=2.0
47
48
  Requires-Dist: easydict
48
49
  Requires-Dist: multipledispatch
49
50
  Requires-Dist: numpy<2.0.0
50
51
  Requires-Dist: packaging
51
52
  Requires-Dist: pint
52
53
  Requires-Dist: pyleco>0.3; python_version >= '3.8'
53
- Requires-Dist: pymodaq-data>=5.0.18
54
+ Requires-Dist: pymodaq-data>=5.0.21
54
55
  Requires-Dist: pymodaq-gui>=5.0.17
55
56
  Requires-Dist: pymodaq-plugin-manager>=0.0.17
56
57
  Requires-Dist: pymodaq-plugins-mock>=5.0.5
@@ -1,23 +1,24 @@
1
1
  pymodaq/__init__.py,sha256=VtSBaXkrFtgRchmQN2dIet1X88h9r9M6C8OCD9WZPy0,3250
2
- pymodaq/dashboard.py,sha256=LTI3JhUpFRRw8fiuxlVwkRGpkZtLDxMimgI35bOWYkU,76520
2
+ pymodaq/dashboard.py,sha256=sxPAbpKEhzhb7Nat8y4YpWWDMHO_5LtiDv5wIdx_0eI,79493
3
3
  pymodaq/icon.ico,sha256=hOHHfNDENKphQvG1WDleSEYcHukneR2eRFJu8isIlD4,74359
4
4
  pymodaq/splash.png,sha256=ow8IECF3tPRUMA4tf2tMu1aRiMaxx91_Y2ckVxkrmF0,53114
5
5
  pymodaq/updater.py,sha256=JMCVRgAXwmlrKxZv3837E-LRhF0F8V-td_wODwCoXaY,3821
6
6
  pymodaq/control_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- pymodaq/control_modules/daq_move.py,sha256=WXmtKz6-F68LTqpnTAer4SwropUgd7ZdfB_BYGdFkQY,38605
8
- pymodaq/control_modules/daq_move_ui.py,sha256=bdkRX0wjkQuFDr4OT1Q6jT_15DEWV1dn2R6WF50H23s,16811
9
- pymodaq/control_modules/daq_viewer.py,sha256=f9WYEWIlVjnEakesObhsoLBIWfv1tv4Q8TopqfP8lsg,58602
10
- pymodaq/control_modules/daq_viewer_ui.py,sha256=7XTidYrYlzj--DbbE1Wx4UBjvp1upGpziGhSTPoMKCc,15677
11
- pymodaq/control_modules/mocks.py,sha256=CdczKJDAuM2oL7VvIpSBWiYtTCqK_6x9unxavezp3_s,1954
12
- pymodaq/control_modules/move_utility_classes.py,sha256=2byGqAv7XeDYswRaLnkc8UBZlquqeUrOfsCE_yPEmg0,43216
13
- pymodaq/control_modules/utils.py,sha256=E94gyLrh7fkeppwihHXcwNyKD3CqBZvkMkk8X4fl_UE,20897
14
- pymodaq/control_modules/viewer_utility_classes.py,sha256=1TcyAC7AiJNKvJ6OGNOYoyFvRCT-u6RBbFv-X8IkZYA,28076
7
+ pymodaq/control_modules/daq_move.py,sha256=naGTZCkc_-T8_v0nmnECt8lHlCEGIsO9vjZagfbRHkE,39600
8
+ pymodaq/control_modules/daq_move_ui.py,sha256=R8UZP7Hs0BKNIXcRDiXlSvV4CjdNBilGzxYKjDRzA4g,17112
9
+ pymodaq/control_modules/daq_viewer.py,sha256=GgrycoR9fBe44wHq7xNfxcmaPa9-vMLTEEBCv_2p3Vs,59688
10
+ pymodaq/control_modules/daq_viewer_ui.py,sha256=dyi9UPw9L_EKU8XTIztaqr0BtmOBQLdlBWeBaL77IP4,15757
11
+ pymodaq/control_modules/mocks.py,sha256=FWu9vEXyrjLLw3_cj2w4v1cEVja_c27UlsTHW_mDTA8,1962
12
+ pymodaq/control_modules/move_utility_classes.py,sha256=hM-6Tx2hC9sEU5MhXrckTnMdTepePV42AEbSvo1Ewuw,43736
13
+ pymodaq/control_modules/thread_commands.py,sha256=tI8flLDXBPmeH_Oasy8JEBqDKUqQtJONhLktUR89eJU,3401
14
+ pymodaq/control_modules/utils.py,sha256=ZJN4RXz7duInnmVLxgIH7OeYWdOqw3y3H_TO5n7fgUM,23741
15
+ pymodaq/control_modules/viewer_utility_classes.py,sha256=4hppWT0GhSMJ9BCl29cEYh_B0bOPxwvqwiZtz81eU9U,27836
15
16
  pymodaq/daq_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
17
  pymodaq/daq_utils/daq_utils.py,sha256=hRfW9IhpJnrDlBgC4cxtaMl41DTgbBAT8YrMFK5OAgY,248
17
18
  pymodaq/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
19
  pymodaq/examples/function_plotter.py,sha256=z9zjvs35nwuq_Ux-EeKv4mELfVCWr1QqQG8F_AFctlk,6109
19
20
  pymodaq/examples/nonlinearscanner.py,sha256=x0R2_FP0YnuOCCAmYRiAiZ1jfUdRxu5RqIYLyGQMZ0U,3790
20
- pymodaq/examples/qt_less_standalone_module.py,sha256=9UD4niVfNXscDVQiOJuuL6lN9PC7Jfp9FwVJ0qz_6Do,4857
21
+ pymodaq/examples/qt_less_standalone_module.py,sha256=ybXwimRybtUPx-HjubqVDRb9twZGP8GdLf9P3jdhv_w,6431
21
22
  pymodaq/examples/tcp_client.py,sha256=AGkLR307r11YmPej4e8WMXwAOuXpDcqeMCrWo1whiKw,2583
22
23
  pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.aliases,sha256=t0eKH9Uq_AMk4wQ-6Pm5mKUjGcCvfT9GtvMsvDhkCUk,47
23
24
  pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvlps,sha256=VZHH96rKSnRYKeCAXUmKI3vQOX8Wz53FYCF2yXuqnaU,84
@@ -34,26 +35,40 @@ pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_scalar.vi,sha256=uYnMjYMQdfQqRu
34
35
  pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_string.vi,sha256=hdHU78daP5EOrX-co1TofhMLcKMQ9ODGXKcFx_IScGM,19791
35
36
  pymodaq/examples/Labview_TCP_Client/client_state.ctl,sha256=IxYi5Og0QXFB1e0VeBL23sIOYOCImf7uMzitIuPlagw,4293
36
37
  pymodaq/examples/Labview_TCP_Client/cmd_types.ctl,sha256=gwuDyGcte11Zqx0C-U8ljRyYCQleUPh18MYqg9GtxPg,4618
37
- pymodaq/extensions/__init__.py,sha256=PXelEHNgMwhjWlvxwObYU1joSLJnaIsFBZs9ZTR8w5c,470
38
+ pymodaq/extensions/__init__.py,sha256=FKNTIdvIz3ZL_CQ30WqSY3oeLhsQUhjdMMQsklCm5kI,569
38
39
  pymodaq/extensions/console.py,sha256=kkuHHog_a2Y_5cYrAFTD7IGRQ4BA4NBQz4hrwFYanQY,2277
39
- pymodaq/extensions/daq_scan.py,sha256=bM-lat9ldaNg62seN8DaepA321NTZ0ViAMOUWTm46Iw,52132
40
+ pymodaq/extensions/daq_scan.py,sha256=rgwzKi6fEa4KCSpluWT7oF15-2gGfNv9E5xw5n0CMSE,50151
40
41
  pymodaq/extensions/daq_scan_ui.py,sha256=kKcXu2tNo-VJR7GQPNEXxMKiKitA4F3a_tOSamalWh0,10052
41
- pymodaq/extensions/h5browser.py,sha256=7WbF2hj7sdU0kCqTxB4nXvfKGqUnoIsa2_AhCtCBNQo,1131
42
- pymodaq/extensions/utils.py,sha256=18FvgD9vtwAvGdD01LiV0-jcGv0WNjYyDLSP-NFUjno,3042
43
- pymodaq/extensions/bayesian/__init__.py,sha256=QMV9tq8Axi6YjoGj4UguBO8Zvuh26r5s91bm6YU7Itk,55
44
- pymodaq/extensions/bayesian/bayesian_optimisation.py,sha256=25nAtpQxN2LnBUyUFDkbPRojBqqGxcLe7hruAVQZj_o,30297
45
- pymodaq/extensions/bayesian/utils.py,sha256=PNBIHETkZNieExyd9gr8pqWAYXg3_1QW570pwbHbcQw,15473
42
+ pymodaq/extensions/h5browser.py,sha256=ORGs9OAy2Ju8sh8CoMMcWTkU842-qbVoAYVS0FTmfVM,261
43
+ pymodaq/extensions/utils.py,sha256=t8GsYAR9KJkqf6edeUIdW__qq3gEKNgvmpmJUPjhcA8,3425
44
+ pymodaq/extensions/adaptive/__init__.py,sha256=F5ICFuIqsEYElJnxWVQWDHrmf_c63ozP7FkqBvWEBWA,55
45
+ pymodaq/extensions/adaptive/adaptive_optimization.py,sha256=-4d3zjmJ9frebfUbEwrwAxbN479q4y3-NdP59_0sskg,6126
46
+ pymodaq/extensions/adaptive/utils.py,sha256=JYkthq6g1Y0IGeVl4u5TM9ombCIzF0zKJPSgh_qf2kU,3141
47
+ pymodaq/extensions/adaptive/loss_function/_1d_loss_functions.py,sha256=pyF5PfgIre7Fb4cYn_xAUn3PFILHnLIu-fDsn7JS94E,2211
48
+ pymodaq/extensions/adaptive/loss_function/_2d_loss_functions.py,sha256=C-RqndH_rtMwui0aglAldcitiQhROnIRPCCtwZVVkns,2629
49
+ pymodaq/extensions/adaptive/loss_function/__init__.py,sha256=2AABp8AsD4gZgC7Uc0WPmMlC6k2ODxT1Mw7RGRsUOK0,174
50
+ pymodaq/extensions/adaptive/loss_function/loss_factory.py,sha256=mnCGv3_MRhqnUbSFCXbwoHdC3LYAnfEyWGoqKQhuSyE,3360
51
+ pymodaq/extensions/bayesian/__init__.py,sha256=tXqDKqmxFd2rs9CNuWt4xl4xCb-gqMDeNnqkvJf6zuo,55
52
+ pymodaq/extensions/bayesian/bayesian_optimization.py,sha256=4L-9Jdv6FYJ24J-O5nVvRJYJK0ArDiQc-Mnp_64Skbo,4381
53
+ pymodaq/extensions/bayesian/utils.py,sha256=uDsZp8by5BhjnL26DQpYhYbZK6VmGBfZhDPPepIF_t4,5007
54
+ pymodaq/extensions/bayesian/acquisition/__init__.py,sha256=7L8o3cd1o5WiRKi73tSIGaHYPxsS8s51OgrsPgFKWVY,235
55
+ pymodaq/extensions/bayesian/acquisition/acquisition_function_factory.py,sha256=FshW5rrpOe-p1UtT35YlmpcRQ8zS9oLrzj3JUM3Nty8,2116
56
+ pymodaq/extensions/bayesian/acquisition/base_acquisition_function.py,sha256=28AID0pTDgWk0KVxic8Ok6kJIbX54bp6YdzDFzdzXog,4064
46
57
  pymodaq/extensions/daq_logger/__init__.py,sha256=u-W6S5KmVKjOuRLbpnM0bqn9vCiJjW97RpW7iaKssKM,28
47
58
  pymodaq/extensions/daq_logger/abstract.py,sha256=I-t-2nSIVHHUfHJ-3IoqsuULZiIsXRe4saotaEL3-Fk,1095
48
- pymodaq/extensions/daq_logger/daq_logger.py,sha256=HU3DLc_tV9D1nRPSlnoLaXzU0k0lMpC2HYZeA74d_O0,18464
49
- pymodaq/extensions/daq_logger/h5logging.py,sha256=Z512PrN4HyKMgqZ7sStFRoY1u2Baiau7X4II5Mb4Ofo,2434
59
+ pymodaq/extensions/daq_logger/daq_logger.py,sha256=z8A-cNby-NiZmTQnO3xL_TJiLlFZEsQn4mc3jF5BNOA,18275
60
+ pymodaq/extensions/daq_logger/h5logging.py,sha256=qWxt6SOf9jlB6hgj4gNUjpkXwsdkyj5zmhbkNUxRMjs,2427
50
61
  pymodaq/extensions/daq_logger/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
62
  pymodaq/extensions/daq_logger/db/db_logger.py,sha256=E607KSCloojpAa9QObhaLAe1tKfh0qEkDLrafElM8rc,10460
52
63
  pymodaq/extensions/daq_logger/db/db_logger_models.py,sha256=r9672aG8vUPqtHq6gFSuIFP-7hf8HhJavsRZrYo20Ns,3461
64
+ pymodaq/extensions/optimizers_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
+ pymodaq/extensions/optimizers_base/optimizer.py,sha256=bkUpC9UWd7eJ2NQrtHw5aRtpwbxFS5mc1Ur0IFGx8IM,33842
66
+ pymodaq/extensions/optimizers_base/thread_commands.py,sha256=R211R1BFirVHWVmdKX6NqeIbV1Sl_CArF9n5xGF1NxY,370
67
+ pymodaq/extensions/optimizers_base/utils.py,sha256=AEniQpw17AA0QSc0luB6_s9_91NhJys6EXm5MEm87qk,13497
53
68
  pymodaq/extensions/pid/__init__.py,sha256=tHegjXR1MZ3XHdFTpzYasFIzMxjkNUL-986DKLagAXs,517
54
69
  pymodaq/extensions/pid/actuator_controller.py,sha256=SOE2GjevbqxqxXewW0DMgoqNL_0CaPdNLjyKNc6ULKI,377
55
70
  pymodaq/extensions/pid/daq_move_PID.py,sha256=9q-lMVkS_yBNy0xyAhCWfreKGCOqIBt-LjReKpvNKrA,2146
56
- pymodaq/extensions/pid/pid_controller.py,sha256=Sqti9GyQAIXiwzmZJCz6lWHmLzYemFp3B5Fsu2zJ50c,29057
71
+ pymodaq/extensions/pid/pid_controller.py,sha256=gpBm8UEI85FoVIUPTLTbiA_El8O_xGNgqjnUVtsmHIw,28934
57
72
  pymodaq/extensions/pid/utils.py,sha256=C1QrfDiyTzq_tkSp3LHzxlTInuGj2KtxLE97-TEiwK0,7182
58
73
  pymodaq/post_treatment/__init__.py,sha256=xaaLFZJ7OLqI_7yPurFk89A7m2ywSbYDXAsdE-QQ8Zg,81
59
74
  pymodaq/post_treatment/load_and_plot.py,sha256=fmaBfdlM6WiFSAPuJxuN5W03JLr9MTn0DJMUsPfmkyg,13920
@@ -67,29 +82,28 @@ pymodaq/utils/chrono_timer.py,sha256=uBVtV3AW-m-fnHlMYgm1qYiuBpREdL1A93yJG78VAiM
67
82
  pymodaq/utils/config.py,sha256=w0EkWEvUbLCq7nTNZQccaMWVILuFaGW1JsIgX3VIKKc,1155
68
83
  pymodaq/utils/conftests.py,sha256=3Ak8WEpa3EhAp73Yb1LLq8YFONhPqiL7gG9eSDIoTNc,58
69
84
  pymodaq/utils/daq_utils.py,sha256=AJIA6PTDKe2nzoL0hgSJRWA5PYhKwZsBKfpPh0QkoTc,6131
70
- pymodaq/utils/data.py,sha256=8iAchr5nkwDo_usgChX85MOQiHnrubPrvAg3MrYnumw,4415
85
+ pymodaq/utils/data.py,sha256=Or2MdZjKAo18W025Pd1hqjUCZ9FeqPWurcBjY0Nllks,4429
71
86
  pymodaq/utils/enums.py,sha256=9PzGPsPN_6Wl9Pm0uV66-KByPsfpV2Coi5193kNVmII,233
72
87
  pymodaq/utils/exceptions.py,sha256=xWORkqBplDEKI3t5N4LEYPlowlxIs9E007AtYe4E8Y4,627
73
88
  pymodaq/utils/logger.py,sha256=6x5BPpWXw1zW2M7F4lRGIOP2TtnqJHz2m7XSqI8g0u0,293
74
89
  pymodaq/utils/math_utils.py,sha256=uBnk15-O2ucoF0dH-f41HqQYWIFsqNdkCb7AngwN8BI,248
75
90
  pymodaq/utils/messenger.py,sha256=T-RjQtx6Hz4F96TvOL61jomKjfqmNa_FdnGvvpQFfe0,246
76
91
  pymodaq/utils/gui_utils/__init__.py,sha256=MUGjejjsXUzTtDTqDzaQTL9W8Sc850ZZxYBlJn6xlxg,539
77
- pymodaq/utils/gui_utils/loader_utils.py,sha256=l7-xMbvYlTkO3uUV3UtV_-JeZ-4uVtCVOOb-2YV-sGE,2094
92
+ pymodaq/utils/gui_utils/loader_utils.py,sha256=2HLL_pqJgN8SxwEDGPF7MhWV-7-4asm3EtuuCrMDpz0,2191
78
93
  pymodaq/utils/gui_utils/utils.py,sha256=0FbuHR-3glsZZO_Lye-h470y9TNuFMcVMJkMF_euzoQ,494
79
94
  pymodaq/utils/gui_utils/widgets/lcd.py,sha256=x7uUPO_JSJX6ZkIa3xvdVFC898G2e3wvPUsATOs3iik,306
80
95
  pymodaq/utils/h5modules/__init__.py,sha256=daEdpEyAJIa8b2VkCqSKcw8PaExcB6Qro80XNes_sHA,2
81
- pymodaq/utils/h5modules/module_saving.py,sha256=wUTAF0laqB8CoJWhE-1vBOHtFKlt4kRZbrUIYudCgBA,14266
96
+ pymodaq/utils/h5modules/module_saving.py,sha256=bA7_OHOk7Z1jzsEdk1lt_juMjpbEPPhbNsP7f0_rQJo,18074
82
97
  pymodaq/utils/leco/__init__.py,sha256=PVxGVZx5uHCsZmFWrVTkVX1lE5C2V95bKBj0vK9KZQU,878
83
- pymodaq/utils/leco/daq_move_LECODirector.py,sha256=nw9zfWcGPaf7Zbk-jX35Nel4dHpBVjOugC6NvWWWStQ,6815
84
- pymodaq/utils/leco/daq_xDviewer_LECODirector.py,sha256=ZC9mrGq5Pa7wv-9w44hMvFxnsUr9w4Zp6w2Aa3z-i24,6322
85
- pymodaq/utils/leco/desktop.ini,sha256=2zopClaSQqdFfIsC8CGo2Oc-14x9h1gV0-fUrDtLFmA,82
86
- pymodaq/utils/leco/director_utils.py,sha256=0inrKh5aI-1pQs3fTXYvmjvwZ6TiyEEAupr2Hw_pMj0,2105
87
- pymodaq/utils/leco/leco_director.py,sha256=4QZVwU2tRM2OBNC4MV-a-JHDLgH_clJYKE8QVqymLgY,3145
88
- pymodaq/utils/leco/pymodaq_listener.py,sha256=kK3IasfKAC8bYq7h95yqVyXkNROKdhzHeAZm_zOdNt8,10736
89
- pymodaq/utils/leco/utils.py,sha256=RX24FFidWqyDOwqv-E9uO06vBeTdu5ZBZWXQQa995tI,2605
98
+ pymodaq/utils/leco/daq_move_LECODirector.py,sha256=Q6qiC1Mo8UQc2nxQ-TmjFWZX0kC2DUqTQCO_HuLivq8,6794
99
+ pymodaq/utils/leco/daq_xDviewer_LECODirector.py,sha256=oUTQtaYB957ZeQVag_SVBmD2hinZtmpkJkhTTJjewKo,4510
100
+ pymodaq/utils/leco/director_utils.py,sha256=rvkz5qL7Bu84LcaZ6H51pk2AeWKdO-nKgpICZo8xNh8,2493
101
+ pymodaq/utils/leco/leco_director.py,sha256=16S3TttCrJj-AYXz2Fs6HM7PdKsk5tOSz2IteRiOz8o,4621
102
+ pymodaq/utils/leco/pymodaq_listener.py,sha256=-Bd7X223jZapGKG5tNWY3oO8Li9-KNi_mb1jjeN3tA0,12550
103
+ pymodaq/utils/leco/utils.py,sha256=vXhEPWNyA_xhKUujIz492li4oMcCV1XGHO0Kys9yay0,2648
90
104
  pymodaq/utils/managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
105
  pymodaq/utils/managers/batchscan_manager.py,sha256=rhz2qeVfePX0h8sjIY1tHQckIHIxKhH-zOIzvM0_1Ag,13666
92
- pymodaq/utils/managers/modules_manager.py,sha256=LjYXl6TiFHUnoWpvX_Ht3uPg165C_klNgUVHI8suDbo,21076
106
+ pymodaq/utils/managers/modules_manager.py,sha256=NojlLFP25mPQBiw_6E4TV3VJMZ_1i9pEKbG9KzQfSPY,22191
93
107
  pymodaq/utils/managers/overshoot_manager.py,sha256=df_0cpvU5BxUvVqrWXuBFWyHSs9i_2NwLFjFsIOcBOA,9055
94
108
  pymodaq/utils/managers/preset_manager.py,sha256=JlndG8eWbqhU4ijiLsvBqAVIkSkCY5wpG8kPjlHXV5I,8014
95
109
  pymodaq/utils/managers/preset_manager_utils.py,sha256=3tmhxMKJnYA-SRPumPtdrx-3t7tyTnNr0Z7GFVN_z28,8269
@@ -102,8 +116,8 @@ pymodaq/utils/scanner/scan_factory.py,sha256=fu4kQrAoYsXeVg1VlHT2cyLZTuCQBJcz6X9
102
116
  pymodaq/utils/scanner/scan_selector.py,sha256=uu55xcijjg1fcvF59VVbtRLzXLoxb_3klEJPLiAuyws,16319
103
117
  pymodaq/utils/scanner/scanner.py,sha256=QxQwkkGpJvBfaoUQHGX6EK2EbIQGQFj47qBd8VQ7A0k,10898
104
118
  pymodaq/utils/scanner/utils.py,sha256=YjjrWWKs9q_OgP5xK277IyEsMqp15qFxU19kQ8f5R-c,3680
105
- pymodaq/utils/scanner/scanners/_1d_scanners.py,sha256=ArT1H8zl1_TztvxelDhjviEBtyv4AOO9Rt54EMKIuuQ,7812
106
- pymodaq/utils/scanner/scanners/_2d_scanners.py,sha256=AAHHHgyMtkXQTWnuPh3IY5ytATG5Lqc-AHJRpXIYApw,13851
119
+ pymodaq/utils/scanner/scanners/_1d_scanners.py,sha256=SAi3y6YWgoiAQetX6d_LzcjLKQG0qFPSeRDdPtB8wTY,6410
120
+ pymodaq/utils/scanner/scanners/_2d_scanners.py,sha256=bMHONCGUTWzVEwHLnzWzoWUmr8Klce8k1_7eitK6mRU,11415
107
121
  pymodaq/utils/scanner/scanners/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
108
122
  pymodaq/utils/scanner/scanners/sequential.py,sha256=X0slsfHCqid7N0Kj6EVeV8gStljlow2rZxPpRqj5VB4,8053
109
123
  pymodaq/utils/scanner/scanners/tabular.py,sha256=QPwW1kmJQY2YK4-clYd3r3Loolk3QYrkR2RqMIrrEvc,12752
@@ -115,8 +129,8 @@ pymodaq/utils/tcp_ip/__init__.py,sha256=1e_EK0AgvdoLAD_CSGGEaITZdy6OWCO7ih9IAIp7
115
129
  pymodaq/utils/tcp_ip/mysocket.py,sha256=03FaQskso8nLLAsN-ijX-RazXbeMezRnAPvsRxTQa4k,326
116
130
  pymodaq/utils/tcp_ip/serializer.py,sha256=Bp6ZpGqMdZlX4CnT371d7ZYqIp7UygsRsE9XFkWZrto,400
117
131
  pymodaq/utils/tcp_ip/tcp_server_client.py,sha256=eL-Q1HnnaAG8wfTUb9unEIiNFApMXzfzfveUWoC0_mg,30657
118
- pymodaq-5.0.5.dist-info/METADATA,sha256=xt-ceaYikU_biQpA8cjHDmTEcb1DygWOv2YpipgTX8Y,12878
119
- pymodaq-5.0.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
120
- pymodaq-5.0.5.dist-info/entry_points.txt,sha256=DvPq6fmIPH2JNsCqHDhn1xEj1kX5tfuc7xQ8-l5S2EU,387
121
- pymodaq-5.0.5.dist-info/licenses/LICENSE,sha256=VKOejxexXAe3XwfhAhcFGqeXQ12irxVHdeAojZwFEI8,1108
122
- pymodaq-5.0.5.dist-info/RECORD,,
132
+ pymodaq-5.1.0a0.dist-info/METADATA,sha256=dF6vCQQ_PlIczb2f4_VBZo9YdCVxnjt-XoBfgbhMNBg,12903
133
+ pymodaq-5.1.0a0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
134
+ pymodaq-5.1.0a0.dist-info/entry_points.txt,sha256=fklDvGhc2k7ZCBhFXTFADdH3FQ0mFOlrQ-xUvJwgllE,286
135
+ pymodaq-5.1.0a0.dist-info/licenses/LICENSE,sha256=VKOejxexXAe3XwfhAhcFGqeXQ12irxVHdeAojZwFEI8,1108
136
+ pymodaq-5.1.0a0.dist-info/RECORD,,
@@ -4,6 +4,4 @@ daq_move = pymodaq.control_modules.daq_move:main
4
4
  daq_scan = pymodaq.extensions.daq_scan:main
5
5
  daq_viewer = pymodaq.control_modules.daq_viewer:main
6
6
  dashboard = pymodaq.dashboard:main
7
- h5browser = pymodaq.extensions.h5browser:main
8
- parameter_example = pymodaq.examples.parameter_ex:main
9
7
  pymodaq_updater = pymodaq.updater:main
@@ -1,2 +0,0 @@
1
- [LocalizedFileNames]
2
- Command Prompt.lnk=@%SystemRoot%\system32\shell32.dll,-22022