
    :hF0                    @   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Z G d dej                        Z G d dej$                        Z G d dej$                        ZddZ ej,                  ej.                  ee        ej0                  ej.                  e        ej2                  de        ej2                  de        ej4                  ej.                  g d        ej6                  ej.                  d       y)     )annotationsN)IO   )Image	ImageFile)i16be)o8)o32les    	
1LRGBCMYKFPRGBA)   P1   P2   P3   P4   P5   P6s   P0CMYK   Pfs   PyPs   PyRGBAs   PyCMYKc                6    | j                  d      xr | d   dv S )N   Pr   s	   0123456fy)
startswith)prefixs    P/var/www/urcfiles/bundle/venv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py_acceptr   1   s!    T"@vayL'@@    c                  ,    e Zd ZdZdZddZddZddZy)	PpmImageFilePPMzPbmplus imagec                    | j                   J d}t        d      D ]/  }| j                   j                  d      }|r|t        v r |S ||z  }1 |S )Nr      r   )fprangereadb_whitespace)selfmagic_cs       r   _read_magiczPpmImageFile._read_magic=   sZ    ww"""qAQA\) QJE	 
 r   c                   | j                   J d}t        |      dk  r| j                   j                  d      }|snb|t        v r|s7nV|dk(  r=| j                   j                  d      dvr	 | j                   j                  d      dvrz||z  }t        |      dk  r|sd}t	        |      t        |      dkD  rd|j                          }t	        |      |S )Nr   
   r      #s   
z Reached EOF while reading headerzToken too long in file header: )r%   lenr'   r(   
ValueErrordecode)r)   tokenr,   msgs       r   _read_tokenzPpmImageFile._read_tokenI   s    ww"""%jBQAl"dggll1oW4 ggll1oW4QJE %jB 4CS/!Z"_3ELLN3CDCS/!r   c                   | j                   J | j                         }	 t        |   }|| _        |dv rd| _        n|dv rd| _        n|dv rd| _        t        | j                               t        | j                               f| _	        d}|d	v rd
}|dk(  rd}n|dk(  rgt        | j                               }|dk(  st        j                  |      sd}t        |      t        |      | j                  d<   |dk  rdnd}|ddf}njt        | j                               }d|cxk  rdk  sn d}t        |      |dkD  r|dk(  rd| _        |}|d
k7  r|dk(  r|dk(  rd}n|dk7  rd}|dk(  r|n||f}t!        j"                  |d| j$                  z   | j                   j'                         |      g| _        y # t        $ r d}t	        |      w xY w)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;32BFi   z1maxval must be greater than 0 and less than 65536   r   I  I;16Bppmr   r   )r%   r-   MODESKeyErrorSyntaxError_modecustom_mimetypeintr6   _sizefloatmathisfiniter2   absinfor   _Tilesizetelltile)	r)   magic_numbermoder5   decoder_nameargsr;   rawmodemaxvals	            r   _openzPpmImageFile._opene   s   ww"""'')	#&D 
>)#<D ^+#=D ^+#<D ))+,c$2B2B2D.EE
00&L 3;DS[$**,-E|4==#79 o%!$UDIIg!&gGQ#D))+,Fv%%I o%| 
G{*U?ts{%Gs]#(L*e37'69JDOOL&499*<dggllndS
	_  	#"Cc""	#s   	F4 4GNreturnbytes)r\   None)__name__
__module____qualname__formatformat_descriptionr-   r6   rZ    r   r   r!   r!   9   s    F(
87
r   r!   c                  N    e Zd ZU dZded<   ddZdddZddZddZddZ	dd	Z
y
)PpmPlainDecoderTbool_comment_spansc                p    | j                   J | j                   j                  t        j                        S )N)fdr'   r   	SAFEBLOCK)r)   s    r   _read_blockzPpmPlainDecoder._read_block   s+    ww"""ww||I//00r   c                    |j                  d|      }|j                  d|      }||z  dkD  rt        ||      S t        ||      S )N   
   r   )findminmax)r)   blockstartabs        r   _find_comment_endz!PpmPlainDecoder._find_comment_end   sC    JJue$JJue$EAIs1ay43q!94r   c                0   | j                   r4|r2| j                  |      }|dk7  r	||dz   d  }n| j                         }|r2d| _         	 |j                  d      }|dk(  r	 |S | j                  ||      }|dk7  r|d | ||dz   d  z   }n|d | }d| _         	 |S O)Nr=   r   FTr0   )rh   rw   rl   rp   )r)   rs   comment_endcomment_starts       r   _ignore_commentsz PpmPlainDecoder._ignore_comments   s    "44U;"$ "+/"34E !,,.E  $!JJt,M"  00FKb  n}-kAo6G0HH n}-&*# r   c                   t               }| j                  j                  | j                  j                  z  }t	        |      |k7  r| j                         }|snl| j                  |      }dj                  |j                               }|D ]   }|dvsdt        |g      z  }t        |       ||z   d| }t	        |      |k7  rt        j                  dd      }|j                  |      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    )	bytearraystatexsizeysizer1   rl   r{   joinsplitr]   r2   	maketrans	translate)r)   datatotal_bytesrs   tokensr4   r5   inverts           r   _decode_bitonalzPpmPlainDecoder._decode_bitonal   s    
 {jj&&)9)99$i;&$$&E))%0EXXekkm,F(<ueW~MC$S/)   6M<K0D $i;& 4~~f%%r   c                   t               }d}| j                  dk(  rdnd}| j                  dk(  rdnd}t        j                  | j                        }| j                  j
                  | j                  j                  z  |z  |z  }d}t        |      |k7  rO| j                         }	|	s|rt        d      }	n	 |S | j                  |	      }	|r||	z   }	d}|	j                         }
