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 图来替换给定的节点。
- 参数:
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 ┠─┨╺╋╸┠─── ┗━━━┛ ┗━━━┛