o
    ø'Ëhe&  ã                
   @   sþ  d dl Z d dlZzd dlmZ dZeƒ Ze e¡ W n ey8 Z zddl	m
Z
 e
eƒ ZZW Y dZ[ndZ[ww 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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“d*e“d+e“d,e“Zejd-kräeed.< eed/< eed0< eed1< eed2< need.< eed/< eed0< eed1< eed2< d6d4d5„ZdS )7é    N)Ú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 |jjƒ}|| _t d|d ¡| _t d|d ¡| _t d|d ¡| _|jj	\| _
| _|| _|j| _| jjdv r=|j| _|  ¡  d S )Nzunsigned char **Úimage8zint **Úimage32Úimage©ÚPÚPA)ÚdictÚimÚunsafe_ptrsÚreadonlyÚffiÚcastr   r   r   ÚsizeÚxsizeÚysizeÚ_imgÚ_imÚmodeÚpaletteÚ_paletteÚ
_post_init)ÚselfÚimgr   Úvals© r   úG/var/www/html/scripts/venv/lib/python3.10/site-packages/PIL/PyAccess.pyÚ__init__1   s   zPyAccess.__init__c                 C   s   d S ©Nr   )r   r   r   r   r   D   s   zPyAccess._post_initc                 C   sØ   | j r	d}t|ƒ‚|\}}|dk r| j| }|dk r| j| }|  ||f¡\}}| jjdv ret|tt	fƒret
|ƒdv re| jjdkrSt
|ƒdkrK|d nd}|d	d… }| j || j¡}| jjdkre||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   Úgetcolorr   Ú	set_pixel)r   ÚxyÚcolorÚmsgÚxÚyÚalphar   r   r   Ú__setitem__G   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-   r0   r1   r   r   r   Ú__getitem__j   s   

zPyAccess.__getitem__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   r%   )r   r-   r0   r1   r/   r   r   r   r&   €   s
   2zPyAccess.check_xyN©F)
Ú__name__Ú
__module__Ú__qualname__r    r   r3   r5   ÚputpixelÚgetpixelr&   r   r   r   r   r   0   s    
#r   c                   @   ó(   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   ó   t  d| j¡| _d S ©Nzstruct Pixel_RGBA **©r   r   r   Úpixels©r   ÚargsÚkwargsr   r   r   r   ‹   ó   z_PyAccess32_2._post_initc                 C   s   | j | | }|j|jfS r!   )rA   ÚrÚa©r   r0   r1   Úpixelr   r   r   r4   Ž   s   z_PyAccess32_2.get_pixelc                 C   s2   | j | | }t|d dƒ|_t|d dƒ|_d S )Nr   r$   r   )rA   ÚminrF   rG   ©r   r0   r1   r.   rI   r   r   r   r,   ’   s   z_PyAccess32_2.set_pixelN©r7   r8   r9   Ú__doc__r   r4   r,   r   r   r   r   r=   ˆ   ó
    r=   c                   @   r<   )	Ú_PyAccess32_3zARGB and friends, stored in the first three bytes of a 32 bit wordc                 O   r>   r?   r@   rB   r   r   r   r   œ   rE   z_PyAccess32_3._post_initc                 C   s   | j | | }|j|j|jfS r!   )rA   rF   ÚgÚbrH   r   r   r   r4   Ÿ   ó   z_PyAccess32_3.get_pixelc                 C   sH   | j | | }t|d dƒ|_t|d dƒ|_t|d dƒ|_d|_d S )Nr   r$   r   é   ©rA   rJ   rF   rP   rQ   rG   rK   r   r   r   r,   £   s
   
z_PyAccess32_3.set_pixelNrL   r   r   r   r   rO   ™   rN   rO   c                   @   r<   )	Ú_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                 O   r>   r?   r@   rB   r   r   r   r   ¯   rE   z_PyAccess32_4._post_initc                 C   s"   | j | | }|j|j|j|jfS r!   )rA   rF   rP   rQ   rG   rH   r   r   r   r4   ²   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   rS   r"   rT   rK   r   r   r   r,   ¶   s
   z_PyAccess32_4.set_pixelNrL   r   r   r   r   rU   ¬   rN   rU   c                   @   r<   )	Ú
