nsqdriver 0.12.2__cp311-cp311-win_amd64.whl → 0.12.4__cp311-cp311-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 ADDED
@@ -0,0 +1,404 @@
1
+ import copy
2
+ from enum import Enum
3
+ from collections import namedtuple
4
+ from waveforms import Waveform, wave_eval
5
+ from waveforms.math.signal import getFTMatrix, shift
6
+ import nsqdriver.nswave as nw
7
+
8
+ import numpy as np
9
+
10
+ try:
11
+ import waveforms
12
+
13
+ HAS_WAVEFORMS = True
14
+ except ImportError as e:
15
+ HAS_WAVEFORMS = False
16
+
17
+ try:
18
+ from .common import BaseDriver, Quantity, get_coef
19
+ except ImportError as e:
20
+
21
+ class BaseDriver:
22
+
23
+ def __init__(self, addr, timeout, **kw):
24
+ self.addr = addr
25
+ self.timeout = timeout
26
+
27
+
28
+ class Quantity(object):
29
+
30
+ def __init__(self, name: str, value=None, ch: int = 1, unit: str = ''):
31
+ self.name = name
32
+ self.default = dict(value=value, ch=ch, unit=unit)
33
+
34
+ # def get_coef(*args):
35
+ # return '', '', '', ''
36
+
37
+ DEBUG_PRINT = False
38
+
39
+
40
+ @nw.kernel
41
+ def program_cap(param: nw.Var):
42
+ #
43
+ nw.wait_for_trigger()
44
+ i: nw.Var
45
+ # param: [[100e-9, 1e-6], [200e-9, 1e-6]]
46
+ for i in param:
47
+ nw.wait(i[0])
48
+ nw.capture(i[1], i[2], i[3])
49
+
50
+
51
+ ProbeSegment = namedtuple('ProbeSegment', ['start', 'stop', 'freq'])
52
+
53
+
54
+ CaptureCmd = namedtuple('CaptureCmd', ['start', 'ad_duration', 'delay', 'da_duration', 'freqs'])
55
+
56
+
57
+ class DemodulateMode(str, Enum):
58
+ MORE_QUBIT = 'more_qubit'
59
+ COMPLEX_SEQ = 'complex_seq'
60
+
61
+
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
+ class Driver(BaseDriver):
159
+ CHs = list(range(1, 25))
160
+ segment = ('ns', '111|112|113|114|115')
161
+ res_map = []
162
+
163
+ quants = [
164
+ Quantity('ReInit', value={}, ch=1), # set, 设备重新初始化
165
+ Quantity('Instruction', value=None, ch=1), # set 参数化波形指令队列配置
166
+ # 采集运行参数
167
+ Quantity('Shot', value=1024, ch=1), # set,运行次数
168
+ Quantity('PointNumber', value=16384, unit='point'), # set/get,AD采样点数
169
+ Quantity('TriggerDelay', value=0, ch=1, unit='s'), # set/get,AD采样延时
170
+ Quantity('FrequencyList', value=[], ch=1,
171
+ unit='Hz'), # set/get,解调频率列表,list,单位Hz
172
+ Quantity('PhaseList', value=[], ch=1,
173
+ unit='Hz'), # set/get,解调频率列表,list,单位Hz
174
+ Quantity('Coefficient', value=None, ch=1),
175
+ Quantity('DemodulationParam', value=None, ch=1),
176
+ Quantity('CaptureMode'),
177
+ Quantity('StartCapture'), # set,开启采集(执行前复位)
178
+ Quantity('TraceIQ', ch=1), # get,获取原始时域数据
179
+ # 返回:array(shot, point)
180
+ Quantity('IQ', ch=1), # get,获取解调后数据,默认复数返回
181
+ # 系统参数,宏定义修改,open时下发
182
+ # 复数返回:array(shot,frequency)
183
+ # 实数返回:array(IQ,shot,frequency)
184
+
185
+ # 任意波形发生器
186
+ Quantity('Waveform', value=np.array([]), ch=1), # set/get,下发原始波形数据
187
+ Quantity('Delay', value=0, ch=1), # set/get,播放延时
188
+ Quantity('KeepAmp', value=0
189
+ ), # set, 电平是否维持在波形最后一个值, 0:波形播放完成后归0,1:保持波形最后一个值,2:保持波形第一个值
190
+ Quantity('Biasing', value=0, ch=1), # set, 播放延迟
191
+ Quantity('LinSpace', value=[0, 30e-6, 1000],
192
+ ch=1), # set/get, np.linspace函数,用于生成timeline
193
+ Quantity('Output', value=True, ch=1), # set/get,播放通道开关设置
194
+ Quantity('GenWave', value=None,
195
+ ch=1), # set/get, 设备接收waveform对象,根据waveform对象直接生成波形
196
+ # set/get, 设备接收IQ分离的waveform对象列表,根据waveform对象列表直接生成波形
197
+ Quantity('GenWaveIQ', value=None, ch=1),
198
+ Quantity('MultiGenWave', value={1: np.ndarray([])}), # 多通道波形同时下发
199
+ Quantity('EnableWaveCache', value=False), # 是否开启waveform缓存
200
+ Quantity('PushWaveCache'), # 使waveform缓存中的波形数据生效
201
+ # 混频相关配置
202
+ Quantity('EnableDAMixer', value=False, ch=1), # DA通道混频模式开关
203
+ Quantity('MixingWave', ), # 修改完混频相关参数后,运行混频器
204
+ Quantity('DAIQRate', value=1e9, ch=1), # 基带信号采样率
205
+ Quantity('DALOFreq', value=100e6, ch=1), # 中频信号频率
206
+ Quantity('DALOPhase', value=0, ch=1), # 基带信号相位,弧度制
207
+ Quantity('DASideband', value='lower', ch=1), # 混频后取的边带
208
+ Quantity('DAWindow', value=None, ch=1),
209
+ # 基带信号升采样率时所使用的窗函数,默认不使用任何窗,
210
+ # 可选:None、boxcar、triang、blackman、hamming、hann、bartlett、flattop、parzen、bohman、blackmanharris、nuttall、
211
+ # barthann、cosine、exponential、tukey、taylor
212
+
213
+ # 内触发
214
+ Quantity('GenerateTrig', value=1e7,
215
+ unit='ns'), # set/get,触发周期单位ns,触发数量=shot
216
+ Quantity('UpdateFirmware', value='', ch=1), # qsync固件更新
217
+ Quantity('PipInstall') # pip install in instance
218
+ ]
219
+
220
+ def __init__(self, addr: str = '', timeout: float = 10.0, **kw):
221
+ super().__init__(addr, timeout=timeout, **kw)
222
+ self.handle = None
223
+ self.model = 'NS_MCI' # 默认为设备名字
224
+ self.srate = 8e9
225
+ self.addr = addr
226
+ self.timeout = timeout
227
+ self.chs = set() # 记录配置过的ch通道
228
+ self.IQ_cache = {}
229
+ self.coef_cache = {}
230
+ self.res_maps = {}
231
+ self.probe_da_wave = {}
232
+ self.capture_cmds: "dict[int, CaptureCmd]" = {}
233
+ self.demodulate_mode = DemodulateMode.MORE_QUBIT
234
+
235
+ def open(self, **kw):
236
+ """
237
+ 输入IP打开设备,配置默认超时时间为5秒
238
+ 打开设备时配置RFSoC采样时钟,采样时钟以参数定义
239
+ """
240
+ from nsqdriver import MCIDriver
241
+
242
+ DArate = 8e9
243
+ ADrate = 4e9
244
+ sysparam = {
245
+ "MixMode": 1,
246
+ "RefClock": "out",
247
+ "DArate": DArate,
248
+ "ADrate": ADrate,
249
+ "CaptureMode": 0,
250
+ "INMixMode": 2, # 4~6 GHz 取 1, 6 ~ 8 GHz 取 2
251
+ }
252
+
253
+ device = MCIDriver(self.addr, self.timeout)
254
+ device.open(system_parameter=sysparam)
255
+ self.handle = device
256
+
257
+ def granularity4ns(self, delay):
258
+ # 4ns取整
259
+ out_delay = round(
260
+ delay // 4e-9 * 4e-9, 10
261
+ )
262
+ return out_delay
263
+
264
+ @staticmethod
265
+ def get_sequence_in_time(coef_info: dict) -> list[CaptureCmd]:
266
+ w_list = coef_info.get('wList', [])
267
+ time_segments: "list[ProbeSegment]" = []
268
+
269
+ for wave in w_list:
270
+ t0 = wave['t0']
271
+ weight_expr = wave['weight']
272
+
273
+ # 假设 weight 表达式格式为 "square(X) >> Y",我们提取实际时间宽度
274
+ # duration = float(weight_expr.split('>>')[1].strip())
275
+ _start, _stop, _ = wave_eval(weight_expr).bounds
276
+
277
+ # 将区间加入列表
278
+ seg = ProbeSegment(t0+_start, t0+_stop, wave['Delta'])
279
+ time_segments.append(seg)
280
+
281
+ # 按起始时间排序
282
+ time_segments.sort()
283
+
284
+ # 结果存储
285
+ non_overlapping_segments: list[CaptureCmd] = []
286
+ current_start, current_end = time_segments[0].start, time_segments[0].stop
287
+ current_cmd = CaptureCmd(0, 0, 0, 0, [time_segments[0].freq])
288
+ pointer = 0
289
+
290
+ for seg in time_segments[1:]:
291
+ if seg.start > current_end:
292
+ # 如果不重叠,保存当前段并移动到下一段
293
+ current_cmd = current_cmd._replace(start=current_start-pointer)
294
+ current_cmd = current_cmd._replace(ad_duration=current_end - current_start)
295
+ current_cmd = current_cmd._replace(delay=230e-9)
296
+ current_cmd = current_cmd._replace(da_duration=current_end - current_start)
297
+ non_overlapping_segments.append(current_cmd)
298
+
299
+ current_cmd = CaptureCmd(0, 0, 0, 0, [seg.freq])
300
+ pointer += current_end
301
+ current_start, current_end = seg.start, seg.stop
302
+ else:
303
+ # 如果有重叠,扩展当前段
304
+ current_end = max(current_end, seg.stop)
305
+ current_cmd.freqs.append(seg.freq)
306
+ else:
307
+ # 添加最后一个段
308
+ current_cmd = current_cmd._replace(start=current_start - pointer)
309
+ current_cmd = current_cmd._replace(ad_duration=current_end - current_start)
310
+ current_cmd = current_cmd._replace(delay=230e-9)
311
+ current_cmd = current_cmd._replace(da_duration=current_end - current_start)
312
+ non_overlapping_segments.append(current_cmd)
313
+ return non_overlapping_segments
314
+
315
+ def generate_para(self, coef_info, ch):
316
+ res_map = []
317
+ freq_map = []
318
+ seq_param = []
319
+
320
+ self.capture_cmds[ch] = seq = self.get_sequence_in_time(coef_info)
321
+
322
+ for segment in seq:
323
+ freq_map.extend(segment.freqs)
324
+ freq_map = list(set(freq_map))
325
+
326
+ for cap_num, segment in enumerate(seq):
327
+ seq_param.append([
328
+ segment.start, segment.ad_duration, segment.delay, segment.da_duration
329
+ ])
330
+ for freq in segment.freqs:
331
+ res_map.append([freq_map.index(freq), cap_num])
332
+
333
+ self.res_maps[ch] = res_map
334
+ self.handle.set("Program", program_cap(seq_param), ch)
335
+ self.handle.set("FreqList", freq_map, ch)
336
+ self.handle.set("TimeWidth", 2e-6, ch)
337
+
338
+ def get_coef_res(self, iq_res, ch):
339
+ res = []
340
+ for (freq_num, cap_num) in self.res_maps[ch]:
341
+ res.append(iq_res[freq_num][cap_num::len(self.capture_cmds[ch])])
342
+ return res
343
+
344
+ def close(self, **kw):
345
+ """
346
+ 关闭设备
347
+ """
348
+ if getattr(self, 'handle', None) is not None:
349
+ self.handle.close()
350
+ self.handle = None
351
+
352
+ def set(self, *args, **kwargs):
353
+ return self.handle.set(*args, **kwargs)
354
+
355
+ def get(self, *args, **kwargs):
356
+
357
+ return self.handle.get(*args, **kwargs)
358
+
359
+ def write(self, name: str, value, **kw):
360
+ channel = kw.get('ch', 1)
361
+ print(name, value, "write" * 4)
362
+ 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
+ coef_info = value
369
+ self.chs.add(channel)
370
+ self.generate_para(coef_info, channel)
371
+ 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
+ elif name in {
375
+ 'CaptureMode', 'SystemSync', 'ResetTrig', 'TrigPeriod',
376
+ 'TrigFrom'
377
+ }:
378
+ pass
379
+ else:
380
+ if name in {"Shot"}:
381
+ self.shots = value
382
+ return self.handle.set(name, value, channel)
383
+
384
+ def read(self, name: str, **kw):
385
+ channel = kw.get('ch', 1)
386
+ print(name, kw, "READ " * 6)
387
+ if name in {"IQ"}:
388
+ # if channel not in self.chs:
389
+ # result = self.IQ_cache[channel]
390
+ # print("result.shape, cache", result)
391
+ # else:
392
+ iq_res = self.handle.get("IQ", channel, round(self.shots * len(self.capture_cmds[channel]))) # / self.points
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:
398
+ self.chs.remove(channel)
399
+ # self.IQ_cache.update({channel: result})
400
+ if len(self.chs) == 0:
401
+ self.write("TerminateUpload", 1) # 实验的开始必须加此句话
402
+ else:
403
+ result = self.handle.get(name, channel)
404
+ return result
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, 2)
7
+ version_pack = (0, 12, 4)
8
8
 
