
    hF0                    D   S SK Jr  S SKrS SKJr  SSKJrJr  SSKJ	r
  SSKJr  SSKJr  S	rS
SSS
SSSSSSSS.rSS jr " S S\R                  5      r " S S\R$                  5      r " S S\R$                  5      rSS jr\R,                  " \R.                  \\5        \R0                  " \R.                  \5        \R2                  " S\5        \R2                  " S\5        \R4                  " \R.                  / SQ5        \R6                  " \R.                  S5        g)     )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                B    U R                  S5      =(       a    U S   S;   $ )N   Pr   s	   0123456fy)
startswith)prefixs    D/var/www/html/env/lib/python3.13/site-packages/PIL/PpmImagePlugin.py_acceptr   1   s!    T"@vayL'@@    c                  :    \ rS rSrSrSrS	S jrS	S jrS
S jrSr	g)PpmImageFile9   PPMzPbmplus imagec                    U R                   c   eSn[        S5       H6  nU R                   R                  S5      nU(       a
  U[        ;   a    U$ X-  nM8     U$ )Nr      r   )fprangereadb_whitespace)selfmagic_cs       r   _read_magicPpmImageFile._read_magic=   sX    ww"""qAQA\) JE	 
 r   c                   U R                   c   eSn[        U5      S::  a  U R                   R                  S5      nU(       d  OrU[        ;   a
  U(       d  ME  O^US:X  aC  U R                   R                  S5      S;  a"   U R                   R                  S5      S;  a  M"  M  X-  n[        U5      S::  a  M  U(       d  Sn[	        U5      e[        U5      S:  a  SUR                  5        3n[	        U5      eU$ )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_tokenPpmImageFile._read_tokenI   s    ww"""%jBQAl"dggll1oW4 ggll1oW4JE %jB 4CS/!Z"_3ELLN3CDCS/!r   c                   U R                   c   eU R                  5       n [        U   nX l        US;   a  SU l        OUS;   a  SU l        OUS;   a  SU l        [        U R                  5       5      [        U R                  5       5      4U l	        SnUS	;   a  S
nUS:X  a  SnOUS:X  ao  [        U R                  5       5      nUS:X  d  [        R                  " U5      (       d  Sn[        U5      e[        U5      U R                  S'   US:  a  SOSnUSS4nOr[        U R                  5       5      nSUs=:  a  S:  d  O  Sn[        U5      eUS:  a  US:X  a  SU l        UnUS
:w  a  US:X  a	  US:X  a  SnOUS:w  a  SnUS:X  a  UOXx4n[         R"                  " USU R$                  -   U R                   R'                  5       U5      /U l        g ! [         a    Sn[	        U5      ef = f)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intr8   _sizefloatmathisfiniter4   absinfor   _Tilesizetelltile)	r*   magic_numbermoder7   decoder_nameargsr>   rawmodemaxvals	            r   _openPpmImageFile._opene   s   ww"""'')	#&D 
>)#<D ^+#=D ^+#<D ))+,c$2B2B2D.EE
00&L 3;DS[$**,-E|4==#7#79 o%!$UDIIg!&gGQ#D))+,Fv%%I o%| 
G{*U?ts{%Gs]#(L*e37'9JDOOL&499*<dggllndS
	_  	#"Cc""	#s   	G G')rJ   rM   rK   rV   Nreturnbytes)r`   None)
__name__
__module____qualname____firstlineno__formatformat_descriptionr.   r8   r]   __static_attributes__ r   r   r!   r!   9   s    F(
87
r   r!   c                  d    \ rS rSr% SrS\S'   SS jrSSS jjrSS jrSS jr	SS	 jr
SS
 jrSrg)PpmPlainDecoder   Tbool_comment_spansc                r    U R                   c   eU R                   R                  [        R                  5      $ )N)fdr(   r   	SAFEBLOCK)r*   s    r   _read_blockPpmPlainDecoder._read_block   s+    ww"""ww||I//00r   c                    UR                  SU5      nUR                  SU5      nX4-  S:  a  [        X45      $ [        X45      $ )N   
   r   )findminmax)r*   blockstartabs        r   _find_comment_end!PpmPlainDecoder._find_comment_end   s=    JJue$JJue$EAIs1y43q94r   c                R   U R                   (       a?  U(       a8  U R                  U5      nUS:w  a  XS-   S  nOU R                  5       nU(       a  M8  SU l          UR                  S5      nUS:X  a   U$ U R                  X5      nUS:w  a  US U XS-   S  -   nOUS U nSU l          U$ MP  )Nr@   r   FTr2   )ro   r   rs   rx   )r*   r{   comment_endcomment_starts       r   _ignore_comments PpmPlainDecoder._ignore_comments   s    "44U;"$ "/"34E !,,.E % $!JJt,M"  00FKb  n}-Ao6G0HH n}-&*# r   c                   [        5       nU R                  R                  U R                  R                  -  n[	        U5      U:w  a  U R                  5       nU(       d  OqU R                  U5      nSR                  UR                  5       5      nU H#  nUS;  d  M  S[        U/5      -  n[        U5      e   X-   SU n[	        U5      U:w  a  M  [        R                  SS5      nUR                  U5      $ )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ysizer3   rs   r   joinsplitra   r4   	maketrans	translate)r*   datatotal_bytesr{   tokensr6   r7   inverts           r   _decode_bitonalPpmPlainDecoder._decode_bitonal   s    
 {jj&&)9)99$i;&$$&E))%0EXXekkm,F(<ueW~MC$S/)   M<K0D $i;& 4~~f%%r   c                   [        5       nSnU R                  S:X  a  SOSnU R                  S:X  a  SOSn[        R                  " U R                  5      nU R                  R
                  U R                  R                  -  U-  U-  nSn[        U5      U:w  Gan  U R                  5       n	U	(       d  U(       a  [        S5      n	O U$ U R                  U	5      n	U(       a  X-   n	SnU	R                  5       n
U	(       aM  U	S	S  R                  5       (       d5  U
R                  5       n[        U5      U:  a  S
US US-    -  n[        U5      eU
 H  n[        U5      U:  a  S
US US-    -  n[        U5      e[        U5      nUS:  a  SU 3n[        U5      eX:  a  SU 3n[        U5      e[        X-  U-  5      nX R                  S:X  a  [!        U5      O
[#        U5      -  n[        U5      U:X  d  M    O   [        U5      U:w  a  GMn  U$ )Nr1   rB      r   rC   rA   r       r@   s    Token too long found in data: %sr   zChannel value is negative: z'Channel value too large for this mode: )r   rX   r   getmodebandsr   r   r   r3   rs   r   r   isspacepopr4   rL   roundo32r	   )r*   r\   r   max_lenout_byte_countout_maxbandsr   
half_tokenr{   r   r7   r6   valuemsg_strs                  r   _decode_blocksPpmPlainDecoder._decode_blocks   s   {"ii3.A99+%""499-jj&&)9)99EANR
$i;&$$&E%dOE B ? ))%0E"* 
[[]FU23Z//11#ZZ\
z?W,;j7UV;>WW  %S/)u:'=mRS@TTC$S/)E
19 ;E7CG$W--> GwOG$W--enw67ii3&6E
BuIEt9+  3 $i;&P r   c                
   SU l         U R                  S:X  a  U R                  5       nSnO>U R                  S   nU R	                  U5      nU R                  S:X  a  SOU R                  nU R                  [        U5      U5        g)NFr   z1;8r@   rB   I;32r@   r   )ro   rX   r   rZ   r   
set_as_rawra   )r*   bufferr   r[   r\   s        r   r5   PpmPlainDecoder.decode  sq    #99'')DGYYr]F&&v.D $		S 0fdiiGdW-r   )ro   Nr_   )r   )r{   ra   r|   rL   r`   rL   )r{   ra   r`   ra   )r`   r   )r\   rL   r`   r   r   z$bytes | Image.SupportsArrayInterfacer`   ztuple[int, int])rc   rd   re   rf   	_pulls_fd__annotations__rs   r   r   r   r   r5   ri   rj   r   r   rl   rl      s-    I1
5
 D&21f
r   rl   c                  "    \ rS rSrSrSS jrSrg)
PpmDecoderi,  Tc                F   U R                   c   e[        5       nU R                  S   nUS:  a  SOSnU R                  S:X  a  SOSnU R                  S:X  a  SOSn[        R
                  " U R                  5      nU R                  R                  U R                  R                  -  U-  U-  n[        U5      U:  a  U R                   R                  XG-  5      n	[        U	5      XG-  :  a  O}[        U5       H]  n
US:X  a  X   O[        XU-  5      n[        U[        X-  U-  5      5      nX R                  S:X  a  [        U5      O
[!        U5      -  nM_     [        U5      U:  a  M  U R                  S:X  a  S	OU R                  nU R#                  [%        U5      U5        g
)Nr@      r      rB   r   rC   rA   r   r   )rq   r   rZ   rX   r   r   r   r   r   r3   r(   r'   i16ry   r   r   r	   r   ra   )r*   r   r   r\   in_byte_countr   r   r   dest_lengthpixelsr~   r   r[   s                r   r5   PpmDecoder.decode/  sc   ww"""{2#c\q"ii3.A99+%""499-jj&&)9)99EANR$i+%WW\\-"78F6{]225\!.!!3FIVEV9W  GU5>G+C%DEii3&6E
BuIE " $i+% !II,&$))dW-r   rj   Nr   )rc   rd   re   rf   r   r5   ri   rj   r   r   r   r   ,  s    Ir   r   c                   U R                   S:X  a  Su  p4OoU R                   S:X  a  Su  p4OZU R                   S;   a  Su  p4OEU R                   S;   a  Su  p4O0U R                   S	:X  a  S
u  p4OSU R                    S3n[        U5      eUR                  USU R                  -  -   5        US:X  a  UR                  S5        OGUS:X  a*  US:X  a  UR                  S5        O)UR                  S5        OUS:X  a  UR                  S5        U R                   S	:X  a  SOSn[        R
                  " X[        R                  " SSU R                  -   SUSU45      /5        g )Nr   )r=   r   r   )r   r   )rB   zI;16)rD   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   r;   rF   r   )rX   OSErrorwriterT   r   _saverS   )imr&   filenamer[   headr7   	row_orders          r   r   r   M  s.   	ww#~$	C"	M	!&	O	#$	C&"277)73clHHTL277**+u}
	c>HHXHHZ 	
ggn!IOO
(8!gq)=TUVr   rE   r<   )z.pbmz.pgmz.ppmz.pnmz.pfmzimage/x-portable-anymap)r   ra   r`   rn   )r   zImage.Imager&   z	IO[bytes]r   zstr | bytesr`   rb   )
__future__r   rO   typingr    r   r   _binaryr   r   r	   r
   r   r)   rG   r   r!   	PyDecoderrl   r   r   register_openrg   register_saveregister_decoderregister_extensionsregister_mimerj   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   