
    eS                    |    d dl mZ d dlZddlmZmZmZmZ  G d d      Zd Z	d Z
d	 Zdd
ZddZddZddZd Zy)    )annotationsN   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFilec                      e Zd ZdZddZed        Zej                  d        Zed        Zej                  d        Zd Z	d	 Z
d
 ZeZddZddZd Zy)ImagePalettea  
    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.
    Nc                T    || _         d | _        |xs
 t               | _        d | _        y N)moderawmode	bytearraypalettedirty)selfr   r   s      2/usr/lib/python3/dist-packages/PIL/ImagePalette.py__init__zImagePalette.__init__%   s%    	-)+
    c                    | j                   S r   )_paletter   s    r   r   zImagePalette.palette+   s    }}r   c                     d | _         || _        y r   )_colorsr   )r   r   s     r   r   zImagePalette.palette/   s    r   c                ,   | j                   }t        | j                        }i | _         t        dt        | j                        |      D ]>  }t        | j                  |||z          }|| j                   v r-||z  | j                   |<   @ | j                   S )Nr   )r   lenr   ranger   tuple)r   mode_lenicolors       r   colorszImagePalette.colors4   s    <<499~HDL1c$,,/: 4dll1q8|<=DLL(&'8mU#	4
 ||r   c                    || _         y r   )r   )r   r"   s     r   r"   zImagePalette.colors@   s	    r   c                    t               }| j                  |_        | j                  |_        | j                  | j                  d d  |_        | j                  |_        |S r   )r
   r   r   r   r   )r   news     r   copyzImagePalette.copyD   sH    n99ll<<#,,q/CKJJ	
r   c                    | j                   r| j                   | j                  fS | j                  | j                         fS )z
        Get palette contents in format suitable for the low-level
        ``im.putpalette`` primitive.

        .. warning:: This method is experimental.
        )r   r   r   tobytesr   s    r   getdatazImagePalette.getdataO   s3     <<<<--yy$,,.((r   c                    | j                   rd}t        |      t        | j                  t              r| j                  S t        j
                  d| j                        }|j                         S )zUConvert palette to bytes.

        .. warning:: This method is experimental.
        !palette contains raw palette dataB)r   
ValueError
isinstancer   bytesarrayr(   )r   msgarrs      r   r(   zImagePalette.tobytesZ   sR    
 <<5CS/!dllE*<<kk#t||,{{}r   c                   t        | j                  t              st        | j                        | _        t	        | j                        dz  }d}|rD|j
                  j                  d      |j
                  j                  d      f}||v r
|dz  }||v r
|dk\  rV|rAt        t        t        |j                                           D ]  \  }}|dk(  s||vs|} n |dk\  rd}t        |      ||S )	N    
backgroundtransparencyr      r   z$cannot allocate more than 256 colors)r.   r   r   r   r   infogetreversedlist	enumerate	histogramr-   )r   imageeindexspecial_colorsr    countr1   s           r   _new_color_indexzImagePalette._new_color_indexj   s    $,,	2%dll3DMDLL!Q&

|,

~.N >)
 >)C< (i8I.J)K L HAuza~&= ! |< o1,r   c                   | j                   rd}t        |      t        |t              rj| j                  dk(  r)t        |      dk(  r=|d   dk7  rd}t        |      |dd }n"| j                  dk(  rt        |      dk(  r|d	z  }	 | j                  |   S dt        |       }t        |      # t        $ r}| j                  ||      }|| j                  |<   |dz  t        | j                        k  r:| j                  d|dz   t        |      z   | j                  |dz  dz   d z   | _        n| xj                  t        |      z  c_        d
| _        |cY d}~S d}~ww xY w)zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r+   RGB   r4      z/cannot add non-opaque RGBA color to RGB paletteNRGBA)rH   r   zunknown color specifier: )r   r-   r.   r   r   r   r"   KeyErrorrD   r   r/   r   r   repr)r   r!   r?   r1   r@   rA   s         r   getcolorzImagePalette.getcolor   sW   
 <<5CS/!eU#yyE!u:?Qx3O(o-!"1IEf$u:?VOE{{5))  .d5k];CS/!!  --eQ7%*E"19s4<<00[uqy1,',,uqy1}78 M MMU5\1M
