量子计算机状态向量/稳定器电路模拟器及汇编语言

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]
操作列表
GateqsyASM 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文件 获得完整的许可证。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
NetBeans中的Java Swing滚动窗格   java如何与具有复合键的表建立关系?   Android中读取文件时java数据丢失   java黄瓜场景。embed在ubuntu机器上不工作?   java从spring mvc控制器操作中,我如何获得请求/响应的访问权限?   java减去两个长值   java选择下一个值firebase 安卓   用于起始和结尾连字符的java正则表达式   Java正则表达式解释   java Lifefay freemarker ADT:方法不可用?   java我怎样才能让我的开关盒作用于JFrame?   java在我的场景中使用连接池的理想方式是什么   java我如何接受jsoup的cookies?   java如何将整数数组更改为字符串数组?   java Android操作\u指针\u向上直到剩余触摸移动时才调用   java为什么gradle会出错?   io如何在java中复制/拆分输入流?   java使JButton不可见,但尊重其原始空间   java Spring提交表单获取复选框值不起作用