
    g[*                       U d dl mZ d dlZd dlZd dlmZ ddlmZ ded<   	 d dl	m
Z
 d	Z e
       Zej                  e        ej&                  e      ZerddlmZ  G d d      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d  d!e      Z"i d"ed#ed$ed%ed&ed'ed(ed)ed*ed+ed,ed-ed.ed/ed0ed1e"d2e Z#ejH                  d3k(  ree#d4<   ee#d5<   ee#d6<   e e#d7<   e!e#d8<   nee#d4<   ee#d5<   ee#d6<   e!e#d7<   e e#d8<   d:d;d9Zy# e$ r%Zdd
lmZ  ej$                  e      xZ
ZY dZ[4dZ[ww xY w)<    )annotationsN)TYPE_CHECKING   )	deprecatetypeFFI)r   z|
    struct Pixel_RGBA {
        unsigned char r,g,b,a;
    };
    struct Pixel_I16 {
        unsigned char l,r;
    };
    )DeferredError)Imagec                  j    e Zd Zd	d
dZddZ	 	 	 	 	 	 ddZddZeZeZddZ	ddZ
	 	 	 	 	 	 	 	 ddZy)PyAccessc                   t        dd       t        |j                  j                        }|| _        t
        j                  d|d         | _        t
        j                  d|d         | _        t
        j                  d|d         | _	        |j                  j                  \  | _        | _        || _        |j                  | _        | j                  j                  dv r|j                   | _        | j%                          y )	Nr      zunsigned char **image8zint **image32imagePPA)r   dictimunsafe_ptrsreadonlyfficastr   r   r   sizexsizeysize_img_immodepalette_palette
_post_init)selfimgr   valss       A/var/www/openai/venv/lib/python3.12/site-packages/PIL/PyAccess.py__init__zPyAccess.__init__9   s    *b!CFF&&' hh14>Bxx$y/:XX0$w-@
!$
DJ	 6688==K'KKDM
 	    c                     y N )r$   s    r'   r#   zPyAccess._post_initM   s    r)   c                F   | j                   rd}t        |      |\  }}|dk  r| j                  |z   }|dk  r| j                  |z   }| j	                  ||f      \  }}| j
                  j                  dv rt        |t        t        f      rt        |      dv rx| j
                  j                  dk(  rt        |      dk(  r|d   nd}|d	d }| j                  j                  || j                        }| j
                  j                  dk(  r|fn|}| j                  |||      S )
a  
        Modifies the pixel at x,y. The color is given as a single
        numerical value for single band images, and a tuple for
        multi-band images. In addition to this, RGB and RGBA tuples
        are accepted for P and PA images.

        :param xy: The pixel coordinate, given as (x, y). See
           :ref:`coordinate-system`.
        :param color: The pixel value.
        z%Attempt to putpixel a read only imager   r   )      r   r/   r.      N)r   
ValueErrorr   r   check_xyr   r    
isinstancelisttuplelenr"   getcolorr   	set_pixel)r$   xycolormsgxyalphapalette_indexs           r'   __setitem__zPyAccess.__setitem__P   s    ==9CS/!Aq5

QAq5

QA1v&A HHMM[(54-0E
f$ xx}}$$'J!Oabq	 MM225$))DM.2hhmmt.C]E*E~~aE**r)   c                    |\  }}|dk  r| j                   |z   }|dk  r| j                  |z   }| j                  ||f      \  }}| j                  ||      S )aq  
        Returns the pixel at x,y. The pixel is returned as a single
        value for single band images or a tuple for multiple band
        images

        :param xy: The pixel coordinate, given as (x, y). See
          :ref:`coordinate-system`.
        :returns: a pixel value for single band images, a tuple of
          pixel values for multiband images.
        r   )r   r   r2   	get_pixel)r$   r9   r<   r=   s       r'   __getitem__zPyAccess.__getitem__w   s\     Aq5

QAq5

