
    Rf_,                       d dl mZ ddlmZmZ ddlmZ ddlmZ ddlm	Z
 dZdd	d
dd	d
ddddd
Zd Z G d dej                  Z G d dej                  Z G d dej                  Zd Z ej        ej        ee            ej        ej        e            ej        de            ej        de            ej        ej        g d            ej        ej        d           dS )    )annotations   )Image	ImageFile)i16be)o8)o32les    	
1LRGBCMYKPRGBA)
   P1   P2   P3   P4   P5   P6s   P0CMYKs   PyPs   PyRGBAs   PyCMYKc                2    | dd         dk    o	| d         dv S )Nr   r      Ps   0123456y )prefixs    D/var/www/html/env/lib/python3.11/site-packages/PIL/PpmImagePlugin.py_acceptr   -   s#    !A#;$;6!9#;;    c                  (    e Zd ZdZdZd Zd Zd ZdS )PpmImageFilePPMzPbmplus imagec                    d}t          d          D ].}| j                            d          }|r	|t          v r n||z  }/|S )Nr      r   )rangefpreadb_whitespace)selfmagic_cs       r   _read_magiczPpmImageFile._read_magic9   sT    q 	 	AQA \))QJEEr   c                   d}t          |          dk    r| j                            d          }|sne|t          v r|s<nX|dk    r:| j                            d          dvr	 | j                            d          dv}||z  }t          |          dk    |sd}t	          |          t          |          dk    r&d|                                 }t	          |          |S )Nr   
   r      #s   
z Reached EOF while reading headerzToken too long in file header: )lenr#   r$   r%   
ValueErrordecode)r&   tokenr)   msgs       r   _read_tokenzPpmImageFile._read_tokenC   s    %jjBQA l"" dgll1ooW44 gll1ooW44QJE %jjB  	"4CS//!ZZ"__DELLNNDDCS//!r   c                   |                                  }	 t          |         }n# t          $ r d}t          |          w xY w|dv rd| _        n|dv rd| _        n|dv rd| _        d }d}|d	v rd
}t          d          D ]}t          |                                           }|dk    r|},|dk    r|}	|dk    rd| _        d}
 nc|x| _        }
