class_docstr: Function decorator to cache return values.
  
  If called later with the same arguments, the cached value is returned
  (not reevaluated).
class_docstr_tok: ["Function","decorator","to","cache","return","values",".","If","called","later","with","the","same","arguments",",","the","cached","value","is","returned","(","not","reevaluated",")","."]
code: def __call__(self, *args):
      if not isinstance(args, 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
  
imports: import datetime
  import fnmatch
  import locale
  import logging
  import os
  import pathlib
  import re
  import shutil
  import sys
  import traceback
  import urllib
  from collections.abc import Hashable
  from contextlib import contextmanager
  from functools import partial
  from html import entities
  from html.parser import HTMLParser
  from itertools import groupby
  from operator import attrgetter
  import dateutil.parser
  from markupsafe import Markup
  import watchfiles
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