code: def get_name(self, **values) -> str:
          
          if not values and self.name:
              return self.name
          if values:
              # if values are provided, solve compounds that may be affected
              for ck, cvs in _sorted_items(self.compounds):
                  if ck in cvs and ck in values:  # redefined compound name to outer scope e.g. fifth = (fifth, sixth)
                      continue
                  comp_values = [values.pop(cv, getattr(self, cv)) for cv in cvs]
                  if None not in comp_values:
                      values[ck] = ''.join(rf'{v}' for v in comp_values)
          return self._get_nice_name(**values)
docs: Get a new name string from this object's name values.
  
          :param values: Variable keyword arguments where the **key** should refer to a field on this object that will
                         use the provided **value** to build the new name.