QuLab 2.4.15__cp311-cp311-macosx_10_9_universal2.whl → 2.4.16__cp311-cp311-macosx_10_9_universal2.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: QuLab
3
- Version: 2.4.15
3
+ Version: 2.4.16
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,13 +1,13 @@
1
1
  qulab/__init__.py,sha256=P-Mx2p4TVmL91SoxoeXcj8Qm0x4xUf5Q_FLk0Yc_gIQ,138
2
2
  qulab/__main__.py,sha256=JgErYkiskih8Y6oRwowALtR-rwQhAAdqOYWjQraRIPI,59
3
3
  qulab/dicttree.py,sha256=tRRMpGZYVOLw0TEByE3_2Ss8FdOmzuGL9e1DWbs8qoY,13684
4
- qulab/fun.cpython-311-darwin.so,sha256=1cFTXrPgr32EX6kyYVdMM2CTag-1MMpy0D4atRhisPA,126848
5
- qulab/version.py,sha256=QW2MBz1JeuFtoyMh-qAewXiVGQGFzZAiBx69V3wIX5U,22
4
+ qulab/fun.cpython-311-darwin.so,sha256=4UizSKt5rDt7vdZVD0pkpw5COMzc0CVh4OpeSim3jFU,126848
5
+ qulab/version.py,sha256=rVOnxEJVvl0ZWvCblBzVBGcp0VALbV_koS5W-UB9zfk,22
6
6
  qulab/cli/__init__.py,sha256=tgDIkkeIoasQXAifJZ6NU8jDgpNgb2a-B0C4nF0evrE,559
7
7
  qulab/cli/config.py,sha256=QksTYD3-RBYBG8xnKLAh7EXrNOwxr128XXr30ZTFW6A,2983
8
8
  qulab/executor/__init__.py,sha256=LosPzOMaljSZY1thy_Fxtbrgq7uubJszMABEB7oM7tU,101
9
9
  qulab/executor/cli.py,sha256=LRSb5-J8Tn7dj-fxwCp3OP_6YUgPRoY-f8O18sbWG8I,5164
10
- qulab/executor/load.py,sha256=4qQrw9O5dmWYYwxWt15z7uc6B3YuRB7xKgKi0g8-YtA,10418
10
+ qulab/executor/load.py,sha256=yTLoWOtTvmCTuYFZ6qFsjBM_CvsrKgmUkBSHHz3223A,10899
11
11
  qulab/executor/schedule.py,sha256=SfMZys8WdmIvfW5fPM42g-F6XwewTdpC0-puhf5TA54,11721
12
12
  qulab/executor/storage.py,sha256=M66Q5_Uc5MMfc_QAuuaaexwAz7wxBPMkeleB5nRpQmI,4621
13
13
  qulab/executor/transform.py,sha256=inaOn6eqCs22ZZ0xAQl8s8YCoEACaXSwFNNu7jqdwAk,2148
@@ -91,9 +91,9 @@ qulab/visualization/plot_seq.py,sha256=UWTS6p9nfX_7B8ehcYo6UnSTUCjkBsNU9jiOeW2ca
91
91
  qulab/visualization/qdat.py,sha256=ZeevBYWkzbww4xZnsjHhw7wRorJCBzbG0iEu-XQB4EA,5735
92
92
  qulab/visualization/rot3d.py,sha256=lMrEJlRLwYe6NMBlGkKYpp_V9CTipOAuDy6QW_cQK00,734
93
93
  qulab/visualization/widgets.py,sha256=6KkiTyQ8J-ei70LbPQZAK35wjktY47w2IveOa682ftA,3180
94
- QuLab-2.4.15.dist-info/LICENSE,sha256=PRzIKxZtpQcH7whTG6Egvzl1A0BvnSf30tmR2X2KrpA,1065
95
- QuLab-2.4.15.dist-info/METADATA,sha256=EgZbZvkhzL5UTZFxqJ2yHVir2RSvAkmSCNd_nUgitdE,3699
96
- QuLab-2.4.15.dist-info/WHEEL,sha256=K10eKSN6_vzvMOgXxWbVOQNR7Orfl6gBTCpCI8bcYx4,114
97
- QuLab-2.4.15.dist-info/entry_points.txt,sha256=b0v1GXOwmxY-nCCsPN_rHZZvY9CtTbWqrGj8u1m8yHo,45
98
- QuLab-2.4.15.dist-info/top_level.txt,sha256=3T886LbAsbvjonu_TDdmgxKYUn939BVTRPxPl9r4cEg,6
99
- QuLab-2.4.15.dist-info/RECORD,,
94
+ QuLab-2.4.16.dist-info/LICENSE,sha256=PRzIKxZtpQcH7whTG6Egvzl1A0BvnSf30tmR2X2KrpA,1065
95
+ QuLab-2.4.16.dist-info/METADATA,sha256=6JcU_aAzDy5e3eGklWSR_xUELNWTZukNp65w5mch6ws,3699
96
+ QuLab-2.4.16.dist-info/WHEEL,sha256=K10eKSN6_vzvMOgXxWbVOQNR7Orfl6gBTCpCI8bcYx4,114
97
+ QuLab-2.4.16.dist-info/entry_points.txt,sha256=b0v1GXOwmxY-nCCsPN_rHZZvY9CtTbWqrGj8u1m8yHo,45
98
+ QuLab-2.4.16.dist-info/top_level.txt,sha256=3T886LbAsbvjonu_TDdmgxKYUn939BVTRPxPl9r4cEg,6
99
+ QuLab-2.4.16.dist-info/RECORD,,
qulab/executor/load.py CHANGED
@@ -15,6 +15,7 @@ from .storage import Result
15
15
 