QA1v&A~~a##r)   c                    |\  }}d|cxk  r| j                   k  rn nd|cxk  r| j                  k  sn d}t        |      |S )Nr   zpixel location out of range)r   r   r1   )r$   r9   r<   r=   r;   s        r'   r2   zPyAccess.check_xy   s@    AQ##Q(;(;/CS/!	r)   c                    t               r+   NotImplementedErrorr$   r<   r=   s      r'   rB   zPyAccess.get_pixel   s    !##r)   c                    t               r+   rF   r$   r<   r=   r:   s       r'   r8   zPyAccess.set_pixel   s     "##r)   NF)r%   Image.Imager   boolreturnNone)rN   rO   )r9   tuple[int, int] | list[int]r:   #float | tuple[int, ...] | list[int]rN   rO   )r9   rP   rN   float | tuple[int, ...])r9   tuple[int, int]rN   rS   )r<   intr=   rT   rN   rR   )r<   rT   r=   rT   r:   rQ   rN   rO   )__name__
__module____qualname__r(   r#   r@   rC   putpixelgetpixelr2   rB   r8   r,   r)   r'   r   r   8   sn    (%+'%+ 3%+ 
	%+N$& HH$$$$%H$	$r)   r   c                  $    e Zd ZdZd ZddZd Zy)_PyAccess32_2z7PA, LA, stored in first and last bytes of a 32 bit wordc                N    t         j                  d| j                        | _        y Nzstruct Pixel_RGBA **r   r   r   pixelsr$   argskwargss      r'   r#   z_PyAccess32_2._post_init       hh5t||Dr)   c                V    | j                   |   |   }|j                  |j                  fS r+   )r_   rar$   r<   r=   pixels       r'   rB   z_PyAccess32_2.get_pixel   s'    Aq!wwr)   c                x    | j                   |   |   }t        |d   d      |_        t        |d   d      |_        y )Nr   r0   r   )r_   minre   rf   r$   r<   r=   r:   rh   s        r'   r8   z_PyAccess32_2.set_pixel   s8    Aq!eAh$eAh$r)   N)r<   rT   r=   rT   rN   rS   rU   rV   rW   __doc__r#   rB   r8   r,   r)   r'   r[   r[      s    AE %r)   r[   c                  $    e Zd ZdZd ZddZd Zy)_PyAccess32_3zARGB and friends, stored in the first three bytes of a 32 bit wordc                N    t         j                  d| j                        | _        y r]   r^   r`   s      r'   r#   z_PyAccess32_3._post_init   rc   r)   c                l    | j                   |   |   }|j                  |j                  |j                  fS r+   )r_   re   gbrg   s       r'   rB   z_PyAccess32_3.get_pixel   s-    Aq!ww((r)   c                    | j                   |   |   }t        |d   d      |_        t        |d   d      |_        t        |d   d      |_        d|_        y )Nr   r0   r      r_   rj   re   rr   rs   rf   rk   s        r'   r8   z_PyAccess32_3.set_pixel   sQ    Aq!eAh$eAh$eAh$r)   N)r<   rT   r=   rT   rN   ztuple[int, int, int]rl   r,   r)   r'   ro   ro      s    KE)r)   ro   c                  $    e Zd ZdZd ZddZd Zy)_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                N    t         j                  d| j                        | _        y r]   r^   r`   s      r'   r#   z_PyAccess32_4._post_init   rc   r)   c                    | j                   |   |   }|j                  |j                  |j                  |j                  fS r+   )r_   re   rr   rs   rf   rg   s       r'   rB   z_PyAccess32_4.get_pixel   s3    Aq!ww%''11r)   c                    | j                   |   |   }t        |d   d      |_        t        |d   d      |_        t        |d   d      |_        t        |d   d      |_        y )Nr   r0   r   ru   r.   rv   rk   s        r'   r8   z_PyAccess32_4.set_pixel   s\    Aq!eAh$eAh$eAh$eAh$r)   N)r<   rT   r=   rT   rN   ztuple[int, int, int, int]rl   r,   r)   r'   rx   rx      s    0E2%r)   rx   c                  $    e Zd ZdZd ZddZd Zy)
