QuEST 的 Python 接口,早期开发访问。
项目描述
pyQuEST
主要用 Cython 编写的 Quantum Exact Simulation Toolkit (QuEST) 的 Python 接口。
入门
克隆存储库后
$ git clone -b develop --recursive https://github.com/rrmeister/pyQuEST
$ cd pyQuEST
建议创建一个虚拟环境,例如使用venv
.
$ python3 -m venv .
$ source bin/activate
要为多线程、GPU 使用、浮点精度等配置 QuEST 后端,请查看 QuEST 构建文档。
然后可以使用 pip 安装该软件包。
$ pip3 install .
用法
安装成功后,我们可以通过导入pyQuEST并查看它运行的环境来测试它。
In [1]: import pyquest
In [2]: pyquest.env
Out[2]: QuESTEnvironment(cuda=False, openmp=False, mpi=False, num_threads=1, num_ranks=1, precision=2)
该类QuESTEnvironment
在模块导入时自动实例化一次,并且永远不需要用户调用。它包含内部结构,可以返回有关执行环境的信息,如上所述。
例子
最重要的类是Register
表示一个量子寄存器,以及可以应用于它的运算符。让我们创建一个具有 3 个量子位的寄存器并查看其内容。
In [3]: from pyquest import Register
In [4]: from pyquest.unitaries import *
In [5]: reg = Register(3)
In [6]: reg[:]
Out[6]: array([1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j])
与 QuEST 一样,状态自动初始化为全零乘积状态。要对其应用一些门,首先导入一些单一的和Circuit
类。
In [7]: from pyquest.unitaries import H, X, Ry
In [8]: from pyquest import Circuit
算子由它们的类及其目标量子位构成,然后是任何附加参数(如旋转角度),然后是控制量子位作为仅关键字参数,例如,Ry(0, .2, controls=[1])
通过以下方式创建围绕布洛赫球体 y 轴的旋转算子qubit 0 上的 0.2 弧度,由 qubit 1 控制。单个运算符可以应用于reg
具有reg.apply_operator(X(1))
. 要一次应用多个运算符,首先将它们收集到一个Circuit
.
In [9]: circ = Circuit([H(0), X(2, controls=[0]), Ry(1, .23, controls=[2])])
In [10]: reg.apply_circuit(circ)
In [11]: reg[:]
Out[11]:
array([0.70710678+0.j, 0. +0.j, 0. +0.j, 0. +0.j,
0. +0.j, 0.70243619+0.j, 0. +0.j, 0.08113816+0.j])
将两个寄存器相乘将返回它们的内积。例如,期望值X(1)
为
In [12]: temp = Register(copy_reg=reg)
In [13]: temp.apply_operator(X(1))
In [14]: reg * temp
Out[14]: (0.11398876176759418+0j)
测量可以用
In [15]: from pyquest.gates import M
In [16]: reg.apply_operator(M(1))
Out[16]: [0]
请记住,测量具有破坏性。
In [17]: reg[:]
Out[17]:
array([0.70944592+0.j, 0. +0.j, 0. +0.j, 0. +0.j,
0. +0.j, 0.70475988+0.j, 0. +0.j, 0. +0.j])
寄存器也可以直接修改,但如果没有正确规范化,则可能最终处于无效状态。
In [18]: reg[:] = 0
In [19]: reg[:]
Out[19]: array([0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j])
In [20]: reg[4] = 1j
In [21]: reg[:]
Out[21]: array([0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j, 0.+1.j, 0.+0.j, 0.+0.j, 0.+0.j])
有关哪些运算符可用以及 and 的所有方法的更多详细信息Register
,Circuit
现在请查看源文件中的文档。
发展
如果您想为项目做出贡献或只是玩弄源代码,您可以使用可编辑安装
$ pip3 install -e .
但这会在每次编译项目时临时重新安装构建要求,并使pyquest
源目录与构建工件杂乱无章。因此,最好手动安装构建要求
$ pip3 install -r build_requirements.txt
然后打电话
$ python3 setup.py build
在文件夹中构建 pyQuEST _skbuild/<os_id>/cmake-install/pyquest
,或使用
$ python3 setup.py install
安装包而不告诉pip
它。这实际上只建议在虚拟环境中使用。