code: def version(self):
          
          try:
              f = self.func.__call__.__code__
          except AttributeError:
              f = self.func.__code__
  
          h = md5()
          h.update(f.co_code)
          h.update(str(f.co_names).encode())
  
          try:
              closure = self.func.__closure__
          except AttributeError:
              return h.hexdigest()
  
          if closure is None or self.closure_fingerprint is None:
              return h.hexdigest()
  
          d = dict(
              (name, cell.cell_contents)
              for name, cell in zip(f.co_freevars, closure))
          h.update(self.closure_fingerprint(d).encode())
  
          return h.hexdigest()
docs: Compute the version identifier for this functional node using the
          func code and local names.  Optionally, also allow closed-over variable
          values to affect the version number when closure_fingerprint is
          specified