U
    ?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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   D/var/www/html/venv/lib/python3.8/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 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bpc	dimensionxsizeysizezsizeZlayoutrawmodeorientationpagesizeoffset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hasattrrL   )rF   r&   rG   r4   infor6   r<   Zmagic_numberZrle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'   rF   argsstater8   r9   r   r/   seekranger   new	frombytesr(   Zputband)	r2   rb   r;   Zstrider<   r=   r:   Zbandr_   r   r   r   decode   s"    
    zSGI16Decoder.decodeN)rA   rB   rC   Z	_pulls_fdrj   r   r   r   r   ra      s   ra   r$   z	image/sgiz.bwz.rgbz.rgbaz.sgi)
__future__r   rN   rV   typingr   r    r   r   _binaryr   r   r   r   r*   r   r`   Z	PyDecoderra   Zregister_decoderZregister_openrD   Zregister_saveZregister_mimeZregister_extensionsr   r   r   r   <module>   s0   LM