code: def _name_to_index(self, channels):
          
          # Check if list, then run recursively
          if hasattr(channels, '__iter__') \
                  and not isinstance(channels, six.string_types):
              return [self._name_to_index(ch) for ch in channels]
  
          if isinstance(channels, six.string_types):
              # channels is a string containing a channel name
              if channels in self.channels:
                  return self.channels.index(channels)
              else:
                  raise ValueError("{} is not a valid channel name."
                      .format(channels))
  
          if isinstance(channels, int):
              if (channels < len(self.channels)
                      and channels >= -len(self.channels)):
                  return channels
              else:
                  raise ValueError("index out of range")
  
          else:
              raise TypeError("input argument should be an integer, string or "
                  "list of integers or strings")
docs: Return the channel indices for the specified channel names.
  
          Integers contained in `channel` are returned unmodified, if they
          are within the range of ``self.channels``.
  
          Parameters
          ----------
          channels : int or str or list of int or list of str
              Name(s) of the channel(s) of interest.
  
          Returns
          -------
          int or list of int
              Numerical index(ces) of the specified channels.