o
    Zh[*                  
   @  sB  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< zd dl	m
Z
 d	Ze
 Zee W n eyP Z zdd
lmZ ee Z
ZW Y dZ[ndZ[ww eeZer^ddlm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d0ed1e"d2e Z#ej$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< dBdCd@dAZdS )D    )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                   @  s\   e Zd Zd d!dd	Zd"d
dZd#ddZd$ddZeZeZd%ddZ	d&ddZ
d'ddZdS )(PyAccessFimgImage.ImagereadonlyboolreturnNonec                 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   dictZimZunsafe_ptrsr   fficastr   r   r   sizexsizeysize_img_immodepalette_palette
_post_init)selfr   r   vals r&   C/var/www/html/lang_env/lib/python3.10/site-packages/PIL/PyAccess.py__init__9   s   
zPyAccess.__init__c                 C  s   d S Nr&   )r$   r&   r&   r'   r#   M   s   zPyAccess._post_initxytuple[int, int] | list[int]color#float | tuple[int, ...] | list[int]c                 C  s   | j r	d}t||\}}|dk r| j| }|dk r| j| }| ||f\}}| jjdv rgt|tt	frgt
|dv rg| jjdkrSt
|dkrK|d nd}|d	d }| j|| j}| jjdkre||fn|}| |||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"   Zgetcolorr   	set_pixel)r$   r*   r,   msgxyalphaZpalette_indexr&   r&   r'   __setitem__P   s&   

zPyAccess.__setitem__float | tuple[int, ...]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   r2   	get_pixel)r$   r*   r9   r:   r&   r&   r'   __getitem__w   s   

zPyAccess.__getitem__tuple[int, int]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   r1   )r$   r*   r9   r:   r8   r&   r&   r'   r2      s
   2zPyAccess.check_xyr9   intr:   c                 C     t  r)   NotImplementedErrorr$   r9   r:   r&   r&   r'   r>      s   zPyAccess.get_pixelc                 C  rB   r)   rC   r$   r9   r:   r,   r&   r&   r'   r7      s   zPyAccess.set_pixelNF)r   r   r   r   r   r   )r   r   )r*   r+   r,   r-   r   r   )r*   r+   r   r=   )r*   r@   r   r@   )r9   rA   r:   rA   r   r=   )r9   rA   r:   rA   r,   r-   r   r   )__name__
__module____qualname__r(   r#   r<   r?   ZputpixelZgetpixelr2   r>   r7   r&   r&   r&   r'   r
   8   s    


'

r
   c                   @  *   e Zd ZdZdd Zd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_initr9   rA   r:   r   r@   c                 C  s   | j | | }|j|jfS r)   )rP   rar$   r9   r:   pixelr&   r&   r'   r>      s   z_PyAccess32_2.get_pixelc                 C  s2   | j | | }t|d d|_t|d d|_d S )Nr   r0   r   )rP   minrU   rV   r$   r9   r:   r,   rX   r&   r&   r'   r7      s   z_PyAccess32_2.set_pixelN)r9   rA   r:   rA   r   r@   rH   rI   rJ   __doc__r#   r>   r7   r&   r&   r&   r'   rL      
    
