
     h                         d dl Z ddlmZmZmZmZ ddlmZ  G d d          Zd Z	d Z
d	 ZddZddZddZddZd ZdS )    N   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFile)	deprecatec                       e Zd ZdZddZed             Zej        d             Zed             Zej        d	             Zd
 Z	d Z
d ZeZddZ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                     || _         d | _        |pt                      | _        d | _        |dk    r:t          ddd            |t          | j                  k    rd}t          |          d S d S )Nr   zThe size parameter
   zwrong palette size)moderawmode	bytearraypalettedirtyr   len
ValueError)selfr   r   sizemsgs        L/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/PIL/ImagePalette.py__init__zImagePalette.__init__%   sv    	-)++
199*B555s4<((((* oo%	 9((    c                     | j         S N)_paletter   s    r   r   zImagePalette.palette0   s
    }r   c                 "    d | _         || _        d S r   )_colorsr   )r   r   s     r   r   zImagePalette.palette4   s    r   c                    | j         wt          | j                  }i | _         t          dt          | j                  |          D ]8}t          | j        |||z                      }|| j         v r+||z  | j         |<   9| j         S )Nr   )r    r   r   ranger   tuple)r   mode_lenicolors       r   colorszImagePalette.colors9   s    <49~~HDL1c$,//:: 4 4dl1q8|+;<==DL((&'8mU##|r   c                     || _         d S r   )r    )r   r'   s     r   r'   zImagePalette.colorsE   s    r   c                     t                      }| j        |_        | j        |_        | j        | j        d d          |_        | j        |_        |S r   )r
   r   r   r   r   )r   news     r   copyzImagePalette.copyI   sD    nn9l<#,qqq/CKJ	
r   c                 b    | 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   s    r   getdatazImagePalette.getdataT   s2     < 	.<--y$,,..((r   c                     | j         rd}t          |          t          | j        t                    r| j        S t          j        d| j                  }|                                S )zUConvert palette to bytes.

        .. warning:: This method is experimental.
        !palette contains raw palette dataB)r   r   
isinstancer   bytesarrayr-   )r   r   arrs      r   r-   zImagePalette.tobytes_   s\    
 < 	"5CS//!dlE** 	 <k#t|,,{{}}r   c           	         | 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	z  }	 | j        |         S # t          $ r}t          | j        t                    st          | j                  | _
        t          | j                  dz  }d
}|r4|j                            d          |j                            d          f}||v r	|dz  }||v 	|dk    ri|rOt          t          t          |                                                              D ]\  }}|dk    r||vr|} n|dk    rd}t          |          ||| j        |<   |dz  t          | j                  k     r>| j        d|dz           t#          |          z   | j        |dz  dz   d         z   | _
        n| xj
        t#          |          z  c_
        d| _        |cY d}~S d}~ww xY wdt'          |           }t          |          )zgGiven an rgb tuple, allocate palette entry.

        .. warning:: This method is experimental.
        r0   r            z/cannot add non-opaque RGBA color to RGB paletteNRGBA)r9    
backgroundtransparencyr      r   z$cannot allocate more than 256 colorszunknown color specifier: )r   r   r2   r#   r   r   r'   KeyErrorr   r   r   infogetreversedlist	enumerate	histogramr3   r   repr)	r   r&   imager   eindexspecial_colorsr%   counts	            r   getcolorzImagePalette.getcoloro   s   
 < 	"5CS//!eU## 0	"yE!!u::??Qx3O(oo-!"1"IEf$$u::??VOE#{5)) ! ! !!$,	:: <$-dl$;$;DMDL))Q.!# 
|44
~66&N ~--QJE ~--C<< &(0i@Q@Q6R6R1S1S(T(T & &HAu$zza~.E.E() %||D(oo14%*E"19s4<0000[uqy[1,,',uqy1}78 MM MMU5\\1MM
C!F <d5kk;;CS//!s   B& &I1FH=7I=Ic                    | j         rd}t          |          t          |t                    rt	          |d          }|                    d           |                    d| j         d           t          d          D ]}|                    |            t          |t          | j                  z  |dz   t          | j                  z            D ]K}	 |                    d| j	        |                     '# t          $ r |                    d	           Y Hw xY w|                    d           |                                 d
S )zVSave palette to text file.

        .. warning:: This method is experimental.
        r0   wz
# Palette
z# Mode: 
r>   r    z 0N)r   r   r2   stropenwriter   r"   r   r   
IndexErrorclose)r   fpr   r%   js        r   savezImagePalette.save   sI   
 < 	"5CS//!b# 	b#B

)DI)))***s 	 	AHHV1s49~~-ATY/GHH # ##HH2a223333! # # #HHTNNNNN#HHTNNNN





