a
    h                  	   @  s   d dl mZ d dlZd dlZd dlmZ ddlmZmZ ddl	m
Z ddl	mZ dd	d
ddZdddddddddZG dd dejZdddddddZG dd dejZede eejee eeje eejd  eejg d! dS )"    )annotationsN)IO   )Image	ImageFile)i16be)o8bytesbool)prefixreturnc                 C  s   t | dkot| dkS )N     )leni16)r    r   @/var/www/auris/lib/python3.9/site-packages/PIL/SgiImagePlugin.py_accept"   s    r   LL;16BRGBzRGB;16BRGBAzRGBA;16B))r   r   r   )r   r   r   )r   r   r   )r   r   r   )r      r   )r   r   r   )r   r      )r   r   r   c                   @  s"   e Zd ZdZdZddddZdS )SgiImageFileZSGIzSGI Image File FormatNone)r   c                 C  s  | j d usJ d}| j |}t|s2d}t||d }|d }t|d}t|d}t|d}t|d}	zt|||	f }
W n ty   d	}t|Y n0 ||f| _|
d
d | _	| j
dkrd| _d}|dkrT|| | }|dkrtdd| j || j
d|fg| _nDg | _|}| j
D ]2}| jtdd| j ||d|f ||7 }qn*|dkr~tdd| j ||
||fg| _d S )N   zNot an SGI image filer   r   r         
   Unsupported SGI image mode;r   r   z	image/rgbSGI16)r   r   rawr   Zsgi_rle)fpreadr   
ValueErrorr   MODESKeyError_sizesplit_modemodeZcustom_mimetyper   Z_TilesizeZtileappend)selfZheadlensmsgcompressionbpc	dimensionxsizeysizezsizerawmodeorientationpagesizeoffsetZlayerr   r   r   _open8   s\    








	

zSgiImageFile._openN)__name__
__module____qualname__formatformat_descriptionr=   r   r   r   r   r   4   s   r   zImage.Imagez	IO[bytes]zstr | bytesr   )imr%   filenamer   c              	   C  s  | j dvrd}t|| j}|dd}|dvr<d}t|d}d}d	}| j\}	}
t| j }| j d
krx|
dkrrdnd}nd}d	}d}tjtj	|d	 }t
|tr|dd}d	}|td| |t| |t| |td| |td|	 |td|
 |td| |td| |td| |tdd |td| |tdd |td| |tdd d
}|dkrd}|  D ]}||d|d	| qt|dr|  d S )N>   r   r   r   r    r4   r   )r   r   z%Unsupported number of bytes per pixelr"   r   r   r   r   r      asciiignorez>hz>Hz>lZ4s    Z79sr1   Z404sr   r$   flush)r-   r'   Zencoderinfogetr.   r   ospathsplitextbasename
isinstancestrencodewritestructpackr   r+   tobyteshasattrrI   )rC   r%   rD   r2   infor4   r:   Zmagic_numberZrlexyzr5   ZpinminZpinmaxZimg_nameZcolormapr9   channelr   r   r   _save   sV    





r\   c                   @  s    e Zd ZdZdddddZdS )SGI16DecoderTz$bytes | Image.SupportsArrayInterfaceztuple[int, int])bufferr   c           	      C  s   | j d usJ | jd usJ | j\}}}| jj| jj }t| j}| j d t	|D ]J}t
d| jj| jjf}|| j d| dd|| | j|j| qVdS )Nr   r   r   r$   r   )r"   r   )fdrC   argsstater6   r7   r   r-   seekranger   new	frombytesr&   Zputband)	r0   r^   r9   Zstrider:   r;   r8   Zbandr[   r   r   r   decode   s    
zSGI16Decoder.decodeN)r>   r?   r@   Z	_pulls_fdrf   r   r   r   r   r]      s   r]   r#   z	image/sgi)z.bwz.rgbz.rgbaz.sgi)
__future__r   rK   rS   typingr    r   r   _binaryr   r   r   r   r(   r   r\   Z	PyDecoderr]   Zregister_decoderZregister_openrA   Zregister_saveZregister_mimeZregister_extensionsr   r   r   r   <module>   s0   ND