class_docstr: this provides a decorator to cache function outputs
  to avoid repeating some heavy function computations
code: def __call__(self, *args, **kw):
      obj = args[0]
      try:
          cache = obj.__cache
      except AttributeError:
          cache = obj.__cache = {}
      key = (self.func, args[1:], frozenset(kw.items()))
      try:
          value = cache[key]
      except KeyError:
          value = cache[key] = self.func(*args, **kw)
      return value
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import datetime
  import os
  import re
  from functools import partial
  import numpy
  import tensorflow
  from scipy import ndimage
  from six import string_types
label_desc: Use image node_id 3 for calling the CacheFunctionOutput obj's underlying member method code with example usage: obj.__call__() and returns: value