我正在尝试在 Cirq/Tensorflow Quantum 中实现受控旋转门。
https://cirq.readthedocs.io/en/stable/gates.html上的 readthedocs.io声明:
“可以使用 Gate.controlled() 将门转换为受控版本。通常,这会返回 ControlledGate 的实例。但是,对于某些特殊情况,门的受控版本也是已知门,这将返回“
我已经实施
cirq.rx(theta_0).on(q[0]).controlled_by(q[3])
我收到以下错误:
~/.local/lib/python3.6/site-packages/cirq/google/serializable_gate_set.py in
serialize_op(self, op, msg, arg_function_language)
193 return proto_msg
194 raise ValueError('Cannot serialize op {!r} of type {}'.format(
--> 195 gate_op, gate_type))
196
197 def deserialize_dict(self,
ValueError: Cannot serialize op cirq.ControlledOperation(controls=(cirq.GridQubit(0, 3),), sub_operation=cirq.rx(sympy.Symbol('theta_0')).on(cirq.GridQubit(0, 0)), control_values=((1,),)) of type <class 'cirq.ops.controlled_gate.ControlledGate'>
我将量子比特和符号初始化为:
q = cirq.GridQubit.rect(1, 4)
symbol_names = x_0, x_1, x_2, x_3, theta_0, theta_1, z_2, z_3
我确实将电路与各种电路一起使用。
我的问题:如何在 Cirq/Tensorflow Quantum 中正确实施受控 Rx?
PS 我找不到 Google Cirq 的标签
追问:这如何推广到 Controlled Ry 和 Controlled Rz 的类似情况?
对于 Rz,我在https://threeplusone.com/pubs/on_gates.pdf找到了一个门分解,涉及 H.on(q1)、CNOT(q0, q1)、H.on(q2),但这还不是CRz 具有任意角度。我会在 H 之前引入角度吗?
对于 Ry,我还没有找到分解,CRy 也没有。