qurator-vscode¶
一种基于VS Code的量子程序开发工具¶
qurator-vscode 是本源量子推出的一款可以开发量子程序的 VS Code 插件。其支持 QRunes2 语言量子程序开发,并支持 Python 和 C++ 语言作为经典宿主语言。
在 qurator-vscode 中,量子程序的开发主要分为编写和运行两个部分。
- 编写程序:插件支持模块化编程,在不同的模块实现不同的功能,其中量子程序的编写主要在 qcodes 模块中;
- 程序运行:即是收集结果的过程,插件支持图表化数据展示,将运行结果更加清晰的展现在您的面前。
qurator-vscode 设计思想¶
考虑到目前量子程序的开发离不开经典宿主语言的辅助,qurator-vscode 插件设计时考虑到一下几点:
1. 模块编程:¶
qurator-vscode 插件支持模块编程,将整体程序分为三个模块:settings、qcodes 和 script 模块。在不同的模块完成不同的功能。 在 settings 模块中,您可以进行宿主语言类型、编译还是运行等设置;在 qcodes 模块中, 您可以编写 QRunes2 语言程序; 在 script 模块中,您可以编写相应的宿主语言程序。
2. 切换简单:¶
qurator-vscode 插件目前支持两种宿主语言,分别为 Python 和 C++。您可以在两种宿主语言之间自由的切换,您只需要在 settings 模块中设置 language 的 类型,就可以在 script 模块中编写对应宿主语言的代码。插件会自动识别您所选择的宿主语言,并在 script 模块中提供相应的辅助功能。
3. 图形展示:¶
qurator-vscode 插件提供图形化的结果展示,程序运行后会展示 json 格式的运行结果,您可以点击运行结果,会生成相应的柱状图,方便您对运行结果的分析。
目录:
准备工作¶
使用 qurator-vscode 插件之前需要做一些准备工作,以确保量子程序能够正确的运行。
需要依赖的运行环境有:
- Python (版本 3.5以上版本)
- Pip (版本 9.0 及以上)
- MinGw-w64 (Windows 64位版本)
其中,pip 负责下载宿主语言为 Python 时程序运行所依赖的包。MinGw-w64 是宿主语言为 C++ 时程序运行所依赖的包。
1. 安装插件¶
首先需要您安装 VS Code ,然后打开 VS Code 安装 qurator-vscode 插件: 使用 Ctrl + Shift + X 快捷键打开插件页面,或者您可以在最左侧栏找到 Extensions 点击进入,然后输入 qurator-vscode 来搜索插件,点击 Install 按钮进行插件的安装。

2. 检测运行环境¶
插件安装好之后,您可以创建以 .qrunes 结尾的文件,此时插件会自动检测是否存在程序运行所依赖的环境。您也可以自己检测程序运行环境,使用 Ctrl + Shift + P 快捷键打开 VS Code 命令行, 输入 qurator-vscode 时您可以看到 qurator-vscode: Check Qurator VSCode Extension dependencies 选择项,点击此项就可以进行运行环境的检测。

检测到运行时所需环境,会在右下角展示软件及版本号:

