(expr, assumptions)
Real*Imaginary      -> Imaginary
        Imaginary*Imaginary -> Real
Real*Imaginary      -> Imaginary
        Imaginary*Imaginary -> Real
Real * Imaginary - > Imaginary Imaginary * Imaginary - > Real
def Mul(expr, assumptions):
        """
        Real*Imaginary      -> Imaginary
        Imaginary*Imaginary -> Real
        """
        if expr.is_number:
            return AskImaginaryHandler._number(expr, assumptions)
        result = False
        reals = 0
        for arg in expr.args:
            if ask(Q.imaginary(arg), assumptions):
                result = result ^ True
            elif not ask(Q.real(arg), assumptions):
                break
        else:
            if reals == len(expr.args):
                return False
            return result
def Mul ( expr , assumptions ) : if expr . is_number : return AskImaginaryHandler . _number ( expr , assumptions ) result = False reals = 0 for arg in expr . args : if ask ( Q . imaginary ( arg ) , assumptions ) : result = result ^ True elif not ask ( Q . real ( arg ) , assumptions ) : break else : if reals == len ( expr . args ) : return False return result