o
    ‡®f[*  ã                
   @  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   ÚdictÚimÚunsafe_ptrsr   ÚffiÚcastr   r   r   ÚsizeÚxsizeÚysizeÚ_imgÚ_imÚmodeÚpaletteÚ_paletteÚ
_post_init)Úselfr   r   Úvals© r(   úE/home/ubuntu/webapp/venv/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   r1   r0   éÿ   N)r   Ú
ValueErrorr   r   Úcheck_xyr!   r"   Ú
isinstanceÚlistÚtupleÚlenr$   Úgetcolorr    Ú	set_pixel)r&   r,   r.   ÚmsgÚxÚyÚalphaÚ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   r4   Ú	get_pixel)r&   r,   r<   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   r3   )r&   r,   r<   r=   r;   r(   r(   r)   r4      s
   2zPyAccess.check_xyr<   Úintr=   c                 C  ó   t ƒ ‚r+   ©ÚNotImplementedError©r&   r<   r=   r(   r(   r)   rB   ”   s   zPyAccess.get_pixelc                 C  rF   r+   rG   ©r&   r<   r=   r.   r(   r(   r)   r:   —   s   zPyAccess.set_pixelN©F)r   r   r   r   r   r   )r   r   )r,   r-   r.   r/   r   r   )r,   r-   r   rA   )r,   rD   r   rD   )r<   rE   r=   rE   r   rA   )r<   rE   r=   rE   r.   r/   r   r   )Ú__name__Ú