_PyAccess8z%1, L, P, 8 bit images stored as uint8c                 O   ó   | j | _d S r!   )r   rA   rB   r   r   r   r   Â   ó   z_PyAccess8._post_initc                 C   ó   | j | | S r!   ©rA   ©r   r0   r1   r   r   r   r4   Å   ó   z_PyAccess8.get_pixelc                 C   óH   zt |dƒ| j| |< W d S  ty#   t |d dƒ| j| |< Y d S w )Nr$   r   ©rJ   rA   Ú	TypeError©r   r0   r1   r.   r   r   r   r,   È   ó
   þz_PyAccess8.set_pixelNrL   r   r   r   r   rV   ¿   ó
    rV   c                   @   r<   )	Ú_PyAccessI16_Nz0I;16 access, native bitendian without conversionc                 O   r>   )Nzunsigned short **©r   r   r   rA   rB   r   r   r   r   Ô   rE   z_PyAccessI16_N._post_initc                 C   rY   r!   rZ   r[   r   r   r   r4   ×   r\   z_PyAccessI16_N.get_pixelc                 C   r]   )Néÿÿ  r   r^   r`   r   r   r   r,   Ú   ra   z_PyAccessI16_N.set_pixelNrL   r   r   r   r   rc   Ñ   rb   rc   c                   @   r<   )	Ú_PyAccessI16_LzI;16L access, with conversionc                 O   r>   ©Nzstruct Pixel_I16 **rd   rB   r   r   r   r   æ   rE   z_PyAccessI16_L._post_initc                 C   s   | j | | }|j|jd  S ©Né   ©rA   ÚlrF   rH   r   r   r   r4   é   rR   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 )Nre   r   r$   é   )rA   rJ   r_   rk   rF   rK   r   r   r   r,   í   ó   ÿ
z_PyAccessI16_L.set_pixelNrL   r   r   r   r   rf   ã   rN   rf   c                   @   r<   )	Ú_PyAccessI16_BzI;16B access, with conversionc                 O   r>   rg   rd   rB   r   r   r   r   û   rE   z_PyAccessI16_B._post_initc                 C   s   | j | | }|jd |j S rh   rj   rH   r   r   r   r4   þ   rR   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 )Nre   r   rl   r$   )rA   rJ   Ú	Exceptionrk   rF   rK   r   r   r   r,     rm   z_PyAccessI16_B.set_pixelNrL   r   r   r   r   rn   ø   rN   rn   c                   @   r<   )	Ú_PyAccessI32_Nz"Signed Int32 access, native endianc                 O   rW   r!   ©r   rA   rB   r   r   r   r     rX   z_PyAccessI32_N._post_initc                 C   rY   r!   rZ   r[   r   r   r   r4     r\   z_PyAccessI32_N.get_pixelc                 C   s   || j | |< d S r!   rZ   r`   r   r   r   r,     s   z_PyAccessI32_N.set_pixelNrL   r   r   r   r   rp     rb   rp   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   rW   r!   rq   rB   r   r   r   r     rX   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"   rS   r   r   )r   Únewr   )r   ÚiÚorigÚcharsr   r   r   Úreverse   s   4z_PyAccessI32_Swap.reversec                 C   s   |   | j| | ¡S r!   ©rw   rA   r[   r   r   r   r4   &  rE   z_PyAccessI32_Swap.get_pixelc                 C   s   |   |¡| j| |< d S r!   rx   r`   r   r   r   r,   )  s   z_PyAccessI32_Swap.set_pixelN)r7   r8   r9   rM   r   rw   r4   r,   r   r   r   r   rr     s    rr   c                   @   r<   )	Ú
_PyAccessFz32 bit float accessc                 O   r>   )Nzfloat **r@   rB   r   r   r   r   0  rE   z_PyAccessF._post_initc                 C   rY   r!   rZ   r[   r   r   r   r4   3  r\   z_PyAccessF.get_pixelc                 C   s<   z
|| j | |< W d S  ty   |d | j | |< Y d S w )Nr   )rA   r_   r`   r   r   r   r,   6  s
   þz_PyAccessF.set_pixelNrL   r   r   r   r   ry   -  rb   ry   Ú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;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   Úaccess_typer   r   r   rs   c  s
   
rs   r6   )ÚloggingÚsysÚcffir   Údefsr   ÚcdefÚImportErrorÚexÚ_utilr   Ú	getLoggerr7   r‹   r   r=   rO   rU   rV   rc   rf   rn   rp   rr   ry   r‰   Ú	byteorderrs   r   r   r   r   Ú<module>   sŽ   €û
Xÿþýüûúùø	÷
öõôóòñðï

