nsqdriver 0.10.0__cp312-cp312-macosx_10_13_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.

Potentially problematic release.


This version of nsqdriver might be problematic. Click here for more details.

@@ -0,0 +1,245 @@
1
+ import numpy as np
2
+ from nsqdriver import MCIDriver, QSYNCDriver
3
+
4
+
5
+ class _XYChannel:
6
+ def __init__(self, mci: "DeviceBase", ch=1):
7
+ self.mci = mci
8
+ self.ch = ch
9
+ self.to_zero = np.zeros((16,))
10
+ self.to_one = np.ones((16,))
11
+ self.en = True
12
+ self.mode = 0
13
+ self.off = 0
14
+
15
+ def wave(self, w):
16
+ self.wavex(w, self.ch)
17
+
18
+ def wavex(self, w, idx):
19
+ if np.max(np.abs(w)) < 1e-30:
20
+ wr = np.zeros(16)
21
+ else:
22
+ wr = w
23
+ self.mci.mci_driver.set("Waveform", wr, idx)
24
+
25
+ def arm(self, k=None):
26
+ self.mci.mci_driver.set('PushWaveCache')
27
+
28
+ def trig_del(self, delay):
29
+ ...
30
+
31
+ def output_del(self, delay):
32
+ ...
33
+
34
+ def __del__(self):
35
+ pass
36
+
37
+ def output(self, b):
38
+ self.en = bool(b)
39
+ if not self.en:
40
+ self.mci.mci_driver.set("Waveform", self.to_zero, self.ch)
41
+
42
+ def mode(self, m_):
43
+ ...
44
+
45
+ def offsetx(self, off, idx):
46
+ self.mci.mci_driver.set('Waveform', off*self.to_one, idx)
47
+ self.off = off
48
+
49
+ def offset(self, off):
50
+ self.offsetx(off, self.ch)
51
+
52
+ W = {
53
+ "wave": wave,
54
+ "output": output,
55
+ "trig_del": trig_del,
56
+ "output_del": output_del,
57
+ "mode": mode,
58
+ "offset": offset,
59
+ }
60
+
61
+ Q = {"arm": arm}
62
+
63
+
64
+ class _ZChannel(_XYChannel):
65
+ pass
66
+
67
+
68
+ class _Probe:
69
+ def __init__(self, mci: "DeviceBase", ch=1):
70
+ self.mci = mci
71
+ self.ch = ch
72
+ self.freqList = []
73
+ self.SGS = None # single shot temp cache
74
+ self.AVG = None # average temp cache
75
+ self.depth = 2000
76
+ self._width = 1000
77
+ self.start = 500
78
+ self.demod = 1
79
+ self.averaged_I = np.zeros((16384, )) # 直播直采,相当于只有I路数据
80
+
81
+ def depth(self, depth_):
82
+ self.depth = depth_
83
+ self.mci.mci_driver.set('PointNumber', depth_, self.ch)
84
+
85
+ def demodulation_on(self, demod_):
86
+ self.demod = int(demod_)
87
+
88
+ def start(self, start_):
89
+ self.start = start_
90
+ self.mci.mci_driver.set('TriggerDelay', start_, self.ch)
91
+
92
+ def width(self, width_):
93
+ self._width = width_/4e9
94
+ self.mci.mci_driver.set('PointNumber', width_, self.ch)
95
+
96
+ def freqs(self, *freqList_):
97
+ self.freqList = freqList_
98
+ self.mci.mci_driver.set('FreqList', freqList_, self.ch)
99
+
100
+ def shot(self, _shot):
101
+ self.mci.mci_driver.set('Shot', _shot)
102
+
103
+ def measure(self, k=None):
104
+ self.mci.mci_driver.set('StartCapture')
105
+ if self.demod:
106
+ self.SGS = self.mci.mci_driver.get('IQ', self.ch)
107
+ self.AVG = np.mean(self.SGS, axis=0)
108
+ else:
109
+ self.averaged_I = np.mean(self.mci.mci_driver.get('TraceIQ', self.ch), axis=0)
110
+
111
+ def single_shot(self, k=None):
112
+ return self.SGS
113
+
114
+ def average(self, k=None):
115
+ return self.AVG
116
+
117
+ def trace_I(self, k=None):
118
+ return self.averaged_I
119
+
120
+ def trace_Q(self, k=None):
121
+ return self.averaged_I
122
+
123
+ def __del__(self):
124
+ pass
125
+
126
+ W = {
127
+ "demod": demodulation_on,
128
+ "depth": depth,
129
+ "width": width,
130
+ "start": start,
131
+ "freqs": freqs,
132
+ "shot": shot,
133
+ }
134
+
135
+ Q = {
136
+ "measure": measure,
137
+ "A": average,
138
+ "S": single_shot,
139
+ "traceI": trace_I,
140
+ "traceQ": trace_Q
141
+ };
142
+
143
+
144
+ # one box need one class
145
+ class DeviceBase:
146
+ def __init__(self):
147
+ self.mci_driver = MCIDriver('127.0.0.1')
148
+ self.qsync_driver = QSYNCDriver('127.0.0.1')
149
+
150
+
151
+ class NS_MCI(DeviceBase):
152
+ def __init__(self, addr, srate=10e9, mixmode=2, ref_clk='in'):
153
+ """!
154
+ 此类涉及到系统同步,放到最后实例化
155
+ @param addr: 设备ip
156
+ @param srate: OUT通道采样率
157
+ @param mixmode: 为2时开启OUT通道混合模式,增强第二奈奎斯特区输出
158
+ @param ref_clk: 设备参考信号来源,不接外输出100M时都配置为'in'
159
+ """
160
+ super(NS_MCI, self).__init__()
161
+ self.mci_driver = MCIDriver(addr)
162
+ self.qsync = QSYNCDriver(addr)
163
+ self.srate = srate
164
+ self.mixmode = mixmode
165
+ self.ref_clk = ref_clk
166
+ self.connect()
167
+
168
+ def connect(self):
169
+ mci_params = {'DArate': self.srate, 'MixMode': self.mixmode}
170
+ qsync_params = {'RefClock': self.ref_clk}
171
+
172
+ self.qsync.open(system_parameter=qsync_params)
173
+ self.mci_driver.open(system_parameter=mci_params)
174
+ self.qsync.sync_system()
175
+
176
+ self.mci_driver.set('EnableWaveCache', True)
177
+
178
+ for _ch in range(22):
179
+ xy_ch = _ch+1
180
+ setattr(self, f'OUT{xy_ch}', _XYChannel(self, xy_ch))
181
+ for _ch in range(2):
182
+ probe_ch = _ch+1
183
+ setattr(self, f'IN{probe_ch}', _Probe(self, probe_ch))
184
+
185
+ def trig_interval(self, interval):
186
+ self.interval = interval
187
+ self.qsync.set('TrigPeriod', int(interval))
188
+
189
+ def trig_count(self, count_):
190
+ self.qsync.set('Shot', int(count_))
191
+
192
+ def trig(self):
193
+ self.qsync.set('GenerateTrig', self.interval)
194
+
195
+ def awg_arm(self):
196
+ self.mci_driver.set('PushWaveCache')
197
+
198
+ def __del__(self):
199
+ pass
200
+
201
+ W = {
202
+ "trig_interval": trig_interval,
203
+ "trig_count": trig_count,
204
+ "connect": connect,
205
+ "trig": trig,
206
+ "awg_arm": awg_arm,
207
+ }
208
+
209
+ Q = {
210
+ }
211
+
212
+
213
+ class NS_Z(DeviceBase):
214
+ def __init__(self, addr, mixmode=2):
215
+ """!
216
+ 此类负责控制24 Z OUT通道的设备,采样率固定为2Gsps,mixmode固定为1
217
+ @param addr: 设备ip
218
+ @param mixmode: 为1时关闭OUT通道混合模式
219
+ """
220
+ super(NS_Z, self).__init__()
221
+ self.mci_driver = MCIDriver(addr)
222
+ self.qsync = QSYNCDriver(addr)
223
+ self.srate = 2e9
224
+ self.mixmode = 1
225
+ self.connect()
226
+
227
+ def connect(self):
228
+ mci_params = {'DArate': self.srate, 'MixMode': self.mixmode}
229
+ self.mci_driver.open(system_parameter=mci_params)
230
+
231
+ self.mci_driver.set('EnableWaveCache', True)
232
+
233
+ for _ch in range(24):
234
+ xy_ch = _ch+1
235
+ setattr(self, f'OUT{xy_ch}', _ZChannel(self, xy_ch))
236
+
237
+ def awg_arm(self):
238
+ self.mci_driver.set('PushWaveCache')
239
+
240
+ W = {
241
+ "connect": connect,
242
+ }
243
+
244
+ Q = {
245
+ }
File without changes
@@ -0,0 +1,109 @@
1
+ Metadata-Version: 2.1
2
+ Name: nsqdriver
3
+ Version: 0.10.0
4
+ Summary: Q series measurement and control equipment driver interface
5
+ Home-page: https://g2hoyqcmh4.feishu.cn/wiki/Jgt1wxlKniveYQkqCgbcJHsMnoe
6
+ Classifier: Intended Audience :: Developers
7
+ Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator
8
+ Classifier: Operating System :: MacOS :: MacOS X
9
+ Classifier: Operating System :: Microsoft :: Windows
10
+ Classifier: Operating System :: POSIX
11
+ Classifier: Programming Language :: Python :: 3.8
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Requires-Python: >=3.8
17
+ Description-Content-Type: text/markdown
18
+ Requires-Dist: numpy>=1.18
19
+ Requires-Dist: astor>=0.8.1
20
+ Provides-Extra: waveforms
21
+ Requires-Dist: waveforms; extra == "waveforms"
22
+
23
+ ```
24
+ _ _ ____ ___ ____ _
25
+ | \ | | / ___| / _ \ | _ \ _ __ (_) __ __ ___ _ __
26
+ | \| | \___ \ | | | | | | | | | '__| | | \ \ / / / _ \ | '__|
27
+ | |\ | ___) | | |_| | | |_| | | | | | \ V / | __/ | |
28
+ |_| \_| |____/ \__\_\ |____/ |_| |_| \_/ \___| |_|
29
+ ```
30
+ ***
31
+
32
+ ### 简介
33
+ NSQDriver为一套测控系列设备的Python通用驱动接口。可使用Python作为编程语言,基于此驱动接口可以实现对测控设备的控制,进而完成各种超导量子芯片的表征实验和高保真门操作。
34
+
35
+ ```
36
+ +------------------------+
37
+ | Python |
38
+ | +------------------+
39
+ | | NSQDriver |
40
+ +------------------------+
41
+ : : :
42
+ +---------- : -----+
43
+ : : :
44
+ V V V
45
+ +-----------+ +-----------+ +-----------+
46
+ | Device A | | Device B | | QSYNC |
47
+ +-----------+ +-----------+ +-----------+
48
+ ```
49
+
50
+ NSQDriver接口可用于统一控制Q100/PQ系列测控仪器,可详细控制每台仪器每个OUT、IN通道的播放与采集行为,以及查看设备的运行状态等。在一个多台测控设备组成的多比特测控系统中,可以有效的在软件层面实现对系统中每台设备的详细控制。
51
+
52
+ ***
53
+ ### 快速开始
54
+ - 驱动接口的通用流程如下
55
+ ```python
56
+ from nsqdriver import MCIDriver, QSYNCDriver
57
+
58
+ # 实例化设备驱动接口
59
+ driver = MCIDriver('127.0.0.1')
60
+ qsync = QSYNCDriver('127.0.0.1')
61
+
62
+ # 连接设备
63
+ qsync.open()
64
+ driver.open()
65
+
66
+ # 初始化系统
67
+ qsync.sync_system()
68
+
69
+
70
+ # 相关参数,参数细节相关参考 8.可用参数列表
71
+ driver.set('Shot', 1024)
72
+ ```
73
+
74
+ - NSWave语言
75
+ - NSWave是一种对于Sequence序列发生技术的配套编程语言,属于python语法的子集,支持与python程序进行混编
76
+ - Sequence序列发生模式将测控所需的各种门的编辑由主控计算机直接生成波形转化成了设备实时计算
77
+ - 提供了一套直观的时序编辑接口
78
+ ```python
79
+ from nsqdriver import nswave as nw
80
+ from nsqdriver import MCIDriver
81
+ import numpy as np
82
+
83
+ @nw.kernel
84
+ def program(envelope: np.ndarray):
85
+ srate: nw.Var = 8e9
86
+ time_width: nw.Var = 6e-6
87
+ freq: nw.Var = 4.1e9
88
+ time_line: np.ndarray = np.linspace(0, 6e-6, int(time_width * srate + 1))
89
+ wave: np.ndarray = np.cos(2 * np.pi * time_line * freq)
90
+ frame_0: nw.Frame = nw.ins_frame(0e9, 0*np.pi)
91
+ frame_1: nw.Frame = nw.ins_frame(4.3e9, 0*np.pi)
92
+ envelope_0: nw.Envelope = nw.ins_envelope(wave)
93
+ envelope_1: "nw.Envelope" = nw.evlp_gaussian(2e-6, srate)
94
+ envelope_2: nw.Envelope = nw.ins_envelope(envelope)
95
+
96
+ nw.wait_for_trigger()
97
+ nw.reset_frame([frame_0, frame_1])
98
+ nw.wait(3.2e-6)
99
+ nw.play_wave(envelope_1, frame_1)
100
+ nw.play_wave(envelope_0, frame_0)
101
+ nw.inc_phase(frame_1, np.pi)
102
+ nw.play_wave(envelope_2, frame_1)
103
+
104
+ return nw.Kernel()
105
+
106
+ driver: MCIDriver
107
+ envelope = np.ones((10240, ))
108
+ driver.set("Program", program(envelope), 'S5-O1')
109
+ ```
@@ -0,0 +1,31 @@
1
+ nsqdriver/NS_CST.py,sha256=_QYCjg1YglIJ4YVmxvISqvy5rExWGlMhyrK9zYIRbRY,7877
2
+ nsqdriver/NS_MCI.py,sha256=zbAA70_g_02mF76LqcIzVeqRRNrVscTL60iHpFsgmZ4,21088
3
+ nsqdriver/NS_QSYNC.py,sha256=ZSOznM5PMlOm89rWAMiqVyZLWn3y0lTQp3d1z6LnkV0,27121
4
+ nsqdriver/__init__.py,sha256=qGxm26SCYU2CZT2nD597nxHmvSHkC6bV3Sjw63hceMs,372
5
+ nsqdriver/common.py,sha256=IHfShqgNN3THbe7KD7ICdfFY7JKC_kQj0_KJk-449gQ,499
6
+ nsqdriver/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ nsqdriver/compiler/assembler.cpython-312-darwin.so,sha256=WqBTLhcSH2V_MkNX_CD8nPxJ2g9R38-b0V7s_8Ue3Ow,1033872
8
+ nsqdriver/compiler/ns_wave.cpython-312-darwin.so,sha256=dCpWfXbT5jwmw8c31sZSsQDYctjKYGu20eICu5IXJd8,640752
9
+ nsqdriver/compiler/ns_wave.pyi,sha256=JQiE_9HqCzm00bS6c2JaaIXwt7xN_x9XXax-BBrE7-o,3824
10
+ nsqdriver/compiler/py_wave_asm.cpython-312-darwin.so,sha256=PogSEvF5br5wwXp1jILB8Dxajmu2hj7lM_je6igSbFI,838840
11
+ nsqdriver/compiler/py_wave_asm.pyi,sha256=w2PWlBrns4tfDYjTLyOBfNgjjjVA_xzMJZYYyDPKce4,656
12
+ nsqdriver/nswave/__init__.py,sha256=BOSBAccspBvBK0eX49b3731HYaMuSFrtGHsUKu8u2z8,88
13
+ nsqdriver/nswave/_asm.pyi,sha256=3jDUjyfmn7iBgmQCviSzhvGEXoWkyQlEGfgmGJAyaH8,2722
14
+ nsqdriver/nswave/_checkers.cpython-312-darwin.so,sha256=QecJhssHODT6QX4O0PtSNNEPou5vJGwM4X2Vrnw6wTY,473120
15
+ nsqdriver/nswave/_errors.cpython-312-darwin.so,sha256=j7zi1CZGmTxd_eUyGyQkTRMHqBWB_wev56RHWjs3Z-Y,238976
16
+ nsqdriver/nswave/_functions.cpython-312-darwin.so,sha256=tNXhN8uKj4yfMtraWZ37OkVBseFhKLcm9B1_9Wjqzm4,269128
17
+ nsqdriver/nswave/_functions.pyi,sha256=GpLk_DBPy_rgO6pQ2iFtz24sdpJ4HmDDlrSTZsHEMi4,1565
18
+ nsqdriver/nswave/_ir.cpython-312-darwin.so,sha256=QGfHftUTmVc929To1JWVrmJ4YaeW-23synyHf_6Jih4,727456
19
+ nsqdriver/nswave/_ir_pass.cpython-312-darwin.so,sha256=ZWJCC-TzPAYgtBfYuX9SOqL-L_c2UJEAOzJKEpp-NlU,182944
20
+ nsqdriver/nswave/_optimizations.cpython-312-darwin.so,sha256=vqCyeaAyvW0JZEmmQe_06o-Cnx9UPHaOnnZReYJecFY,183896
21
+ nsqdriver/nswave/_rules.cpython-312-darwin.so,sha256=E4M5MU50Hs4bQzU6KD_gz4k7yY7_0WLkZBDYyxIUVlI,461584
22
+ nsqdriver/nswave/_translate.cpython-312-darwin.so,sha256=AML1pAzFWTO-C6G6U2PugVDAecjm5AD0_2nRJHaaVAQ,272296
23
+ nsqdriver/nswave/kernel.cpython-312-darwin.so,sha256=xtfKU4AHB23JzP567v28ddQKYlWHnzH9XQFoWqSsVxc,634560
24
+ nsqdriver/nswave/kernel.pyi,sha256=83P6dTTARLmXC3B_fJn_ZqtyOWZ3-scfP7uN45xJAlY,1555
25
+ nsqdriver/wrapper/AWG_ADC.py,sha256=ktQkORc8VZUFkNg6huC7DKIkvZyHYXRolQ2SAA89JnM,19199
26
+ nsqdriver/wrapper/ND_NSMCI.py,sha256=gTyrDObhbggl35V_q-kpDoPsfttIEnDFc6f0-pk_P0k,6288
27
+ nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ nsqdriver-0.10.0.dist-info/METADATA,sha256=UpCBt0PQXapdlNa_R4Kqun3D6Ce2RNmy6449-JqW37s,4275
29
+ nsqdriver-0.10.0.dist-info/WHEEL,sha256=JjfPN3tuNVktXeVx2CdYSsvuQYIjI_7f2R0S3yE0Gks,115
30
+ nsqdriver-0.10.0.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
31
+ nsqdriver-0.10.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (75.1.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp312-cp312-macosx_10_13_universal2
5
+
@@ -0,0 +1 @@
1
+ nsqdriver