mindquantum.io

MindQuantum的输入/输出模块。

class mindquantum.io.BlochScene(config=None)[源代码]

在布洛赫球中展示单量子比特的量子态。

参数:
  • config (Union[dict, str]) - 布洛赫球风格配置文件。如果为 None ,系统将会使用内置的风格配置文件。除了内置格式,当前还支持 dark 风格。默认值: None

样例:

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> from mindquantum.core.gates import RX, RZ
>>> from mindquantum.io.display import BlochScene
>>> state = np.array([1, 1 + 1j])/np.sqrt(3)
>>> scene = BlochScene()
>>> fig, ax = scene.create_scene()
>>> scene.add_state(ax, state)
>>> plt.show()
>>> n_step = 100
>>> amps = np.zeros((n_step, 2), dtype=np.complex128)
>>> for i, angle in enumerate(np.linspace(0, np.pi * 2, n_step)):
...     state = RZ(angle).matrix() @ RX(np.pi / 4).matrix() @ np.array([[1], [0]])
...     state = state.T[0]
...     amps[i] = state
>>> scene = BlochScene('dark')
>>> fig, ax = scene.create_scene()
>>> scene.add_state(ax, np.array([1, 1 - 1j])/np.sqrt(3), with_proj=False)
>>> objs = scene.add_state(ax, amps[0], linecolor='r')
>>> anim = scene.animation(fig, ax, objs, amps,history_len=10)
>>> plt.show()
add_3d_arrow(ax, data, *args, **kwargs)[源代码]

在给定Axes中添加一个三维方向箭头。

参数:
  • ax (mpl_toolkits.mplot3d.axes3d.Axes3D) - 想要添加三维箭头的三维Axes。

  • data (list) - 具有六个元素的列表,其中前三个表示箭头的起始坐标,后三个表示箭头相对与起始位置的偏移量。

  • args (tuple) - FancyArrowPatch 所需要的其他位置参数。

  • kwargs (dict) - FancyArrowPatch 所需要的其他关键字参数。

add_ket_label(ax, *args, fontsize=None, **kwargs)[源代码]

在给定的Axes中设置布洛赫球坐标轴的右矢标签。

参数:
  • ax (mpl_toolkits.mplot3d.axes3d.Axes3D) - 想要添加右矢标签的三维Axes。

  • args (tuple) - 右矢标签中 matplotlibtext 对象的其他位置参数。

  • kwargs (dict) - 右矢标签中 matplotlibtext 对象的其他关键字参数。

  • fontsize (int) - 标签字体大小。如果为 None ,字体大小将取 BlochScene 的配置文件中键 ket_label_fs 对应的值。默认值: None

add_state(ax, amp, linecolor=None, linewidth=None, pointcolor=None, pointsize=None, marker=None, projcolor=None, mode=None, with_proj=None, stick_args=None, stick_kwargs=None, point_args=None, point_kwargs=None, proj_args=None, proj_kwargs=None)[源代码]

在布洛赫球中添加一个单比特量子态。

