(expr, assumptions)
return None
Unbounded ** NonZero -> Unbounded
        Bounded ** Bounded -> Bounded
        Abs()<=1 ** Positive -> Bounded
        Abs()>=1 ** Negative -> Bounded
        Otherwise unknown
Unbounded ** NonZero -> Unbounded
        Bounded ** Bounded -> Bounded
        Abs()<=1 ** Positive -> Bounded
        Abs()>=1 ** Negative -> Bounded
        Otherwise unknown
Unbounded ** NonZero - > Unbounded Bounded ** Bounded - > Bounded Abs () < = 1 ** Positive - > Bounded Abs () > = 1 ** Negative - > Bounded Otherwise unknown
def Pow(expr, assumptions):
        """
        Unbounded ** NonZero -> Unbounded
        Bounded ** Bounded -> Bounded
        Abs()<=1 ** Positive -> Bounded
        Abs()>=1 ** Negative -> Bounded
        Otherwise unknown
        """
        base_bounded = ask(Q.bounded(expr.base), assumptions)
        exp_bounded = ask(Q.bounded(expr.exp), assumptions)
        if base_bounded is None and exp_bounded is None:  # Common Case
            return None
        if base_bounded is False and ask(Q.nonzero(expr.exp), assumptions):
            return False
        if base_bounded and exp_bounded:
            return True
        if (abs(expr.base) <= 1) == True and ask(Q.positive(expr.exp), assumptions):
            return True
        if (abs(expr.base) >= 1) == True and ask(Q.negative(expr.exp), assumptions):
            return True
        if (abs(expr.base) >= 1) == True and exp_bounded is False:
            return False
        return None
def Pow ( expr , assumptions ) : base_bounded = ask ( Q . bounded ( expr . base ) , assumptions ) exp_bounded = ask ( Q . bounded ( expr . exp ) , assumptions ) if base_bounded is None and exp_bounded is None : # Common Case return None if base_bounded is False and ask ( Q . nonzero ( expr . exp ) , assumptions ) : return False if base_bounded and exp_bounded : return True if ( abs ( expr . base ) <= 1 ) == True and ask ( Q . positive ( expr . exp ) , assumptions ) : return True if ( abs ( expr . base ) >= 1 ) == True and ask ( Q . negative ( expr . exp ) , assumptions ) : return True if ( abs ( expr . base ) >= 1 ) == True and exp_bounded is False : return False return None