9
9
  __version__ = '.'.join(str(_) for _ in version_pack)
10
10
  __all__ = ['MCIDriver', 'QSYNCDriver', 'CSTDriver', 'InsChannel']
Binary file
Binary file
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nsqdriver
3
- Version: 0.12.2
3
+ Version: 0.12.4
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
@@ -1,38 +1,39 @@
1
1
  nsqdriver/NS_CST.py,sha256=zA5YcM65v66EqwBnplDvA6HM0I-y8damDOerE2CKyZE,8137
2
+ nsqdriver/NS_DDS_v3.py,sha256=rX7EPJzoSuRObi0WyP9etgCBMEL1PCgOxcLy0AcK3Yg,15841
2
3
  nsqdriver/NS_MCI.py,sha256=1zCpqkHr4tQdgb5iaMTKcjrhPKuWNSFUKR7V_8patG8,21659
3
4
  nsqdriver/NS_QSYNC.py,sha256=bPD0cAUehRXpTDwMNZutB5AWhZM7iwKBD5t5jmJiBF4,27900
4
- nsqdriver/__init__.py,sha256=rEtpG6c_WWu7UCrx80wJTGOfdEHscmiIWIUPqBEUCNk,382
5
+ nsqdriver/__init__.py,sha256=9j6F7C04crc-9YIVwHoVUodQlPlEMOKQSE8JaZLwDNc,382
5
6
  nsqdriver/common.py,sha256=5BRActb9TgNdVwWtfuZ_gki47H1WbABzYr5XbxLKlh4,519
