a
    ׶a%                     @   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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 )'    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modeZpalette_palette
_post_init)selfimgr   vals r   \/Users/vegardjervell/Documents/master/model/venv/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rt|tt	frt
|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   )r4   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   )r4   minr8   r9   r   r(   r)   r'   r;   r   r   r   r%      s    z_PyAccess32_2.set_pixelNr.   r/   r0   __doc__r   r+   r%   r   r   r   r   r1      s   r1   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 r2   r3   r5   r   r   r   r      s    z_PyAccess32_3._post_initc                 C   s   | j | | }|j|j|jfS r   )r4   r8   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      r4   r=   r8   rB   rC   r9   r>   r   r   r   r%      s
    z_PyAccess32_3.set_pixelNr?   r   r   r   r   rA      s   rA   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 r2   r3   r5   r   r   r   r      s    z_PyAccess32_4._post_initc                 C   s"   | j | | }|j|j|j|jfS r   )r4   r8   rB   rC   r9   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   rD   r   rE   r>   r   r   r   r%      s
    z_PyAccess32_4.set_pixelNr?   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 )	
_PyAccess8z%1, L, P, 8 bit images stored as uint8c                 O   s   | j | _d S r   )r   r4   r5   r   r   r   r      s    z_PyAccess8._post_initc                 C   s   | j | | S r   r4   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=   r4   	TypeErrorr   r(   r)   r'   r   r   r   r%      s    z_PyAccess8.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 )	_PyAccessI16_Nz0I;16 access, native bitendian without conversionc                 O   s   t d| j| _d S )Nzunsigned short **r   r   r   r4   r5   r   r   r   r      s    z_PyAccessI16_N._post_initc                 C   s   | j | | S r   rH   rI   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   rJ   rL   r   r   r   r%      s    z_PyAccessI16_N.set_pixelNr?   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 )	_PyAccessI16_LzI;16L access, with conversionc                 O   s   t d| j| _d S Nzstruct Pixel_I16 **rN   r5   r   r   r   r      s    z_PyAccessI16_L._post_initc                 C   s   | j | | }|j|jd  S N   r4   lr8   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 )NrO   r   r<      )r4   r=   rK   rU   r8   r>   r   r   r   r%      s    
z_PyAccessI16_L.set_pixelNr?   r   r   r   r   rP      s   rP   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 rQ   rN   r5   r   r   r   r      s    z_PyAccessI16_B._post_initc                 C   s   | j | | }|jd |j S rR   rT   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 )NrO   r   rV   r<   )r4   r=   	ExceptionrU   r8   r>   r   r   r   r%      s    
z_PyAccessI16_B.set_pixelNr?   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 )	_PyAccessI32_Nz"Signed Int32 access, native endianc                 O   s   | j | _d S r   r   r4   r5   r   r   r   r   
  s    z_PyAccessI32_N._post_initc                 C   s   | j | | S r   rH   rI   r   r   r   r+     s    z_PyAccessI32_N.get_pixelc                 C   s   || j | |< d S r   rH   rL   r   r   r   r%     s    z_PyAccessI32_N.set_pixelNr?   r   r   r   r   rY     s   rY   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   rZ   r5   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   rD   r   r   )r   newr   )r   iorigcharsr   r   r   reverse  s    4z_PyAccessI32_Swap.reversec                 C   s   |  | j| | S r   r`   r4   rI   r   r   r   r+      s    z_PyAccessI32_Swap.get_pixelc                 C   s   |  || j| |< d S r   ra   rL   r   r   r   r%   #  s    z_PyAccessI32_Swap.set_pixelN)r.   r/   r0   r@   r   r`   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 **r3   r5   r   r   r   r   *  s    z_PyAccessF._post_initc                 C   s   | j | | S r   rH   rI   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   )r4   rK   rL   r   r   r   r%   0  s    z_PyAccessF.set_pixelNr?   r   r   r   r   rb   '  s   rb   )1Lr	   ZLAZLaZPAZ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.   rj   r   r1   rA   rF   rG   rM   rP   rW   rY   r[   rb   rh   	byteorderr\   r   r   r   r   <module>   sd   "
Q
