class_docstr: Predicate without handler.
  
  Explanation
  ===========
  
  This predicate is generated by using ``Predicate`` directly for
  construction. It does not have a handler, and evaluating this with
  arguments is done by SAT solver.
  
  Examples
  ========
  
  >>> from sympy import Predicate, Q
  >>> Q.P = Predicate('P')
  >>> Q.P.func
  <class 'sympy.assumptions.assume.UndefinedPredicate'>
  >>> Q.P.name
  Str('P')
class_docstr_tok: ["Predicate","without","handler",".","Explanation","===========","This","predicate","is","generated","by","using","``","Predicate","``","directly","for","construction",".","It","does","not","have","a","handler",",","and","evaluating","this","with","arguments","is","done","by","SAT","solver",".","Examples","========",">",">",">","from","sympy","import","Predicate",",","Q",">",">",">","Q.P","=","Predicate","(","'","P","'",")",">",">",">","Q.P.func","<","class","'sympy.assumptions.assume.UndefinedPredicate","'",">",">",">",">","Q.P.name","Str","(","'","P","'",")"]
code: def eval(self, args, assumptions=True):
      # Support for deprecated design
      # When old design is removed, this will always return None
      sympy_deprecation_warning(
          """
              The AskHandler system is deprecated. Evaluating UndefinedPredicate
              objects should be replaced with the multipledispatch handler of
              Predicate.
              """,
          deprecated_since_version="1.8",
          active_deprecations_target="deprecated-askhandler",
          stacklevel=5,
      )
      (expr,) = args
      res, _res = None, None
      mro = inspect.getmro(type(expr))
      for handler in self.handlers:
          cls = get_class(handler)
          for subclass in mro:
              eval_ = getattr(cls, subclass.__name__, None)
              if eval_ is None:
                  continue
              res = eval_(expr, assumptions)
              # Do not stop if value returned is None
              # Try to check for higher classes
              if res is None:
                  continue
              if _res is None:
                  _res = res
              else:
                  # only check consistency if both resolutors have concluded
                  if _res != res:
                      raise ValueError("incompatible resolutors")
              break
      return res
  
imports: from contextlib import contextmanager
  import inspect
  from sympy.core.symbol import Str
  from sympy.core.sympify import _sympify
  from sympy.logic.boolalg import Boolean, false, true
  from sympy.multipledispatch.dispatcher import Dispatcher, str_signature
  from sympy.utilities.exceptions import sympy_deprecation_warning
  from sympy.utilities.iterables import is_sequence
  from sympy.utilities.source import get_class
label_desc: Use image node_id 8 for calling the UndefinedPredicate obj's underlying member method code with example usage: obj.eval(args, assumptions) and returns: res