a
    çÝEb¡  ã                   @   s‚   d dl Z d dlZddlmZmZmZmZ G d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dS )é    Né   )ÚGimpGradientFileÚGimpPaletteFileÚ
ImageColorÚPaletteFilec                   @   sb   e Zd ZdZd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„ 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.
    :param size: An optional palette size. If given, an error is raised
        if ``palette`` is not of equal length.
    ÚRGBNr   c                 C   sL   || _ d | _|ptƒ | _d | _|dkrHt dt¡ |t| jƒkrHt	dƒ‚d S )Nr   zOThe size parameter is deprecated and will be removed in Pillow 10 (2023-07-01).zwrong palette size)
ÚmodeÚrawmodeÚ	bytearrayÚpaletteÚdirtyÚwarningsÚwarnÚDeprecationWarningÚlenÚ
ValueError)Úselfr	   r   Úsize© r   úP/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/PIL/ImagePalette.pyÚ__init__'   s    ýzImagePalette.__init__c                 C   s   | j S ©N)Ú_palette©r   r   r   r   r   5   s    zImagePalette.palettec                 C   sb   || _ t| jƒ}i | _tdt| jƒ|ƒD ]4}t| j||| … ƒ}|| jv rNq(|| | j|< q(d S )Nr   )r   r   r	   ÚcolorsÚranger   Útuple)r   r   Zmode_lenÚiÚcolorr   r   r   r   9   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   Ú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   s6   | j rtdƒ‚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
   r   Ú
isinstancer   ÚbytesÚarrayr"   )r   Zarrr   r   r   r"   [   s    zImagePalette.tobytesc              
   C   sÞ  | j rtdƒ‚t|tƒ�rÈ| jdkrJt|ƒdkrh|d dkrh|dd… }n| jdkrht|ƒdkrh|d7 }z| j| W S  t�yÄ } �z4t| jt	ƒs t	| jƒ| _
t| jƒd }d	}|rÎ|j d
¡|j d¡f}||v rà|d7 }qÎ|dk�rB|�r.ttt| ¡ ƒƒƒD ](\}}|dk�r||v�r|} �q.�q|dk�rBtdƒ|‚|| 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tdt|ƒ› �ƒ‚dS )zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r$   r   é   é   éÿ   NZRGBA)r+   r   Ú
backgroundZtransparencyr   é   r   z$cannot allocate more than 256 colorszunknown color specifier: )r
   r   r&   r   r	   r   r   ÚKeyErrorr   r   r   ÚinfoÚgetÚreversedÚlistÚ	enumerateZ	histogramr'   r   Úrepr)r   r   ÚimageÚeÚindexZspecial_colorsr   Úcountr   r   r   Úgetcolorj   sT    



þ





ÿþÿzImagePalette.getcolorc              
   C   sÐ   | j rtdƒ‚t|tƒr"t|dƒ}| d¡ | d| j› d�¡ tdƒD ]z}| |› ¡ t|t| jƒ |d t| jƒ ƒD ]<}z| d| j	| › �¡ W qz t
y´   | d	¡ Y qz0 qz| d¡ qH| ¡  d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        r$   Úwz
# Palette
z# Mode: Ú
r-   r   ú z 0N)r
   r   r&   ÚstrÚopenÚwriter	   r   r   r   Ú
IndexErrorÚclose)r   Úfpr   Újr   r   r   Úsavež   s    


&zImagePalette.save)r   Nr   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr!   r#   r"   Útostringr9   rD   r   r   r   r   r      s   



4r   c                 C   s   t ƒ }| |_||_d|_|S )Nr   )r   r
   r   r   )r
   Údatar   r   r   r   Úraw¸   s
    rM   c                 C   s6   g }| dkr.t dƒD ]}| || d ¡ qnt‚|S )Nr   r-   r+   )r   ÚappendÚNotImplementedError)ÚblackÚwhiteÚlutr   r   r   r   Úmake_linear_lutÄ   s    rS   c                 C   s4   g }t dƒD ]"}| t|d |  d d ƒ¡ q|S )Nr-   g     ào@g      à?)r   rN   Úint)ÚexprR   r   r   r   r   Úmake_gamma_lutÎ   s     rV   r   c                    s4   t tdtˆ ƒ ƒƒ}| ¡  tˆ ‡ fdd„|D ƒƒS )Nr-   c                    s   g | ]}|t ˆ ƒ ‘qS r   ©r   ©Ú.0r   ©r	   r   r   Ú
<listcomp>Ø   ó    znegative.<locals>.<listcomp>)r2   r   r   Úreverser   ©r	   r   r   rZ   r   ÚnegativeÕ   s    r_   c                 C   s@   ddl m} g }tdt| ƒ ƒD ]}| |ddƒ¡ q t| |ƒS )Nr   )Úrandintr-   r+   )Úrandomr`   r   r   rN   r   )r	   r`   r   r   r   r   r   ra   Û   s
    ra   ú#fff0c0c                    s0   dd„ t  | ¡D ƒ‰ td‡ fdd„tdƒD ƒƒS )Nc                 S   s   g | ]}t d |ƒ‘qS )r   )rS   )rY   Zbandr   r   r   r[   å   r\   zsepia.<locals>.<listcomp>r   c                    s    g | ]}ˆ |d   |d   ‘qS )r*   r   rX   ©Zbandsr   r   r[   æ   r\   i   )r   Zgetrgbr   r   )rQ   r   rc   r   Úsepiaä   s    rd   c                    s,   t tdtˆ ƒ ƒƒ}tˆ ‡ fdd„|D ƒƒS )Nr-   c                    s   g | ]}|t ˆ ƒ ‘qS r   rW   rX   rZ   r   r   r[   ë   r\   zwedge.<locals>.<listcomp>)r2   r   r   r   r^   r   rZ   r   Úwedgeé   s    re   c                 C   sˆ   t | dƒ�j}tjtjtjfD ]@}z$| d¡ ||ƒ ¡ }|rBW  qfW q ttfyZ   Y q0 qtdƒ‚W d   ƒ n1 sz0    Y  |S )NÚrbr   zcannot load palette)	r>   r   r   r   ÚseekZ
getpaletteÚSyntaxErrorr   ÚOSError)ÚfilenamerB   ZpaletteHandlerrR   r   r   r   Úloadî   s    ý

&rk   )r   )r   )rb   )r   )r(   r   Ú r   r   r   r   r   rM   rS   rV   r_   ra   rd   re   rk   r   r   r   r   Ú<module>   s     


	

