class_docstr: Color palette for palette mapped images
  
  :param mode: The mode to use for the palette. See:
      :ref:`concept-modes`. Defaults to "RGB"
  :param palette: An optional palette. If given, it must be a bytearray,
      an array or a list of ints between 0-255. The list must consist of
      all channels for one color followed by the next color (e.g. RGBRGBRGB).
      Defaults to an empty palette.
code: def _new_color_index(self, image=None, e=None):
      if not isinstance(self.palette, bytearray):
          self._palette = bytearray(self.palette)
      index = len(self.palette) // 3
      special_colors = ()
      if image:
          special_colors = (
              image.info.get("background"),
              image.info.get("transparency"),
          )
          while index in special_colors:
              index += 1
      if index >= 256:
          if image:
              # Search for an unused index
              for i, count in reversed(
                  list(enumerate(image.histogram()))
              ):
                  if count == 0 and i not in special_colors:
                      index = i
                      break
          if index >= 256:
              msg = "cannot allocate more than 256 colors"
              raise ValueError(msg) from e
      return index
  
imports: from __future__ import annotations
  import array
  from .None import GimpGradientFile, GimpPaletteFile, ImageColor, PaletteFile
label_desc: Use image node_id 9 for calling the ImagePalette obj's underlying member method code with example usage: obj._new_color_index(image, e) and returns: index