Skip to main content

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 的所有方法的更多详细信息RegisterCircuit现在请查看源文件中的文档。

发展

如果您想为项目做出贡献或只是玩弄源代码,您可以使用可编辑安装

$ 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它。这实际上只建议在虚拟环境中使用。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyquest-develop-0.0.1a0.dev1.tar.gz (2.3 MB 查看哈希

已上传 source