+
     iR0  c                  s^   ^ RI Ht ^ RIt^ RIHt ^RIHtHt ^RIH	t
 ^RIHt ^RIHt RtR	R
RRRRRR
RRRRRRRRRRRRRR/tR R lt ! R R]P                  4      t ! R R ]P$                  4      t ! R! R"]P$                  4      tR# R$ lt]P,                  ! ]P.                  ]]4       ]P0                  ! ]P.                  ]4       ]P2                  ! R%]4       ]P2                  ! R&]4       ]P4                  ! ]P.                  . R(O4       ]P6                  ! ]P.                  R'4       R# ))    )annotationsN)IO)Image	ImageFile)i16be)o8)o32les    	
   P11   P2L   P3RGB   P4   P5   P6s   P0CMYKZCMYK   PfFs   PyPZPs   PyRGBARGBAs   PyCMYKc                    V ^8  d   QhRRRR/# )   prefixbytesreturnbool format   "9/usr/lib64/python3.14/site-packages/PIL/PpmImagePlugin.py__annotate__r   1   s     A AE Ad A    c                sL    V P                  R 4      ;'       d    V ^,          R9   # )s   Ps	   0123456fy)Z
startswith)r      &r   _acceptr"   1   s$    T"@@vayL'@@r    c                  sB    ] tR t^9tRtRtR R ltR R ltR R ltR	t	R
# )PpmImageFileZPPMzPbmplus imagec                   V ^8  d   QhRR/# r   r   r   r   r   r   r   r   PpmImageFile.__annotate__=   s     
 
U 
r    c                	s    V P                   f   Q hRp\        ^4       F<  pV P                   P                  ^4      pV'       d   V\        9   d    V# W,          pK>  	  V# )Nr    )fprangereadb_whitespace)selfZmagicZ_cs   &   r   _read_magicZPpmImageFile._read_magic=   sX    ww"""qAQA\) JE	 
 r    c               r$   r%   r   r   r   r   r   r&   I   s      U r    c                	s   V P                   f   Q hRp\        V4      ^
