wy_qcos.transpiler.cmss.mapping.na package

Subpackages

Submodules

wy_qcos.transpiler.cmss.mapping.na.na_mapping module

class wy_qcos.transpiler.cmss.mapping.na.na_mapping.NASingleRoute

基类:ABC

NASingleRoute.

prepare_data(qbit_num, gates, qpu_configs)

配置qpu_config、gates、qbit_num,量子比特映射.

参数:
  • qbit_num -- 比特数

  • gates -- 门列表

  • qpu_configs -- 拓扑

execute_with_order()

遍历比特门,将逻辑量子比特映射到物理量子比特.

返回:

从逻辑映射到物理量子比特的门列表

class wy_qcos.transpiler.cmss.mapping.na.na_mapping.NARoute

基类:ABC

NARoute.

prepare_data(qbit_num, gates, qpu_configs)

配置qpu_config、gates、qbit_num,量子比特映射.

参数:
  • qbit_num -- 比特数

  • gates -- 门列表

  • qpu_configs -- 拓扑

get_rx_dag()

Build a dependency graph (DAG) for IR using the rustworkx.

返回:

The DAG object with node attributes measure_op (list): List of measurement operation gates node_indices (dict): Mapping dictionary from original gate indices to rustworkx node i

返回类型:

dg (rx.PyDiGraph)

get_init_mapping()

比特初始映射及映射表构建.

dg:量子线路拓扑 dg_opt:dg的深拷贝,用以将处理后的节点删除,并寻找新的可执行节点 mapping:比特所处存储区位置(目前比特与存储区一一对应,方便维护) oloc:比特对应的操作区位置,若不在操作区则为-1 oqloc:操作区中的比特,若不存在则为-1 ohas:操作区包含的所有比特 locked:锁定的量子比特(这些比特不能再移动位置) res:最终映射后的指令集列表

get_front_layer()

获取当前可执行的节点,节点可执行的条件是入度为0.

find_pos(dis)

在操作区中寻找可放置比特的位置,若不存在,则为-1.

参数:

dis (int) -- 与现有的比特间的距离至少为dis

back(o)

将比特移回存储区,并更新映射表.

参数:

o -- 操作区位置

put(q, o)

将比特移到操作区,并更新映射表.

参数:
  • q -- 需要操作的比特

  • o -- 操作区位置

mov(o1, o2)

将比特从存取区的某一位置移到另一位置,并更新映射表.

参数:
  • o1 -- 操作区起始位置

  • o2 -- 操作区目标位置

pre_back(nodes)

将操作区中不属于当前可执行门的比特移回存储区.

参数:

nodes (List) -- 当前可执行门列表

get_empty_neighbor(p)

获取操作区某一位置的相邻空位置.

参数:

p -- 操作区位置

get_unlocked_neighbor(p)

获取操作区某一位置的相邻非上锁位置.

参数:

p -- 操作区位置

mov_to_neighbors(p1, p2)

将比特1和比特2移到相邻位置,前提为两个比特均已在操作区.

参数:
  • p1 -- 比特1当前所在的操作区位置

  • p2 -- 比特2当前所在的操作区位置

put_to_neighbors1(p1, q)

将q放到p1的相邻位置,前提为q在存储区.

参数:
  • p1 -- 比特1当前所在的操作区位置

  • q -- 需要移动的比特

put_to_neighbors2(q1, q2)

将比特q1, q2放到相邻位置,前提为q1, q2均在存储区.

参数:
  • q1 -- 比特1

  • q2 -- 比特2

execute_multi_nodes(nodes)

执行两比特门.

参数:

nodes (List) -- 所有当前可执行的两比特门对应的节点

mov_multi_nodes(nodes)

两比特门执行前,将比特先放置在操作区合适的位置.

参数:

nodes (List) -- 所有当前可执行的两比特门对应的节点

execute_single_node(node)

执行单比特门.

参数:

node -- 当前可执行的单比特门对应的节点

overlap(nd1, nd2)

判断两个单比特节点包含的门列表是否满足nd2为nd1的后缀.

参数:
  • nd1 -- 节点1

  • nd2 -- 节点2

add_put(res, opt)

将overlap中的put操作放入对应的位置.

参数:
  • res -- 当前的指令集列表

  • opt -- put操作

adjust_pos(pos, posq)

调整put操作的位置,调用add_put,放入合适的位置.

参数:
  • pos -- 所有的put操作

  • posq -- 操作对应的比特

execute_single_node_opt()

执行单比特门,通过overlap进行优化.

get_max_common()

从当前可执行节点中找可执行的节点.

execute_with_order()

按顺序执行门,不进行优化.

execute_with_opt()

按拓扑序执行门,进行简单的优化.

Module contents