nsqdriver 0.12.10__cp38-cp38-win_amd64.whl → 0.12.12__cp38-cp38-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.
Potentially problematic release.
This version of nsqdriver might be problematic. Click here for more details.
- nsqdriver/NS_DDS_v3.py +251 -149
- nsqdriver/NS_MCI.py +25 -2
- nsqdriver/__init__.py +1 -1
- nsqdriver/compiler/assembler.cp38-win_amd64.pyd +0 -0
- nsqdriver/compiler/ns_wave.cp38-win_amd64.pyd +0 -0
- nsqdriver/compiler/py_wave_asm.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_checkers.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_errors.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_functions.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_ir.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_ir_pass.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_optimizations.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_rules.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_simulator.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/_translate.cp38-win_amd64.pyd +0 -0
- nsqdriver/nswave/kernel.cp38-win_amd64.pyd +0 -0
- {nsqdriver-0.12.10.dist-info → nsqdriver-0.12.12.dist-info}/METADATA +1 -1
- nsqdriver-0.12.12.dist-info/RECORD +40 -0
- nsqdriver-0.12.10.dist-info/RECORD +0 -39
- {nsqdriver-0.12.10.dist-info → nsqdriver-0.12.12.dist-info}/WHEEL +0 -0
- {nsqdriver-0.12.10.dist-info → nsqdriver-0.12.12.dist-info}/top_level.txt +0 -0
nsqdriver/NS_DDS_v3.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import copy
|
|
2
2
|
from enum import Enum
|
|
3
|
+
from math import ceil
|
|
3
4
|
from collections import namedtuple
|
|
4
|
-
from waveforms import Waveform, wave_eval
|
|
5
|
-
from waveforms.
|
|
5
|
+
from waveforms import Waveform, wave_eval, WaveVStack
|
|
6
|
+
from waveforms.waveform import _zero
|
|
6
7
|
import nsqdriver.nswave as nw
|
|
7
8
|
|
|
8
9
|
import numpy as np
|
|
@@ -43,15 +44,30 @@ def program_cap(param: nw.Var):
|
|
|
43
44
|
nw.wait_for_trigger()
|
|
44
45
|
i: nw.Var
|
|
45
46
|
# param: [[100e-9, 1e-6], [200e-9, 1e-6]]
|
|
47
|
+
# nw.wait(150e-9)
|
|
46
48
|
for i in param:
|
|
47
49
|
nw.wait(i[0])
|
|
48
|
-
nw.capture(i[1],
|
|
50
|
+
nw.capture(i[1], 0, 0)
|
|
49
51
|
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
@nw.kernel
|
|
54
|
+
def program_da(p: nw.Var):
|
|
55
|
+
i: nw.Var
|
|
56
|
+
e: nw.Var
|
|
57
|
+
nw.init_frame(0, 0)
|
|
58
|
+
nw.wait_for_trigger()
|
|
59
|
+
# nw.reset_frame()
|
|
60
|
+
for i in p:
|
|
61
|
+
nw.wait(i[0])
|
|
62
|
+
e = nw.ins_envelope(i[1])
|
|
63
|
+
nw.play_wave(e, 1, 0, 0)
|
|
52
64
|
|
|
53
65
|
|
|
54
|
-
|
|
66
|
+
ProbeSegment = namedtuple('ProbeSegment', ['start', 'stop', 'freq', 'idx'])
|
|
67
|
+
|
|
68
|
+
CaptureCmd = namedtuple('CaptureCmd', [
|
|
69
|
+
'start', 'ad_duration', 'delay', 'da_duration', 'freqs', 'delays', 'idx_list'
|
|
70
|
+
])
|
|
55
71
|
|
|
56
72
|
|
|
57
73
|
class DemodulateMode(str, Enum):
|
|
@@ -59,102 +75,6 @@ class DemodulateMode(str, Enum):
|
|
|
59
75
|
COMPLEX_SEQ = 'complex_seq'
|
|
60
76
|
|
|
61
77
|
|
|
62
|
-
def get_coef(coef_info, sampleRate):
|
|
63
|
-
start, stop = coef_info['start'], coef_info['stop']
|
|
64
|
-
numberOfPoints = int(
|
|
65
|
-
(stop - start) * sampleRate)
|
|
66
|
-
if numberOfPoints % 64 != 0:
|
|
67
|
-
numberOfPoints = numberOfPoints + 64 - numberOfPoints % 64
|
|
68
|
-
t = np.arange(numberOfPoints) / sampleRate + start
|
|
69
|
-
|
|
70
|
-
fList = []
|
|
71
|
-
wList = []
|
|
72
|
-
phases = []
|
|
73
|
-
|
|
74
|
-
for kw in coef_info['wList']:
|
|
75
|
-
Delta, t0, weight, w, phase = kw['Delta'], kw['t0'], kw['weight'], kw['w'], kw['phase']
|
|
76
|
-
fList.append(Delta)
|
|
77
|
-
|
|
78
|
-
if w is not None:
|
|
79
|
-
w = np.zeros(numberOfPoints, dtype=complex)
|
|
80
|
-
w[:len(w)] = w
|
|
81
|
-
w = shift(w, t0 - start)
|
|
82
|
-
phases.append(np.mod(phase + 2 * np.pi * Delta * start, 2 * np.pi))
|
|
83
|
-
else:
|
|
84
|
-
weight = weight
|
|
85
|
-
if isinstance(weight, np.ndarray):
|
|
86
|
-
pass
|
|
87
|
-
else:
|
|
88
|
-
if isinstance(weight, str):
|
|
89
|
-
fun = wave_eval(weight) >> t0
|
|
90
|
-
elif isinstance(weight, Waveform):
|
|
91
|
-
fun = weight >> t0
|
|
92
|
-
else:
|
|
93
|
-
raise TypeError(f'Unsupported type {weight}')
|
|
94
|
-
weight = fun(t)
|
|
95
|
-
phase += 2 * np.pi * Delta * start
|
|
96
|
-
w = getFTMatrix([Delta],
|
|
97
|
-
numberOfPoints,
|
|
98
|
-
phaseList=[phase],
|
|
99
|
-
weight=weight,
|
|
100
|
-
sampleRate=sampleRate)[:, 0]
|
|
101
|
-
phases.append(np.mod(phase, 2 * np.pi))
|
|
102
|
-
wList.append(w)
|
|
103
|
-
return np.asarray(wList), fList, numberOfPoints, phases, round((stop - t0) * sampleRate), t
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
def granularity4ns(delay):
|
|
107
|
-
# 4ns取整
|
|
108
|
-
out_delay = round(
|
|
109
|
-
delay // 4e-9 * 4e-9, 10
|
|
110
|
-
)
|
|
111
|
-
return out_delay
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
def generate_para(device, ch, coef_info):
|
|
115
|
-
global RES_MAP
|
|
116
|
-
global PROGRAME_PARA
|
|
117
|
-
RES_MAP = []
|
|
118
|
-
PROGRAME_PARA = []
|
|
119
|
-
|
|
120
|
-
res_coef = get_coef(coef_info, 4e9)
|
|
121
|
-
da_ad_delay = 150e-9 # ad相对于da的延迟
|
|
122
|
-
ad_start = []
|
|
123
|
-
freq_map = []
|
|
124
|
-
|
|
125
|
-
for num, (orig, i) in enumerate(zip(coef_info["wList"], res_coef[0])):
|
|
126
|
-
RES_MAP.append([None, None]) # 第一个字段标记第几个频点,第二个字段标记第几次采集
|
|
127
|
-
if orig['Delta'] not in freq_map:
|
|
128
|
-
# Delta 字段是解模频点
|
|
129
|
-
# 新增加了频点
|
|
130
|
-
freq_map.append(orig['Delta'])
|
|
131
|
-
RES_MAP[-1][0] = freq_map.index(orig['Delta'])
|
|
132
|
-
|
|
133
|
-
# 5.43这个频率点包含了第
|
|
134
|
-
ad_line = res_coef[-1][np.nonzero(i)]
|
|
135
|
-
ad_width = granularity4ns(ad_line[-1] - ad_line[0] + 0.25e-9)
|
|
136
|
-
da_width = ad_width # 设置播放时长=采样时长
|
|
137
|
-
if orig["t0"] not in ad_start:
|
|
138
|
-
# 这个采集的起始点以前没配置过
|
|
139
|
-
PROGRAME_PARA.append([orig["t0"], ad_width, da_ad_delay, da_width])
|
|
140
|
-
ad_start.append(orig["t0"])
|
|
141
|
-
# else:
|
|
142
|
-
# # 这个采集的起点以前配置过
|
|
143
|
-
# cap_num += 1
|
|
144
|
-
# cap_map[num] = [cap_num, ]
|
|
145
|
-
RES_MAP[-1][1] = len(ad_start) - 1 # len(ad_start) - 1 表明了当前是第几次采集
|
|
146
|
-
# print(programe_para, freq_map)
|
|
147
|
-
device.set("Program", program_cap(PROGRAME_PARA), ch)
|
|
148
|
-
device.set("FreqList", freq_map, ch)
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
def get_coef_res(iq_res):
|
|
152
|
-
res = []
|
|
153
|
-
for (freq_num, cap_num) in RES_MAP:
|
|
154
|
-
res.append(iq_res[freq_num][cap_num::len(PROGRAME_PARA)])
|
|
155
|
-
return res
|
|
156
|
-
|
|
157
|
-
|
|
158
78
|
class Driver(BaseDriver):
|
|
159
79
|
CHs = list(range(1, 25))
|
|
160
80
|
segment = ('ns', '111|112|113|114|115')
|
|
@@ -222,6 +142,7 @@ class Driver(BaseDriver):
|
|
|
222
142
|
self.handle = None
|
|
223
143
|
self.model = 'NS_MCI' # 默认为设备名字
|
|
224
144
|
self.srate = 8e9
|
|
145
|
+
self.ad_srate = 4e9
|
|
225
146
|
self.addr = addr
|
|
226
147
|
self.timeout = timeout
|
|
227
148
|
self.chs = set() # 记录配置过的ch通道
|
|
@@ -229,7 +150,11 @@ class Driver(BaseDriver):
|
|
|
229
150
|
self.coef_cache = {}
|
|
230
151
|
self.res_maps = {}
|
|
231
152
|
self.probe_da_wave = {}
|
|
232
|
-
self.
|
|
153
|
+
# self.probe_delay = 32e-9
|
|
154
|
+
self.probe_delay = 0
|
|
155
|
+
self.capture_cmds: "dict[int, list[CaptureCmd]]" = {}
|
|
156
|
+
self.capture_cali_param: "dict[int, np.ndarray]" = {}
|
|
157
|
+
self.capture_points: "dict[int, np.ndarray]" = {}
|
|
233
158
|
self.demodulate_mode = DemodulateMode.MORE_QUBIT
|
|
234
159
|
|
|
235
160
|
def open(self, **kw):
|
|
@@ -242,40 +167,42 @@ class Driver(BaseDriver):
|
|
|
242
167
|
DArate = 8e9
|
|
243
168
|
ADrate = 4e9
|
|
244
169
|
sysparam = {
|
|
245
|
-
"MixMode":
|
|
170
|
+
"MixMode": 2,
|
|
246
171
|
"RefClock": "out",
|
|
247
172
|
"DArate": DArate,
|
|
248
173
|
"ADrate": ADrate,
|
|
249
174
|
"CaptureMode": 0,
|
|
250
175
|
"INMixMode": 2, # 4~6 GHz 取 1, 6 ~ 8 GHz 取 2
|
|
251
176
|
}
|
|
177
|
+
sysparam.update(kw.get('system_parameter', {}))
|
|
252
178
|
|
|
253
179
|
device = MCIDriver(self.addr, self.timeout)
|
|
254
180
|
device.open(system_parameter=sysparam)
|
|
255
181
|
self.handle = device
|
|
256
182
|
|
|
257
183
|
def granularity4ns(self, delay):
|
|
258
|
-
#
|
|
259
|
-
|
|
260
|
-
delay // 4e-9 * 4e-9, 10
|
|
261
|
-
)
|
|
262
|
-
return out_delay
|
|
184
|
+
# points_4ns = 16 # self.ad_srate*4e-6
|
|
185
|
+
return delay // 4 * 4
|
|
263
186
|
|
|
264
187
|
@staticmethod
|
|
265
|
-
def
|
|
188
|
+
def _delay2_phase(delay, freq):
|
|
189
|
+
return 2 * np.pi * freq * (delay * 1e-9)
|
|
190
|
+
|
|
191
|
+
def in_sequence_in_time(self, coef_info: dict) -> list[CaptureCmd]:
|
|
266
192
|
w_list = coef_info.get('wList', [])
|
|
267
193
|
time_segments: "list[ProbeSegment]" = []
|
|
268
194
|
|
|
269
|
-
for wave in w_list:
|
|
270
|
-
t0 = wave['t0']
|
|
195
|
+
for idx, wave in enumerate(w_list):
|
|
196
|
+
t0 = int(round(wave['t0'] * 1e9))
|
|
271
197
|
weight_expr = wave['weight']
|
|
272
198
|
|
|
273
199
|
# 假设 weight 表达式格式为 "square(X) >> Y",我们提取实际时间宽度
|
|
274
200
|
# duration = float(weight_expr.split('>>')[1].strip())
|
|
275
201
|
_start, _stop, _ = wave_eval(weight_expr).bounds
|
|
202
|
+
_start, _stop = int(round(_start * 1e9)), int(round(_stop * 1e9))
|
|
276
203
|
|
|
277
204
|
# 将区间加入列表
|
|
278
|
-
seg = ProbeSegment(t0+_start, t0+_stop, wave['Delta'])
|
|
205
|
+
seg = ProbeSegment(t0 + _start, t0 + _stop, wave['Delta'], idx)
|
|
279
206
|
time_segments.append(seg)
|
|
280
207
|
|
|
281
208
|
# 按起始时间排序
|
|
@@ -284,61 +211,148 @@ class Driver(BaseDriver):
|
|
|
284
211
|
# 结果存储
|
|
285
212
|
non_overlapping_segments: list[CaptureCmd] = []
|
|
286
213
|
current_start, current_end = time_segments[0].start, time_segments[0].stop
|
|
287
|
-
current_cmd = CaptureCmd(0, 0, 0, 0, [time_segments[0].freq])
|
|
214
|
+
current_cmd = CaptureCmd(0, 0, 0, 0, [time_segments[0].freq], [0.], [time_segments[0].idx])
|
|
288
215
|
pointer = 0
|
|
289
216
|
|
|
290
217
|
for seg in time_segments[1:]:
|
|
291
218
|
if seg.start > current_end:
|
|
292
219
|
# 如果不重叠,保存当前段并移动到下一段
|
|
293
|
-
|
|
220
|
+
if pointer == 0:
|
|
221
|
+
current_cmd = current_cmd._replace(start=current_start)
|
|
222
|
+
else:
|
|
223
|
+
current_cmd = current_cmd._replace(start=current_start - self.probe_delay)
|
|
294
224
|
current_cmd = current_cmd._replace(ad_duration=current_end - current_start)
|
|
295
|
-
current_cmd = current_cmd._replace(delay=
|
|
225
|
+
current_cmd = current_cmd._replace(delay=self.probe_delay)
|
|
296
226
|
current_cmd = current_cmd._replace(da_duration=current_end - current_start)
|
|
297
227
|
non_overlapping_segments.append(current_cmd)
|
|
298
228
|
|
|
299
|
-
current_cmd = CaptureCmd(0, 0, 0, 0, [seg.freq])
|
|
300
|
-
pointer
|
|
229
|
+
current_cmd = CaptureCmd(0, 0, 0, 0, [seg.freq], [0.], [seg.idx])
|
|
230
|
+
pointer = current_end
|
|
301
231
|
current_start, current_end = seg.start, seg.stop
|
|
302
232
|
else:
|
|
303
233
|
# 如果有重叠,扩展当前段
|
|
304
234
|
current_end = max(current_end, seg.stop)
|
|
235
|
+
current_cmd.idx_list.append(seg.idx)
|
|
305
236
|
current_cmd.freqs.append(seg.freq)
|
|
237
|
+
# 由delay换算解缠绕相位
|
|
238
|
+
current_cmd.delays.append(seg.start - current_start)
|
|
306
239
|
else:
|
|
307
240
|
# 添加最后一个段
|
|
308
|
-
current_cmd = current_cmd._replace(start=current_start -
|
|
241
|
+
current_cmd = current_cmd._replace(start=current_start - self.probe_delay)
|
|
309
242
|
current_cmd = current_cmd._replace(ad_duration=current_end - current_start)
|
|
310
|
-
current_cmd = current_cmd._replace(delay=
|
|
243
|
+
current_cmd = current_cmd._replace(delay=self.probe_delay)
|
|
311
244
|
current_cmd = current_cmd._replace(da_duration=current_end - current_start)
|
|
312
245
|
non_overlapping_segments.append(current_cmd)
|
|
313
246
|
return non_overlapping_segments
|
|
314
247
|
|
|
315
|
-
def
|
|
316
|
-
res_map = []
|
|
248
|
+
def generate_in_program(self, coef_info, ch):
|
|
317
249
|
freq_map = []
|
|
318
250
|
seq_param = []
|
|
319
251
|
|
|
320
|
-
self.capture_cmds[ch] = seq = self.
|
|
252
|
+
self.capture_cmds[ch] = seq = self.in_sequence_in_time(coef_info)
|
|
321
253
|
|
|
322
254
|
for segment in seq:
|
|
323
255
|
freq_map.extend(segment.freqs)
|
|
324
|
-
|
|
256
|
+
freq_map = list(set(freq_map))
|
|
325
257
|
|
|
258
|
+
_t_end = 0
|
|
259
|
+
res_map = [[]]*len(coef_info['wList'])
|
|
260
|
+
phase_map = [0]*len(coef_info['wList'])
|
|
261
|
+
points_map = [0]*len(coef_info['wList'])
|
|
326
262
|
for cap_num, segment in enumerate(seq):
|
|
263
|
+
_align_start = self.granularity4ns(segment.start)
|
|
264
|
+
_start_diff = segment.start - _align_start
|
|
265
|
+
_align_end = ceil((segment.start+segment.ad_duration)/4)*4
|
|
327
266
|
seq_param.append([
|
|
328
|
-
|
|
267
|
+
(_align_start-_t_end)*1e-9,
|
|
268
|
+
(_align_end-_align_start)*1e-9,
|
|
269
|
+
segment.delay*1e-9,
|
|
270
|
+
(_align_end-_align_start)*1e-9,
|
|
329
271
|
])
|
|
330
|
-
|
|
331
|
-
|
|
272
|
+
_t_end = _align_end
|
|
273
|
+
for idx, delay, freq in zip(segment.idx_list, segment.delays, segment.freqs):
|
|
274
|
+
res_map[idx] = [freq_map.index(freq), cap_num]
|
|
275
|
+
phase_map[idx] = self._delay2_phase(delay + _start_diff, freq)
|
|
276
|
+
points_map[idx] = segment.ad_duration * 1e-9 * self.ad_srate
|
|
332
277
|
|
|
333
278
|
self.res_maps[ch] = res_map
|
|
334
|
-
self.
|
|
335
|
-
self.
|
|
336
|
-
|
|
279
|
+
self.capture_cali_param[ch] = np.exp(-1j * np.array(phase_map)).reshape((-1, 1))
|
|
280
|
+
self.capture_points[ch] = np.array(points_map).reshape((-1, 1))
|
|
281
|
+
return program_cap(seq_param), freq_map
|
|
282
|
+
|
|
283
|
+
def out_sequence_in_time(self, wave_list: list):
|
|
284
|
+
last_start = wave_list[0][0]
|
|
285
|
+
last_stop = wave_list[0][1]
|
|
286
|
+
temp_w = [wave_list[0][2]]
|
|
287
|
+
_res = []
|
|
288
|
+
|
|
289
|
+
for idx, (start, stop, seg) in enumerate(wave_list[1:]):
|
|
290
|
+
if start > last_stop:
|
|
291
|
+
_res.append([last_start, last_stop, np.hstack(temp_w)])
|
|
292
|
+
last_start = start
|
|
293
|
+
last_stop = stop
|
|
294
|
+
temp_w.clear()
|
|
295
|
+
temp_w.append(seg)
|
|
296
|
+
else:
|
|
297
|
+
last_stop = max(last_stop, stop)
|
|
298
|
+
temp_w.append(seg)
|
|
299
|
+
else:
|
|
300
|
+
_res.append([last_start, last_stop, np.hstack(temp_w)])
|
|
301
|
+
return _res
|
|
302
|
+
|
|
303
|
+
def gen_wave_frag(self, x, wave: "Waveform"):
|
|
304
|
+
range_list = np.searchsorted(x, wave.bounds)
|
|
305
|
+
# ret = np.zeros_like(x)
|
|
306
|
+
ret = []
|
|
307
|
+
start, stop = 0, 0
|
|
308
|
+
for i, stop in enumerate(range_list):
|
|
309
|
+
if start < stop and wave.seq[i] != _zero:
|
|
310
|
+
_w = copy.deepcopy(wave)
|
|
311
|
+
_w.start = start / self.srate
|
|
312
|
+
_w.stop = stop / self.srate
|
|
313
|
+
part = _w.sample(self.srate)
|
|
314
|
+
part = part if part is None else part[:(stop-start)]
|
|
315
|
+
ret.append((start, stop, part))
|
|
316
|
+
start = stop
|
|
317
|
+
else:
|
|
318
|
+
if not ret:
|
|
319
|
+
ret.append((0, 128, np.zeros((128,))))
|
|
320
|
+
return ret
|
|
321
|
+
|
|
322
|
+
def generate_out_program(self, _wave, ch):
|
|
323
|
+
align_points = 32 # 4ns*8e9
|
|
324
|
+
if isinstance(_wave, WaveVStack):
|
|
325
|
+
_wave = _wave.simplify()
|
|
326
|
+
if len(_wave.seq) == 1 and _wave.seq[0] == _zero:
|
|
327
|
+
wave_list = [(0, 128, np.zeros((128,)))]
|
|
328
|
+
else:
|
|
329
|
+
_wave.stop = _wave.bounds[-2]
|
|
330
|
+
wave_list = self.gen_wave_frag(
|
|
331
|
+
np.linspace(_wave.start, _wave.stop, int((_wave.stop - _wave.start) * self.srate)), _wave)
|
|
332
|
+
# print(f'generate_out_program: {_wave.start=}, {_wave.stop=}, {wave_list=}, {ch=}')
|
|
333
|
+
_t_end = 0
|
|
334
|
+
para = []
|
|
335
|
+
wave = self.out_sequence_in_time(wave_list)
|
|
336
|
+
|
|
337
|
+
for i in wave:
|
|
338
|
+
wait = (i[0] - _t_end)
|
|
339
|
+
align_wait = wait // align_points * align_points
|
|
340
|
+
zero_num = wait - align_wait
|
|
341
|
+
align_end = ceil(i[1] / align_points) * align_points
|
|
342
|
+
align_wave = [np.zeros(zero_num), i[2], np.zeros([align_end - i[1]])]
|
|
343
|
+
para.append([align_wait / self.srate, np.hstack(align_wave)])
|
|
344
|
+
_t_end = align_end
|
|
345
|
+
return program_da(para)
|
|
337
346
|
|
|
338
347
|
def get_coef_res(self, iq_res, ch):
|
|
339
348
|
res = []
|
|
340
349
|
for (freq_num, cap_num) in self.res_maps[ch]:
|
|
341
350
|
res.append(iq_res[freq_num][cap_num::len(self.capture_cmds[ch])])
|
|
351
|
+
# 采样点归一化
|
|
352
|
+
res = np.array(res) / self.capture_points[ch]
|
|
353
|
+
# 校准相位
|
|
354
|
+
res *= self.capture_cali_param[ch]
|
|
355
|
+
|
|
342
356
|
return res
|
|
343
357
|
|
|
344
358
|
def close(self, **kw):
|
|
@@ -358,24 +372,25 @@ class Driver(BaseDriver):
|
|
|
358
372
|
|
|
359
373
|
def write(self, name: str, value, **kw):
|
|
360
374
|
channel = kw.get('ch', 1)
|
|
361
|
-
print(
|
|
375
|
+
# print(f'NS_DDS_v3 write: {name=}, {channel=}')
|
|
362
376
|
if name in {'Coefficient'}:
|
|
363
|
-
# data, f_list, numberOfPoints, phases, points, _ = get_coef(value, 4e9)
|
|
364
|
-
|
|
365
|
-
# print('DemoPoints'*10, points, channel)
|
|
366
|
-
# self.handle.set('DemoPoints', points, channel) ############### 16ns-oscillation problem
|
|
367
|
-
# self.handle.set('DemodulationParam', data, channel)
|
|
368
377
|
coef_info = value
|
|
369
378
|
self.chs.add(channel)
|
|
370
|
-
self.
|
|
379
|
+
kernel, freq_map = self.generate_in_program(coef_info, channel)
|
|
380
|
+
self.handle.set("ProgramIN", kernel, channel)
|
|
381
|
+
self.handle.set('TimeWidth', 2e-6, channel)
|
|
382
|
+
self.handle.set("FreqList", freq_map, channel)
|
|
371
383
|
self.coef_cache.update({channel: coef_info})
|
|
372
|
-
# elif name in {'Waveform'} and isinstance(value, waveforms.Waveform):
|
|
373
|
-
# self.probe_da_wave[channel] = value
|
|
374
384
|
elif name in {
|
|
375
385
|
'CaptureMode', 'SystemSync', 'ResetTrig', 'TrigPeriod',
|
|
376
386
|
'TrigFrom'
|
|
377
387
|
}:
|
|
378
388
|
pass
|
|
389
|
+
elif name in {
|
|
390
|
+
'GenWave', 'Waveform'
|
|
391
|
+
} and isinstance(value, Waveform):
|
|
392
|
+
kernel_da = self.generate_out_program(value, channel)
|
|
393
|
+
self.handle.set("ProgramOUT", kernel_da, channel)
|
|
379
394
|
else:
|
|
380
395
|
if name in {"Shot"}:
|
|
381
396
|
self.shots = value
|
|
@@ -383,18 +398,13 @@ class Driver(BaseDriver):
|
|
|
383
398
|
|
|
384
399
|
def read(self, name: str, **kw):
|
|
385
400
|
channel = kw.get('ch', 1)
|
|
386
|
-
print(name, kw, "READ " * 6)
|
|
387
401
|
if name in {"IQ"}:
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
# print(np.array(iq_res).shape, "iq shape")
|
|
395
|
-
result = np.array(self.get_coef_res(iq_res, channel)).T
|
|
396
|
-
# print(result.shape, "result.shape," * 3)
|
|
397
|
-
if len(self.chs) != 0:
|
|
402
|
+
iq_res = self.handle.get(
|
|
403
|
+
"IQ", channel, round(self.shots * len(self.capture_cmds[channel]))
|
|
404
|
+
)
|
|
405
|
+
|
|
406
|
+
result = self.get_coef_res(iq_res, channel).T
|
|
407
|
+
if len(self.chs) != 0 and channel in self.chs:
|
|
398
408
|
self.chs.remove(channel)
|
|
399
409
|
# self.IQ_cache.update({channel: result})
|
|
400
410
|
if len(self.chs) == 0:
|
|
@@ -402,3 +412,95 @@ class Driver(BaseDriver):
|
|
|
402
412
|
else:
|
|
403
413
|
result = self.handle.get(name, channel)
|
|
404
414
|
return result
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
if __name__ == '__main__':
|
|
418
|
+
co = {'start': 0.0, 'stop': 10e-06, 'wList': [
|
|
419
|
+
{'Delta': 6796613333.333333, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
420
|
+
't0': 1.5e-08, 'phi': 2.4311851282940524, 'threshold': 9.645718574523926},
|
|
421
|
+
{'Delta': 6965129999.666667, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
422
|
+
't0': 2.345e-06, 'phi': 2.1739656328752264, 'threshold': 20.36802101135254},
|
|
423
|
+
{'Delta': 6866353333.333333, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
424
|
+
't0': 2.345e-06, 'phi': 1.851749364542847, 'threshold': 21.65827751159668},
|
|
425
|
+
{'Delta': 6796613333.333333, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
426
|
+
't0': 5.175e-06, 'phi': 2.4311851282940524, 'threshold': 9.645718574523926},
|
|
427
|
+
{'Delta': 6965129999.666667, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
428
|
+
't0': 5.175e-06, 'phi': 2.1739656328752264, 'threshold': 20.36802101135254},
|
|
429
|
+
{'Delta': 6866353333.333333, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
430
|
+
't0': 5.175e-06, 'phi': 1.851749364542847, 'threshold': 21.65827751159668},
|
|
431
|
+
{'Delta': 6796613333.333333, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
432
|
+
't0': 7.805e-06, 'phi': 2.4311851282940524, 'threshold': 9.645718574523926},
|
|
433
|
+
{'Delta': 6796613333.333333, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
434
|
+
't0': 8.805e-06, 'phi': 2.4311851282940524, 'threshold': 9.645718574523926},
|
|
435
|
+
{'Delta': 6965129999.666667, 'phase': -0.0, 'weight': 'square(8e-07) >> 4e-07', 'window': (0, 1024), 'w': None,
|
|
436
|
+
't0': 9.005e-06, 'phi': 2.4311851282940524, 'threshold': 9.645718574523926}
|
|
437
|
+
]}
|
|
438
|
+
import matplotlib.pyplot as plt
|
|
439
|
+
from nsqdriver import QSYNCDriver
|
|
440
|
+
import time
|
|
441
|
+
import waveforms as wf
|
|
442
|
+
from nsqdriver.NS_MCI import SHARED_DEVICE_MEM
|
|
443
|
+
|
|
444
|
+
SHARED_DEVICE_MEM.clear_ip()
|
|
445
|
+
_d = Driver('192.168.0.43', 300)
|
|
446
|
+
qsync = QSYNCDriver("192.168.0.43")
|
|
447
|
+
_d = Driver('192.168.0.228', 30)
|
|
448
|
+
_q = QSYNCDriver('192.168.0.228')
|
|
449
|
+
time.sleep(5)
|
|
450
|
+
_wave = wf.zero()
|
|
451
|
+
for _w in co['wList']:
|
|
452
|
+
t0 = _w['t0']
|
|
453
|
+
_wave += (wf.wave_eval(_w['weight']) * wf.cos(2 * np.pi * _w['Delta'])) >> t0
|
|
454
|
+
# _wave = _wave << 50e-9
|
|
455
|
+
_wave.start = 0
|
|
456
|
+
_wave.stop = 60e-6
|
|
457
|
+
|
|
458
|
+
_wave(np.linspace(0, 20e-6, int(20e-6 * 8e9)), frag=True)
|
|
459
|
+
|
|
460
|
+
wave = _wave.sample(8e9) / 3
|
|
461
|
+
_wave
|
|
462
|
+
|
|
463
|
+
for ch in range(3, 4):
|
|
464
|
+
_d.write('GenWave', _wave, ch=ch)
|
|
465
|
+
_d.write('Coefficient', co, ch=ch)
|
|
466
|
+
# res = _d.generate_para(co, 1)
|
|
467
|
+
_d.write("Coefficient", co, ch=2)
|
|
468
|
+
ch = 2
|
|
469
|
+
# wave = wf.cos(2*wf.pi*0.15e9)
|
|
470
|
+
# wave.start = 0
|
|
471
|
+
# wave.stop = 1e-6
|
|
472
|
+
|
|
473
|
+
_wave = waveforms.zero()
|
|
474
|
+
for _w in co['wList']:
|
|
475
|
+
t0 = _w['t0']
|
|
476
|
+
_wave += (waveforms.wave_eval(_w['weight']) * waveforms.cos(2 * np.pi * _w['Delta'])) >> t0
|
|
477
|
+
# _wave = _wave << 50e-9
|
|
478
|
+
_wave.start = 0
|
|
479
|
+
_wave.stop = co["stop"]
|
|
480
|
+
plt.plot(_wave.sample(8e9))
|
|
481
|
+
plt.show()
|
|
482
|
+
_d.write("GenWave", _wave, ch=2)
|
|
483
|
+
_d.set('CaptureMode', 1)
|
|
484
|
+
shots = 1024
|
|
485
|
+
qsync.set('Shot', shots)
|
|
486
|
+
_d.write('Shot', shots)
|
|
487
|
+
_d.set('StartCapture')
|
|
488
|
+
qsync.set('GenerateTrig', 400e-6)
|
|
489
|
+
time.sleep(400e-6 * shots + 0.5)
|
|
490
|
+
data = _d.get('TraceIQ', ch)
|
|
491
|
+
data = np.array(data)
|
|
492
|
+
print(data.shape)
|
|
493
|
+
data = data.reshape((shots, -1))
|
|
494
|
+
# qsync.set("Shot", 0xFFFFFFFF)
|
|
495
|
+
# qsync.set("GenerateTrig", 500e-6)
|
|
496
|
+
plt.figure()
|
|
497
|
+
plt.plot(data.mean(axis=0)[:])
|
|
498
|
+
plt.show()
|
|
499
|
+
_d.set('CaptureMode', 0)
|
|
500
|
+
_d.write("Coefficient", co, ch=2)
|
|
501
|
+
_d.write("GenWave", _wave, ch=2)
|
|
502
|
+
_d.set('StartCapture')
|
|
503
|
+
qsync.set('GenerateTrig', 40e-6)
|
|
504
|
+
data = _d.read("IQ", ch=2)
|
|
505
|
+
print(20 * np.log10(np.abs(data.mean(axis=0))))
|
|
506
|
+
pass
|
nsqdriver/NS_MCI.py
CHANGED
|
@@ -9,8 +9,10 @@ import xmlrpc.client
|
|
|
9
9
|
from xmlrpc.client import Transport
|
|
10
10
|
from multiprocessing import shared_memory
|
|
11
11
|
from functools import wraps
|
|
12
|
+
from enum import Enum
|
|
12
13
|
|
|
13
14
|
import numpy as np
|
|
15
|
+
|
|
14
16
|
try:
|
|
15
17
|
import waveforms
|
|
16
18
|
HAS_WAVEFORMS = True
|
|
@@ -78,6 +80,12 @@ def solve_rpc_exception(func):
|
|
|
78
80
|
return wrapper
|
|
79
81
|
|
|
80
82
|
|
|
83
|
+
class DataMode(str, Enum):
|
|
84
|
+
DIRECT = 'direct'
|
|
85
|
+
NORMAL = 'normal'
|
|
86
|
+
RDMA = 'rdma'
|
|
87
|
+
|
|
88
|
+
|
|
81
89
|
class Driver(BaseDriver):
|
|
82
90
|
CHs = list(range(1, 25))
|
|
83
91
|
segment = ('ns', '111|112|113|114|115')
|
|
@@ -153,6 +161,7 @@ class Driver(BaseDriver):
|
|
|
153
161
|
self.handle = None
|
|
154
162
|
self.model = 'NS_MCI' # 默认为设备名字
|
|
155
163
|
self.srate = 6e9
|
|
164
|
+
self.data_mode = DataMode.NORMAL
|
|
156
165
|
self.device_online = True
|
|
157
166
|
self.has_start_capture = False
|
|
158
167
|
self.backend_version = (0, 0, 0)
|
|
@@ -285,20 +294,25 @@ class Driver(BaseDriver):
|
|
|
285
294
|
return
|
|
286
295
|
print_debug(f'Driver: get操作被调用{name}')
|
|
287
296
|
self.has_start_capture = False
|
|
297
|
+
if name in {'Trace', 'TraceIQ'} and self.backend_version >= (2, 8, 0):
|
|
298
|
+
data_mode = self.get('DataMode', channel)
|
|
299
|
+
data_mode = DataMode(data_mode) if data_mode else DataMode.NORMAL
|
|
300
|
+
if data_mode == DataMode.DIRECT:
|
|
301
|
+
return self._get_trace_data(channel)
|
|
288
302
|
|
|
289
303
|
func = self.fast_rpc.rpc_get
|
|
290
304
|
tmp = func(name, channel, value)
|
|
291
305
|
tmp = RPCValueParser.load(tmp)
|
|
292
306
|
return tmp
|
|
293
307
|
|
|
294
|
-
def update_firmware(self, file_path, target='all'):
|
|
308
|
+
def update_firmware(self, file_path, target='all', _id=0):
|
|
295
309
|
if not self.device_online:
|
|
296
310
|
return
|
|
297
311
|
import os
|
|
298
312
|
if not os.path.exists(file_path):
|
|
299
313
|
raise ValueError(f'文件路径: {file_path} 不存在')
|
|
300
314
|
with open(file_path, 'rb') as fp:
|
|
301
|
-
result = self.handle.update_rfs_firmware(fp.read(), target)
|
|
315
|
+
result = self.handle.update_rfs_firmware(fp.read(), target, _id)
|
|
302
316
|
if result:
|
|
303
317
|
print(f'设备{self.addr} 固件更新成功,3s后设备自动重启')
|
|
304
318
|
else:
|
|
@@ -331,6 +345,15 @@ class Driver(BaseDriver):
|
|
|
331
345
|
print(f'设备{self.addr}-指令{button_name}执行失败')
|
|
332
346
|
return flag
|
|
333
347
|
|
|
348
|
+
def _get_trace_data(self, channel):
|
|
349
|
+
res = self.get('ShmPath', channel)
|
|
350
|
+
if not res:
|
|
351
|
+
return
|
|
352
|
+
_path, chnl, chnl_num, shots, points = res
|
|
353
|
+
shm = shared_memory.SharedMemory(name=_path, create=False)
|
|
354
|
+
data = np.frombuffer(shm.buf, dtype=np.int16).reshape((chnl_num, shots, points))
|
|
355
|
+
return data[chnl], data
|
|
356
|
+
|
|
334
357
|
def _connect(self, addr=None, port=5001, timeout=None):
|
|
335
358
|
"""
|
|
336
359
|
获取到指定ip的tcp连接
|
nsqdriver/__init__.py
CHANGED
|
@@ -4,7 +4,7 @@ from .NS_CST import Driver as CSTDriver
|
|
|
4
4
|
from .compiler.ns_wave import InsChannel
|
|
5
5
|
from .compiler.py_wave_asm import nsw_config, AssemblyError
|
|
6
6
|
|
|
7
|
-
version_pack = (0, 12,
|
|
7
|
+
version_pack = (0, 12, 12)
|
|
8
8
|
|
|
9
9
|
__version__ = '.'.join(str(_) for _ in version_pack)
|
|
10
10
|
__all__ = ['MCIDriver', 'QSYNCDriver', 'CSTDriver', 'InsChannel']
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: nsqdriver
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.12
|
|
4
4
|
Summary: Q series measurement and control equipment driver interface
|
|
5
5
|
Home-page: https://g2hoyqcmh4.feishu.cn/wiki/Jgt1wxlKniveYQkqCgbcJHsMnoe
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
nsqdriver/NS_CST.py,sha256=zA5YcM65v66EqwBnplDvA6HM0I-y8damDOerE2CKyZE,8137
|
|
2
|
+
nsqdriver/NS_DDS_v3.py,sha256=sawKNLeSEmLKkKfPe-O9-LZCAY1lyTPEN3YJiAYU2Lc,20784
|
|
3
|
+
nsqdriver/NS_MCI.py,sha256=PO5VMtxQXNCOfLYuHsIZ6MNhZCkJhyNTgx0E6lPcMYE,22520
|
|
4
|
+
nsqdriver/NS_QSYNC.py,sha256=bPD0cAUehRXpTDwMNZutB5AWhZM7iwKBD5t5jmJiBF4,27900
|
|
5
|
+
nsqdriver/__init__.py,sha256=pL9i93d2rNy7GuHRrA4nVAfVsBFyrK4dsrJXAl4fwm0,383
|
|
6
|
+
nsqdriver/common.py,sha256=5BRActb9TgNdVwWtfuZ_gki47H1WbABzYr5XbxLKlh4,519
|
|
7
|
+
nsqdriver/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
nsqdriver/compiler/assembler.cp38-win_amd64.pyd,sha256=kWqjyifGKtUaxWlwim3YZPBL7tLc_Uin_c5zRgpkPqc,409088
|
|
9
|
+
nsqdriver/compiler/ns_wave.cp38-win_amd64.pyd,sha256=BAtvcfoPA7dAXeDm1vSWAi4YZ_0UYrT0PfvIrPVSBKc,239616
|
|
10
|
+
nsqdriver/compiler/ns_wave.pyi,sha256=axQaxrMaKRPx8k9sDVlRj3SjR03AmXUDzkVW4D_2RJw,3975
|
|
11
|
+
nsqdriver/compiler/py_wave_asm.cp38-win_amd64.pyd,sha256=q8SeFrutKbTfxxk3G0vvT3j_5chw1QlDPWejASnV2Ek,334848
|
|
12
|
+
nsqdriver/compiler/py_wave_asm.pyi,sha256=PqEZuNt83CCu_FJUczUjStowOz2TBgvfIytGanFPHuQ,685
|
|
13
|
+
nsqdriver/nswave/__init__.py,sha256=rAU1XD58JBF7iAYB5LVD-ZlEmQq9wyJrsRVHF-OOrzI,302
|
|
14
|
+
nsqdriver/nswave/_asm.pyi,sha256=f8IjCLPIocBZXTC8F5GFTlI6ZDa5-hhShJPjL166K4o,2846
|
|
15
|
+
nsqdriver/nswave/_checkers.cp38-win_amd64.pyd,sha256=FAXsIf-WzS9PI_ADDYwHaXv04xYVrNS-hLXk8BEoBIc,222720
|
|
16
|
+
nsqdriver/nswave/_checkers.pyi,sha256=931KCK3B87dE0qjtWcEt6C-_KSIdH0RRiIYer8p6Tgg,1459
|
|
17
|
+
nsqdriver/nswave/_errors.cp38-win_amd64.pyd,sha256=c_HKsXXB4CcnbLtKdvY5nZFaycWteH_1Xaux8CN5GC0,79360
|
|
18
|
+
nsqdriver/nswave/_errors.pyi,sha256=A4LLc1zu6blJgmaAW_Wdx19jvFe1fkIggkTgYaQ8BIM,664
|
|
19
|
+
nsqdriver/nswave/_functions.cp38-win_amd64.pyd,sha256=cQUWtZqwSyJvmAqFVvaCxmFG3bvkyrO7LuWvY3iqGi0,218112
|
|
20
|
+
nsqdriver/nswave/_functions.pyi,sha256=wOzfZITAzupxAONxGELNF_U-XMy1CTdr8iU8UeszTQk,1992
|
|
21
|
+
nsqdriver/nswave/_ir.cp38-win_amd64.pyd,sha256=vAzSv5v8yO-LNQHUIynrv1-IrGZUQ6lZ9MmttUVCEuk,463360
|
|
22
|
+
nsqdriver/nswave/_ir.pyi,sha256=nPh7se2s1D80zMLF_bSrA4WpKI7uk-hrLRPs5JHadxc,7413
|
|
23
|
+
nsqdriver/nswave/_ir_pass.cp38-win_amd64.pyd,sha256=1YV60qpO4HMr8PPPDBy8E2yie5qsA5Rd9onYyeWs5ro,57856
|
|
24
|
+
nsqdriver/nswave/_ir_pass.pyi,sha256=UmQVLgcfX1rw9HuMorRCensJtxB4b7zh7uyIIlTF_A0,289
|
|
25
|
+
nsqdriver/nswave/_optimizations.cp38-win_amd64.pyd,sha256=Yoh8kIgDOQW5vZcmx6GUzMhENRgRXFH8KHDfheWc7ng,68096
|
|
26
|
+
nsqdriver/nswave/_optimizations.pyi,sha256=6WxLlO1aJEMMGB4qL3iSr0l43b6pSH-7qRSHXzCQQa8,508
|
|
27
|
+
nsqdriver/nswave/_rules.cp38-win_amd64.pyd,sha256=GuBPm1VxrGoSBiCSIaIcSQ0BB84UMRE7y0O9xPg_Wk0,202752
|
|
28
|
+
nsqdriver/nswave/_rules.pyi,sha256=bMynUPRkrIfTNXPt0K7Rqy5cp4B-4EIdolznVBJaaAM,1926
|
|
29
|
+
nsqdriver/nswave/_simulator.cp38-win_amd64.pyd,sha256=Avse6Yrh4xnZ4kRFB0naKO8ODR7GT7fEqRdohqtYVl4,146944
|
|
30
|
+
nsqdriver/nswave/_translate.cp38-win_amd64.pyd,sha256=uQkbjb2VVsWa8jQx3l1U5LGbwGtQKJ9QYk-VbR8ZjXU,126976
|
|
31
|
+
nsqdriver/nswave/_translate.pyi,sha256=f0N24eSL7hKj2R04W-EFeEo9A8UYfzHOta7LQrDn-UA,387
|
|
32
|
+
nsqdriver/nswave/kernel.cp38-win_amd64.pyd,sha256=MPsHCtQCX8XQf0KriPUFfz_FTe0-QBCSnEbNSvW6Vq4,326144
|
|
33
|
+
nsqdriver/nswave/kernel.pyi,sha256=GBjjcfGBFiZ7_PCSgOWJcfVqckYg_r3j7PsMpUeaozE,2009
|
|
34
|
+
nsqdriver/wrapper/AWG_ADC.py,sha256=wLtkbJe39hDcnbWZ-8jyGZ78RQtn7iAZ7P7H0n-2IWU,19733
|
|
35
|
+
nsqdriver/wrapper/ND_NSMCI.py,sha256=e0j7BUdfrhfYb1GqBPlO4vSoZPXTKyictXy1nPvoMFE,6533
|
|
36
|
+
nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
+
nsqdriver-0.12.12.dist-info/METADATA,sha256=Nh-T0M5KLBYAR8XU3UjXMxX6PiXUXpCsJwn7c_LZCGs,4385
|
|
38
|
+
nsqdriver-0.12.12.dist-info/WHEEL,sha256=rTcqimtzpX3smAWAhGmiRSWAxTY4PqYPNE-p4kscHDQ,99
|
|
39
|
+
nsqdriver-0.12.12.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
|
|
40
|
+
nsqdriver-0.12.12.dist-info/RECORD,,
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
nsqdriver/NS_CST.py,sha256=zA5YcM65v66EqwBnplDvA6HM0I-y8damDOerE2CKyZE,8137
|
|
2
|
-
nsqdriver/NS_DDS_v3.py,sha256=rX7EPJzoSuRObi0WyP9etgCBMEL1PCgOxcLy0AcK3Yg,15841
|
|
3
|
-
nsqdriver/NS_MCI.py,sha256=1zCpqkHr4tQdgb5iaMTKcjrhPKuWNSFUKR7V_8patG8,21659
|
|
4
|
-
nsqdriver/NS_QSYNC.py,sha256=bPD0cAUehRXpTDwMNZutB5AWhZM7iwKBD5t5jmJiBF4,27900
|
|
5
|
-
nsqdriver/__init__.py,sha256=n1jDrXgSPFkxyLVUjc2s1RFLdC6hT9YJ3tasYbamjMg,383
|
|
6
|
-
nsqdriver/common.py,sha256=5BRActb9TgNdVwWtfuZ_gki47H1WbABzYr5XbxLKlh4,519
|
|
7
|
-
nsqdriver/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
nsqdriver/compiler/assembler.cp38-win_amd64.pyd,sha256=EX4u6q3cjna98_ZZK4q9OGAOLIzg9kabtE68gAnPtvw,383488
|
|
9
|
-
nsqdriver/compiler/ns_wave.cp38-win_amd64.pyd,sha256=7OvVqdsPyB74-JR7bqPmHjt4ba2yKqGbv4FsZfy8tlI,240128
|
|
10
|
-
nsqdriver/compiler/ns_wave.pyi,sha256=axQaxrMaKRPx8k9sDVlRj3SjR03AmXUDzkVW4D_2RJw,3975
|
|
11
|
-
nsqdriver/compiler/py_wave_asm.cp38-win_amd64.pyd,sha256=TTA35cUhCHzNvldvguwq7fP_TlKfGx5IQpVj_4xDTQ4,335360
|
|
12
|
-
nsqdriver/compiler/py_wave_asm.pyi,sha256=PqEZuNt83CCu_FJUczUjStowOz2TBgvfIytGanFPHuQ,685
|
|
13
|
-
nsqdriver/nswave/__init__.py,sha256=rAU1XD58JBF7iAYB5LVD-ZlEmQq9wyJrsRVHF-OOrzI,302
|
|
14
|
-
nsqdriver/nswave/_asm.pyi,sha256=f8IjCLPIocBZXTC8F5GFTlI6ZDa5-hhShJPjL166K4o,2846
|
|
15
|
-
nsqdriver/nswave/_checkers.cp38-win_amd64.pyd,sha256=npxxkw2PDmv2jEeGdsnzlmjuY_18MbzLL-513-XFDEE,177152
|
|
16
|
-
nsqdriver/nswave/_checkers.pyi,sha256=931KCK3B87dE0qjtWcEt6C-_KSIdH0RRiIYer8p6Tgg,1459
|
|
17
|
-
nsqdriver/nswave/_errors.cp38-win_amd64.pyd,sha256=YyZeXiZzqu1Zwk3X0mdjwgiySUJwc7OiQveL7q4DiSM,79872
|
|
18
|
-
nsqdriver/nswave/_errors.pyi,sha256=A4LLc1zu6blJgmaAW_Wdx19jvFe1fkIggkTgYaQ8BIM,664
|
|
19
|
-
nsqdriver/nswave/_functions.cp38-win_amd64.pyd,sha256=u-sgEJsOCh0hfHL3PkwlsXHWHZZPihuXcRE-xPef0EA,104448
|
|
20
|
-
nsqdriver/nswave/_functions.pyi,sha256=wOzfZITAzupxAONxGELNF_U-XMy1CTdr8iU8UeszTQk,1992
|
|
21
|
-
nsqdriver/nswave/_ir.cp38-win_amd64.pyd,sha256=0ts5Mc6KYj--olgsLAXzQTNKCvavbReeVdEY_lDtuhw,320512
|
|
22
|
-
nsqdriver/nswave/_ir.pyi,sha256=nPh7se2s1D80zMLF_bSrA4WpKI7uk-hrLRPs5JHadxc,7413
|
|
23
|
-
nsqdriver/nswave/_ir_pass.cp38-win_amd64.pyd,sha256=V8d0DZ-WOUeJHYToFEdOwBGIsoI4OguJjEAKP77uMgY,48128
|
|
24
|
-
nsqdriver/nswave/_ir_pass.pyi,sha256=UmQVLgcfX1rw9HuMorRCensJtxB4b7zh7uyIIlTF_A0,289
|
|
25
|
-
nsqdriver/nswave/_optimizations.cp38-win_amd64.pyd,sha256=R94wDZlz5_xgoI6Ti3hE1iW4DGFt7seUA4Wh2Akcan8,56832
|
|
26
|
-
nsqdriver/nswave/_optimizations.pyi,sha256=6WxLlO1aJEMMGB4qL3iSr0l43b6pSH-7qRSHXzCQQa8,508
|
|
27
|
-
nsqdriver/nswave/_rules.cp38-win_amd64.pyd,sha256=HkrFJsUb3pR5Q7I2q030AokBAAIPnFp0wVTkiT-9tfI,187904
|
|
28
|
-
nsqdriver/nswave/_rules.pyi,sha256=bMynUPRkrIfTNXPt0K7Rqy5cp4B-4EIdolznVBJaaAM,1926
|
|
29
|
-
nsqdriver/nswave/_translate.cp38-win_amd64.pyd,sha256=hpZH8-q5cnyYmyZxxZXLlwPln5OwoXjJ1TCmkV_9je8,110080
|
|
30
|
-
nsqdriver/nswave/_translate.pyi,sha256=f0N24eSL7hKj2R04W-EFeEo9A8UYfzHOta7LQrDn-UA,387
|
|
31
|
-
nsqdriver/nswave/kernel.cp38-win_amd64.pyd,sha256=_pOzIrgrocJrGDfZwY85CUxPyDUZ7QYhLK1z42gIvP0,263168
|
|
32
|
-
nsqdriver/nswave/kernel.pyi,sha256=GBjjcfGBFiZ7_PCSgOWJcfVqckYg_r3j7PsMpUeaozE,2009
|
|
33
|
-
nsqdriver/wrapper/AWG_ADC.py,sha256=wLtkbJe39hDcnbWZ-8jyGZ78RQtn7iAZ7P7H0n-2IWU,19733
|
|
34
|
-
nsqdriver/wrapper/ND_NSMCI.py,sha256=e0j7BUdfrhfYb1GqBPlO4vSoZPXTKyictXy1nPvoMFE,6533
|
|
35
|
-
nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
-
nsqdriver-0.12.10.dist-info/METADATA,sha256=CbStcfueA-cknxGr_cjPmRm_xtSPFcXjcP1K1R8d-EU,4385
|
|
37
|
-
nsqdriver-0.12.10.dist-info/WHEEL,sha256=rTcqimtzpX3smAWAhGmiRSWAxTY4PqYPNE-p4kscHDQ,99
|
|
38
|
-
nsqdriver-0.12.10.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
|
|
39
|
-
nsqdriver-0.12.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|