U
    M»{j[*  ã                   @  s  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k
rž Z zdd
lmZ e e¡ Z
ZW 5 dZ[X Y nX 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"eeeeeeeeeeeeeeee"e d"œZ#ej$d#k�rÆee#d$< ee#d%< ee#d&< e e#d'< e!e#d(< n(ee#d$< ee#d%< ee#d&< e!e#d'< e e#d(< d0d*d+d,d-œd.d/„ZdS )1é    )Ú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dœdd„Zddœd	d
„Zddddœdd„Zdddœdd„ZeZeZdddœdd„Z	ddddœdd„Z
dddddœdd„ZdS ) ÚPyAccessFúImage.ImageÚboolÚNone©ÚimgÚreadonlyÚreturnc                 C  s�   t ddƒ t|jjƒ}|| _t d|d ¡| _t d|d ¡| _t d|d ¡| _	|jj
\| _| _|| _|j| _| jjdkr„|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'   úK/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/PyAccess.pyÚ__init__9   s    
zPyAccess.__init__)r   c                 C  s   d S ©Nr'   )r%   r'   r'   r(   r$   M   s    zPyAccess._post_initztuple[int, int] | list[int]z#float | tuple[int, ...] | list[int])ÚxyÚcolorr   c                 C  sÜ   | j rd}t|ƒ‚|\}}|dk r,| j| }|dk r>| j| }|  ||f¡\}}| jjdkrÎt|tt	fƒrÎt
|ƒdkrÎ| jjdkr¦t
|ƒdkr–|d nd}|d	d… }| j || j¡}| jjdkrÊ||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__zfloat | tuple[int, ...])r+   r   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   r1   Ú	get_pixel)r%   r+   r8   r9   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r8| jk sFn d}t|ƒ‚|S )Nr   zpixel location out of range)r   r   r0   )r%   r+   r8   r9   r7   r'   r'   r(   r1   �   s
    2zPyAccess.check_xyÚint©r8   r9   r   c                 C  s
   t ƒ ‚d S r*   ©ÚNotImplementedError©r%   r8   r9   r'   r'   r(   r<   ”   s    zPyAccess.get_pixel)r8   r9   r,   r   c                 C  s
   t ƒ ‚d S r*   rA   ©r%   r8   r9   r,   r'   r'   r(   r6   —   s    zPyAccess.set_pixelN)F)Ú__name__Ú
__module__Ú__qualname__r)   r$   r;   r=   ZputpixelZgetpixelr1   r<   r6   r'   r'   r'   r(   r
   8   s   'r
   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zd	d
