(expr, assumptions)
Imaginary + Imaginary -> Imaginary
        Imaginary + Complex   -> ?
        Imaginary + Real      -> !Imaginary
Imaginary + Imaginary -> Imaginary
        Imaginary + Complex   -> ?
        Imaginary + Real      -> !Imaginary
Imaginary + Imaginary - > Imaginary Imaginary + Complex - > ? Imaginary + Real - > !Imaginary
def Add(expr, assumptions):
        """
        Imaginary + Imaginary -> Imaginary
        Imaginary + Complex   -> ?
        Imaginary + Real      -> !Imaginary
        """
        if expr.is_number:
            return AskImaginaryHandler._number(expr, assumptions)

        reals = 0
        for arg in expr.args:
            if ask(Q.imaginary(arg), assumptions):
                pass
            elif ask(Q.real(arg), assumptions):
                reals += 1
            else:
                break
        else:
            if reals == 0:
                return True
            if reals == 1 or (len(expr.args) == reals):
                # two reals could sum 0 thus giving an imaginary
                return False
def Add ( expr , assumptions ) : if expr . is_number : return AskImaginaryHandler . _number ( expr , assumptions ) reals = 0 for arg in expr . args : if ask ( Q . imaginary ( arg ) , assumptions ) : pass elif ask ( Q . real ( arg ) , assumptions ) : reals += 1 else : break else : if reals == 0 : return True if reals == 1 or ( len ( expr . args ) == reals ) : # two reals could sum 0 thus giving an imaginary return False