nsqdriver 0.4.2__cp39-cp39-win_amd64.whl → 0.5.1__cp39-cp39-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_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'远程函数报错: {e.faultString}')
62
- print(args[0].handle.get_all_status())
63
- print(f'远程函数报错: {e.faultString}')
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/get, 设备重新初始化
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/get,运行次数
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
- if name in {'Waveform', 'GenWave', 'MultiGenWave', 'GenWaveIQ', 'DemodulationParam', 'Coefficient',
267
- 'Instruction'}:
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
- return self.set('InitSystem')
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, 'period': 200e-6, 'MixMode': 2}
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.has_ip and board.has_dma:
546
- _id = (board.dma_id & 0xFF) << 24
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.board_ip}转发失败\n')
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.has_ip and board.has_dma:
558
- _id = (board.dma_id & 0xFF) << 24
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, 4, 2)
7
+ version_pack = (0, 5, 1)
8
8
 
9
9
  __version__ = '.'.join(str(_) for _ in version_pack)
10
10
  __all__ = ['MCIDriver', 'QSYNCDriver', 'CSTDriver', 'InsChannel']
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nsqdriver
3
- Version: 0.4.2
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 (>=1.18)
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=zA5YcM65v66EqwBnplDvA6HM0I-y8damDOerE2CKyZE,8137
2
+ nsqdriver/NS_MCI.py,sha256=nXa74bV56H1SlJiv6Vv-L_hIIdnZRslx_2nOmMFofyg,21424
3
+ nsqdriver/NS_QSYNC.py,sha256=Q0qcwbC5WGf4jc-EHsKdZvTaMNBPhk_VyB3PHkfI5kA,24049
4
+ nsqdriver/__init__.py,sha256=btytZh6kbaWRboaZraWv-6Sgo3I9MghVXYBTIm9OSzc,381
5
+ nsqdriver/common.py,sha256=5BRActb9TgNdVwWtfuZ_gki47H1WbABzYr5XbxLKlh4,519
6
+ nsqdriver/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ nsqdriver/compiler/assembler.cp39-win_amd64.pyd,sha256=pvUsR2_6fByCrTmC1oXlzmhcBWOwbH2n3D9t0Ix73Jk,347136
8
+ nsqdriver/compiler/ns_wave.cp39-win_amd64.pyd,sha256=o1yqZux1nhHdMnIfdv154zp_o8pXis8E83aXxzACKX4,237056
9
+ nsqdriver/compiler/ns_wave.pyi,sha256=axQaxrMaKRPx8k9sDVlRj3SjR03AmXUDzkVW4D_2RJw,3975
10
+ nsqdriver/compiler/py_wave_asm.cp39-win_amd64.pyd,sha256=deotWPG6te5ZM6d_PKQxMzO_O4RN-9b3Na0N1cZrFjk,332288
11
+ nsqdriver/compiler/py_wave_asm.pyi,sha256=PqEZuNt83CCu_FJUczUjStowOz2TBgvfIytGanFPHuQ,685
12
+ nsqdriver/wrapper/AWG_ADC.py,sha256=I4nPtbQTHxqAqFuXTHb_oDLW-ycRxSUpBUyD67eq_dA,19745
13
+ nsqdriver/wrapper/ND_NSMCI.py,sha256=e0j7BUdfrhfYb1GqBPlO4vSoZPXTKyictXy1nPvoMFE,6533
14
+ nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ nsqdriver-0.5.1.dist-info/METADATA,sha256=dRf8lUO244AeKOiYgs4Xs94RkpO3RB7nJAdbszFqMQM,4463
16
+ nsqdriver-0.5.1.dist-info/WHEEL,sha256=GZFS91_ufm4WrNPBaFVPB9MvOXR6bMZQhPcZRRTN5YM,100
17
+ nsqdriver-0.5.1.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
18
+ nsqdriver-0.5.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.40.0)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-cp39-win_amd64
5
5
 
@@ -1,17 +0,0 @@
1
- nsqdriver/NS_CST.py,sha256=zA5YcM65v66EqwBnplDvA6HM0I-y8damDOerE2CKyZE,8137
2
- nsqdriver/NS_MCI.py,sha256=dyjqAhIHwfPQgh7GRiYISRYi3I3BIVbnSjXij-Y-T1I,20142
3
- nsqdriver/NS_QSYNC.py,sha256=2tKMeRb5S4pHPD_CWfVTVPJFNRwo0OLwyevEgD6izDg,23950
4
- nsqdriver/__init__.py,sha256=pdL_TL58PRJzSH4UKO3Mu_ArmI0JKsM7ujOK61bjC4A,381
5
- nsqdriver/common.py,sha256=5BRActb9TgNdVwWtfuZ_gki47H1WbABzYr5XbxLKlh4,519
6
- nsqdriver/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- nsqdriver/compiler/ns_wave.cp39-win_amd64.pyd,sha256=d7ewm1_u6gFefusl81yRr8cwnR1OuHXHudspz9prbmo,214528
8
- nsqdriver/compiler/ns_wave.pyi,sha256=axQaxrMaKRPx8k9sDVlRj3SjR03AmXUDzkVW4D_2RJw,3975
9
- nsqdriver/compiler/py_wave_asm.cp39-win_amd64.pyd,sha256=U4GY5kmOXCIboX7iEGJfooNPYNzT7f8MMhbnDyJgA0g,272384
10
- nsqdriver/compiler/py_wave_asm.pyi,sha256=PqEZuNt83CCu_FJUczUjStowOz2TBgvfIytGanFPHuQ,685
11
- nsqdriver/wrapper/AWG_ADC.py,sha256=I4nPtbQTHxqAqFuXTHb_oDLW-ycRxSUpBUyD67eq_dA,19745
12
- nsqdriver/wrapper/ND_NSMCI.py,sha256=e0j7BUdfrhfYb1GqBPlO4vSoZPXTKyictXy1nPvoMFE,6533
13
- nsqdriver/wrapper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- nsqdriver-0.4.2.dist-info/METADATA,sha256=3TMmkVeHqWtCwulFHh4Fe-NDtPBOTVInIghcJaF1wGg,4465
15
- nsqdriver-0.4.2.dist-info/WHEEL,sha256=eep6QWEFiQfg2wcclssb_WY-D33AnLYLnEKGA9Rn-VU,100
16
- nsqdriver-0.4.2.dist-info/top_level.txt,sha256=o7EbQoFO6BoaG3KGbS9Lg_aRheZSY5KYzoYuI9vx-AI,10
17
- nsqdriver-0.4.2.dist-info/RECORD,,