
    ZMh1#                        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
          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 )+    )annotationsN)Sequence)IO   )GimpGradientFileGimpPaletteFile
ImageColorPaletteFileF)Imagec                      e Zd ZdZ	 	 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Zd0d"ZdS )1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                Z    || _         d | _        |pt                      | _        d | _        d S N)r   rawmode	bytearrayr   dirty)selfr   r   s      P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/PIL/ImagePalette.py__init__zImagePalette.__init__+   s-    
 	#'-)++!%


    !Sequence[int] | bytes | bytearrayc                    | j         S r   )_paletter   s    r   r   zImagePalette.palette5   s
    }r   c                "    d | _         || _        d S r   )_colorsr    )r   r   s     r   r   zImagePalette.palette9   s    :>r   dict[tuple[int, ...], int]c                   | j         wt          | j                  }i | _         t          dt          | j                  |          D ]8}t          | j        |||z                      }|| j         v r+||z  | j         |<   9| j         S )Nr   )r#   lenr   ranger   tuple)r   mode_lenicolors       r   colorszImagePalette.colors>   s    <49~~HDL1c$,//:: 4 4dl1q8|+;<==DL((&'8mU##|r   r,   c                    || _         d S r   )r#   )r   r,   s     r   r,   zImagePalette.colorsJ   s    r   c                    t                      }| j        |_        | j        |_        | j        | j        d d          |_        | j        |_        |S r   )r   r   r   r   r   )r   news     r   copyzImagePalette.copyN   sD    nn9l<#,qqq/CKJ	
r   -tuple[str, Sequence[int] | bytes | bytearray]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.getdataY   s2     < 	.<--y$,,..((r   bytesc                    | 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   
ValueError
isinstancer   r5   arrayr3   )r   msgarrs      r   r3   zImagePalette.tobytesd   s\    
 < 	"5CS//!dlE** 	 <k#t|,,{{}}r   imageImage.Image | NoneeException | Noneintc                   t          | j        t                    st          | j                  | _        t	          | j                  dz  }d}|rA|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          |          ||S )	N    
backgroundtransparencyr      r   z$cannot allocate more than 256 colors)r:   r   r   r    r&   infogetreversedlist	enumerate	histogramr9   )r   r>   r@   indexspecial_colorsr*   countr<   s           r   _new_color_indexzImagePalette._new_color_indext   s    $,	22 	4%dl33DMDL!!Q&CE 	
|,,
~..N >))
 >))C<<  (i8I8I.J.J)K)K L L  HAuzza~&=&= !||< oo1,r   r+   tuple[int, ...]c                2   | j         rd}t          |          t          |t                    rI| 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J || 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.
        r7   r      rD      z/cannot add non-opaque RGBA color to RGB paletteNRGBArV   r   zunknown color specifier: )r   r9   r:   r(   r   r&   r,   KeyErrorrR   r    r   r   r5   r   repr)r   r+   r>   r<   r@   rO   s         r   getcolorzImagePalette.getcolor   s    < 	"5CS//!eU## 	"yE!!u::??Qx3O(oo-!"1"IEf$$u::??VOE{5))   --eQ77!$-;;;;;%*E"19s4<0000k	k2,,'-	A89 MM MMU5\\1MM
  <d5kk;;CS//!s   B& &
E50B:E0*E50E5fpstr | IO[str]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.
        r7   wz
