code: def get_name(self,item):
          
          if not isinstance(item,ford.sourceform.FortranBase):
              raise Exception('{} is not of a type derived from FortranBase'.format(str(item)))
  
          if item in self._items:
              return self._items[item]
          else:
              if item.get_dir() not in self._counts:
                  self._counts[item.get_dir()] = {}
              if item.name in self._counts[item.get_dir()]:
                  num = self._counts[item.get_dir()][item.name] + 1
              else:
                  num = 1
              self._counts[item.get_dir()][item.name] = num
              name = item.name.lower().replace('<','lt')
              # name is already lower
              name = name.replace('>','gt')
              name = name.replace('/','SLASH')
              if name == '': name = '__unnamed__'
              if num > 1:
                  name = name + '~' + str(num)
              self._items[item] = name
              return name
docs: Return the name for this item registered with this NameSelector.
          If no name has previously been registered, then generate a new
          one.