mindquantum.utils.random_insert_gates

查看源文件
mindquantum.utils.random_insert_gates(circuit, gates, nums, focus_on=None, with_ctrl=True, after_measure=False, shots=1, seed=None)[源代码]

将指定数量的单量子比特门插入到量子线路中的随机位置。

参数:
  • circuit (Circuit) - 待随机插入量子门的量子线路。

  • gates (Union[BasicGate, List[BasicGate]]) - 所有待插入的量子门。

  • nums (Union[int, List[int]]) - 每种量子门插入的数量。

  • focus_on (Optional[Union[int, List[int]]]) - 只将量子门作用在 focus_on 比特上。如果为 None,则作用在量子线路的所有比特上。默认值: None。

  • with_ctrl (bool) - 是否在控制位上插入量子门。默认值: True。

  • after_measure (bool) - 是否在测量门后插入量子门。默认值: False。

  • shots (int) - 随机采样量子线路的数量。默认值: 1。

  • seed (Optional[int]) - 生成插入位置的随机数种子。默认值: None。

样例:

>>> from mindquantum.core.gates import X, Z, BitFlipChannel, PhaseFlipChannel
>>> from mindquantum.core.circuit import Circuit
>>> from mindquantum.utils import random_insert_gates
>>> origin = Circuit().rx('theta', 0).rz('beta', 1, 0).barrier().measure(0)
>>> print(origin)
      ┏━━━━━━━━━━━┓                ┍━━━━━━┑
q0: ──┨ RX(theta) ┠───────■──────▓─┤ M q0 ├───
      ┗━━━━━━━━━━━┛       ┃      ▓ ┕━━━━━━┙
                    ┏━━━━━┻━━━━┓ ▓
q1: ────────────────┨ RZ(beta) ┠─▓────────────
                    ┗━━━━━━━━━━┛
>>> circs = list(random_insert_gates(origin, [BitFlipChannel(p=1), PhaseFlipChannel(p=1)], [2, 1]))
>>> print(circs[0])
      ┏━━━━━━━━━━━┓ ╔══════════╗ ╔══════════╗                             ┍━━━━━━┑
q0: ──┨ RX(theta) ┠─╢ BFC(p=1) ╟─╢ PFC(p=1) ╟───────■───────────────────▓─┤ M q0 ├───
      ┗━━━━━━━━━━━┛ ╚══════════╝ ╚══════════╝       ┃                   ▓ ┕━━━━━━┙
                                              ┏━━━━━┻━━━━┓ ╔══════════╗ ▓
q1: ──────────────────────────────────────────┨ RZ(beta) ┠─╢ BFC(p=1) ╟─▓────────────
                                              ┗━━━━━━━━━━┛ ╚══════════╝