8:  dp   V P                   P                  ^4      pV'       g   MKV\        9   d   V'       g   KI  M5VR8X  d%   V P                   P                  ^4      R9  d   K"  Ku  W,          pK  V'       g   Rp\	        V4      h\        V4      ^
8  d   RV,          p\	        V4      hV# )Nr       #s   
z Reached EOF while reading headers!   Token too long in file header: %s)r'   lenr)   r*   
ValueError)r+   tokenr,   msgZmsg_too_longs   &    r   _read_tokenZPpmImageFile._read_tokenI   s    ww"""%jBQAl"dggll1oW4JE4CS/!Z"_?%GL\**r    c               r$   )r   r   Noner   r   r   r   r   r&   e   s     7
 7
t 7
r    c                	s   V P                   f   Q hV P                  4       p \        V,          pY n        TR9   d	   RT n        MTR9   d	   RT n        MTR9   d   RT n        \        T P                  4       4      \        T P                  4       4      3T n	        RpTR9   d   RpTR8X  d   RpMTR	8X  ds   \        T P                  4       4      pTR
8X  g   \        P                  ! T4      '       g   Rp\        T4      h\        T4      T P                  R&   T^ 8  d   RMRpT^ R3pM{\        T P                  4       4      p^ Tu;8  d   R8  g   M Rp\        T4      hT^8  d   TR8X  d   RT n        TpTR8w  d   TR8X  d   TR8X  d   RpM	T^8w  d   RpTR8X  d   TMYx3p\         P"                  ! TRT P$                  ,           T P                   P'                  4       T4      .T n        R #   \         d    Rp\	        T4      hi ; i)Nznot a PPM filezimage/x-portable-bitmapzimage/x-portable-graymapzimage/x-portable-pixmapraw	ppm_plainr	   1;Ir   g        z!scale must be finite and non-zeroscaleF;32FzF;32BFi   z1maxval must be greater than 0 and less than 65536r   I  I;16Bppm)r   r   )r
   r   )r   r   )r   r
   r   r    r    )r'   r-   MODESZKeyErrorZSyntaxError_modecustom_mimetypeintr3   _sizeZfloatmathZisfiniter0   ZabsZinfor   _TilesizeZtelltile)	r+   Zmagic_numbermoder2   Zdecoder_nameargsr8   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#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+ +H)rA   rD   rB   rH   N)
__name__
__module____qualname____firstlineno__r   Zformat_descriptionr-   r3   rM   __static_attributes__r   r    r   r#   r#   9   s!    F(
87
 7
r    r#   c                  sr    ] tR t^t$ RtR]R&   R R ltRR R lltR R	 ltR
 R lt	R R lt
R R ltRtR# )PpmPlainDecoderTr   _comment_spansc               r$   r%   r   r   r   r   r   PpmPlainDecoder.__annotate__   s     1 1U 1r    c                	st    V P                   f   Q hV P                   P                  \        P                  4      # )N)fdr)   r   Z	SAFEBLOCK)r+   r!   r   _read_blockZPpmPlainDecoder._read_block   s+    ww"""ww||I//00r    c               s$    V ^8  d   QhRRRRRR/# )r   blockr   startrC   r   r   r   r   r   r   rU      s!     5 5u 5S 5 5r    c                	s    VP                  R V4      pVP                  RV4      pW4,          ^ 8  d   \        W44      # \        W44      # )s   
s   )findminZmax)r+   rX   rY   Zabs   &&&  r   _find_comment_endZ!PpmPlainDecoder._find_comment_end   s=    JJue$JJue$EAIs1y43q94r    c               s     V ^8  d   QhRRRR/# )r   rX   r   r   r   r   r   r   r   rU      s        e    r    c                	sd   V P                   '       d?   V'       d7   V P                  V4      pVR8w  d   W^,           R pMV P                  4       pK>  RV n          VP                  R4      pVR8X  d    V# V P                  W4      pVR8w  d   VRV W^,           R ,           pKK  VRV pRV n          V# )i   NFTr.   r>   )rT   r]   rW   rZ   )r+   rX   Zcomment_endZcomment_starts   &&  r   _ignore_commentsZ PpmPlainDecoder._ignore_comments   s    "44U;"$ "/"34E !,,.E $!JJt,M"  00FKb  n}-Ao6G0HH n}-&*#r    c               r$   )r   r   	bytearrayr   r   r   r   r   rU      s     & & &r    c                s   \        4       pV P                  P                  V P                  P                  ,          p\	        V4      V8w  d   V P                  4       pV'       g   MkV P                  V4      pRP                  VP                  4       4      pV F(  pVR9  g   K  R\        V.4      ,          p\        V4      h	  W,           RV pK  \        P                  RR4      pVP                  V4      # )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    s   Invalid token for this mode: %sNs   01s    )i0   i1   )r_   statexsizeysizer/   rW   r^   Zjoinsplitr   r0   Z	maketransZ	translate)r+   datatotal_bytesrX   tokensr1   r2   Zinverts   &       r   _decode_bitonalZPpmPlainDecoder._decode_bitonal   s    
 {jj&&)9)99$i;&$$&E))%0EXXekkm,F(<ueW~MC$S/)   M<K0D4~~f%%r    c               r   )r   rL   rC   r   r_   r   r   r   r   r   rU      s     1 1S 1Y 1r    c                	sn   \        4       p^
pV P                  R8X  d   ^M^pV P                  R8X  d   RM^p\        P                  ! V P                  4      pV P                  P
                  V P                  P                  ,          V,          V,          pRp\        V4      V8w  Ed   V P                  4       p	V	'       g   V'       d   \        R4      p	M V# V P                  V	4      p	V'       d   W,           p	RpV	P                  4       p
V	'       dX   V	R	R P                  4       '       g?   V
P                  4       p\        V4      V8  d   RVRV^,            ,          p\        V4      hV
 F  p\        V4      V8  d   RVRV^,            ,          p\        V4      h\        V4      pV^ 8  d   RV 2p\        V4      hW8  d   RV 2p\        V4      h\        W,          V,          4      pY P                  R8X  d   \!        V4      M
\#        V4      ,          p\        V4      V8X  g   K   EK  	  EK  V# )
i
   r:   r;   r    s    Ns    Token too long found in data: %szChannel value is negative: z'Channel value too large for this mode: r>   )r_   rI   r   getmodebandsr`   ra   rb   r/   rW   r^   rc   ZisspaceZpopr0   rC   roundo32r   )r+   rL   rd   Zmax_lenout_byte_countout_maxbandsre   Z
