A.1 安装pyezQ SDK包¶
在Python环境下,安装pyezQ SDK 中科院量子信息与量子科技创新研究院量子计算机的远程调用SDK包
如果你没安装过ezQpy,请将光标点击进入下面的命令行中,并同时按下Ctrl+Enter键,运行安装指令。后继指令运行方法相同。
In [ ]:
Copied!
pip install --upgrade pyezQ -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade pyezQ -i https://pypi.tuna.tsinghua.edu.cn/simple
提示输出中有类似成功字样,即为安装成功。更新安装成功后,需要重启python内核,以便最新包生效。
Installing collected packages: pyezQ
Successfully installed pyezQ-1.0.1
当前pyezQ版本为1.0.1, 在高性能量子计算机内测器件SDK可能更新较频繁,请注意及时更新到最新版本SDK。
A.2 安装Quingo编译器¶
在Python环境下,安装Quingo编译器
如果你没有安装过Quingo编译器,请依次执行下述两条指令。
In [ ]:
Copied!
pip install --upgrade quingo -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装Quingo Runtime
# 如果安装成功,你可能看到如下输出:
# Note: you may need to restart the kernel to use updated packages.
pip install --upgrade quingo -i https://pypi.tuna.tsinghua.edu.cn/simple
#安装Quingo Runtime
# 如果安装成功,你可能看到如下输出:
# Note: you may need to restart the kernel to use updated packages.
In [ ]:
Copied!
from quingo.install_quingoc import *
default_path = Path.home() / '.quingo'
quingoc_path = distutils.spawn.find_executable(
'quingoc', str(default_path))
if quingoc_path is None:
quingoc_path = distutils.spawn.find_executable('quingoc')
if quingoc_path is None:
download_and_install_latest_quingoc()
else:
if quingoc_path[0] != '"':
quingoc_path = '"{}"'.format(quingoc_path)
if check_update(quingoc_path):
download_and_install_latest_quingoc(pathlib.Path(quingoc_path))
#安装Quingo编译器
from quingo.install_quingoc import *
default_path = Path.home() / '.quingo'
quingoc_path = distutils.spawn.find_executable(
'quingoc', str(default_path))
if quingoc_path is None:
quingoc_path = distutils.spawn.find_executable('quingoc')
if quingoc_path is None:
download_and_install_latest_quingoc()
else:
if quingoc_path[0] != '"':
quingoc_path = '"{}"'.format(quingoc_path)
if check_update(quingoc_path):
download_and_install_latest_quingoc(pathlib.Path(quingoc_path))
#安装Quingo编译器
如果使用非JupyterLab的环境,则安装过程为直接在命令行中执行以下两行
pip install --upgrade quingo
python -m quingo.install_quingoc
配置quingo编译器路径
In [ ]:
Copied!
from quingo.core.compiler_config import set_mlir_compiler_path
import os
# 请将下面括号中的路径修改为quingoc可执行文件所在的目录。请确认quingoc可执行文件在该目录下。
# 在linux和Mac下,该路径可能是~/.local/bin/quingoc
set_mlir_compiler_path(os.path.expanduser('~/.local/bin/quingoc'))
# 在windows下,该路径可能是~\.quingo\quingoc.exe
# set_mlir_compiler_path(os.path.expanduser(r'~\.quingo\quingoc.exe'))
from quingo.core.compiler_config import set_mlir_compiler_path
import os
# 请将下面括号中的路径修改为quingoc可执行文件所在的目录。请确认quingoc可执行文件在该目录下。
# 在linux和Mac下,该路径可能是~/.local/bin/quingoc
set_mlir_compiler_path(os.path.expanduser('~/.local/bin/quingoc'))
# 在windows下,该路径可能是~\.quingo\quingoc.exe
# set_mlir_compiler_path(os.path.expanduser(r'~\.quingo\quingoc.exe'))
将std_qcis.qu文件添加到编译器默认搜索路径中
该部分随不同版本发布会自动提供,如果未提示无法找到std_qcis.qu文件,可以不用安装。
In [ ]:
Copied!
from pathlib import Path
std_qcis = '''
// measurement
opaque MEASURE (qs: qubit[]): bool[]; // measure a list of qubits.
opaque measure (q: qubit): bool; // measure a list of qubits.
// single-qubit gates
opaque X (q:qubit): unit; // Rx( pi )
opaque X2P (q:qubit): unit; // Rx( pi/2)
opaque X2M (q:qubit): unit; // Rx(-pi/2)
opaque RX(q: qubit, angle: double) : unit;
opaque Y (q:qubit): unit; // Ry( pi )
opaque Y2P (q:qubit): unit; // Ry( pi/2)
opaque Y2M (q:qubit): unit; // Ry(-pi/2)
opaque RY(q: qubit, angle: double) : unit;
opaque RZ (q:qubit, angle:double): unit; // Rz(angle)
opaque Z (q:qubit): unit; // Rz( pi )
opaque Z2P (q:qubit): unit; // Rz( pi/2)
opaque Z2M (q:qubit): unit; // Rz(-pi/2)
opaque Z4P (q:qubit): unit; // Rz( pi/4)
opaque Z4M (q:qubit): unit; // Rz(-pi/4)
opaque H (q:qubit): unit; // Hadamard
opaque S(q: qubit) : unit;
opaque SD(q: qubit) : unit;
opaque T(q: qubit) : unit;
opaque TD(q: qubit) : unit;
// This operation performs the following rotation on the state:
// - the angle between the positive x-axis and the rotation axis is `azimuth`;
// - the rotation angle is `angle`.
opaque XYARB (q:qubit, azimuth:double, angle:double): unit;
// two-qubit gates
opaque CZ (control_qubit:qubit, target_qubit:qubit ): unit; // CPhase gate
'''
inc_dir = Path.home() / '.quingo' / 'include'
inc_dir.mkdir(parents=True, exist_ok=True)
std_qcis_fn = inc_dir / 'std_qcis.qu'
with std_qcis_fn.open('w') as f:
f.write(std_qcis)
#将std_qcis.qu文件写入到编译器搜索路径中,也可以直接复制该文件放到指定位置。
from pathlib import Path
std_qcis = '''
// measurement
opaque MEASURE (qs: qubit[]): bool[]; // measure a list of qubits.
opaque measure (q: qubit): bool; // measure a list of qubits.
// single-qubit gates
opaque X (q:qubit): unit; // Rx( pi )
opaque X2P (q:qubit): unit; // Rx( pi/2)
opaque X2M (q:qubit): unit; // Rx(-pi/2)
opaque RX(q: qubit, angle: double) : unit;
opaque Y (q:qubit): unit; // Ry( pi )
opaque Y2P (q:qubit): unit; // Ry( pi/2)
opaque Y2M (q:qubit): unit; // Ry(-pi/2)
opaque RY(q: qubit, angle: double) : unit;
opaque RZ (q:qubit, angle:double): unit; // Rz(angle)
opaque Z (q:qubit): unit; // Rz( pi )
opaque Z2P (q:qubit): unit; // Rz( pi/2)
opaque Z2M (q:qubit): unit; // Rz(-pi/2)
opaque Z4P (q:qubit): unit; // Rz( pi/4)
opaque Z4M (q:qubit): unit; // Rz(-pi/4)
opaque H (q:qubit): unit; // Hadamard
opaque S(q: qubit) : unit;
opaque SD(q: qubit) : unit;
opaque T(q: qubit) : unit;
opaque TD(q: qubit) : unit;
// This operation performs the following rotation on the state:
// - the angle between the positive x-axis and the rotation axis is `azimuth`;
// - the rotation angle is `angle`.
opaque XYARB (q:qubit, azimuth:double, angle:double): unit;
// two-qubit gates
opaque CZ (control_qubit:qubit, target_qubit:qubit ): unit; // CPhase gate
'''
inc_dir = Path.home() / '.quingo' / 'include'
inc_dir.mkdir(parents=True, exist_ok=True)
std_qcis_fn = inc_dir / 'std_qcis.qu'
with std_qcis_fn.open('w') as f:
f.write(std_qcis)
#将std_qcis.qu文件写入到编译器搜索路径中,也可以直接复制该文件放到指定位置。
A.3 安装isQ编译器¶
在Python环境下,安装isQ编译器
isQ 官方专用教程,详见这里:http://www.arclightquantum.com/isq-core/index.html
如果你没有安装过isQ编译器,请在命令行模式下执行下述指令。
In [ ]:
Copied!
pip install --upgrade isqopen -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install --upgrade isqopen -i https://pypi.tuna.tsinghua.edu.cn/simple