pymodaq 4.3.3__py3-none-any.whl → 4.3.5__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.

@@ -23,7 +23,7 @@ from easydict import EasyDict as edict
23
23
  from pymodaq.utils.logger import set_logger, get_module_name
24
24
  from pymodaq.control_modules.utils import ParameterControlModule
25
25
  from pymodaq.control_modules.daq_move_ui import DAQ_Move_UI, ThreadCommand
26
- from pymodaq.control_modules.move_utility_classes import MoveCommand, DAQ_Move_base
26
+ from pymodaq.control_modules.move_utility_classes import MoveCommand, DAQ_Move_base, DataActuatorType
27
27
  from pymodaq.control_modules.move_utility_classes import params as daq_move_params
28
28
  from pymodaq.utils import daq_utils as utils
29
29
  from pymodaq.utils.parameter import utils as putils
@@ -37,6 +37,7 @@ from pymodaq.utils.h5modules.backends import Node
37
37
  from pymodaq.utils.parameter import ioxml, Parameter
38
38
 
39
39
  from pymodaq.utils.leco.pymodaq_listener import MoveActorListener, LECOMoveCommands
40
+ from pymodaq import Q_, Unit
40
41
 
41
42
 
42
43
  local_path = config_mod.get_set_local_dir()
@@ -119,9 +120,9 @@ class DAQ_Move(ParameterControlModule):
119
120
 
120
121
  self._move_done_bool = True
121
122
 
122
- self._current_value = DataActuator(title)
123
- self._target_value: DataActuator(title)
124
- self._relative_value: DataActuator(title)
123
+ self._current_value = DataActuator(title, units=self.units)
124
+ self._target_value = DataActuator(title, units=self.units)
125
+ self._relative_value = DataActuator(title, units=self.units)
125
126
 
126
127
  self._refresh_timer = QTimer()
127
128
  self._refresh_timer.timeout.connect(self.get_actuator_value)
@@ -159,9 +160,13 @@ class DAQ_Move(ParameterControlModule):
159
160
  elif cmd.command == 'stop':
160
161
  self.stop_motion()
161
162
  elif cmd.command == 'move_abs':
162
- self.move_abs(cmd.attribute)
163
+ data_act: DataActuator = cmd.attribute
164
+ data_act.force_units(self.units)
165
+ self.move_abs(data_act)
163
166
  elif cmd.command == 'move_rel':
164
- self.move_rel(cmd.attribute)
167
+ data_act: DataActuator = cmd.attribute
168
+ data_act.force_units(self.units)
169
+ self.move_rel(data_act)
165
170
  elif cmd.command == 'show_log':
166
171
  self.show_log()
167
172
  elif cmd.command == 'show_config':
@@ -174,7 +179,7 @@ class DAQ_Move(ParameterControlModule):
174
179
 
175
180
  @property
176
181
  def master(self) -> bool:
177
- """ Get/Set programmaticaly the Master/Slave status of an actuator"""
182
+ """ Get/Set programmatically the Master/Slave status of an actuator"""
178
183
  if self.initialized_state:
179
184
  return self.settings['move_settings', 'multiaxes', 'multi_status'] == 'Master'
180
185
  else:
