o
    %Zc                     @   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                   @   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.
    RGBNr   c                 C   sP   || _ d | _|p
t | _d | _|dkr$tddd  |t| jkr&tdd S d S )Nr   zThe size parameter
   zwrong palette size)moderawmode	bytearraypalettedirtyr   len
ValueError)selfr   r   size r   E/var/www/jaguar/venv/lib/python3.10/site-packages/PIL/ImagePalette.py__init__%   s   zImagePalette.__init__c                 C   s   | j S N)_paletter   r   r   r   r   /   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   3   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   copy?   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   getdataJ   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"   U   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 } zt| jt	sMt	| j| _
t| jd }d	}|rd|jd
|jdf}||v rp|d7 }||v sh|dkr|rttt| D ]\}}|dkr||vr|} nq|dkrt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   getcolord   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: 
r0   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>   rI   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
   rR   c                 C   s4   g }| dkrt dD ]}||| d  q
|S t)Nr   r0   r,   )r   appendNotImplementedError)blackwhitelutr   r   r   r   make_linear_lut   s   rX   c                 C   s4   g }t dD ]}|t|d |  d d  q|S )Nr0   g     o@g      ?)r   rS   int)exprW   r   r   r   r   make_gamma_lut   s    r[   r	   c                    s4   t tdt  }|  t  fdd|D S )Nr0   c                       g | ]}|t   qS r   r   .0r   r   r   r   
<listcomp>       znegative.<locals>.<listcomp>)r5   r   r   reverser   r   r   r   r`   r   negative   s   re   c                 C   s@   ddl m} g }tdt|  D ]
}||dd qt| |S )Nr   )randintr0   r,   )randomrf   r   r   rS   r   )r   rf   r   r   r   r   r   rg      s
   
rg   #fff0c0c                    s0   dd t | D  td fddtdD S )Nc                 S   s   g | ]}t d |qS )r   )rX   )r_   bandr   r   r   ra      s    zsepia.<locals>.<listcomp>r	   c                    s    g | ]} |d   |d   qS )r+   r   r^   bandsr   r   ra      s     i   )r   getrgbr   r   )rV   r   rj   r   sepia   s   rm   c                    s,   t tdt  }t  fdd|D S )Nr0   c                    r\   r   r]   r^   r`   r   r   ra      rb   zwedge.<locals>.<listcomp>)r5   r   r   r   rd   r   r`   r   wedge   s   rn   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)	rC   r   r   r   seek
getpaletteSyntaxErrorr   OSError)filenamerG   paletteHandlerrW   r   r   r   load   s(   

rv   )r	   )rh   )r(    r   r   r   r   
_deprecater   r   rR   rX   r[   re   rg   rm   rn   rv   r   r   r   r   <module>   s    



	
