o
     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r,ddlmZ G d	d
 d
Zd+ddZd,ddZd-ddZd.d/ddZd.d/d d!Zd0d1d#d$Zd.d/d%d&Zd2d)d*ZdS )3    )annotationsN)Sequence)IO   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFileF)Imagec                   @  s   e Zd ZdZ		d,d-d
dZed.ddZejd/ddZed0ddZejd1ddZd2ddZ	d3ddZ
d4ddZeZ	d5d6d"d#Z	d7d8d&d'Zd9d*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modestrpalette(Sequence[int] | bytes | bytearray | NonereturnNonec                 C  s"   || _ d | _|p
t | _d | _d S N)r   rawmode	bytearrayr   dirty)selfr   r    r   V/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/PIL/ImagePalette.py__init__+   s   
zImagePalette.__init__!Sequence[int] | bytes | bytearrayc                 C  s   | j S r   )_paletter   r   r   r   r   5   s   zImagePalette.palettec                 C  s   d | _ || _d S r   )_colorsr   )r   r   r   r   r   r   9   s   
dict[tuple[int, ...], int]c                 C  sh   | j d u r1t| j}i | _ tdt| j|D ]}t| j|||  }|| j v r)q|| | j |< q| j S )Nr   )r   lenr   ranger   tuple)r   Zmode_lenicolorr   r   r   colors>   s   


zImagePalette.colorsr%   c                 C  s
   || _ d S r   )r   )r   r%   r   r   r   r%   J   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   copyN   s   
zImagePalette.copy-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.tobytesimageImage.Image | NoneeException | Noneintc                 C  s   t | jtst| j| _t| jd }d}|r/|jd|jdf}||v r/|d7 }||v s'|dkr[|rPttt	|
 D ]\}}|dkrO||vrO|} qPq?|dkr[d}t|||S )	N   r   
backgroundZtransparencyr      r   z$cannot allocate more than 256 colors)r/   r   r   r   r    infogetreversedlist	enumerateZ	histogramr.   )r   r2   r4   indexZspecial_colorsr#   countr1   r   r   r   _new_color_indext   s,   


zImagePalette._new_color_indexr$   tuple[int, ...]c              
   C  sF  | j r	d}t|t|tr| jdkr,t|dkr+|d dkr%d}t||dd }n| jdkr;t|dkr;|d	7 }z| j| W S  ty } zJ| ||}t| j	t
sWJ || 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 dt| }t|)zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r,   r      r7      z/cannot add non-opaque RGBA color to RGB paletteNZRGBArD   r   zunknown color specifier: )r   r.   r/   r"   r   r    r%   KeyErrorrA   r   r   r   r+   r   repr)r   r$   r2   r1   r4   r?   r   r   r   getcolor   sD   	



zImagePalette.getcolorfpstr | IO[str]c              
   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
y\   |d	 Y q?w |d q&|  d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        r,   wz
# Palette
z# Mode: 
r9   r    z 0N)r   r.   r/   r   openwriter   r!   r    r   
IndexErrorclose)r   rI   r1   r#   jr   r   r   save   s"   


&zImagePalette.save)r   N)r   r   r   r   r   r   )r   r   )r   r   r   r   )r   r   )r%   r   r   r   )r   r   )r   r(   )r   r+   )NN)r2   r3   r4   r5   r   r6   r   )r$   rB   r2   r3   r   r6   )rI   rJ   r   r   )__name__
__module____qualname____doc__r   propertyr   setterr%   r'   r*   r)   ZtostringrA   rH   rS   r   r   r   r   r      s,    



+r   r   r   datar   r   c                 C  s   t  }| |_||_d|_|S )Nr   )r   r   r   r   )r   rZ   r   r   r   r   raw   s
   r[   blackr6   whitefloat	list[int]c                   s*   | dkr fddt dD S d}t|)Nr   c                   s   g | ]
}t  | d  qS rE   r6   .0r#   r]   r   r   
<listcomp>   s    z#make_linear_lut.<locals>.<listcomp>r9   z"unavailable when black is non-zero)r!   NotImplementedError)r\   r]   r1   r   rc   r   make_linear_lut   s   rf   expc                   s    fddt dD S )Nc                   s$   g | ]}t |d    d  d qS )g     o@g      ?r`   ra   rg   r   r   rd      s   $ z"make_gamma_lut.<locals>.<listcomp>r9   )r!   rh   r   rh   r   make_gamma_lut   s   ri   r   r   c                   s4   t tdt  }|  t  fdd|D S )Nr9   c                      g | ]}|t   qS r   r    ra   r   r   r   rd          znegative.<locals>.<listcomp>)r=   r!   r    reverser   r   r   r   rl   r   negative   s   rp   c                   s4   ddl m   fddtdt|  D }t| |S )Nr   randintc                   s   g | ]} d dqS )r   rD   r   )rb   _rq   r   r   rd          zrandom.<locals>.<listcomp>r9   )randomrr   r!   r    r   ro   r   rq   r   ru      s   
ru   #fff0c0c                   s0   dd t | D  td fddtdD S )Nc                 S  s   g | ]}t d |qS )r   )rf   )rb   Zbandr   r   r   rd      rt   zsepia.<locals>.<listcomp>r   c                   s    g | ]} |d   |d   qS )r7   r   ra   Zbandsr   r   rd      s     i   )r   Zgetrgbr   r!   rc   r   rw   r   sepia   s   rx   c                   s,   t tdt  }t  fdd|D S )Nr9   c                   rj   r   rk   ra   rl   r   r   rd      rm   zwedge.<locals>.<listcomp>)r=   r!   r    r   ro   r   rl   r   wedge   s   ry   filenametuple[bytes, str]c                 C  s   t | d9}tjtjtjg}|D ]}z|d || }|r#W  q6W q ttfy/   Y qw d}t|W d    |S 1 sAw   Y  |S )Nrbr   zcannot load palette)	rN   r   r   r	   seekZ
getpaletteSyntaxErrorr.   OSError)rz   rI   ZpaletteHandlersZpaletteHandlerZlutr1   r   r   r   load  s.   

r   )r   r   rZ   r   r   r   )r\   r6   r]   r^   r   r_   )rg   r^   r   r_   )r   )r   r   r   r   )rv   )r]   r   r   r   )rz   r   r   r{   )
__future__r   r0   collections.abcr   typingr    r   r   r   r	   TYPE_CHECKINGr
   r   r[   rf   ri   rp   ru   rx   ry   r   r   r   r   r   <module>   s$    
6

