o
    Z#ûa¡  ã                   @   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   sP   || _ d | _|p
tƒ | _d | _|dkr$t dt¡ |t| jƒkr&t	dƒ‚d S 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   ú2/usr/lib/python3/dist-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 ]}t| j||| … ƒ}|| jv r'q|| | j|< qd S )Nr   )r   r   r	   ÚcolorsÚranger   Útuple)r   r   Úmode_lenÚiÚcolorr   r   r   r   9   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   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   Úarrr   r   r   r#   [   s   zImagePalette.tobytesc              
   C   sÈ  | j rtdƒ‚t|tƒrÛ| jdkr$t|ƒdkr#|d dkr#|dd… }n| jdkr3t|ƒdkr3|d7 }z| j| W S  tyÚ } z•t| jt	ƒsMt	| jƒ| _
t| jƒd }d	}|rd|j d
¡|j d¡f}||v rp|d7 }||v sh|dkrš|r‘ttt| ¡ ƒƒƒD ]\}}|dkr�||vr�|} nq€|dkršt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}~ww tdt|ƒ› �ƒ‚)zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r%   r   é   é   éÿ   NÚRGBA)r-   r   Ú
backgroundÚ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Ú	enumerateÚ	histogramr(   r   Úrepr)r   r    ÚimageÚeÚindexÚspecial_colorsr   Úcountr   r   r   Úgetcolorj   s^   

€


þÿ€

ÿþÿ€à"zImagePalette.getcolorc              
   C   sÎ   | j rtdƒ‚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
yZ   | d	¡ Y q=w | d¡ q$| ¡  d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        r%   Úwz
# Palette
z# Mode: Ú
r1   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   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr"   r$   r#   Útostringr?   rJ   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
   rS   c                 C   s4   g }| dkrt dƒD ]}| || d ¡ q
|S t‚)Nr   r1   r-   )r   ÚappendÚNotImplementedError)ÚblackÚwhiteÚlutr   r   r   r   Úmake_linear_lutÄ   s   ÿrY   c                 C   s4   g }t dƒD ]}| t|d |  d d ƒ¡ q|S )Nr1   g     ào@g      à?)r   rT   Úint)ÚexprX   r   r   r   r   Úmake_gamma_lutÎ   s    r\   r   c                    s4   t tdtˆ ƒ ƒƒ}| ¡  tˆ ‡ fdd„|D ƒƒS )Nr1   c                    ó   g | ]}|t ˆ ƒ ‘qS r   ©r   ©Ú.0r   ©r	   r   r   Ú
<listcomp>Ø   ó    znegative.<locals>.<listcomp>)r6   r   r   Úreverser   ©r	   r   r   ra   r   ÚnegativeÕ   s   rf   c                 C   s@   ddl m} g }tdt| ƒ ƒD ]
}| |ddƒ¡ qt| |ƒS )Nr   )Úrandintr1   r-   )Úrandomrg   r   r   rT   r   )r	   rg   r   r   r   r   r   rh   Û   s
   
rh   ú#fff0c0c                    s0   dd„ t  | ¡D ƒ‰ td‡ fdd„tdƒD ƒƒS )Nc                 S   s   g | ]}t d |ƒ‘qS )r   )rY   )r`   Úbandr   r   r   rb   å   s    zsepia.<locals>.<listcomp>r   c                    s    g | ]}ˆ |d   |d   ‘qS )r,   r   r_   ©Úbandsr   r   rb   æ   s     i   )r   Úgetrgbr   r   )rW   r   rk   r   Úsepiaä   s   rn   c                    s,   t tdtˆ ƒ ƒƒ}tˆ ‡ fdd„|D ƒƒS )Nr1   c                    r]   r   r^   r_   ra   r   r   rb   ë   rc   zwedge.<locals>.<listcomp>)r6   r   r   r   re   r   ra   r   Úwedgeé   s   ro   c                 C   sˆ   t | dƒ�5}tjtjtjfD ]}z| d¡ ||ƒ ¡ }|r!W  nW q ttfy-   Y qw tdƒ‚W d   ƒ |S 1 s=w   Y  |S )NÚrbr   zcannot load palette)	rD   r   r   r   ÚseekÚ
getpaletteÚSyntaxErrorr   ÚOSError)ÚfilenamerH   ÚpaletteHandlerrX   r   r   r   Úloadî   s(   ý
ÿýú
õírw   )r   )ri   )r)   r   Ú r   r   r   r   r   rS   rY   r\   rf   rh   rn   ro   rw   r   r   r   r   Ú<module>   s     



	