_PyAccess8z%1, L, P, 8 bit images stored as uint8c                &    | j                   | _        y r+   )r   r_   r`   s      r'   r#   z_PyAccess8._post_init   s    kkr)   c                &    | j                   |   |   S r+   r_   rH   s      r'   rB   z_PyAccess8.get_pixel       {{1~a  r)   c                    	 t        |d      | j                  |   |<   y # t        $ r" t        |d   d      | j                  |   |<   Y y w xY w)Nr0   r   rj   r_   	TypeErrorrJ   s       r'   r8   z_PyAccess8.set_pixel   sK    	3 #E3DKKN1 	3 #E!Hc 2DKKN1	3    (A
	A
Nr<   rT   r=   rT   rN   rT   rl   r,   r)   r'   r}   r}      s    /"!3r)   r}   c                  $    e Zd ZdZd ZddZd Zy)_PyAccessI16_Nz0I;16 access, native bitendian without conversionc                N    t         j                  d| j                        | _        y )Nzunsigned short **r   r   r   r_   r`   s      r'   r#   z_PyAccessI16_N._post_init   s    hh2DJJ?r)   c                &    | j                   |   |   S r+   r   rH   s      r'   rB   z_PyAccessI16_N.get_pixel   r   r)   c                    	 t        |d      | j                  |   |<   y # t        $ r" t        |d   d      | j                  |   |<   Y y w xY w)N  r   r   rJ   s       r'   r8   z_PyAccessI16_N.set_pixel   sL    	5 #E5 1DKKN1 	5 #E!He 4DKKN1	5r   Nr   rl   r,   r)   r'   r   r      s    :@!5r)   r   c                  $    e Zd ZdZd ZddZd Zy)_PyAccessI16_LzI;16L access, with conversionc                N    t         j                  d| j                        | _        y Nzstruct Pixel_I16 **r   r`   s      r'   r#   z_PyAccessI16_L._post_init       hh4djjAr)   c                ^    | j                   |   |   }|j                  |j                  dz  z   S N   r_   lre   rg   s       r'   rB   z_PyAccessI16_L.get_pixel   s+    Aq!ww3&&r)   c                    | j                   |   |   }	 t        |d      }|dz  |_        |dz	  |_        y # t        $ r t        |d   d      }Y /w xY w)Nr   r   r0      )r_   rj   r   r   re   rk   s        r'   r8   z_PyAccessI16_L.set_pixel  s^    Aq!	)u%E $,1*	  	)a%(E	)   5 AANr   rl   r,   r)   r'   r   r      s    'B'r)   r   c                  $    e Zd ZdZd ZddZd Zy)_PyAccessI16_BzI;16B access, with conversionc                N    t         j                  d| j                        | _        y r   r   r`   s      r'   r#   z_PyAccessI16_B._post_init  r   r)   c                ^    | j                   |   |   }|j                  dz  |j                  z   S r   r   rg   s       r'   rB   z_PyAccessI16_B.get_pixel  s+    Aq!ww}uww&&r)   c                    | j                   |   |   }	 t        |d      }|dz	  |_        |dz  |_        y # t        $ r t        |d   d      }Y /w xY w)Nr   r   r   r0   )r_   rj   	Exceptionr   re   rk   s        r'   r8   z_PyAccessI16_B.set_pixel  s^    Aq!	)u%E 1*$,	  	)a%(E	)r   Nr   rl   r,   r)   r'   r   r     s    'B'r)   r   c                  $    e Zd ZdZd ZddZd Zy)_PyAccessI32_Nz"Signed Int32 access, native endianc                &    | j                   | _        y r+   r   r_   r`   s      r'   r#   z_PyAccessI32_N._post_init%      llr)   c                &    | j                   |   |   S r+   r   rH   s      r'   rB   z_PyAccessI32_N.get_pixel(  r   r)   c                (    || j                   |   |<   y r+   r   rJ   s       r'   r8   z_PyAccessI32_N.set_pixel+  s    !Aqr)   Nr   rl   r,   r)   r'   r   r   "  s    ,#!"r)   r   c                  *    e Zd ZdZd Zd ZddZd Zy)_PyAccessI32_Swapz,I;32L/B access, with byteswapping conversionc                &    | j                   | _        y r+   r   r`   s      r'   r#   z_PyAccessI32_Swap._post_init2  r   r)   c                    t         j                  d|      }t         j                  d|      }|d   |d   |d   |d   f\  |d<   |d<   |d<   |d<   t         j                  d|      d   S )Nzint *zunsigned char *r.   ru   r   r   )r   newr   )r$   iorigcharss       r'   reversez_PyAccessI32_Swap.reverse5  sq    www"*D116q58U1XuUVx1W.a%(E!HeAhxx'**r)   c                D    | j                  | j                  |   |         S r+   r   r_   rH   s      r'   rB   z_PyAccessI32_Swap.get_pixel;  s    ||DKKN1-..r)   c                F    | j                  |      | j                  |   |<   y r+   r   rJ   s       r'   r8   z_PyAccessI32_Swap.set_pixel>  s     LL/Aqr)   Nr   )rU   rV   rW   rm   r#   r   rB   r8   r,   r)   r'   r   r   /  s    6#+/0r)   r   c                  $    e Zd ZdZd ZddZd Zy)
_PyAccessFz32 bit float accessc                N    t         j                  d| j                        | _        y )Nzfloat **r^   r`   s      r'   r#   z_PyAccessF._post_initE  s    hhz4<<8r)   c                &    | j                   |   |   S r+   r   rH   s      r'   rB   z_PyAccessF.get_pixelH  r   r)   c                r    	 || j                   |   |<   y # t        $ r |d   | j                   |   |<   Y y w xY w)Nr   )r_   r   rJ   s       r'   r8   z_PyAccessF.set_pixelK  s>    	) %DKKN1 	) %aDKKN1	)s    66N)r<   rT   r=   rT   rN   floatrl   r,   r)   r'   r   r   B  s    9!)r)   r   1Lr   zI;16NLALar   RGBLABHSVYCbCrRGBARGBaRGBXCMYKFIlittlezI;16zI;16LzI;16BzI;32LzI;32Bc                    t         j                  | j                  d       }|s!t        j	                  d| j                         y  || |      S )NzPyAccess Not Implemented: %s)mode_mapgetr    loggerdebug)r%   r   access_types      r'   r   r   x  s<    ,,sxx.K3SXX>sH%%r)   rK   )r%   rL   r   rM   rN   zPyAccess | None)%
__future__r   loggingsystypingr   
_deprecater   __annotations__cffir   defsr   cdefImportErrorex_utilr	   r   	getLoggerrU   r    r
   r   r[   ro   rx   r}   r   r   r   r   r   r   r   	byteorderr,   r)   r'   <module>r      sR  * #  
   !		&D %CHHTN 
		8	$b$ b$J%H %"H &%H %&3 3$5X 5$X *X *
"X 
"0 0&) )$  ^	
 	- 	- 	- 
= 
= 
= ] M M M M  !" #( ==H%HV&HW&HW&HW)HW%HV&HW&HW)HW&HW&[
  & %!!!"%%C#&s    E E;E66E;