o
    g&                  
   @   s
  d dl Z d dlZddlmZ zd dlmZ dZe Zee W n e	y> Z
 zddlmZ ee
 ZZW Y dZ
[
ndZ
[
ww e eZG dd dZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d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reed/< eed0< eed1< eed2< eed3< need/< eed0< eed1< eed2< eed3< d7d5d6ZdS )8    N   )	deprecate)FFIz|
    struct Pixel_RGBA {
        unsigned char r,g,b,a;
    };
    struct Pixel_I16 {
        unsigned char l,r;
    };
    )DeferredErrorc                   @   s>   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S )PyAccessFc                 C   s   t dd t|jj}|| _td|d | _td|d | _td|d | _	|jj
\| _| _|| _|j| _| jjdv rB|j| _|   d S )	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   vals r    J/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/PIL/PyAccess.py__init__3   s   
zPyAccess.__init__c                 C   s   d S Nr    )r   r    r    r!   r   G   s   zPyAccess._post_initc                 C   s   | j r	d}t||\}}|dk r| j| }|dk r| j| }| ||f\}}| jjdv ret|tt	fret
|dv re| jjdkrSt
|dkrK|d nd}|d	d }| j|| j}| jjdkre||f}| |||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alphar    r    r!   __setitem__J   s(   


zPyAccess.__setitem__c                 C   sJ   |\}}|dk r| j | }|dk r| j| }| ||f\}}| ||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   r/   r2   r3   r    r    r!   __getitem__m   s   

zPyAccess.__getitem__c                 C   sJ   |\}}d|  kr| j k rn nd|  kr| jk s#n d}t||S )Nr   zpixel location out of range)r   r   r'   )r   r/   r2   r3   r1   r    r    r!   r(      s
   2zPyAccess.check_xyNF)
__name__
__module____qualname__r"   r   r5   r7   putpixelgetpixelr(   r    r    r    r!   r   2   s    
#r   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	_PyAccess32_2z7PA, LA, stored in first and last bytes of a 32 bit wordc                 O      t d| j| _d S Nzstruct Pixel_RGBA **r   r   r	   pixelsr   argskwargsr    r    r!   r         z_PyAccess32_2._post_initc                 C   s   | j | | }|j|jfS r#   )rC   rar   r2   r3   pixelr    r    r!   r6      s   z_PyAccess32_2.get_pixelc                 C   s2   | j | | }t|d d|_t|d d|_d S )Nr   r&   r   )rC   minrH   rI   r   r2   r3   r0   rK   r    r    r!   r.      s   z_PyAccess32_2.set_pixelNr9   r:   r;   __doc__r   r6   r.   r    r    r    r!   r?      
    r?   c                   @   r>   )	_PyAccess32_3zARGB and friends, stored in the first three bytes of a 32 bit wordc                 O   r@   rA   rB   rD   r    r    r!   r      rG   z_PyAccess32_3._post_initc                 C   s   | j | | }|j|j|jfS r#   )rC   rH   gbrJ   r    r    r!   r6         z_PyAccess32_3.get_pixelc                 C   sH   | j | | }t|d d|_t|d d|_t|d d|_d|_d S )Nr   r&   r      rC   rL   rH   rR   rS   rI   rM   r    r    r!   r.      s
   
z_PyAccess32_3.set_pixelNrN   r    r    r    r!   rQ      rP   rQ   c                   @   r>   )	_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                 O   r@   rA   rB   rD   r    r    r!   r      rG   z_PyAccess32_4._post_initc                 C   s"   | j | | }|j|j|j|jfS r#   )rC   rH   rR   rS   rI   rJ   r    r    r!   r6      s   z_PyAccess32_4.get_pixelc                 C   sR   | j | | }t|d d|_t|d d|_t|d d|_t|d d|_d S )Nr   r&   r   rU   r$   rV   rM   r    r    r!   r.      s
   z_PyAccess32_4.set_pixelNrN   r    r    r    r!   rW      rP   rW   c                   @   r>   )	
