o
    “j%  ã                   @  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r,ddlmZ G d	d
„ d
ƒZd+dd„Zd,dd„Zd-dd„Zd.d/dd„Zd.d/d d!„Zd0d1d#d$„Zd.d/d%d&„Zd2d)d*„ZdS )3é    )ÚannotationsN)ÚSequence)ÚIOé   )ÚGimpGradientFileÚGimpPaletteFileÚ
ImageColorÚPaletteFileF)ÚImagec                   @  s¤   e Zd ZdZ		d,d-d
d„Zed.dd„ƒZejd/dd„ƒZed0dd„ƒZejd1dd„ƒZd2dd„Z	d3dd„Z
d4dd„ZeZ	d5d6d"d#„Z	d7d8d&d'„Zd9d*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] | bytes | bytearray | NoneÚreturnÚNonec                 C  s"   || _ d | _|p
tƒ | _d | _d S ©N)r   ÚrawmodeÚ	bytearrayr   Údirty)Úselfr   r   © r   úZC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\PIL/ImagePalette.pyÚ__init__+   s   
zImagePalette.__init__ú!Sequence[int] | bytes | bytearrayc                 C  s   | j S r   )Ú_palette©r   r   r   r   r   5   s   zImagePalette.palettec                 C  s   d | _ || _d S r   )Ú_colorsr   )r   r   r   r   r   r   9   s   
údict[tuple[int, ...], int]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   Úcolors>   s   


zImagePalette.colorsr&   c                 C  s
   || _ d S r   )r   )r   r&   r   r   r   r&   J   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   ÚcopyN   s   
zImagePalette.copyú-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.
        N)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ÚBN)r   Ú
ValueErrorÚ
isinstancer   r,   Úarrayr*   )r   ÚmsgZarrr   r   r   r*   d   s   zImagePalette.tobytesÚimageúImage.Image | NoneÚeúException | NoneÚintc                 C  sÀ   t | jtƒst| jƒ| _t| jƒt| jƒ }d}|r2|j d¡|j d¡f}||v r2|d7 }||v s*|dkr^|rStt	t
| ¡ ƒƒƒD ]\}}|dkrR||vrR|} qSqB|dkr^d}t|ƒ|‚|S )Nr   Z
backgroundZtransparencyr   é   r   z$cannot allocate more than 256 colors)r0   r   r   r   r    r   ÚinfoÚgetÚreversedÚlistÚ	enumerateZ	histogramr/   )r   r3   r5   ÚindexZspecial_colorsr$   Úcountr2   r   r   r   Ú_new_color_indext   s,   

þÿ€
zImagePalette._new_color_indexr%   útuple[int, ...]c              
   C  sP  | 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œ } zO|  ||¡}t| j	t
ƒsWJ ‚|| j|< t| jƒ}|| t| jƒk r„| j	d|| … t|ƒ | j	|| | 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   é   é   éÿ   z/cannot add non-opaque RGBA color to RGB paletteNZRGBA©rD   r   zunknown color specifier: )r   r/   r0   r"   r   r    r&   ÚKeyErrorr@   r   r   r   r,   r   Úrepr)r   r%   r3   r2   r5   r>   r#   r   r   r   ÚgetcolorŽ   sF   	

€


ÿþÿ€ñzImagePalette.getcolorÚfpústr | IO[str]c                 C  sì   | j r	d}t|ƒ‚d}t|tƒrt|dƒ}d}zV| d¡ | d| j› d�¡ t| jƒ}t	dƒD ]2}| |› ¡ t	|t| jƒ |d	 t| jƒ ƒD ]}| d
||k rW| j| nd› �¡ qI| d¡ q0W |rl| 
¡  dS dS |ru| 
¡  w w )zVSave palette to text file.

        .. warning:: This method is experimental.
        r-   FÚwTz
# Palette
z# Mode: Ú
r8   r   ú r   N)r   r/   r0   r   ÚopenÚwriter   r    r   r!   Úclose)r   rI   r2   Zopen_fpZpalette_lenr$   Újr   r   r   Úsaveº   s,   



