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)