
    zvgB0                       d dl mZ d dlZ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dZd)dZ G d dej                  Z G d dej                  Z G d dej                  Zd*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 )+    )annotationsN)IO   )Image	ImageFile)i16be)o8)o32les    	
1LRGBCMYKFPRGBA)   P1   P2   P3   P4   P5   P6s   P0CMYK   Pfs   PyPs   PyRGBAs   PyCMYKprefixbytesreturnboolc                2    | dd         dk    o	| d         dv S )Nr   r      Ps	   0123456fy )r   s    O/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/PIL/PpmImagePlugin.py_acceptr!   1   s#    !A#;$<6!9#<<    c                  .    e Zd ZdZdZd
dZd
dZddZd	S )PpmImageFilePPMzPbmplus imager   r   c                    | j         J d}t          d          D ].}| j                             d          }|r	|t          v r n||z  }/|S )Nr"      r   )fprangereadb_whitespace)selfmagic_cs       r    _read_magiczPpmImageFile._read_magic=   sb    w"""q 	 	AQA \))QJEEr"   c                   | j         J 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: )r(   lenr*   r+   
ValueErrordecode)r,   tokenr/   msgs       r    _read_tokenzPpmImageFile._read_tokenI   s   w"""%jjBQA l"" dgll1ooW44 gll1ooW44QJE %jjB  	"4CS//!ZZ"__DELLNNDDCS//!r"   Nonec                   | j         J |                                 }	 t          |         }n# t          $ r d}t	          |          w xY w|| _        |dv rd| _        n|dv rd| _        n|dv rd| _        t          |                                           t          |                                           f| _	        d}|d	v rd
}|dk    rd}n|dk    rst          |                                           }|dk    st          j        |          sd}t          |          t          |          | j        d<   |dk     rdnd}|ddf}nt          |                                           }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}n|dk    rd}|dk    r|n||f}t!          j        |d| j        z   | j                                         |          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_plainr   1;Ir   g        z!scale must be finite and non-zeroscaler   F;32FzF;32BFi   z1maxval must be greater than 0 and less than 65536   r   I  I;16Bppmr   r   )r(   r0   MODESKeyErrorSyntaxError_modecustom_mimetypeintr9   _sizefloatmathisfiniter5   absinfor   _Tilesizetelltile)	r,   magic_numbermoder8   decoder_nameargsr?   rawmodemaxvals	            r    _openzPpmImageFile._opene   s_   w"""''))	#&DD 	# 	# 	#"Cc"""	# 
>))#<D  ^++#=D  ^++#<D ))++,,c$2B2B2D2D.E.EE
000&L 3;;DDS[[$**,,--E||4=#7#7|9 oo%!$UDIg!&ggGQ#DD))++,,Fv%%%%%%%%I oo%|| 
G{**U??ts{{%GGs]]#(L*e3377'69JDOL&49*<dgllnndSS
			s	   - A	Nr   r   )r   r:   )__name__
__module____qualname__formatformat_descriptionr0   r9   r^   r   r"   r    r$   r$   9   s[        F(
 
 
 
   87
 7
 7
 7
 7
 7
r"   r$   c                  P    e Zd ZU dZded<   ddZdddZddZddZddZ	ddZ
dS )PpmPlainDecoderTr   _comment_spansr   r   c                \    | j         J | j                             t          j                  S )N)fdr*   r   	SAFEBLOCK)r,   s    r    _read_blockzPpmPlainDecoder._read_block   s'    w"""w||I/000r"   r   blockstartrM   c                    |                     d|          }|                     d|          }||z  dk    rt          ||          nt          ||          S )N   
   r   )findminmax)r,   rl   rm   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 )NrA   r   FTr3   )rg   rv   rk   rq   )r,   rl   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"   	bytearrayc                   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    )r{   statexsizeysizer4   rk   rz   joinsplitr   r5   	maketrans	translate)r,   datatotal_bytesrl   tokensr7   r8   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"   r]   c                F   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nz| 	                    |	          }	|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          |          }|dk     rd| }t          |          ||k    rd| }t          |          t          ||z  |z            }|| j        dk    rt!          |          nt#          |          z  }t          |          |k    r nt          |          |k    |S )Nr2   rC      r   rD   rB   r"       rA   s    Token too long found in data: %sr   zChannel value is negative: z'Channel value too large for this mode: )r{   rY   r   getmodebandsr   r   r   r4   rk   rz   r   isspacepopr5   rM   roundo32r	   )r,   r]   r   max_lenout_byte_countout_maxbandsr   
