'b is I = sqrt(-1)
e is symbolic object but not equal to 0, 1
I**r -> (-1)**(r/2) -> exp(r/2*Pi*I) -> sin(Pi*r/2) + cos(Pi*r/2)*I, r is decimal
I**0 mod 4 -> 1
I**1 mod 4 -> I
I**2 mod 4 -> -1
I**3 mod 4 -> -I'

def _eval_power(self, expt):

    if isinstance(expt, Number):
        if isinstance(expt, Integer):
            expt = (expt.p % 4)
            if (expt == 0):
                return S.One
            if (expt == 1):
                return S.ImaginaryUnit
            if (expt == 2):
                return (- S.One)
            return (- S.ImaginaryUnit)
        return (S.NegativeOne ** (expt * S.Half))
    return
