docs: def _requested_name(self, name, action=None, func=None):
          """Create a unique name for an operator or a stream.
          """
          if name is not None:
              if name in self._used_names:
                  # start at 2 for the "second" one of this name
                  n = 2
                  while True:
                      pn = name + '_' + str(n)
                      if pn not in self._used_names:
                          self._used_names.add(pn)
                          return pn
                      n += 1
              else:
                  self._used_names.add(name)
                  return name
  
          if func is not None:
              if hasattr(func, '__name__'):
                  name = func.__name__
                  if name == '<lambda>':
                      # Avoid use of <> characters in name
                      # as they are converted to unicode
                      # escapes in SPL identifier
                      name = action + '_lambda'
              elif hasattr(func, '__class__'):
                  name = func.__class__.__name__
  
          if name is None:
              if action is not None:
                  name = action
              else:
                  name = self.name
  
          # Recurse once to get unique version of name
          return self._requested_name(name)