QuLab 2.2.6__cp312-cp312-win_amd64.whl → 2.2.8__cp312-cp312-win_amd64.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.
- {QuLab-2.2.6.dist-info → QuLab-2.2.8.dist-info}/METADATA +1 -1
- {QuLab-2.2.6.dist-info → QuLab-2.2.8.dist-info}/RECORD +13 -13
- qulab/fun.cp312-win_amd64.pyd +0 -0
- qulab/scan/expression.py +3 -0
- qulab/scan/record.py +0 -1
- qulab/scan/scan.py +54 -8
- qulab/scan/server.py +8 -4
- qulab/scan/space.py +2 -2
- qulab/version.py +1 -1
- {QuLab-2.2.6.dist-info → QuLab-2.2.8.dist-info}/LICENSE +0 -0
- {QuLab-2.2.6.dist-info → QuLab-2.2.8.dist-info}/WHEEL +0 -0
- {QuLab-2.2.6.dist-info → QuLab-2.2.8.dist-info}/entry_points.txt +0 -0
- {QuLab-2.2.6.dist-info → QuLab-2.2.8.dist-info}/top_level.txt +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
qulab/__init__.py,sha256=vkFybY8YSsQilYdThPRD83-btPAR41sy_WCXiM-6mME,141
|
|
2
2
|
qulab/__main__.py,sha256=V7iokU7awstgjCeiF_hoOdFyrqJwC_4QetiLe7cWvOQ,454
|
|
3
|
-
qulab/fun.cp312-win_amd64.pyd,sha256=
|
|
4
|
-
qulab/version.py,sha256=
|
|
3
|
+
qulab/fun.cp312-win_amd64.pyd,sha256=aeWq8f9Yo_3tM2LHylPTitt19mluBNSJpH8n5u6oIG8,32256
|
|
4
|
+
qulab/version.py,sha256=orWdhtLf5L0uyMwYMv-baYndrBUtQQg-ackBu8Y5UJo,21
|
|
5
5
|
qulab/monitor/__init__.py,sha256=xEVDkJF8issrsDeLqQmDsvtRmrf-UiViFcGTWuzdlFU,43
|
|
6
6
|
qulab/monitor/__main__.py,sha256=k2H1H5Zf9LLXTDLISJkbikLH-z0f1e5i5i6wXXYPOrE,105
|
|
7
7
|
qulab/monitor/config.py,sha256=y_5StMkdrbZO1ziyKBrvIkB7Jclp9RCPK1QbsOhCxnY,785
|
|
@@ -14,14 +14,14 @@ qulab/monitor/qt_compat.py,sha256=Eq7zlA4_XstB92NhtAqebtWU_Btw4lcwFO30YxZ-TPE,80
|
|
|
14
14
|
qulab/monitor/toolbar.py,sha256=HxqG6ywKFyQJM2Q1s7SnhuzjbyeROczAZKwxztD1WJ8,8213
|
|
15
15
|
qulab/scan/__init__.py,sha256=RR_0NQcr8Mi3vpWdypydbijQ1rXA0D3DEidQ7xjNslM,133
|
|
16
16
|
qulab/scan/curd.py,sha256=yaTglGiS6mlk0GqDHi_w8T02XGBMvDZtXSdML7zDywk,7117
|
|
17
|
-
qulab/scan/expression.py,sha256=
|
|
17
|
+
qulab/scan/expression.py,sha256=4JeagGnwyOtLbz9UFQjcloRUZpIPvBFr2HY8UOxMW_E,16351
|
|
18
18
|
qulab/scan/models.py,sha256=ZvXkJEt5Yz3Sjx0JKzYka-q2Uo-w_iVzHgH8A6DbjF0,18236
|
|
19
19
|
qulab/scan/optimize.py,sha256=MlT4y422CnP961IR384UKryyZh8riNvrPSd2z_MXLEg,2356
|
|
20
20
|
qulab/scan/query.py,sha256=RM8bG4Tcx_PaNk8tv9HdlTZ1dGuuSr3sZVkYVq2BtfQ,12183
|
|
21
|
-
qulab/scan/record.py,sha256=
|
|
22
|
-
qulab/scan/scan.py,sha256=
|
|
23
|
-
qulab/scan/server.py,sha256=
|
|
24
|
-
qulab/scan/space.py,sha256=
|
|
21
|
+
qulab/scan/record.py,sha256=aBpUllhKsBRhPOwZwsp3rcw2HB-3ne9yLYHLBeXXM-M,21669
|
|
22
|
+
qulab/scan/scan.py,sha256=hYTEEa4frIN6HraNleoytnCZjZ0c_XWOI1DSLchkpuE,37589
|
|
23
|
+
qulab/scan/server.py,sha256=eukKCsJphmYTiqvn4HY8Dc-tTEzDkxXHgApVvxtX0Fc,14662
|
|
24
|
+
qulab/scan/space.py,sha256=iPk0ZuoV2MkHoobHv6cVLF25V8JtkQ4djQjLNcPw8ow,5467
|
|
25
25
|
qulab/scan/utils.py,sha256=30qnYvyFyctwcWxOCUpCNxXgGysA7xdIDzYbjwxGUzA,3744
|
|
26
26
|
qulab/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
27
|
qulab/storage/__main__.py,sha256=6-EjN0waX1yfcMPJXqpIr9UlrIEsSCFApm5G-ZeaPMQ,1742
|
|
@@ -78,9 +78,9 @@ qulab/visualization/plot_layout.py,sha256=yAnMONOms7_szCdng-8wPpUMPis5UnbaNNzV4K
|
|
|
78
78
|
qulab/visualization/plot_seq.py,sha256=h9D0Yl_yO64IwlvBgzMu9EBKr9gg6y8QE55gu2PfTns,2783
|
|
79
79
|
qulab/visualization/qdat.py,sha256=HubXFu4nfcA7iUzghJGle1C86G6221hicLR0b-GqhKQ,5887
|
|
80
80
|
qulab/visualization/widgets.py,sha256=HcYwdhDtLreJiYaZuN3LfofjJmZcLwjMfP5aasebgDo,3266
|
|
81
|
-
QuLab-2.2.
|
|
82
|
-
QuLab-2.2.
|
|
83
|
-
QuLab-2.2.
|
|
84
|
-
QuLab-2.2.
|
|
85
|
-
QuLab-2.2.
|
|
86
|
-
QuLab-2.2.
|
|
81
|
+
QuLab-2.2.8.dist-info/LICENSE,sha256=b4NRQ-GFVpJMT7RuExW3NwhfbrYsX7AcdB7Gudok-fs,1086
|
|
82
|
+
QuLab-2.2.8.dist-info/METADATA,sha256=sGDgwcwjJi-2kvUJ00pE3vi5gRnY9YMGsdejl0a15eI,3609
|
|
83
|
+
QuLab-2.2.8.dist-info/WHEEL,sha256=fZWyj_84lK0cA-ZNCsdwhbJl0OTrpWkxInEn424qrSs,102
|
|
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,,
|
qulab/fun.cp312-win_amd64.pyd
CHANGED
|
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
qulab/scan/scan.py
CHANGED
|
@@ -310,7 +310,10 @@ class Scan():
|
|
|
310
310
|
self._main_task.cancel()
|
|
311
311
|
except:
|
|
312
312
|
pass
|
|
313
|
-
|
|
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
|
-
|
|
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'] =
|
|
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(
|
|
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
|
-
|
|
165
|
-
|
|
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
|
-
|
|
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=
|
|
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=
|
|
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.
|
|
1
|
+
__version__ = "2.2.8"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|