K ig0 @ddlmZddlZddlmZddlmZmZddlm Z ddlm Z ddlm Z d Zd d d d d d d dddd d ZddZGddejZGddej$ZGddej$ZddZej,ej.eeej0ej.eej2deej2deej4ej.gdej6ej.dy) ) annotationsN)IO)Image ImageFile)i16be)o8)o32les 1LRGBCMYKFPRGBA) P1P2P3P4P5P6sP0CMYKPfsPyPsPyRGBAsPyCMYKcVt|dk\xr|jdxr|ddvS)NPrs 0123456fy)len startswith)prefixs X/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py_acceptr 1s/ v;!  U 1 1$ 7 UF1I )#rFTr2)rirxrmrq)r+rt comment_end comment_starts r_ignore_commentsz PpmPlainDecoder._ignore_commentss   "44U; "$"+/"34E!,,.E$!JJt,M" 00 FKb n}-kAo6G0HHn}-&*# r!ct}|jj|jjz}t ||k7r|j }|snl|j |}dj|j}|D] }|dvsdt|gz}t|||zd|}t ||k7rtjdd}|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!)01sInvalid token for this mode: %sNs01s) bytearraystatexsizeysizerrmr|joinsplitr^r3 maketrans translate)r+data total_bytesrttokensr4r5inverts r_decode_bitonalzPpmPlainDecoder._decode_bitonals {jj&&)9)99 $i;&$$&E))%0EXXekkm,F *(s Token too long found in data: %srzChannel value is negative: z'Channel value too large for this mode: )rrVr getmodebandsrrrrrmr|risspacepopr3rJroundo32r )r+rZrmax_lenout_byte_countout_maxbandsr half_tokenrtrr5r4valuemsg_strs r_decode_blockszPpmPlainDecoder._decode_blockss{"ii3.A99+%""499-jj&&)9)99EANR  $i;&$$&E%dOEB ?))%0E"U* [[]FU23Z//1#ZZ\ z?W,;j7UV;>WW%S/) u:'=mRS @TTC$S/)E 19 ;E7CG$W--6> GwOG$W--efnw67dii3&6E BuIEt9 + 3$i;&P r!cd|_|jdk(r|j}d}n=|jd}|j |}|jdk(rdn |j}|j t ||y)NFr z1;8r>r@I;32r>r)rirVrrXr set_as_rawr^)r+bufferrrYrZs rdecodezPpmPlainDecoder.decodesq# 99 '')DGYYr]F&&v.D $ S 0fdiiG d W-r!Nr\)r)rtr^rurJr]rJ)rtr^r]r^)r]r)rZrJr]rrz$bytes | Image.SupportsArrayInterfacer]ztuple[int, int]) r`rarb _pulls_fd__annotations__rmrxr|rrrrer!rrgrgs-I1 5 D&21f r!rgceZdZdZddZy) PpmDecoderTc6|jJt}|jd}|dkrdnd}|jdk(rdnd}|jdk(rdnd}t j |j}|j j|j jz|z|z}t||kr|jj||z} t| ||zkrn{t|D]^} |dk(r| | nt| | |z} t|t| |z |z} ||jdk(r t| n t!| z }`t||kr|jdk(rd n |j} |j#t%|| y ) Nr>rrr@rrAr?rr)rkrrXrVrrrrrrr)r(i16rrrrr rr^) r+rrrZ in_byte_countrrr dest_lengthpixelsrwrrYs rrzPpmDecoder.decode/svww"""{2#c\q "ii3.A99+%""499-jj&&)9)99EANR $i+%WW\\-%"78F6{]U225\ F!.!!3F1IVQEV9WGU56>G+C%DEdii3&6E BuIE  F $i+%!II,&$)) d W-r!Nr)r`rarbrrrer!rrr,s Ir!rc |jdk(rd\}}nm|jdk(rd\}}nX|jdvrd\}}nD|jdvrd\}}n0|jd k(rd \}}nd |jd }t||j|d |jzz|dk(r|jdnD|dk(r)|dk(r|jdn(|jdn|dk(r|jd|jd k(rdnd}t j ||t j dd|jzd|d|fgy)Nr )r;rr )r r)r@zI;16)rBr)r r)r rr)r=rzcannot write mode z as PPMs %d %d rs255 rs65535 rs-1.0 r>rr9rDr)rVOSErrorwriterRr_saverQ)imr'filenamerYheadr5 row_orders rrrMs0 ww#~$  C"  M !&  O #$  C& "277)73clHHTL277* *+ u}   c> HHX  HHZ  ggn!I OO B(8!gq)=TUVr!rCr:)z.pbmz.pgmz.ppmz.pnmz.pfmzimage/x-portable-anymap)rr^r]rh)rz Image.Imager'z IO[bytes]rz str | bytesr]r_) __future__rrMtypingrrr_binaryrrr r rr*rEr r# PyDecoderrgrr register_openrc register_saveregister_decoderregister_extensions register_mimerer!rrs  # !! +          $Vc 9&&c TFi))FR$$BDL''w?L''/uj){O4,--/WXL'')BCr!