# Palette
z# Mode: 
rH   r    z 0N)r   r9   r:   r   openwriter   r'   r&   r   
IndexErrorclose)r   r\   r<   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   N)r   r   r   r   r   r   )r   r   )r   r   r   r   )r   r$   )r,   r$   r   r   )r   r   )r   r1   )r   r5   )NN)r>   r?   r@   rA   r   rB   r   )r+   rS   r>   r?   r   rB   )r\   r]   r   r   )__name__
__module____qualname____doc__r   propertyr   setterr,   r0   r4   r3   tostringrR   r[   rg   rE   r   r   r   r      sY       	 	 <@& & & & &    X ^      ^  	 	 	 X	 ]   ]	 	 	 		) 	) 	) 	)    H GK    : %))" )" )" )" )"V     r   r   r   r   datar   r   c                L    t                      }| |_        ||_        d|_        |S )Nr   )r   r   r   r   )r   ro   r   s      r   rawrq      s%    nnGGOGOGMNr   blackrB   whitefloat	list[int]c                h    | dk    rfdt          d          D             S d}t          |          )Nr   c                :    g | ]}t          |z  d z            S rX   rB   ).0r*   rs   s     r   
<listcomp>z#make_linear_lut.<locals>.<listcomp>   s*    :::!EAI$%%:::r   rH   z"unavailable when black is non-zero)r'   NotImplementedError)rr   rs   r<   s    ` r   make_linear_lutr|      s?    zz::::uSzz::::
.C
c
"
""r   expc                :      fdt          d          D             S )Nc                F    g | ]}t          |d z  z  d z  dz             S )g     o@g      ?rx   )ry   r*   r}   s     r   rz   z"make_gamma_lut.<locals>.<listcomp>   s4    HHHC!e)#u,s233HHHr   rH   )r'   )r}   s   `r   make_gamma_lutr      s#    HHHHU3ZZHHHHr   r   r   c                     t          t          dt                     z                      }|                                 t	            fd|D                       S )NrH   c                4    g | ]}|t                    z  S rE   r&   ry   r*   r   s     r   rz   znegative.<locals>.<listcomp>   #    ???!qCII~???r   )rL   r'   r&   reverser   r   r   s   ` r   negativer      sW    5s4yy))**GOO????w???@@@r   c                    ddl m fdt          dt          |           z            D             }t	          | |          S )Nr   )randintc                (    g | ]} d d          S )r   rV   rE   )ry   _r   s     r   rz   zrandom.<locals>.<listcomp>   s#    ???1wwq#???r   rH   )randomr   r'   r&   r   )r   r   r   s     @r   r   r      sP    ????cCIIo(>(>???Gg&&&r   #fff0c0c                    d t          j        |           D             t          dfdt          d          D                       S )Nc                .    g | ]}t          d |          S )r   )r|   )ry   bands     r   rz   zsepia.<locals>.<listcomp>   s"    KKK$_Q%%KKKr   r   c                8    g | ]}|d z           |d z           S )rD   rE   )ry   r*   bandss     r   rz   zsepia.<locals>.<listcomp>   s*    MMMa!eQ!V 4MMMr   i   )r	   getrgbr   r'   )rs   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 )NrH   c                4    g | ]}|t                    z  S rE   r   r   s     r   rz   zwedge.<locals>.<listcomp>   r   r   )rL   r'   r&   r   r   s   ` r   wedger      sG    5s4yy))**G????w???@@@r   filenametuple[bytes, str]c                f   t          | d          5 }t          j        t          j        t          j        g}|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)	rb   r   r   r
   seek
getpaletteSyntaxErrorr9   OSError)r   r\   paletteHandlerspaletteHandlerlutr<   s         r   loadr     s    
h		  +-#
 	 . 
	 
	N


$nR((3355 E,    (C#,, #              0 Js4   (B&4A1.B&1BB&BB&&B*-B*)r   r   ro   r   r   r   )rr   rB   rs   rt   r   ru   )r}   rt   r   ru   )r   )r   r   r   r   )r   )rs   r   r   r   )r   r   r   r   )
__future__r   r;   collections.abcr   typingr    r   r   r	   r
   TYPE_CHECKINGr   r   rq   r|   r   r   r   r   r   r   rE   r   r   <module>r      s  $ # " " " " "  $ $ $ $ $ $       H H H H H H H H H H H H n n n n n n n nj   # # # #I I I IA A A A A' ' ' ' 'O O O O O
A A A A A
     r   