16
16
  class SetConfigWorkflow():
17
17
  __timeout__ = None
18
+ __mtime__ = 0
18
19
 
19
20
  def __init__(self, key):
20
21
  self.key = key
@@ -200,10 +201,13 @@ def load_workflow_from_file(file_name: str,
200
201
  package='workflows') -> WorkflowType:
201
202
  base_path = Path(base_path)
202
203
  path = Path(file_name)
204
+ if not (base_path / path).exists():
205
+ raise FileNotFoundError(f"File not found: {base_path / path}")
203
206
  module_name = f"{package}.{'.'.join([*path.parts[:-1], path.stem])}"
204
207
  spec = spec_from_file_location(module_name, base_path / path)
205
208
  module = module_from_spec(spec)
206
209
  spec.loader.exec_module(module)
210
+ module.__mtime__ = (base_path / path).stat().st_mtime
207
211
 
208
212
  if hasattr(module, 'entries'):
209
213
  return module
@@ -224,13 +228,16 @@ def load_workflow_from_template(template_path: str,
224
228
  mappping: dict[str, str],
225
229
  base_path: str | Path,
226
230
  target_path: str | None = None,
227
- package='workflows') -> WorkflowType:
231
+ package='workflows',
232
+ mtime: float = 0) -> WorkflowType:
228
233
  base_path = Path(base_path)
229
234
  path = Path(template_path)
230
235
 
231
236
  with open(base_path / path) as f:
232
237
  content = f.read()
233
238
 
239
+ mtime = max(Path(template_path).stat().st_mtime, mtime)
240
+
234
241
  def replace(text):
235
242
  """
236
243
  将给定文本中的所有 _D_("var") 替换为 ${var}。
@@ -267,7 +274,7 @@ def load_workflow_from_template(template_path: str,
267
274
  with open(file, 'w') as f:
268
275
  f.write(content)
269
276
  else:
270
- if file.stat().st_mtime < Path(template_path).stat().st_mtime:
277
+ if file.stat().st_mtime < mtime:
271
278
  with open(file, 'w') as f:
272
279
  f.write(content)
273
280
  else:
@@ -277,22 +284,24 @@ def load_workflow_from_template(template_path: str,
277
284
  )
278
285
 
279
286
  module = load_workflow_from_file(str(path), base_path, package)
287
+ module.__mtime__ = max(mtime, module.__mtime__)
280
288
 
281
289
  return module
282
290
 
283
291
 
284
292
  def load_workflow(workflow: str | tuple[str, dict],
285
293
  base_path: str | Path,
286
- package='workflows') -> WorkflowType:
294
+ package='workflows',
295
+ mtime: float = 0) -> WorkflowType:
287
296
  if isinstance(workflow, tuple):
288
297
  if len(workflow) == 2:
289
298
  file_name, mapping = workflow
290
299
  w = load_workflow_from_template(file_name, mapping, base_path,
291
- None, package)
300
+ None, package, mtime)
292
301
  elif len(workflow) == 3:
293
302
  template_path, target_path, mapping = workflow
294
303
  w = load_workflow_from_template(template_path, mapping, base_path,
295
- target_path, package)
304
+ target_path, package, mtime)
296
305
  else:
297
306
  raise ValueError(f"Invalid workflow: {workflow}")
298
307
  w.__workflow_id__ = str(Path(w.__file__).relative_to(base_path))
@@ -312,8 +321,14 @@ def load_workflow(workflow: str | tuple[str, dict],
312
321
 
313
322
  def get_dependents(workflow: WorkflowType,
314
323
  code_path: str | Path) -> list[WorkflowType]:
315
- return [load_workflow(n, code_path) for n in workflow.depends()[0]]
324
+ return [
325
+ load_workflow(n, code_path, mtime=workflow.__mtime__)
326
+ for n in workflow.depends()[0]
327
+ ]
316
328
 
317
329
 
318
330
  def get_entries(workflow: WorkflowType, code_path: str | Path) -> WorkflowType:
319
- return [load_workflow(n, code_path) for n in workflow.entries()]
331
+ return [
332
+ load_workflow(n, code_path, mtime=workflow.__mtime__)
333
+ for n in workflow.entries()
334
+ ]
Binary file
qulab/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "2.4.15"
1
+ __version__ = "2.4.16"
File without changes