ProjectQ- 控制位在被控门对象的哪一部分中得分

ProjectQ- In which part of the controlled gate object are the control bits scored

我一直在尝试分解 projectQ 对象,我可以设法分解非受控门和交错门。但我注意到 门的受控版本的对象与该门的对象完全相同。

生成这些对象的代码:

  eng = MainEngine()
  q = eng.allocate_qubit()
  p = eng.allocate_qubit()
  c = eng.allocate_qubit()
  X | q
  CNOT | (p,q)

这是 XGate 对象

{'_control_qubits': [],
 '_engine': <__main__.MainEngine object at 0x7fc323e4d198>,
 '_qubits': ([<projectq.types._qubit.WeakQubitRef object at 0x7fc30b0a3ef0>],),
 'gate': <projectq.ops._gates.XGate object at 0x7fc316778048>,
 'tags': []}

这是CNOT门,与ControlledGate(XGate)相同

{'_control_qubits': [],
 '_engine': <__main__.MainEngine object at 0x7fc323e4d198>,
 '_qubits': ([<projectq.types._qubit.WeakQubitRef object at 0x7fc30b0b1080>],),
 'gate': <projectq.ops._gates.XGate object at 0x7fc316778048>,
 'tags': []}

两者都没有控制量子位,而且控制门似乎失去了控制量子位。

知道控制量子位存储在哪里吗?

只有在 MainEngine 之后的 ControlEngine 收到命令后,控制量子位才会添加到命令中。有关实现细节,请参阅“3.2.1 元指令的实现”here

要实现像这个这样的测试引擎,它可以用来检查是否确实在 MainEngine 之后添加了控制量子位,您可以执行以下操作:

test_eng = Testing(BasicEngine) # Or CommandPrinter
eng = projectq.MainEngine(engine_list=[test_eng])