a
    7Xh                     @   sz   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                   @   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.
    RGBNc                 C   s"   || _ d | _|pt | _d | _d S N)moderawmode	bytearraypalettedirty)selfr
   r    r   U/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/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   .   s    c                 C   sh   | j d u rbt| j}i | _ tdt| j|D ]4}t| j|||  }|| j v rRq,|| | j |< q,| j S )Nr   )r   lenr
   ranger   tuple)r   Zmode_lenicolorr   r   r   colors3   s    


zImagePalette.colorsc                 C   s
   || _ d S r	   )r   )r   r   r   r   r   r   ?   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   copyC   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   getdataN   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   msgZarrr   r   r   r   Y   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y } z8t| jt	st	| j| _
t| jd }d
}|r|jd|jdf}||v r|d7 }q|dkrV|r>ttt| D ](\}}|dkr||vr|} q>q|dkrVd}t|||| 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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   Z
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   getcolori   s`    









zImagePalette.getcolorc              
   C   s   | j rd}t|t|tr&t|d}|d |d| j d tdD ]z}||  t|t| j |d t| j D ]<}z|d| j	|   W q~ t
y   |d	 Y q~0 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   N)N)__name__
__module____qualname____doc__r   propertyr   setterr   r   r   r   tostringr6   rA   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
    rJ   c                 C   s6   g }| dkr.t dD ]}||| d  qnt|S )Nr   r*   r)   )r   appendNotImplementedError)Zblackwhitelutr   r   r   r   make_linear_lut   s    rO   c                 C   s4   g }t dD ]"}|t|d |  d d  q|S )Nr*   g     o@g      ?)r   rK   int)exprN   r   r   r   r   make_gamma_lut   s     rR   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>)r/   r   r   reverser   r
   r   r   rV   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   rK   r   )r
   r\   r   r   r   r   r   r]      s
    r]   #fff0c0c                    s0   dd t | D  td fddtdD S )Nc                 S   s   g | ]}t d |qS )r   )rO   )rU   Zbandr   r   r   rW      rX   zsepia.<locals>.<listcomp>r   c                    s    g | ]} |d   |d   qS )r(   r   rT   Zbandsr   r   rW      rX   i   )r   Zgetrgbr   r   )rM   r   r_   r   sepia   s    r`   c                    s,   t tdt  }t  fdd|D S )Nr*   c                    s   g | ]}|t   qS r   rS   rT   rV   r   r   rW      rX   zwedge.<locals>.<listcomp>)r/   r   r   r   rZ   r   rV   r   wedge   s    ra   c                 C   s   t | dn}tjtjtjfD ]@}z$|d || }|rBW  qjW q ttfyZ   Y q0 qd}t|W d    n1 s~0    Y  |S )Nrbr   zcannot load palette)	r;   r   r   r   seekZ
getpaletteSyntaxErrorr"   OSError)filenamer?   ZpaletteHandlerrN   r&   r   r   r   load   s    

&rg   )r   )r   )r^   )r   )r%    r   r   r   r   r   rJ   rO   rR   r[   r]   r`   ra   rg   r   r   r   r   <module>   s    '


	