half_tokenrl   r   r8   r7   valuemsg_strs                  r    _decode_blockszPpmPlainDecoder._decode_blocks   s^   {{"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

199CECCG$W---6>>OOOG$W---efnw677di3&6&6E


BuIIEt99++E ,M $ii;&&P r"   buffer$bytes | Image.SupportsArrayInterfacetuple[int, int]c                
   d| _         | j        dk    r|                                 }d}n6| j        d         }|                     |          }| j        dk    rdn| j        }|                     t          |          |           dS )NFr   z1;8rA   rC   I;32rA   r   )rg   rY   r   r[   r   
set_as_rawr   )r,   r   r   r\   r]   s        r    r6   zPpmPlainDecoder.decode  s    #9''))DGGYr]F&&v..D $	S 0 0ffdiGdW---ur"   Nr_   )r   )rl   r   rm   rM   r   rM   )rl   r   r   r   )r   r{   )r]   rM   r   r{   r   r   r   r   )r`   ra   rb   	_pulls_fd__annotations__rk   rv   rz   r   r   r6   r   r"   r    rf   rf      s         I1 1 1 1
5 5 5 5 5
       D& & & &21 1 1 1f
 
 
 
 
 
r"   rf   c                      e Zd ZdZddZdS )	
PpmDecoderTr   r   r   r   c                4   | j         J 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                  }| j        j        | j        j        z  |z  |z  }t          |          |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          |          |k     | j        dk    rd	n| j        }|                     t%          |          |           d
S )NrA      r      rC   r   rD   rB   r   r   )ri   r{   r[   rY   r   r   r   r   r   r4   r*   r)   i16rr   r   r   r	   r   r   )r,   r   r   r]   in_byte_countr   r   r   dest_lengthpixelsru   r   r\   s                r    r6   zPpmDecoder.decode/  s   w"""{{2#c\\q"i3..A9++%%"49--j&)99EANR$ii+%%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+%% !I,,&&$)dW---ur"   Nr   )r`   ra   rb   r   r6   r   r"   r    r   r   ,  s-        I     r"   r   imImage.Imager(   	IO[bytes]filenamestr | bytesr:   c                   | j         dk    rd\  }}nZ| j         dk    rd\  }}nI| j         dv rd\  }}n:| j         dv rd\  }}n+| j         d	k    rd
\  }}nd| j          d}t          |          |                    |d| j        z  z              |dk    r|                    d           nS|dk    r2|dk    r|                    d           n1|                    d           n|dk    r|                    d           | j         d	k    rdnd}t	          j        | |t	          j        dd| j        z   d|d|f          g           d S )Nr   )r>   r   r   )r   r   )rC   zI;16)rE   r   )r   r   )r   r   r   )r@   r   zcannot write mode z as PPMs   
%d %d
r   s   255
r   s   65535
r   s   -1.0
rA   r   r<   rG   r   )rY   OSErrorwriterU   r   _saverT   )r   r(   r   r\   headr8   	row_orders          r    r   r   M  s~   	w#~~$	C"	M	!	!&	O	#	#$	C&327333cllHHTL27**+++u}}
	c>>HHXHHZ    	
gnn!IO
B(8!gq)=TUUV    r"   rF   r=   )z.pbmz.pgmz.ppmz.pnmz.pfmzimage/x-portable-anymap)r   r   r   r   )r   r   r(   r   r   r   r   r:   )
__future__r   rP   typingr    r   r   _binaryr   r   r	   r
   r   r+   rH   r!   r$   	PyDecoderrf   r   r   register_openrc   register_saveregister_decoderregister_extensionsregister_mimer   r"   r    <module>r      s    # " " " " "                ! ! ! ! ! !       ! ! ! ! ! !
 + 	 	$= = = =c
 c
 c
 c
 c
9& c
 c
 c
TF F F F Fi) F F FR    $   B   D  L'w ? ? ?  L' / / /  uj ) ) )  {O 4 4 4  ,-/W/W/W X X X  L')B C C C C Cr"   