docstr: Returns True if the limits are known to be in reversed order, either
  by the explicit bounds, assumptions on the bounds, or assumptions on the
  variables.  False if known to be in normal order, based on the bounds.
  None if not enough information is available to determine.
  
  Examples
  ========
  
  >>> from sympy import Sum, Integral, Product, oo, Symbol
  >>> x = Symbol('x')
  >>> Sum(x, (x, 8, 1)).has_reversed_limits
  True
  
  >>> Sum(x, (x, 1, oo)).has_reversed_limits
  False
  
  >>> M = Symbol('M')
  >>> Integral(x, (x, 1, M)).has_reversed_limits
  
  >>> N = Symbol('N', integer=True, positive=True)
  >>> Sum(x, (x, 1, N)).has_reversed_limits
  False
  
  >>> Product(x, (x, 2, N)).has_reversed_limits
  
  >>> Product(x, (x, 2, N)).subs(N, N + 2).has_reversed_limits
  False
  
  See Also
  ========
  
  sympy.concrete.expr_with_intlimits.ExprWithIntLimits.has_empty_sequence
docstr_tok: ["Returns","True","if","the","limits","are","known","to","be","in","reversed","order",",","either","by","the","explicit","bounds",",","assumptions","on","the","bounds",",","or","assumptions","on","the","variables",".","False","if","known","to","be","in","normal","order",",","based","on","the","bounds",".","None","if","not","enough","information","is","available","to","determine",".","Examples","========",">",">",">","from","sympy","import","Sum",",","Integral",",","Product",",","oo",",","Symbol",">",">",">","x","=","Symbol","(","'","x","'",")",">",">",">","Sum","(","x",",","(","x",",","8",",","1",")",")",".has_reversed_limits","True",">",">",">","Sum","(","x",",","(","x",",","1",",","oo",")",")",".has_reversed_limits","False",">",">",">","M","=","Symbol","(","'M","'",")",">",">",">","Integral","(","x",",","(","x",",","1",",","M",")",")",".has_reversed_limits",">",">",">","N","=","Symbol","(","'N","'",",","integer=True",",","positive=True",")",">",">",">","Sum","(","x",",","(","x",",","1",",","N",")",")",".has_reversed_limits","False",">",">",">","Product","(","x",",","(","x",",","2",",","N",")",")",".has_reversed_limits",">",">",">","Product","(","x",",","(","x",",","2",",","N",")",")",".subs","(","N",",","N","+","2",")",".has_reversed_limits","False","See","Also","========","sympy.concrete.expr_with_intlimits.ExprWithIntLimits.has_empty_sequence"]
code: def has_reversed_limits(self):
      """
      Returns True if the limits are known to be in reversed order, either
      by the explicit bounds, assumptions on the bounds, or assumptions on the
      variables.  False if known to be in normal order, based on the bounds.
      None if not enough information is available to determine.
  
      Examples
      ========
  
      >>> from sympy import Sum, Integral, Product, oo, Symbol
      >>> x = Symbol('x')
      >>> Sum(x, (x, 8, 1)).has_reversed_limits
      True
  
      >>> Sum(x, (x, 1, oo)).has_reversed_limits
      False
  
      >>> M = Symbol('M')
      >>> Integral(x, (x, 1, M)).has_reversed_limits
  
      >>> N = Symbol('N', integer=True, positive=True)
      >>> Sum(x, (x, 1, N)).has_reversed_limits
      False
  
      >>> Product(x, (x, 2, N)).has_reversed_limits
  
      >>> Product(x, (x, 2, N)).subs(N, N + 2).has_reversed_limits
      False
  
      See Also
      ========
  
      sympy.concrete.expr_with_intlimits.ExprWithIntLimits.has_empty_sequence
  
      """
      ret_None = False
      for lim in self.limits:
          if len(lim) == 3:
              var, a, b = lim
              dif = b - a
              if dif.is_extended_negative:
                  return True
              elif dif.is_extended_nonnegative:
                  continue
              else:
                  ret_None = True
          else:
              return None
      if ret_None:
          return None
      return False
  
imports: from sympy.core.add import Add
  from sympy.core.containers import Tuple
  from sympy.core.expr import Expr
  from sympy.core.function import AppliedUndef, UndefinedFunction
  from sympy.core.mul import Mul
  from sympy.core.relational import Equality, Relational
  from sympy.core.singleton import S
  from sympy.core.symbol import Symbol, Dummy
  from sympy.core.sympify import sympify
  from sympy.functions.elementary.piecewise import piecewise_fold, Piecewise
  from sympy.logic.boolalg import BooleanFunction
  from sympy.matrices.matrixbase import MatrixBase
  from sympy.sets.sets import Interval, Set
  from sympy.sets.fancysets import Range
  from sympy.tensor.indexed import Idx
  from sympy.utilities import flatten
  from sympy.utilities.iterables import sift, is_sequence
  from sympy.utilities.exceptions import sympy_deprecation_warning
label_desc: Use image node_id 12 for calling the ExprWithLimits obj's underlying member method code with example usage: obj.has_reversed_limits() and returns: False, None, None, True