新功能和重要的更新
- 新增对MS门的支持。该逻辑门将用于未来与基于离子阱的转译进行集成。
cir = QCircuit()
cir << MS(0,1)
mat = Unitary(cir).ndarray()
print('mat of MS:',mat)
prog = QProg()
prog << cir
print('prog ir:',prog.originir())
qvm = CPUQVM()
qvm.run(prog,1)
stv = qvm.result().get_state_vector()
print('stv:',stv)
输出结果 mat of MS: [[0.70710678+0.j 0. +0.j 0. +0.j
0. -0.70710678j]
[0. +0.j 0.70710678+0.j 0. -0.70710678j
0. +0.j ]
[0. +0.j 0. -0.70710678j 0.70710678+0.j
0. +0.j ]
[0. -0.70710678j 0. +0.j 0. +0.j
0.70710678+0.j ]]
prog ir: QINIT 2
CREG 1
MS q[0],q[1]
stv: [(0.7071067811865476+0j), 0j, 0j, -0.7071067811865476j]
- 增加对分支类型动态量子线路和循环类型动态量子线路的支持
- 新增接口,允许用户获得PauliOperator类对象中的内部数据
- 新增接口,允许用户获得用于模拟哈密顿量的泡利算子
- 优化OriginBIS内部实现
- OriginIR 部分新增自定义门(
QGATE)转译功能
- OriginIR 部分新增动态线路(
QIF 和 QWHILE)转译功能
- OpenQASM 部分新增动态线路(
if)转译功能
- 量子比特重新映射接口新增基于字典形式参数的接口,直接指定映射前后量子比特数组和量子寄存器的映射结构,参考下面的代码
prog = QProg()
prog << H(60)
prog << X(63)
prog << Y(61)
prog << CNOT(60, 61)
prog << CZ(60, 60)
prog << RXX(60, 63, 0.22)
prog << RYY(62, 64, 0.33)
prog << SWAP(60, 63)
prog << measure(60, 60)
prog << measure(63, 61)
prog << measure(61, 60)
prog << measure(63, 62)
prog << measure(64, 63)
print(prog.originir())
map_qubits = {}
map_qubits[60] = 5
map_qubits[61] = 3
map_qubits[62] = 1
map_qubits[63] = 2
map_qubits[64] = 0
map_cbits ={}
map_cbits[60] = 0
map_cbits[61] = 1
map_cbits[62] = 2
map_cbits[63] = 3
map_cbits[64] = 4
prog.remap(map_qubits, map_cbits);
print(prog.originir())
映射字典的key是原始线路比特,value对应的是映射后量子比特值,需要注意的是value不能重复,否则会引发异常行为
输出结果
QINIT 65
CREG 64
H q[60]
X q[63]
Y q[61]
CNOT q[60],q[61]
CZ q[60],q[60]
RXX q[60],q[63],(0.22000000)
RYY q[62],q[64],(0.33000000)
SWAP q[60],q[63]
MEASURE q[60],c[60]
MEASURE q[63],c[61]
MEASURE q[61],c[60]
MEASURE q[63],c[62]
MEASURE q[64],c[63]
QINIT 6
CREG 4
H q[5]
X q[2]
Y q[3]
CNOT q[5],q[3]
CZ q[5],q[5]
RXX q[5],q[2],(0.22000000)
RYY q[1],q[0],(0.33000000)
SWAP q[5],q[2]
MEASURE q[5],c[0]
MEASURE q[2],c[1]
MEASURE q[3],c[0]
MEASURE q[2],c[2]
MEASURE q[0],c[3]
- 量子云计算服务芯片测量任务可以选择采样测量结果以及选择指定映射到的量子比特块,参考下面的代码
prog = QProg()
prog << H(0)
prog << X(1)
prog << Y(2)
prog << CNOT(0, 3)
prog.append(measure(0,0))
apikey = "d55f91309f0a4f2b1e7db872aaa05b3ca5edf79aa816b23135628dd765";
service = QCloudService(apikey)
backend = service.backend("WK_C102_400")
options = QCloudOptions()
options.set_is_prob_counts(True)
options.set_specified_block([32, 33, 34,35])
job = backend.run([prog, prog], 1000, options)
result = job.result()
print(result.get_counts_list())
上述代码中,通过QCloudOptions的成员函数来设置选择比特块(set_specified_block)和获取采样测量结果(set_is_prob_counts)
[{'0': 518, '1': 482}, {'0': 505, '1': 495}]