QuLab 2.0.0__py3-none-any.whl → 2.10.11__py3-none-any.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.
Files changed (69) hide show
  1. qulab/__init__.py +33 -1
  2. qulab/__main__.py +4 -0
  3. qulab/cli/commands.py +31 -0
  4. qulab/cli/config.py +170 -0
  5. qulab/cli/decorators.py +28 -0
  6. qulab/executor/__init__.py +5 -0
  7. qulab/executor/analyze.py +188 -0
  8. qulab/executor/cli.py +447 -0
  9. qulab/executor/load.py +563 -0
  10. qulab/executor/registry.py +185 -0
  11. qulab/executor/schedule.py +543 -0
  12. qulab/executor/storage.py +615 -0
  13. qulab/executor/template.py +259 -0
  14. qulab/executor/utils.py +194 -0
  15. qulab/monitor/__init__.py +1 -93
  16. qulab/monitor/__main__.py +8 -0
  17. qulab/monitor/monitor.py +115 -0
  18. qulab/scan/__init__.py +2 -4
  19. qulab/scan/curd.py +221 -0
  20. qulab/scan/models.py +554 -0
  21. qulab/scan/optimize.py +76 -0
  22. qulab/scan/query.py +387 -0
  23. qulab/scan/record.py +603 -0
  24. qulab/scan/scan.py +1166 -0
  25. qulab/scan/server.py +450 -0
  26. qulab/scan/space.py +213 -0
  27. qulab/scan/utils.py +230 -34
  28. qulab/sys/__init__.py +2 -0
  29. qulab/sys/device/basedevice.py +50 -16
  30. qulab/sys/device/loader.py +1 -1
  31. qulab/sys/device/utils.py +46 -13
  32. qulab/sys/drivers/FakeInstrument.py +36 -20
  33. qulab/sys/net/nginx.py +16 -14
  34. qulab/sys/rpc/router.py +35 -0
  35. qulab/sys/rpc/zmq_socket.py +227 -0
  36. qulab/tools/__init__.py +0 -0
  37. qulab/tools/connection_helper.py +39 -0
  38. qulab/typing.py +2 -0
  39. qulab/utils.py +95 -0
  40. qulab/version.py +1 -1
  41. qulab/visualization/__init__.py +188 -0
  42. qulab/visualization/__main__.py +71 -0
  43. qulab/visualization/_autoplot.py +464 -0
  44. qulab/visualization/plot_circ.py +319 -0
  45. qulab/visualization/plot_layout.py +408 -0
  46. qulab/visualization/plot_seq.py +242 -0
  47. qulab/visualization/qdat.py +152 -0
  48. qulab/visualization/rot3d.py +23 -0
  49. qulab/visualization/widgets.py +86 -0
  50. {QuLab-2.0.0.dist-info → qulab-2.10.11.dist-info}/METADATA +28 -12
  51. qulab-2.10.11.dist-info/RECORD +104 -0
  52. {QuLab-2.0.0.dist-info → qulab-2.10.11.dist-info}/WHEEL +1 -1
  53. qulab-2.10.11.dist-info/entry_points.txt +2 -0
  54. QuLab-2.0.0.dist-info/RECORD +0 -71
  55. qulab/monitor/multiploter/__init__.py +0 -1
  56. qulab/scan/base.py +0 -544
  57. qulab/scan/expression.py +0 -360
  58. qulab/scan/scanner.py +0 -244
  59. qulab/scan/transforms.py +0 -16
  60. /qulab/{scan/dataset.py → cli/__init__.py} +0 -0
  61. /qulab/monitor/{multiploter/config.py → config.py} +0 -0
  62. /qulab/monitor/{multiploter/dataset.py → dataset.py} +0 -0
  63. /qulab/monitor/{multiploter/event_queue.py → event_queue.py} +0 -0
  64. /qulab/monitor/{multiploter/main.py → mainwindow.py} +0 -0
  65. /qulab/monitor/{multiploter/ploter.py → ploter.py} +0 -0
  66. /qulab/monitor/{multiploter/qt_compat.py → qt_compat.py} +0 -0
  67. /qulab/monitor/{multiploter/toolbar.py → toolbar.py} +0 -0
  68. {QuLab-2.0.0.dist-info → qulab-2.10.11.dist-info/licenses}/LICENSE +0 -0
  69. {QuLab-2.0.0.dist-info → qulab-2.10.11.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,152 @@
1
+ """
2
+ This module provides the visualization of the qdat file.
3
+ """
4
+ import logging
5
+ import math
6
+ import re
7
+ from functools import reduce
8
+
9
+ import matplotlib.pyplot as plt
10
+ import numpy as np
11
+ from matplotlib import cm
12
+
13
+ log = logging.getLogger(__name__)
14
+
15
+
16
+ def draw(record_dict, fig=None, transpose=True, remove=True):
17
+ """Draw a 2D or 3D plot from a record dict.
18
+
19
+ Args:
20
+ record_dict (dict): The record dict.
21
+ fig (matplotlib.figure.Figure): The figure to draw on.
22
+ transpose (bool): Whether to transpose the data.
23
+ """
24
+ dim = record_dict['info']['dim']
25
+ zshape = record_dict['info']['zshape']
26
+ zsize = reduce(lambda a, b: a * b, zshape, 1)
27
+
28
+ axis_label = np.asarray(record_dict['info'].get('axis_label',
29
+ [])).flatten()
30
+ z_label = np.asarray(record_dict['info'].get('z_label', [])).flatten()
31
+ axis_unit = np.asarray(record_dict['info'].get('axis_unit', [])).flatten()
32
+ z_unit = np.asarray(record_dict['info'].get('z_unit', [])).flatten()
33
+
34
+ fig = plt.figure() if fig is None else fig
35
+ if zsize < 4:
36
+ plot_shape = (1, zsize)
37
+ else:
38
+ n = int(np.sqrt(zsize))
39
+ plot_shape = (math.ceil(zsize / n), n)
40
+ if dim < 3 and zsize < 100:
41
+ figsize = plot_shape[1] * 8, plot_shape[0] * 6
42
+ fig.set_size_inches(*figsize)
43
+ axes = fig.subplots(*plot_shape)
44
+ axes = np.array(axes).flatten()
45
+ else:
46
+ axes = []
47
+
48
+ cb_list = []
49
+ if dim == 1 and zsize < 101:
50
+ for i in range(zsize):
51
+ title = record_dict[
52
+ 'name'] + f' {i}' if zsize > 1 else record_dict['name']
53
+ try:
54
+ xlabel = axis_label[0]
55
+ ylabel = z_label[0] if len(z_label) == 1 else z_label[i]
56
+ except:
57
+ xlabel, ylabel = 'X', 'Y'
58
+ try:
59
+ x_unit = axis_unit[0]
60
+ y_unit = z_unit[0] if len(z_unit) == 1 else z_unit[i]
61
+ except:
62
+ x_unit, y_unit = 'a.u.', 'a.u.'
63
+ axes[i].set_title(title)
64
+ axes[i].set_xlabel(f'{xlabel} ({x_unit})')
65
+ axes[i].set_ylabel(f'{ylabel} ({y_unit})')
66
+ elif dim == 2 and zsize < 101:
67
+ for i in range(zsize):
68
+ smp = cm.ScalarMappable(norm=None, cmap=None)
69
+ cb = fig.colorbar(smp, ax=axes[i]) # 默认色谱的colorbar
70
+ cb_list.append(cb)
71
+ try:
72
+ title = record_dict['name'] + \
73
+ f': {z_label[i]}' if zsize > 1 else record_dict['name']
74
+ except:
75
+ title = record_dict[
76
+ 'name'] + f' {i}' if zsize > 1 else record_dict['name']
77
+ try:
78
+ xlabel, ylabel = axis_label[1], axis_label[0]
79
+ if transpose:
80
+ xlabel, ylabel = ylabel, xlabel
81
+ except:
82
+ xlabel, ylabel = 'X', 'Y'
83
+ try:
84
+ x_unit, y_unit = axis_unit[1], axis_unit[0]
85
+ if transpose:
86
+ x_unit, y_unit = y_unit, x_unit
87
+ except:
88
+ x_unit, y_unit = 'a.u.', 'a.u.'
89
+ axes[i].set_title(title)
90
+ axes[i].set_xlabel(f'{xlabel} ({x_unit})')
91
+ axes[i].set_ylabel(f'{ylabel} ({y_unit})')
92
+ else:
93
+ message1 = f'dim {dim} is too large (>2)! ' if dim > 2 else f'dim={dim}; '
94
+ message2 = f'zsize {zsize} is too large (>101)!' if zsize > 101 else f'zsize={zsize}'
95
+ log.warning('PASS: ' + message1 + message2)
96
+ #########################################################################################
97
+ try:
98
+ tags = [
99
+ tag.strip(r'\*')
100
+ for tag in record_dict['ParaSpace'].get('tags', [])
101
+ if re.match(r'\*', tag)
102
+ ]
103
+ tag_text = ','.join(tags)
104
+ if tag_text:
105
+ axes[0].text(-0.1,
106
+ 1.1,
107
+ 'TAG: ' + tag_text,
108
+ horizontalalignment='left',
109
+ verticalalignment='bottom',
110
+ transform=axes[0].transAxes) # fig.transFigure)#
111
+ except:
112
+ pass
113
+ #########################################################################################
114
+ fig.tight_layout()
115
+
116
+ dim = record_dict['info']['dim']
117
+ zshape = record_dict['info']['zshape']
118
+ datashape = record_dict['info']['datashape']
119
+ zsize = reduce(lambda a, b: a * b, zshape, 1)
120
+ datashape_r = (*datashape[:dim], zsize)
121
+
122
+ if dim == 1 and zsize < 101:
123
+ x, z = record_dict['data']
124
+ z = z.reshape(datashape_r)
125
+ z = np.abs(z) if np.any(np.iscomplex(z)) else z.real
126
+ for i in range(zsize):
127
+ _ = [a.remove() for a in axes[i].get_lines()] if remove else []
128
+ axes[i].plot(x, z[:, i], 'C0')
129
+ axes[i].plot(x, z[:, i], 'C0.')
130
+ elif dim == 2 and zsize < 101:
131
+ x, y, z = record_dict['data']
132
+ x_step, y_step = x[1] - x[0], y[1] - y[0]
133
+ if transpose:
134
+ x, y = y, x
135
+ x_step, y_step = y_step, x_step
136
+ z = z.reshape(datashape_r)
137
+ z = np.abs(z) if np.any(np.iscomplex(z)) else z.real
138
+ for i in range(zsize):
139
+ _z = z[:, :, i]
140
+ _ = [a.remove() for a in axes[i].get_images()] if remove else []
141
+ if transpose:
142
+ _z = _z.T
143
+ im = axes[i].imshow(_z,
144
+ extent=(y[0] - y_step / 2, y[-1] + y_step / 2,
145
+ x[0] - x_step / 2, x[-1] + x_step / 2),
146
+ origin='lower',
147
+ aspect='auto')
148
+ cb_list[i].update_normal(im) # 更新对应的colorbar
149
+ else:
150
+ pass
151
+
152
+ return fig, axes
@@ -0,0 +1,23 @@
1
+ import numpy as np
2
+ from scipy.linalg import expm
3
+
4
+
5
+ def _rot(theta, v):
6
+ x, y, z = np.asarray(v) / np.sqrt(np.sum(np.asarray(v)**2))
7
+ c, s = np.cos(theta), np.sin(theta)
8
+
9
+ return np.array([[
10
+ c + (1 - c) * x**2, (1 - c) * x * y - s * z, (1 - c) * x * z + s * y
11
+ ], [(1 - c) * x * y + s * z, c + (1 - c) * y**2, (1 - c) * y * z - s * x],
12
+ [(1 - c) * x * z - s * y, (1 - c) * y * z + s * x,
13
+ c + (1 - c) * z**2]])
14
+
15
+
16
+ def rot_round(x, y, z, v=[0, 0, 1], theta=0, c=[0, 0, 0]):
17
+ ret = (np.array([x, y, z]).T - np.array(c)) @ _rot(theta, v) + np.array(c)
18
+ return ret.T
19
+
20
+
21
+ def projection(x, y, z, y0=1):
22
+ d = np.sqrt(x**2 + y**2 + z**2)
23
+ return x * y0 / y, z * y0 / y, d
@@ -0,0 +1,86 @@
1
+ import matplotlib.pyplot as plt
2
+ import numpy as np
3
+
4
+
5
+ class DataPicker():
6
+
7
+ def __init__(self, ax=None):
8
+ self.points_and_text = {}
9
+ self.points = None
10
+ self.hline = None
11
+ self.vline = None
12
+ self.text = None
13
+ if ax is None:
14
+ ax = plt.gca()
15
+ self.ax = ax
16
+ self.ax.figure.canvas.mpl_connect('button_press_event', self.on_click)
17
+ # self.ax.figure.canvas.mpl_connect('motion_notify_event', self.on_move)
18
+ self.ax.figure.canvas.mpl_connect('key_press_event', self.on_key_press)
19
+ self.mode = 'pick'
20
+
21
+ def on_key_press(self, event):
22
+ if event.key == 'a':
23
+ if self.mode != 'pick':
24
+ self.mode = 'pick'
25
+ else:
26
+ self.mode = 'default'
27
+
28
+ def on_move(self, event):
29
+ if event.inaxes is self.ax:
30
+ # self.hline = self.ax.axhline(y=np.nan, color='r', lw=1)
31
+ # self.vline = self.ax.axvline(x=np.nan, color='r', lw=1)
32
+ # self.text = self.ax.text(0, 0, '', verticalalignment='center')
33
+ self.hline.set_ydata(event.ydata)
34
+ self.vline.set_xdata(event.xdata)
35
+ self.text.set_position((event.xdata, event.ydata))
36
+ self.text.set_text(f'({event.xdata:.2f}, {event.ydata:.2f})')
37
+ self.ax.draw()
38
+
39
+ def on_click(self, event):
40
+ if self.mode != 'pick':
41
+ return
42
+ # 鼠标左键的button值为1
43
+ if event.button == 1 and event.inaxes is self.ax:
44
+ point = (event.xdata, event.ydata)
45
+ text = self.ax.text(point[0],
46
+ point[1],
47
+ f'({point[0]:.2f}, {point[1]:.2f})',
48
+ verticalalignment='center')
49
+ self.points_and_text[point] = text
50
+ x, y = self.get_xy()
51
+ if self.points is None:
52
+ self.points, = self.ax.plot(x, y, 'ro')
53
+ else:
54
+ self.points.set_data(x, y)
55
+ self.ax.draw()
56
+
57
+ elif event.button == 3 and event.inaxes is self.ax:
58
+ for point, text in list(self.points_and_text.items()):
59
+ point_xdisplay, point_ydisplay = self.ax.transData.transform_point(
60
+ point)
61
+
62
+ distance = np.sqrt((point_xdisplay - event.x)**2 +
63
+ (point_ydisplay - event.y)**2)
64
+ if distance < 10:
65
+ text.remove()
66
+ self.points_and_text.pop(point)
67
+ if self.points_and_text:
68
+ x, y = self.get_xy()
69
+ self.points.set_data(x, y)
70
+ else:
71
+ self.points.remove()
72
+ self.points = None
73
+ self.ax.draw()
74
+ break
75
+
76
+ def get_xy(self):
77
+ if self.points_and_text:
78
+ data = np.asarray(list(self.points_and_text.keys()))
79
+ x, y = data[:, 0], data[:, 1]
80
+
81
+ index = np.argsort(x)
82
+ x = np.asarray(x)[index]
83
+ y = np.asarray(y)[index]
84
+ return x, y
85
+ else:
86
+ return np.array([]), np.array([])
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: QuLab
3
- Version: 2.0.0
3
+ Version: 2.10.11
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -24,16 +24,32 @@ Classifier: Programming Language :: Python :: 3.12
24
24
  Requires-Python: >=3.10
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
- Requires-Dist: blinker >=1.4
28
- Requires-Dist: click >=7.1.2
29
- Requires-Dist: dill >=0.3.6
30
- Requires-Dist: GitPython >=3.1.14
31
- Requires-Dist: ipython >=7.4.0
32
- Requires-Dist: ipywidgets >=7.4.2
33
- Requires-Dist: matplotlib >=3.7.2
34
- Requires-Dist: numpy >=1.13.3
35
- Requires-Dist: ply >=3.11
36
- Requires-Dist: scipy >=1.0.0
27
+ Requires-Dist: blinker>=1.4
28
+ Requires-Dist: click>=7.1.2
29
+ Requires-Dist: dill>=0.3.6
30
+ Requires-Dist: GitPython>=3.1.14
31
+ Requires-Dist: ipython>=7.4.0
32
+ Requires-Dist: ipywidgets>=7.4.2
33
+ Requires-Dist: loguru>=0.7.2
34
+ Requires-Dist: matplotlib>=3.7.2
35
+ Requires-Dist: msgpack>=1.0.5
36
+ Requires-Dist: nevergrad>=1.0.2
37
+ Requires-Dist: numpy>=1.13.3
38
+ Requires-Dist: ply>=3.11
39
+ Requires-Dist: pyperclip>=1.8.2
40
+ Requires-Dist: pyzmq>=25.1.0
41
+ Requires-Dist: qlisp>=1.1.4
42
+ Requires-Dist: qlispc>=1.1.8
43
+ Requires-Dist: qlispreg>=0.0.1
44
+ Requires-Dist: scipy>=1.0.0
45
+ Requires-Dist: scikit-optimize>=0.9.0
46
+ Requires-Dist: SQLAlchemy>=2.0.19
47
+ Requires-Dist: watchdog>=4.0.0
48
+ Requires-Dist: wath>=1.1.6
49
+ Requires-Dist: waveforms>=1.9.4
50
+ Provides-Extra: full
51
+ Requires-Dist: uvloop>=0.19.0; extra == "full"
52
+ Dynamic: license-file
37
53
 
38
54
  # QuLab
39
55
  [![View build status](https://travis-ci.org/feihoo87/QuLab.svg?branch=master)](https://travis-ci.org/feihoo87/QuLab)
@@ -0,0 +1,104 @@
1
+ qulab/__init__.py,sha256=hmf6R3jiM5NtJY1mSptogYnH5DMTR2dTzlXykqLxQzg,2027
2
+ qulab/__main__.py,sha256=fjaRSL_uUjNIzBGNgjlGswb9TJ2VD5qnkZHW3hItrD4,68
3
+ qulab/typing.py,sha256=vg62sGqxuD9CI5677ejlzAmf2fVdAESZCQjAE_xSxPg,69
4
+ qulab/utils.py,sha256=BdLdlfjpe6m6gSeONYmpAKTTqxDaYHNk4exlz8kZxTg,2982
5
+ qulab/version.py,sha256=Z2qeLpKUiYX9yCWy0kBMmFSnXm5jRIhwoX8f6spVI34,23
6
+ qulab/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ qulab/cli/commands.py,sha256=hCeyZ4tjTu3aUbex9x_czkU6t9Ti_3F0u3bA8qs6BVQ,625
8
+ qulab/cli/config.py,sha256=tZPSBLbf2x_Brb2UBuA1bsni8nC8WOPPGyWIi8m7j1I,5459
9
+ qulab/cli/decorators.py,sha256=oImteZVnDPPWdyhJ4kzf2KYGJLON7VsKGBvZadWLQZo,621
10
+ qulab/executor/__init__.py,sha256=LosPzOMaljSZY1thy_Fxtbrgq7uubJszMABEB7oM7tU,101
11
+ qulab/executor/analyze.py,sha256=4Hau5LrKUdpweh7W94tcG4ahgxucHOevbM0hm57T7zE,5649
12
+ qulab/executor/cli.py,sha256=05GTqtPrRxGYL_-HkH5wdF5FRjYYI5hCgXYw_tKQvyA,15241
13
+ qulab/executor/load.py,sha256=C5qepxC9QALMgfG_twxvGts6i0bCsnVg9lS05PXZZRM,20291
14
+ qulab/executor/registry.py,sha256=gym9F5FIDY5eV-cSCZsP99wC4l-6jkx9VMjJMaPOLaQ,4730
15
+ qulab/executor/schedule.py,sha256=7gAJFwj13j1niGjVa1fSzwOS22eNFEN1hdrN3dfTY6A,21410
16
+ qulab/executor/storage.py,sha256=8K73KGLAVgchJdtd4rKHXkr1CQOJORWH-Gi57w8IYsw,21081
17
+ qulab/executor/template.py,sha256=_HEtsUQ5_jSujCw8FBDAK1PRTMRCa4iD4DduHIpjo3c,10569
18
+ qulab/executor/utils.py,sha256=3OLRMBJu-1t78BeuZs4fv4jioEXnRNygaPnSoibzfgs,6405
19
+ qulab/monitor/__init__.py,sha256=nTHelnDpxRS_fl_B38TsN0njgq8eVTEz9IAnN3NbDlM,42
20
+ qulab/monitor/__main__.py,sha256=w3yUcqq195LzSnXTkQcuC1RSFRhy4oQ_PEBmucXguME,97
21
+ qulab/monitor/config.py,sha256=fQ5JcsMApKc1UwANEnIvbDQZl8uYW0tle92SaYtX9lI,744
22
+ qulab/monitor/dataset.py,sha256=C4wZU-XqYHY1ysvUGSF5958M_GANrXW-f1SHnruHJno,2455
23
+ qulab/monitor/event_queue.py,sha256=o66jOTKJmJibt-bhYFjk5p_rExxu-hdoR_BfR8PMN3I,1823
24
+ qulab/monitor/mainwindow.py,sha256=Bme7YKg2LQSpRH6cg8rcFhdnxUU_d_F4b6TIvPVAbx4,7799
25
+ qulab/monitor/monitor.py,sha256=Nt6IH51hhDcVmY2NNUlwk5G4rlgnBbsh4w5xpCuYkak,2797
26
+ qulab/monitor/ploter.py,sha256=CbiIjmohgtwDDTVeGzhXEGVo3XjytMdhLwU9VUkg9vo,3601
27
+ qulab/monitor/qt_compat.py,sha256=OK71_JSO_iyXjRIKHANmaK4Lx4bILUzmXI-mwKg3QeI,788
28
+ qulab/monitor/toolbar.py,sha256=WEag6cxAtEsOLL14XvM7pSE56EA3MO188_JuprNjdBs,7948
29
+ qulab/scan/__init__.py,sha256=Z88CzGsvr1VdKbF6aYgQv3j-fsEkKmqvpvX4LlzOM98,87
30
+ qulab/scan/curd.py,sha256=tiJ0oo2DqirK2fpAAAA-6OFAjAuKG5W21nLqfLvTLyQ,6895
31
+ qulab/scan/models.py,sha256=JFofv-RH0gpS3--M6izXiQg7iGkS9a_em2DwhS5kTTk,17626
32
+ qulab/scan/optimize.py,sha256=VT9TpuqDkG7FdJJkYy60r5Pfrmjvfu5i36Ru6XvIiTI,2561
33
+ qulab/scan/query.py,sha256=SM4N3YfUpWnocl_7WNj00ff8uNzRQINMK0RNfPoDcoc,12254
34
+ qulab/scan/record.py,sha256=yIHPANf6nuBXy8Igf-dMtGJ7wuFTLYlBaaAUc0AzwyU,21280
35
+ qulab/scan/scan.py,sha256=oiPFe6oitc7Clgiv3Iq5mrBne8mn4voFDlSFfIijuVA,39480
36
+ qulab/scan/server.py,sha256=Y1W3DysWBFQxR7-GoP95gvsf2SxRPY40GnONbmkQCu4,17188
37
+ qulab/scan/space.py,sha256=OQLepiNNP5TNYMHXeVFT59lL5n4soPmnMoMy_o9EHt0,6696
38
+ qulab/scan/utils.py,sha256=E7cYqkz35R-07JUAtdZpJGMUu_oxYy3GHQznL7naMHE,6295
39
+ qulab/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ qulab/storage/__main__.py,sha256=3emxxRry8BB0m8hUZvJ_oBqkPy7ksV7flHB_KEDXZuI,1692
41
+ qulab/storage/base_dataset.py,sha256=4aKhqBNdZfdlm_z1Qy5dv0HrvgpvMdy8pbyfua8uE-4,11865
42
+ qulab/storage/chunk.py,sha256=dtck2Pem7OYYX3TYlnWwfqrgXSmkLhi0nN_ElbuS-c8,1701
43
+ qulab/storage/dataset.py,sha256=Q9asJxNwYNcmu7sSqsAdAntYIre9b4dGIiFnt1O-KI4,4655
44
+ qulab/storage/file.py,sha256=KAaXFI1SKdcCVWjopVqYaWU4WZgZU9Oh2epdqH1ADPw,8343
45
+ qulab/storage/storage.py,sha256=qRyR-5zRRx84DfsifozlYKMRj8bykwRyF7TW8oyFmwk,2561
46
+ qulab/storage/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ qulab/storage/backend/redis.py,sha256=hNaPP0V1BSWbUcx4AxOhEXiR83c_BZqeVzeOYkb8-zM,5202
48
+ qulab/storage/models/__init__.py,sha256=DkKzQF7tYd1WL1gGPuCThBcGfpnCuZ_PTLrqV3M_EJ0,586
49
+ qulab/storage/models/base.py,sha256=QLXiTRCPcg28BCFxBHexAxdNLjh2ONkzgNavoFOBW9s,114
50
+ qulab/storage/models/config.py,sha256=Mxk0-YcK0WgA-7-2oIuDMAeBaUECzj-3_oPvgF7gYtE,689
51
+ qulab/storage/models/file.py,sha256=1Rypz1QSco6drBCiR_BS6Oy0ifOapBIeNEm0uDqqxBk,2716
52
+ qulab/storage/models/ipy.py,sha256=uYBeqWsOxxCWUsDpnwhxugh6C9OuH92OrChlLj0gddk,1574
53
+ qulab/storage/models/models.py,sha256=JUqtvk8ywulkcFL38WfTviuVOcdvSGakZYJS7jAPNig,2879
54
+ qulab/storage/models/record.py,sha256=L0k531bGF9JN-GLv3hG87tB7k0kuSBkEeC9vi6_qywE,4970
55
+ qulab/storage/models/report.py,sha256=j9ByrVoue-rwaXcnfTzVOSf1xDJdlZJq666agF0AZRY,798
56
+ qulab/storage/models/tag.py,sha256=c3cTxpJUoG9L6xyDvVuagYVhB32amzbkBOmVeRIZ5Zo,2339
57
+ qulab/sys/__init__.py,sha256=-XRZUpLakoCDsNEmwtW6IG7vjvX0MPzEIuD2KXc9yAg,122
58
+ qulab/sys/chat.py,sha256=DlFLP_gbVyL8fDUyad6Xu8sjQCZJauLIvF31mj5BtMs,22449
59
+ qulab/sys/ipy_events.py,sha256=qvsqs7-CYQ-P4WtSe9UUZZ0tC88XxPMd9DM4LJALgEk,2889
60
+ qulab/sys/progress.py,sha256=Tk1B96_1QrlI4yU0cyZlf2wVsF238DjQGqXJVG2j4t0,5350
61
+ qulab/sys/device/__init__.py,sha256=bDqJrYQJx8YR4u_CYvJPpIBr6whP7pVnxnROTHk_yhA,149
62
+ qulab/sys/device/basedevice.py,sha256=FQJqJEQPcWJALm1qQ0NQzfgncManD_Br2v2fzXSunLk,7195
63
+ qulab/sys/device/loader.py,sha256=BBcEnuQzCM6-ulJZ3nnf6xF3wSvUh02LLMN-cTY0ODE,2497
64
+ qulab/sys/device/utils.py,sha256=4NG_OKMDRdVH8YKHNf6kVocevXf7bqyf1PiGctTF_oA,2314
65
+ qulab/sys/drivers/FakeInstrument.py,sha256=_Mix8lfKGapTzCXBnfE9O3vznuqC379LtYopJ35HcIQ,2406
66
+ qulab/sys/drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
+ qulab/sys/net/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ qulab/sys/net/bencoder.py,sha256=p85DtmVy3cna3Da07boau77el2Cnym5-mKGF4xCJSy4,4959
69
+ qulab/sys/net/cli.py,sha256=dm-JxbgZgFH2P_5Zu3kSrLzy2U_VRLswkvE1d3xGp0w,5690
70
+ qulab/sys/net/dhcp.py,sha256=gT5ehyvwW3y8E5u_DnYRd5I0KaddonmQJFVhlIS2yxM,23509
71
+ qulab/sys/net/dhcpd.py,sha256=pNC47i-hu8HTzCrKU0PatL3AbgEqe1ovmpLPwNoZLa8,5322
72
+ qulab/sys/net/kad.py,sha256=gGYb9cXbAdbYhubQdCRqOGigllBy0kSUp4z3_f3AWz0,38981
73
+ qulab/sys/net/kcp.py,sha256=oFyiosQ1o0qeVA9hODIYEZtJj4HN1aNLGVP6vbxouMs,5761
74
+ qulab/sys/net/nginx.py,sha256=8dH76kQzB7coJ-VUCVggfSyjI86GsripDi6nlBrssM0,4890
75
+ qulab/sys/rpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
+ qulab/sys/rpc/client.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
+ qulab/sys/rpc/exceptions.py,sha256=djK44hYVMixF2Y-lAXDGHlyyCmYGw7EJjB3I0ttejok,2567
78
+ qulab/sys/rpc/msgpack.py,sha256=s9mbPIkQktO1FiSAuE6ymM_1w8rIERA0gMm5GQkT7z8,35327
79
+ qulab/sys/rpc/msgpack.pyi,sha256=3dJgISPCTEBo65VaoGjcFkdLijPx6zJtKqcZiS9bcaE,1274
80
+ qulab/sys/rpc/router.py,sha256=Q10UA0cL95PcrtYU0dpPsq3hLSN9IzFaL8XCpIBSqbk,941
81
+ qulab/sys/rpc/rpc.py,sha256=9ZwzC79FgmbHXbO1Gjg4z0wZgHLDziTwVuS2aZpLJAk,11979
82
+ qulab/sys/rpc/serialize.py,sha256=0SR1me02mao2JwWR3rdjUIcOzh1m1JFb7fLEaw_q-pE,3355
83
+ qulab/sys/rpc/server.py,sha256=e3R0gwOHpLEkSp7Tb43FMSDvqSG-pjrkskdISKQRseE,713
84
+ qulab/sys/rpc/socket.py,sha256=e3R0gwOHpLEkSp7Tb43FMSDvqSG-pjrkskdISKQRseE,713
85
+ qulab/sys/rpc/utils.py,sha256=6YGFOkY7o09lkA_I1FIP9_1Up3k2F1KOkftvu0_8lxo,594
86
+ qulab/sys/rpc/worker.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ qulab/sys/rpc/zmq_socket.py,sha256=fyElXf0mghlKX7ZZKFoJgs043emfu1L7jr8DTzmEW20,8587
88
+ qulab/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ qulab/tools/connection_helper.py,sha256=o1t6UpJQPyj4mWY66axgQkgsqUzdkhEGBJo44x9U1iE,946
90
+ qulab/visualization/__init__.py,sha256=26cuHt3QIJXUb3VaMxlJx3IQTOUVJFKlYBZr7WMP53M,6129
91
+ qulab/visualization/__main__.py,sha256=9zKK3yZFy0leU40ou6BpRC1Fsetfc1gjjFzIZYIwP6Y,1639
92
+ qulab/visualization/_autoplot.py,sha256=31B7pn1pK19abpQDGYBU9a_27cDL87LBpx9vKqlcYAo,14165
93
+ qulab/visualization/plot_circ.py,sha256=qZS3auNG4qIyUvC-ijTce17xJwGBvpRvPUqPEx64KUY,8759
94
+ qulab/visualization/plot_layout.py,sha256=mfdKJUyjTNB3YyD6GcqM38GEwiae4g6Us9HJyAwen6Q,13535
95
+ qulab/visualization/plot_seq.py,sha256=UWTS6p9nfX_7B8ehcYo6UnSTUCjkBsNU9jiOeW2calY,6751
96
+ qulab/visualization/qdat.py,sha256=ZeevBYWkzbww4xZnsjHhw7wRorJCBzbG0iEu-XQB4EA,5735
97
+ qulab/visualization/rot3d.py,sha256=lMrEJlRLwYe6NMBlGkKYpp_V9CTipOAuDy6QW_cQK00,734
98
+ qulab/visualization/widgets.py,sha256=6KkiTyQ8J-ei70LbPQZAK35wjktY47w2IveOa682ftA,3180
99
+ qulab-2.10.11.dist-info/licenses/LICENSE,sha256=PRzIKxZtpQcH7whTG6Egvzl1A0BvnSf30tmR2X2KrpA,1065
100
+ qulab-2.10.11.dist-info/METADATA,sha256=lLI5Hg65Tr2feK9XB8QjCzzDM-BW-T6VzGBM1OEjmmM,3869
101
+ qulab-2.10.11.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
102
+ qulab-2.10.11.dist-info/entry_points.txt,sha256=b0v1GXOwmxY-nCCsPN_rHZZvY9CtTbWqrGj8u1m8yHo,45
103
+ qulab-2.10.11.dist-info/top_level.txt,sha256=3T886LbAsbvjonu_TDdmgxKYUn939BVTRPxPl9r4cEg,6
104
+ qulab-2.10.11.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ qulab = qulab.__main__:cli
@@ -1,71 +0,0 @@
1
- qulab/__init__.py,sha256=8zLGg-DfQhnDl2Ky0n-zXpN-8e-g7iR0AcaI4l4Vvpk,32
2
- qulab/version.py,sha256=jfMYUkKiruYd9cM9tY-_mLygW0fRj75GOhW2tEhKhOI,21
3
- qulab/monitor/__init__.py,sha256=JFPBshjvNX5W_AIbOo_oRPabGX9nyUSeA84MxdM68gc,2318
4
- qulab/monitor/multiploter/__init__.py,sha256=GBO8d3k_IngMxb1SDFWVeRAw04yEbJ7h6uX3WeY720E,29
5
- qulab/monitor/multiploter/config.py,sha256=fQ5JcsMApKc1UwANEnIvbDQZl8uYW0tle92SaYtX9lI,744
6
- qulab/monitor/multiploter/dataset.py,sha256=C4wZU-XqYHY1ysvUGSF5958M_GANrXW-f1SHnruHJno,2455
7
- qulab/monitor/multiploter/event_queue.py,sha256=o66jOTKJmJibt-bhYFjk5p_rExxu-hdoR_BfR8PMN3I,1823
8
- qulab/monitor/multiploter/main.py,sha256=Bme7YKg2LQSpRH6cg8rcFhdnxUU_d_F4b6TIvPVAbx4,7799
9
- qulab/monitor/multiploter/ploter.py,sha256=CbiIjmohgtwDDTVeGzhXEGVo3XjytMdhLwU9VUkg9vo,3601
10
- qulab/monitor/multiploter/qt_compat.py,sha256=OK71_JSO_iyXjRIKHANmaK4Lx4bILUzmXI-mwKg3QeI,788
11
- qulab/monitor/multiploter/toolbar.py,sha256=WEag6cxAtEsOLL14XvM7pSE56EA3MO188_JuprNjdBs,7948
12
- qulab/scan/__init__.py,sha256=yT_L9Rdr9lwxds-uq-sC_lhnTQxJgIkSzQkiX9PYmug,216
13
- qulab/scan/base.py,sha256=dWBQzFhWJGeAYAxu2zF6rpPLARZU4-3GWf-VROCZiog,16989
14
- qulab/scan/dataset.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- qulab/scan/expression.py,sha256=apa_bBusHiUWeNb4f-q7Ry7mgzcHqQC9v4_ymL8dE28,10634
16
- qulab/scan/optimize.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- qulab/scan/scanner.py,sha256=sr7U0yXceyzoe4n94U_mHTSW6WqE86mZRhZL-WCgkos,6972
18
- qulab/scan/transforms.py,sha256=ReUuG57B_1GEgOwZZaxYbOTappG7yY9ERvagc2v48Pg,252
19
- qulab/scan/utils.py,sha256=2bj7ggTNTK5LXwBDi8w7IzFqFjchoE6EhgSASC0fpDQ,1024
20
- qulab/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- qulab/storage/__main__.py,sha256=3emxxRry8BB0m8hUZvJ_oBqkPy7ksV7flHB_KEDXZuI,1692
22
- qulab/storage/base_dataset.py,sha256=4aKhqBNdZfdlm_z1Qy5dv0HrvgpvMdy8pbyfua8uE-4,11865
23
- qulab/storage/chunk.py,sha256=dtck2Pem7OYYX3TYlnWwfqrgXSmkLhi0nN_ElbuS-c8,1701
24
- qulab/storage/dataset.py,sha256=Q9asJxNwYNcmu7sSqsAdAntYIre9b4dGIiFnt1O-KI4,4655
25
- qulab/storage/file.py,sha256=KAaXFI1SKdcCVWjopVqYaWU4WZgZU9Oh2epdqH1ADPw,8343
26
- qulab/storage/storage.py,sha256=qRyR-5zRRx84DfsifozlYKMRj8bykwRyF7TW8oyFmwk,2561
27
- qulab/storage/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- qulab/storage/backend/redis.py,sha256=hNaPP0V1BSWbUcx4AxOhEXiR83c_BZqeVzeOYkb8-zM,5202
29
- qulab/storage/models/__init__.py,sha256=DkKzQF7tYd1WL1gGPuCThBcGfpnCuZ_PTLrqV3M_EJ0,586
30
- qulab/storage/models/base.py,sha256=QLXiTRCPcg28BCFxBHexAxdNLjh2ONkzgNavoFOBW9s,114
31
- qulab/storage/models/config.py,sha256=Mxk0-YcK0WgA-7-2oIuDMAeBaUECzj-3_oPvgF7gYtE,689
32
- qulab/storage/models/file.py,sha256=1Rypz1QSco6drBCiR_BS6Oy0ifOapBIeNEm0uDqqxBk,2716
33
- qulab/storage/models/ipy.py,sha256=uYBeqWsOxxCWUsDpnwhxugh6C9OuH92OrChlLj0gddk,1574
34
- qulab/storage/models/models.py,sha256=JUqtvk8ywulkcFL38WfTviuVOcdvSGakZYJS7jAPNig,2879
35
- qulab/storage/models/record.py,sha256=L0k531bGF9JN-GLv3hG87tB7k0kuSBkEeC9vi6_qywE,4970
36
- qulab/storage/models/report.py,sha256=j9ByrVoue-rwaXcnfTzVOSf1xDJdlZJq666agF0AZRY,798
37
- qulab/storage/models/tag.py,sha256=c3cTxpJUoG9L6xyDvVuagYVhB32amzbkBOmVeRIZ5Zo,2339
38
- qulab/sys/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- qulab/sys/chat.py,sha256=DlFLP_gbVyL8fDUyad6Xu8sjQCZJauLIvF31mj5BtMs,22449
40
- qulab/sys/ipy_events.py,sha256=qvsqs7-CYQ-P4WtSe9UUZZ0tC88XxPMd9DM4LJALgEk,2889
41
- qulab/sys/progress.py,sha256=Tk1B96_1QrlI4yU0cyZlf2wVsF238DjQGqXJVG2j4t0,5350
42
- qulab/sys/device/__init__.py,sha256=bDqJrYQJx8YR4u_CYvJPpIBr6whP7pVnxnROTHk_yhA,149
43
- qulab/sys/device/basedevice.py,sha256=iqyX2SQLb7aRWNE5Uj2yHkFOLqVrX2I1N-xubTDB5tQ,6423
44
- qulab/sys/device/loader.py,sha256=AL0rNF4UZ-CUHoF8FNtT_ZGLwySvz7SDPsKALaJS8po,2501
45
- qulab/sys/device/utils.py,sha256=H9TvMqHZABhFdIah4uT0x9FvQ6ZPwbvw-wCnWTy4rfo,1564
46
- qulab/sys/drivers/FakeInstrument.py,sha256=kwIXN-dHmvGYBinmcCLxUQKm0ENiJpsMwgQIYNLDS2k,1867
47
- qulab/sys/drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- qulab/sys/net/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- qulab/sys/net/bencoder.py,sha256=p85DtmVy3cna3Da07boau77el2Cnym5-mKGF4xCJSy4,4959
50
- qulab/sys/net/cli.py,sha256=dm-JxbgZgFH2P_5Zu3kSrLzy2U_VRLswkvE1d3xGp0w,5690
51
- qulab/sys/net/dhcp.py,sha256=gT5ehyvwW3y8E5u_DnYRd5I0KaddonmQJFVhlIS2yxM,23509
52
- qulab/sys/net/dhcpd.py,sha256=pNC47i-hu8HTzCrKU0PatL3AbgEqe1ovmpLPwNoZLa8,5322
53
- qulab/sys/net/kad.py,sha256=gGYb9cXbAdbYhubQdCRqOGigllBy0kSUp4z3_f3AWz0,38981
54
- qulab/sys/net/kcp.py,sha256=oFyiosQ1o0qeVA9hODIYEZtJj4HN1aNLGVP6vbxouMs,5761
55
- qulab/sys/net/nginx.py,sha256=QAQthr_Dux7xRpgqeY6BVxxre4dg0WJITztSk8Fn-jU,4964
56
- qulab/sys/rpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- qulab/sys/rpc/client.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
- qulab/sys/rpc/exceptions.py,sha256=djK44hYVMixF2Y-lAXDGHlyyCmYGw7EJjB3I0ttejok,2567
59
- qulab/sys/rpc/msgpack.py,sha256=s9mbPIkQktO1FiSAuE6ymM_1w8rIERA0gMm5GQkT7z8,35327
60
- qulab/sys/rpc/msgpack.pyi,sha256=3dJgISPCTEBo65VaoGjcFkdLijPx6zJtKqcZiS9bcaE,1274
61
- qulab/sys/rpc/rpc.py,sha256=9ZwzC79FgmbHXbO1Gjg4z0wZgHLDziTwVuS2aZpLJAk,11979
62
- qulab/sys/rpc/serialize.py,sha256=0SR1me02mao2JwWR3rdjUIcOzh1m1JFb7fLEaw_q-pE,3355
63
- qulab/sys/rpc/server.py,sha256=e3R0gwOHpLEkSp7Tb43FMSDvqSG-pjrkskdISKQRseE,713
64
- qulab/sys/rpc/socket.py,sha256=e3R0gwOHpLEkSp7Tb43FMSDvqSG-pjrkskdISKQRseE,713
65
- qulab/sys/rpc/utils.py,sha256=6YGFOkY7o09lkA_I1FIP9_1Up3k2F1KOkftvu0_8lxo,594
66
- qulab/sys/rpc/worker.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- QuLab-2.0.0.dist-info/LICENSE,sha256=PRzIKxZtpQcH7whTG6Egvzl1A0BvnSf30tmR2X2KrpA,1065
68
- QuLab-2.0.0.dist-info/METADATA,sha256=GOEc_-96TTLtuYZmhDd-oXKY7rGiorZo_Zf_cE4jWt0,3385
69
- QuLab-2.0.0.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
70
- QuLab-2.0.0.dist-info/top_level.txt,sha256=3T886LbAsbvjonu_TDdmgxKYUn939BVTRPxPl9r4cEg,6
71
- QuLab-2.0.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- from .main import MainWindow