rL   c                   @  rK   )_PyAccess32_3zARGB and friends, stored in the first three bytes of a 32 bit wordc                 O  rM   rN   rO   rQ   r&   r&   r'   r#      rT   z_PyAccess32_3._post_initr9   rA   r:   r   tuple[int, int, int]c                 C  s   | j | | }|j|j|jfS r)   )rP   rU   gbrW   r&   r&   r'   r>         z_PyAccess32_3.get_pixelc                 C  sH   | j | | }t|d d|_t|d d|_t|d d|_d|_d S )Nr   r0   r      rP   rY   rU   r`   ra   rV   rZ   r&   r&   r'   r7      s
   
z_PyAccess32_3.set_pixelN)r9   rA   r:   rA   r   r_   r[   r&   r&   r&   r'   r^      r]   r^   c                   @  rK   )_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                 O  rM   rN   rO   rQ   r&   r&   r'   r#      rT   z_PyAccess32_4._post_initr9   rA   r:   r   tuple[int, int, int, int]c                 C  s"   | j | | }|j|j|j|jfS r)   )rP   rU   r`   ra   rV   rW   r&   r&   r'   r>      s   z_PyAccess32_4.get_pixelc                 C  sR   | j | | }t|d d|_t|d d|_t|d d|_t|d d|_d S )Nr   r0   r   rc   r.   rd   rZ   r&   r&   r'   r7      s
   z_PyAccess32_4.set_pixelN)r9   rA   r:   rA   r   rf   r[   r&   r&   r&   r'   re      r]   re   c                   @  *   e Zd ZdZdd Zddd	Zd
d ZdS )
_PyAccess8z%1, L, P, 8 bit images stored as uint8c                 O     | j | _d S r)   )r   rP   rQ   r&   r&   r'   r#         z_PyAccess8._post_initr9   rA   r:   r   c                 C     | j | | S r)   rP   rE   r&   r&   r'   r>         z_PyAccess8.get_pixelc                 C  H   zt |d| j| |< W d S  ty#   t |d d| j| |< Y d S w )Nr0   r   rY   rP   	TypeErrorrF   r&   r&   r'   r7      
   z_PyAccess8.set_pixelNr9   rA   r:   rA   r   rA   r[   r&   r&   r&   r'   rh      
    
rh   c                   @  rg   )_PyAccessI16_Nz0I;16 access, native bitendian without conversionc                 O  rM   )Nzunsigned short **r   r   r   rP   rQ   r&   r&   r'   r#      rT   z_PyAccessI16_N._post_initr9   rA   r:   r   c                 C  rk   r)   rl   rE   r&   r&   r'   r>      rm   z_PyAccessI16_N.get_pixelc                 C  rn   )N  r   ro   rF   r&   r&   r'   r7      rq   z_PyAccessI16_N.set_pixelNrr   r[   r&   r&   r&   r'   rt      rs   rt   c                   @  rg   )_PyAccessI16_LzI;16L access, with conversionc                 O  rM   Nzstruct Pixel_I16 **ru   rQ   r&   r&   r'   r#      rT   z_PyAccessI16_L._post_initr9   rA   r:   r   c                 C  s   | j | | }|j|jd  S N   rP   lrU   rW   r&   r&   r'   r>      rb   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 )Nrv   r   r0      )rP   rY   rp   r|   rU   rZ   r&   r&   r'   r7        
z_PyAccessI16_L.set_pixelNrr   r[   r&   r&   r&   r'   rw      r]   rw   c                   @  rg   )_PyAccessI16_BzI;16B access, with conversionc                 O  rM   rx   ru   rQ   r&   r&   r'   r#     rT   z_PyAccessI16_B._post_initr9   rA   r:   r   c                 C  s   | j | | }|jd |j S ry   r{   rW   r&   r&   r'   r>     rb   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 )Nrv   r   r}   r0   )rP   rY   	Exceptionr|   rU   rZ   r&   r&   r'   r7     r~   z_PyAccessI16_B.set_pixelNrr   r[   r&   r&   r&   r'   r     r]   r   c                   @  rg   )_PyAccessI32_Nz"Signed Int32 access, native endianc                 O  ri   r)   r   rP   rQ   r&   r&   r'   r#   %  rj   z_PyAccessI32_N._post_initr9   rA   r:   r   c                 C  rk   r)   rl   rE   r&   r&   r'   r>   (  rm   z_PyAccessI32_N.get_pixelc                 C  s   || j | |< d S r)   rl   rF   r&   r&   r'   r7   +  s   z_PyAccessI32_N.set_pixelNrr   r[   r&   r&   r&   r'   r   "  rs   r   c                   @  s2   e Zd ZdZdd Zdd Zdd
dZdd ZdS )_PyAccessI32_Swapz,I;32L/B access, with byteswapping conversionc                 O  ri   r)   r   rQ   r&   r&   r'   r#   2  rj   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.   rc   r   r   )r   newr   )r$   iorigcharsr&   r&   r'   reverse5  s   4z_PyAccessI32_Swap.reverser9   rA   r:   r   c                 C  s   |  | j| | S r)   r   rP   rE   r&   r&   r'   r>   ;  rT   z_PyAccessI32_Swap.get_pixelc                 C  s   |  || j| |< d S r)   r   rF   r&   r&   r'   r7   >  s   z_PyAccessI32_Swap.set_pixelNrr   )rH   rI   rJ   r\   r#   r   r>   r7   r&   r&   r&   r'   r   /  s    
r   c                   @  rK   )
_PyAccessFz32 bit float accessc                 O  rM   )Nzfloat **rO   rQ   r&   r&   r'   r#   E  rT   z_PyAccessF._post_initr9   rA   r:   r   floatc                 C  rk   r)   rl   rE   r&   r&   r'   r>   H  rm   z_PyAccessF.get_pixelc                 C  s<   z
|| j | |< W d S  ty   |d | j | |< Y d S w )Nr   )rP   rp   rF   r&   r&   r'   r7   K  s
   z_PyAccessF.set_pixelN)r9   rA   r:   rA   r   r   r[   r&   r&   r&   r'   r   B  rs   r   1Lr   zI;16NZLAZLar   RGBZLABZHSVZYCbCrZRGBAZRGBaZRGBXZCMYKFIlittlezI;16zI;16LzI;16BzI;32LzI;32BFr   r   r   r   r   PyAccess | Nonec                 C  s.   t | jd }|std| j d S || |S )NzPyAccess Not Implemented: %s)mode_mapgetr    loggerdebug)r   r   Zaccess_typer&   r&   r'   r   x  s
   
r   rG   )r   r   r   r   r   r   )%
__future__r   loggingsystypingr   Z
_deprecater   __annotations__Zcffir   Zdefsr   ZcdefImportErrorexZ_utilr   r   	getLoggerrH   r    r	   r
   rL   r^   re   rh   rt   rw   r   r   r   r   r   	byteorderr&   r&   r&   r'   <module>   s   
e	

