o
    Zh-                  	   @  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ZdddddddddZG dd dejZ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prefixbytesreturnboolc                 C  s   t | dkot| dkS )N     )leni16)r	    r   I/var/www/html/lang_env/lib/python3.10/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ZdS )	SgiImageFileZSGIzSGI Image File Formatr   Nonec              	   C  s  | j d usJ d}| j |}t|sd}t||d }|d }t|d}t|d}t|d}t|d}	|||	f}
d	}zt|
 }W n	 tyK   Y nw |d	krVd
}t|||f| _|dd | _	| j
dkrkd| _d}|dkr|| | }|dkrdd| j || j
d|ffg| _d S g | _|}| j
D ]}| jdd| j ||d|ff ||7 }qd S |dkrdd| j ||||ffg| _d S 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_mimetypesizeZtileappend)selfZheadlensmsgcompressionbpc	dimensionxsizeysizezsizeZlayoutrawmodeorientationpagesizeoffsetlayerr   r   r   _open8   sX   










zSgiImageFile._openN)r   r   )__name__
__module____qualname__formatformat_descriptionr?   r   r   r   r   r   4   s    r   imImage.Imager&   	IO[bytes]filenamestr | bytesr   c              	   C  sD  | j dvrd}t|| j}|dd}|dvrd}t|d}d}d	}d
}	| j\}
}| j dkr7|dkr7d}	n| j dkr>d}	t| j }|	dv rId}t|  |krad| 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 d S )N>   r   r   r   r!   r5   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79sr2   Z404sr   r%   flush)r.   r(   Zencoderinfogetr/   r   Zgetbandsospathsplitextbasename
isinstancestrencodewritestructpackr   r,   tobyteshasattrrN   )rE   r&   rH   r3   infor5   r;   Zmagic_numberZrledimxyzZpinminZpinmaxZimg_nameZcolormapr:   channelr   r   r   _save   sf   





rb   c                   @  s   e Zd ZdZd	ddZdS )
SGI16DecoderTbufferr
   r   tuple[int, int]c           	      C  s   | j d usJ | jd usJ | j\}}}| jj| jj }t| j}| j d t	|D ]%}t
d| jj| jjf}|| j d| dd|| | j|j| q+dS )Nr   r   r   r%   r   )r#   r   )fdrE   argsstater7   r8   r   r.   seekranger   new	frombytesr'   Zputband)	r1   rd   r:   Zstrider;   r<   r9   Zbandra   r   r   r   decode   s   
zSGI16Decoder.decodeN)rd   r
   r   re   )r@   rA   rB   Z	_pulls_fdrm   r   r   r   r   rc      s    rc   r$   z	image/sgi)z.bwz.rgbz.rgbaz.sgi)r	   r
   r   r   )rE   rF   r&   rG   rH   rI   r   r   )
__future__r   rP   rX   typingr   r    r   r   _binaryr   r   r   r   r)   r   rb   Z	PyDecoderrc   Zregister_decoderZregister_openrC   Zregister_saveZregister_mimeZregister_extensionsr   r   r   r   <module>   s2   

LM