6
7
  nsqdriver/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- nsqdriver/compiler/assembler.cp311-win_amd64.pyd,sha256=L2OuPGHPMkko4Ubz4HfHd7jzbx77KdHtKutVOIfNtoM,385024
8
- nsqdriver/compiler/ns_wave.cp311-win_amd64.pyd,sha256=PeokyBa7Q_Pj8yjbvXEQWVN-syo4wdG5NVSZNrchwSo,237056
8
+ nsqdriver/compiler/assembler.cp311-win_amd64.pyd,sha256=pUMTd-Txza5ZMJ28QrS3CJWlOsrbcwbP474Nh6w0yzc,385024
9
+ nsqdriver/compiler/ns_wave.cp311-win_amd64.pyd,sha256=IfZirUbpMTeec_fQ5RYoge1RNQ91X2QjhKY0B2YkgfA,237056
9
10
  nsqdriver/compiler/ns_wave.pyi,sha256=axQaxrMaKRPx8k9sDVlRj3SjR03AmXUDzkVW4D_2RJw,3975
10
- nsqdriver/compiler/py_wave_asm.cp311-win_amd64.pyd,sha256=tHAUuCRFfvGJdB1mjG6AXFCAFZVc_LlSVKrJXiY6rbA,329728
11
+ nsqdriver/compiler/py_wave_asm.cp311-win_amd64.pyd,sha256=nrvNuq8HedqfkXSercL_7EmTESRZaYB531QSPac_pJM,329728
11
12
  nsqdriver/compiler/py_wave_asm.pyi,sha256=PqEZuNt83CCu_FJUczUjStowOz2TBgvfIytGanFPHuQ,685