O|dk    rR|}d|cxk     rdk     sn d}t          |          |dk    r|dk    rd| _        |d
k    r|dk    r	|dk    rd}
|dk    rd}|dk    r|
ddfn|
|f}||	f| _
        |dd||	f| j                                        |fg| _        d S )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_plain   r   r   r
   1;I   i   z1maxval must be greater than 0 and less than 65536   r   I  I;16Bppm)r*   MODESKeyErrorSyntaxErrorcustom_mimetyper"   intr3   _moder/   _sizer#   telltile)r&   magic_numbermoder2   maxvaldecoder_nameixr1   xsizeysizerawmodeargss               r   _openzPpmImageFile._open]   s   ''))	#&DD 	# 	# 	#"Cc"""	# >))#<D  ^++#=D  ^++#<D 000&L(( 	- 	-B((**++EQwwq3;;!$DJ#GE+//DJq6))))E))))MC$S//)C<<DCKK!$DJ;..43;;")3',".%"7"7Agv=NE\
"Q5%$8$',,..$OP			s	   $ A N)__name__
__module____qualname__formatformat_descriptionr*   r3   rQ   r   r   r   r   r   5   sQ        F(    40Q 0Q 0Q 0Q 0Qr   r   c                  8    e Zd ZdZd Zd
dZd Zd Zd Zd Z	d	S )PpmPlainDecoderTc                J    | j                             t          j                  S )N)fdr$   r   	SAFEBLOCK)r&   s    r   _read_blockzPpmPlainDecoder._read_block   s    w||I/000r   r   c                    |                     d|          }|                     d|          }||z  dk    rt          ||          nt          ||          S )N   
   r   )findminmax)r&   blockstartabs        r   _find_comment_endz!PpmPlainDecoder._find_comment_end   sN    JJue$$JJue$$EAIIs1ayyy3q!994r   c                n   | j         rA|r?|                     |          }|dk    r||dz   d          }n|                                 }|?d| _         	 |                    d          }|dk    rnH|                     ||          }|dk    r|d |         ||dz   d          z   }n|d |         }d| _         nd|S )Nr   FTr-   )_comment_spansrg   r\   r`   )r&   rc   comment_endcomment_starts       r   _ignore_commentsz PpmPlainDecoder._ignore_comments   s    	/ 
/"44U;;"$$ "+/"3"34E !,,..E  
/ $	!JJt,,M""00FFKb   n}n-kAo6G6G0HH n}n-&*#	 r   c                   t                      }| j        j        | j        j        z  }t	          |          |k    r|                                 }|sn|                     |          }d                    |                                          }|D ](}|dvr"dt          |g          z  }t          |          )||z   d|         }t	          |          |k    t                              dd          }|                    |          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   )0   1   s   Invalid token for this mode: %sNs   01s    )	bytearraystaterM   rN   r.   r\   rm   joinsplitbytesr/   	maketrans	translate)r&   datatotal_bytesrc   tokensr1   r2   inverts           r   _decode_bitonalzPpmPlainDecoder._decode_bitonal   s   
 {{j&)99$ii;&&$$&&E ))%00EXXekkmm,,F * *((<ueW~~MC$S//) ) 6M<K<0D $ii;&& 44~~f%%%r   c                   t                      }d}| j        dk    rdnd}| j        dk    rdnd}t          j        | j                  }| j        j        | j        j        z  |z  |z  }d}t          |          |k    r|                                 }	|	s|rt          d          }	nn`| 	                    |	          }	|r||	z   }	d}|	
                                }
|	rb|	d	d                                          sF|
                                }t          |          |k    rd
|d |dz            z  }t          |          |
D ]}t          |          |k    rd
|d |dz            z  }t          |          t          |          }||k    rd| }t          |          t          ||z  |z            }|| j        dk    rt!          |          nt#          |          z  }t          |          |k    r nt          |          |k    |S )Nr,   r;      r   r<   r:   F    ri   s    Token too long found in data: %sz'Channel value too large for this mode: )rq   rI   r   getmodebandsrr   rM   rN   r.   r\   rm   rt   isspacepopr/   rC   roundo32r   )r&   rJ   rx   max_lenout_byte_countout_maxbandsry   
half_tokenrc   rz   r2   r1   values                 r   _decode_blockszPpmPlainDecoder._decode_blocks   s8   {{"i3..A9++%%"49--j&)99EANR
$ii;&&$$&&E  %dOOEE ))%00E #"U*"
[[]]F *U233Z//11 *#ZZ\\
z??W,,;j7UV;>WW  %S//)  u::''=mRSm@TTC$S//)E

6>>KEKKC$S//)efnw677di3&6&6E


BuIIEt99++E ,G $ii;&&J r   c                
   d| _         | j        dk    r|                                 }d}n6| j        d         }|                     |          }| j        dk    rdn| j        }|                     t          |          |           dS )NFr
   z1;8ri   r;   I;32ri   r   )rj   rI   r|   rP   r   
set_as_rawru   )r&   bufferrx   rO   rJ   s        r   r0   zPpmPlainDecoder.decode
  s    #9''))DGGYr]F&&v..D $	S 0 0ffdiGdW---ur   N)r   )
rR   rS   rT   	_pulls_fdr\   rg   rm   r|   r   r0   r   r   r   rX   rX      sz        I1 1 15 5 5 5
     D& & &2. . .`
 
 
 
 
r   rX   c                      e Zd ZdZd ZdS )
PpmDecoderTc                X   t                      }| j        d         }|dk     rdnd}| j        dk    rdnd}| j        dk    rdnd}t          j        | j                  }t          |          | j        j        | j        j        z  |z  |z  k     r| j	        
                    ||z            }t          |          ||z  k     rnt          |          D ]r}	|dk    r||	         nt          ||	|z            }
t          |t          |
|z  |z                      }
|| j        dk    rt          |
          nt!          |
          z  }st          |          | j        j        | j        j        z  |z  |z  k     | j        dk    rd	n| j        }|                     t%          |          |           d
S )Nri      r   r9   r;   r~   r<   r:   r   r   )rq   rP   rI   r   r   r.   rr   rM   rN   rZ   r$   r"   i16ra   r   r   r   r   ru   )r&   r   rx   rJ   in_byte_countr   r   r   pixelsrf   r   rO   s               r   r0   zPpmDecoder.decode  s   {{2#c\\q"i3..A9++%%"49--$ii$**TZ-==EVVVW\\-%"788F6{{]U2225\\ F F!.!!3!3F1IIVQEV9W9W  GU56>G+C%D%DEEdi3&6&6E


BuIIE $ii$**TZ-==EVVV !I,,&&$)dW---ur   N)rR   rS   rT   r   r0   r   r   r   r   r     s(        I    r   r   c           
        | j         dk    rd\  }}nK| j         dk    rd\  }}n:| j         dk    rd\  }}n)| j         dv rd\  }}nd	| j          d
}t          |          |                    |d| j        z  z              |dk    r|                    d           n7|dk    r1|dk    r|                    d           n|                    d           t	          j        | |dd| j        z   d|ddffg           d S )Nr
   )r8   r   r   )r   r   r;   )r=   r   )r   r   )r   r   zcannot write mode z as PPMs   
%d %d
r   s   255
r   s   65535
r5   )r   r   r   r   )rI   OSErrorwritesizer   _save)imr#   filenamerO   headr2   s         r   r   r   5  s"   	w#~~$	C"	C&	O	#	#$327333cllHHTL27**+++u}}
	c>>HHXHHZ   OBeVbg%5q7Aq/JKLLLLLr   r>   r6   )z.pbmz.pgmz.ppmz.pnmzimage/x-portable-anymapN)
__future__r    r   r   _binaryr   r   r   r	   r   r%   r?   r   r   	PyDecoderrX   r   r   register_openrU   register_saveregister_decoderregister_extensionsregister_mimer   r   r   <module>r      s    # " " " " "         ! ! ! ! ! !       ! ! ! ! ! !
 + 	 	"< < <XQ XQ XQ XQ XQ9& XQ XQ XQ~@ @ @ @ @i) @ @ @F    $   <M M M6  L'w ? ? ?  L' / / /  uj ) ) )  {O 4 4 4  ,-/O/O/O P P P  L')B C C C C Cr   