QUBIT-Driver 1.2.0__tar.gz → 1.2.2__tar.gz
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.
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/PKG-INFO +6 -2
- qubit_driver-1.2.0/QUBIT_Driver/CY_10DA.py → qubit_driver-1.2.2/QUBIT_Driver/CY_10ReadJili.py +2 -2
- qubit_driver-1.2.0/QUBIT_Driver/CY_6DA.py → qubit_driver-1.2.2/QUBIT_Driver/CY_6XY.py +1 -1
- qubit_driver-1.2.0/QUBIT_Driver/CY_6DADC.py → qubit_driver-1.2.2/QUBIT_Driver/CY_6Z.py +2 -2
- qubit_driver-1.2.2/QUBIT_Driver/CY_8Couple.py +211 -0
- qubit_driver-1.2.2/QUBIT_Driver/__init__.py +1 -0
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/QUBIT_Driver.egg-info/PKG-INFO +6 -2
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/QUBIT_Driver.egg-info/SOURCES.txt +4 -3
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/README.md +5 -1
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/setup.py +1 -1
- qubit_driver-1.2.0/QUBIT_Driver/__init__.py +0 -1
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/LICENSE +0 -0
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/QUBIT_Driver/CY_AD.py +0 -0
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/QUBIT_Driver/CY_SYNC.py +0 -0
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/QUBIT_Driver.egg-info/dependency_links.txt +0 -0
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/QUBIT_Driver.egg-info/entry_points.txt +0 -0
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/QUBIT_Driver.egg-info/top_level.txt +0 -0
- {qubit_driver-1.2.0 → qubit_driver-1.2.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: QUBIT_Driver
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.2
|
|
4
4
|
Summary: Drive adapted for the quantum control system of the CeYear 1U Qubit_Driver Institute
|
|
5
5
|
Home-page:
|
|
6
6
|
Author: He Guo Yang
|
|
@@ -41,5 +41,9 @@ $ pip install QUBIT_Driver
|
|
|
41
41
|
|
|
42
42
|
### License
|
|
43
43
|
## Update log
|
|
44
|
-
|
|
44
|
+
### 1.2.2
|
|
45
|
+
- 修改设备名称与驱动文件名称
|
|
46
|
+
### 1.2.1
|
|
47
|
+
- 新增耦合波形发生器驱动功能CY_8DA.py文件
|
|
48
|
+
###'1.2.0' first release
|
|
45
49
|
[MIT]
|
qubit_driver-1.2.0/QUBIT_Driver/CY_10DA.py → qubit_driver-1.2.2/QUBIT_Driver/CY_10ReadJili.py
RENAMED
|
@@ -3,12 +3,12 @@ import socket
|
|
|
3
3
|
import time
|
|
4
4
|
|
|
5
5
|
class CYDA10Driver:
|
|
6
|
-
support_models = ['
|
|
6
|
+
support_models = ['CY_10ReadJili']
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def __init__(self, addr, **kw):
|
|
10
10
|
self.addr = addr
|
|
11
|
-
self.model = '
|
|
11
|
+
self.model = 'CY_10ReadJili'
|
|
12
12
|
self.srate = 10e9
|
|
13
13
|
|
|
14
14
|
def open(self):
|
|
@@ -3,12 +3,12 @@ import socket
|
|
|
3
3
|
import time
|
|
4
4
|
|
|
5
5
|
class CYDADCDriver:
|
|
6
|
-
support_models = ['
|
|
6
|
+
support_models = ['CY_6Z']
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def __init__(self, addr, **kw):
|
|
10
10
|
self.addr = addr
|
|
11
|
-
self.model = '
|
|
11
|
+
self.model = 'CY_6Z'
|
|
12
12
|
self.srate = 6e9
|
|
13
13
|
|
|
14
14
|
def open(self):
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
import socket
|
|
3
|
+
import time
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class CYDA8Driver:
|
|
7
|
+
support_models = ['CY_8Couple']
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def __init__(self, addr, **kw):
|
|
11
|
+
self.addr = addr
|
|
12
|
+
self.model = 'CY_8Couple'
|
|
13
|
+
self.srate = 6e9
|
|
14
|
+
|
|
15
|
+
def open(self):
|
|
16
|
+
#建立连接
|
|
17
|
+
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
18
|
+
self.sock.connect((self.addr, 4196))
|
|
19
|
+
# self.sock.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY,1)
|
|
20
|
+
self.sock.settimeout(10)
|
|
21
|
+
#复位
|
|
22
|
+
self.sock_query('*RST')
|
|
23
|
+
|
|
24
|
+
#设置奈奎斯特区间为2区
|
|
25
|
+
self.set(':AWG:NYZONE',2)
|
|
26
|
+
#幅度校准加载
|
|
27
|
+
self.set(':AWG:WORK:VOLT?')
|
|
28
|
+
|
|
29
|
+
self.CAWEn = 0 # 0: 任意波, 1: 载波
|
|
30
|
+
self.CycleSeq = 1 # 1: 单次播放, 0: 循环播放
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def close(self, **kw):
|
|
34
|
+
self.sock.close()
|
|
35
|
+
|
|
36
|
+
def write(self, name: str, value, **kw):
|
|
37
|
+
ch = kw.get('ch', 9)
|
|
38
|
+
|
|
39
|
+
if name in ['TriggerDelayAWG',]:
|
|
40
|
+
self.rd_Delay(ch, value)
|
|
41
|
+
elif name in ['rdAtt',]:
|
|
42
|
+
self.rd_Att(ch, value)
|
|
43
|
+
elif name in ['Waveform']:
|
|
44
|
+
self.download_AWG_waveData(value,ch)
|
|
45
|
+
elif name in ['CAWWave',]:
|
|
46
|
+
self.Generate_Caw_Wave(value,ch)
|
|
47
|
+
elif name in ['Nyzone']:
|
|
48
|
+
self.set('::AWG:NYZONE',value)
|
|
49
|
+
elif name in ['FeedBack']:
|
|
50
|
+
self.set(':AWG:FEEDB', value) # 1 开启 0 关闭
|
|
51
|
+
elif name in ['CAWEn']:
|
|
52
|
+
""" 1: 载波
|
|
53
|
+
0: 任意波
|
|
54
|
+
"""
|
|
55
|
+
assert value in [0, 1], f'CAWEn can only be 0 or 1!'
|
|
56
|
+
self.CAWEn = value
|
|
57
|
+
elif name in ['CycleSeq']:
|
|
58
|
+
""" 1: 单次播放
|
|
59
|
+
0: 循环播放
|
|
60
|
+
"""
|
|
61
|
+
assert value in [0, 1], f'CycleSeq can only be 0 or 1!'
|
|
62
|
+
self.CycleSeq = value
|
|
63
|
+
else:
|
|
64
|
+
pass
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# *#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# user defined #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#
|
|
68
|
+
|
|
69
|
+
def set(self, cmd_name, params = None):
|
|
70
|
+
"""
|
|
71
|
+
发送带参数的程控指令
|
|
72
|
+
:param sock: 已连接的socket对象
|
|
73
|
+
:param cmd_name: 指令名称(如"SET_FREQ")
|
|
74
|
+
:param params: 可变参数(如频率值、通道号等)
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
# 1. 拼接指令字符串(例如:"SET_FREQ,100000 1;" 表示设置通道1的频率为100000Hz)
|
|
78
|
+
if params != None:
|
|
79
|
+
# param_str = ",".join(map(str, params)) # 将参数转换为字符串并拼接
|
|
80
|
+
param_str = str(params)
|
|
81
|
+
cmd_str = f"{cmd_name} {param_str}\n" # 组合成完整指令(带结束符)
|
|
82
|
+
else:
|
|
83
|
+
cmd_str = f"{cmd_name}\n" # 组合成完整指令(带结束符)
|
|
84
|
+
# 2. 转换为字节流(socket传输必须是bytes类型)
|
|
85
|
+
cmd_bytes = cmd_str.encode('utf-8')
|
|
86
|
+
# 3. 发送指令
|
|
87
|
+
self.sock.sendall(cmd_bytes)
|
|
88
|
+
# print(f"已发送指令:{cmd_str}")
|
|
89
|
+
|
|
90
|
+
def sock_read(self,buffer_size=1024):
|
|
91
|
+
response = b''
|
|
92
|
+
while True:
|
|
93
|
+
chunk = self.sock.recv(buffer_size)
|
|
94
|
+
if not chunk:
|
|
95
|
+
break # 连接关闭
|
|
96
|
+
response += chunk
|
|
97
|
+
if b'\n' in chunk:
|
|
98
|
+
break # 达到结束标志
|
|
99
|
+
return response.strip()
|
|
100
|
+
|
|
101
|
+
def sock_query(self, cmd_name,params = None):
|
|
102
|
+
self.set( cmd_name, params)
|
|
103
|
+
return self.sock_read()
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
##########################################################################################################
|
|
107
|
+
def ChlSel(self,chl,name = ':AWG:CHLSel'):
|
|
108
|
+
chl = chl -1
|
|
109
|
+
self.set(name,chl)
|
|
110
|
+
|
|
111
|
+
def rd_Delay(self, chl, delay_ns):
|
|
112
|
+
self.ChlSel(chl)
|
|
113
|
+
self.set(':READ:DELay',delay_ns)
|
|
114
|
+
return
|
|
115
|
+
def rd_Att(self, chl, att):
|
|
116
|
+
self.ChlSel( chl)
|
|
117
|
+
self.set(':READ:ATT',att)
|
|
118
|
+
return
|
|
119
|
+
def Generate_Caw_Wave(self,value,ch):
|
|
120
|
+
self.ChlSel(ch)
|
|
121
|
+
self.set(':CAW:FREQ',value[0])
|
|
122
|
+
self.set(':CAW:PHAS',value[1])
|
|
123
|
+
self.set(':CAW:ONLY',1)
|
|
124
|
+
#############确定波形数据长度位宽#########################
|
|
125
|
+
def digit_count(num):
|
|
126
|
+
len = 0
|
|
127
|
+
if num == 0:
|
|
128
|
+
return 1
|
|
129
|
+
else:
|
|
130
|
+
while(num != 0):
|
|
131
|
+
num = num // 10
|
|
132
|
+
len = len + 1
|
|
133
|
+
return len
|
|
134
|
+
#########################下发任意波数据#################################################
|
|
135
|
+
# ------------------------------------------------------------------------
|
|
136
|
+
# 功能说明: 【载波】 *用于任意波形数据下发
|
|
137
|
+
# 输入参数:波形数据
|
|
138
|
+
#
|
|
139
|
+
# 返回值: 无
|
|
140
|
+
# ------------------------------------------------------------------------
|
|
141
|
+
def AWG_Data_Download(self,waveData):
|
|
142
|
+
# self.ChlSel(ch)
|
|
143
|
+
#下发波形数据
|
|
144
|
+
len_once = 134000000
|
|
145
|
+
m_Len_bytes = len(waveData)%len_once
|
|
146
|
+
m_Len_count = len(waveData)//len_once
|
|
147
|
+
if m_Len_count != 0:
|
|
148
|
+
for k in range(m_Len_count):
|
|
149
|
+
dataSend = b':AWG:WRITe #9134000000'+waveData[134000000*k:134000000*(k+1)]
|
|
150
|
+
self.sock.sendall(dataSend)
|
|
151
|
+
self.sock_read()
|
|
152
|
+
if m_Len_bytes != 0:
|
|
153
|
+
digit_len = self.digit_count(m_Len_bytes)
|
|
154
|
+
dataSend = b':AWG:WRITe #'+str(digit_len).encode('utf-8')+\
|
|
155
|
+
str(m_Len_bytes).encode('utf-8')+\
|
|
156
|
+
waveData[m_Len_count*134000000:m_Len_count*134000000+m_Len_bytes]
|
|
157
|
+
self.sock.sendall(dataSend)
|
|
158
|
+
self.sock_read()
|
|
159
|
+
return
|
|
160
|
+
# ------------------------------------------------------------------------
|
|
161
|
+
# 功能说明: 量化float数据 并转bytes 【用于转换任意波形数据】
|
|
162
|
+
# 输入参数:
|
|
163
|
+
# data:【数据类型: ndarray或list】
|
|
164
|
+
# 【取值范围: 0~1】
|
|
165
|
+
# 【参数意义: 待处理的float数据数组或列表】
|
|
166
|
+
# 输出参数:
|
|
167
|
+
# data_bytes:【数据类型: bytes】
|
|
168
|
+
# 【数据说明: 每16位为一组, 范围: 0~0xFFFF, 低14位有效】
|
|
169
|
+
# 【参数意义: 转换后的生成的bytes数据】
|
|
170
|
+
# 返回值: data_bytes
|
|
171
|
+
# ------------------------------------------------------------------------
|
|
172
|
+
def float2bytes(self,data):
|
|
173
|
+
# 如果为list格式,则转为array进行处理
|
|
174
|
+
if isinstance(data,list):
|
|
175
|
+
data = np.array(data).reshape(1,-1)
|
|
176
|
+
else:
|
|
177
|
+
# 转换为1维数组
|
|
178
|
+
data = data.reshape(1,-1)
|
|
179
|
+
|
|
180
|
+
len_data = np.size(data)
|
|
181
|
+
# 是否为偶数个元素,如果不是,补1个0
|
|
182
|
+
if len_data % 2 != 0:
|
|
183
|
+
np.append(data,0)
|
|
184
|
+
len_data = len_data +1
|
|
185
|
+
# -------- 元素两个一组,每组前后对调 -----------------
|
|
186
|
+
data_uint16 = np.uint16(data*(pow(2,15)-1))
|
|
187
|
+
#####################
|
|
188
|
+
# data_uint16 = np.bitwise_or(data_uint16,1)
|
|
189
|
+
##################
|
|
190
|
+
data_bytes = data_uint16.tobytes()
|
|
191
|
+
return data_bytes
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def download_AWG_waveData(self,data,ch=9):
|
|
195
|
+
data_bytes = self.float2bytes(np.array(data).reshape(-1,1))
|
|
196
|
+
#波形模块使能复位
|
|
197
|
+
self.ChlSel(ch)
|
|
198
|
+
self.set(':AWG:BDOWnlclear')
|
|
199
|
+
#波形下发与控制
|
|
200
|
+
self.AWG_Data_Download(data_bytes)
|
|
201
|
+
#设置任意波模式
|
|
202
|
+
self.set(':CAW:ONLY', self.CAWEn)
|
|
203
|
+
#设置为单次博放
|
|
204
|
+
self.set(':AWG:SEQNUM', self.CycleSeq)
|
|
205
|
+
#通道输出打开
|
|
206
|
+
self.ChlSel(ch)
|
|
207
|
+
self.set(':AWG:SWITCH','ON')
|
|
208
|
+
# #外触发
|
|
209
|
+
# self.set(':TRIG:TYPE',0)
|
|
210
|
+
# #触发模式:波形触发模式
|
|
211
|
+
# self.set(':TRIG:CTRL',2)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.2.2"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: QUBIT_Driver
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.2
|
|
4
4
|
Summary: Drive adapted for the quantum control system of the CeYear 1U Qubit_Driver Institute
|
|
5
5
|
Home-page:
|
|
6
6
|
Author: He Guo Yang
|
|
@@ -41,5 +41,9 @@ $ pip install QUBIT_Driver
|
|
|
41
41
|
|
|
42
42
|
### License
|
|
43
43
|
## Update log
|
|
44
|
-
|
|
44
|
+
### 1.2.2
|
|
45
|
+
- 修改设备名称与驱动文件名称
|
|
46
|
+
### 1.2.1
|
|
47
|
+
- 新增耦合波形发生器驱动功能CY_8DA.py文件
|
|
48
|
+
###'1.2.0' first release
|
|
45
49
|
[MIT]
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
LICENSE
|
|
2
2
|
README.md
|
|
3
3
|
setup.py
|
|
4
|
-
QUBIT_Driver/
|
|
5
|
-
QUBIT_Driver/
|
|
6
|
-
QUBIT_Driver/
|
|
4
|
+
QUBIT_Driver/CY_10ReadJili.py
|
|
5
|
+
QUBIT_Driver/CY_6XY.py
|
|
6
|
+
QUBIT_Driver/CY_6Z.py
|
|
7
|
+
QUBIT_Driver/CY_8Couple.py
|
|
7
8
|
QUBIT_Driver/CY_AD.py
|
|
8
9
|
QUBIT_Driver/CY_SYNC.py
|
|
9
10
|
QUBIT_Driver/__init__.py
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r",encoding="utf-8") as fh:
|
|
|
5
5
|
|
|
6
6
|
setuptools.setup(
|
|
7
7
|
name="QUBIT_Driver",
|
|
8
|
-
version="1.2.
|
|
8
|
+
version="1.2.2",
|
|
9
9
|
author="He Guo Yang",
|
|
10
10
|
author_email="2060817247@qq.com",
|
|
11
11
|
description="Drive adapted for the quantum control system of the CeYear 1U Qubit_Driver Institute",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.1.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|