o
    -׾g                     @  s   d dl mZ d dlZd dlmZ ddlmZmZmZm	Z	 G dd dZ
d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 )    )annotationsN)Sequence   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFilec                   @  s   e Zd ZdZd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#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.
    RGBNmodestrpaletteSequence[int] | NonereturnNonec                 C  s"   || _ d | _|p
t | _d | _d S N)r   rawmode	bytearrayr   dirty)selfr   r    r   Z/var/www/html/backend_erp/backend_erp_env/lib/python3.10/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   0   s   
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   mode_lenicolorr   r   r   colors5   s   


zImagePalette.colorsc                 C  s
   || _ d S r   )r   )r   r"   r   r   r   r"   A   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   copyE   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   getdataP   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   msgarrr   r   r   r%   [   s   zImagePalette.tobytesc                 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|} nq?|dkr[d}t|||S )	N   r   
backgroundtransparencyr      r   z$cannot allocate more than 256 colors)r*   r   r   r   r   infogetreversedlist	enumerate	histogramr)   )r   imageeindexspecial_colorsr    countr-   r   r   r   _new_color_indexk   s,   


zImagePalette._new_color_indexintc              
   C  s6  | 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 } zB| ||}|| j|< |d t| j	k rw| 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
      r/      z/cannot add non-opaque RGBA color to RGB paletteNRGBArA   r   zunknown color specifier: )r   r)   r*   r   r   r   r"   KeyErrorr>   r   r+   r   r   repr)r   r!   r9   r-   r:   r;   r   r   r   getcolor   sB   



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
y\   |d	 Y q?w |d q&|  d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        r'   wz
# Palette
z# Mode: 
r2   r    z 0N)r   r)   r*   r   openwriter   r   r   r   
IndexErrorclose)r   fpr-   r    jr   r   r   save   s"   


&zImagePalette.save)r
   N)r   r   r   r   r   r   )NNr   )r   r?   )__name__
__module____qualname____doc__r   propertyr   setterr"   r$   r&   r%   tostringr>   rF   rP   r   r   r   r   r	      s$    




&r	   r   c                 C  s   t  }| |_||_d|_|S )Nr   )r	   r   r   r   )r   datar   r   r   r   raw   s
   rY   c                   s*   | dkr fddt dD S d}t|)Nr   c                   s   g | ]} | d  qS rC   r   .0r    whiter   r   
<listcomp>       z#make_linear_lut.<locals>.<listcomp>r2   z"unavailable when black is non-zero)r   NotImplementedError)blackr]   r-   r   r\   r   make_linear_lut   s   rb   c                   s    fddt dD S )Nc                   s$   g | ]}t |d    d  d qS )g     o@g      ?)r?   rZ   expr   r   r^      s   $ z"make_gamma_lut.<locals>.<listcomp>r2   )r   rc   r   rc   r   make_gamma_lut   s   re   r
   c                   s4   t tdt  }|  t  fdd|D S )Nr2   c                      g | ]}|t   qS r   r   rZ   r   r   r   r^      r_   znegative.<locals>.<listcomp>)r6   r   r   reverser	   r   r   r   rh   r   negative   s   rk   c                   s4   ddl m   fddtdt|  D }t| |S )Nr   randintc                   s   g | ]} d dqS )r   rA   r   )r[   _rl   r   r   r^          zrandom.<locals>.<listcomp>r2   )randomrm   r   r   r	   rj   r   rl   r   rp      s   
rp   #fff0c0c                   s0   dd t | D  td fddtdD S )Nc                 S  s   g | ]}t d |qS )r   )rb   )r[   bandr   r   r   r^      ro   zsepia.<locals>.<listcomp>r
   c                   s    g | ]} |d   |d   qS )r/   r   rZ   bandsr   r   r^      s     i   )r   getrgbr	   r   r\   r   rs   r   sepia   s   rv   c                   s,   t tdt  }t  fdd|D S )Nr2   c                   rf   r   rg   rZ   rh   r   r   r^      r_   zwedge.<locals>.<listcomp>)r6   r   r   r	   rj   r   rh   r   wedge   s   rw   c                 C  s   t | d7}tjtjtjfD ]}z|d || }|r!W  nW q ttfy-   Y qw d}t|W d    |S 1 s?w   Y  |S )Nrbr   zcannot load palette)	rJ   r   r   r   seek
getpaletteSyntaxErrorr)   OSError)filenamerN   paletteHandlerlutr-   r   r   r   load   s*   

r   )r   r	   )r
   )rq   )
__future__r   r,   typingr    r   r   r   r   r	   rY   rb   re   rk   rp   rv   rw   r   r   r   r   r   <module>   s    
+