s   #C<<DD)r   Nr   r   )__name__
__module____qualname____doc__r   propertyr   setterr'   r+   r.   r-   tostringrL   rX   r;   r   r   r
   r
      s        	 		& 	& 	& 	&   X ^    ^  	 	 X	 ]  ]	 	 		) 	) 	)   H8" 8" 8" 8"t    r   r
   c                 L    t                      }| |_        ||_        d|_        |S )Nr   )r
   r   r   r   )r   datar   s      r   rawrb      s%    nnGGOGOGMNr   c                     g }| dk    r.t          d          D ]}|                    ||z  dz             nt          |S )Nr   r>   r9   )r"   appendNotImplementedError)blackwhitelutr%   s       r   make_linear_lutri      sU    
Czzs 	) 	)AJJuqyC'((((	) "!Jr   c                     g }t          d          D ]0}|                    t          |dz  | z  dz  dz                        1|S )Nr>   g     o@g      ?)r"   rd   int)exprh   r%   s      r   make_gamma_lutrm      sQ    
C3ZZ < <

3Us*e3c9::;;;;Jr   r   c                      t          t          dt                     z                      }|                                 t	            fd|D                       S )Nr>   c                 4    g | ]}|t                    z  S r;   r   .0r%   r   s     r   
<listcomp>znegative.<locals>.<listcomp>   #    ???!qCII~???r   )rC   r"   r   reverser
   r   r   s   ` r   negativerw      sW    5s4yy))**GOO????w???@@@r   c                     ddl m} g }t          dt          |           z            D ]!}|                     |dd                     "t          | |          S )Nr   )randintr>   r9   )randomry   r"   r   rd   r
   )r   ry   r   r%   s       r   rz   rz      si    G3T?## ( (wwq#''''g&&&r   #fff0c0c                     d t          j        |           D             t          dfdt          d          D                       S )Nc                 .    g | ]}t          d |          S )r   )ri   )rr   bands     r   rs   zsepia.<locals>.<listcomp>   s"    KKK$_Q%%KKKr   r   c                 8    g | ]}|d z           |d z           S )r8   r;   )rr   r%   bandss     r   rs   zsepia.<locals>.<listcomp>   s*    MMMa!eQ!V 4MMMr   i   )r   getrgbr
   r"   )rg   r   s    @r   sepiar      sL    KK*2CE2J2JKKKEMMMMeGnnMMMNNNr   c                      t          t          dt                     z                      }t            fd|D                       S )Nr>   c                 4    g | ]}|t                    z  S r;   rp   rq   s     r   rs   zwedge.<locals>.<listcomp>   rt   r   )rC   r"   r   r
   rv   s   ` r   wedger      sG    5s4yy))**G????w???@@@r   c                 b   t          | d          5 }t          j        t          j        t          j        fD ]P}	 |                    d            ||                                          }|r n):# t          t          f$ r Y Mw xY wd}t          |          	 d d d            n# 1 swxY w Y   |S )Nrbr   zcannot load palette)	rR   r   r   r   seek
getpaletteSyntaxErrorr   OSError)filenamerV   paletteHandlerrh   r   s        r   loadr      s    
h		 +-#
 	 	N



$nR((3355 E,    
 (C#,,               & Js4   &B$4A/,B$/B B$BB$$B(+B()r   )r{   )r4    r   r   r   r   
_deprecater   r
   rb   ri   rm   rw   rz   r   r   r   r;   r   r   <module>r      s  &  H H H H H H H H H H H H ! ! ! ! ! !d d d d d d d dV      A A A A' ' ' 'O O O O
A A A A
    r   