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 按钮进行插件的安装。

_images/extension.png
2. 检测运行环境

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

_images/checkDependencies.png

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

_images/checkSuccess.png

快速入门

在做好准备工作之后,下面就可以编写属于您自己的量子程序了。

1.项目文件夹中启动 VS Code

在命令提示符或终端上,创建一个名为 “test” 的空文件夹,切换到该文件夹,然后输入命令 code . 在该文件夹中打开 VS Code:

mkdir test
cd test
code .

或者,您可以点击运行 VS Code,然后点击 “File” > “Open File…” 打开项目文件夹。

在文件夹中启动 VS Code,该文件夹将成为您的“工作区”。您可以在 .vscode/settings.json 文件中更改工作区的相关设置。

2.创建一个 qrunes 文件

在文件资源管理器工具栏中,单击 “test” 文件夹上的 “New File” 按钮,并命名该文件为 qurator_test.qrunes。

_images/qurator_test.png
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):

_images/runQRunes.png _images/runQRunes2.png

配置页面如下所示:

_images/run_1.png

如上有三种配置:模拟芯片、真实芯片、自定义拓扑结构 共五种运行方式,孤立运行.

模拟芯片: 选择Qpanda或Qiskit点击run获取运行结果

真实芯片: 选择IBM Quantum Experience并选择芯片类型及apikey点击run获取运行结果

自定义拓扑结构:

①构造拓扑结构(注:拓扑图中的比特数一定要大于等于申请的量子比特数)

_images/run_2.png

②点击next选择模式

_images/run_3.png

③点击next自定义选择

在某一个模式的基础上对逻辑门进行增删

_images/run_4.png

④完成上面三步之后点击run获取运行结果

上述示例程序的运行结果如下:

_images/result.png

功能介绍

相信在快速入门步骤之后,您已大体了解插件的整体功能,下面将介绍您在编辑量子程序过程中插件提供的辅助功能:

1. 自动补全

对于 QRunes2 语言内设的关键字可以智能提示,根据输入的字符列为您提供当前上下文中适用的最相关符号列表并提示其功能, 以便您可以更快地选择。

_images/autoComplete.gif
2. 验证提示

对于输入进行验证并提示。每当插件检测到您编写的代码发生语法错误时,编辑器中会显示红色波浪线, 鼠标放上去可看到一系列错误信息,您可以准确定位错误发生的位置。

_images/validation.gif
3. 高亮展示

不同的模块有不同的颜色划分,您可以清晰地编写每一个模块的代码,一目了然,快速开发。

_images/highlight.png
4. 悬浮提示

QRunes2 语言中的方法、变量都有详细的解释及用法。每当您编写 QRunes2 语言内设关键字时, 将鼠标放在该关键字上,编辑器将会显示该关键字的功能信息。

_images/hover.gif
5. 智能片段

智能片段功能是指用户输入简短的触发指令而生成完整的代码片段,在本插件中内置了自定义代码片段, 可帮助您整理一些重复性代码,提高开发效率。

_images/snippet.gif

插件支持的片段有:

片段 简介
@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模块编写相应语言的代码。

_images/languageChange.gif
7. 定义跳转

定义跳转功能是指:在qcodes部分快速定位所调用的方法。

_images/Jump_definition.gif
8. 编译运行

运行 QRunes2 语言代码,编译器会根据设定的语言去编译该代码,从而实现不同的语言编写生成相同的结构。

_images/run.gif

Change Log

0.1.1 - 2019-03-01
add
  1. 增加了对Ubuntu系统的支持。
  2. 增加了对C++自动完成和悬停的支持。
  3. 更新了snippets函数。
  4. 添加了对某些关键字突出显示的支持。
  5. 增加了用户手册。
update
  1. 修正了使用不同编码的python的自动完成。
  2. 修正了qcode提示的混乱代码。
  3. 修正了对错误的qrunes标签(@settings、@qcode和@script)的验证。
0.1.2 - 2019-04-24
add
  1. 增加了WebView命令来展示结果窗口。
update
  1. 删除vscode.previewhtml命令。
  2. 修复了@settings部分的验证。
0.1.3 - 2019-05-09
update
  1. 修改pyqpanda包指定版本。
0.1.4 - 2019-08-27
add
  1. 增加了定义跳转功能。
  2. 增加了终端调用功能。
  3. 增加了支持while循环。
  4. 增加了逻辑门dagger、control操作。
update
  1. 修改语法规则。
0.1.5 - 2020-06-30
add
  1. 增加了消除qif和qwhile转换功能。
update
  1. 修改变量命名语法。
0.1.6 - 2020-08-28
add
  1. 增加了模拟器。
  2. 增加了真实芯片。
  3. 增加了自定义拓扑结构。
  4. 增加了语法验证。