QuLab 2.2.5__cp311-cp311-macosx_10_9_universal2.whl → 2.2.6__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.
- {QuLab-2.2.5.dist-info → QuLab-2.2.6.dist-info}/METADATA +1 -1
- {QuLab-2.2.5.dist-info → QuLab-2.2.6.dist-info}/RECORD +12 -12
- qulab/fun.cpython-311-darwin.so +0 -0
- qulab/scan/query.py +14 -6
- qulab/scan/record.py +52 -52
- qulab/scan/scan.py +6 -4
- qulab/sys/rpc/zmq_socket.py +6 -1
- qulab/version.py +1 -1
- {QuLab-2.2.5.dist-info → QuLab-2.2.6.dist-info}/LICENSE +0 -0
- {QuLab-2.2.5.dist-info → QuLab-2.2.6.dist-info}/WHEEL +0 -0
- {QuLab-2.2.5.dist-info → QuLab-2.2.6.dist-info}/entry_points.txt +0 -0
- {QuLab-2.2.5.dist-info → QuLab-2.2.6.dist-info}/top_level.txt +0 -0
|
@@ -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=
|
|
4
|
-
qulab/version.py,sha256=
|
|
3
|
+
qulab/fun.cpython-311-darwin.so,sha256=VU-AxnPqaotR3zCtI9i09cvMWyTLX6x32LzM9YIkeZg,159616
|
|
4
|
+
qulab/version.py,sha256=CsrswO-ECCDHSY48Nv5lOOdRgL8EGAixBOHDf7PkRZA,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
|
|
@@ -17,9 +17,9 @@ qulab/scan/curd.py,sha256=thq_qfi3qng3Zx-1uhNG64IQhGCuum_LR4MOKnS8cDI,6896
|
|
|
17
17
|
qulab/scan/expression.py,sha256=-aTYbjFQNI1mwOcoSBztqhKfGJpu_n4a1QnWro_xnTU,15694
|
|
18
18
|
qulab/scan/models.py,sha256=5Jpo25WGMWs0GtLzYLsWO61G3-FFYx5BHhBr2b6rOTE,17681
|
|
19
19
|
qulab/scan/optimize.py,sha256=vErjRTCtn2MwMF5Xyhs1P4gHF2IFHv_EqxsUvH_4y7k,2287
|
|
20
|
-
qulab/scan/query.py,sha256
|
|
21
|
-
qulab/scan/record.py,sha256=
|
|
22
|
-
qulab/scan/scan.py,sha256=
|
|
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
23
|
qulab/scan/server.py,sha256=u6in_8-AfcCA4pGAolNR_2emlewGdc3bN6c0pDygBWY,14158
|
|
24
24
|
qulab/scan/space.py,sha256=jDmFY2FcYe-Qcp16YBhAEdTKibOAsHQUnpDrpcPhvzg,5279
|
|
25
25
|
qulab/scan/utils.py,sha256=Pg_tCf3SUKTiPSBqb6Enkgx4bAyQJAkDGe9uYys1xVU,3613
|
|
@@ -70,7 +70,7 @@ qulab/sys/rpc/server.py,sha256=e3R0gwOHpLEkSp7Tb43FMSDvqSG-pjrkskdISKQRseE,713
|
|
|
70
70
|
qulab/sys/rpc/socket.py,sha256=e3R0gwOHpLEkSp7Tb43FMSDvqSG-pjrkskdISKQRseE,713
|
|
71
71
|
qulab/sys/rpc/utils.py,sha256=6YGFOkY7o09lkA_I1FIP9_1Up3k2F1KOkftvu0_8lxo,594
|
|
72
72
|
qulab/sys/rpc/worker.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
|
-
qulab/sys/rpc/zmq_socket.py,sha256=
|
|
73
|
+
qulab/sys/rpc/zmq_socket.py,sha256=2uc9MjCRUwWm6iPmi2VGnOYNf9yWFSUzEVYrx0jZvPU,8272
|
|
74
74
|
qulab/visualization/__init__.py,sha256=26cuHt3QIJXUb3VaMxlJx3IQTOUVJFKlYBZr7WMP53M,6129
|
|
75
75
|
qulab/visualization/__main__.py,sha256=9zKK3yZFy0leU40ou6BpRC1Fsetfc1gjjFzIZYIwP6Y,1639
|
|
76
76
|
qulab/visualization/_autoplot.py,sha256=jddg40dX48Wd8G6NLFA_Kf7z1QxdrZBDS99Xx2GLMqs,14099
|
|
@@ -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.
|
|
82
|
-
QuLab-2.2.
|
|
83
|
-
QuLab-2.2.
|
|
84
|
-
QuLab-2.2.
|
|
85
|
-
QuLab-2.2.
|
|
86
|
-
QuLab-2.2.
|
|
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,,
|
qulab/fun.cpython-311-darwin.so
CHANGED
|
Binary file
|
qulab/scan/query.py
CHANGED
|
@@ -16,9 +16,13 @@ from .scan import default_server
|
|
|
16
16
|
from .server import get_local_record
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
def get_record(id,
|
|
19
|
+
def get_record(id,
|
|
20
|
+
database=default_server,
|
|
21
|
+
socket=None,
|
|
22
|
+
session=None) -> Record:
|
|
20
23
|
if isinstance(database, str) and database.startswith('tcp://'):
|
|
21
|
-
with ZMQContextManager(zmq.DEALER, connect=database
|
|
24
|
+
with ZMQContextManager(zmq.DEALER, connect=database,
|
|
25
|
+
socket=socket) as socket:
|
|
22
26
|
socket.send_pyobj({
|
|
23
27
|
'method': 'record_description',
|
|
24
28
|
'record_id': id
|
|
@@ -29,12 +33,16 @@ def get_record(id, database=default_server) -> Record:
|
|
|
29
33
|
d.id = id
|
|
30
34
|
d.database = database
|
|
31
35
|
d._file = None
|
|
36
|
+
d._sock = socket
|
|
32
37
|
return d
|
|
33
38
|
else:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
if session is None:
|
|
40
|
+
db_file = Path(database) / 'data.db'
|
|
41
|
+
engine = create_engine(f'sqlite:///{db_file}')
|
|
42
|
+
Session = sessionmaker(bind=engine)
|
|
43
|
+
with Session() as session:
|
|
44
|
+
return get_local_record(session, id, database)
|
|
45
|
+
else:
|
|
38
46
|
return get_local_record(session, id, database)
|
|
39
47
|
|
|
40
48
|
|
qulab/scan/record.py
CHANGED
|
@@ -56,6 +56,7 @@ class BufferList():
|
|
|
56
56
|
self._slice = slice
|
|
57
57
|
self._lock = Lock()
|
|
58
58
|
self._data_id = None
|
|
59
|
+
self._sock = None
|
|
59
60
|
|
|
60
61
|
def __repr__(self):
|
|
61
62
|
return f"<BufferList: shape={self.shape}, lu={self.lu}, rd={self.rd}, slice={self._slice}>"
|
|
@@ -82,6 +83,7 @@ class BufferList():
|
|
|
82
83
|
self._slice = None
|
|
83
84
|
self._lock = Lock()
|
|
84
85
|
self._data_id = None
|
|
86
|
+
self._sock = None
|
|
85
87
|
|
|
86
88
|
@property
|
|
87
89
|
def shape(self):
|
|
@@ -156,7 +158,9 @@ class BufferList():
|
|
|
156
158
|
yield pos, value
|
|
157
159
|
else:
|
|
158
160
|
server, record_id, key = self._data_id
|
|
159
|
-
with ZMQContextManager(zmq.DEALER,
|
|
161
|
+
with ZMQContextManager(zmq.DEALER,
|
|
162
|
+
connect=server,
|
|
163
|
+
socket=self._sock) as socket:
|
|
160
164
|
iter_id = b''
|
|
161
165
|
start = 0
|
|
162
166
|
try:
|
|
@@ -200,7 +204,7 @@ class BufferList():
|
|
|
200
204
|
d.append(value)
|
|
201
205
|
return p, d
|
|
202
206
|
|
|
203
|
-
def
|
|
207
|
+
def toarray(self):
|
|
204
208
|
pos, data = self.items()
|
|
205
209
|
if self._slice:
|
|
206
210
|
pos = np.asarray(pos)
|
|
@@ -294,7 +298,7 @@ class BufferList():
|
|
|
294
298
|
def __getitem__(self, slice_tuple: slice | EllipsisType
|
|
295
299
|
| tuple[slice | int | EllipsisType, ...]):
|
|
296
300
|
self._slice, contract, reversed = self._full_slice(slice_tuple)
|
|
297
|
-
ret = self.
|
|
301
|
+
ret = self.toarray()
|
|
298
302
|
slices = []
|
|
299
303
|
for i, s in enumerate(self._slice):
|
|
300
304
|
if i in contract:
|
|
@@ -319,6 +323,7 @@ class Record():
|
|
|
319
323
|
self._pos = []
|
|
320
324
|
self._last_vars = set()
|
|
321
325
|
self._file = None
|
|
326
|
+
self._sock = None
|
|
322
327
|
|
|
323
328
|
for name, value in self.description['intrinsic_loops'].items():
|
|
324
329
|
self._items[name] = value
|
|
@@ -348,6 +353,7 @@ class Record():
|
|
|
348
353
|
self._last_vars = set()
|
|
349
354
|
self.database = None
|
|
350
355
|
self._file = None
|
|
356
|
+
self._sock = None
|
|
351
357
|
|
|
352
358
|
@property
|
|
353
359
|
def axis(self):
|
|
@@ -361,7 +367,8 @@ class Record():
|
|
|
361
367
|
return cls(config_id)
|
|
362
368
|
if self.is_remote_record():
|
|
363
369
|
with ZMQContextManager(zmq.DEALER,
|
|
364
|
-
connect=self.database
|
|
370
|
+
connect=self.database,
|
|
371
|
+
socket=self._sock) as socket:
|
|
365
372
|
socket.send_pyobj({
|
|
366
373
|
'method': 'config_get',
|
|
367
374
|
'config_id': config_id
|
|
@@ -375,6 +382,31 @@ class Record():
|
|
|
375
382
|
session.commit()
|
|
376
383
|
return cls(config)
|
|
377
384
|
|
|
385
|
+
def scripts(self, session=None):
|
|
386
|
+
scripts = self.description['entry']['scripts']
|
|
387
|
+
if isinstance(scripts, list):
|
|
388
|
+
return scripts
|
|
389
|
+
else:
|
|
390
|
+
cell_id = scripts
|
|
391
|
+
|
|
392
|
+
if self.is_remote_record():
|
|
393
|
+
with ZMQContextManager(zmq.DEALER,
|
|
394
|
+
connect=self.database,
|
|
395
|
+
socket=self._sock) as socket:
|
|
396
|
+
socket.send_pyobj({
|
|
397
|
+
'method': 'notebook_history',
|
|
398
|
+
'cell_id': cell_id
|
|
399
|
+
})
|
|
400
|
+
return socket.recv_pyobj()
|
|
401
|
+
elif self.is_local_record():
|
|
402
|
+
from .models import Cell
|
|
403
|
+
assert session is not None, "session is required for local record"
|
|
404
|
+
cell = session.get(Cell, cell_id)
|
|
405
|
+
return [
|
|
406
|
+
cell.input.text
|
|
407
|
+
for cell in cell.notebook.cells[1:cell.index + 2]
|
|
408
|
+
]
|
|
409
|
+
|
|
378
410
|
def is_local_record(self):
|
|
379
411
|
return not self.is_cache_record() and not self.is_remote_record()
|
|
380
412
|
|
|
@@ -389,15 +421,13 @@ class Record():
|
|
|
389
421
|
self.flush()
|
|
390
422
|
|
|
391
423
|
def __getitem__(self, key):
|
|
392
|
-
|
|
393
|
-
if isinstance(ret, Space):
|
|
394
|
-
ret = ret.toarray()
|
|
395
|
-
return ret
|
|
424
|
+
return self.get(key, buffer_to_array=True)
|
|
396
425
|
|
|
397
|
-
def get(self, key, default=_not_given, buffer_to_array=False
|
|
426
|
+
def get(self, key, default=_not_given, buffer_to_array=False):
|
|
398
427
|
if self.is_remote_record():
|
|
399
428
|
with ZMQContextManager(zmq.DEALER,
|
|
400
|
-
connect=self.database
|
|
429
|
+
connect=self.database,
|
|
430
|
+
socket=self._sock) as socket:
|
|
401
431
|
socket.send_pyobj({
|
|
402
432
|
'method': 'record_getitem',
|
|
403
433
|
'record_id': self.id,
|
|
@@ -405,25 +435,14 @@ class Record():
|
|
|
405
435
|
})
|
|
406
436
|
ret = socket.recv_pyobj()
|
|
407
437
|
if isinstance(ret, BufferList):
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
'method': 'bufferlist_slice',
|
|
411
|
-
'record_id': self.id,
|
|
412
|
-
'key': key,
|
|
413
|
-
'slice': slice
|
|
414
|
-
})
|
|
415
|
-
lst = socket.recv_pyobj()
|
|
416
|
-
ret._list = lst
|
|
417
|
-
ret._slice = slice
|
|
418
|
-
return ret.array()
|
|
419
|
-
else:
|
|
420
|
-
ret._data_id = self.database, self.id, key
|
|
421
|
-
return ret
|
|
422
|
-
elif isinstance(ret, Space):
|
|
438
|
+
ret._data_id = self.database, self.id, key
|
|
439
|
+
ret._sock = socket
|
|
423
440
|
if buffer_to_array:
|
|
424
441
|
return ret.toarray()
|
|
425
442
|
else:
|
|
426
443
|
return ret
|
|
444
|
+
elif isinstance(ret, Space) and buffer_to_array:
|
|
445
|
+
return ret.toarray()
|
|
427
446
|
else:
|
|
428
447
|
return ret
|
|
429
448
|
else:
|
|
@@ -436,7 +455,7 @@ class Record():
|
|
|
436
455
|
d.file = self._file.parent.parent.parent.parent / d.file
|
|
437
456
|
d._slice = slice
|
|
438
457
|
if buffer_to_array:
|
|
439
|
-
return d.
|
|
458
|
+
return d.toarray()
|
|
440
459
|
else:
|
|
441
460
|
return d
|
|
442
461
|
elif isinstance(d, Space):
|
|
@@ -450,7 +469,8 @@ class Record():
|
|
|
450
469
|
def keys(self):
|
|
451
470
|
if self.is_remote_record():
|
|
452
471
|
with ZMQContextManager(zmq.DEALER,
|
|
453
|
-
connect=self.database
|
|
472
|
+
connect=self.database,
|
|
473
|
+
socket=self._sock) as socket:
|
|
454
474
|
socket.send_pyobj({
|
|
455
475
|
'method': 'record_keys',
|
|
456
476
|
'record_id': self.id
|
|
@@ -517,7 +537,8 @@ class Record():
|
|
|
517
537
|
def delete(self):
|
|
518
538
|
if self.is_remote_record():
|
|
519
539
|
with ZMQContextManager(zmq.DEALER,
|
|
520
|
-
connect=self.database
|
|
540
|
+
connect=self.database,
|
|
541
|
+
socket=self._sock) as socket:
|
|
521
542
|
socket.send_pyobj({
|
|
522
543
|
'method': 'record_delete',
|
|
523
544
|
'record_id': self.id
|
|
@@ -553,35 +574,14 @@ class Record():
|
|
|
553
574
|
with z.open('config.pkl', 'w') as f:
|
|
554
575
|
f.write(dill.dumps(self.config()))
|
|
555
576
|
|
|
556
|
-
def scripts(self, session=None):
|
|
557
|
-
scripts = self.description['entry']['scripts']
|
|
558
|
-
if isinstance(scripts, list):
|
|
559
|
-
return scripts
|
|
560
|
-
else:
|
|
561
|
-
cell_id = scripts
|
|
562
|
-
|
|
563
|
-
if self.is_remote_record():
|
|
564
|
-
with ZMQContextManager(zmq.DEALER,
|
|
565
|
-
connect=self.database) as socket:
|
|
566
|
-
socket.send_pyobj({
|
|
567
|
-
'method': 'notebook_history',
|
|
568
|
-
'cell_id': cell_id
|
|
569
|
-
})
|
|
570
|
-
return socket.recv_pyobj()
|
|
571
|
-
elif self.is_local_record():
|
|
572
|
-
from .models import Cell
|
|
573
|
-
assert session is not None, "session is required for local record"
|
|
574
|
-
cell = session.get(Cell, cell_id)
|
|
575
|
-
return [
|
|
576
|
-
cell.input.text
|
|
577
|
-
for cell in cell.notebook.cells[1:cell.index + 2]
|
|
578
|
-
]
|
|
579
|
-
|
|
580
577
|
@classmethod
|
|
581
578
|
def load(cls, file: str):
|
|
582
579
|
with zipfile.ZipFile(file, 'r') as z:
|
|
583
580
|
with z.open('record.pkl', 'r') as f:
|
|
584
581
|
description, items = dill.load(f)
|
|
582
|
+
with z.open('config.pkl', 'r') as f:
|
|
583
|
+
config = dill.load(f)
|
|
584
|
+
description['config'] = config
|
|
585
585
|
record = cls(None, None, description)
|
|
586
586
|
for key, value in items.items():
|
|
587
587
|
if isinstance(value, BufferList):
|
qulab/scan/scan.py
CHANGED
|
@@ -555,9 +555,9 @@ class Scan():
|
|
|
555
555
|
if isinstance(
|
|
556
556
|
self.description['database'],
|
|
557
557
|
str) and self.description['database'].startswith("tcp://"):
|
|
558
|
-
async with ZMQContextManager(
|
|
559
|
-
|
|
560
|
-
|
|
558
|
+
async with ZMQContextManager(zmq.DEALER,
|
|
559
|
+
connect=self.description['database'],
|
|
560
|
+
socket=self._sock) as socket:
|
|
561
561
|
self._sock = socket
|
|
562
562
|
await self._run()
|
|
563
563
|
else:
|
|
@@ -624,7 +624,9 @@ class Scan():
|
|
|
624
624
|
|
|
625
625
|
async def submit(self, server=default_executor):
|
|
626
626
|
assymbly(self.description)
|
|
627
|
-
async with ZMQContextManager(zmq.DEALER,
|
|
627
|
+
async with ZMQContextManager(zmq.DEALER,
|
|
628
|
+
connect=server,
|
|
629
|
+
socket=self._sock) as socket:
|
|
628
630
|
await socket.send_pyobj({
|
|
629
631
|
'method': 'task_submit',
|
|
630
632
|
'description': dill.dumps(self.description)
|
qulab/sys/rpc/zmq_socket.py
CHANGED
|
@@ -130,7 +130,12 @@ class ZMQContextManager:
|
|
|
130
130
|
self.auth = None
|
|
131
131
|
self.context = None
|
|
132
132
|
self.socket = None
|
|
133
|
-
self._external_socket =
|
|
133
|
+
self._external_socket = None
|
|
134
|
+
try:
|
|
135
|
+
if not socket.closed:
|
|
136
|
+
self._external_socket = socket
|
|
137
|
+
except:
|
|
138
|
+
pass
|
|
134
139
|
|
|
135
140
|
def _create_socket(self, asyncio=False) -> zmq.Socket:
|
|
136
141
|
"""
|
qulab/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "2.2.
|
|
1
|
+
__version__ = "2.2.6"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|