a
    ç´«jR0  ã                   @  s(  d dl m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lmZ d	Zd
ddd
ddddddddœZdddœdd„ZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZdddd d!œd"d#„Ze ejee¡ e eje¡ e d$e¡ e d%e¡ e ejg d&¢¡ e ejd'¡ dS )(é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFile)Úi16be)Úo8)Úo32les    	
Ú1ÚLÚRGBZCMYKÚFÚPÚRGBA)ó   P1ó   P2ó   P3ó   P4ó   P5ó   P6s   P0CMYKó   Pfs   PyPs   PyRGBAs   PyCMYKÚbytesÚbool)ÚprefixÚreturnc                 C  s   |   d¡o| d dv S )Nó   Pr   s	   0123456fy)Ú
startswith)r   © r   úQ/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/PpmImagePlugin.pyÚ_accept1   s    r   c                   @  s>   e Zd ZdZdZddœdd„Zddœdd„Zd	dœd
d„ZdS )ÚPpmImageFileZPPMzPbmplus imager   ©r   c                 C  sH   | j d usJ ‚d}tdƒD ](}| j  d¡}|r6|tv r: qD||7 }q|S )Nó    é   r   )ÚfpÚrangeÚreadÚb_whitespace)ÚselfÚmagicÚ_Úcr   r   r   Ú_read_magic=   s    
zPpmImageFile._read_magicc                 C  sœ   | j d usJ ‚d}t|ƒdkrj| j  d¡}|s2qjn.|tv rD|sjqqjn|dkr`| j  d¡dvrqLq||7 }q|s|d}t|ƒ‚nt|ƒdkr˜d| }t|ƒ‚|S )Nr"   é
   r   ó   #s   
z Reached EOF while reading headers!   Token too long in file header: %s)r$   Úlenr&   r'   Ú
ValueError)r(   Útokenr+   ÚmsgZmsg_too_longr   r   r   Ú_read_tokenI   s,    

zPpmImageFile._read_tokenÚNonec           	      C  sÈ  | j d usJ ‚|  ¡ }zt| }W n ty@   d}t|ƒ‚Y n0 || _|dv rXd| _n|dv rhd| _n|dv rvd| _t|  ¡ ƒt|  ¡ ƒf| _	d}|d	v r d
}|dkr®d}nö|dk�rt
|  ¡ ƒ}|dksÖt |¡sâd}t|ƒ‚t|ƒ| jd< |dk rüdnd}|ddf}n˜t|  ¡ ƒ}d|  k �r0dk �s>n d}t|ƒ‚|dk�rX|dk�rXd| _|}|d
k�rŽ|dk�r€|dk�r€d}n|dk�rŽd}|dk�rœ|n||f}t |d| j | j  ¡ |¡g| _d S )Nznot a PPM file)r   r   zimage/x-portable-bitmap)r   r   zimage/x-portable-graymap)r   r   zimage/x-portable-pixmapÚraw)r   r   r   Ú	ppm_plainr
   ú1;Ir   g        z!scale must be finite and non-zeroÚscaler   úF;32FzF;32BFéÿÿÿÿi   z1maxval must be greater than 0 and less than 65536éÿ   r   ÚIéÿÿ  úI;16BÚppm©r   r   )r$   r,   ÚMODESÚKeyErrorÚSyntaxErrorÚ_modeZcustom_mimetypeÚintr3   Ú_sizeÚfloatÚmathÚisfiniter0   ÚabsÚinfor   Ú_TileÚsizeÚtellZtile)	r(   Zmagic_numberÚmoder2   Zdecoder_nameÚargsr8   ÚrawmodeÚmaxvalr   r   r   Ú_opene   sV    


ÿzPpmImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr,   r3   rS   r   r   r   r   r    9   s
   r    c                   @  sz   e Zd ZU dZded< ddœdd„Zddd	d	d
œdd„Zdddœdd„Zddœdd„Zd	ddœdd„Z	dddœdd„Z
dS )ÚPpmPlainDecoderTr   Ú_comment_spansr   r!   c                 C  s   | j d usJ ‚| j  tj¡S )N)Úfdr&   r   Z	SAFEBLOCK)r(   r   r   r   Ú_read_block§   s    zPpmPlainDecoder._read_blockr   rE   )ÚblockÚstartr   c                 C  s8   |  d|¡}|  d|¡}|| dkr.t||ƒS t||ƒS )Nó   
ó   r   )ÚfindÚminÚmax)r(   r]   r^   ÚaÚbr   r   r   Ú_find_comment_end¬   s    z!PpmPlainDecoder._find_comment_end)r]   r   c                 C  s    | j r:|r:|  |¡}|dkr0||d d … }q:q|  ¡ }qd| _ | d¡}|dkrTqœ|  ||¡}|dkr†|d |… ||d d …  }q@|d |… }d| _ qœq@|S )Nr:   r   Fr.   T)rZ   rf   r\   ra   )r(   r]   Zcomment_endÚcomment_startr   r   r   Ú_ignore_comments±   s$    


z PpmPlainDecoder._ignore_commentsÚ	bytearrayc                 C  s˜   t ƒ }| jj| jj }t|ƒ|kr‚|  ¡ }|s0q‚|  |¡}d | ¡ ¡}|D ]"}|dvrLdt	|gƒ }t
|ƒ‚qL|| d|… }qt	 dd¡}| |¡S )z¥
        This is a separate method because in the plain PBM format, all data tokens are
        exactly one byte, so the inter-token whitespace is optional.
        r"   )é0   é1   s   Invalid token for this mode: %sNs   01s   ÿ )ri   ÚstateÚxsizeÚysizer/   r\   rh   ÚjoinÚsplitr   r0   Ú	maketransÚ	translate)r(   ÚdataÚtotal_bytesr]   Útokensr1   r2   Úinvertr   r   r   Ú_decode_bitonalÓ   s    

zPpmPlainDecoder._decode_bitonal)rR   r   c                 C  s¢  t ƒ }d}| jdkrdnd}| jdkr*dnd}t | j¡}| jj| jj | | }d}t|ƒ|k�rž|  ¡ }	|	s‚|r~t dƒ}	n�qž|  	|	¡}	|rœ||	 }	d}|	 
¡ }
|	rè|	d	d …  ¡ sè|
 ¡ }t|ƒ|krèd
|d |d …  }t|ƒ‚|
D ]®}t|ƒ|k�rd
|d |d …  }t|ƒ‚t|ƒ}|dk �r>d|› �}t|ƒ‚||k�rZd|› �}t|ƒ‚t|| | ƒ}|| jdk�r€t|ƒnt|ƒ7 }t|ƒ|krì qVqìqV|S )Nr-   r<   é   r   r=   r;   r"   ó    r:   s    Token too long found in data: %sr   zChannel value is negative: z'Channel value too large for this mode: )ri   rO   r   Úgetmodebandsrl   rm   rn   r/   r\   rh   rp   ÚisspaceÚpopr0   rE   ÚroundÚo32r   )r(   rR   rs   Úmax_lenÚout_byte_countÚout_maxÚbandsrt   Z
half_tokenr]   ru   r2   r1   ÚvalueZmsg_strr   r   r   Ú_decode_blocksì   sP    

ÿ



 zPpmPlainDecoder._decode_blocksú$bytes | Image.SupportsArrayInterfaceútuple[int, int]©Úbufferr   c                 C  sZ   d| _ | jdkr|  ¡ }d}n(| jd }|  |¡}| jdkr@dn| j}|  t|ƒ|¡ dS )NFr
   z1;8r:   r<   úI;32©r:   r   )rZ   rO   rw   rP   r„   Ú
set_as_rawr   )r(   rˆ   rs   rQ   rR   r   r   r   Údecode  s    


zPpmPlainDecoder.decodeN)r   )rT   rU   rV   Ú	_pulls_fdÚ__annotations__r\   rf   rh   rw   r„   rŒ   r   r   r   r   rY   £   s   
"3rY   c                   @  s    e Zd ZdZdddœdd„ZdS )Ú
PpmDecoderTr…   r†   r‡   c                 C  s4  | j d usJ ‚tƒ }| jd }|dk r*dnd}| jdkr<dnd}| jdkrNdnd}t | j¡}| jj| jj | | }t	|ƒ|k �r
| j  
|| ¡}	t	|	ƒ|| k r¨�q
t|ƒD ]V}
|dkrÄ|	|
 nt|	|
| ƒ}t|t|| | ƒƒ}|| jdkrüt|ƒnt|ƒ7 }q°qv| jdk�rd	n| j}|  t|ƒ|¡ d
S )Nr:   é   r   é   r<   rx   r=   r;   r‰   rŠ   )r[   ri   rP   rO   r   rz   rl   rm   rn   r/   r&   r%   Úi16rb   r}   r~   r   r‹   r   )r(   rˆ   rs   rR   Zin_byte_countr€   r�   r‚   Zdest_lengthZpixelsre   rƒ   rQ   r   r   r   rŒ   /  s(    
ÿ"zPpmDecoder.decodeN)rT   rU   rV   r�   rŒ   r   r   r   r   r�   ,  s   r�   zImage.Imagez	IO[bytes]zstr | bytesr4   )Úimr$   Úfilenamer   c                 C  s  | j dkrd\}}nf| j dkr(d\}}nR| j dv r<d\}}n>| j dv rPd\}}n*| j d	krdd
\}}nd| j › d�}t|ƒ‚| |d| j  ¡ |dkr¢| d¡ n:|dkrÊ|dkr¾| d¡ qÜ| d¡ n|dkrÜ| d¡ | j d	krêdnd}t | |t dd| j d|d|f¡g¡ d S )Nr
   )r7   r   r   )r   r   )r<   zI;16)r>   r   )r   r   )r   r   r   )r9   r   zcannot write mode z as PPMs   
%d %d
r   s   255
r   s   65535
r   s   -1.0
r:   r   r5   r@   r   )rO   ÚOSErrorÚwriterM   r   Ú_saverL   )r“   r$   r”   rQ   Úheadr2   Z	row_orderr   r   r   r—   M  s2    










 ÿr—   r?   r6   )z.pbmz.pgmz.ppmz.pnmz.pfmzimage/x-portable-anymap)Ú
__future__r   rH   Útypingr   Ú r   r   Ú_binaryr   r’   r   r	   r~   r'   rA   r   r    Z	PyDecoderrY   r�   r—   Zregister_openrW   Zregister_saveZregister_decoderZregister_extensionsZregister_mimer   r   r   r   Ú<module>   s>   òj 
!"