diff --git a/tket-qsystem/src/extension/qsystem.rs b/tket-qsystem/src/extension/qsystem.rs index dc036fcf7..b169283e4 100644 --- a/tket-qsystem/src/extension/qsystem.rs +++ b/tket-qsystem/src/extension/qsystem.rs @@ -394,27 +394,25 @@ pub trait QSystemOpBuilder: Dataflow + UnwrapBuilder + ArrayOpBuilder { /// Build a CY gate in terms of QSystem primitives. fn build_cy(&mut self, a: Wire, b: Wire) -> Result<[Wire; 2], BuildError> { + let pi = pi_mul_f64(self, 1.0); let pi_2 = pi_mul_f64(self, 0.5); let pi_minus_2 = pi_mul_f64(self, -0.5); - let zero = pi_mul_f64(self, 0.0); - let a = self.add_phased_x(a, pi_minus_2, zero)?; + let a = self.add_phased_x(a, pi, pi)?; + let b = self.add_phased_x(b, pi_minus_2, pi)?; let [a, b] = self.build_zz_max(a, b)?; - let a = self.add_rz(a, pi_2)?; - let b = self.add_phased_x(b, pi_2, pi_2)?; - let b = self.add_rz(b, pi_minus_2)?; + let a = self.add_phased_x(a, pi, pi_2)?; + let b = self.add_phased_x(b, pi_minus_2, pi_minus_2)?; + let a = self.add_rz(a, pi_minus_2)?; + let b = self.add_rz(b, pi_2)?; Ok([a, b]) } /// Build a CZ gate in terms of QSystem primitives. fn build_cz(&mut self, a: Wire, b: Wire) -> Result<[Wire; 2], BuildError> { - let pi = pi_mul_f64(self, 1.0); let pi_2 = pi_mul_f64(self, 0.5); - let pi_minus_2 = pi_mul_f64(self, -0.5); - let a = self.add_phased_x(a, pi, pi_2)?; let [a, b] = self.build_zz_max(a, b)?; - let a = self.add_phased_x(a, pi, pi_minus_2)?; let b = self.add_rz(b, pi_2)?; let a = self.add_rz(a, pi_2)?;