
    Bwg*#                        d dl mZ d dlZd dlmZ d dlmZmZ ddlm	Z	m
Z
mZm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TYPE_CHECKING   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFile)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      G/var/www/horilla/myenv/lib/python3.12/site-packages/PIL/ImagePalette.py__init__zImagePalette.__init__*   s'    
 	#'-)+!%
    c                    | j                   S r   )_paletter   s    r   r   zImagePalette.palette4   s    }}r   c                     d | _         || _        y r   )_colorsr   )r   r   s     r   r   zImagePalette.palette8   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$,,/: 4dll1q8|<=DLL(&'8mU#	4
 ||r   c                    || _         y r   )r   )r   r&   s     r   r&   zImagePalette.colorsI   s	    r   c                    t               }| j                  |_        | j                  |_        | j                  | j                  d d  |_        | j                  |_        |S r   )r   r   r   r   r   )r   news     r   copyzImagePalette.copyM   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.getdataX   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.tobytesc   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)r2   r   r   r   r    infogetreversedlist	enumerate	histogramr1   )r   imageeindexspecial_colorsr$   countr5   s           r   _new_color_indexzImagePalette._new_color_indexs   s     $,,	2%dll3DMDLL!Q&CE

|,

~.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                  ||      }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   r8      z/cannot add non-opaque RGBA color to RGB paletteNRGBA)rL   r   zunknown color specifier: )r   r1   r2   r"   r   r    r&   KeyErrorrH   r   r   r   r3   r   repr)r   r%   rC   r5   rD   rE   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   r1   r2   stropenwriter   r!   r    r   
IndexErrorclose)r   fpr5   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))rJ   N)r   rU   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]   r3   )NN)rC   Image.Image | NonerD   zException | Noner]   intr   )r%   ztuple[int, ...]rC   ra   r]   rb   )rZ   zstr | IO[str]r]   r^   )__name__
__module____qualname____doc__r   propertyr   setterr&   r*   r-   r,   tostringrH   rP   r\   r9   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   rawrl      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<   rL   z"unavailable when black is non-zero)r!   rb   NotImplementedError)blackwhiter$   r5   s       r   make_linear_lutrq      sA    z/4Sz:!EAI$%::
.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!   rb   )expr$   s     r   make_gamma_lutrt      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 Nr<   )r@   r!   r    reverser   r   r   r$   s      r   negativery      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   )randintr<   rL   )randomr{   r!   r    r   )r   r{   _r   s       r   r|   r|      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   rJ   i   r8   )r
   getrgbrq   r   r!   )rp   bandbandsr$   s       r   sepiar      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 rv   )r@   r!   r    r   rx   s      r   wedger      s<    5s4y)*Gw?!qCI~?@@?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)	rV   r	   r   r   seek
getpaletteSyntaxErrorr1   OSError)filenamerZ   paletteHandlerspaletteHandlerlutr5   s         r   loadr     s     
h	  ++--##
 	 . 
	N
$R(335 	
	 (C#, #0 J  , %0 Js/   5B)B,BBBBBB')r   rU   rk   r_   r]   r   )ro   rb   rp   floatr]   	list[int])rs   r   r]   r   )rJ   )r   rU   r]   r   )z#fff0c0)rp   rU   r]   r   )r   rU   r]   ztuple[bytes, str])
__future__r   r4   collections.abcr   typingr   r    r   r	   r
   r   r   r   rl   rq   rt   ry   r|   r   r   r   r9   r   r   <module>r      sX   $ #  $ $ H Hn nj#IA'O
A
r   