docstr: Parameters
  ----------
  
  expr - pyll Apply instance to be evaluated
  
  deepcopy_inputs - deepcopy inputs to every node prior to calling that
      node's function on those inputs. If this leads to a different
      return value, then some function (XXX add more complete DebugMode
      functionality) in your graph is modifying its inputs and causing
      mis-calculation. XXX: This is not a fully-functional DebugMode
      because if the offender happens on account of the toposort order
      to be the last user of said input, then it will not be detected as
      a potential problem.
  
  max_program_len : int (default pyll.base.DEFAULT_MAX_PROGRAM_LEN)
      If more than this many nodes are evaluated in the course of
      evaluating `expr`, then evaluation is aborted under the assumption
      that an infinite recursion is underway.
  
  memo_gc : bool
      If True, values computed for apply nodes within `expr` may be
      cleared during computation. The bookkeeping required to do this
      takes a bit of extra time, but usually no big deal.
docstr_tok: ["Parameters","--","--","--","--","--","expr","-","pyll","Apply","instance","to","be","evaluated","deepcopy_inputs","-","deepcopy","inputs","to","every","node","prior","to","calling","that","node","'s","function","on","those","inputs",".","If","this","leads","to","a","different","return","value",",","then","some","function","(","XXX","add","more","complete","DebugMode","functionality",")","in","your","graph","is","modifying","its","inputs","and","causing","mis-calculation",".","XXX",":","This","is","not","a","fully-functional","DebugMode","because","if","the","offender","happens","on","account","of","the","toposort","order","to","be","the","last","user","of","said","input",",","then","it","will","not","be","detected","as","a","potential","problem",".","max_program_len",":","int","(","default","pyll.base.DEFAULT_MAX_PROGRAM_LEN",")","If","more","than","this","many","nodes","are","evaluated","in","the","course","of","evaluating","`","expr","`",",","then","evaluation","is","aborted","under","the","assumption","that","an","infinite","recursion","is","underway",".","memo_gc",":","bool","If","True",",","values","computed","for","apply","nodes","within","`","expr","`","may","be","cleared","during","computation",".","The","bookkeeping","required","to","do","this","takes","a","bit","of","extra","time",",","but","usually","no","big","deal","."]
code: def __init__(
      self,
      expr,
      deepcopy_inputs=False,
      max_program_len=None,
      memo_gc=True,
  ):
      """
      Parameters
      ----------
  
      expr - pyll Apply instance to be evaluated
  
      deepcopy_inputs - deepcopy inputs to every node prior to calling that
          node's function on those inputs. If this leads to a different
          return value, then some function (XXX add more complete DebugMode
          functionality) in your graph is modifying its inputs and causing
          mis-calculation. XXX: This is not a fully-functional DebugMode
          because if the offender happens on account of the toposort order
          to be the last user of said input, then it will not be detected as
          a potential problem.
  
      max_program_len : int (default pyll.base.DEFAULT_MAX_PROGRAM_LEN)
          If more than this many nodes are evaluated in the course of
          evaluating `expr`, then evaluation is aborted under the assumption
          that an infinite recursion is underway.
  
      memo_gc : bool
          If True, values computed for apply nodes within `expr` may be
          cleared during computation. The bookkeeping required to do this
          takes a bit of extra time, but usually no big deal.
  
      """
      self.expr = pyll.as_apply(expr)
      if deepcopy_inputs not in (0, 1, False, True):
          # -- I've been calling rec_eval(expr, memo) by accident a few times
          #    this error would have been appreciated.
          #
          # TODO: Good candidate for Py3K keyword-only argument
          raise ValueError(
              "deepcopy_inputs should be bool", deepcopy_inputs
          )
      self.deepcopy_inputs = deepcopy_inputs
      if max_program_len is None:
          self.max_program_len = pyll.base.DEFAULT_MAX_PROGRAM_LEN
      else:
          self.max_program_len = max_program_len
      self.memo_gc = memo_gc
  
file_path: hyperopt/hyperopt/algobase.py
imports: import copy
  from collections import deque
  import numpy
  from .None import pyll
  from .base import miscs_update_idxs_vals
label_desc: Use image node_id 1 to create a new ExprEvaluator object  with example: obj = ExprEvaluator(expr, deepcopy_inputs, max_program_len, memo_gc)