o
    ÒèFh¹  ã                   @  s”   d dl mZ d dlZd dlmZ ddlmZmZmZm	Z	 G dd„ dƒZ
d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dS )é    )ÚannotationsN)ÚSequenceé   )ÚGimpGradientFileÚGimpPaletteFileÚ
ImageColorÚPaletteFilec                   @  sŠ   e Zd ZdZd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d„Z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ÚmodeÚstrÚpaletteúSequence[int] | NoneÚreturnÚNonec                 C  s"   || _ d | _|p
tƒ | _d | _d S ©N)r   ÚrawmodeÚ	bytearrayr   Údirty)Úselfr   r   © r   úI/var/www/html/loop/nvenv/lib/python3.10/site-packages/PIL/ImagePalette.pyÚ__init__&   s   
zImagePalette.__init__c                 C  s   | j S r   )Ú_palette©r   r   r   r   r   ,   s   zImagePalette.palettec                 C  s   d | _ || _d S r   )Ú_colorsr   )r   r   r   r   r   r   0   s   
c                 C  sh   | j d u r1t| jƒ}i | _ tdt| jƒ|ƒD ]}t| j||| … ƒ}|| j v r)q|| | j |< q| j S )Nr   )r   Úlenr   Úranger   Útuple)r   Úmode_lenÚiÚcolorr   r   r   Úcolors5   s   


zImagePalette.colorsc                 C  s
   || _ d S r   )r   )r   r"   r   r   r   r"   A   s   
c                 C  s<   t ƒ }| j|_| j|_| jd ur| jd d … |_| j|_|S r   )r	   r   r   r   r   )r   Únewr   r   r   ÚcopyE   s   
zImagePalette.copyc                 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   ÚgetdataP   s   zImagePalette.getdatac                 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   ÚbytesÚarrayr%   )r   ÚmsgÚarrr   r   r   r%   [   s   zImagePalette.tobytesc                 C  sº   t | jtƒst| jƒ| _t| jƒd }d}|r/|j d¡|j d¡f}||v r/|d7 }||v s'|dkr[|rPttt	| 
¡ ƒƒƒD ]\}}|dkrO||vrO|} nq?|dkr[d}t|ƒ|‚|S )	Né   r   Ú
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    Úcountr-   r   r   r   Ú_new_color_indexk   s,   

þÿ€
zImagePalette._new_color_indexÚintc              
   C  s6  | j r	d}t|ƒ‚t|tƒr�| jdkr,t|ƒdkr+|d dkr%d}t|ƒ‚|dd… }n| jdkr;t|ƒdkr;|d	7 }z| j| W S  ty� } zB|  ||¡}|| j|< |d t| j	ƒk rw| j	d|d … t
|ƒ | j	|d d d…  | _n	|  jt
|ƒ7  _d
| _|W  Y d}~S d}~ww dt|ƒ› �}t|ƒ‚)zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r'   r
   é   r/   éÿ   z/cannot add non-opaque RGBA color to RGB paletteNÚRGBA©rA   r   zunknown color specifier: )r   r)   r*   r   r   r   r"   ÚKeyErrorr>   r   r+   r   r   Úrepr)r   r!   r9   r-   r:   r;   r   r   r   Úgetcolorƒ   sB   

€

ÿþÿ€ózImagePalette.getcolorc              
   C  sÒ   | j r	d}t|ƒ‚t|tƒrt|dƒ}| d¡ | d| j› d�¡ tdƒD ]<}| |› ¡ t|t| jƒ |d t| jƒ ƒD ]}z| d| j	| › �¡ W q? t
y\   | d	¡ Y q?w | d¡ q&| ¡  d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        r'   Úwz
# Palette
z# Mode: Ú
r2   r   ú z 0N)r   r)   r*   r   ÚopenÚwriter   r   r   r   Ú
IndexErrorÚclose)r   Úfpr-   r    Újr   r   r   Úsave©   s"   


&ÿzImagePalette.save)r
   N)r   r   r   r   r   r   )NNr   )r   r?   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr"   r$   r&   r%   Útostringr>   rF   rP   r   r   r   r   r	      s$    




&r	   r   c                 C  s   t ƒ }| |_||_d|_|S )Nr   )r	   r   r   r   )r   Údatar   r   r   r   ÚrawÄ   s
   rY   c                   s*   | dkr‡ fdd„t dƒD ƒS d}t|ƒ‚)Nr   c                   s   g | ]}ˆ | d  ‘qS rC   r   ©Ú.0r    ©Úwhiter   r   Ú
<listcomp>Ò   ó    z#make_linear_lut.<locals>.<listcomp>r2   z"unavailable when black is non-zero)r   ÚNotImplementedError)Úblackr]   r-   r   r\   r   Úmake_linear_lutÐ   s   rb   c                   s   ‡ fdd„t dƒD ƒS )Nc                   s$   g | ]}t |d  ˆ  d  d ƒ‘qS )g     ào@g      à?)r?   rZ   ©Úexpr   r   r^   Ù   s   $ z"make_gamma_lut.<locals>.<listcomp>r2   )r   rc   r   rc   r   Úmake_gamma_lutØ   s   re   r
   c                   s4   t tdtˆ ƒ ƒƒ}| ¡  tˆ ‡ fdd„|D ƒƒS )Nr2   c                   ó   g | ]}|t ˆ ƒ ‘qS r   ©r   rZ   ©r   r   r   r^   ß   r_   znegative.<locals>.<listcomp>)r6   r   r   Úreverser	   ©r   r   r   rh   r   ÚnegativeÜ   s   rk   c                   s4   ddl m‰  ‡ fdd„tdt| ƒ ƒD ƒ}t| |ƒS )Nr   ©Úrandintc                   s   g | ]}ˆ d dƒ‘qS )r   rA   r   )r[   Ú_rl   r   r   r^   å   ó    zrandom.<locals>.<listcomp>r2   )Úrandomrm   r   r   r	   rj   r   rl   r   rp   â   s   
rp   ú#fff0c0c                   s0   dd„ t  | ¡D ƒ‰ td‡ fdd„tdƒD ƒƒS )Nc                 S  s   g | ]}t d |ƒ‘qS )r   )rb   )r[   Úbandr   r   r   r^   ê   ro   zsepia.<locals>.<listcomp>r
   c                   s    g | ]}ˆ |d   |d   ‘qS )r/   r   rZ   ©Úbandsr   r   r^   ë   s     i   )r   Úgetrgbr	   r   r\   r   rs   r   Úsepiaé   s   rv   c                   s,   t tdtˆ ƒ ƒƒ}tˆ ‡ fdd„|D ƒƒS )Nr2   c                   rf   r   rg   rZ   rh   r   r   r^   ð   r_   zwedge.<locals>.<listcomp>)r6   r   r   r	   rj   r   rh   r   Úwedgeî   s   rw   c                 C  sŒ   t | dƒ�7}tjtjtjfD ]}z| d¡ ||ƒ ¡ }|r!W  nW q ttfy-   Y qw d}t|ƒ‚W d   ƒ |S 1 s?w   Y  |S )NÚrbr   zcannot load palette)	rJ   r   r   r   ÚseekÚ
getpaletteÚSyntaxErrorr)   ÚOSError)ÚfilenamerN   ÚpaletteHandlerÚlutr-   r   r   r   Úloadó   s*   ý
ÿÿû
öïr€   )r   r	   )r
   )rq   )Ú
__future__r   r,   Útypingr   Ú r   r   r   r   r	   rY   rb   re   rk   rp   rv   rw   r€   r   r   r   r   Ú<module>   s    
+



