
    :h1#                        d dl mZ d dlZd dlmZ d dlmZ ddlmZm	Z	m
Z
mZ dZerddlmZ  G d	 d
      ZddZddZddZdddZdddZdddZdddZddZy)    )annotationsN)Sequence)IO   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFileF)Imagec                      e Zd ZdZ	 	 d	 	 	 	 	 ddZedd       Zej                  dd       Zedd       Zej                  dd       ZddZ	dd	Z
dd
ZeZ	 d	 	 	 	 	 ddZ	 d	 	 	 	 	 ddZd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      N/var/www/urcfiles/bundle/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.palette5   s    }}r   c                     d | _         || _        y r   )_colorsr   )r   r   s     r   r   zImagePalette.palette9   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.colors>   s    <<499~HDL1c$,,/:dll1q8|<=DLL(&'8mU#	 ;
 ||r   c                    || _         y r   )r   )r   r%   s     r   r%   zImagePalette.colorsJ   s	    r   c                    t               }| j                  |_        | j                  |_        | j                  | j                  d d  |_        | j                  |_        |S r   )r   r   r   r   r   )r   news     r   copyzImagePalette.copyN   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.getdataY   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.tobytesd   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)r1   r   r   r   r   infogetreversedlist	enumerate	histogramr0   )r   imageeindexspecial_colorsr#   countr4   s           r   _new_color_indexzImagePalette._new_color_indext   s     $,,	2%dll3DMDLL!Q&CE

|,

~.N >)
 >)C< (i8I.J)K LHAuza~&= ! !M |< 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                  ||      }t        | j                  t              s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   r7      z/cannot add non-opaque RGBA color to RGB paletteNRGBA)rK   r   zunknown color specifier: )r   r0   r1   r!   r   r   r%   KeyErrorrG   r   r   r   r2   r   repr)r   r$   rB   r4   rC   rD   s         r   getcolorzImagePalette.getcolor   sk    <<5CS/!eU#yyE!u:?Qx3O(o-!"1IEf$u:?VOE{{5))" .d5k];CS/!#  --eQ7!$--;;;%*E"19s4<<00k	2,'--	A89 M MMU5\1M
s   B- -	E96B8E4.E94E9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   r0   r1   stropenwriter   r    r   r   
IndexErrorclose)r   fpr4   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 I
 HHTN  	
 " #HHTN#s   !DD)(D))rI   N)r   rT   r   z(Sequence[int] | bytes | bytearray | NonereturnNone)r\   !Sequence[int] | bytes | bytearray)r   r^   r\   r]   )r\   dict[tuple[int, ...], int])r%   r_   r\   r]   )r\   r   )r\   z-tuple[str, Sequence[int] | bytes | bytearray])r\   r2   )NN)rB   Image.Image | NonerC   zException | Noner\   intr   )r$   ztuple[int, ...]rB   r`   r\   ra   )rY   zstr | IO[str]r\   r]   )__name__
__module____qualname____doc__r   propertyr   setterr%   r)   r,   r+   tostringrG   rO   r[   r8   r   r   r   r      s    	 <@&& :& 
	&   ^^    	 	 ]] 		) H GK'3C	: %))")" ")" 
	)"Vr   r   c                D    t               }| |_        ||_        d|_        |S )Nr   )r   r   r   r   )r   datar   s      r   rawrk      s#    nGGOGOGMNr   c                    | dk(  r(t        d      D cg c]  }t        ||z  dz         c}S d}t        |      c c}w )Nr   r;   rK   z"unavailable when black is non-zero)r    ra   NotImplementedError)blackwhiter#   r4   s       r   make_linear_lutrp      sE    z/4Sz:z!EAI$%z::
.C
c
"" ;s   ;c                h    t        d      D cg c]  }t        |dz  | z  dz  dz          c}S c c}w )Nr;   g     o@g      ?)r    ra   )expr#   s     r   make_gamma_lutrs      s6    =B3ZHZC!e)#u,s23ZHHHs   /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   negativerx      sJ    5s4y)*GOOw?w!qCI~w?@@?s   A
c                    ddl m} t        dt        |       z        D cg c]  } |dd       }}t	        | |      S c c}w )Nr   )randintr;   rK   )randomrz   r    r   r   )r   rz   _r   s       r   r{   r{      sA    (-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   rI   i   r7   )r	   getrgbrp   r   r    )ro   bandbandsr#   s       r   sepiar      sd    2<2C2CE2JK2J$_Q%2JEKeGnMna!eQ!V 4n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 ru   )r?   r    r   r   rw   s      r   wedger      s@    5s4y)*Gw?w!qCI~w?@@?s   A
c                T   t        | d      5 }t        j                  t        j                  t        j                  g}|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)	rU   r   r   r
   seek
getpaletteSyntaxErrorr0   OSError)filenamerY   paletteHandlerspaletteHandlerlutr4   s         r   loadr     s     
h	 ++--##
 	 .N
$R(335 	 . (C#, # 
0 J  , % 
0 Js/   5B)B,BBBBBB')r   rT   rj   r^   r\   r   )rn   ra   ro   floatr\   	list[int])rr   r   r\   r   )rI   )r   rT   r\   r   )z#fff0c0)ro   rT   r\   r   )r   rT   r\   ztuple[bytes, str])
__future__r   r3   collections.abcr   typingr    r   r   r	   r
   TYPE_CHECKINGr   r   rk   rp   rs   rx   r{   r   r   r   r8   r   r   <module>r      s]   $ #  $  H Hn nj#IA'O
A
r   