U
    ڲg-                  	   @  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d!d"d#d$g 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   6/tmp/pip-unpacked-wheel-xela2va7/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 k	std}| j |}t|s2d}t||d }|d }t|d}t|d}t|d}t|d}	|||	f}
d	}zt|
 }W n tk
r   Y nX |d	krd
}t|||f| _|	dd | _
| jdkrd| _d}|dkr^|| | }|dkrdd| j || jd|ffg| _n@g | _|}| jD ].}| jdd| j ||d|ff ||7 }q,n&|dkrdd| j ||||f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AssertionErrorreadr   
ValueErrorr   MODESKeyError_sizesplit_modemodeZcustom_mimetypesizeZtileappend)selfZheadlensmsgcompressionbpcZ	dimensionxsizeysizezsizeZlayoutrawmodeorientationpagesizeoffsetZlayerr   r   r   _open8   sR    










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krd}t|| j}|dd}|dkr<d}t|d}d}d	}d
}	| j\}
}| j dkrn|dkrnd}	n| j dkr|d}	t| j }|	dkrd}t|  |krd| dt|   }t|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rd}|  D ]}||d|d	| q
t|dr<|  d S )N>   r   r   r   r!   r6   r   )r   r   z%Unsupported number of bytes per pixelr#   r   r   r   r   r   >   r   r   z(incorrect number of bands in SGI write: z vs    asciiignorez>hz>Hz>lZ4s    Z79sr3   Z404sr   r%   flush)r/   r)   Zencoderinfogetr0   r   Zgetbandsospathsplitextbasename
isinstancestrencodewritestructpackr   r-   tobyteshasattrrJ   )rD   r&   rE   r4   infor6   r;   Zmagic_numberZrleZdimxyzZpinminZpinmaxZimg_nameZcolormapr:   channelr   r   r   _save   sd    





r]   c                   @  s    e Zd ZdZdddddZdS )SGI16DecoderTr	   ztuple[int, int])bufferr   c           	      C  s   | j d k	st| jd k	st| 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   )fdr'   rD   argsstater7   r8   r   r/   seekranger   newZ	frombytesr(   Zputband)	r2   r_   r:   Zstrider;   r<   r9   Zbandr\   r   r   r   decode   s"    
    zSGI16Decoder.decodeN)r?   r@   rA   Z	_pulls_fdrf   r   r   r   r   r^      s   r^   r$   z	image/sgiz.bwz.rgbz.rgbaz.sgi)
__future__r   rL   rT   typingr   r    r   r   _binaryr   r   r   r   r*   r   r]   Z	PyDecoderr^   Zregister_decoderZregister_openrB   Zregister_saveZregister_mimeZregister_extensionsr   r   r   r   <module>   s0   LM