QuLab 2.7.18__tar.gz → 2.7.19__tar.gz

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.
Files changed (115) hide show
  1. {qulab-2.7.18 → qulab-2.7.19}/PKG-INFO +1 -1
  2. {qulab-2.7.18 → qulab-2.7.19}/QuLab.egg-info/PKG-INFO +1 -1
  3. {qulab-2.7.18 → qulab-2.7.19}/qulab/executor/load.py +11 -24
  4. {qulab-2.7.18 → qulab-2.7.19}/qulab/executor/storage.py +17 -1
  5. qulab-2.7.19/qulab/version.py +1 -0
  6. qulab-2.7.18/qulab/version.py +0 -1
  7. {qulab-2.7.18 → qulab-2.7.19}/LICENSE +0 -0
  8. {qulab-2.7.18 → qulab-2.7.19}/MANIFEST.in +0 -0
  9. {qulab-2.7.18 → qulab-2.7.19}/QuLab.egg-info/SOURCES.txt +0 -0
  10. {qulab-2.7.18 → qulab-2.7.19}/QuLab.egg-info/dependency_links.txt +0 -0
  11. {qulab-2.7.18 → qulab-2.7.19}/QuLab.egg-info/entry_points.txt +0 -0
  12. {qulab-2.7.18 → qulab-2.7.19}/QuLab.egg-info/requires.txt +0 -0
  13. {qulab-2.7.18 → qulab-2.7.19}/QuLab.egg-info/top_level.txt +0 -0
  14. {qulab-2.7.18 → qulab-2.7.19}/README.md +0 -0
  15. {qulab-2.7.18 → qulab-2.7.19}/pyproject.toml +0 -0
  16. {qulab-2.7.18 → qulab-2.7.19}/qulab/__init__.py +0 -0
  17. {qulab-2.7.18 → qulab-2.7.19}/qulab/__main__.py +0 -0
  18. {qulab-2.7.18 → qulab-2.7.19}/qulab/cli/__init__.py +0 -0
  19. {qulab-2.7.18 → qulab-2.7.19}/qulab/cli/commands.py +0 -0
  20. {qulab-2.7.18 → qulab-2.7.19}/qulab/cli/config.py +0 -0
  21. {qulab-2.7.18 → qulab-2.7.19}/qulab/dicttree.py +0 -0
  22. {qulab-2.7.18 → qulab-2.7.19}/qulab/executor/__init__.py +0 -0
  23. {qulab-2.7.18 → qulab-2.7.19}/qulab/executor/cli.py +0 -0
  24. {qulab-2.7.18 → qulab-2.7.19}/qulab/executor/schedule.py +0 -0
  25. {qulab-2.7.18 → qulab-2.7.19}/qulab/executor/template.py +0 -0
  26. {qulab-2.7.18 → qulab-2.7.19}/qulab/executor/transform.py +0 -0
  27. {qulab-2.7.18 → qulab-2.7.19}/qulab/executor/utils.py +0 -0
  28. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/__init__.py +0 -0
  29. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/__main__.py +0 -0
  30. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/config.py +0 -0
  31. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/dataset.py +0 -0
  32. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/event_queue.py +0 -0
  33. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/mainwindow.py +0 -0
  34. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/monitor.py +0 -0
  35. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/ploter.py +0 -0
  36. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/qt_compat.py +0 -0
  37. {qulab-2.7.18 → qulab-2.7.19}/qulab/monitor/toolbar.py +0 -0
  38. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/__init__.py +0 -0
  39. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/curd.py +0 -0
  40. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/expression.py +0 -0
  41. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/models.py +0 -0
  42. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/optimize.py +0 -0
  43. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/query.py +0 -0
  44. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/record.py +0 -0
  45. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/scan.py +0 -0
  46. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/server.py +0 -0
  47. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/space.py +0 -0
  48. {qulab-2.7.18 → qulab-2.7.19}/qulab/scan/utils.py +0 -0
  49. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/__init__.py +0 -0
  50. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/__main__.py +0 -0
  51. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/backend/__init__.py +0 -0
  52. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/backend/redis.py +0 -0
  53. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/base_dataset.py +0 -0
  54. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/chunk.py +0 -0
  55. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/dataset.py +0 -0
  56. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/file.py +0 -0
  57. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/__init__.py +0 -0
  58. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/base.py +0 -0
  59. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/config.py +0 -0
  60. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/file.py +0 -0
  61. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/ipy.py +0 -0
  62. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/models.py +0 -0
  63. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/record.py +0 -0
  64. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/report.py +0 -0
  65. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/models/tag.py +0 -0
  66. {qulab-2.7.18 → qulab-2.7.19}/qulab/storage/storage.py +0 -0
  67. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/__init__.py +0 -0
  68. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/chat.py +0 -0
  69. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/device/__init__.py +0 -0
  70. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/device/basedevice.py +0 -0
  71. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/device/loader.py +0 -0
  72. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/device/utils.py +0 -0
  73. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/drivers/FakeInstrument.py +0 -0
  74. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/drivers/__init__.py +0 -0
  75. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/ipy_events.py +0 -0
  76. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/net/__init__.py +0 -0
  77. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/net/bencoder.py +0 -0
  78. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/net/cli.py +0 -0
  79. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/net/dhcp.py +0 -0
  80. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/net/dhcpd.py +0 -0
  81. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/net/kad.py +0 -0
  82. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/net/kcp.py +0 -0
  83. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/net/nginx.py +0 -0
  84. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/progress.py +0 -0
  85. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/__init__.py +0 -0
  86. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/client.py +0 -0
  87. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/exceptions.py +0 -0
  88. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/msgpack.py +0 -0
  89. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/msgpack.pyi +0 -0
  90. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/router.py +0 -0
  91. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/rpc.py +0 -0
  92. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/serialize.py +0 -0
  93. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/server.py +0 -0
  94. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/socket.py +0 -0
  95. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/utils.py +0 -0
  96. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/worker.py +0 -0
  97. {qulab-2.7.18 → qulab-2.7.19}/qulab/sys/rpc/zmq_socket.py +0 -0
  98. {qulab-2.7.18 → qulab-2.7.19}/qulab/tools/__init__.py +0 -0
  99. {qulab-2.7.18 → qulab-2.7.19}/qulab/tools/connection_helper.py +0 -0
  100. {qulab-2.7.18 → qulab-2.7.19}/qulab/typing.py +0 -0
  101. {qulab-2.7.18 → qulab-2.7.19}/qulab/utils.py +0 -0
  102. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/__init__.py +0 -0
  103. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/__main__.py +0 -0
  104. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/_autoplot.py +0 -0
  105. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/plot_circ.py +0 -0
  106. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/plot_layout.py +0 -0
  107. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/plot_seq.py +0 -0
  108. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/qdat.py +0 -0
  109. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/rot3d.py +0 -0
  110. {qulab-2.7.18 → qulab-2.7.19}/qulab/visualization/widgets.py +0 -0
  111. {qulab-2.7.18 → qulab-2.7.19}/setup.cfg +0 -0
  112. {qulab-2.7.18 → qulab-2.7.19}/setup.py +0 -0
  113. {qulab-2.7.18 → qulab-2.7.19}/src/qulab.h +0 -0
  114. {qulab-2.7.18 → qulab-2.7.19}/tests/test_kad.py +0 -0
  115. {qulab-2.7.18 → qulab-2.7.19}/tests/test_scan.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: QuLab
