class_docstr: Decorator. Caches a function's return value each time it is called.
  If called later with the same arguments, the cached value is returned
  (not reevaluated).
class_docstr_tok: ["Decorator",".","Caches","a","function","'s","return","value","each","time","it","is","called",".","If","called","later","with","the","same","arguments",",","the","cached","value","is","returned","(","not","reevaluated",")","."]
code: def __call__(self, *args):
      if not isinstance(args, collections.abc.Hashable):
          # uncacheable. a list, for instance.
          # better to not cache than blow up.
          return self.func(*args)
      if args in self.cache:
          return self.cache[args]
      else:
          value = self.func(*args)
          self.cache[args] = value
          return value
  
file_path: sematch/sematch/utility.py
imports: import json
  import os
  import collections.abc
  import functools
label_desc: Use image node_id 2 for calling the memoized obj's underlying member method code with example usage: obj.__call__() and returns: self, self, value