&$üÿ
ÿzImagePalette.save)r   N)r   r   r   r   r   r   )r   r   )r   r   r   r   )r   r   )r&   r   r   r   )r   r   )r   r)   )r   r,   )NN)r3   r4   r5   r6   r   r7   r   )r%   rA   r3   r4   r   r7   )rI   rJ   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr&   r(   r+   r*   Útostringr@   rH   rR   r   r   r   r   r      s,    ý



ÿý,r   r   r   Údatar   r   c                 C  s   t ƒ }| |_||_d|_|S )Nr   )r   r   r   r   )r   rZ   r   r   r   r   ÚrawØ   s
   r[   Úblackr7   ÚwhiteÚfloatú	list[int]c                   s*   | dkr‡ fdd„t dƒD ƒS d}t|ƒ‚)Nr   c                   s   g | ]
}t ˆ | d  ƒ‘qS rE   ©r7   ©Ú.0r$   ©r]   r   r   Ú
<listcomp>æ   s    z#make_linear_lut.<locals>.<listcomp>r8   z"unavailable when black is non-zero)r!   ÚNotImplementedError)r\   r]   r2   r   rc   r   Úmake_linear_lutä   s   rf   Úexpc                   s   ‡ fdd„t dƒD ƒS )Nc                   s$   g | ]}t |d  ˆ  d  d ƒ‘qS )g     ào@g      à?r`   ra   ©rg   r   r   rd   í   s   $ z"make_gamma_lut.<locals>.<listcomp>r8   )r!   rh   r   rh   r   Úmake_gamma_lutì   s   ri   r   r   c                   s4   t tdtˆ ƒ ƒƒ}| ¡  tˆ ‡ fdd„|D ƒƒS )Nr8   c                   ó   g | ]}|t ˆ ƒ ‘qS r   ©r    ra   ©r   r   r   rd   ó   ó    znegative.<locals>.<listcomp>)r<   r!   r    Úreverser   ©r   r   r   rl   r   Únegativeð   s   rp   c                   s4   ddl m‰  ‡ fdd„tdt| ƒ ƒD ƒ}t| |ƒS )Nr   ©Úrandintc                   s   g | ]}ˆ d dƒ‘qS )r   rD   r   )rb   Ú_rq   r   r   rd   ù   ó    zrandom.<locals>.<listcomp>r8   )Úrandomrr   r!   r    r   ro   r   rq   r   ru   ö   s   
ru   ú#fff0c0c                   s0   dd„ t  | ¡D ƒ‰ td‡ fdd„tdƒD ƒƒS )Nc                 S  s   g | ]}t d |ƒ‘qS )r   )rf   )rb   Zbandr   r   r   rd   þ   rt   zsepia.<locals>.<listcomp>r   c                   s    g | ]}ˆ |d   |d   ‘qS )rC   r   ra   ©Zbandsr   r   rd   ÿ   s     i   )r   Zgetrgbr   r!   rc   r   rw   r   Úsepiaý   s   rx   c                   s,   t tdtˆ ƒ ƒƒ}tˆ ‡ fdd„|D ƒƒS )Nr8   c                   rj   r   rk   ra   rl   r   r   rd     rm   zwedge.<locals>.<listcomp>)r<   r!   r    r   ro   r   rl   r   Úwedge  s   ry   Úfilenameútuple[bytes, str]c                 C  s�   t | dƒ�9}tjtjtjg}|D ]}z| d¡ ||ƒ ¡ }|r#W  q6W q ttfy/   Y qw d}t|ƒ‚W d   ƒ |S 1 sAw   Y  |S )NÚrbr   zcannot load palette)	rN   r   r   r	   ÚseekZ
getpaletteÚSyntaxErrorr/   ÚOSError)rz   rI   ZpaletteHandlersZpaletteHandlerZlutr2   r   r   r   Úload  s.   ýú
ÿÿû
ïèr€   )r   r   rZ   r   r   r   )r\   r7   r]   r^   r   r_   )rg   r^   r   r_   )r   )r   r   r   r   )rv   )r]   r   r   r   )rz   r   r   r{   )Ú
__future__r   r1   Úcollections.abcr   Útypingr   Ú r   r   r   r	   ÚTYPE_CHECKINGr
   r   r[   rf   ri   rp   ru   rx   ry   r€   r   r   r   r   Ú<module>   s$    
:

