mindquantum.device.QubitsTopology

查看源文件
class mindquantum.device.QubitsTopology(qubits: List[QubitNode])[源代码]

量子比特在硬件设备上的拓扑结构图。

拓扑结构是由不同的 QubitNode 构成,并且你可以直接设置每一个量子比特的信息。

参数:
  • qubits (List[QubitNode]) - 拓扑结构中的所有量子比特。

样例:

>>> from mindquantum.device import QubitsTopology
>>> from mindquantum.device import QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology[0] >> topology[1]
>>> topology.is_coupled_with(0, 1)
True
>>> topology.set_color(0, "#121212")
>>> topology[0].color
'#121212'
add_qubit_node(qubit: QubitNode)[源代码]

在拓扑结构中添加一个量子比特。

参数:
  • qubit (QubitNode) - 想要添加到拓扑结构中的量子比特。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(2)])
>>> topology.add_qubit_node(QubitNode(2));
>>> topology.all_qubit_id()
{0, 1, 2}
all_qubit_id()[源代码]

获取所有比特的 id 信息。

返回:

Set[int],所有比特的 id。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(2)])
>>> topology.add_qubit_node(QubitNode(2));
>>> topology.all_qubit_id()
{0, 1, 2}
choose(ids: List[int])[源代码]

根据给定的 id 选择量子比特。

参数:
  • ids (List[int]) - 一个量子比特 id 的列表。

返回:

List[QubitNode],根据给定 id 选择出的量子比特列表。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology[0] >> topology[1] >> topology[2]
>>> nodes = topology.choose([0, 1])
>>> print(nodes[0].qubit_id, nodes[1].qubit_id)
0 1
compress()[源代码]

对拓扑结构中的比特重新编码,以使得新的拓扑结构中的比特从0开始以1为步长递增。

返回:

Tuple[ QubitsTopology , Dict[int, int]],第一个元素是压缩后的拓扑结构,第二个元素是比特映射关系字典,其中键为旧比特序号,值为新比特序号。

样例:

>>> from mindquantum.device import LinearQubits
>>> topo1 = LinearQubits(5)
>>> topo1.remove_qubit_node(0)
>>> topo1.remove_qubit_node(2)
>>> topo2, qubit_map = topo1.compress()
>>> print(topo2.edges_with_id())
{(1, 2)}
>>> print(qubit_map)
{1: 0, 3: 1, 4: 2}
edges_with_id()[源代码]

返回用 id 表示的图中的边。

返回:

Set[Tuple[int, int]],量子拓扑结构中相连接的量子比特所在的边。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(2)])
>>> topology[0] << topology[1]
>>> topology.edges_with_id()
{(0, 1)}
edges_with_poi()[源代码]

返回用坐标表示的图中的边。

返回:

Set[Tuple[Tuple[float, float], Tuple[float, float]]],量子拓扑结构中相连接的量子比特所在的边,用坐标表示。

样例:

>>> from mindquantum.device import QubitNode, QubitsTopology
>>> q0 = QubitNode(0, poi_x=0, poi_y=0)
>>> q1 = QubitNode(1, poi_x=1, poi_y=0)
>>> q0 >> q1
>>> topology = QubitsTopology([q0, q1])
>>> topology.edges_with_poi()
{((0, 0), (1, 0))}
get_edge_color(qubit_id1: int, qubit_id2: int)[源代码]

获取边的颜色。

qubit_id1 和 qubit_id2 的顺序不重要。

参数:
  • qubit_id1 (int) - 边的第一个比特序号。

  • qubit_id2 (int) - 边的第二个比特序号。

has_qubit_node(qubit_id: int)[源代码]

检查某个量子比特是否在该拓扑结构中。

参数:
  • qubit_id (int) - 想要检查的量子比特的 id。

返回:

bool,当前拓扑结构是否拥有给定 id 的比特。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(2)])
>>> topology.has_qubit_node(0)
True
is_coupled_with(id1: int, id2: int)[源代码]

检查两个比特是否联通,也即是否有耦合。

参数:
  • id1 (int) - 第一个比特的 id。

  • id2 (int) - 另外一个比特的 id。

返回:

bool,给定的两个比特是否联通。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(2)])
>>> topology.is_coupled_with(0, 1)
False
>>> topology[0] >> topology[1]
>>> topology.is_coupled_with(0, 1)
True
isolate_with_near(qubit_id: int)[源代码]

将给定比特与相连接的比特解耦。

参数:
  • qubit_id (int) - 需要解耦的比特的 id。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology[0] >> topology[1] >> topology[2]
>>> topology.edges_with_id()
{(0, 1), (1, 2)}
>>> topology.isolate_with_near(1)
>>> topology.edges_with_id()
set()
n_edges()[源代码]

获取所有有耦合的边的个数。

返回:

int,拓扑结构中有耦合的边的个数。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology[0] >> topology[1] >> topology[2]
>>> topology.n_edges()
2
remove_isolate_node()[源代码]

移除那些不与其他比特有耦合的比特。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology[0] >> topology[1] >> topology[2]
>>> topology.edges_with_id()
{(0, 1), (1, 2)}
>>> topology.isolate_with_near(1)
>>> topology.all_qubit_id()
{0, 1, 2}
>>> topology.remove_isolate_node()
>>> topology.all_qubit_id()
set()
remove_qubit_node(qubit_id: int)[源代码]

移除一个给定的比特。

参数:
  • qubit_id (int) - 想要移除的那个比特。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology.remove_qubit_node(1)
>>> topology.all_qubit_id()
{0, 2}
select(ids: List[int])[源代码]

选择一些比特节点并生成新的拓扑图。

参数:
  • ids (List[int]) - 比特节点id的列表。

返回:

QubitsTopology,保持连接信息的新的拓扑图。

样例:

>>> from mindquantum.device import LinearQubits
>>> t1 = LinearQubits(4)
>>> t2 = t1.select([0, 1, 2])
>>> t2.edges_with_id()
{(0, 1), (1, 2)}
set_color(qubit_id: int, color: str)[源代码]

设置给定比特的颜色。

参数:
  • qubit_id (int) - 想要改变颜色的量子别的 id。

  • color (str) - RGB颜色。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology.set_color(0, "#ababab")
>>> topology[0].color
'#ababab'
set_edge_color(qubit_id1: int, qubit_id2: int, color: str)[源代码]

设置给定边的颜色。

qubit_id1 和 qubit_id2 的顺序不重要。

参数:
  • qubit_id1 (int) - 边的第一个比特序号。

  • qubit_id2 (int) - 边的第二个比特序号。

  • color (str) - 边的颜色。

set_position(qubit_id: int, poi_x: float, poi_y: float)[源代码]

设置给定比特的位置。

参数:
  • qubit_id (int) - 想要改变位置的量子比特的 id。

  • poi_x (float) - 新的 x 轴坐标。

  • poi_y (float) - 新的 y 轴坐标。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology.set_position(0, 1, 1)
>>> topology[0].poi_x, topology[0].poi_y
(1, 1)
show(method: Optional[AVA_SHOW_METHOD] = None)[源代码]

展示拓扑结构。

参数:
  • method (str) - 想要使用的展示方式。如果为 None,我们将采用默认方式展示。在终端模式,默认方式为 'mpl',在jupyter notebook 环境中,我们使用 'svg' 方式展示。你也可以手动设置展示方法为 'mpl' 或者 'svg'。默认值: None

size()[源代码]

获得总比特数。

返回:

int,总的比特数。

样例:

>>> from mindquantum.device import QubitsTopology, QubitNode
>>> topology = QubitsTopology([QubitNode(i) for i in range(3)])
>>> topology.size()
3