static ex atan_conjugate(const ex & x) { // conjugate(atan(x))==atan(conjugate(x)) unless on the branch cuts which // run along the imaginary axis outside the interval [-I, +I]. if (x.info(info_flags::real)) return atan(x); if (is_exactly_a<numeric>(x)) { const numeric x_re = ex_to<numeric>(x.real_part()); const numeric x_im = ex_to<numeric>(x.imag_part()); if (!x_re.is_zero() || (x_im > *_num_1_p && x_im < *_num1_p)) return atan(x.conjugate()); } return conjugate_function(atan(x)).hold(); }