量子计算机状态向量/稳定器电路模拟器及汇编语言
qs的Python项目详细描述
qsy
量子计算机状态矢量/稳定器电路模拟与组装 语言。
目录
安装
$ pip install qsy
这将安装python库qsy和命令行工具qsyam。
qsy
qsy是一个用于模拟量子电路的python库。
示例
下面的代码创建一个纠缠态并将其状态向量打印到 狄拉克符号。
fromqsyimportQuantumRegister,gatesqr=QuantumRegister(2)qr.apply_gate(gates.H,0)qr.apply_gate(gates.CX,0,1)print(qr.to_dirac())
输出为:
+0.70711|00> +0.70711|11>
qsyam
qsyam是一种量子汇编语言,充当qsy的前端。它允许
您可以快速编写和调试Quantum程序。它还允许高效
使用chp
后端模拟稳定器电路。
使用量
usage: qsyasm [-h] [-V] [-v] [-t] [-b B] [-s SHOTS] [--ignore-print-warning]
[--skip-zero-amplitudes]
filename
qsyasm assembly runner
positional arguments:
filename qsyasm file to execute
optional arguments:
-h, --help show this help message and exit
-V, --version show program's version number and exit
-v, --verbose verbose output
-t, --time time program execution
-b B, --backend B simulator back-end to use: chp or statevector
(default: statevector)
-s SHOTS, --shots SHOTS
amount of shots to run
--ignore-print-warning
ignore register too large to print warning
--skip-zero-amplitudes
don't print states with an amplitude of 0
示例
下面的qsysm程序创建一个纠缠态并测量 经典寄存器:
qreg[2]qcreg[2]chq[0]cxq[0],q[1]measq,c
运行它:
$ qsyasm examples/qsyasm/bell.qs
q[2]: +1|11>
+0 | 00
+0 | 01
+0 | 10
+1 | 11
c[2]: 11
或者多次运行:
$ qsyasm examples/qsyasm/bell.qs --shots=1024
q[2]: +1|00>
+1 | 00
+0 | 01
+0 | 10
+0 | 11
c[2]: {'11': 550, '00': 474}
更多的例子如量子相位估计算法可以在 examples/qsyasm文件夹。
语法
qsyam程序的结构由一系列指令组成。一个 指令定义为一个操作,后面跟着它的参数。
操作
指令
cxq[0],q[1]
应用带有控制qubitq[0]
和目标qubitq[1]
的cnot操作。
有些操作将角度(以弧度为单位)作为参数。参数化操作
rz(pi/2)q[0]
围绕z轴旋转^ ^ {CD2>}π/2弧度。中允许使用表达式
参数化操作。支持的表达式运算符有+
、-
、*
、/
。
以及**
(电源)。为了方便起见,变量pi
是可用的。
伴随运算
要应用门的伴随,可以使用adj
关键字。例如,到
使用s(s匕首)的伴随:
adjsq[0]
操作列表
Gate | qsyASM operation |
---|---|
Pauli I | ^{ |
Pauli X | ^{ |
Pauli Y | ^{ |
Pauli Z | ^{ |
Hadamard | ^{ |
S | ^{ |
T | ^{ |
Rx | ^{ |
Ry | ^{ |
Rz | ^{ |
CNOT | ^{ |
CZ | ^{ |
CRx | ^{ |
CRy | ^{ |
CRz | ^{ |
Toffoli | ^{ |
寄存器
定义量子寄存器是通过qreg
操作完成的。指令
qreg[5]q
定义一个名为q
的5位量子寄存器。同样,经典寄存器(用于测量)可以定义为
creg[5]c
量子寄存器中的量子位初始化为0,经典寄存器中的位初始化为0。
测量
测量可以在单个量子位上进行,也可以在一个完整的量子态上进行。程序
qreg[5]qcreg[1]chq[0]measq[0],c[0]
测量q[0]
到c[0]
,折叠状态并将结果存储到c[0]
。只需将一个参数传递给meas
:
measq[0]
要测量完整的量子态,可以通过整个量子和经典寄存器:
qreg[3]qcreg[3]c; 3 qubit GHZ statehq[0]cxq[0],q[1]cxq[0],q[2]measq,c
折叠量子寄存器q
,并将测量结果存储在c
。只有当量子寄存器和经典寄存器大小相等时,这才有效。
稳定器电路的有效模拟
仅由cnot、h、s、x、y、z和cz门组成的电路可以有效地 用CHP后端模拟。对CHP使用任何其他操作 后端将导致错误。
例如,我们可以模拟一个部分纠缠的750量子比特态:
$ qsyasm examples/qsyasm/750_qubits.qs --backend=chp
c[750]: 000000000000000000000000000000000000000000000000001111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
此后端是由 Scott Aaronson和Daniel Gottesman在他们的论文“稳定器电路的改进模拟” (arXiv:quant-ph/0406196)。
许可证
这个项目是由麻省理工学院授权的。查看LICENSE文件 获得完整的许可证。