
    h4hg0                    @   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j0                  ej.                  e        ej2                  de        ej2                  de        ej4                  ej.                  g d        ej6                  ej.                  d       y)     )annotationsN)IO   )Image	ImageFile)i16be)o8)o32les    	
1LRGBCMYKFPRGBA)   P1   P2   P3   P4   P5   P6s   P0CMYK   Pfs   PyPs   PyRGBAs   PyCMYKc                V    t        |       dk\  xr | j                  d      xr | d   dv S )N      Pr   s	   0123456fy)len
startswith)prefixs    J/var/www/flask-api/venv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py_acceptr    1   s/    v;!U 1 1$ 7UF1I<UU    c                  ,    e Zd ZdZdZddZddZddZy)	PpmImageFilePPMzPbmplus imagec                    | j                   J d}t        d      D ]/  }| j                   j                  d      }|r|t        v r |S ||z  }1 |S )Nr!      r   )fprangereadb_whitespace)selfmagic_cs       r   _read_magiczPpmImageFile._read_magic=   s_    ww"""q 	AQA\) QJE		
 r!   c                   | j                   J d}t        |      dk  r| j                   j                  d      }|snb|t        v r|s7nV|dk(  r=| j                   j                  d      dvr	 | j                   j                  d      dvrz||z  }t        |      dk  r|sd}t	        |      t        |      dkD  rd|z  }t	        |      |S )Nr!   
   r      #s   
z Reached EOF while reading headers!   Token too long in file header: %s)r'   r   r)   r*   
ValueError)r+   tokenr.   msgmsg_too_longs        r   _read_tokenzPpmImageFile._read_tokenI   s    ww"""%jBQAl"dggll1oW4 ggll1oW4QJE %jB 4CS/!Z"_?%GL\**r!   c                   | j                   J | j                         }	 t        |   }|| _        |dv rd| _        n|dv rd| _        n|dv rd| _        t        | j                               t        | j                               f| _	        d}|d	v rd
}|dk(  rd}n|dk(  rgt        | j                               }|dk(  st        j                  |      sd}t        |      t        |      | j                  d<   |dk  rdnd}|ddf}njt        | j                               }d|cxk  rdk  sn d}t        |      |dkD  r|dk(  rd| _        |}|d
k7  r|dk(  r|dk(  rd}n|dk7  rd}|dk(  r|n||f}t!        j"                  |d| j$                  z   | j                   j'                         |      g| _        y # t        $ r d}t	        |      w xY w)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'   r/   MODESKeyErrorSyntaxError_modecustom_mimetypeintr7   _sizefloatmathisfiniter3   absinfor   _Tilesizetelltile)	r+   magic_numbermoder5   decoder_nameargsr<   rawmodemaxvals	            r   _openzPpmImageFile._opene   s   ww"""'')	#&D 
>)#<D ^+#=D ^+#<D ))+,c$2B2B2D.EE
00&L 3;DS[$**,-E|4==#79 o%!$UDIIg!&gGQ#D))+,Fv%%I o%| 
G{*U?ts{%Gs]#(L*e37'69JDOOL&499*<dggllndS
	_  	#"Cc""	#s   	F4 4GNreturnbytes)r]   None)__name__
__module____qualname__formatformat_descriptionr/   r7   r[    r!   r   r#   r#   9   s    F(
87
r!   r#   c                  N    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
y
)PpmPlainDecoderTbool_comment_spansc                p    | j                   J | j                   j                  t        j                        S )N)fdr)   r   	SAFEBLOCK)r+   s    r   _read_blockzPpmPlainDecoder._read_block   s+    ww"""ww||I//00r!   c                    |j                  d|      }|j                  d|      }||z  dkD  rt        ||      S t        ||      S )N   
   r   )findminmax)r+   blockstartabs        r   _find_comment_endz!PpmPlainDecoder._find_comment_end   sC    JJue$JJue$EAIs1ay43q!94r!   c                0   | j                   r4|r2| j                  |      }|dk7  r	||dz   d  }n| j                         }|r2d| _         	 |j                  d      }|dk(  r	 |S | j                  ||      }|dk7  r|d | ||dz   d  z   }n|d | }d| _         	 |S O)Nr>   r   FTr2   )ri   rx   rm   rq   )r+   rt   comment_endcomment_starts       r   _ignore_commentsz PpmPlainDecoder._ignore_comments   s    "44U;"$ "+/"34E !,,.E  $!JJt,M"  00FKb  n}-kAo6G0HH n}-&*# r!   c                   t               }| j                  j                  | j                  j                  z  }t	        |      |k7  r| j                         }|snl| j                  |      }dj                  |j                               }|D ]   }|dvsdt        |g      z  }t        |       ||z   d| }t	        |      |k7  rt        j                  dd      }|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!   )0   1   s   Invalid token for this mode: %sNs   01s    )	bytearraystatexsizeysizer   rm   r|   joinsplitr^   r3   	maketrans	translate)r+   datatotal_bytesrt   tokensr4   r5   inverts           r   _decode_bitonalzPpmPlainDecoder._decode_bitonal   s    
 {jj&&)9)99$i;&$$&E))%0EXXekkm,F *(<ueW~MC$S/)* 6M<K0D $i;& 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        |      |k7  rO| j                         }	|	s|rt        d      }	n	 |S | j                  |	      }	|r||	z   }	d}|	j                         }
|	rG|	d	d  j                         s4|
j                         }t        |      |kD  rd
|d |dz    z  }t        |      |
D ]  }t        |      |kD  rd
|d |dz    z  }t        |      t        |      }|dk  rd| }t        |      ||kD  rd| }t        |      t        ||z  |z        }|| j                  dk(  rt!        |      n
t#        |      z  }t        |      |k(  s n t        |      |k7  rO|S )Nr1   r@      r   rA   r?   r!       r>   s    Token too long found in data: %sr   zChannel value is negative: z'Channel value too large for this mode: )r   rV   r   getmodebandsr   r   r   r   rm   r|   r   isspacepopr3   rJ   roundo32r	   )r+   rZ   r   max_lenout_byte_countout_maxbandsr   
half_tokenrt   r   r5   r4   valuemsg_strs                  r   _decode_blockszPpmPlainDecoder._decode_blocks   s   {"ii3.A99+%""499-jj&&)9)99EANR
$i;&$$&E%dOE B ? ))%0E"U* 
[[]FU23Z//1#ZZ\
z?W,;j7UV;>WW  %S/) u:'=mRS@TTC$S/)E
19 ;E7CG$W--6> GwOG$W--efnw67dii3&6E
BuIEt9+3 $i;&P r!   c                   d| _         | j                  dk(  r| j                         }d}n=| j                  d   }| j	                  |      }| j                  dk(  rdn| j                  }| j                  t        |      |       y)NFr   z1;8r>   r@   I;32r>   r   )ri   rV   r   rX   r   
set_as_rawr^   )r+   bufferr   rY   rZ   s        r   decodezPpmPlainDecoder.decode  sq    #99'')DGYYr]F&&v.D $		S 0fdiiGdW-r!   Nr\   )r   )rt   r^   ru   rJ   r]   rJ   )rt   r^   r]   r^   )r]   r   )rZ   rJ   r]   r   r   z$bytes | Image.SupportsArrayInterfacer]   ztuple[int, int])r`   ra   rb   	_pulls_fd__annotations__rm   rx   r|   r   r   r   re   r!   r   rg   rg      s-    I1
5
 D&21f
r!   rg   c                      e Zd ZdZddZy)
PpmDecoderTc                6   | 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                   j                  ||z        }	t        |	      ||z  k  rn{t        |      D ]^  }
|dk(  r|	|
   nt        |	|
|z        }t        |t        ||z  |z              }|| j                  dk(  rt        |      n
t!        |      z  }` t        |      |k  r| j                  dk(  rd	n| j                  }| j#                  t%        |      |       y
)Nr>      r   r   r@   r   rA   r?   r   r   )rk   r   rX   rV   r   r   r   r   r   r   r)   r(   i16rr   r   r   r	   r   r^   )r+   r   r   rZ   in_byte_countr   r   r   dest_lengthpixelsrw   r   rY   s                r   r   zPpmDecoder.decode/  sv   ww"""{2#c\q"ii3.A99+%""499-jj&&)9)99EANR$i+%WW\\-%"78F6{]U225\ F!.!!3F1IVQEV9W  GU56>G+C%DEdii3&6E
BuIEF $i+% !II,&$))dW-r!   Nr   )r`   ra   rb   r   r   re   r!   r   r   r   ,  s    Ir!   r   c                   | j                   dk(  rd\  }}nm| j                   dk(  rd\  }}nX| j                   dv rd\  }}nD| j                   dv rd\  }}n0| j                   d	k(  rd
\  }}nd| j                    d}t        |      |j                  |d| j                  z  z          |dk(  r|j                  d       nD|dk(  r)|dk(  r|j                  d       n(|j                  d       n|dk(  r|j                  d       | j                   d	k(  rdnd}t	        j
                  | |t	        j                  dd| j                  z   d|d|f      g       y )Nr   )r;   r   r   )r   r   )r@   zI;16)rB   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
r>   r   r9   rD   r   )rV   OSErrorwriterR   r   _saverQ   )imr'   filenamerY   headr5   	row_orders          r   r   r   M  s0   	ww#~$	C"	M	!&	O	#$	C&"277)73clHHTL277**+u}
	c>HHXHHZ 	
ggn!IOO
B(8!gq)=TUVr!   rC   r:   )z.pbmz.pgmz.ppmz.pnmz.pfmzimage/x-portable-anymap)r   r^   r]   rh   )r   zImage.Imager'   z	IO[bytes]r   zstr | bytesr]   r_   )
__future__r   rM   typingr    r   r   _binaryr   r   r	   r
   r   r*   rE   r    r#   	PyDecoderrg   r   r   register_openrc   register_saveregister_decoderregister_extensionsregister_mimere   r!   r   <module>r      s     #    !  !
 + 	$Vc
9&& c
TFi)) FR$$ BD   L''w ?   L'' /   uj )   {O 4   ,--/W X   L'')B Cr!   