@@ -269,7 +274,7 @@ class DAQ_Move(ParameterControlModule):
269
274
  """
270
275
  try:
271
276
  if isinstance(value, Number):
272
- value = DataActuator(self.title, data=[np.array([value])])
277
+ value = DataActuator(self.title, data=[np.array([value])], units=self.units)
273
278
  self._send_to_tcpip = send_to_tcpip
274
279
  if value != self._current_value:
275
280
  if self.ui is not None:
@@ -318,7 +323,7 @@ class DAQ_Move(ParameterControlModule):
318
323
 
319
324
  try:
320
325
  if isinstance(rel_value, Number):
321
- rel_value = DataActuator(self.title, data=[np.array([rel_value])])
326
+ rel_value = DataActuator(self.title, data=[np.array([rel_value])], units=self.units)
322
327
  self._send_to_tcpip = send_to_tcpip
323
328
  if self.ui is not None:
324
329
  self.ui.move_done = False
@@ -458,6 +463,11 @@ class DAQ_Move(ParameterControlModule):
458
463
  elif status.command == "get_actuator_value" or status.command == 'check_position':
459
464
  data_act: DataActuator = status.attribute[0]
460
465
  data_act.name = self.title # for the DataActuator name to be the title of the DAQ_Move
466
+ if (not Unit(self.units).is_compatible_with(Unit(data_act.units)) and
467
+ data_act.units == ''): #this happens if the units have not been specified in
468
+ # the plugin
469
+ data_act.force_units(self.units)
470
+
461
471
  if self.ui is not None:
462
472
  self.ui.display_value(data_act)
463
473
  if self.ui.is_action_checked('show_graph'):
@@ -557,7 +567,7 @@ class DAQ_Move(ParameterControlModule):
557
567
  self.update_plugin_config()
558
568
  if self.ui is not None:
559
569
  self.ui.actuator = act_type
560
- self.update_settings()
570
+ self.update_settings()
561
571
  else:
562
572
  raise ActuatorError(f'{act_type} is an invalid actuator, should be within {ACTUATOR_TYPES}')
563
573
 
@@ -681,8 +691,8 @@ class DAQ_Move_Hardware(QObject):
681
691
  """Get the current position checking the hardware value.
682
692
  """
683
693
  pos = self.hardware.get_actuator_value()
684
- if self.hardware.data_actuator_type.name == 'float':
685
- return DataActuator(self._title, data=pos)
694
+ if self.hardware.data_actuator_type == DataActuatorType.float:
695
+ return DataActuator(self._title, data=pos, units=self.units)
686
696
  else:
687
697
  return pos
688
698
 
@@ -17,10 +17,11 @@ from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo, find_keys_from_v
17
17
  from pymodaq.utils import config as configmod
18
18
  from pymodaq.utils.tcp_ip.tcp_server_client import TCPServer, tcp_parameters
19
19
  from pymodaq.utils.messenger import deprecation_msg
20
- from pymodaq.utils.data import DataActuator
20
+ from pymodaq.utils.data import DataActuator, DataUnitError
21
21
  from pymodaq.utils.enums import BaseEnum, enum_checker
22
22
  from pymodaq.utils.tcp_ip.mysocket import Socket
23
23
  from pymodaq.utils.tcp_ip.serializer import DeSerializer, Serializer
24
+ from pymodaq import Unit
24
25
 
25
26
  if TYPE_CHECKING:
26
27
  from pymodaq.control_modules.daq_move import DAQ_Move_Hardware
@@ -207,7 +208,7 @@ class DAQ_Move_base(QObject):
207
208
  params = []
208
209
  _controller_units = ''
209
210
  _epsilon = 1
210
- data_actuator_type = DataActuatorType['float']
211
+ data_actuator_type = DataActuatorType.float
211
212
  data_shape = (1, ) # expected shape of the underlying actuator's value (in general a float so shape = (1, ))
212
213
 
213
214
  def __init__(self, parent: Optional['DAQ_Move_Hardware'] = None,
@@ -235,8 +236,12 @@ class DAQ_Move_base(QObject):
235
236
  self._title = parent.title
236
237
  else:
237
238
  self._title = "myactuator"
238
- self._current_value = DataActuator(self._title, data=[np.zeros(self.data_shape, dtype=float)])
239
- self._target_value = DataActuator(self._title, data=[np.zeros(self.data_shape, dtype=float)])
239
+ self._current_value = DataActuator(self._title,
240
+ data=[np.zeros(self.data_shape, dtype=float)],
241
+ units=self.controller_units)
242
+ self._target_value = DataActuator(self._title,
243
+ data=[np.zeros(self.data_shape, dtype=float)],
244
+ units=self.controller_units)
240
245
  self.controller_units = self._controller_units
241
246
 
242
247
  self.poll_timer = QTimer()
@@ -328,8 +333,13 @@ class DAQ_Move_base(QObject):
328
333
  @current_value.setter
329
334
  def current_value(self, value: Union[float, DataActuator]):
330
335
  if not isinstance(value, DataActuator):
331
- self._current_value = DataActuator(self._title, data=value)
336
+ self._current_value = DataActuator(self._title, data=value,
337
+ units=self.controller_units)
332
338
  else:
339
+ if (not Unit(self.controller_units).is_compatible_with(
340
+ Unit(value.units)) and
341
+ value.units == ''):
342
+ value.force_units(self.controller_units)
333
343
  self._current_value = value
334
344
 
335
345
  @property
@@ -342,8 +352,13 @@ class DAQ_Move_base(QObject):
342
352
  @target_value.setter
343
353
  def target_value(self, value: Union[float, DataActuator]):
344
354
  if not isinstance(value, DataActuator):
345
- self._target_value = DataActuator(self._title, data=value)
355
+ self._target_value = DataActuator(self._title, data=value,
356
+ units=self.controller_units)
346
357
  else:
358
+ if (not Unit(self.controller_units).is_compatible_with(
359
+ Unit(value.units)) and
360
+ value.units == ''):
361
+ value.force_units(self.controller_units)
347
362
  self._target_value = value
348
363
 
349
364
  @property
@@ -402,10 +417,15 @@ class DAQ_Move_base(QObject):
402
417
  """
