a
    çÝEb‡%  ã                   @   s¼  d dl Z d dlZ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[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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)ÚFFIz|
    struct Pixel_RGBA {
        unsigned char r,g,b,a;
    };
    struct Pixel_I16 {
        unsigned char l,r;
    };
    é   )Údeferred_errorc                   @   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 |jjƒ}|| _t d|d ¡| _t d|d ¡| _t d|d ¡| _|jj	\| _
| _|| _|j| _| jjdkrz|j| _|  ¡  d S )Nzunsigned char **Úimage8zint **Úimage32ÚimageÚP)ÚdictZimZunsafe_ptrsÚreadonlyÚffiÚcastr   r   r   ÚsizeÚxsizeÚysizeÚ_imgÚ_imÚmodeÚpaletteÚ_paletteÚ
_post_init)ÚselfÚimgr   Úvals© r   úL/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/PIL/PyAccess.pyÚ__init__2   s    zPyAccess.__init__c                 C   s   d S ©Nr   )r   r   r   r   r   E   s    zPyAccess._post_initc                 C   s�   | j rtdƒ‚|\}}|dk r(| j| }|dk r:| j| }|  ||f¡\}}| jjdkr‚t|tt	fƒr‚t
|ƒdv r‚| j || j¡}|  |||¡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   Ú
ValueErrorr   r   Úcheck_xyr   r   Ú
isinstanceÚlistÚtupleÚlenr   Zgetcolorr   Ú	set_pixel)r   ÚxyÚcolorÚxÚyr   r   r   Ú__setitem__H   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__e   s    

zPyAccess.__getitem__c                 C   sF   |\}}d|  kr| j k r:n nd|  kr8| jk sBn tdƒ‚|S )Nr   zpixel location out of range)r   r   r    r-   r   r   r   r!   {   s    2zPyAccess.check_xyN)F)
Ú__name__Ú
__module__Ú__qualname__r   r   r+   r.   ZputpixelZgetpixelr!   r   r   r   r   r   1   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   )r5   ÚrÚa©r   r)   r*   Úpixelr   r   r   r,   ˆ   s    z_PyAccess32_2.get_pixelc                 C   s2   | j | | }t|d dƒ|_t|d dƒ|_d S )Nr   éÿ   r   )r5   Úminr9   r:   ©r   r)   r*   r(   r<   r   r   r   r&   Œ   s    z_PyAccess32_2.set_pixelN©r/   r0   r1   Ú__doc__r   r,   r&   r   r   r   r   r2   ‚   s   r2   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 r3   r4   r6   r   r   r   r   –   s    z_PyAccess32_3._post_initc                 C   s   | j | | }|j|j|jfS r   )r5   r9   ÚgÚbr;   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   é   ©r5   r>   r9   rC   rD   r:   r?   r   r   r   r&   �   s
    z_PyAccess32_3.set_pixelNr@   r   r   r   r   rB   “   s   rB   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 r3   r4   r6   r   r   r   r   ©   s    z_PyAccess32_4._post_initc                 C   s"   | j | | }|j|j|j|jfS r   )r5   r9   rC   rD   r:   r;   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   rE   r   rF   r?   r   r   r   r&   °   s
    z_PyAccess32_4.set_pixelNr@   r   r   r   r   rG   ¦   s   rG   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   r5   r6   r   r   r   r   ¼   s    z_PyAccess8._post_initc                 C   s   | j | | S r   ©r5   ©r   r)   r*   r   r   r   r,   ¿   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   ©r>   r5   Ú	TypeError©r   r)   r*   r(   r   r   r   r&   Â   s    z_PyAccess8.set_pixelNr@   r   r   r   r   rH   ¹   s   rH   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   r5   r6   r   r   r   r   Î   s    z_PyAccessI16_N._post_initc                 C   s   | j | | S r   rI   rJ   r   r   r   r,   Ñ   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   rK   rM   r   r   r   r&   Ô   s    z_PyAccessI16_N.set_pixelNr@   r   r   r   r   rN   Ë   s   rN   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 **rO   r6   r   r   r   r   à   s    z_PyAccessI16_L._post_initc                 C   s   | j | | }|j|jd  S ©Né   ©r5   Úlr9   r;   r   r   r   r,   ã   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 )NrP   r   r=   é   )r5   r>   rL   rV   r9   r?   r   r   r   r&   ç   s    
z_PyAccessI16_L.set_pixelNr@   r   r   r   r   rQ   Ý   s   rQ   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 rR   rO   r6   r   r   r   r   õ   s    z_PyAccessI16_B._post_initc                 C   s   | j | | }|jd |j S rS   rU   r;   r   r   r   r,   ø   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 )NrP   r   rW   r=   )r5   r>   Ú	ExceptionrV   r9   r?   r   r   r   r&   ü   s    
z_PyAccessI16_B.set_pixelNr@   r   r   r   r   rX   ò   s   rX   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   r5   r6   r   r   r   r   
  s    z_PyAccessI32_N._post_initc                 C   s   | j | | S r   rI   rJ   r   r   r   r,     s    z_PyAccessI32_N.get_pixelc                 C   s   || j | |< d S r   rI   rM   r   r   r   r&     s    z_PyAccessI32_N.set_pixelNr@   r   r   r   r   rZ     s   rZ   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[   r6   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   rE   r   r   )r   Únewr   )r   ÚiÚorigÚcharsr   r   r   Úreverse  s    4z_PyAccessI32_Swap.reversec                 C   s   |   | j| | ¡S r   ©ra   r5   rJ   r   r   r   r,      s    z_PyAccessI32_Swap.get_pixelc                 C   s   |   |¡| j| |< d S r   rb   rM   r   r   r   r&   #  s    z_PyAccessI32_Swap.set_pixelN)r/   r0   r1   rA   r   ra   r,   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 **r4   r6   r   r   r   r   *  s    z_PyAccessF._post_initc                 C   s   | j | | S r   rI   rJ   r   r   r   r,   -  s    z_PyAccessF.get_pixelc                 C   s<   z|| j | |< W n$ ty6   |d | j | |< Y n0 d S )Nr   )r5   rL   rM   r   r   r   r&   0  s    z_PyAccessF.set_pixelNr@   r   r   r   r   rc   '  s   rc   )Ú1ÚLr	   ZLAZLaZPAÚ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   r]   \  s
    r]   )F)ÚloggingÚsysZcffir   Zdefsr   ZcdefÚImportErrorÚexZ_utilr   Ú	getLoggerr/   rl   r   r2   rB   rG   rH   rN   rQ   rX   rZ   r\   rc   rj   Ú	byteorderr]   r   r   r   r   Ú<module>   sd   "
Qð
