U
    Evf&                     @  s  U d dl mZ d dlZd dl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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re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 )+    )annotationsN   )	deprecatetypeFFI)r   z|
    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k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   0/tmp/pip-unpacked-wheel-ciywl2yd/PIL/PyAccess.py__init__5   s    
zPyAccess.__init__c                 C  s   d S Nr   )r   r   r   r    r   I   s    zPyAccess._post_initc                 C  s   | j rd}t||\}}|dk r,| j| }|dk r>| j| }| ||f\}}| jjdkrt|tt	frt
|dkr| jjdkrt
|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__L   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__o   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-   r0   r1   r/   r   r   r    r'      s
    2zPyAccess.check_xyN)F)
__name__
__module____qualname__r!   r   r3   r5   ZputpixelZgetpixelr'   r   r   r   r    r   4   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   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   )r<   minr@   rA   r   r0   r1   r.   rC   r   r   r    r,      s    z_PyAccess32_2.set_pixelNr6   r7   r8   __doc__r   r4   r,   r   r   r   r    r9      s   r9   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 r:   r;   r=   r   r   r    r      s    z_PyAccess32_3._post_initc                 C  s   | j | | }|j|j|jfS r"   )r<   r@   gbrB   r   r   r    r4      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<   rD   r@   rI   rJ   rA   rE   r   r   r    r,      s
    z_PyAccess32_3.set_pixelNrF   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 )	_PyAccess32_4z&RGBA etc, all 4 bytes of a 32 bit wordc                 O  s   t d| j| _d S r:   r;   r=   r   r   r    r      s    z_PyAccess32_4._post_initc                 C  s"   | j | | }|j|j|j|jfS r"   )r<   r@   rI   rJ   rA   rB   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   rK   r#   rL   rE   r   r   r    r,      s
    z_PyAccess32_4.set_pixelNrF   r   r   r   r    rM      s   rM   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   r0   r1   r   r   r    r4      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   rD   r<   	TypeErrorr   r0   r1   r.   r   r   r    r,      s    z_PyAccess8.set_pixelNrF   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_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"   rO   rP   r   r   r    r4      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   rQ   rS   r   r   r    r,      s    z_PyAccessI16_N.set_pixelNrF   r   r   r   r    rT      s   rT   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 **rU   r=   r   r   r    r      s    z_PyAccessI16_L._post_initc                 C  s   | j | | }|j|jd  S N   r<   lr@   rB   r   r   r    r4      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 )NrV   r   r%      )r<   rD   rR   r\   r@   rE   r   r   r    r,      s    
z_PyAccessI16_L.set_pixelNrF   r   r   r   r    rW      s   rW   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 rX   rU   r=   r   r   r    r      s    z_PyAccessI16_B._post_initc                 C  s   | j | | }|jd |j S rY   r[   rB   r   r   r    r4     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 )NrV   r   r]   r%   )r<   rD   	Exceptionr\   r@   rE   r   r   r    r,     s    
z_PyAccessI16_B.set_pixelNrF   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"   rO   rP   r   r   r    r4     s    z_PyAccessI32_N.get_pixelc                 C  s   || j | |< d S r"   rO   rS   r   r   r    r,     s    z_PyAccessI32_N.set_pixelNrF   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"   ra   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#   rK   r   r   )r   newr   )r   iorigcharsr   r   r    reverse%  s    4z_PyAccessI32_Swap.reversec                 C  s   |  | j| | S r"   rg   r<   rP   r   r   r    r4   +  s    z_PyAccessI32_Swap.get_pixelc                 C  s   |  || j| |< d S r"   rh   rS   r   r   r    r,   .  s    z_PyAccessI32_Swap.set_pixelN)r6   r7   r8   rG   r   rg   r4   r,   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 )	
_PyAccessFz32 bit float accessc                 O  s   t d| j| _d S )Nzfloat **r;   r=   r   r   r    r   5  s    z_PyAccessF._post_initc                 C  s   | j | | S r"   rO   rP   r   r   r    r4   8  s    z_PyAccessF.get_pixelc                 C  s>   z|| j | |< W n& tk
r8   |d | j | |< Y nX d S )Nr   )r<   rR   rS   r   r   r    r,   ;  s    z_PyAccessF.set_pixelNrF   r   r   r   r    ri   2  s   ri   )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    rc   h  s
    rc   )F)!
__future__r   loggingsysZ
_deprecater   __annotations__Zcffir   Zdefsr   ZcdefImportErrorexZ_utilr   rc   	getLoggerr6   rq   r   r9   rH   rM   rN   rT   rW   r^   r`   rb   ri   ro   	byteorderr   r   r   r    <module>   sn     
Y
