mindquantum.algorithm.compiler.DAGCircuit

查看源文件
class mindquantum.algorithm.compiler.DAGCircuit(circuit: Circuit)[源代码]

量子线路的有向无环图表示(Directed acyclic graph, DAG)。

参数:
  • circuit (Circuit) - 输入的量子线路。

样例:

>>> from mindquantum.algorithm.compiler import DAGCircuit
>>> from mindquantum.core.circuit import Circuit
>>> circ = Circuit().h(0).x(1, 0)
>>> dag_circ = DAGCircuit(circ)
>>> dag_circ.head_node[0]
q0
>>> dag_circ.head_node[0].child
{0: H(0)}
append_node(node: DAGNode)[源代码]

添加一个量子门 DAG 节点。

参数:
  • node (DAGNode) - 想要添加的 DAG 节点。

样例:

>>> from mindquantum.algorithm.compiler import DAGCircuit, GateNode
>>> from mindquantum.core.circuit import Circuit
>>> import mindquantum.core.gates as G
>>> circ = Circuit().h(0).x(1, 0)
>>> circ
      ┏━━━┓
q0: ──┨ H ┠───■─────
      ┗━━━┛   ┃
            ┏━┻━┓
q1: ────────┨╺╋╸┠───
            ┗━━━┛
>>> dag_circ = DAGCircuit(circ)
>>> node = GateNode(G.RX('a').on(0, 2))
>>> dag_circ.append_node(node)
>>> dag_circ.to_circuit()
      ┏━━━┓       ┏━━━━━━━┓
q0: ──┨ H ┠───■───┨ RX(a) ┠───
      ┗━━━┛   ┃   ┗━━━┳━━━┛
            ┏━┻━┓     ┃
q1: ────────┨╺╋╸┠─────╂───────
            ┗━━━┛     ┃

q2: ──────────────────■───────
depth()[源代码]

返回量子线路的层数。

样例:

>>> from mindquantum.core.circuit import Circuit
>>> from mindquantum.algorithm.compiler import DAGCircuit
>>> circ = Circuit().h(0).h(1).x(1, 0)
>>> circ
      ┏━━━┓
q0: ──┨ H ┠───■─────
      ┗━━━┛   ┃
      ┏━━━┓ ┏━┻━┓
q1: ──┨ H ┠─┨╺╋╸┠───
      ┗━━━┛ ┗━━━┛
>>> DAGCircuit(circ).depth()
2
find_all_gate_node()[源代码]

查找 DAGCircuit 图中的所有量子门节点。

返回:

List[GateNode],DAGCircuit 中所有 GateNode 的列表。

样例:

>>> from mindquantum.algorithm.compiler import DAGCircuit
>>> from mindquantum.core.circuit import Circuit
>>> circ = Circuit().h(0).x(1, 0)
>>> dag_circ = DAGCircuit(circ)
>>> dag_circ.find_all_gate_node()
[H(0), X(1 <-: 0)]
layering()[源代码]

将量子线路进行分层。

返回:

List[Circuit],分层后的量子线路列表。

样例:

>>> from mindquantum.algorithm.compiler import DAGCircuit
>>> from mindquantum.utils import random_circuit
>>> circ = random_circuit(3, 5, seed=42)
>>> circ
      ┏━━━━━━━━━━━━━┓   ┏━━━━━━━━━━━━━┓
q0: ──┨             ┠─╳─┨ RY(-6.1944) ┠───────────────────
      ┃             ┃ ┃ ┗━━━━━━┳━━━━━━┛
      ┃ Rxx(1.2171) ┃ ┃        ┃        ┏━━━━━━━━━━━━━┓
q1: ──┨             ┠─┃────────╂────────┨             ┠───
      ┗━━━━━━━━━━━━━┛ ┃        ┃        ┃             ┃
      ┏━━━━━━━━━━━━┓  ┃        ┃        ┃ Rzz(-0.552) ┃
q2: ──┨ PS(2.6147) ┠──╳────────■────────┨             ┠───
      ┗━━━━━━━━━━━━┛                    ┗━━━━━━━━━━━━━┛
>>> dag_circ = DAGCircuit(circ)
>>> for idx, c in enumerate(dag_circ.layering()):
...     print(f"layer {idx}:")
...     print(c)
layer 0:
      ┏━━━━━━━━━━━━━┓
q0: ──┨             ┠───
      ┃             ┃
      ┃ Rxx(1.2171) ┃
q1: ──┨             ┠───
      ┗━━━━━━━━━━━━━┛
      ┏━━━━━━━━━━━━┓
q2: ──┨ PS(2.6147) ┠────
      ┗━━━━━━━━━━━━┛
layer 1:
q0: ──╳───


q2: ──╳───
layer 2:
      ┏━━━━━━━━━━━━━┓
q0: ──┨ RY(-6.1944) ┠───
      ┗━━━━━━┳━━━━━━┛

q2: ─────────■──────────
layer 3:
      ┏━━━━━━━━━━━━━┓
q1: ──┨             ┠───
      ┃             ┃
      ┃ Rzz(-0.552) ┃
q2: ──┨             ┠───
      ┗━━━━━━━━━━━━━┛
abstract replace_node_with_dag_circuit(node: DAGNode, coming: 'DAGCircuit')[源代码]

用一个 DAG 图来替换给定的节点。

参数:

样例:

>>> from mindquantum.algorithm.compiler import DAGCircuit
>>> from mindquantum.core.circuit import Circuit
>>> circ = Circuit().x(1, 0)
>>> circ
q0: ────■─────

      ┏━┻━┓
q1: ──┨╺╋╸┠───
      ┗━━━┛
>>> dag_circ = DAGCircuit(circ)
>>> node = dag_circ.head_node[0].child[0]
>>> node
X(1 <-: 0)
>>> sub_dag = DAGCircuit(Circuit().h(1).z(1, 0).h(1))
>>> DAGCircuit.replace_node_with_dag_circuit(node, sub_dag)
>>> dag_circ.to_circuit()
q0: ──────────■───────────

      ┏━━━┓ ┏━┻━┓ ┏━━━┓
q1: ──┨ H ┠─┨ Z ┠─┨ H ┠───
      ┗━━━┛ ┗━━━┛ ┗━━━┛
to_circuit()[源代码]

DAGCircuit 转化为量子线路。

返回:

Circuit , DAG 图对应的量子线路。

样例:

>>> from mindquantum.core.circuit import Circuit
>>> from mindquantum.algorithm.compiler import DAGCircuit
>>> circ = Circuit().h(0).h(1).x(1, 0)
>>> circ
      ┏━━━┓
q0: ──┨ H ┠───■─────
      ┗━━━┛   ┃
      ┏━━━┓ ┏━┻━┓
q1: ──┨ H ┠─┨╺╋╸┠───
      ┗━━━┛ ┗━━━┛
>>> dag_circ = DAGCircuit(circ)
>>> dag_circ.to_circuit()
      ┏━━━┓
q0: ──┨ H ┠───■─────
      ┗━━━┛   ┃
      ┏━━━┓ ┏━┻━┓
q1: ──┨ H ┠─┨╺╋╸┠───
      ┗━━━┛ ┗━━━┛