+
    UBig0                    ^   ^ 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   P0CMYKCMYK   PfFs   PyPPs   PyRGBARGBAs   PyCMYKc                    V ^8  d   QhRRRR/# )   prefixbytesreturnbool )formats   "7/usr/lib/python3.14/site-packages/PIL/PpmImagePlugin.py__annotate__r!   1   s     V VE Vd V    c                x    \        V 4      ^8  ;'       d&    V P                  R4      ;'       d    V ^,          R9   # )r      Ps	   0123456fy)len
startswith)r   s   &r    _acceptr'   1   s5    v;!UU 1 1$ 7UUF1I<UUr"   c                  B    ] tR t^9tRtRtR R ltR R ltR R ltR	t	R
# )PpmImageFilePPMzPbmplus imagec                   V ^8  d   QhRR/# r   r   r   r   )r   s   "r    r!   PpmImageFile.__annotate__=   s     
 
U 
r"   c                	    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)selfmagic_cs   &   r    _read_magicPpmImageFile._read_magic=   sX    ww"""qAQA\) JE	 
 r"   c                   V ^8  d   QhRR/# r,   r   )r   s   "r    r!   r-   I   s      U r"   c                	   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/   r%   r1   r2   
ValueError)r3   tokenr6   msgmsg_too_longs   &    r    _read_tokenPpmImageFile._read_tokenI   s    ww"""%jBQAl"dggll1oW4JE4CS/!Z"_?%GL\**r"   c                   V ^8  d   QhRR/# )r   r   Noner   )r   s   "r    r!   r-   e   s     7
 7
t 7
r"   c                	   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/   r7   MODESKeyErrorSyntaxError_modecustom_mimetypeintr@   _sizefloatmathisfiniter<   absinfor   _Tilesizetelltile)	r3   magic_numbermoder>   decoder_nameargsrH   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+ +H)rS   rV   rT   r_   N)
__name__
__module____qualname____firstlineno__r   format_descriptionr7   r@   rf   __static_attributes__r   r"   r    r)   r)   9   s!    F(
87
 7
r"   r)   c                  r    ] 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                   V ^8  d   QhRR/# r,   r   )r   s   "r    r!   PpmPlainDecoder.__annotate__   s     1 1U 1r"   c                	t    V P                   f   Q hV P                   P                  \        P                  4      # )N)fdr1   r   	SAFEBLOCK)r3   s   &r    _read_blockPpmPlainDecoder._read_block   s+    ww"""ww||I//00r"   c               $    V ^8  d   QhRRRRRR/# )r   blockr   startrU   r   r   )r   s   "r    r!   rr      s!     5 5u 5S 5 5r"   c                	    VP                  R V4      pVP                  RV4      pW4,          ^ 8  d   \        W44      # \        W44      # )   
   )findminmax)r3   ry   rz   abs   &&&  r    _find_comment_end!PpmPlainDecoder._find_comment_end   s=    JJue$JJue$EAIs1y43q94r"   c                    V ^8  d   QhRRRR/# )r   ry   r   r   r   )r   s   "r    r!   rr      s        e    r"   c                	d   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;   rN   )rp   r   rv   r~   )r3   ry   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                   V ^8  d   QhRR/# )r   r   	bytearrayr   )r   s   "r    r!   rr      s     & & &r"   c                   \        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    )0   1   )r   statexsizeysizer%   rv   r   joinsplitr   r<   	maketrans	translate)r3   datatotal_bytesry   tokensr=   r>   inverts   &       r    _decode_bitonalPpmPlainDecoder._decode_bitonal   s    
 {jj&&)9)99$i;&$$&E))%0EXXekkm,F(<ueW~MC$S/)   M<K0D4~~f%%r"   c                    V ^8  d   QhRRRR/# )r   re   rU   r   r   r   )r   s   "r    r!   rr      s     1 1S 1Y 1r"   c                	n   \        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# )

   rJ   rK   r"       Ns    Token too long found in data: %szChannel value is negative: z'Channel value too large for this mode: rN   )r   ra   r   getmodebandsr   r   r   r%   rv   r   r   isspacepopr<   rU   roundo32r   )r3   re   r   max_lenout_byte_countout_maxbandsr   
half_tokenry   r   r>   r=   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+   r"   c                    V ^8  d   QhRRRR/# r   bufferz$bytes | Image.SupportsArrayInterfacer   ztuple[int, int]r   )r   s   "r    r!   rr     s     
 
A 
o 
r"   c                	   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;8rJ   I;32rN   rN   r   )rp   ra   r   rc   r   
set_as_rawr   )r3   r   r   rd   re   s   &&   r    decodePpmPlainDecoder.decode  ss    #99'')DGYYr]F&&v.D $		S 0fdiiGdW-r"   )rp   N)r   )rh   ri   rj   rk   	_pulls_fd__annotations__rv   r   r   r   r   r   rm   r   r"   r    ro   ro      s2    I1
5
 D&21f
 
r"   ro   c                  &    ] tR tRtRtR R ltRtR# )
PpmDecoderi,  Tc                    V ^8  d   QhRRRR/# r   r   )r   s   "r    r!   PpmDecoder.__annotate__/  s      A o r"   c                	   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# )N   rJ   rK   r   rN   r   )rt   r   rc   ra   r   r   r   r   r   r%   r1   r0   i16r   r   r   r   r   r   )r3   r   r   re   in_byte_countr   r   r   dest_lengthpixelsr   r   rd   s   &&           r    r   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)rh   ri   rj   rk   r   r   rm   r   r"   r    r   r   ,  s    I r"   r   c               (    V ^8  d   QhRRRRRRRR/# )	r   imzImage.Imager/   z	IO[bytes]filenamezstr | bytesr   rC   r   )r   s   "r    r!   r!   M  s(      k y K D r"   c                   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   rG   r   r   r   rL   r   r   r   rI   r   zcannot write mode z as PPMs   
%d %d
s   255
s   65535
s   -1.0
rE   N)rJ   zI;16)r   r   rN   rO   )ra   OSErrorwriter]   r   _saver\   )r   r/   r   rd   headr>   	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"   rM   rF   zimage/x-portable-anymap)z.pbmz.pgmz.ppmz.pnmz.pfm)
__future__r   rX   typingr    r   r   _binaryr   r   r   r	   r   r2   rP   r'   r)   	PyDecoderro   r   r   register_openr   register_saveregister_decoderregister_extensionsregister_mimer   r"   r    <module>r      s*    #    !  !
 + 
3	3	5	3	3	5v	3
Cvv	$Vc
9&& c
TFi)) FR$$ BD   L''w ?   L'' /   uj )   {O 4   ,--/W X   L'')B Cr"   