参数:
  • ax (mpl_toolkits.mplot3d.axes3d.Axes3D) - 想要添加量子态的三维Axes。

  • amp (numpy.ndarray) - 量子态。

  • linecolor (str) - 线的颜色。如果为 None ,系统将会从 BlochSceneconfig 中取键 stick_c 对应的值。默认值: None

  • linewidth (numbers.Number) - 线宽度。如果为 None ,系统将会从 BlochSceneconfig 中取键 stick_w 对应的值。默认值: None

  • pointcolor (str) - 顶点的颜色。如果为 None ,系统将会从 BlochSceneconfig 中取键 point_c 对应的值。默认值: None

  • pointsize (numbers.Number) - 顶点的大小。如果为 None ,系统将会从 BlochSceneconfig 中取键 point_s 对应的值。默认值: None

  • marker (str) - 顶点的标记。如果为 None ,系统将会从 BlochSceneconfig 中取键 point_m 对应的值。默认值: None

  • projcolor (str) - 投影线的颜色。如果为 None , 系统将会从 BlochSceneconfig 中取键 proj_c 对应的值。默认值: None

  • mode (str) - 怎样展示量子态。可以是 ‘stick’、 ‘point’ 或 ‘both’。如果为 None ,系统将会从 BlochSceneconfig 中取键 state_mode 对应的值。默认值: None

  • with_proj (bool) - 是否展示量子态在x、y和z轴上的投影。如果为 None ,系统将会从 BlochSceneconfig 中取键 with_proj 对应的值。默认值: None

  • stick_args (tuple) - 绘制量子态的轴线的位置参数。这些参数会被传入到 Axes3D.plot 中。默认值: None

  • stick_kwargs (dict) - 绘制量子态的轴线的关键字参数。这些参数会被传入到 Axes3D.plot 中。默认值: None

  • point_args (tuple) - 量子态端点的其他位置参数。这些参数会被传入到 Axes3D.scatter 中。默认值: None

  • point_kwargs (dict) - 量子态端点的其他关键字参数。这些参数会被传入到 Axes3D.scatter 中。默认值: None

  • proj_args (tuple) - 投影线的其他位置参数。这些参数会被传入到 Axes3D.plot 中。默认值: None

  • proj_kwargs (dict) - 投影线的其他关键字参数。这些参数会被传入到 Axes3D.plot 中。默认值: None

返回:

dict,由折线、端点和投影线构成的字典。

animation(fig, ax, objs, new_amps: np.ndarray, interval=15, with_trace=True, history_len=None, **kwargs)[源代码]

在布洛赫球上动画展示给定量子态。

参数:
  • fig (matplotlib.figure.Figure) - 布洛赫球场景所在的figure。

  • ax (mpl_toolkits.mplot3d.axes3d.Axes3D) - 布洛赫球场景所在的Axes。

  • objs (dict) - 通过 mindquantum.io.BlochScene.add_state 产生的对象。

  • new_amps (numpy.ndarray) - 所有需要动画展示的量子态。

  • interval (int) - 帧之间的时间间隔,单位为毫秒。默认值:15。

  • with_trace (bool) - 是否展示量子态动画的轨迹。默认值:True。

  • history_len (int) - 量子态动画的轨迹长度。如果为 None ,长度为所有需要动画展示的量子态的个数。默认自: None

  • kwargs (dict) - 传入 animation.FuncAnimation 的其他关键字参数。

返回:

animation.FuncAnimation,matplotlib中的动画句柄对象。

circle_xy(ax, *args, angle=np.pi / 2, **kwargs)[源代码]

在布洛赫球上绘制于xy平面平行的圆。

参数:
  • ax (mpl_toolkits.mplot3d.axes3d.Axes3D) - 想要绘制平行于xy平面的圆的Axes。

  • args (tuple) - 传入给 Axes3D.plot 的位置参数。

  • angle (numbers.Number) - 圆相对于z轴的仰角。默认值:π / 2。

  • kwargs (dict) - 传入给 Axes3D.plot 的关键字参数。

circle_yz(ax, *args, angle=0, **kwargs)[源代码]

在布洛赫球上绘制于yz平面平行的圆。

参数:
  • ax (mpl_toolkits.mplot3d.axes3d.Axes3D) - 想要绘制平行于yz平面的圆的Axes。

  • args (tuple) - 传入给 Axes3D.plot 的位置参数。

  • angle (numbers.Number) - 相对与z轴的旋转角度。默认值:0。

  • kwargs (dict) - 传入给 Axes3D.plot 的关键字参数。

create_scene()[源代码]

根据 BlochScene.config 创建默认的布洛赫球场景。

gen_fig_ax(boxes=None)[源代码]

创建一个三维的画布。

参数:
  • boxes (list) - 四维的浮点数数组,分别为左边界,底边,宽度和高度。如果为 None ,左边界和底边将为0,宽度和高度将为1。默认值: None