s   B- -	E6BEEEc                X   | j                   rd}t        |      t        |t              rt	        |d      }|j                  d       |j                  d| j                   d       t        d      D ]  }|j                  |        t        |t        | j                        z  |dz   t        | j                        z        D ]$  }	 |j                  d| j                  |           & |j                  d        |j                          y
# t        $ r |j                  d	       Y gw xY w)zVSave palette to text file.

        .. warning:: This method is experimental.
        r+   wz
# Palette
z# Mode: 
r8   r    z 0N)r   r-   r.   stropenwriter   r   r   r   
IndexErrorclose)r   fpr1   r    js        r   savezImagePalette.save   s    
 <<5CS/!b#b#B

8DII;b)*s 	AHHs1s499~-ATYY/GH ##HHqa 123#
 HHTN	 	
 " #HHTN#s   !DD)(D))rF   N)NNr   )__name__
__module____qualname____doc__r   propertyr   setterr"   r&   r)   r(   tostringrD   rL   rX   r5   r   r   r
   r
      s    	   ^^    	 	 ]] 		) H0$"Lr   r
   c                D    t               }| |_        ||_        d|_        |S )Nr   )r
   r   r   r   )r   datar   s      r   rawrb      s#    nGGOGOGMNr   c                n    | dk(  rt        d      D cg c]
  }||z  dz   c}S d}t        |      c c}w )Nr   r8   rH   z"unavailable when black is non-zero)r   NotImplementedError)blackwhiter    r1   s       r   make_linear_lutrg      s<    z*/*5Q	S 55
.C
c
"" 6s   2c                h    t        d      D cg c]  }t        |dz  | z  dz  dz          c}S c c}w )Nr8   g     o@g      ?)r   int)expr    s     r   make_gamma_lutrk      s2    =B3ZHC!e)#u,s23HHHs   /c           
         t        t        dt        |       z              }|j                          t	        | |D cg c]  }|t        |       z   c}      S c c}w Nr8   )r<   r   r   reverser
   r   r   r    s      r   negativerp      sF    5s4y)*GOOw?!qCI~?@@?s   A
c                    ddl m} t        dt        |       z        D cg c]  } |dd       }}t	        | |      S c c}w )Nr   )randintr8   rH   )randomrr   r   r   r
   )r   rr   _r   s       r   rs   rs      s>    (-cCIo(>?1wq#?G?g&& @s   >c           	         t        j                  |       D cg c]  }t        d|       }}t        dt	        d      D cg c]  }||dz     |dz      c}      S c c}w c c}w )Nr   rF   i   r4   )r   getrgbrg   r
   r   )rf   bandbandsr    s       r   sepiary      s]    2<2C2CE2JK$_Q%KEKeGnMa!eQ!V 4MNN LMs   A A!
c           
         t        t        dt        |       z              }t        | |D cg c]  }|t        |       z   c}      S c c}w rm   )r<   r   r   r
   ro   s      r   wedger{      s<    5s4y)*Gw?!qCI~?@@?s   A
c                P   t        | d      5 }t        j                  t        j                  t        j                  fD ].  }	 |j	                  d        ||      j                         }|r n0 d}t        |      	 d d d        |S # t        t        f$ r Y Zw xY w# 1 sw Y   S xY w)Nrbr   zcannot load palette)	rR   r   r   r   seek
getpaletteSyntaxErrorr-   OSError)filenamerV   paletteHandlerlutr1   s        r   loadr      s     
h	 ++--##
 	N

$R(335 	 (C#, " J  , " Js/   3B)B*BBBBBB%)rF   )z#fff0c0)
__future__r   r0    r   r   r   r   r
   rb   rg   rk   rp   rs   ry   r{   r   r5   r   r   <module>r      sL   $ #  H Hc cT#IA'O
A
r   