12
13
  nsqdriver/nswave/__init__.py,sha256=rAU1XD58JBF7iAYB5LVD-ZlEmQq9wyJrsRVHF-OOrzI,302
13
14
  nsqdriver/nswave/_asm.pyi,sha256=f8IjCLPIocBZXTC8F5GFTlI6ZDa5-hhShJPjL166K4o,2846
14
- nsqdriver/nswave/_checkers.cp311-win_amd64.pyd,sha256=uj2TrYOc5kiTtnbFPZ9GCQFUAtQNQQQxKZipkJKJRRU,176640
15
+ nsqdriver/nswave/_checkers.cp311-win_amd64.pyd,sha256=bZybcsRHm2GXPbs4t18TbdtDLCIMMQw7ftCrC_o2Y80,176640
15
16
  nsqdriver/nswave/_checkers.pyi,sha256=931KCK3B87dE0qjtWcEt6C-_KSIdH0RRiIYer8p6Tgg,1459
16
- nsqdriver/nswave/_errors.cp311-win_amd64.pyd,sha256=2i8YBhBRI_yVJ0VaRJHdlthP6sYi5VU4s7KnyJVbNjw,78848
17
+ nsqdriver/nswave/_errors.cp311-win_amd64.pyd,sha256=Ul-ixzequZ13uQPIpHGR6MU0uwXZSE1VCZqLH02up8A,78848
17
18
  nsqdriver/nswave/_errors.pyi,sha256=A4LLc1zu6blJgmaAW_Wdx19jvFe1fkIggkTgYaQ8BIM,664