|	rG|	d	d  j                         s4|
j                         }t        |      |kD  rd
|d |dz    z  }t        |      |
D ]  }t        |      |kD  rd
|d |dz    z  }t        |      t        |      }|dk  rd| }t        |      ||kD  rd| }t        |      t        ||z  |z        }|| j                  dk(  rt!        |      n
t#        |      z  }t        |      |k(  s n t        |      |k7  rO|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: )r   rU   r   getmodebandsr   r   r   r1   rl   r{   r   isspacepopr2   rI   roundo32r	   )r)   rY   r   max_lenout_byte_countout_maxbandsr   
half_tokenrs   r   r5   r4   valuemsg_strs                  r   _decode_blockszPpmPlainDecoder._decode_blocks   s   {"ii3.A99+%""499-jj&&)9)99EANR
$i;&$$&E%dOE B ? ))%0E"U* 
[[]FU23Z//1#ZZ\
z?W,;j7UV;>WW  %S/)u:'=mRS@TTC$S/)E
19 ;E7CG$W--6> GwOG$W--efnw67dii3&6E
BuIEt9+  3 $i;&P r   c                   d| _         | j                  dk(  r| j                         }d}n=| j                  d   }| j	                  |      }| j                  dk(  rdn| j                  }| j                  t        |      |       y)NFr   z1;8r=   r?   I;32r=   r   )rh   rU   r   rW   r   
set_as_rawr]   )r)   bufferr   rX   rY   s        r   r3   zPpmPlainDecoder.decode  sq    #99'')DGYYr]F&&v.D $		S 0fdiiGdW-r   Nr[   )r   )rs   r]   rt   rI   r\   rI   )rs   r]   r\   r]   )r\   r   )rY   rI   r\   r   r   z$bytes | Image.SupportsArrayInterfacer\   ztuple[int, int])r_   r`   ra   	_pulls_fd__annotations__rl   rw   r{   r   r   r3   rd   r   r   rf   rf      s-    I1
5
 D&21f
r   rf   c                      e Zd ZdZddZy)
PpmDecoderTc                6   | j                   J t               }| j                  d   }|dk  rdnd}| j                  dk(  rdnd}| j                  dk(  rdnd}t	        j
                  | j                        }| j                  j                  | j                  j                  z  |z  |z  }t        |      |k  r| j                   j                  ||z        }	t        |	      ||z  k  rn{t        |      D ]^  }
|dk(  r|	|
   nt        |	|
|z        }t        |t        ||z  |z              }|| j                  dk(  rt        |      n
t!        |      z  }` t        |      |k  r| j                  dk(  rd	n| j                  }| j#                  t%        |      |       y
)Nr=      r      r?   r   r@   r>   r   r   )rj   r   rW   rU   r   r   r   r   r   r1   r'   r&   i16rq   r   r   r	   r   r]   )r)   r   r   rY   in_byte_countr   r   r   dest_lengthpixelsrv   r   rX   s                r   r3   zPpmDecoder.decode/  so   ww"""{2#c\q"ii3.A99+%""499-jj&&)9)99EANR$i+%WW\\-%"78F6{]U225\!.!!3F1IVQEV9W  GU56>G+C%DEdii3&6E
BuIE " $i+% !II,&$))dW-r   Nr   )r_   r`   ra   r   r3   rd   r   r   r   r   ,  s    Ir   r   c                   | j                   dk(  rd\  }}nm| j                   dk(  rd\  }}nX| j                   dv rd\  }}nD| j                   dv rd\  }}n0| j                   d	k(  rd
\  }}nd| j                    d}t        |      |j                  |d| j                  z  z          |dk(  r|j                  d       nD|dk(  r)|dk(  r|j                  d       n(|j                  d       n|dk(  r|j                  d       | j                   d	k(  rdnd}t	        j
                  | |t	        j                  dd| j                  z   d|d|f      g       y )Nr   )r:   r   r   )r   r   )r?   zI;16)rA   r   )r   r   )r   r   r   )r<   r   zcannot write mode z as PPMs   
%d %d
r   s   255
r   s   65535
r   s   -1.0
r=   r   r8   rC   r   )rU   OSErrorwriterQ   r   _saverP   )imr%   filenamerX   headr5   	row_orders          r   r   r   M  s0   	ww#~$	C"	M	!&	O	#$	C&"277)73clHHTL277**+u}
	c>HHXHHZ 	
ggn!IOO
B(8!gq)=TUVr   rB   r9   )z.pbmz.pgmz.ppmz.pnmz.pfmzimage/x-portable-anymap)r   r]   r\   rg   )r   zImage.Imager%   z	IO[bytes]r   zstr | bytesr\   r^   )
__future__r   rL   typingr    r   r   _binaryr   r   r	   r
   r   r(   rD   r   r!   	PyDecoderrf   r   r   register_openrb   register_saveregister_decoderregister_extensionsregister_mimerd   r   r   <module>r      s     #    !  !
 + 	$Ac
9&& c
TFi)) FR$$ BD   L''w ?   L'' /   uj )   {O 4   ,--/W X   L'')B Cr   