static ex real_part_evalf(const ex & arg) { if (is_exactly_a<numeric>(arg)) { return ex_to<numeric>(arg).real(); } return real_part_function(arg).hold(); }
// If x is real then Re(e).diff(x) is equal to Re(e.diff(x)) static ex real_part_expl_derivative(const ex & arg, const symbol & s) { if (s.info(info_flags::real)) return real_part_function(arg.diff(s)); else { exvector vec_arg; vec_arg.push_back(arg); return fderivative(ex_to<function>(real_part(arg)).get_serial(),0,vec_arg).hold()*arg.diff(s); } }
static ex real_part_real_part(const ex & arg) { return real_part_function(arg).hold(); }
ex basic::real_part() const { return real_part_function(*this).hold(); }