(expr, assumptions)
Positive + Positive -> Positive,
        Negative + Negative -> Negative
Positive + Positive -> Positive,
        Negative + Negative -> Negative
Positive + Positive - > Positive Negative + Negative - > Negative
def Add(expr, assumptions):
        """
        Positive + Positive -> Positive,
        Negative + Negative -> Negative
        """
        if expr.is_number:
            return AskNegativeHandler._number(expr, assumptions)

        r = ask(Q.real(expr), assumptions)
        if r is not True:
            return r

        nonpos = 0
        for arg in expr.args:
            if ask(Q.negative(arg), assumptions) is not True:
                if ask(Q.positive(arg), assumptions) is False:
                    nonpos += 1
                else:
                    break
        else:
            if nonpos < len(expr.args):
                return True
def Add ( expr , assumptions ) : if expr . is_number : return AskNegativeHandler . _number ( expr , assumptions ) r = ask ( Q . real ( expr ) , assumptions ) if r is not True : return r nonpos = 0 for arg in expr . args : if ask ( Q . negative ( arg ) , assumptions ) is not True : if ask ( Q . positive ( arg ) , assumptions ) is False : nonpos += 1 else : break else : if nonpos < len ( expr . args ) : return True