a
    ¦¾deª&  ã                   @   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
[
0 0 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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#< d'd%d&„ZdS )(é    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 r„|j| _|  ¡  d S )	Nr   é   zunsigned char **Úimage8zint **Úimage32Úimage©ÚPÚPA)r   ÚdictZimZunsafe_ptrsÚreadonlyÚffiÚcastr   r	   r
   ÚsizeÚxsizeÚysizeÚ_imgÚ_imÚmodeZpaletteÚ_paletteÚ
_post_init)ÚselfÚimgr   Úvals© r   úE/var/www/sistema_ama/venv/lib/python3.9/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 rÊt|tt	fƒrÊt
|ƒdv rÊ| jjdkr¦t
|ƒdkr–|d nd}|d	d… }| j || j¡}| jjdkrÊ||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   Z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+   r.   r/   r   r   r   Ú__getitem__m   s    

zPyAccess.__getitem__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   r$   )r   r+   r.   r/   r-   r   r   r   r%   ƒ   s
    2zPyAccess.check_xyN)F)
Ú__name__Ú
__module__Ú__qualname__r   r   r1   r3   ZputpixelZgetpixelr%   r   r   r   r   r   2   s   
#r   c                   @   s(   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   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_initc                 C   s   | j | | }|j|jfS r    )r:   ÚrÚa©r   r.   r/   Úpixelr   r   r   r2   ‘   s    z_PyAccess32_2.get_pixelc                 C   s2   | j | | }t|d dƒ|_t|d dƒ|_d S )Nr   r#   r   )r:   Úminr>   r?   ©r   r.   r/   r,   rA   r   r   r   r*   •   s    z_PyAccess32_2.set_pixelN©r4   r5   r6   Ú__doc__r   r2   r*   r   r   r   r   r7   ‹   s   r7   c                   @   s(   e Zd ZdZdd„ Z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 r8   r9   r;   r   r   r   r   Ÿ   s    z_PyAccess32_3._post_initc                 C   s   | j | | }|j|j|jfS r    )r:   r>   ÚgÚbr@   r   r   r   r2   ¢   s    z_PyAccess32_3.get_pixelc                 C   sH   | j | | }t|d dƒ|_t|d dƒ|_t|d dƒ|_d|_d S )Nr   r#   r   é   ©r:   rB   r>   rG   rH   r?   rC   r   r   r   r*   ¦   s
    z_PyAccess32_3.set_pixelNrD   r   r   r   r   rF   œ   s   rF   c                   @   s(   e Zd ZdZdd„ Z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 r8   r9   r;   r   r   r   r   ²   s    z_PyAccess32_4._post_initc                 C   s"   | j | | }|j|j|j|jfS r    )r:   r>   rG   rH   r?   r@   r   r   r   r2   µ   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   rI   r!   rJ   rC   r   r   r   r*   ¹   s
    z_PyAccess32_4.set_pixelNrD   r   r   r   r   rK   ¯   s   rK   c                   @   s(   e Zd ZdZdd„ Z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   r:   r;   r   r   r   r   Å   s    z_PyAccess8._post_initc                 C   s   | j | | S r    ©r:   ©r   r.   r/   r   r   r   r2   È   s    z_PyAccess8.get_pixelc                 C   sH   zt |dƒ| j| |< W n* tyB   t |d dƒ| j| |< Y n0 d S )Nr#   r   ©rB   r:   Ú	TypeError©r   r.   r/   r,   r   r   r   r*   Ë   s    z_PyAccess8.set_pixelNrD   r   r   r   r   rL   Â   s   rL   c                   @   s(   e Zd ZdZdd„ Z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
   r:   r;   r   r   r   r   ×   s    z_PyAccessI16_N._post_initc                 C   s   | j | | S r    rM   rN   r   r   r   r2   Ú   s    z_PyAccessI16_N.get_pixelc                 C   sH   zt |dƒ| j| |< W n* tyB   t |d dƒ| j| |< Y n0 d S )Néÿÿ  r   rO   rQ   r   r   r   r*   Ý   s    z_PyAccessI16_N.set_pixelNrD   r   r   r   r   rR   Ô   s   rR   c                   @   s(   e Zd ZdZdd„ Z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 **rS   r;   r   r   r   r   é   s    z_PyAccessI16_L._post_initc                 C   s   | j | | }|j|jd  S ©Né   ©r:   Úlr>   r@   r   r   r   r2   ì   s    z_PyAccessI16_L.get_pixelc                 C   sV   | j | | }zt|dƒ}W n  ty<   t|d dƒ}Y n0 |d@ |_|d? |_d S )NrT   r   r#   é   )r:   rB   rP   rZ   r>   rC   r   r   r   r*   ð   s    