403
418
  if self.settings.child('bounds', 'is_bounds').value():
404
419
  if position > self.settings.child('bounds', 'max_bound').value():
405
- position = DataActuator(self._title, data=self.settings.child('bounds', 'max_bound').value())
420
+ position = DataActuator(self._title,
421
+ data=self.settings.child('bounds', 'max_bound').value(),
422
+ units = self.controller_units)
406
423
  self.emit_status(ThreadCommand('outofbounds', []))
407
424
  elif position < self.settings.child('bounds', 'min_bound').value():
408
- position = DataActuator(self._title, data=self.settings.child('bounds', 'min_bound').value())
425
+ position = DataActuator(self._title,
426
+ data=self.settings.child('bounds', 'min_bound').value(),
427
+ units=self.controller_units
428
+ )
409
429
  self.emit_status(ThreadCommand('outofbounds', []))
410
430
  return position
411
431
 
@@ -472,12 +492,14 @@ class DAQ_Move_base(QObject):
472
492
  """
473
493
  if position is None:
474
494
  if self.data_actuator_type.name == 'float':
475
- position = DataActuator(self._title, data=self.get_actuator_value())
495
+ position = DataActuator(self._title, data=self.get_actuator_value(),
496
+ units = self.controller_units)
476
497
  else:
477
498
  position = self.get_actuator_value()
478
499
  if position.name != self._title: # make sure the emitted DataActuator has the name of the real implementation
479
500
  #of the plugin
480
- position = DataActuator(self._title, data=position.value())
501
+ position = DataActuator(self._title, data=position.value(),
502
+ units = self.controller_units)
481
503
  self.move_done_signal.emit(position)
482
504
  self.move_is_done = True
483
505
 
@@ -493,31 +515,40 @@ class DAQ_Move_base(QObject):
493
515
  if self.ispolling:
494
516
  self.poll_timer.start()
495
517
  else:
496
- if self.data_actuator_type.name == 'float':
497
- self._current_value = DataActuator(data=self.get_actuator_value())
518
+ if self.data_actuator_type == DataActuatorType.float:
519
+ self._current_value = DataActuator(data=self.get_actuator_value(),
520
+ units=self.controller_units)
498
521
  else:
499
522
  self._current_value = self.get_actuator_value()
523
+ if (not Unit(self.controller_units).is_compatible_with(
524
+ Unit(self._current_value.units)) and
525
+ self._current_value.units == ''):
526
+ # this happens if the units have not been specified in
527
+ # the plugin
528
+ self._current_value.force_units(self.controller_units)
529
+
500
530
  logger.debug(f'Current position: {self._current_value}')
501
531
  self.move_done(self._current_value)
502
532
 
503
533
  def check_target_reached(self):
504
- # if not isinstance(self._current_value, DataActuator):
505
- # self._current_value = DataActuator(data=self._current_value)
506
- # if not isinstance(self._target_value, DataActuator):
507
- # self._target_value = DataActuator(data=self._target_value)
508
-
509
534
  logger.debug(f"epsilon value is {self.settings['epsilon']}")
510
535
  logger.debug(f"current_value value is {self._current_value}")
511
536
  logger.debug(f"target_value value is {self._target_value}")
512
537
 
513
- if not (self._current_value - self._target_value).abs() < self.settings['epsilon']:
538
+ try:
539
+ epsilon_calculated = (self._current_value - self._target_value).abs()
540
+ except DataUnitError as e:
541
+ epsilon_calculated = abs(self._current_value.value() - self._target_value.value())
542
+ logger.warning(f'Unit issue when calculating epsilon, units are not the same between'
543
+ f'target and current values')
544
+
545
+ if not epsilon_calculated < self.settings['epsilon']:
514
546
 
515
547
  logger.debug(f'Check move_is_done: {self.move_is_done}')
516
548
  if self.move_is_done:
517
549
  self.emit_status(ThreadCommand('Move has been stopped', ))
518
550
  logger.info('Move has been stopped')
519
551
  self.current_value = self.get_actuator_value()
520
-
521
552
  self.emit_value(self._current_value)
522
553
  logger.debug(f'Current value: {self._current_value}')
523
554
 
@@ -624,7 +655,7 @@ class DAQ_Move_TCP_server(DAQ_Move_base, TCPServer):
624
655
  """