plot_slice(ax, x, y, z, frame_color, frame_alpha, surface_color, surface_alpha, frame_args=None, frame_kwargs=None, surface_args=None, surface_kwargs=None)[源代码]

在xy、yz和zx平面上创建参考平面。

参数:
  • ax (mpl_toolkits.mplot3d.axes3d.Axes3D) - 需要添加参考面的三维Axes。

  • x (numpy.ndarray) - 参考面的x轴坐标。

  • y (numpy.ndarray) - 参考面的y轴坐标。

  • z (numpy.ndarray) - 参考面的z轴坐标。

  • frame_color (str) - 边框的颜色。

  • frame_alpha (numbers.Number) - 边框的透明度。

  • surface_color (str) - 参考面的颜色。

  • surface_alpha (numbers.Number) - 参考面的透明度。

  • frame_args (tuple) - 传入给 Axes3D.plot_wireframe 的其他位置参数。

  • frame_kwargs (dict) - 传入给 Axes3D.plot_wireframe 的其他关键字参数。

  • surface_args (tuple) - 传入给 Axes3D.plot_surface 的其他位置参数。

  • surface_kwargs (dict) - 传入给 Axes3D.plot_surface 的其他关键字参数。

set_view(ax, elev=0, azim=0)[源代码]

以合适的角度来展示布洛赫球。

参数:
  • ax (mpl_toolkits.mplot3d.axes3d.Axes3D) - 需要设置视图的三维Axes。

  • elev (numbers.Number) - 以度为单位时,当前方位绕z轴转动的角度。

  • azim (numbers.Number) - 以度为单位时,当前方位相对与 (x, y) 平面的仰角。默认值:0。

static state_to_cor(amp: np.ndarray)[源代码]

将单比特量子态转化为布洛赫球上的三维坐标。

参数:
  • amp (numpy.ndarray) - 单比特量子态。

返回:

numpy.ndarray,量子态在布洛赫球中的三维坐标。

update(objs: dict, new_amp: np.ndarray)[源代码]

利用给定的量子态来更新通过 mindquantum.io.BlochScene.add_state 接口输出的对象。

参数:
class mindquantum.io.HiQASM[源代码]

将线路转换为HiQASM格式。

样例:

>>> import numpy as np
>>> from mindquantum.io.qasm import HiQASM
>>> from mindquantum.core import Circuit
>>> circuit = Circuit().rx(0.3, 0).z(0, 1).zz(np.pi, [0, 1])
>>> HiQASM = HiQASM()
>>> circuit_str = HiQASM.to_string(circuit)
>>> print(circuit_str[68: 80])
CZ q[1],q[0]
>>> circuit_2 = HiQASM.from_string(circuit_str)
>>> circuit_2
q0: ──RX(3/10)────Z────ZZ(π)──
                  │      │
q1: ──────────────●────ZZ(π)──
from_file(file_name)[源代码]

读取HiQASM文件。

参数:
  • file_name (str) - 以HiQASM格式存储量子线路的文件路径。

返回:

线路,从HiQASM文件转换过来的量子线路。

from_string(string)[源代码]

读取HiQASM字符串。

参数:
  • string (str) - 线路的HiQASM字符串。

返回:

线路,从HiQASM字符串转换过来的量子线路。

to_file(file_name, circuit, version='0.1')[源代码]

将量子线路转换为HiQASM格式并保存在文件中。

参数:
  • file_name (str) - 需要保存成HiQASM文件的文件名。

  • circuit (Circuit) - 需要转换的线路。

  • version (str) - HiQASM的版本。默认值:”0.1”。

异常:
  • TypeError - 如果 file_name 类型不是str。

  • TypeError - 如果 Circuit 类型不是circuit。

  • TypeError - 如果 version 类型不是str。

to_string(circuit, version='0.1')[源代码]

将量子线路转换为HiQASM。

参数:
  • circuit (Circuit) - 需要转换为HiQASM的量子线路。

  • version (str) - 需要使用的HiQASM版本。默认值:”0.1”。