18
- nsqdriver/nswave/_functions.cp311-win_amd64.pyd,sha256=x4eXIdQVqhmvCxmycMclNboEQ3ZpyQ9FoxiH5uQ7fCQ,102400
19
+ nsqdriver/nswave/_functions.cp311-win_amd64.pyd,sha256=29wmFYHtE0BJovUacJhQilgssTOJKI0B3EyX42QTDN8,102400
19
20
  nsqdriver/nswave/_functions.pyi,sha256=wOzfZITAzupxAONxGELNF_U-XMy1CTdr8iU8UeszTQk,1992
20
- nsqdriver/nswave/_ir.cp311-win_amd64.pyd,sha256=7ygafQ4V4MoHC5rbRCJZFS93u41cLrWCKmph9t4L2Fs,318464
21
+ nsqdriver/nswave/_ir.cp311-win_amd64.pyd,sha256=86eXXXdZkHiCT8WUkVziRA9_hS2gwHRMVbeqzF_nEf0,318464
21
22
  nsqdriver/nswave/_ir.pyi,sha256=nPh7se2s1D80zMLF_bSrA4WpKI7uk-hrLRPs5JHadxc,7413
22
- nsqdriver/nswave/_ir_pass.cp311-win_amd64.pyd,sha256=soKBCEGw-csqQV1oRuFB-wewhY8qgJUzRZphxqWw94M,47616
23
+ nsqdriver/nswave/_ir_pass.cp311-win_amd64.pyd,sha256=1Z-2hedrcno-vage49fPmJEYLULonE0ClzPrwrCC4SI,47616
23
24
  nsqdriver/nswave/_ir_pass.pyi,sha256=UmQVLgcfX1rw9HuMorRCensJtxB4b7zh7uyIIlTF_A0,289
