
    e&                       d dl mZ d dlZd dlZddlmZ 	 d dlmZ dZ e       Z	e	j                  e        ej                   e      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d,ed-ed.eZej>                  d/k(  reed0<   eed1<   eed2<   eed3<   eed4<   need0<   eed1<   eed2<   eed3<   eed4<   d6d5Zy# e$ r%ZddlmZ  ej                  e      xZZ	Y dZ[+dZ[ww xY w)7    )annotationsN   )	deprecate)FFIz|
    struct Pixel_RGBA {
        unsigned char r,g,b,a;
    };
    struct Pixel_I16 {
        unsigned char l,r;
    };
    )DeferredErrorc                  4    e Zd ZddZd Zd Zd ZeZeZ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       ./usr/lib/python3/dist-packages/PIL/PyAccess.py__init__zPyAccess.__init__4   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_initH   s    r&   c                B   | 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 rv| j
                  j                  dk(  rt        |      dk(  r|d   nd}|d	d }| j                  j                  || j                        }| j
                  j                  dk(  r|f}| j                  |||      S )
a0  
        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

        :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alphas          r$   __setitem__zPyAccess.__setitem__K   s    ==9CS/!Aq5

QAq5

QA1v&A HHMM[(54-0E
f$ xx}}$$'J!Oabq	MM**5$))<Exx}}$~~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   r/   	get_pixel)r!   r6   r9   r:   s       r$   __getitem__zPyAccess.__getitem__n   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   r.   )r!   r6   r9   r:   r8   s        r$   r/   zPyAccess.check_xy   s@    AQ##Q(;(;/CS/!	r&   NF)
__name__
__module____qualname__r%   r    r<   r?   putpixelgetpixelr/   r)   r&   r$   r	   r	   3   s(    (!+F$& HHr&   r	   c                  "    e Zd ZdZd Z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(   )rL   rar!   r9   r:   pixels       r$   r>   z_PyAccess32_2.get_pixel   s'    Aq!wwr&   c                x    | j                   |   |   }t        |d   d      |_        t        |d   d      |_        y )Nr   r-   r   )rL   minrR   rS   r!   r9   r:   r7   rU   s        r$   r5   z_PyAccess32_2.set_pixel   s8    Aq!eAh$eAh$r&   NrB   rC   rD   __doc__r    r>   r5   r)   r&   r$   rH   rH      s    AE %r&   rH   c                  "    e Zd ZdZd Z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 rJ   rK   rM   s      r$   r    z_PyAccess32_3._post_init   rP   r&   c                l    | j                   |   |   }|j                  |j                  |j                  fS r(   )rL   rR   gbrT   s       r$   r>   z_PyAccess32_3.get_pixel   s-    Aq!ww((r&   c                    | j                   |   |   }t        |d   d      |_        t        |d   d      |_        t        |d   d      |_        d|_        y )Nr   r-   r      rL   rW   rR   r_   r`   rS   rX   s        r$   r5   z_PyAccess32_3.set_pixel   sQ    Aq!eAh$eAh$eAh$r&   NrY   r)   r&   r$   r\   r\      s    KE)r&   r\   c                  "    e Zd ZdZd Zd Zd Zy)_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                N    t         j                  d| j                        | _        y rJ   rK   rM   s      r$   r    z_PyAccess32_4._post_init   rP   r&   c                    | j                   |   |   }|j                  |j                  |j                  |j                  fS r(   )rL   rR   r_   r`   rS   rT   s       r$   r>   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   r-   r   rb   r+   rc   rX   s        r$   r5   z_PyAccess32_4.set_pixel   s\    Aq!eAh$eAh$eAh$eAh$r&   NrY   r)   r&   r$   re   re      s    0E2%r&   re   c                  "    e Zd ZdZd Zd Zd Zy)
_PyAccess8z%1, L, P, 8 bit images stored as uint8c                &    | j                   | _        y r(   )r   rL   rM   s      r$   r    z_PyAccess8._post_init   s    kkr&   c                &    | j                   |   |   S r(   rL   r!   r9   r:   s      r$   r>   z_PyAccess8.get_pixel       {{1~a  r&   c                    	 t        |d      | j                  |   |<   y # t        $ r" t        |d   d      | j                  |   |<   Y y w xY w)Nr-   r   rW   rL   	TypeErrorr!   r9   r:   r7   s       r$   r5   z_PyAccess8.set_pixel   sK    	3 #E3DKKN1 	3 #E!Hc 2DKKN1	3    (A
	A
NrY   r)   r&   r$   rj   rj      s    /"!3r&   rj   c                  "    e Zd ZdZd Z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   rL   rM   s      r$   r    z_PyAccessI16_N._post_init   s    hh2DJJ?r&   c                &    | j                   |   |   S r(   rm   rn   s      r$   r>   z_PyAccessI16_N.get_pixel   ro   r&   c                    	 t        |d      | j                  |   |<   y # t        $ r" t        |d   d      | j                  |   |<   Y y w xY w)N  r   rq   rs   s       r$   r5   z_PyAccessI16_N.set_pixel   sL    	5 #E5 1DKKN1 	5 #E!He 4DKKN1	5rt   NrY   r)   r&   r$   rv   rv      s    :@!5r&   rv   c                  "    e Zd ZdZd Zd Zd Zy)_PyAccessI16_LzI;16L access, with conversionc                N    t         j                  d| j                        | _        y Nzstruct Pixel_I16 **rx   rM   s      r$   r    z_PyAccessI16_L._post_init       hh4djjAr&   c                ^    | j                   |   |   }|j                  |j                  dz  z   S N   rL   lrR   rT   s       r$   r>   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   r-      )rL   rW   rr   r   rR   rX   s        r$   r5   z_PyAccessI16_L.set_pixel   s^    Aq!	)u%E $,1*	  	)a%(E	)   5 AANrY   r)   r&   r$   r}   r}      s    'B'r&   r}   c                  "    e Zd ZdZd Zd Zd Zy)_PyAccessI16_BzI;16B access, with conversionc                N    t         j                  d| j                        | _        y r   rx   rM   s      r$   r    z_PyAccessI16_B._post_init   r   r&   c                ^    | j                   |   |   }|j                  dz  |j                  z   S r   r   rT   s       r$   r>   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   r-   )rL   rW   	Exceptionr   rR   rX   s        r$   r5   z_PyAccessI16_B.set_pixel  s^    Aq!	)u%E 1*$,	  	)a%(E	)r   NrY   r)   r&   r$   r   r      s    'B'r&   r   c                  "    e Zd ZdZd Zd Zd Zy)_PyAccessI32_Nz"Signed Int32 access, native endianc                &    | j                   | _        y r(   r   rL   rM   s      r$   r    z_PyAccessI32_N._post_init      llr&   c                &    | j                   |   |   S r(   rm   rn   s      r$   r>   z_PyAccessI32_N.get_pixel  ro   r&   c                (    || j                   |   |<   y r(   rm   rs   s       r$   r5   z_PyAccessI32_N.set_pixel  s    !Aqr&   NrY   r)   r&   r$   r   r     s    ,#!"r&   r   c                  (    e Zd ZdZd Zd Zd Zd Zy)_PyAccessI32_Swapz,I;32L/B access, with byteswapping conversionc                &    | j                   | _        y r(   r   rM   s      r$   r    z_PyAccessI32_Swap._post_init!  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+   rb   r   r   )r   newr   )r!   iorigcharss       r$   reversez_PyAccessI32_Swap.reverse$  sq    www"*D116q58U1XuUVx1W.a%(E!HeAhxx'**r&   c                D    | j                  | j                  |   |         S r(   r   rL   rn   s      r$   r>   z_PyAccessI32_Swap.get_pixel*  s    ||DKKN1-..r&   c                F    | j                  |      | j                  |   |<   y r(   r   rs   s       r$   r5   z_PyAccessI32_Swap.set_pixel-  s     LL/Aqr&   N)rB   rC   rD   rZ   r    r   r>   r5   r)   r&   r$   r   r     s    6#+/0r&   r   c                  "    e Zd ZdZd Zd Zd Zy)
_PyAccessFz32 bit float accessc                N    t         j                  d| j                        | _        y )Nzfloat **rK   rM   s      r$   r    z_PyAccessF._post_init4  s    hhz4<<8r&   c                &    | j                   |   |   S r(   rm   rn   s      r$   r>   z_PyAccessF.get_pixel7  ro   r&   c                r    	 || j                   |   |<   y # t        $ r |d   | j                   |   |<   Y y w xY w)Nr   )rL   rr   rs   s       r$   r5   z_PyAccessF.set_pixel:  s>    	) %DKKN1 	) %aDKKN1	)s    66NrY   r)   r&   r$   r   r   1  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   g  s<    ,,sxx.K3SXX>sH%%r&   rA   ) 
__future__r   loggingsys
_deprecater   cffir   defsr   cdefImportErrorex_utilr   r   	getLoggerrB   r   r	   rH   r\   re   rj   rv   r}   r   r   r   r   r   	byteorderr)   r&   r$   <module>r      sD  * #  
 !&D %CHHTN 
		8	$V Vr%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    D< <E&E!!E&