3
- Version: 2.7.18
3
+ Version: 2.7.19
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: QuLab
3
- Version: 2.7.18
3
+ Version: 2.7.19
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -81,16 +81,6 @@ class SetConfigWorkflow():
81
81
  WorkflowType = ModuleType | SetConfigWorkflow
82
82
 
83
83
 
84
- def get_source(workflow: WorkflowType, code_path: str | Path) -> str:
85
- if isinstance(code_path, str):
86
- code_path = Path(code_path)
87
- try:
88
- with open(code_path / workflow.__workflow_id__, 'r') as f:
89
- return f.read()
90
- except:
91
- return ''
92
-
93
-
94
84
  def can_call_without_args(func):
95
85
  if not callable(func):
96
86
  return False
@@ -320,6 +310,8 @@ def load_workflow_from_file(file_name: str,
320
310
  module = module_from_spec(spec)
321
311
  spec.loader.exec_module(module)
322
312
  module.__mtime__ = (base_path / path).stat().st_mtime
313
+ source_code = (base_path / path).read_text()
314
+ module.__source__ = source_code
323
315
 
324
316
  if hasattr(module, 'entries'):
325
317
  verify_entries(module, base_path)
@@ -347,11 +339,11 @@ def load_workflow_from_template(template_path: str,
347
339
  path = Path(template_path)
348
340
 
349
341
  with open(base_path / path) as f:
350
- content = f.read()
342
+ template = f.read()
351
343
 
352
344
  mtime = max((base_path / template_path).stat().st_mtime, mtime)
353
345
 
354
- content, hash_str = inject_mapping(content, mapping, str(path))
346
+ content, hash_str = inject_mapping(template, mapping, str(path))
355
347
 
356
348
  if target_path is None:
357
349
  if path.stem == 'template':
@@ -365,22 +357,19 @@ def load_workflow_from_template(template_path: str,
365
357
  path = target_path
366
358
 
367
359
  file = base_path / path
368
- if not file.exists():
360
+ if not file.exists() or file.stat().st_mtime < mtime:
369
361
  file.parent.mkdir(parents=True, exist_ok=True)
370
362
  with open(file, 'w') as f:
371
363
  f.write(content)
372
- else:
373
- if file.stat().st_mtime < mtime:
374
- with open(file, 'w') as f:
375
- f.write(content)
376
- else:
377
- if file.read_text() != content:
378
- logger.warning(
379
- f"`{file}` already exists and is different from the new one generated from template `{template_path}`"
380
- )
364
+ elif file.read_text() != content:
365
+ logger.warning(
366
+ f"`{file}` already exists and is different from the new one generated from template `{template_path}`"
367
+ )
381
368
 
382
369
  module = load_workflow_from_file(str(path), base_path, package)
383
370
  module.__mtime__ = max(mtime, module.__mtime__)
371
+ if module.__source__ == content:
372
+ module.__source__ = template, mapping, str(template_path)
384
373
 
385
374
  return module
386
375
 
@@ -422,8 +411,6 @@ def load_workflow(workflow: str | tuple[str, dict],
422
411
  w.__workflow_id__ = str(Path(w.__file__).relative_to(base_path))
423
412
  else:
424
413
  raise TypeError(f"Invalid workflow: {workflow}")
425
-
426
- w.__source__ = get_source(w, base_path)
427
414
 
428
415
  return w
429
416
 
@@ -36,6 +36,20 @@ class Report():
36
36
  config_path: Path | None = field(default=None, repr=False)
37
37
  script_path: Path | None = field(default=None, repr=False)
38
38
 
39
+ def __getstate__(self):
40
+ state = self.__dict__.copy()
41
+ state.pop('base_path')
42
+ for k in ['path', 'previous_path', 'config_path', 'script_path']:
43
+ if state[k] is not None:
44
+ state[k] = str(state[k])
45
+ return state
46
+
47
+ def __setstate__(self, state):
48
+ for k in ['path', 'previous_path', 'config_path', 'script_path']:
49
+ if state[k] is not None:
50
+ state[k] = Path(state[k])
51
+ self.__dict__.update(state)
52
+
39
53
  @property
40
54
  def previous(self):
41
55
  if self.previous_path is not None and self.base_path is not None:
@@ -84,7 +98,9 @@ class Report():
84
98
  @property
85
99
  def script(self):
86
100
  if self.script_path is not None and self.base_path is not None:
87
- return load_item(self.script_path, self.base_path)
101
+ source = load_item(self.script_path, self.base_path)
102
+ if isinstance(source, str):
103
+ return source
88
104
  else:
89
105
  return None
90
106
 
@@ -0,0 +1 @@
1
+ __version__ = "2.7.19"
@@ -1 +0,0 @@
1
- __version__ = "2.7.18"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes