QuLab 2.2.6__cp311-cp311-macosx_10_9_universal2.whl → 2.2.8__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.1
2
2
  Name: QuLab
3
- Version: 2.2.6
3
+ Version: 2.2.8
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,7 +1,7 @@
1
1
  qulab/__init__.py,sha256=P-Mx2p4TVmL91SoxoeXcj8Qm0x4xUf5Q_FLk0Yc_gIQ,138
2
2
  qulab/__main__.py,sha256=ZC1NKaoxKyy60DaCfB8vYnB1z3RXQ2j8E1sRZ4A8sXE,428
3
- qulab/fun.cpython-311-darwin.so,sha256=VU-AxnPqaotR3zCtI9i09cvMWyTLX6x32LzM9YIkeZg,159616
4
- qulab/version.py,sha256=CsrswO-ECCDHSY48Nv5lOOdRgL8EGAixBOHDf7PkRZA,21
3
+ qulab/fun.cpython-311-darwin.so,sha256=EHucjdofGsMX53ufN_AydAAW7OYWofvI5v-bRgRtM9I,159616
4
+ qulab/version.py,sha256=orWdhtLf5L0uyMwYMv-baYndrBUtQQg-ackBu8Y5UJo,21
5
5
  qulab/monitor/__init__.py,sha256=nTHelnDpxRS_fl_B38TsN0njgq8eVTEz9IAnN3NbDlM,42
6
6
  qulab/monitor/__main__.py,sha256=w3yUcqq195LzSnXTkQcuC1RSFRhy4oQ_PEBmucXguME,97
7
7
  qulab/monitor/config.py,sha256=fQ5JcsMApKc1UwANEnIvbDQZl8uYW0tle92SaYtX9lI,744
@@ -14,14 +14,14 @@ qulab/monitor/qt_compat.py,sha256=OK71_JSO_iyXjRIKHANmaK4Lx4bILUzmXI-mwKg3QeI,78
14
14
  qulab/monitor/toolbar.py,sha256=WEag6cxAtEsOLL14XvM7pSE56EA3MO188_JuprNjdBs,7948
15
15
  qulab/scan/__init__.py,sha256=ZX4WsvqYxvJeHLgGSrtJoAnVU94gxY7EHKMxYooMERg,130
16
16
  qulab/scan/curd.py,sha256=thq_qfi3qng3Zx-1uhNG64IQhGCuum_LR4MOKnS8cDI,6896
17
- qulab/scan/expression.py,sha256=-aTYbjFQNI1mwOcoSBztqhKfGJpu_n4a1QnWro_xnTU,15694
17
+ qulab/scan/expression.py,sha256=JsJ00qK05QVDAgz-husRuov7hKg8nW75rsTwLG8RH7Q,15843
18
18
  qulab/scan/models.py,sha256=5Jpo25WGMWs0GtLzYLsWO61G3-FFYx5BHhBr2b6rOTE,17681
19
19
  qulab/scan/optimize.py,sha256=vErjRTCtn2MwMF5Xyhs1P4gHF2IFHv_EqxsUvH_4y7k,2287
20
20
  qulab/scan/query.py,sha256=-5uHMhXSyGovK1oy_uUbGVEbRFzaMBkP78ZMNfI3jD0,11809
21
- qulab/scan/record.py,sha256=xgmhtL9l019HYHOHvyzK1vxqagGam51rAM7sj9ZWm5U,21103
22
- qulab/scan/scan.py,sha256=YPGeuBwxepwmKvz3HE0X5euHqPQGSc9NUGEPEiPRiso,34884
23
- qulab/scan/server.py,sha256=u6in_8-AfcCA4pGAolNR_2emlewGdc3bN6c0pDygBWY,14158
24
- qulab/scan/space.py,sha256=jDmFY2FcYe-Qcp16YBhAEdTKibOAsHQUnpDrpcPhvzg,5279
21
+ qulab/scan/record.py,sha256=-FL9JMgfhvkT0q7dhJJXbjXOrOkTIk2J9oPmxP6psuA,21070
22
+ qulab/scan/scan.py,sha256=KRCoq0ezqwIQlOifUAk9hUR-G-ryywUwEwP__rLMdPo,36499
23
+ qulab/scan/server.py,sha256=ZT-J447xuLSpmbTNm5dNIz8_CXKOow66_bjkFNGh_vI,14274
24
+ qulab/scan/space.py,sha256=7Won0i4-5wuFeIACFx2Lq3BAqc_3S4S_nuVaSDTSeZs,5293
25
25
  qulab/scan/utils.py,sha256=Pg_tCf3SUKTiPSBqb6Enkgx4bAyQJAkDGe9uYys1xVU,3613
26
26
  qulab/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  qulab/storage/__main__.py,sha256=3emxxRry8BB0m8hUZvJ_oBqkPy7ksV7flHB_KEDXZuI,1692
@@ -78,9 +78,9 @@ qulab/visualization/plot_layout.py,sha256=clNw9QjE_kVNpIIx2Ob4YhAz2fucPGMuzkoIrO
78
78
  qulab/visualization/plot_seq.py,sha256=lphYF4VhkEdc_wWr1kFBwrx2yujkyFPFaJ3pjr61awI,2693
79
79
  qulab/visualization/qdat.py,sha256=ZeevBYWkzbww4xZnsjHhw7wRorJCBzbG0iEu-XQB4EA,5735
80
80
  qulab/visualization/widgets.py,sha256=6KkiTyQ8J-ei70LbPQZAK35wjktY47w2IveOa682ftA,3180
81
- QuLab-2.2.6.dist-info/LICENSE,sha256=PRzIKxZtpQcH7whTG6Egvzl1A0BvnSf30tmR2X2KrpA,1065
82
- QuLab-2.2.6.dist-info/METADATA,sha256=4vOBx495seNQlHygPaIrLKr2y7C5NtMIhPzwUnnI2r8,3510
83
- QuLab-2.2.6.dist-info/WHEEL,sha256=eupBwbXGAhwNAPJSvj5BiShZwdZO8jnQ5yHfv-9aUGw,115
84
- QuLab-2.2.6.dist-info/entry_points.txt,sha256=ohBzutEnQimP_BZWiuXdSliu4QAYSHHcN0PZD8c7ZCY,46
85
- QuLab-2.2.6.dist-info/top_level.txt,sha256=3T886LbAsbvjonu_TDdmgxKYUn939BVTRPxPl9r4cEg,6
86
- QuLab-2.2.6.dist-info/RECORD,,
81
+ QuLab-2.2.8.dist-info/LICENSE,sha256=PRzIKxZtpQcH7whTG6Egvzl1A0BvnSf30tmR2X2KrpA,1065
82
+ QuLab-2.2.8.dist-info/METADATA,sha256=0YYD14QsQsGNgqZ-Wo26Y6N3Fd47CbE501cTGU0vah4,3510
83
+ QuLab-2.2.8.dist-info/WHEEL,sha256=eupBwbXGAhwNAPJSvj5BiShZwdZO8jnQ5yHfv-9aUGw,115
84
+ QuLab-2.2.8.dist-info/entry_points.txt,sha256=ohBzutEnQimP_BZWiuXdSliu4QAYSHHcN0PZD8c7ZCY,46
85
+ QuLab-2.2.8.dist-info/top_level.txt,sha256=3T886LbAsbvjonu_TDdmgxKYUn939BVTRPxPl9r4cEg,6
86
+ QuLab-2.2.8.dist-info/RECORD,,
Binary file
qulab/scan/expression.py CHANGED
@@ -284,6 +284,9 @@ class Expression():
284
284
  return ObjectMethod(self, '__getitem__', other)
285
285
 
286
286
  def __getattr__(self, other):
287
+ if isinstance(other, str):
288
+ if other.startswith('_') or other in self.__dict__:
289
+ return super().__getattr__(other)
287
290
  if isinstance(other, Expression):
288
291
  other = other.eval(_default_env)
289
292
  return ObjectMethod(self, '__getattr__', other)
qulab/scan/record.py CHANGED
@@ -453,7 +453,6 @@ class Record():
453
453
  if isinstance(d, BufferList):
454
454
  if isinstance(d.file, str):
455
455
  d.file = self._file.parent.parent.parent.parent / d.file
456
- d._slice = slice
457
456
  if buffer_to_array:
458
457
  return d.toarray()
459
458
  else:
qulab/scan/scan.py CHANGED
@@ -310,7 +310,10 @@ class Scan():
310
310
  self._main_task.cancel()
311
311
  except:
312
312
  pass
313
- self._executors.shutdown()
313
+ try:
314
+ self._executors.shutdown()
315
+ except:
316
+ pass
314
317
 
315
318
  @property
316
319
  def current_level(self):
@@ -323,7 +326,7 @@ class Scan():
323
326
  async def _emit(self, current_level, step, position, variables: dict[str,
324
327
  Any]):
325
328
  for key, value in list(variables.items()):
326
- if key.startswith('*'):
329
+ if key.startswith('*') or ',' in key:
327
330
  await _unpack(key, variables)
328
331
  elif inspect.isawaitable(value) and not self.hiden(key):
329
332
  variables[key] = await value
@@ -356,8 +359,8 @@ class Scan():
356
359
  self._hide_pattern_re = re.compile('|'.join(self.description['hiden']))
357
360
 
358
361
  def hiden(self, name: str) -> bool:
359
- return bool(
360
- self._hide_pattern_re.match(name)) and not name.startswith('*')
362
+ return bool(self._hide_pattern_re.match(name)) or name.startswith(
363
+ '*') or ',' in name
361
364
 
362
365
  async def _filter(self, variables: dict[str, Any], level: int = 0):
363
366
  try:
@@ -444,6 +447,11 @@ class Scan():
444
447
  except:
445
448
  pass
446
449
  self.description['consts'][name] = value
450
+
451
+ if ',' in name:
452
+ for key in name.split(','):
453
+ if not key.startswith('*'):
454
+ self.add_depends(key, [name])
447
455
  if setter:
448
456
  self.description['setters'][name] = setter
449
457
 
@@ -903,7 +911,10 @@ def assymbly(description):
903
911
  axis[name] = tuple(sorted(d))
904
912
  else:
905
913
  axis[name] = tuple(sorted(set(axis[name]) | d))
906
- description['axis'] = axis
914
+ description['axis'] = {
915
+ k: tuple([x for x in v if x >= 0])
916
+ for k, v in axis.items()
917
+ }
907
918
  description['independent_variables'] = independent_variables
908
919
 
909
920
  return description
@@ -974,7 +985,7 @@ async def _iter_level(variables,
974
985
 
975
986
  if opts:
976
987
  for key in list(variables.keys()):
977
- if key.startswith('*'):
988
+ if key.startswith('*') or ',' in key:
978
989
  await _unpack(key, variables)
979
990
 
980
991
  for name, opt in opts.items():
@@ -1026,7 +1037,8 @@ async def _unpack(key, variables):
1026
1037
  if inspect.isawaitable(x):
1027
1038
  x = await x
1028
1039
  if key.startswith('**'):
1029
- assert isinstance(x, dict), f"Should promise a dict for `**` symbol."
1040
+ assert isinstance(
1041
+ x, dict), f"Should promise a dict for `**` symbol. {key}"
1030
1042
  if "{key}" in key:
1031
1043
  for k, v in x.items():
1032
1044
  variables[key[2:].format(key=k)] = v
@@ -1035,10 +1047,44 @@ async def _unpack(key, variables):
1035
1047
  elif key.startswith('*'):
1036
1048
  assert isinstance(
1037
1049
  x, (list, tuple,
1038
- np.ndarray)), f"Should promise a list for `*` symbol."
1050
+ np.ndarray)), f"Should promise a list for `*` symbol. {key}"
1039
1051
  for i, v in enumerate(x):
1040
1052
  k = key[1:].format(i=i)
1041
1053
  variables[k] = v
1054
+ elif ',' in key:
1055
+ keys1, keys2 = [], []
1056
+ args = None
1057
+ for k in key.split(','):
1058
+ if k.startswith('*'):
1059
+ if args is None:
1060
+ args = k
1061
+ else:
1062
+ raise ValueError(f'Only one `*` symbol is allowed. {key}')
1063
+ elif args is None:
1064
+ keys1.append(k)
1065
+ else:
1066
+ keys2.append(k)
1067
+ assert isinstance(
1068
+ x,
1069
+ (list, tuple,
1070
+ np.ndarray)), f"Should promise a list for multiple symbols. {key}"
1071
+ if args is None:
1072
+ assert len(keys1) == len(
1073
+ x), f"Length of keys and values should be equal. {key}"
1074
+ for k, v in zip(keys1, x):
1075
+ variables[k] = v
1076
+ else:
1077
+ assert len(keys1) + len(keys2) <= len(
1078
+ x), f"Too many values for unpacking. {key}"
1079
+ for k, v in zip(keys1, x[:len(keys1)]):
1080
+ variables[k] = v
1081
+ end = -len(keys2) if keys2 else None
1082
+ for i, v in enumerate(x[len(keys1):end]):
1083
+ k = args[1:].format(i=i)
1084
+ variables[k] = v
1085
+ if keys2:
1086
+ for k, v in zip(keys2, x[end:]):
1087
+ variables[k] = v
1042
1088
  else:
1043
1089
  return
1044
1090
  del variables[key]
qulab/scan/server.py CHANGED
@@ -160,9 +160,9 @@ async def handle(session: Session, request: Request, datapath: Path):
160
160
  else:
161
161
  iter_id = uuid.uuid3(namespace, str(time.time_ns())).bytes
162
162
  record = get_record(session, msg['record_id'], datapath)
163
- bufferlist = record.get(msg['key'],
164
- buffer_to_array=False,
165
- slice=msg['slice'])
163
+ bufferlist = record.get(msg['key'], buffer_to_array=False)
164
+ if msg['slice']:
165
+ bufferlist._slice = msg['slice']
166
166
  it = bufferlist.iter()
167
167
  for _, _ in zip(range(msg['start']), it):
168
168
  pass
@@ -328,7 +328,11 @@ async def serv(port,
328
328
  while True:
329
329
  identity, msg = await sock.recv_multipart()
330
330
  received += len(msg)
331
- req = Request(sock, identity, msg)
331
+ try:
332
+ req = Request(sock, identity, msg)
333
+ except:
334
+ logger.exception('bad request')
335
+ continue
332
336
  asyncio.create_task(
333
337
  handle_with_timeout(session, req, datapath, timeout=60.0))
334
338
  if received > buffer_size or time.time(
qulab/scan/space.py CHANGED
@@ -147,7 +147,7 @@ class Optimizer():
147
147
  high,
148
148
  prior="uniform",
149
149
  base=10,
150
- transform=None,
150
+ transform="normalize",
151
151
  name=None,
152
152
  dtype=np.int64) -> OptimizeSpace:
153
153
  return OptimizeSpace(
@@ -158,7 +158,7 @@ class Optimizer():
158
158
  high,
159
159
  prior="uniform",
160
160
  base=10,
161
- transform=None,
161
+ transform="normalize",
162
162
  name=None,
163
163
  dtype=float) -> OptimizeSpace:
164
164
  return OptimizeSpace(
qulab/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "2.2.6"
1
+ __version__ = "2.2.8"
File without changes
File without changes