nsqdriver 0.4.2__cp310-cp310-macosx_11_0_x86_64.whl → 0.5.1__cp310-cp310-macosx_11_0_x86_64.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_MCI.py +72 -25
- nsqdriver/NS_QSYNC.py +8 -6
- nsqdriver/__init__.py +1 -1
- nsqdriver/compiler/assembler.cpython-310-darwin.so +0 -0
- nsqdriver/compiler/ns_wave.cpython-310-darwin.so +0 -0
- nsqdriver/compiler/py_wave_asm.cpython-310-darwin.so +0 -0
- {nsqdriver-0.4.2.dist-info → nsqdriver-0.5.1.dist-info}/METADATA +2 -2
- nsqdriver-0.5.1.dist-info/RECORD +18 -0
- {nsqdriver-0.4.2.dist-info → nsqdriver-0.5.1.dist-info}/WHEEL +1 -1
- nsqdriver-0.4.2.dist-info/RECORD +0 -17
- {nsqdriver-0.4.2.dist-info → nsqdriver-0.5.1.dist-info}/top_level.txt +0 -0
nsqdriver/NS_MCI.py
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import enum
|
|
2
|
+
import traceback
|
|
1
3
|
import pickle
|
|
2
4
|
import socket
|
|
3
5
|
import atexit
|
|
4
6
|
import struct
|
|
7
|
+
import warnings
|
|
5
8
|
import xmlrpc.client
|
|
6
9
|
from xmlrpc.client import Transport
|
|
7
10
|
from multiprocessing import shared_memory
|
|
@@ -57,11 +60,11 @@ def solve_rpc_exception(func):
|
|
|
57
60
|
try:
|
|
58
61
|
return func(*args, **kwargs)
|
|
59
62
|
except xmlrpc.client.Fault as e:
|
|
63
|
+
pack = RPCFaultPack.from_fault(e)
|
|
60
64
|
print(f'************{args[0].__class__}: {args[0].addr}************')
|
|
61
|
-
print(f'
|
|
62
|
-
print(
|
|
63
|
-
print(f'
|
|
64
|
-
print('*****************************')
|
|
65
|
+
print(f'*-*-*-*-*-*-*-远程函数报错: {pack.type}::{pack.name} -*-*-*-*-*-*-*-*')
|
|
66
|
+
print(pack.message)
|
|
67
|
+
print(f'*-*-*-*-*-*-*-远程函数报错: {pack.type}::{pack.name} -*-*-*-*-*-*-*-*')
|
|
65
68
|
except TimeoutError as e:
|
|
66
69
|
print(f'************{args[0].__class__}: {args[0].addr}************')
|
|
67
70
|
print(f'Driver报错: 无法连接到 {args[0].addr}\n请检查网络、设备开机状态、设备是否正在程序更新等')
|
|
@@ -71,19 +74,19 @@ def solve_rpc_exception(func):
|
|
|
71
74
|
except socket.timeout as e:
|
|
72
75
|
print(f'************{args[0].__class__}: {args[0].addr}************')
|
|
73
76
|
print(f'Driver报错: 获取数据超时 {e}')
|
|
74
|
-
print(args[0].handle.get_all_status())
|
|
75
77
|
print('*****************************')
|
|
76
|
-
|
|
77
78
|
return wrapper
|
|
78
79
|
|
|
79
80
|
|
|
80
81
|
class Driver(BaseDriver):
|
|
81
82
|
CHs = list(range(1, 25))
|
|
83
|
+
segment = ('ns', '111|112|113|114|115')
|
|
82
84
|
|
|
83
85
|
quants = [
|
|
84
|
-
Quantity('ReInit', value={}, ch=1), # set
|
|
86
|
+
Quantity('ReInit', value={}, ch=1), # set, 设备重新初始化
|
|
87
|
+
Quantity('Instruction', value=None, ch=1), # set 参数化波形指令队列配置
|
|
85
88
|
# 采集运行参数
|
|
86
|
-
Quantity('Shot', value=1024, ch=1), # set
|
|
89
|
+
Quantity('Shot', value=1024, ch=1), # set,运行次数
|
|
87
90
|
Quantity('PointNumber', value=16384, unit='point'), # set/get,AD采样点数
|
|
88
91
|
Quantity('TriggerDelay', value=0, ch=1, unit='s'), # set/get,AD采样延时
|
|
89
92
|
Quantity('FrequencyList', value=[], ch=1, unit='Hz'), # set/get,解调频率列表,list,单位Hz
|
|
@@ -130,6 +133,8 @@ class Driver(BaseDriver):
|
|
|
130
133
|
]
|
|
131
134
|
|
|
132
135
|
SystemParameter = {
|
|
136
|
+
'ExcLimit': -1, # 设备traceback打印信息的回溯深度
|
|
137
|
+
'Warning': True, # 开启后台警告上报
|
|
133
138
|
'MixMode': 2, # Mix模式,1:第一奈奎斯特去; 2:第二奈奎斯特区
|
|
134
139
|
'PLLFreq': 100e6, # 参考时钟频率, 单位为Hz
|
|
135
140
|
'RefClock': 'out', # 参考时钟选择: ‘out’:外参考时钟;‘in’:内参考时钟
|
|
@@ -224,8 +229,6 @@ class Driver(BaseDriver):
|
|
|
224
229
|
if name in {'Coefficient'}:
|
|
225
230
|
data, f_list, numberOfPoints, phases = get_coef(value, 4e9)
|
|
226
231
|
self.set('DemodulationParam', data, channel)
|
|
227
|
-
elif name in {'CaptureMode', 'SystemSync', 'ResetTrig', 'TrigPeriod', 'TrigFrom'}:
|
|
228
|
-
pass
|
|
229
232
|
else:
|
|
230
233
|
return self.set(name, value, channel)
|
|
231
234
|
|
|
@@ -259,16 +262,10 @@ class Driver(BaseDriver):
|
|
|
259
262
|
value = {}
|
|
260
263
|
self.init_device(system_parameter=value)
|
|
261
264
|
return
|
|
262
|
-
elif name in {'CaptureMode', 'SystemSync', 'ResetTrig', 'TrigPeriod', 'TrigFrom'}:
|
|
263
|
-
return
|
|
264
265
|
|
|
265
266
|
value = RPCValueParser.dump(value)
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
func = self.fast_rpc.rpc_set
|
|
269
|
-
name = 'GenWave' if name == 'Waveform' and value[0] == RPCValueParser.dump_tag_waveform else name
|
|
270
|
-
else:
|
|
271
|
-
func = self.handle.rpc_set
|
|
267
|
+
func = self.fast_rpc.rpc_set
|
|
268
|
+
name = 'GenWave' if name == 'Waveform' and value[0] == RPCValueParser.dump_tag_waveform else name
|
|
272
269
|
|
|
273
270
|
if self.has_start_capture and name == 'StartCapture':
|
|
274
271
|
return
|
|
@@ -315,11 +312,13 @@ class Driver(BaseDriver):
|
|
|
315
312
|
if key.endswith('version'):
|
|
316
313
|
version = version[key][1:].split('-')[0]
|
|
317
314
|
version = tuple(int(v) for v in version.split('.'))
|
|
315
|
+
break
|
|
318
316
|
else:
|
|
319
317
|
version = (0, 0, 0)
|
|
320
318
|
self.backend_version = version
|
|
321
319
|
if version >= (1, 2, 7):
|
|
322
|
-
|
|
320
|
+
self.set('InitSystem')
|
|
321
|
+
return True
|
|
323
322
|
else:
|
|
324
323
|
return self.__exec_command('初始化')
|
|
325
324
|
|
|
@@ -353,12 +352,63 @@ class Driver(BaseDriver):
|
|
|
353
352
|
_string = [f'*********设备{self.addr}开启成功*********']
|
|
354
353
|
for key in keys:
|
|
355
354
|
_string.append(f'{key}: {status.get(key, "nan")}')
|
|
356
|
-
# for i in range(len(status['rfsoc_addr'])):
|
|
357
|
-
# _string.append(f'sub_device{status["rfsoc_addr"][i]}: '
|
|
358
|
-
# f'{status["ref_clock_lock"][i]}{status["ref_clock_from"][i]}')
|
|
359
355
|
print('\n'.join(_string))
|
|
360
356
|
|
|
361
357
|
|
|
358
|
+
class RPCFaultPack:
|
|
359
|
+
split_flag = '|+*+-*-+*+|*-*|'
|
|
360
|
+
|
|
361
|
+
class FaultType(str, enum.Enum):
|
|
362
|
+
EXCEPTION = 'exception'
|
|
363
|
+
WARNING = 'warning'
|
|
364
|
+
INFO = 'info'
|
|
365
|
+
|
|
366
|
+
def __init__(self, _type: str, name: str, message: str):
|
|
367
|
+
self.type: RPCFaultPack.FaultType = self.FaultType(_type)
|
|
368
|
+
self.name = name
|
|
369
|
+
self.message = message
|
|
370
|
+
|
|
371
|
+
@classmethod
|
|
372
|
+
def from_string(cls, string: str):
|
|
373
|
+
self = cls(cls.FaultType.INFO, '', '')
|
|
374
|
+
self.string = string
|
|
375
|
+
return self
|
|
376
|
+
|
|
377
|
+
@classmethod
|
|
378
|
+
def from_fault(cls, fault: xmlrpc.client.Fault):
|
|
379
|
+
return cls.from_string(fault.faultString)
|
|
380
|
+
|
|
381
|
+
@classmethod
|
|
382
|
+
def from_exception(cls, exc: Exception, limit=0):
|
|
383
|
+
message = traceback.format_exception(exc, limit=limit)
|
|
384
|
+
return cls(cls.FaultType.EXCEPTION, exc.__class__.__name__, ''.join(message))
|
|
385
|
+
|
|
386
|
+
@classmethod
|
|
387
|
+
def from_warning(cls, warns: "list[warnings.WarningMessage]"):
|
|
388
|
+
warn = [str(warn.category.__name__) for warn in warns]
|
|
389
|
+
warn = str(warn[0]) if len(warn) == 1 else str(warn)
|
|
390
|
+
messages = [str(warn.message) for warn in warns]
|
|
391
|
+
return cls(cls.FaultType.WARNING, warn, '\n'.join(messages))
|
|
392
|
+
|
|
393
|
+
@property
|
|
394
|
+
def string(self):
|
|
395
|
+
return self.split_flag.join([self.type, self.name, self.message])
|
|
396
|
+
|
|
397
|
+
@string.setter
|
|
398
|
+
def string(self, value: str):
|
|
399
|
+
_p = value.split(self.split_flag)
|
|
400
|
+
if len(_p) == 1:
|
|
401
|
+
_p = (self.FaultType.INFO, 'Default', _p[0])
|
|
402
|
+
elif len(_p) == 2:
|
|
403
|
+
_p = (self.FaultType.INFO, _p[0], _p[1])
|
|
404
|
+
else:
|
|
405
|
+
_p = _p[:3]
|
|
406
|
+
self.type, self.name, self.message = _p
|
|
407
|
+
|
|
408
|
+
def __str__(self):
|
|
409
|
+
return self.string
|
|
410
|
+
|
|
411
|
+
|
|
362
412
|
class FastRPC:
|
|
363
413
|
def __init__(self, address, timeout):
|
|
364
414
|
self.addr = address
|
|
@@ -368,9 +418,6 @@ class FastRPC:
|
|
|
368
418
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
369
419
|
sock.connect((self.addr, 10800))
|
|
370
420
|
sock.settimeout(self.timeout)
|
|
371
|
-
# sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, True)
|
|
372
|
-
# sock.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 60 * 1000, 30 * 1000))
|
|
373
|
-
# sock.close()
|
|
374
421
|
return sock
|
|
375
422
|
|
|
376
423
|
def rpc_set(self, *param):
|
nsqdriver/NS_QSYNC.py
CHANGED
|
@@ -99,6 +99,7 @@ class Driver(BaseDriver):
|
|
|
99
99
|
|
|
100
100
|
_scanning_lock = _scanning_lock
|
|
101
101
|
_device_set = DEVICE_SET
|
|
102
|
+
segment = ('ns', '111|112|113|114|115')
|
|
102
103
|
|
|
103
104
|
icd_head_reset = 0x41000002
|
|
104
105
|
icd_head_status = 0x4100000E
|
|
@@ -131,6 +132,7 @@ class Driver(BaseDriver):
|
|
|
131
132
|
'TrigPeriod': 200e-6, # 触发信号重复周期
|
|
132
133
|
'TrigWidth': 800e-9, # 触发信号高电平宽度 单位s
|
|
133
134
|
'TrigDelay': 0, # 触发信号相对开启通知的延迟
|
|
135
|
+
'Shot': 1024,
|
|
134
136
|
'DiscoveryMode': ScannMode.local, # QC/QR等被同步设备的发现方式,见DiscoveryMode说明
|
|
135
137
|
}
|
|
136
138
|
|
|
@@ -142,7 +144,7 @@ class Driver(BaseDriver):
|
|
|
142
144
|
self.gen_trig_num = 0
|
|
143
145
|
self.addr = addr
|
|
144
146
|
|
|
145
|
-
self.param = {'Shot': 1024, '
|
|
147
|
+
self.param = {'Shot': 1024, 'TrigPeriod': 200e-6, 'MixMode': 2}
|
|
146
148
|
print_debug(f'QSYNC: 实例化成功{addr}')
|
|
147
149
|
|
|
148
150
|
@property
|
|
@@ -542,11 +544,11 @@ class DeviceCmdHandle:
|
|
|
542
544
|
res = []
|
|
543
545
|
errors = []
|
|
544
546
|
for board, future in zip(boards, futures):
|
|
545
|
-
if board.
|
|
546
|
-
_id = (board.
|
|
547
|
+
if board.has_cmd_link and board.has_stream_link:
|
|
548
|
+
_id = (board.ds_id & 0xFF) << 24
|
|
547
549
|
_res = struct.unpack('IIIII', future.result())[-1] & 0xFFFFFF
|
|
548
550
|
if _res:
|
|
549
|
-
errors.append(f'指令{cmd_data[4:8].tobytes()}向{board.
|
|
551
|
+
errors.append(f'指令{cmd_data[4:8].tobytes()}向{board.cs_target}转发失败\n')
|
|
550
552
|
res.append(_id + _res)
|
|
551
553
|
return b''.join((head, cmd_data[4:12], struct.pack('=I' + 'I' * len(res), 16 + len(res) * 4, *res))), errors
|
|
552
554
|
|
|
@@ -554,8 +556,8 @@ class DeviceCmdHandle:
|
|
|
554
556
|
def packing_fake_result(boards: Iterable["MCIBoard"], cmd_data: memoryview, head: bytes) -> bytes:
|
|
555
557
|
res = []
|
|
556
558
|
for board in boards:
|
|
557
|
-
if board.
|
|
558
|
-
_id = (board.
|
|
559
|
+
if board.has_cmd_link and board.has_stream_link:
|
|
560
|
+
_id = (board.ds_id & 0xFF) << 24
|
|
559
561
|
res.append(_id + 0)
|
|
560
562
|
return b''.join((head, cmd_data[4:12], struct.pack('=I' + 'I' * len(res), 16 + len(res) * 4, *res)))
|
|
561
563
|
|
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,
|
|
7
|
+
version_pack = (0, 5, 1)
|
|
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.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: Naishu Q series quantum measurement and control equipment driver interface
|
|
5
5
|
Home-page: https://g2hoyqcmh4.feishu.cn/wiki/wikcnzvyMd82DLZUe2NsI6HxsFc
|
|
6
6
|
Author: Naishu Technology
|
|
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Requires-Python: >=3.8
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
|
-
Requires-Dist: numpy
|
|
19
|
+
Requires-Dist: numpy >=1.18
|
|
20
20
|
Provides-Extra: waveforms
|
|
21
21
|
Requires-Dist: waveforms ; extra == 'waveforms'
|
|
22
22
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
nsqdriver/NS_CST.py,sha256=_QYCjg1YglIJ4YVmxvISqvy5rExWGlMhyrK9zYIRbRY,7877
|
|
2
|
+
nsqdriver/NS_MCI.py,sha256=Cr881PBY0S-uIc-eY4DDrU1XcvNbm_dVrgOiLGzOH7c,20859
|
|
3
|
+
nsqdriver/NS_QSYNC.py,sha256=YoulCgRt1uWZE7IAiIV2oeyMClFjmaCAXq9bNX3E5aI,23378
|
|
4
|
+
nsqdriver/__init__.py,sha256=GjuV-Zm3KjSQ_7_XIC6W3cbeliiP-T_ByGYhAWAM2-s,371
|
|
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-310-darwin.so,sha256=JSjH0ATiOkH52UmO8lyLEhu1k0Id9REuq3BIunOlsjQ,559536
|
|
8
|
+
nsqdriver/compiler/ns_wave.cpython-310-darwin.so,sha256=-NI0GjJyxm0XxW-EokpgF0HiHrA2mNH2G5IbP3j9LZc,406336
|
|
9
|
+
nsqdriver/compiler/ns_wave.pyi,sha256=JQiE_9HqCzm00bS6c2JaaIXwt7xN_x9XXax-BBrE7-o,3824
|
|
10
|
+
nsqdriver/compiler/py_wave_asm.cpython-310-darwin.so,sha256=iuhnR7v5KHv2UYSHURgTIvgfwjlIR8RVNaHlTpHBugM,533464
|
|
11
|
+
nsqdriver/compiler/py_wave_asm.pyi,sha256=w2PWlBrns4tfDYjTLyOBfNgjjjVA_xzMJZYYyDPKce4,656
|
|
12
|
+
nsqdriver/wrapper/AWG_ADC.py,sha256=8K5xLEa_3CKnStWcoJeTj8ufEQfrx6o4l4XGNuOP3Ug,19211
|
|
13
|
+
nsqdriver/wrapper/ND_NSMCI.py,sha256=gTyrDObhbggl35V_q-kpDoPsfttIEnDFc6f0-pk_P0k,6288
|
|
14
|
+
nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
nsqdriver-0.5.1.dist-info/METADATA,sha256=St0AOpM7wAuF0S976k9krAm2UlX5F8IObvxurAd5xBo,4359
|
|
16
|
+
nsqdriver-0.5.1.dist-info/WHEEL,sha256=TncAKGvnfXJs-WUZUGzl_RwrBY6HmH7BWWQjmjUD8NU,111
|
|
17
|
+
nsqdriver-0.5.1.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
|
|
18
|
+
nsqdriver-0.5.1.dist-info/RECORD,,
|
nsqdriver-0.4.2.dist-info/RECORD
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
nsqdriver/NS_CST.py,sha256=_QYCjg1YglIJ4YVmxvISqvy5rExWGlMhyrK9zYIRbRY,7877
|
|
2
|
-
nsqdriver/NS_MCI.py,sha256=ejn6eY9AT6P-t1TDzCqYu54vTNzUL2UAKc0RV02Sa4k,19624
|
|
3
|
-
nsqdriver/NS_QSYNC.py,sha256=68qFZ04KVXb0MSaeKIZVZYqR0UV_tkJYWz7KSz4Dvg0,23281
|
|
4
|
-
nsqdriver/__init__.py,sha256=53CoOtEV8lR_jU3q8NYZPPVdz6hwdv57GsbxFZJaXK0,371
|
|
5
|
-
nsqdriver/common.py,sha256=IHfShqgNN3THbe7KD7ICdfFY7JKC_kQj0_KJk-449gQ,499
|
|
6
|
-
nsqdriver/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
nsqdriver/compiler/ns_wave.cpython-310-darwin.so,sha256=5A7_gnr7dE2n5LhZ_L_VxCmVP6FGaw4fTbGxdbn_B28,437240
|
|
8
|
-
nsqdriver/compiler/ns_wave.pyi,sha256=JQiE_9HqCzm00bS6c2JaaIXwt7xN_x9XXax-BBrE7-o,3824
|
|
9
|
-
nsqdriver/compiler/py_wave_asm.cpython-310-darwin.so,sha256=7CJoj83vtgmClN8HqP7zuHRZTrw3IIckN7crHPtFE38,538552
|
|
10
|
-
nsqdriver/compiler/py_wave_asm.pyi,sha256=w2PWlBrns4tfDYjTLyOBfNgjjjVA_xzMJZYYyDPKce4,656
|
|
11
|
-
nsqdriver/wrapper/AWG_ADC.py,sha256=8K5xLEa_3CKnStWcoJeTj8ufEQfrx6o4l4XGNuOP3Ug,19211
|
|
12
|
-
nsqdriver/wrapper/ND_NSMCI.py,sha256=gTyrDObhbggl35V_q-kpDoPsfttIEnDFc6f0-pk_P0k,6288
|
|
13
|
-
nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
nsqdriver-0.4.2.dist-info/METADATA,sha256=d2X7Uf5bT9-Gz2AgH7IwGsbN-_kkB7nINS7TQRIk-zc,4361
|
|
15
|
-
nsqdriver-0.4.2.dist-info/WHEEL,sha256=tNYyggI0QC5GD4MVHQuiVTUUU_cLi9bibpSukmwhhdM,111
|
|
16
|
-
nsqdriver-0.4.2.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
|
|
17
|
-
nsqdriver-0.4.2.dist-info/RECORD,,
|
|
File without changes
|