a
    ç´«j1#  ã                   @  sö   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rXddlmZ G d	d
„ d
ƒZddd
dœdd„Zddddœdd„Zdddœdd„Zd)dd
dœdd„Zd*dd
dœdd„Zd+dd
d œd!d"„Zd,dd
dœd#d$„Zdd%d&œd'd(„ZdS )-é    )ÚannotationsN)ÚSequence)ÚIOé   )ÚGimpGradientFileÚGimpPaletteFileÚ
ImageColorÚPaletteFileF)ÚImagec                   @  sÚ   e Zd ZdZd+ddddœdd	„Zed
dœdd„ƒZejd
ddœdd„ƒZeddœdd„ƒZejdddœdd„ƒZd dœdd„Z	ddœdd„Z
ddœdd„ZeZd,dddd œd!d"„Zd-d#ddd$œd%d&„Zd'dd(œd)d*„ZdS ).Ú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.
    ÚRGBNÚstrz(Sequence[int] | bytes | bytearray | NoneÚNone)ÚmodeÚpaletteÚreturnc                 C  s"   || _ d | _|ptƒ | _d | _d S ©N)r   ÚrawmodeÚ	bytearrayr   Údirty)Úselfr   r   © r   úO/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/ImagePalette.pyÚ__init__+   s    zImagePalette.__init__ú!Sequence[int] | bytes | bytearray)r   c                 C  s   | j S r   )Ú_palette©r   r   r   r   r   5   s    zImagePalette.palette)r   r   c                 C  s   d | _ || _d S r   )Ú_colorsr   )r   r   r   r   r   r   9   s    zdict[tuple[int, ...], int]c                 C  sh   | j d u rbt| jƒ}i | _ tdt| jƒ|ƒD ]4}t| j||| … ƒ}|| j v rRq,|| | j |< q,| j S )Nr   )r   Úlenr   Úranger   Útuple)r   Zmode_lenÚiÚcolorr   r   r   Úcolors>   s    


zImagePalette.colors)r#   r   c                 C  s
   || _ d S r   )r   )r   r#   r   r   r   r#   J   s    c                 C  s<   t ƒ }| j|_| j|_| jd ur0| jd d … |_| j|_|S r   )r   r   r   r   r   )r   Únewr   r   r   ÚcopyN   s    
zImagePalette.copyz-tuple[str, Sequence[int] | bytes | bytearray]c                 C  s    | j r| j | jfS | 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   r   r   r   ÚgetdataY   s    zImagePalette.getdataÚbytesc                 C  s:   | j rd}t|ƒ‚t| jtƒr$| jS t d| j¡}| ¡ S )zUConvert palette to bytes.

        .. warning:: This method is experimental.
        ú!palette contains raw palette dataÚB)r   Ú
ValueErrorÚ
isinstancer   r(   Úarrayr&   )r   ÚmsgZarrr   r   r   r&   d   s    zImagePalette.tobyteszImage.Image | NonezException | NoneÚint)ÚimageÚer   c                 C  s´   t | jtƒst| jƒ| _t| jƒd }d}|rX|j d¡|j d¡f}||v rX|d7 }qF|dkr°|ršttt	| 
¡ ƒƒƒD ] \}}|dkrx||vrx|} qšqx|dkr°d}t|ƒ|‚|S )	Né   r   Ú
backgroundZtransparencyr   é   r   z$cannot allocate more than 256 colors)r,   r   r   r   r   ÚinfoÚgetÚreversedÚlistÚ	enumerateZ	histogramr+   )r   r0   r1   ÚindexZspecial_colorsr!   Úcountr.   r   r   r   Ú_new_color_indext   s(    

þ

zImagePalette._new_color_indexztuple[int, ...])r"   r0   r   c              
   C  sR  | j rd}t|ƒ‚t|tƒ�r8| jdkrZt|ƒdkrx|d dkrLd}t|ƒ‚|dd… }n| jdkrxt|ƒdkrx|d	7 }z| j| W S  t�y4 } z–|  ||¡}t| j	t
ƒs²J ‚|| j|< |d t| jƒk �r| j	d|d … t|ƒ | j	|d d d…  | _	n|  j	t|ƒ7  _	d
| _|W  Y d}~S d}~0 0 ndt|ƒ› �}t|ƒ‚dS )zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r)   r   é   r2   éÿ   z/cannot add non-opaque RGBA color to RGB paletteNZRGBA©r>   r   zunknown color specifier: )r   r+   r,   r    r   r   r#   ÚKeyErrorr<   r   r   r   r(   r   Úrepr)r   r"   r0   r.   r1   r:   r   r   r   ÚgetcolorŽ   s>    	