__module__Ú__qualname__r*   r%   r@   rC   ÚputpixelÚgetpixelr4   rB   r:   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_initr<   rE   r=   r   rD   c                 C  s   | j | | }|j|jfS r+   )rV   ÚrÚa©r&   r<   r=   Úpixelr(   r(   r)   rB   £   s   z_PyAccess32_2.get_pixelc                 C  s2   | j | | }t|d dƒ|_t|d dƒ|_d S )Nr   r2   r   )rV   Úminr[   r\   ©r&   r<   r=   r.   r^   r(   r(   r)   r:   §   s   z_PyAccess32_2.set_pixelN)r<   rE   r=   rE   r   rD   ©rL   rM   rN   Ú__doc__r%   rB   r:   r(   r(   r(   r)   rR      ó
    
rR   c                   @  rQ   )Ú_PyAccess32_3zARGB and friends, stored in the first three bytes of a 32 bit wordc                 O  rS   rT   rU   rW   r(   r(   r)   r%   ±   rZ   z_PyAccess32_3._post_initr<   rE   r=   r   útuple[int, int, int]c                 C  s   | j | | }|j|j|jfS r+   )rV   r[   ÚgÚbr]   r(   r(   r)   rB   ´   ó   z_PyAccess32_3.get_pixelc                 C  sH   | j | | }t|d dƒ|_t|d dƒ|_t|d dƒ|_d|_d S )Nr   r2   r   é   ©rV   r_   r[   rf   rg   r\   r`   r(   r(   r)   r:   ¸   s
   
z_PyAccess32_3.set_pixelN)r<   rE   r=   rE   r   re   ra   r(   r(   r(   r)   rd   ®   rc   rd   c                   @  rQ   )Ú_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                 O  rS   rT   rU   rW   r(   r(   r)   r%   Ä   rZ   z_PyAccess32_4._post_initr<   rE   r=   r   útuple[int, int, int, int]c                 C  s"   | j | | }|j|j|j|jfS r+   )rV   r[   rf   rg   r\   r]   r(   r(   r)   rB   Ç   s   z_PyAccess32_4.get_pixelc                 C  sR   | j | | }t|d dƒ|_t|d dƒ|_t|d dƒ|_t|d dƒ|_d S )Nr   r2   r   ri   r0   rj   r`   r(   r(   r)   r:   Ë   s
   z_PyAccess32_4.set_pixelN)r<   rE   r=   rE   r   rl   ra   r(   r(   r(   r)   rk   Á   rc   rk   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   rV   rW   r(   r(   r)   r%   ×   ó   z_PyAccess8._post_initr<   rE   r=   r   c                 C  ó   | j | | S r+   ©rV   rI   r(   r(   r)   rB   Ú   ó   z_PyAccess8.get_pixelc                 C  óH   zt |dƒ| j| |< W d S  ty#   t |d dƒ| j| |< Y d S w )Nr2   r   ©r_   rV   Ú	TypeErrorrJ   r(   r(   r)   r:   Ý   ó
   þz_PyAccess8.set_pixelN©r<   rE   r=   rE   r   rE   ra   r(   r(   r(   r)   rn   Ô   ó
    
rn   c                   @  rm   )Ú_PyAccessI16_Nz0I;16 access, native bitendian without conversionc                 O  rS   )Nzunsigned short **©r   r   r   rV   rW   r(   r(   r)   r%   é   rZ   z_PyAccessI16_N._post_initr<   rE   r=   r   c                 C  rq   r+   rr   rI   r(   r(   r)   rB   ì   rs   z_PyAccessI16_N.get_pixelc                 C  rt   )Néÿÿ  r   ru   rJ   r(   r(   r)   r:   ï   rw   z_PyAccessI16_N.set_pixelNrx   ra   r(   r(   r(   r)   rz   æ   ry   rz   c                   @  rm   )Ú_PyAccessI16_LzI;16L access, with conversionc                 O  rS   ©Nzstruct Pixel_I16 **r{   rW   r(   r(   r)   r%   û   rZ   z_PyAccessI16_L._post_initr<   rE   r=   r   c                 C  s   | j | | }|j|jd  S ©Né   ©rV   Úlr[   r]   r(   r(   r)   rB   þ   rh   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 )Nr|   r   r2   é   )rV   r_   rv   r‚   r[   r`   r(   r(   r)   r:     ó   ÿ
z_PyAccessI16_L.set_pixelNrx   ra   r(   r(   r(   r)   r}   ø   rc   r}   c                   @  rm   )Ú_PyAccessI16_BzI;16B access, with conversionc                 O  rS   r~   r{   rW   r(   r(   r)   r%     rZ   z_PyAccessI16_B._post_initr<   rE   r=   r   c                 C  s   | j | | }|jd |j S r   r   r]   r(   r(   r)   rB     rh   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 )Nr|   r   rƒ   r2   )rV   r_   Ú	Exceptionr‚   r[   r`   r(   r(   r)   r:     r„   z_PyAccessI16_B.set_pixelNrx   ra   r(   r(   r(   r)   r…     rc   r…   c                   @  rm   )Ú_PyAccessI32_Nz"Signed Int32 access, native endianc                 O  ro   r+   ©r   rV   rW   r(   r(   r)   r%   %  rp   z_PyAccessI32_N._post_initr<   rE   r=   r   c                 C  rq   r+   rr   rI   r(   r(   r)   rB   (  rs   z_PyAccessI32_N.get_pixelc                 C  s   || j | |< d S r+   rr   rJ   r(   r(   r)   r:   +  s   z_PyAccessI32_N.set_pixelNrx   ra   r(   r(   r(   r)   r‡   "  ry   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  ro   r+   rˆ   rW   r(   r(   r)   r%   2  rp   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 *r0   ri   r   r   )r   Únewr   )r&   ÚiÚorigÚcharsr(   r(   r)   Úreverse5  s   4z_PyAccessI32_Swap.reverser<   rE   r=   r   c                 C  s   |   | j| | ¡S r+   ©rŽ   rV   rI   r(   r(   r)   rB   ;  rZ   z_PyAccessI32_Swap.get_pixelc                 C  s   |   |¡| j| |< d S r+   r   rJ   r(   r(   r)   r:   >  s   z_PyAccessI32_Swap.set_pixelNrx   )rL   rM   rN   rb   r%   rŽ   rB   r:   r(   r(   r(   r)   r‰   /  s    
r‰   c                   @  rQ   )Ú
_PyAccessFz32 bit float accessc                 O  rS   )Nzfloat **rU   rW   r(   r(   r)   r%   E  rZ   z_PyAccessF._post_initr<   rE   r=   r   Úfloatc                 C  rq   r+   rr   rI   r(   r(   r)   rB   H  rs   z_PyAccessF.get_pixelc                 C  s<   z
|| j | |< W d S  ty   |d | j | |< Y d S w )Nr   )rV   rv   rJ   r(   r(   r)   r:   K  s
   þz_PyAccessF.set_pixelN)r<   rE   r=   rE   r   r‘   ra   r(   r(   r(   r)   r   B  ry   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;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   Úaccess_typer(   r(   r)   rŠ   x  s
   
rŠ   rK   )r   r   r   r   r   r¡   )%Ú
__future__r   ÚloggingÚsysÚtypingr   Ú
_deprecater   Ú__annotations__Úcffir   Údefsr   ÚcdefÚImportErrorÚexÚ_utilr   rŠ   Ú	getLoggerrL   r¤   Ú r	   r
   rR   rd   rk   rn   rz   r}   r…   r‡   r‰   r   r¢   Ú	byteorderr(   r(   r(   r)   Ú<module>   sš   €û
eÿþýüûúùø	÷
öõôóòñðï
