def _eval_expand_complex(self, *args): if self[0].is_real: return self re, im = self[0].as_real_imag() denom = sin(re)**2 + Basic.sinh(im)**2 return (sin(re)*cos(re) - \ S.ImaginaryUnit*Basic.sinh(im)*Basic.cosh(im))/denom
def _eval_apply(self, arg): arg = Basic.sympify(arg) if isinstance(arg, Basic.Number): if isinstance(arg, Basic.NaN): return S.NaN elif isinstance(arg, Basic.Zero): return S.Zero elif arg.is_negative: return -self(-arg) else: i_coeff = arg.as_coefficient(S.ImaginaryUnit) if i_coeff is not None: return S.ImaginaryUnit * Basic.sinh(i_coeff) else: pi_coeff = arg.as_coefficient(S.Pi) if pi_coeff is not None: if pi_coeff.is_integer: return S.Zero elif isinstance(pi_coeff, Basic.Rational): cst_table = { 2 : S.One, 3 : S.Half*Basic.sqrt(3), 4 : S.Half*Basic.sqrt(2), 6 : S.Half, } try: result = cst_table[pi_coeff.q] if (pi_coeff.p // pi_coeff.q) % 2 == 1: return -result else: return result except KeyError: pass coeff, terms = arg.as_coeff_terms() if coeff.is_negative: return -self(-arg)
def _eval_expand_complex(self, *args): if self[0].is_real: return self re, im = self[0].as_real_imag() return cos(re)*Basic.cosh(im) - \ S.ImaginaryUnit*sin(re)*Basic.sinh(im)