code: def _from_p(self, mode):
          
  
          self._check_modes(("P", "PA"))
  
          if self.mode.endswith("A"):
              alpha = self.channels[-1]
          else:
              alpha = None
  
          chans = []
          cdfs = []
  
          color_chan = self.channels[0]
  
          for i in range(len(self.palette[0])):
              cdfs.append(np.zeros(len(self.palette)))
              for j in range(len(self.palette)):
                  cdfs[i][j] = self.palette[j][i]
              new_chn = np.ma.array(np.interp(color_chan,
                                              np.arange(len(self.palette)),
                                              cdfs[i]),
                                    mask=color_chan.mask)
              chans.append(new_chn)
  
          if self.fill_value is not None:
              if alpha is not None:
                  fill_alpha = self.fill_value[-1]
                  self.fill_value = list(self.palette[int(self.fill_value[0])])
                  self.fill_value += [fill_alpha]
              else:
                  self.fill_value = list(self.palette[int(self.fill_value[0])])
  
          self.mode = self._secondary_mode
          self.channels = chans
          if alpha is not None:
              self.channels.append(alpha)
              self.mode = self.mode + "A"
  
          self.convert(mode)
docs: Convert the image from P or PA mode.