nsqdriver 0.12.16__cp313-cp313-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.

Files changed (41) hide show
  1. nsqdriver/NS_CST.py +260 -0
  2. nsqdriver/NS_DDS_v3.py +591 -0
  3. nsqdriver/NS_DDS_v4.py +778 -0
  4. nsqdriver/NS_MCI.py +594 -0
  5. nsqdriver/NS_QSYNC.py +780 -0
  6. nsqdriver/__init__.py +10 -0
  7. nsqdriver/common.py +20 -0
  8. nsqdriver/compiler/__init__.py +0 -0
  9. nsqdriver/compiler/assembler.cp313-win_amd64.pyd +0 -0
  10. nsqdriver/compiler/ns_wave.cp313-win_amd64.pyd +0 -0
  11. nsqdriver/compiler/ns_wave.pyi +151 -0
  12. nsqdriver/compiler/py_wave_asm.cp313-win_amd64.pyd +0 -0
  13. nsqdriver/compiler/py_wave_asm.pyi +29 -0
  14. nsqdriver/nswave/__init__.py +9 -0
  15. nsqdriver/nswave/_asm.pyi +97 -0
  16. nsqdriver/nswave/_checkers.cp313-win_amd64.pyd +0 -0
  17. nsqdriver/nswave/_checkers.pyi +47 -0
  18. nsqdriver/nswave/_errors.cp313-win_amd64.pyd +0 -0
  19. nsqdriver/nswave/_errors.pyi +24 -0
  20. nsqdriver/nswave/_functions.cp313-win_amd64.pyd +0 -0
  21. nsqdriver/nswave/_functions.pyi +34 -0
  22. nsqdriver/nswave/_ir.cp313-win_amd64.pyd +0 -0
  23. nsqdriver/nswave/_ir.pyi +283 -0
  24. nsqdriver/nswave/_ir_pass.cp313-win_amd64.pyd +0 -0
  25. nsqdriver/nswave/_ir_pass.pyi +7 -0
  26. nsqdriver/nswave/_optimizations.cp313-win_amd64.pyd +0 -0
  27. nsqdriver/nswave/_optimizations.pyi +16 -0
  28. nsqdriver/nswave/_rules.cp313-win_amd64.pyd +0 -0
  29. nsqdriver/nswave/_rules.pyi +56 -0
  30. nsqdriver/nswave/_simulator.cp313-win_amd64.pyd +0 -0
  31. nsqdriver/nswave/_translate.cp313-win_amd64.pyd +0 -0
  32. nsqdriver/nswave/_translate.pyi +12 -0
  33. nsqdriver/nswave/kernel.cp313-win_amd64.pyd +0 -0
  34. nsqdriver/nswave/kernel.pyi +57 -0
  35. nsqdriver/wrapper/AWG_ADC.py +534 -0
  36. nsqdriver/wrapper/ND_NSMCI.py +245 -0
  37. nsqdriver/wrapper/__init__.py +0 -0
  38. nsqdriver-0.12.16.dist-info/METADATA +117 -0
  39. nsqdriver-0.12.16.dist-info/RECORD +41 -0
  40. nsqdriver-0.12.16.dist-info/WHEEL +5 -0
  41. nsqdriver-0.12.16.dist-info/top_level.txt +1 -0
