(expr, assumptions)
Real*Real               -> Real
        Real*Imaginary          -> !Real
        Imaginary*Imaginary     -> Real
Real*Real               -> Real
        Real*Imaginary          -> !Real
        Imaginary*Imaginary     -> Real
Real * Real - > Real Real * Imaginary - > !Real Imaginary * Imaginary - > Real
def Mul(expr, assumptions):
        """
        Real*Real               -> Real
        Real*Imaginary          -> !Real
        Imaginary*Imaginary     -> Real
        """
        if expr.is_number:
            return AskRealHandler._number(expr, assumptions)
        result = True
        for arg in expr.args:
            if ask(Q.real(arg), assumptions):
                pass
            elif ask(Q.imaginary(arg), assumptions):
                result = result ^ True
            else:
                break
        else:
            return result
def Mul ( expr , assumptions ) : if expr . is_number : return AskRealHandler . _number ( expr , assumptions ) result = True for arg in expr . args : if ask ( Q . real ( arg ) , assumptions ) : pass elif ask ( Q . imaginary ( arg ) , assumptions ) : result = result ^ True else : break else : return result