a
    h1#                     @  s   d dl mZ d dlZd dlmZ d dlmZ ddlmZm	Z	m
Z
mZ dZerXddlmZ G d	d
 d
Zddd
dddZddddddZdddddZd)dd
dddZd*dd
dddZd+dd
d d!d"Zd,dd
dd#d$Zdd%d&d'd(ZdS )-    )annotationsN)Sequence)IO   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFileF)Imagec                   @  s   e Zd ZdZd+dddddd	Zed
dddZejd
ddddZeddddZejdddddZd dddZ	ddddZ
ddddZeZd,dddd d!d"Zd-d#ddd$d%d&Zd'dd(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.
    RGBNstrz(Sequence[int] | bytes | bytearray | NoneNone)modepalettereturnc                 C  s"   || _ d | _|pt | _d | _d S N)r   rawmode	bytearrayr   dirty)selfr   r    r   >/var/www/auris/lib/python3.9/site-packages/PIL/ImagePalette.py__init__+   s    zImagePalette.__init__!Sequence[int] | bytes | bytearray)r   c                 C  s   | j S r   )_paletter   r   r   r   r   5   s    zImagePalette.palette)r   r   c                 C  s   d | _ || _d S r   )_colorsr   )r   r   r   r   r   r   9   s    zdict[tuple[int, ...], int]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   colors>   s    


zImagePalette.colors)r#   r   c                 C  s
   || _ d S r   )r   )r   r#   r   r   r   r#   J   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   copyN   s    
zImagePalette.copyz-tuple[str, Sequence[int] | bytes | bytearray]c                 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   getdataY   s    zImagePalette.getdatabytesc                 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   r(   arrayr&   )r   msgZarrr   r   r   r&   d   s    zImagePalette.tobyteszImage.Image | NonezException | Noneint)imageer   c                 C  s   t | jtst| j| _t| jd }d}|rX|jd|jdf}||v rX|d7 }qF|dkr|rttt	|
 D ] \}}|dkrx||vrx|} qqx|dkrd}t|||S )	N   r   Z
backgroundZtransparencyr      r   z$cannot allocate more than 256 colors)r,   r   r   r   r   infogetreversedlist	enumerateZ	histogramr+   )r   r0   r1   indexZspecial_colorsr!   countr.   r   r   r   _new_color_indext   s(    



zImagePalette._new_color_indexztuple[int, ...])r"   r0   r   c              
   C  sR  | j rd}t|t|tr8| 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y4 } z| ||}t| j	t
sJ || 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      r2      z/cannot add non-opaque RGBA color to RGB paletteNZRGBAr=   r   zunknown color specifier: )r   r+   r,   r    r   r   r#   KeyErrorr;   r   r   r   r(   r   repr)r   r"   r0   r.   r1   r9   r   r   r   getcolor   s>    	


zImagePalette.getcolorzstr | IO[str])fpr   c              
   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: 
r3   r    z 0N)r   r+   r,   r   openwriter   r   r   r   
IndexErrorclose)r   rB   r.   r!   jr   r   r   save   s     


&zImagePalette.save)r   N)NN)N)__name__
__module____qualname____doc__r   propertyr   setterr#   r%   r'   r&   tostringr;   rA   rK   r   r   r   r   r      s*     
  +r   r   r   )r   datar   c                 C  s   t  }| |_||_d|_|S )Nr   )r   r   r   r   )r   rS   r   r   r   r   raw   s
    rT   r/   floatz	list[int])blackwhiter   c                   s.   | dkr fddt dD S d}t|d S )Nr   c                   s   g | ]}t  | d  qS r>   r/   .0r!   rW   r   r   
<listcomp>       z#make_linear_lut.<locals>.<listcomp>r3   z"unavailable when black is non-zero)r   NotImplementedError)rV   rW   r.   r   r[   r   make_linear_lut   s    r_   )expr   c                   s    fddt dD S )Nc                   s$   g | ]}t |d    d  d qS )g     o@g      ?rX   rY   r`   r   r   r\      r]   z"make_gamma_lut.<locals>.<listcomp>r3   )r   ra   r   ra   r   make_gamma_lut   s    rb   r   )r   r   c                   s4   t tdt  }|  t  fdd|D S )Nr3   c                   s   g | ]}|t   qS r   r   rY   r   r   r   r\      r]   znegative.<locals>.<listcomp>)r7   r   r   reverser   r   r   r   rd   r   negative   s    rg   c                   s4   ddl m   fddtdt|  D }t| |S )Nr   randintc                   s   g | ]} d dqS )r   r=   r   )rZ   _rh   r   r   r\      r]   zrandom.<locals>.<listcomp>r3   )randomri   r   r   r   rf   r   rh   r   rk      s    rk   #fff0c0)rW   r   c                   s0   dd t | D  td fddtdD S )Nc                 S  s   g | ]}t d |qS )r   )r_   )rZ   Zbandr   r   r   r\      r]   zsepia.<locals>.<listcomp>r   c                   s    g | ]} |d   |d   qS )r2   r   rY   Zbandsr   r   r\      r]   i   )r   Zgetrgbr   r   r[   r   rm   r   sepia   s    rn   c                   s,   t tdt  }t  fdd|D S )Nr3   c                   s   g | ]}|t   qS r   rc   rY   rd   r   r   r\      r]   zwedge.<locals>.<listcomp>)r7   r   r   r   rf   r   rd   r   wedge   s    ro   ztuple[bytes, str])filenamer   c                 C  s   t | dr}tjtjtjg}|D ]@}z$|d || }|rFW  qnW q  ttfy^   Y q 0 q d}t|W d    n1 s0    Y  |S )Nrbr   zcannot load palette)	rF   r   r   r	   seekZ
getpaletteSyntaxErrorr+   OSError)rp   rB   ZpaletteHandlersZpaletteHandlerZlutr.   r   r   r   load  s"    

&ru   )r   )r   )rl   )r   )
__future__r   r-   collections.abcr   typingr    r   r   r   r	   TYPE_CHECKINGr
   r   rT   r_   rb   rg   rk   rn   ro   ru   r   r   r   r   <module>   s"    6