ÿþÿzImagePalette.getcolorzstr | IO[str])Úfpr   c              
   C  sÔ   | j rd}t|ƒ‚t|tƒr&t|dƒ}| d¡ | d| j› d�¡ tdƒD ]z}| |› ¡ t|t| jƒ |d t| jƒ ƒD ]<}z| d| j	| › �¡ W q~ t
y¸   | d	¡ Y q~0 q~| d¡ qL| ¡  d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        r)   Úwz
# Palette
z# Mode: Ú
r4   r   ú z 0N)r   r+   r,   r   ÚopenÚwriter   r   r   r   Ú
IndexErrorÚclose)r   rC   r.   r!   Újr   r   r   Úsave¹   s     


&zImagePalette.save)r   N)NN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr#   r%   r'   r&   Útostringr<   rB   rL   r   r   r   r   r      s*     ý
 ÿ ý+r   r   r   )r   Údatar   c                 C  s   t ƒ }| |_||_d|_|S )Nr   )r   r   r   r   )r   rT   r   r   r   r   ÚrawÔ   s
    rU   r/   Úfloatz	list[int])ÚblackÚwhiter   c                   s.   | dkr‡ fdd„t dƒD ƒS d}t|ƒ‚d S )Nr   c                   s   g | ]}t ˆ | d  ƒ‘qS r?   ©r/   ©Ú.0r!   ©rX   r   r   Ú
<listcomp>â   ó    z#make_linear_lut.<locals>.<listcomp>r4   z"unavailable when black is non-zero)r   ÚNotImplementedError)rW   rX   r.   r   r\   r   Úmake_linear_lutà   s    r`   )Úexpr   c                   s   ‡ fdd„t dƒD ƒS )Nc                   s$   g | ]}t |d  ˆ  d  d ƒ‘qS )g     ào@g      à?rY   rZ   ©ra   r   r   r]   é   r^   z"make_gamma_lut.<locals>.<listcomp>r4   )r   rb   r   rb   r   Úmake_gamma_lutè   s    rc   r   )r   r   c                   s4   t tdtˆ ƒ ƒƒ}| ¡  tˆ ‡ fdd„|D ƒƒS )Nr4   c                   s   g | ]}|t ˆ ƒ ‘qS r   ©r   rZ   ©r   r   r   r]   ï   r^   znegative.<locals>.<listcomp>)r8   r   r   Úreverser   ©r   r   r   re   r   Únegativeì   s    rh   c                   s4   ddl m‰  ‡ fdd„tdt| ƒ ƒD ƒ}t| |ƒS )Nr   ©Úrandintc                   s   g | ]}ˆ d dƒ‘qS )r   r>   r   )r[   Ú_ri   r   r   r]   õ   r^   zrandom.<locals>.<listcomp>r4   )Úrandomrj   r   r   r   rg   r   ri   r   rl   ò   s    rl   ú#fff0c0)rX   r   c                   s0   dd„ t  | ¡D ƒ‰ td‡ fdd„tdƒD ƒƒS )Nc                 S  s   g | ]}t d |ƒ‘qS )r   )r`   )r[   Zbandr   r   r   r]   ú   r^   zsepia.<locals>.<listcomp>r   c                   s    g | ]}ˆ |d   |d   ‘qS )r2   r   rZ   ©Zbandsr   r   r]   û   r^   i   )r   Zgetrgbr   r   r\   r   rn   r   Úsepiaù   s    ro   c                   s,   t tdtˆ ƒ ƒƒ}tˆ ‡ fdd„|D ƒƒS )Nr4   c                   s   g | ]}|t ˆ ƒ ‘qS r   rd   rZ   re   r   r   r]      r^   zwedge.<locals>.<listcomp>)r8   r   r   r   rg   r   re   r   Úwedgeþ   s    rp   ztuple[bytes, str])Úfilenamer   c                 C  s�   t | dƒ�r}tjtjtjg}|D ]@}z$| d¡ ||ƒ ¡ }|rFW  qnW q  ttfy^   Y q 0 q d}t|ƒ‚W d   ƒ n1 s‚0    Y  |S )NÚrbr   zcannot load palette)	rG   r   r   r	   ÚseekZ
getpaletteÚSyntaxErrorr+   ÚOSError)rq   rC   ZpaletteHandlersZpaletteHandlerZlutr.   r   r   r   Úload  s"    ýú

&rv   )r   )r   )rm   )r   )Ú
__future__r   r-   Úcollections.abcr   Útypingr   Ú r   r   r   r	   ÚTYPE_CHECKINGr
   r   rU   r`   rc   rh   rl   ro   rp   rv   r   r   r   r   Ú<module>   s"    6