code: def _(expr, assumptions):
      """
      * Unbounded ** NonZero -> Unbounded
  
      * Bounded ** Bounded -> Bounded
  
      * Abs()<=1 ** Positive -> Bounded
  
      * Abs()>=1 ** Negative -> Bounded
  
      * Otherwise unknown
      """
      if expr.base == E:
          return ask(Q.finite(expr.exp), assumptions)
  
      base_bounded = ask(Q.finite(expr.base), assumptions)
      exp_bounded = ask(Q.finite(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.extended_nonzero(expr.exp), assumptions
      ):
          return False
      if base_bounded and exp_bounded:
          return True
      if (abs(expr.base) <= 1) == True and ask(
          Q.extended_positive(expr.exp), assumptions
      ):
          return True
      if (abs(expr.base) >= 1) == True and ask(
          Q.extended_negative(expr.exp), assumptions
      ):
          return True
      if (abs(expr.base) >= 1) == True and exp_bounded is False:
          return False
      return None
  
file_path: sympy/sympy/assumptions/handlers/calculus.py
imports: from sympy.assumptions import Q, ask
  from sympy.core import Add, Mul, Pow, Symbol
  from sympy.core.numbers import NegativeInfinity, GoldenRatio, Infinity, Exp1, ComplexInfinity, ImaginaryUnit, NaN, Number, Pi, E, TribonacciConstant
  from sympy.functions import cos, exp, log, sign, sin
  from sympy.logic.boolalg import conjuncts
  from ..predicates.calculus import FinitePredicate, InfinitePredicate, PositiveInfinitePredicate, NegativeInfinitePredicate
label_desc: Use image node_id 4 for calling a global function with example usage: _(expr, assumptions) and returns: None, ask, None, False, True, True, True, False