docs: def hash(self, rtdc_ds):
          """Used for identifying an ancillary computation
  
          The data columns and the used configuration keys/values
          are hashed.
          """
          hasher = hashlib.md5()
          # data columns
          for col in self.req_features:
              hasher.update(obj2str(rtdc_ds[col]))
          # config keys
          for sec, keys in self.req_config:
              for key in keys:
                  val = rtdc_ds.config[sec][key]
                  data = "{}:{}={}".format(sec, key, val)
                  hasher.update(obj2str(data))
          return hasher.hexdigest()