24
- nsqdriver/nswave/_optimizations.cp311-win_amd64.pyd,sha256=9g8nE4cFxGbTXcNwNFIL_Lw9-K6Gt8HyWYkSPJlJJqc,56832
25
+ nsqdriver/nswave/_optimizations.cp311-win_amd64.pyd,sha256=jy6a3vvNnw7G1TlW-dBuOeNdCq5Ruc3n8Y9jNpx1bbs,56832
25
26
  nsqdriver/nswave/_optimizations.pyi,sha256=6WxLlO1aJEMMGB4qL3iSr0l43b6pSH-7qRSHXzCQQa8,508
26
- nsqdriver/nswave/_rules.cp311-win_amd64.pyd,sha256=NGec6z0nrwZcn--LJ9UfAGqVjkoyImWW3rPXBtXm9ws,182784
27
+ nsqdriver/nswave/_rules.cp311-win_amd64.pyd,sha256=eCB4LAOid20PsEfAdMVgoleFyQbYboX77AOKFunAC40,186880
27
28
  nsqdriver/nswave/_rules.pyi,sha256=bMynUPRkrIfTNXPt0K7Rqy5cp4B-4EIdolznVBJaaAM,1926
28
- nsqdriver/nswave/_translate.cp311-win_amd64.pyd,sha256=-aOUT8CZqp7o6DZuiA9KICN9JbHzpYT6yIYaieZEReo,107008
29
+ nsqdriver/nswave/_translate.cp311-win_amd64.pyd,sha256=FBFyfTsG6QMbks13M2vgis-t2fOWpp3rwP9zT8Bn2TU,107008
29
30
  nsqdriver/nswave/_translate.pyi,sha256=f0N24eSL7hKj2R04W-EFeEo9A8UYfzHOta7LQrDn-UA,387
30
- nsqdriver/nswave/kernel.cp311-win_amd64.pyd,sha256=_GVdXo9H3zC4rzFERyRcF8rBcax75EeLe_PQ1eLmr88,260096
31
+ nsqdriver/nswave/kernel.cp311-win_amd64.pyd,sha256=FNTMrNLj8Nkox6bmBZObESbObFUiiVxSrGqwukIbmHc,260096
31
32
  nsqdriver/nswave/kernel.pyi,sha256=GBjjcfGBFiZ7_PCSgOWJcfVqckYg_r3j7PsMpUeaozE,2009
32
33
  nsqdriver/wrapper/AWG_ADC.py,sha256=wLtkbJe39hDcnbWZ-8jyGZ78RQtn7iAZ7P7H0n-2IWU,19733
33
34
  nsqdriver/wrapper/ND_NSMCI.py,sha256=e0j7BUdfrhfYb1GqBPlO4vSoZPXTKyictXy1nPvoMFE,6533
34
35
  nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- nsqdriver-0.12.2.dist-info/METADATA,sha256=JCCiMEWFxwd97hbWeAW5qN_FAfTZYH3oGeWc8ssR4dI,4384
36
- nsqdriver-0.12.2.dist-info/WHEEL,sha256=tE2EWZPEv-G0fjAlUUz7IGM64246YKD9fpv4HcsDMkk,101
37
- nsqdriver-0.12.2.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
38
- nsqdriver-0.12.2.dist-info/RECORD,,
36
+ nsqdriver-0.12.4.dist-info/METADATA,sha256=S0zCvt882-nZtgRTopwc1562hSufUcm7l8WvbfsybnM,4384
37
+ nsqdriver-0.12.4.dist-info/WHEEL,sha256=WutsMqxRjo8PALJe8NWxuOYrO2lUIIHDIxhZ8tjc8BY,101
38
+ nsqdriver-0.12.4.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
39
+ nsqdriver-0.12.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.3.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp311-cp311-win_amd64
5
5