_PyAccess8z%1, L, P, 8 bit images stored as uint8c                 O      | j | _d S r#   )r   rC   rD   r    r    r!   r         z_PyAccess8._post_initc                 C      | j | | S r#   rC   r   r2   r3   r    r    r!   r6         z_PyAccess8.get_pixelc                 C   H   zt |d| j| |< W d S  ty#   t |d d| j| |< Y d S w )Nr&   r   rL   rC   	TypeErrorr   r2   r3   r0   r    r    r!   r.      
   z_PyAccess8.set_pixelNrN   r    r    r    r!   rX      
    rX   c                   @   r>   )	_PyAccessI16_Nz0I;16 access, native bitendian without conversionc                 O   r@   )Nzunsigned short **r   r   r
   rC   rD   r    r    r!   r      rG   z_PyAccessI16_N._post_initc                 C   r[   r#   r\   r]   r    r    r!   r6      r^   z_PyAccessI16_N.get_pixelc                 C   r_   )N  r   r`   rb   r    r    r!   r.      rc   z_PyAccessI16_N.set_pixelNrN   r    r    r    r!   re      rd   re   c                   @   r>   )	_PyAccessI16_LzI;16L access, with conversionc                 O   r@   Nzstruct Pixel_I16 **rf   rD   r    r    r!   r      rG   z_PyAccessI16_L._post_initc                 C   s   | j | | }|j|jd  S N   rC   lrH   rJ   r    r    r!   r6      rT   z_PyAccessI16_L.get_pixelc                 C   sV   | j | | }zt|d}W n ty   t|d d}Y nw |d@ |_|d? |_d S )Nrg   r   r&      )rC   rL   ra   rm   rH   rM   r    r    r!   r.         
z_PyAccessI16_L.set_pixelNrN   r    r    r    r!   rh      rP   rh   c                   @   r>   )	_PyAccessI16_BzI;16B access, with conversionc                 O   r@   ri   rf   rD   r    r    r!   r      rG   z_PyAccessI16_B._post_initc                 C   s   | j | | }|jd |j S rj   rl   rJ   r    r    r!   r6     rT   z_PyAccessI16_B.get_pixelc                 C   sV   | j | | }zt|d}W n ty   t|d d}Y nw |d? |_|d@ |_d S )Nrg   r   rn   r&   )rC   rL   	Exceptionrm   rH   rM   r    r    r!   r.     ro   z_PyAccessI16_B.set_pixelNrN   r    r    r    r!   rp      rP   rp   c                   @   r>   )	_PyAccessI32_Nz"Signed Int32 access, native endianc                 O   rY   r#   r	   rC   rD   r    r    r!   r     rZ   z_PyAccessI32_N._post_initc                 C   r[   r#   r\   r]   r    r    r!   r6     r^   z_PyAccessI32_N.get_pixelc                 C   s   || j | |< d S r#   r\   rb   r    r    r!   r.     s   z_PyAccessI32_N.set_pixelNrN   r    r    r    r!   rr     rd   rr   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_PyAccessI32_Swapz,I;32L/B access, with byteswapping conversionc                 O   rY   r#   rs   rD   r    r    r!   r      rZ   z_PyAccessI32_Swap._post_initc                 C   s\   t d|}t d|}|d |d |d |d f\|d< |d< |d< |d< t d|d S )Nzint *zunsigned char *r$   rU   r   r   )r   newr   )r   iorigcharsr    r    r!   reverse#  s   4z_PyAccessI32_Swap.reversec                 C   s   |  | j| | S r#   ry   rC   r]   r    r    r!   r6   )  rG   z_PyAccessI32_Swap.get_pixelc                 C   s   |  || j| |< d S r#   rz   rb   r    r    r!   r.   ,  s   z_PyAccessI32_Swap.set_pixelN)r9   r:   r;   rO   r   ry   r6   r.   r    r    r    r!   rt     s    rt   c                   @   r>   )	
_PyAccessFz32 bit float accessc                 O   r@   )Nzfloat **rB   rD   r    r    r!   r   3  rG   z_PyAccessF._post_initc                 C   r[   r#   r\   r]   r    r    r!   r6   6  r^   z_PyAccessF.get_pixelc                 C   s<   z
|| j | |< W d S  ty   |d | j | |< Y d S w )Nr   )rC   ra   rb   r    r    r!   r.   9  s
   z_PyAccessF.set_pixelNrN   r    r    r    r!   r{   0  rd   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;32BFc                 C   s.   t | jd }|std| j d S || |S )NzPyAccess Not Implemented: %s)mode_mapgetr   loggerdebug)r   r   access_typer    r    r!   ru   f  s
   
ru   r8   )loggingsys
_deprecater   cffir   defsr   cdefImportErrorex_utilr   	getLoggerr9   r   r   r?   rQ   rW   rX   re   rh   rp   rr   rt   r{   r   	byteorderru   r    r    r    r!   <module>   s   
Y	


