'Integer*Integer      -> Integer
Integer*Irrational   -> !Integer
Odd/Even             -> !Integer
Integer*Rational     -> ?'

@staticmethod
def Mul(expr, assumptions):

    if expr.is_number:
        return AskIntegerHandler._number(expr, assumptions)
    _output = True
    for arg in expr.args:
        if (not ask(Q.integer(arg), assumptions)):
            if arg.is_Rational:
                if (arg.q == 2):
                    return ask(Q.even((2 * expr)), assumptions)
                if (~ (arg.q & 1)):
                    return None
            elif ask(Q.irrational(arg), assumptions):
                if _output:
                    _output = False
                else:
                    return
            else:
                return
    else:
        return _output