@@ -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,117 @@
1
+ Metadata-Version: 2.4
2
+ Name: nsqdriver
3
+ Version: 0.12.16
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
+ Dynamic: classifier
23
+ Dynamic: description
24
+ Dynamic: description-content-type
25
+ Dynamic: home-page
26
+ Dynamic: provides-extra
27
+ Dynamic: requires-dist
28
+ Dynamic: requires-python
29
+ Dynamic: summary
30
+
31
+ ```
32
+ _ _ ____ ___ ____ _
33
+ | \ | | / ___| / _ \ | _ \ _ __ (_) __ __ ___ _ __
34
+ | \| | \___ \ | | | | | | | | | '__| | | \ \ / / / _ \ | '__|
35
+ | |\ | ___) | | |_| | | |_| | | | | | \ V / | __/ | |
36
+ |_| \_| |____/ \__\_\ |____/ |_| |_| \_/ \___| |_|
37
+ ```
38
+ ***
39
+
40
+ ### 简介
41
+ NSQDriver为一套测控系列设备的Python通用驱动接口。可使用Python作为编程语言,基于此驱动接口可以实现对测控设备的控制,进而完成各种超导量子芯片的表征实验和高保真门操作。
42
+
43
+ ```
44
+ +------------------------+
45
+ | Python |
46
+ | +------------------+
47
+ | | NSQDriver |
48
+ +------------------------+
49
+ : : :
50
+ +---------- : -----+
51
+ : : :
52
+ V V V
53
+ +-----------+ +-----------+ +-----------+
54
+ | Device A | | Device B | | QSYNC |
55
+ +-----------+ +-----------+ +-----------+
56
+ ```
57
+
58
+ NSQDriver接口可用于统一控制Q100/PQ系列测控仪器,可详细控制每台仪器每个OUT、IN通道的播放与采集行为,以及查看设备的运行状态等。在一个多台测控设备组成的多比特测控系统中,可以有效的在软件层面实现对系统中每台设备的详细控制。
59
+
60
+ ***
61
+ ### 快速开始
62
+ - 驱动接口的通用流程如下
63
+ ```python
64
+ from nsqdriver import MCIDriver, QSYNCDriver
65
+
66
+ # 实例化设备驱动接口
67
+ driver = MCIDriver('127.0.0.1')
68
+ qsync = QSYNCDriver('127.0.0.1')
69
+
70
+ # 连接设备
71
+ qsync.open()
72
+ driver.open()
73
+
74
+ # 初始化系统
75
+ qsync.sync_system()
76
+
77
+
78
+ # 相关参数,参数细节相关参考 8.可用参数列表
79
+ driver.set('Shot', 1024)
80
+ ```
81
+
82
+ - NSWave语言
83
+ - NSWave是一种对于Sequence序列发生技术的配套编程语言,属于python语法的子集,支持与python程序进行混编
84
+ - Sequence序列发生模式将测控所需的各种门的编辑由主控计算机直接生成波形转化成了设备实时计算
85
+ - 提供了一套直观的时序编辑接口
86
+ ```python
87
+ from nsqdriver import nswave as nw
88
+ from nsqdriver import MCIDriver
89
+ import numpy as np
90
+
91
+ @nw.kernel
92
+ def program(envelope: np.ndarray):
93
+ srate: nw.Var = 8e9
94
+ time_width: nw.Var = 6e-6
95
+ freq: nw.Var = 4.1e9
96
+ time_line: np.ndarray = np.linspace(0, 6e-6, int(time_width * srate + 1))
97
+ wave: np.ndarray = np.cos(2 * np.pi * time_line * freq)
98
+ frame_0: nw.Frame = nw.ins_frame(0e9, 0*np.pi)
99
+ frame_1: nw.Frame = nw.ins_frame(4.3e9, 0*np.pi)
100
+ envelope_0: nw.Envelope = nw.ins_envelope(wave)
101
+ envelope_1: "nw.Envelope" = nw.evlp_gaussian(2e-6, srate)
102
+ envelope_2: nw.Envelope = nw.ins_envelope(envelope)
103
+
104
+ nw.wait_for_trigger()
105
+ nw.reset_frame([frame_0, frame_1])
106
+ nw.wait(3.2e-6)
107
+ nw.play_wave(envelope_1, frame_1)
108
+ nw.play_wave(envelope_0, frame_0)
109
+ nw.inc_phase(frame_1, np.pi)
110
+ nw.play_wave(envelope_2, frame_1)
111
+
112
+ return nw.Kernel()
113
+
114
+ driver: MCIDriver
115
+ envelope = np.ones((10240, ))
116
+ driver.set("Program", program(envelope), 'S5-O1')
117
+ ```
@@ -0,0 +1,41 @@
1
+ nsqdriver/NS_CST.py,sha256=zA5YcM65v66EqwBnplDvA6HM0I-y8damDOerE2CKyZE,8137
2
+ nsqdriver/NS_DDS_v3.py,sha256=FZEe6ivLhlmZrNhNyDiDi7vx_CkFBULUtx_V_m-SsWY,24371
3
+ nsqdriver/NS_DDS_v4.py,sha256=y6zIjrNuT-s-qJZCBbeVJdh10r27nPAU3f8sYAKWsms,35219
4
+ nsqdriver/NS_MCI.py,sha256=JgdJ-wAarEa42VWmFmwuipRsArFgSwSX6ctR8kI74Fk,22632
5
+ nsqdriver/NS_QSYNC.py,sha256=oNZ1B0HXwEhy6aCz0-YtLdg71lA-kCrKUUkJsZJ0jnE,27999
6
+ nsqdriver/__init__.py,sha256=NNbcbT2e5AN7-VcnKaIW2FrJ1GuvfBV6KK4zm3vkfMk,387
7
+ nsqdriver/common.py,sha256=5BRActb9TgNdVwWtfuZ_gki47H1WbABzYr5XbxLKlh4,519
8
+ nsqdriver/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ nsqdriver/compiler/assembler.cp313-win_amd64.pyd,sha256=-h43F_n88rzsLcFgSNQvcnyJZz8jj2OE9nVMeEkCD-Y,374784
10
+ nsqdriver/compiler/ns_wave.cp313-win_amd64.pyd,sha256=M-CYgKln_SO2hv95TSeNGx3dk3xdA-oSzMDD3mDx7bo,211968
11
+ nsqdriver/compiler/ns_wave.pyi,sha256=axQaxrMaKRPx8k9sDVlRj3SjR03AmXUDzkVW4D_2RJw,3975
12
+ nsqdriver/compiler/py_wave_asm.cp313-win_amd64.pyd,sha256=MazSlGRw9NGb-RLG1X_jyj92so-Pnt7llqOuN0gB548,285184
13
+ nsqdriver/compiler/py_wave_asm.pyi,sha256=PqEZuNt83CCu_FJUczUjStowOz2TBgvfIytGanFPHuQ,685
14
+ nsqdriver/nswave/__init__.py,sha256=rAU1XD58JBF7iAYB5LVD-ZlEmQq9wyJrsRVHF-OOrzI,302
15
+ nsqdriver/nswave/_asm.pyi,sha256=f8IjCLPIocBZXTC8F5GFTlI6ZDa5-hhShJPjL166K4o,2846
16
+ nsqdriver/nswave/_checkers.cp313-win_amd64.pyd,sha256=KRuvndT2KWdxvb9YjeaPBDB1riY0XSCHQe8VKappuyk,191488
17
+ nsqdriver/nswave/_checkers.pyi,sha256=931KCK3B87dE0qjtWcEt6C-_KSIdH0RRiIYer8p6Tgg,1459
18
+ nsqdriver/nswave/_errors.cp313-win_amd64.pyd,sha256=n00JgySXbJ6ouL-mnZyasD4QYLx2_XlFsNBwwM0O3wg,72192
19
+ nsqdriver/nswave/_errors.pyi,sha256=A4LLc1zu6blJgmaAW_Wdx19jvFe1fkIggkTgYaQ8BIM,664
20
+ nsqdriver/nswave/_functions.cp313-win_amd64.pyd,sha256=WU_U59oCNQ8xKmOkq4YrOzkwtY9q88GFrwUq_jM8sCI,201728
21
+ nsqdriver/nswave/_functions.pyi,sha256=wOzfZITAzupxAONxGELNF_U-XMy1CTdr8iU8UeszTQk,1992
22
+ nsqdriver/nswave/_ir.cp313-win_amd64.pyd,sha256=pdPV4tUn7ht7b8wvE9OFZDHfUukVFg2DZ8CGjCSmg1o,485376
23
+ nsqdriver/nswave/_ir.pyi,sha256=nPh7se2s1D80zMLF_bSrA4WpKI7uk-hrLRPs5JHadxc,7413
24
+ nsqdriver/nswave/_ir_pass.cp313-win_amd64.pyd,sha256=bFeCaMRuajlubEUia7hVnrDATvr1I_3pzRBmaFXracs,53248
25
+ nsqdriver/nswave/_ir_pass.pyi,sha256=UmQVLgcfX1rw9HuMorRCensJtxB4b7zh7uyIIlTF_A0,289
26
+ nsqdriver/nswave/_optimizations.cp313-win_amd64.pyd,sha256=pWhzUer_C59jOvI_28aZJeRcx207m4ZMGc-NO-DHCBo,65024
27
+ nsqdriver/nswave/_optimizations.pyi,sha256=6WxLlO1aJEMMGB4qL3iSr0l43b6pSH-7qRSHXzCQQa8,508
28
+ nsqdriver/nswave/_rules.cp313-win_amd64.pyd,sha256=OWiXc4GAN7aW9-dVhDB6Q6Jmuo1Hj5Wd2cfJ3yLnj68,210944
29
+ nsqdriver/nswave/_rules.pyi,sha256=bMynUPRkrIfTNXPt0K7Rqy5cp4B-4EIdolznVBJaaAM,1926
30
+ nsqdriver/nswave/_simulator.cp313-win_amd64.pyd,sha256=mp9Cc5R4vqDbX8Ssxze689Ptrp-WN0vo3R7o_4H9naA,136704
31
+ nsqdriver/nswave/_translate.cp313-win_amd64.pyd,sha256=qqogIb4atQo86nlbXLI4J0RQ3BkNxQCZoDLL_W8--C4,115200
32
+ nsqdriver/nswave/_translate.pyi,sha256=f0N24eSL7hKj2R04W-EFeEo9A8UYfzHOta7LQrDn-UA,387
33
+ nsqdriver/nswave/kernel.cp313-win_amd64.pyd,sha256=E2RZ1OIrEO341j5OakYC7NXtfl24M1AFemcikccqOYo,279552
34
+ nsqdriver/nswave/kernel.pyi,sha256=GBjjcfGBFiZ7_PCSgOWJcfVqckYg_r3j7PsMpUeaozE,2009
35
+ nsqdriver/wrapper/AWG_ADC.py,sha256=wLtkbJe39hDcnbWZ-8jyGZ78RQtn7iAZ7P7H0n-2IWU,19733
36
+ nsqdriver/wrapper/ND_NSMCI.py,sha256=e0j7BUdfrhfYb1GqBPlO4vSoZPXTKyictXy1nPvoMFE,6533
37
+ nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ nsqdriver-0.12.16.dist-info/METADATA,sha256=wPsc-RDAyWq4IrNw5Cw2lksFFWGaAZvehV71Jo6ClQM,4576
39
+ nsqdriver-0.12.16.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
40
+ nsqdriver-0.12.16.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
41
+ nsqdriver-0.12.16.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp313-cp313-win_amd64
5
+
@@ -0,0 +1 @@
1
+ nsqdriver