'expt is symbolic object but not equal to 0, 1
(-p)**r -> exp(r*log(-p)) -> exp(r*(log(p) + I*Pi)) ->
-> p**r*(sin(Pi*r) + cos(Pi*r)*I)'

def _eval_power(self, expt):

    if (self == 0):
        if expt.is_positive:
            return S.Zero
        if expt.is_negative:
            return Float('inf')
    if isinstance(expt, Number):
        if isinstance(expt, Integer):
            prec = self._prec
            return Float._new(mlib.mpf_pow_int(self._mpf_, expt.p, prec, rnd), prec)
        elif (isinstance(expt, Rational) and (expt.p == 1) and (expt.q % 2) and self.is_negative):
            return (Pow(S.NegativeOne, expt, evaluate=False) * (- self)._eval_power(expt))
        (expt, prec) = expt._as_mpf_op(self._prec)
        mpfself = self._mpf_
        try:
            y = mpf_pow(mpfself, expt, prec, rnd)
            return Float._new(y, prec)
        except mlib.ComplexResult:
            (re, im) = mlib.mpc_pow((mpfself, _mpf_zero), (expt, _mpf_zero), prec, rnd)
            return (Float._new(re, prec) + (Float._new(im, prec) * S.ImaginaryUnit))
