a
    ׶a                     @   s   d dl Z 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                   @   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.
    :param size: An optional palette size. If given, an error is raised
        if ``palette`` is not of equal length.
    RGBNr   c                 C   sL   || _ d | _|pt | _d | _|dkrHtdt |t| jkrHt	dd S )Nr   zOThe size parameter is deprecated and will be removed in Pillow 10 (2023-07-01).zwrong palette size)
moderawmode	bytearraypalettedirtywarningswarnDeprecationWarninglen
ValueError)selfr	   r   size r   `/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/PIL/ImagePalette.py__init__'   s    zImagePalette.__init__c                 C   s   | j S N)_paletter   r   r   r   r   5   s    zImagePalette.palettec                 C   sb   || _ t| j}i | _tdt| j|D ]4}t| j|||  }|| jv rNq(|| | j|< q(d S )Nr   )r   r   r	   colorsranger   tuple)r   r   Zmode_lenicolorr   r   r   r   9   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   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   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   Zarrr   r   r   r"   [   s    zImagePalette.tobytesc              
   C   s  | j rtdt|tr| jdkrJt|dkrh|d dkrh|dd }n| jdkrht|dkrh|d7 }z| j| W S  ty } z4t| jt	st	| j| _
t| jd }d	}|r|jd
|jdf}||v r|d7 }q|dkrB|r.ttt| D ](\}}|dkr||vr|} q.q|dkrBt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}~0 0 ntdt| dS )zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r$   r            NZ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   imageeindexZspecial_colorsr   countr   r   r   getcolorj   sT    









zImagePalette.getcolorc              
   C   s   | j rtdt|tr"t|d}|d |d| j d tdD ]z}||  t|t| j |d t| j D ]<}z|d| j	|   W qz t
y   |d	 Y qz0 qz|d qH|  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   jr   r   r   save   s    


&zImagePalette.save)r   Nr   )N)__name__
__module____qualname____doc__r   propertyr   setterr!   r#   r"   tostringr8   rC   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
    rL   c                 C   s6   g }| dkr.t dD ]}||| d  qnt|S )Nr   r,   r+   )r   appendNotImplementedError)blackwhitelutr   r   r   r   make_linear_lut   s    rR   c                 C   s4   g }t dD ]"}|t|d |  d d  q|S )Nr,   g     o@g      ?)r   rM   int)exprQ   r   r   r   r   make_gamma_lut   s     rU   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>)r1   r   r   reverser   r	   r   r   rY   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   rM   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   )rR   )rX   Zbandr   r   r   rZ      r[   zsepia.<locals>.<listcomp>r   c                    s    g | ]} |d   |d   qS )r*   r   rW   Zbandsr   r   rZ      r[   i   )r   Zgetrgbr   r   )rP   r   rb   r   sepia   s    rc   c                    s,   t tdt  }t  fdd|D S )Nr,   c                    s   g | ]}|t   qS r   rV   rW   rY   r   r   rZ      r[   zwedge.<locals>.<listcomp>)r1   r   r   r   r]   r   rY   r   wedge   s    rd   c                 C   s   t | dj}tjtjtjfD ]@}z$|d || }|rBW  qfW q ttfyZ   Y q0 qtdW d    n1 sz0    Y  |S )Nrbr   zcannot load palette)	r=   r   r   r   seekZ
getpaletteSyntaxErrorr   OSError)filenamerA   ZpaletteHandlerrQ   r   r   r   load   s    

&rj   )r   )r   )ra   )r   )r(   r    r   r   r   r   r   rL   rR   rU   r^   r`   rc   rd   rj   r   r   r   r   <module>   s     


	