half_tokenrX   rf   r2   r1   valueZmsg_strs   &&             r   _decode_blocksZ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+   r    c               r   r   bufferz$bytes | Image.SupportsArrayInterfacer   ztuple[int, int]r   r   r   r   r   rU     s     
 
A 
o 
r    c                	s   R V n         V P                  R8X  d   V P                  4       pRpMCV P                  R,          pV P	                  V4      pV P                  R8X  d   RMV P                  pV P                  \        V4      V4       R# )Fr	   z1;8r:   I;32r>   r>   r    )rT   rI   rg   rJ   ro   
set_as_rawr   )r+   rq   rd   rK   rL   s   &&   r   decodeZPpmPlainDecoder.decode  ss    #99'')DGYYr]F&&v.D $		S 0fdiiGdW-r    )rT   N)r    )rN   rO   rP   rQ   	_pulls_fdZ__annotations__rW   r]   r^   rg   ro   ru   rR   r   r    r   rS   rS      s2    I1
5
 D&21f
 
r    rS   c                  s&    ] tR tRtRtR R ltRtR# )
PpmDecoderi,  Tc               r   rp   r   r   r   r   r   ZPpmDecoder.__annotate__/  s      A o r    c                	s   V P                   f   Q h\        4       pV P                  R,          pVR8  d   ^M^pV P                  R8X  d   ^M^pV P                  R8X  d   RM^p\        P
                  ! V P                  4      pV P                  P                  V P                  P                  ,          V,          V,          p\        V4      V8  d   V P                   P                  WG,          4      p	\        V	4      WG,          8  d   M\        V4       Fs  p
V^8X  d	   W,          M\        WV,          4      p\        V\        W,          V,          4      4      pY P                  R8X  d   \        V4      M
\!        V4      ,          pKu  	  K  V P                  R8X  d   RMV P                  pV P#                  \%        V4      V4       R# )Ni   r:   r;   rr   r>   rs   )rV   r_   rJ   rI   r   rh   r`   ra   rb   r/   r)   r(   i16r[   ri   rj   r   rt   r   )r+   rq   rd   rL   Zin_byte_countrk   rl   rm   Zdest_lengthZpixelsr\   rn   rK   s   &&           r   ru   ZPpmDecoder.decode/  sW   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 " !II,&$))dW-r    r   N)rN   rO   rP   rQ   rv   ru   rR   r   r    r   rw   rw   ,  s    I r    rw   c               s(    V ^8  d   QhRRRRRRRR/# )	r   imzImage.Imager'   z	IO[bytes]filenamezstr | bytesr   r4   r   r   r   r   r   r   M  s(      k y K D r    c                s   V P                   R 8X  d   RRrCMoV P                   R8X  d   RRrCMZV P                   R9   d   RRrCMEV P                   R9   d   RRrCM0V P                   R8X  d   R	R
rCMRV P                    R2p\        V4      hVP                  VRV P                  ,          ,           4       VR8X  d   VP                  R4       MJVR8X  d,   VR8X  d   VP                  R4       M*VP                  R4       MVR
8X  d   VP                  R4       V P                   R8X  d   RM^p\        P
                  ! W\        P                  ! RRV P                  ,           ^ V^ V34      .4       R# )r	   r7   r   r   r   r<   r   r   r   r9   r   zcannot write mode z as PPMs   
%d %d
s   255
s   65535
s   -1.0
r5   N)r:   zI;16)r   r   r>   r?   )rI   ZOSErrorZwriterG   r   _saverF   )ry   r'   rz   rK   Zheadr2   Z	row_orders   &&&    r   r{   r{   M  s$   	ww#~u	CU	M	!	O	#u	C"277)73clHHTL277**+u}
	c>HHXHHZ 	
ggn!IOO
(8!gq)=TUVr    r=   r6   zimage/x-portable-anymap)z.pbmz.pgmz.ppmz.pnmz.pfm)Z
__future__r   rE   Ztypingr   Z r   r   Z_binaryr   rx   r   r   rj   r*   r@   r"   r#   Z	PyDecoderrS   rw   r{   Zregister_openr   Zregister_saveZregister_decoderZregister_extensionsZregister_mimer   r    r   <module>r|      s*    #    !  !
 + 
3	3	5	3	3	5v	3
Cvv	$Ac
9&& c
TFi)) FR$$ BD   L''w ?   L'' /   uj )   {O 4   ,--/W X   L'')B Cr    