我一直在尝试分解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': []}两者都没有控制量子比特,而且似乎控制门失去了控制量子比特。
知道控制量子比特存储在哪里吗?
发布于 2019-02-26 16:24:43
控制量子比特仅在MainEngine之后的链的更下游的ControlEngine接收到命令后才被添加到命令中。有关实现的详细信息,请参阅“元指令的3.2.1实现”here。
要实现像这样的测试引擎,可以用来检查是否确实在MainEngine之后添加了控制量子位,您可以执行以下操作:
test_eng = Testing(BasicEngine) # Or CommandPrinter
eng = projectq.MainEngine(engine_list=[test_eng])https://stackoverflow.com/questions/54665595
复制相似问题