返回:

str,输入线路对应的HiQASM格式。

异常:
  • TypeError - 如果 Circuit 类型不是circuit。

  • TypeError - 如果 version 类型不是str。

  • NotImplementedError - 如果HiQASM版本未实现。

  • ValueError - 如果在此版本中没有实现门。

class mindquantum.io.OpenQASM[源代码]

将电路转换为openqasm格式的模块。

样例:

>>> import numpy as np
>>> from mindquantum.core import Circuit
>>> from mindquantum.io import OpenQASM
>>> circuit = Circuit().rx(0.3, 0).z(0, 1).zz(np.pi, [0, 1])
>>> openqasm = OpenQASM()
>>> circuit_str = openqasm.to_string(circuit)
>>> circuit_str[47:60]
'rx(0.3) q[0];'
from_file(file_name)[源代码]

读取openqasm文件。

参数:
  • file_name (str) - 以openqasm格式存储量子线路的文件路径。

返回:

Circuit,从openqasm文件翻译过来的量子线路。

to_file(file_name, circuit, version='2.0')[源代码]

将量子线路转换为openqasm格式并保存在文件中。

参数:
  • file_name (str) - 要保存openqasm文件的文件名。

  • circuit (Circuit) - 要转换的电路。

  • version (str) - openqasm的版本。默认值:”2.0”。

异常:
  • TypeError - 如果 file_name 不是 str

  • TypeError - 如果 电路 不是 Circuit

  • TypeError - 如果 version 不是 str

to_string(circuit, version='2.0')[源代码]

将电路转换为openqasm。

参数:
  • circuit (Circuit) - 要转换为openqasm的量子线路。

  • version (str) - 要使用的openqasm版本。默认值:”2.0”。

返回:

str,输入电路的openqasm格式。

异常:
  • TypeError - 如果电路不是 Circuit

  • TypeError - 如果版本不是 str

  • NotImplementedError - 如果openqasm版本未实现。

  • ValueError - 如果在此版本中没有实现门。

mindquantum.io.bprint(strings: list, align=':', title='', v_around='=', h_around='|', fill_char=' ')[源代码]

以block形状打印信息。

参数:
  • strings (list[str]) - 需要输出的信息。

  • align (str) - 仅对齐字符的垂直方向,默认值:”:”。

  • title (str) - 此信息块的标题,默认值:””。

  • v_around (str) - 垂直边界字符,默认值:”=”。

  • h_around (str) - 水平边界字符,默认值:”|”。

  • fill_char (str) - 用该字符填充空格。默认值:””。

返回:

列表,格式化字符串的列表。

样例:

>>> from mindquantum.io import bprint
>>> title='Info of Bob'
>>> o = bprint(['Name:Bob', 'Age:17', 'Nationality:China'],
...     title=title)
>>> for i in o:
...     print(i)
====Info of Bob====
|Name       :Bob  |
|Age        :17   |
|Nationality:China|
===================
mindquantum.io.random_hiqasm(n_qubits, gate_num, version='0.1', seed=42)[源代码]

生成随机的hiqasm格式支持的量子线路。

参数:
  • n_qubits (int) - 此量子线路中的量子比特总数。

  • gate_num (int) - 此量子线路中的门总数。

  • version (str) - HIQASM的版本。默认值:”0.1”。

  • seed (int) - 生成此随机量子线路的随机种子。默认值:42。

返回:

str,HIQASM格式的量子线路。

样例:

>>> from mindquantum.io import random_hiqasm
>>> from mindquantum.io import HiQASM
>>> HiQASM_str = random_hiqasm(2, 5)
>>> HiQASM = HiQASM()
>>> circuit = HiQASM.from_string(HiQASM_str)
>>> circuit
q0: ──RZ(-2.513)────RZ(-3.012)────RX(0.738)────M(k0)───────────

q1: ──────S───────────────────────────●──────────Z──────M(k1)──