快速入门¶
在做好准备工作之后,下面就可以编写属于您自己的量子程序了。
1.项目文件夹中启动 VS Code¶
在命令提示符或终端上,创建一个名为 “test” 的空文件夹,切换到该文件夹,然后输入命令 code . 在该文件夹中打开 VS Code:
mkdir test
cd test
code .
或者,您可以点击运行 VS Code,然后点击 “File” > “Open File…” 打开项目文件夹。
在文件夹中启动 VS Code,该文件夹将成为您的“工作区”。您可以在 .vscode/settings.json 文件中更改工作区的相关设置。
3.编写量子程序¶
qrunes 文件创建完成之后,便可以编写量子程序了。整个量子程序分为三个部分:settings、qcodes 和 script 三个模块。
其中,settings 模块中可以设置宿主语言,编译还是运行;qcodes 模块中可以编写 QRunes2 量子语言代码; script 模块中可以编写宿主语言代码,目前支持 Python 和 C++ 两种宿主语言。
@settings:
language = Python;
autoimport = True;
compile_only = False;
@qcodes:
circuit CRotate(vector<qubit> q) {
qubit controlVector[];
controlVector.append(q[1]);
controlVector.append(q[2]);
X(q[1]);
RY(q[0], Pi).control(controlVector);
X(q[1]);
X(q[2]);
RY(q[0], Pi/3).control(controlVector);
X(q[2]);
RY(q[0], 0.679673818908).control(controlVector); //arcsin(1/3)
}
//Phase estimation algorithms
circuit hhlPse(vector<qubit> q) {
H(q[1]);
H(q[2]);
RZ(q[2], 0.75*Pi);
CU(Pi, 1.5*Pi, -0.5*Pi, Pi/2, q[2], q[3]);
RZ(q[1], 1.5*Pi);
CU(Pi, 1.5*Pi, -Pi, Pi/2, q[1], q[3]);
CNOT(q[1], q[2]);
CNOT(q[2], q[1]);
CNOT(q[1], q[2]);
H(q[2]);
CU(-0.25*Pi, -0.5*Pi, 0, 0, q[2], q[1]);
H(q[1]);
}
hhl_no_measure(vector<qubit> qlist, vector<int> clist) {
//phase estimation
hhlPse(qlist);
//rotate
CRotate(qlist);
}
@script:
if __name__ == '__main__':
machine = init_quantum_machine(QMachineType.CPU)
qubit_num = 4
cbit_num = 2
qv = machine.qAlloc_many(qubit_num)
cv = machine.cAlloc_many(cbit_num)
hhlprog = QProg()
hhlprog.insert(RY(qv[3], 3.14159265358979/2)) #change vecotr b in equation Ax=b
hhlprog.insert(hhl_no_measure(qv, cv))
directly_run(hhlprog)
pmeas_q = []
pmeas_q.append(qv[3])
res = PMeasure_no_index(pmeas_q)
print(res)
finalize()
4.编译运行¶
点击右上方 Run this QRunes 或者使用命令提示符 qurator-vscode: Run this QRunes 进行配置(快捷键 F5):


配置页面如下所示:

如上有三种配置:模拟芯片、真实芯片、自定义拓扑结构 共五种运行方式,孤立运行.
模拟芯片: 选择Qpanda或Qiskit点击run获取运行结果
真实芯片: 选择IBM Quantum Experience并选择芯片类型及apikey点击run获取运行结果
自定义拓扑结构:
①构造拓扑结构(注:拓扑图中的比特数一定要大于等于申请的量子比特数)

②点击next选择模式

③点击next自定义选择
在某一个模式的基础上对逻辑门进行增删

④完成上面三步之后点击run获取运行结果
上述示例程序的运行结果如下:

功能介绍¶
相信在快速入门步骤之后,您已大体了解插件的整体功能,下面将介绍您在编辑量子程序过程中插件提供的辅助功能:
5. 智能片段¶
智能片段功能是指用户输入简短的触发指令而生成完整的代码片段,在本插件中内置了自定义代码片段, 可帮助您整理一些重复性代码,提高开发效率。

插件支持的片段有:
片段 | 简介 |
---|---|
@settings4py | 宿主语言为 Python 时的 settings 模块片段 |
@settings4cpp | 宿主语言为 Cpp 时的 settings 模块片段 |
@qco | qcodes 模块片段 |
@script4py | 宿主语言为 Python 时的 script 模块片段 |
@script4cpp | 宿主语言为 Cpp 时的 script 模块片段 |
@sqs4py | 宿主语言为 Python 时的三个模块片段 |
@sqs4cpp | 宿主语言为 Cpp 时的三个模块片段 |
quanmac | 宿主语言为 Python 时 init_quantum_machine 方法参数 |
6. 语言切换¶
目前 QRunes2 语言可以支持 Python 及 C++ 宿主语言,您可以在 settings 模块的 language 关键字来设置 所需支持的语言类型,就可以在script模块编写相应语言的代码。

Change Log¶
0.1.1 - 2019-03-01¶
add¶
- 增加了对Ubuntu系统的支持。
- 增加了对C++自动完成和悬停的支持。
- 更新了snippets函数。
- 添加了对某些关键字突出显示的支持。
- 增加了用户手册。
update¶
- 修正了使用不同编码的python的自动完成。
- 修正了qcode提示的混乱代码。
- 修正了对错误的qrunes标签(@settings、@qcode和@script)的验证。