+
     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    R p\        ^4       F<  pV P                  P                  ^4      pV'       d   V\        9   d    V# W,          pK>  	  V# )r    )rangefpreadb_whitespace)selfZmagicZ_cs   &   r   _read_magicZPpmImageFile._read_magic=   sJ     qAQA\) JE	 
 r    c               r$   r%   r   r   r   r   r   r&   I   s      U r    c                	sz   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# )r       #s   
z Reached EOF while reading headers!   Token too long in file header: %s)lenr(   r)   r*   
ValueError)r+   tokenr,   msgZmsg_too_longs   &    r   _read_tokenZPpmImageFile._read_tokenI   s     %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                  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)z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ppmN)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sizer(   Ztelltile)	r+   Zmagic_numbermoder2   Zdecoder_nameargsr8   rawmodemaxvals	   &        r   _openZPpmImageFile._opene   s    '')	#&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 G4)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                   P                  \        P                  4      # )N)fdr)   r   Z	SAFEBLOCK)r+   r!   r   _read_blockZPpmPlainDecoder._read_block   s     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# )   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   getmodebandsra   rb   rc   r/   rW   r_   rd   ZisspaceZpopr0   rC   roundo32r   )r+   rL   re   Zmax_lenout_byte_countout_maxbandsrf   Z
half_tokenrX   rg   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   rh   rJ   rp   
set_as_rawr   )r+   rr   re   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_   rh   rp   rv   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   rq   r   r   r   r   r   ZPpmDecoder.__annotate__/  s      A o r    c                	st   \        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# )r^   i   r:   r;   rs   r>   rt   )r`   rJ   rI   r   ri   ra   rb   rc   r/   rV   r)   r'   i16r[   rj   rk   r   ru   r   )r+   rr   re   rL   Zin_byte_countrl   rm   rn   Zdest_lengthZpixelsr\   ro   rK   s   &&           r   rv   ZPpmDecoder.decode/  sI    {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   rw   rv   rR   r   r    r   rx   rx   ,  s    I r    rx   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   )rz   r(   r{   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   ry   r   r   rk   r*   r@   r"   r#   Z	PyDecoderrS   rx   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    