U
    ­A›dÕ  ã                   @   s†   d dl Z ddlmZmZmZmZ ddl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ÚPaletteFile)Ú	deprecatec                   @   s|   e Zd ZdZ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„ 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.
    ÚRGBNr   c                 C   sP   || _ d | _|ptƒ | _d | _|dkrLtddd ƒ |t| jƒkrLd}t|ƒ‚d S )Nr   zThe size parameteré
   zwrong palette size)ÚmodeÚrawmodeÚ	bytearrayÚpaletteÚdirtyr   ÚlenÚ
ValueError)Úselfr   r   ÚsizeÚmsg© r   úI/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/PIL/ImagePalette.pyÚ__init__%   s    zImagePalette.__init__c                 C   s   | j S ©N)Ú_palette©r   r   r   r   r   0   s    zImagePalette.palettec                 C   s   d | _ || _d S r   )Ú_colorsr   )r   r   r   r   r   r   4   s    c                 C   sh   | j d krbt| jƒ}i | _ tdt| jƒ|ƒD ]4}t| j||| … ƒ}|| j krRq,|| | j |< q,| j S )Nr   )r   r   r   Úranger   Útuple)r   Zmode_lenÚiÚcolorr   r   r   Úcolors9   s    


zImagePalette.colorsc                 C   s
   || _ d S r   )r   )r   r    r   r   r   r    E   s    c                 C   s<   t ƒ }| j|_| j|_| jd k	r0| jd d … |_| j|_|S r   )r   r   r   r   r   )r   Únewr   r   r   ÚcopyI   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   ÚgetdataT   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   r   Ú
isinstancer   ÚbytesÚarrayr#   )r   r   Zarrr   r   r   r#   _   s    zImagePalette.tobytesc           	   
   C   sø  | j rd}t|ƒ‚t|tƒ�rÞ| 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k
�rÚ } �z4t| jt	ƒs²t	| jƒ| _
t| jƒd }d
}|rà|j d¡|j d¡f}||krò|d7 }qà|dk�rX|�r@ttt| ¡ ƒƒƒD ](\}}|dk�r||k�r|} �q@�q|dk�rXd}t|ƒ|‚|| j|< |d t| jƒk �rª| jd|d … t|ƒ | j|d d d…  | _
n|  j
t|ƒ7  _
d| _| W Y ¢S d}~X Y nX ndt|ƒ› �}t|ƒ‚dS )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)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   Úimager   ÚeÚindexZspecial_colorsr   Úcountr   r   r   Úgetcoloro   s`    



þ





ÿþÿ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
k
rº   | d	¡ Y q~X q~| d¡ qL| ¡  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   r   Újr   r   r   Úsave©   s     


&zImagePalette.save)r	   Nr   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   Úsetterr    r"   r$   r#   Útostringr:   rE   r   r   r   r   r      s    





:r   c                 C   s   t ƒ }| |_||_d|_|S )Nr   )r   r   r   r   )r   Údatar   r   r   r   ÚrawÄ   s
    rN   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    rT   c                 C   s4   g }t dƒD ]"}| t|d |  d d ƒ¡ q|S )Nr.   g     ào@g      à?)r   rO   Úint)ÚexprS   r   r   r   r   Úmake_gamma_lutÚ   s     rW   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>ä   s     znegative.<locals>.<listcomp>)r3   r   r   Úreverser   ©r   r   r   r[   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   rO   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   )rT   )rZ   Zbandr   r   r   r\   ñ   s     zsepia.<locals>.<listcomp>r	   c                    s    g | ]}ˆ |d   |d   ‘qS )r+   r   rY   ©Zbandsr   r   r\   ò   s     i   )r   Zgetrgbr   r   )rR   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   rX   rY   r[   r   r   r\   ÷   s     zwedge.<locals>.<listcomp>)r3   r   r   r   r^   r   r[   r   Úwedgeõ   s    re   c                 C   sz   t | dƒ�f}tjtjtjfD ]B}z$| d¡ ||ƒ ¡ }|rBW  qlW q ttfk
r\   Y qX qd}t|ƒ‚W 5 Q R X |S )NÚrbr   zcannot load palette)	r?   r   r   r   ÚseekZ
getpaletteÚSyntaxErrorr   ÚOSError)ÚfilenamerC   ZpaletteHandlerrS   r   r   r   r   Úloadú   s    ý

rk   )r	   )r	   )rb   )r	   )r)   Ú r   r   r   r   Z
_deprecater   r   rN   rT   rW   r_   ra   rd   re   rk   r   r   r   r   Ú<module>   s    ,


	