625
656
  params_client = [] # parameters of a client grabber
626
657
  command_server = Signal(list)
627
- data_actuator_type = DataActuatorType['DataActuator']
658
+ data_actuator_type = DataActuatorType.DataActuator
628
659
 
629
660
  message_list = ["Quit", "Status", "Done", "Server Closed", "Info", "Infos", "Info_xml", "move_abs",
630
661
  'move_home', 'move_rel', 'get_actuator_value', 'stop_motion', 'position_is', 'move_done']
@@ -45,14 +45,18 @@ def get_extensions():
45
45
  module = importlib.import_module(pkg.value)
46
46
  modules = get_ext_modules(Path(module.__path__[0]).joinpath('extensions'))
47
47
  for mod in modules:
48
- mod_in = importlib.import_module(f'{pkg.value}.extensions.{mod}')
49
- if hasattr(mod_in, 'EXTENSION_NAME'):
50
- extension_import.append({'pkg': pkg.value, 'module': mod,
51
- 'name': mod_in.EXTENSION_NAME,
52
- 'class_name': mod_in.CLASS_NAME})
53
-
54
- except Exception as e: # pragma: no cover
55
- logger.warning(f'Impossible to import the {pkg.value}.extensions.{mod} extension: '
48
+ try:
49
+ mod_in = importlib.import_module(f'{pkg.value}.extensions.{mod}')
50
+ if hasattr(mod_in, 'EXTENSION_NAME'):
51
+ extension_import.append({'pkg': pkg.value, 'module': mod,
52
+ 'name': mod_in.EXTENSION_NAME,
53
+ 'class_name': mod_in.CLASS_NAME})
54
+
55
+ except Exception as e: # pragma: no cover
56
+ logger.warning(f'Impossible to import the {pkg.value}.extensions.{mod} extension: '
57
+ f'{str(e)}')
58
+ except Exception as e:
59
+ logger.warning(f'Impossible to import the {pkg.value} package: '
56
60
  f'{str(e)}')
57
61
 
58
62
  return extension_import
pymodaq/resources/VERSION CHANGED
@@ -1,2 +1,2 @@
1
- version = '4.3.3'
1
+ version = '4.3.5'
2
2
 
pymodaq/utils/data.py CHANGED
@@ -633,6 +633,10 @@ class DataBase(DataLowLevel):
633
633
 
634
634
  @property
635
635
  def units(self):
636
+ """ Get/Set the object units
637
+
638
+ Setting to other units should retain the unit compatibility
639
+ """
636
640
  return self._units
637
641
 
638
642
  @units.setter
@@ -640,6 +644,10 @@ class DataBase(DataLowLevel):
640
644
  units = check_units(units)
641
645
  self.units_as(units, inplace=True)
642
646
 
647
+ def force_units(self, units: str):
648
+ """ Change immediately the units to whatever else. Use this with care!"""
649
+ self._units = units
650
+
643
651
  def units_as(self, units: str, inplace=True) -> 'DataBase':
644
652
  """ Set the object units to the new one (if possible)
645
653
 
@@ -2401,9 +2409,9 @@ class DataActuator(DataRaw):
2401
2409
 
2402
2410
  def __repr__(self):
2403
2411
  if self.dim.name == 'Data0D':
2404
- return f'<{self.__class__.__name__} ({self.data[0][0]})>'
2412
+ return f'<{self.__class__.__name__} ({self.data[0][0]} {self.units})>'
2405
2413
  else:
2406
- return f'<{self.__class__.__name__} ({self.shape})>'
2414
+ return f'<{self.__class__.__name__} ({self.shape} {self.units})>'
2407
2415
 
2408
2416
  def value(self) -> float:
2409
2417
  """Returns the underlying float value (of the first elt in the data list) if this data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pymodaq
3
- Version: 4.3.3
3
+ Version: 4.3.5
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
@@ -3,12 +3,12 @@ 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=-ipGtKrkeB_eaMfdDVHDFu86J5By_pHO8Z5axOkC_tY,35985
6
+ pymodaq/control_modules/daq_move.py,sha256=dq29GbNf-8BpquR3z8ZuqvKaP-0p14LLrAAVg75pIis,36590
7
7
  pymodaq/control_modules/daq_move_ui.py,sha256=euA8_utFfiscd9ahZxRTqqTiCSrNB4CKCLqgdbUKSlI,15307
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=bdO0O8qMcU4siW879XU7AAhcTLZz1s7vH_paDAD5G-8,33544
11
+ pymodaq/control_modules/move_utility_classes.py,sha256=84xsY5LJz-KEVaXpVK0rBUs6TAV1qQwm2UWxaNIfNAM,35339
12
12
  pymodaq/control_modules/utils.py,sha256=5YdSwq_lFJm7IalYWe_Hn1U4LUoUmo1gedvV9UguU0Y,20016
13
13
  pymodaq/control_modules/viewer_utility_classes.py,sha256=mhUNZCx0SzaZJtxuKBMDcW5BfCY7hGPowJyQtQquwNE,26704
14
14
  pymodaq/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -40,7 +40,7 @@ pymodaq/extensions/daq_logger.py,sha256=hEAb98fv1qJxcH9NPvaiLp1SPWkBVBwpujJhuyAi
40
40
  pymodaq/extensions/daq_scan.py,sha256=CGBPrhLRHPmFJunKQ1aK5RgToXemzNEPdYSHn7e36DE,49414
41
41
  pymodaq/extensions/daq_scan_ui.py,sha256=bYJaWBLQMl2Yu1PAxc-bCldh4keWXd6l12ttrHqExE0,10181
42
42
  pymodaq/extensions/h5browser.py,sha256=eQZ8YhPHdiBCyHIn1JJJLn7OgZsc1XlcETgqdafofZs,1140
43
- pymodaq/extensions/utils.py,sha256=3cF3-7hVxYY1xxi0Kz-ck_yHcWyO5gAFFghf8Zo01Z8,2026
43
+ pymodaq/extensions/utils.py,sha256=sh4SxJx5_lGJ6aJE8p8VJ2zrptW8pyze73aT_52xOwQ,2255
44
44
  pymodaq/extensions/bayesian/__init__.py,sha256=QMV9tq8Axi6YjoGj4UguBO8Zvuh26r5s91bm6YU7Itk,55
45
45
  pymodaq/extensions/bayesian/bayesian_optimisation.py,sha256=zB6DoyHx6nsKHsl3G4T0Hsw8npl80gdEIwvNfx4DCrU,30033
46
46
  pymodaq/extensions/bayesian/utils.py,sha256=1m_NpYMr-Swg2ImtMvbh-XOxutkAVwc0M2BWeK_NMIg,15544
@@ -58,7 +58,7 @@ pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py,sha256=1u7hWDaiwsZ
58
58
  pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui,sha256=PyzbCWPMkh5oIYYteZczXyWMeHKW9EJmM1QlzXhnyTk,7037
59
59
  pymodaq/post_treatment/daq_measurement/daq_measurement_main.py,sha256=CAKwcWMOD86aXB8mbdxOK7e8nZRos5d59FzDtqK1QoY,17093
60
60
  pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat,sha256=e1tu2A67MS9fk3jhriF6saQgRxWIucIvNW92iWXFP6E,164
61
- pymodaq/resources/VERSION,sha256=h2mDwD22qdTOg_NB5mTHQmwKnwAsac6zW9EJQsTh1lQ,19
61
+ pymodaq/resources/VERSION,sha256=0IjdCbIfZfg9UZFoqckqiyGBwq0UheKTOg6QR2i3-Xw,19
62
62
  pymodaq/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
63
  pymodaq/resources/config_template.toml,sha256=d3pofgIK5FxaRMELAI1qEsRcMD3GlYd87zZjDj9G9m0,3210
64
64
  pymodaq/resources/preset_default.xml,sha256=Dt8iWLwPPOPtcG00JCVP-mh-G7KC6B0YN8hd8RQdnNI,27256
@@ -311,7 +311,7 @@ pymodaq/utils/chrono_timer.py,sha256=rwX8apS8B-IKhA0Cp2H9tLz0BRN7G3Pg5ptozvd3MKM
311
311
  pymodaq/utils/config.py,sha256=u-Q4af-tgXG7h8YitMGSPkigDxGoOYSEMHERQCF9mAM,16203
312
312
  pymodaq/utils/conftests.py,sha256=3Ak8WEpa3EhAp73Yb1LLq8YFONhPqiL7gG9eSDIoTNc,58
313
313
  pymodaq/utils/daq_utils.py,sha256=0jTrbT0aaZr3KaTgeDicmK9FbVnu3iaWBmNHnNJpr3A,28050
314
- pymodaq/utils/data.py,sha256=7m48jht2GOerMNszM5Pwvv5bdYHa3uTPc8UI2YQPmJE,110327
314
+ pymodaq/utils/data.py,sha256=QPPFs57Eu1cEvF_QYJamjrPmickBVgsggg_bSkbd0P0,110621
315
315
  pymodaq/utils/enums.py,sha256=wpRipioUJkKcEfoaY2NrDQ2WhGxZTZiZoJty5f2Ljpc,2236
316
316
  pymodaq/utils/exceptions.py,sha256=wLO6VlofzfwWkOOWMN2B-3NEWMfpgygyeEdakIx_rAs,668
317
317
  pymodaq/utils/factory.py,sha256=QLqAPFnTZ93eUpmAAIr7kESDk2enD57RNSuFUsjxE4E,2311
@@ -438,8 +438,8 @@ pymodaq/utils/tcp_ip/__init__.py,sha256=1e_EK0AgvdoLAD_CSGGEaITZdy6OWCO7ih9IAIp7
438
438
  pymodaq/utils/tcp_ip/mysocket.py,sha256=StAWj8dzHeMnbLj68Sel81uWFy-YkKVNRnVf7gXrESI,3452
439
439
  pymodaq/utils/tcp_ip/serializer.py,sha256=oTQ24JNln_vRX4YADitTYiJplwFIdsta1ZDp6TOGMCA,27562
440
440
  pymodaq/utils/tcp_ip/tcp_server_client.py,sha256=xIMTNgVW_rKK0yTi4FDNFLf85-Akb27Jz2LdrvOrP68,30660
441
- pymodaq-4.3.3.dist-info/METADATA,sha256=ZjjuzNivAsZ9brdqz0U2tfvQ-t4R6FqluEvXDNa7qpo,7657
442
- pymodaq-4.3.3.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
443
- pymodaq-4.3.3.dist-info/entry_points.txt,sha256=RAzdYNjvUT28I2eiCKki_g2NzXq0woWxhev6lwzwRv8,348
444
- pymodaq-4.3.3.dist-info/licenses/LICENSE,sha256=VKOejxexXAe3XwfhAhcFGqeXQ12irxVHdeAojZwFEI8,1108
445
- pymodaq-4.3.3.dist-info/RECORD,,
441
+ pymodaq-4.3.5.dist-info/METADATA,sha256=RXJPRnt6t5mgH-ipkC__L_ESRPaV2rT-SrtENNTWv7w,7657
442
+ pymodaq-4.3.5.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
443
+ pymodaq-4.3.5.dist-info/entry_points.txt,sha256=RAzdYNjvUT28I2eiCKki_g2NzXq0woWxhev6lwzwRv8,348
444
+ pymodaq-4.3.5.dist-info/licenses/LICENSE,sha256=VKOejxexXAe3XwfhAhcFGqeXQ12irxVHdeAojZwFEI8,1108
445
+ pymodaq-4.3.5.dist-info/RECORD,,