code: def update_info(self, info):
          
  
          for key in self._info_fields:
  
              value = getattr(self, key, None)
              idx = _get_info(info, self.name)
  
              existing_value = idx.get(key)
              if key in idx and value is not None and existing_value != value:
  
                  # frequency/name just warn
                  if key in ['freq', 'index_name']:
                      ws = attribute_conflict_doc % (key, existing_value, value)
                      warnings.warn(ws, AttributeConflictWarning, stacklevel=6)
  
                      # reset
                      idx[key] = None
                      setattr(self, key, None)
  
                  else:
                      raise ValueError(
                          "invalid info for [{name}] for [{key}], "
                          "existing_value [{existing_value}] conflicts with "
                          "new value [{value}]".format(
                              name=self.name, key=key,
                              existing_value=existing_value, value=value))
              else:
                  if value is not None or existing_value is not None:
                      idx[key] = value
  
          return self
docs: set/update the info for this indexable with the key/value
              if there is a conflict raise/warn as needed