
    &Th                     p    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)    N   )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 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      X/home/stella.sw7ft.com/public_html/venv/lib/python3.12/site-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.colors3   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.copyC   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.getdataN   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.tobytesY   sR    
 <<5CS/!dllE*<<kk#t||,{{}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}t        | j                  t              st        | j                        | _
        t        | j                        dz  }d
}|r6|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        |      ||| 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         z/cannot add non-opaque RGBA color to RGB paletteNRGBA)r6    
backgroundtransparencyr      r   z$cannot allocate more than 256 colorszunknown color specifier: )r   r,   r-   r   r   r   r!   KeyErrorr   r   r   infogetreversedlist	enumerate	histogramr.   r   repr)	r   r    imager0   eindexspecial_colorsr   counts	            r   getcolorzImagePalette.getcolori   s(   
 <<5CS/!eU#yyE!u:?Qx3O(o-!"1IEf$u:?VOE#{{5))H .d5k];CS/!I  !!$,,	:$-dll$;DMDLL)Q.!#

|4

~6&N ~-QJE ~-C<(0i@Q6R1S(T &HAu$za~.E() %& |D(o14%*E"19s4<<00[uqy1,',,uqy1}78 M MMU5\1M
C!s2   B- -
H;7BH6=H6	H6B"H60H;6H;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: 
r;   r    z 0N)r   r,   r-   stropenwriter   r   r   r   
IndexErrorclose)r   fpr0   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))r3   Nr   )__name__
__module____qualname____doc__r   propertyr   setterr!   r%   r(   r'   tostringrI   rU   r8   r   r   r	   r	      s    	   ^^    	 	 ]] 		) H8"tr   r	   c                 D    t               }| |_        ||_        d|_        |S )Nr   )r	   r   r   r   )r   datar   s      r   rawr_      s#    nGGOGOGMNr   c                 n    g }| dk(  r)t        d      D ]  }|j                  ||z  dz          |S t        )Nr   r;   r6   )r   appendNotImplementedError)blackwhitelutr   s       r   make_linear_lutrf      sE    
Czs 	)AJJuqyC'(	) J "!r   c                 v    g }t        d      D ](  }|j                  t        |dz  | z  dz  dz                * |S )Nr;   g     o@g      ?)r   ra   int)expre   r   s      r   make_gamma_lutrj      sC    
C3Z <

3Us*e3c9:;<Jr   c           
          t        t        dt        |       z              }|j                          t	        | |D cg c]  }|t        |       z   c}      S c c}w Nr;   )r@   r   r   reverser	   r   r   r   s      r   negativero      sF    5s4y)*GOOw?!qCI~?@@?s   A
c                     ddl m} g }t        dt        |       z        D ]  }|j	                   |dd              t        | |      S )Nr   )randintr;   r6   )randomrq   r   r   ra   r	   )r   rq   r   r   s       r   rr   rr      sE    G3T?# (wq#'(g&&r   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   r3   i   r5   )r   getrgbrf   r	   r   )rd   bandbandsr   s       r   sepiarw      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 rl   )r@   r   r   r	   rn   s      r   wedgery      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)	rO   r   r   r   seek
getpaletteSyntaxErrorr,   OSError)filenamerS   paletteHandlerre   r0   s        r   loadr      s     
h	 ++--##
 	N

$R(335 	 (C#, & J  ,  & Js/   3B)B*BBBBBB%)r3   )z#fff0c0)r/    r   r   r   r   r	   r_   rf   rj   ro   rr   rw   ry   r   r8   r   r   <module>r      sH   &  H H_ _LA'O
A
r   