z_PyAccessI16_L.set_pixelNrD   r   r   r   r   rU   æ   s   rU   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú_PyAccessI16_BzI;16B access, with conversionc                 O   s   t  d| j¡| _d S rV   rS   r;   r   r   r   r   þ   s    z_PyAccessI16_B._post_initc                 C   s   | j | | }|jd |j S rW   rY   r@   r   r   r   r2     s    z_PyAccessI16_B.get_pixelc                 C   sV   | j | | }zt|dƒ}W n  ty<   t|d dƒ}Y n0 |d? |_|d@ |_d S )NrT   r   r[   r#   )r:   rB   Ú	ExceptionrZ   r>   rC   r   r   r   r*     s    
z_PyAccessI16_B.set_pixelNrD   r   r   r   r   r\   û   s   r\   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú_PyAccessI32_Nz"Signed Int32 access, native endianc                 O   s   | j | _d S r    ©r	   r:   r;   r   r   r   r     s    z_PyAccessI32_N._post_initc                 C   s   | j | | S r    rM   rN   r   r   r   r2     s    z_PyAccessI32_N.get_pixelc                 C   s   || j | |< d S r    rM   rQ   r   r   r   r*     s    z_PyAccessI32_N.set_pixelNrD   r   r   r   r   r^     s   r^   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   s   | j | _d S r    r_   r;   r   r   r   r      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!   rI   r   r   )r   Únewr   )r   ÚiÚorigÚcharsr   r   r   Úreverse#  s    4z_PyAccessI32_Swap.reversec                 C   s   |   | j| | ¡S r    ©re   r:   rN   r   r   r   r2   )  s    z_PyAccessI32_Swap.get_pixelc                 C   s   |   |¡| j| |< d S r    rf   rQ   r   r   r   r*   ,  s    z_PyAccessI32_Swap.set_pixelN)r4   r5   r6   rE   r   re   r2   r*   r   r   r   r   r`     s
   r`   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú
_PyAccessFz32 bit float accessc                 O   s   t  d| j¡| _d S )Nzfloat **r9   r;   r   r   r   r   3  s    z_PyAccessF._post_initc                 C   s   | j | | S r    rM   rN   r   r   r   r2   6  s    z_PyAccessF.get_pixelc                 C   s<   z|| j | |< W n$ ty6   |d | j | |< Y n0 d S )Nr   )r:   rP   rQ   r   r   r   r*   9  s    z_PyAccessF.set_pixelNrD   r   r   r   r   rg   0  s   rg   )Ú1ÚLr   zI;16NZLAZLar   ZRGBZLABZHSVZYCbCrZRGBAZRGBaZRGBXZ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   Zaccess_typer   r   r   ra   f  s
    ra   )F)ÚloggingÚsysZ
_deprecater   Zcffir   Zdefsr   ZcdefÚImportErrorÚexZ_utilr   Ú	getLoggerr4   ro   r   r7   rF   rK   rL   rR   rU   r\   r^   r`   rg   rm   Ú	byteorderra   r   r   r   r   Ú<module>   sh   "
Yï