„ ZdS )Ú_PyAccess32_2z7PA, LA, stored in first and last bytes of a 32 bit wordc                 O  s   t  d| j¡| _d S ©Nzstruct Pixel_RGBA **©r   r   r   Úpixels©r%   ÚargsÚkwargsr'   r'   r(   r$       s    z_PyAccess32_2._post_initr?   r>   r@   c                 C  s   | j | | }|j|jfS r*   )rK   ÚrÚa©r%   r8   r9   Úpixelr'   r'   r(   r<   £   s    z_PyAccess32_2.get_pixelc                 C  s2   | j | | }t|d dƒ|_t|d dƒ|_d S )Nr   r/   r   )rK   ÚminrO   rP   ©r%   r8   r9   r,   rR   r'   r'   r(   r6   §   s    z_PyAccess32_2.set_pixelN©rE   rF   rG   Ú__doc__r$   r<   r6   r'   r'   r'   r(   rH   �   s   rH   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zd	d
„ ZdS )Ú_PyAccess32_3zARGB and friends, stored in the first three bytes of a 32 bit wordc                 O  s   t  d| j¡| _d S rI   rJ   rL   r'   r'   r(   r$   ±   s    z_PyAccess32_3._post_initr?   ztuple[int, int, int]r@   c                 C  s   | j | | }|j|j|jfS r*   )rK   rO   ÚgÚbrQ   r'   r'   r(   r<   ´   s    z_PyAccess32_3.get_pixelc                 C  sH   | j | | }t|d dƒ|_t|d dƒ|_t|d dƒ|_d|_d S )Nr   r/   r   é   ©rK   rS   rO   rX   rY   rP   rT   r'   r'   r(   r6   ¸   s
    z_PyAccess32_3.set_pixelNrU   r'   r'   r'   r(   rW   ®   s   rW   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zd	d
„ ZdS )Ú_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                 O  s   t  d| j¡| _d S rI   rJ   rL   r'   r'   r(   r$   Ä   s    z_PyAccess32_4._post_initr?   ztuple[int, int, int, int]r@   c                 C  s"   | j | | }|j|j|j|jfS r*   )rK   rO   rX   rY   rP   rQ   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   r/   r   rZ   r-   r[   rT   r'   r'   r(   r6   Ë   s
    z_PyAccess32_4.set_pixelNrU   r'   r'   r'   r(   r\   Á   s   r\   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zdd	„ Zd
S )Ú
_PyAccess8z%1, L, P, 8 bit images stored as uint8c                 O  s   | j | _d S r*   )r   rK   rL   r'   r'   r(   r$   ×   s    z_PyAccess8._post_initr?   r@   c                 C  s   | j | | S r*   ©rK   rC   r'   r'   r(   r<   Ú   s    z_PyAccess8.get_pixelc                 C  sJ   zt |dƒ| j| |< W n, tk
rD   t |d dƒ| j| |< Y nX d S )Nr/   r   ©rS   rK   Ú	TypeErrorrD   r'   r'   r(   r6   Ý   s    z_PyAccess8.set_pixelNrU   r'   r'   r'   r(   r]   Ô   s   r]   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zdd	„ Zd
S )Ú_PyAccessI16_Nz0I;16 access, native bitendian without conversionc                 O  s   t  d| j¡| _d S )Nzunsigned short **©r   r   r   rK   rL   r'   r'   r(   r$   é   s    z_PyAccessI16_N._post_initr?   r@   c                 C  s   | j | | S r*   r^   rC   r'   r'   r(   r<   ì   s    z_PyAccessI16_N.get_pixelc                 C  sJ   zt |dƒ| j| |< W n, tk
rD   t |d dƒ| j| |< Y nX d S )Néÿÿ  r   r_   rD   r'   r'   r(   r6   ï   s    z_PyAccessI16_N.set_pixelNrU   r'   r'   r'   r(   ra   æ   s   ra   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zdd	„ Zd
S )Ú_PyAccessI16_LzI;16L access, with conversionc                 O  s   t  d| j¡| _d S ©Nzstruct Pixel_I16 **rb   rL   r'   r'   r(   r$   û   s    z_PyAccessI16_L._post_initr?   r@   c                 C  s   | j | | }|j|jd  S ©Né   ©rK   ÚlrO   rQ   r'   r'   r(   r<   þ   s    z_PyAccessI16_L.get_pixelc                 C  sX   | j | | }zt|dƒ}W n" tk
r>   t|d dƒ}Y nX |d@ |_|d? |_d S )Nrc   r   r/   é   )rK   rS   r`   ri   rO   rT   r'   r'   r(   r6     s    
z_PyAccessI16_L.set_pixelNrU   r'   r'   r'   r(   rd   ø   s   rd   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zdd	„ Zd
S )Ú_PyAccessI16_BzI;16B access, with conversionc                 O  s   t  d| j¡| _d S re   rb   rL   r'   r'   r(   r$     s    z_PyAccessI16_B._post_initr?   r@   c                 C  s   | j | | }|jd |j S rf   rh   rQ   r'   r'   r(   r<     s    z_PyAccessI16_B.get_pixelc                 C  sX   | j | | }zt|dƒ}W n" tk
r>   t|d dƒ}Y nX |d? |_|d@ |_d S )Nrc   r   rj   r/   )rK   rS   Ú	Exceptionri   rO   rT   r'   r'   r(   r6     s    
z_PyAccessI16_B.set_pixelNrU   r'   r'   r'   r(   rk     s   rk   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zdd	„ Zd
S )Ú_PyAccessI32_Nz"Signed Int32 access, native endianc                 O  s   | j | _d S r*   ©r   rK   rL   r'   r'   r(   r$   %  s    z_PyAccessI32_N._post_initr?   r@   c                 C  s   | j | | S r*   r^   rC   r'   r'   r(   r<   (  s    z_PyAccessI32_N.get_pixelc                 C  s   || j | |< d S r*   r^   rD   r'   r'   r(   r6   +  s    z_PyAccessI32_N.set_pixelNrU   r'   r'   r'   r(   rm   "  s   rm   c                   @  s:   e Zd ZdZdd„ Zdd„ Zddddœdd	„Zd
d„ ZdS )Ú_PyAccessI32_Swapz,I;32L/B access, with byteswapping conversionc                 O  s   | j | _d S r*   rn   rL   r'   r'   r(   r$   2  s    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-   rZ   r   r   )r   Únewr   )r%   ÚiÚorigÚcharsr'   r'   r(   Úreverse5  s    4z_PyAccessI32_Swap.reverser?   r@   c                 C  s   |   | j| | ¡S r*   ©rt   rK   rC   r'   r'   r(   r<   ;  s    z_PyAccessI32_Swap.get_pixelc                 C  s   |   |¡| j| |< d S r*   ru   rD   r'   r'   r(   r6   >  s    z_PyAccessI32_Swap.set_pixelN)rE   rF   rG   rV   r$   rt   r<   r6   r'   r'   r'   r(   ro   /  s
   ro   c                   @  s2   e Zd ZdZdd„ Zddddœdd„Zd	d
„ ZdS )Ú
_PyAccessFz32 bit float accessc                 O  s   t  d| j¡| _d S )Nzfloat **rJ   rL   r'   r'   r(   r$   E  s    z_PyAccessF._post_initr?   Úfloatr@   c                 C  s   | j | | S r*   r^   rC   r'   r'   r(   r<   H  s    z_PyAccessF.get_pixelc                 C  s>   z|| j | |< W n& tk
r8   |d | j | |< Y nX d S )Nr   )rK   r`   rD   r'   r'   r(   r6   K  s    z_PyAccessF.set_pixelNrU   r'   r'   r'   r(   rv   B  s   rv   )Ú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   zPyAccess | Noner   c                 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(   rp   x  s
    rp   )F)%Ú
__future__r   ÚloggingÚsysÚtypingr   Z
_deprecater   Ú__annotations__Zcffir   Zdefsr   ZcdefÚImportErrorÚexZ_utilr   rp   Ú	getLoggerrE   r€   Ú r	   r
   rH   rW   r\   r]   ra   rd   rk   rm   ro   rv   r~   Ú	byteorderr'   r'   r'   r(   Ú<module>   st     
eï
