diff --git a/src/qutip_qip/circuit/circuit.py b/src/qutip_qip/circuit/circuit.py index 6d20e107..e619f16c 100644 --- a/src/qutip_qip/circuit/circuit.py +++ b/src/qutip_qip/circuit/circuit.py @@ -1013,7 +1013,9 @@ def latex_code(self): gate.classical_controls and (n - self.N) in gate.classical_controls ): - control_tag = n - gate.targets[0] + control_tag = (-1 if self.reverse_states else 1) * ( + gate.targets[0] - n + ) col.append(r" \ctrl{%d} " % control_tag) elif not gate.controls and not gate.targets: diff --git a/tests/test_circuit.py b/tests/test_circuit.py index 3b55c53d..346c2878 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -692,6 +692,25 @@ def test_latex_code_teleportation_circuit(self): "", ]) + def test_latex_code_classical_controls(self): + qc = QubitCircuit(1, num_cbits=1, reverse_states=True) + qc.add_gate("X", targets=0, classical_controls=[0]) + latex = qc.latex_code() + assert latex == self._latex_template % "\n".join([ + r" & & \ctrl{1} & \qw \\ ", + r" & & \gate{X} & \qw \\ ", + "", + ]) + + qc = QubitCircuit(1, num_cbits=1, reverse_states=False) + qc.add_gate("X", targets=0, classical_controls=[0]) + latex = qc.latex_code() + assert latex == self._latex_template % "\n".join([ + r" & & \gate{X} & \qw \\ ", + r" & & \ctrl{-1} & \qw \\ ", + "", + ]) + H = Qobj([[1/np.sqrt(2), 1/np.sqrt(2)], [1/np.sqrt(2), -1/np.sqrt(2)]]) H_zyz_gates = _ZYZ_rotation(H) H_zyz_quantum_circuit = QubitCircuit(1)