
    fh|!                       S SK Jr  S SKrS SKJr  SSKJrJr  SSKJ	r
  SSKJr  SSKJr  SS	 jr " S
 S\R                  5      r " S S\R                   5      rSS jr " S S\R&                  5      r\R*                  " \R,                  \\5        \R.                  " S\5        \R0                  " \R,                  S5        \R2                  " \R,                  \5        \R4                  " S\5        g)    )annotationsN)IO   )Image	ImageFile)i32be)o8)o32bec                $    U R                  S5      $ )N   qoif)
startswith)prefixs    J/var/www/auris/envauris/lib/python3.13/site-packages/PIL/QoiImagePlugin.py_acceptr      s    W%%    c                  &    \ rS rSrSrSrSS jrSrg)QoiImageFile   QOIzQuite OK Imagec                >   [        U R                  R                  S5      5      (       d  Sn[        U5      e[	        U R                  R                  S5      5      [	        U R                  R                  S5      5      4U l        U R                  R                  S5      S   nUS:X  a  SOSU l        U R                  R                  S[        R                  5        [        R                  " SS	U R
                  -   U R                  R                  5       5      /U l        g )
N   znot a QOI filer   r      RGBRGBAqoir   r   )r   fpreadSyntaxErrori32_size_modeseekosSEEK_CURr   _Tiletelltile)selfmsgchannelss      r   _openQoiImageFile._open   s    tww||A''"Cc""a)3tww||A+??
77<<?1%&!mU
Q$__UFTZZ,?PQ	r   )r"   r!   r(   N)returnNone)__name__
__module____qualname____firstlineno__formatformat_descriptionr,   __static_attributes__ r   r   r   r      s    F)Rr   r   c                  J    \ rS rSr% SrSrS\S'   0 rS\S'   SS jrSS	 jr	S
r
g)
QoiDecoder)   TNzbytes | bytearray | None_previous_pixelzdict[int, bytes | bytearray]_previously_seen_pixelsc                j    Xl         Uu  p#pEUS-  US-  -   US-  -   US-  -   S-  nXR                  U'   g )Nr            @   r;   r<   )r)   valuergba
hash_values          r   _add_to_previous_pixels"QoiDecoder._add_to_previous_pixels.   sG    $
a!ea!ema!e+a"f4:
38$$Z0r   c           
       ^ ^ T R                   c   e0 T l        [        S5      T l        [        5       n[        R
                  " T R                  5      nT R                  R                  T R                  R                  -  U-  n[        U5      U:  GaJ  T R                   R                  S5      S   nUS:X  aG  T R                  (       a6  [        T R                   R                  S5      5      T R                  SS  -   nGOUS:X  a  T R                   R                  S5      nGOUS-	  nUS:X  a,  US	-  nT R                  R                  U[        S
5      5      nGOSUS:X  a  T R                  (       an  [        T R                  S   US-  S-	  -   S-
  S-  T R                  S   US-  S-	  -   S-
  S-  T R                  S   US-  -   S-
  S-  T R                  S   45      nOUS:X  a  T R                  (       aw  T R                   R                  S5      S   n	US	-  S-
  mU	S-  S-	  S-
  n
U	S-  S-
  n[        [        UU 4S j[        U
SU45       5       5      5      nUT R                  SS  -  nO@US:X  a:  T R                  (       a)  US	-  S-   nT R                  nUS:X  a  US S nX&U-  -  nGM(  T R                  W5        US:X  a  US S nX&-  n[        U5      U:  a  GMJ  T R!                  U5        g)Nr   r   r      r   r      r   rM   r      ?   r   r   r   r   0                         c              3  X   >#    U  H  u  pTR                   U   T-   U-   S -  v   M!     g7f)rT   N)r;   ).0idiff
diff_greenr)   s      r   	<genexpr>$QoiDecoder.decode.<locals>.<genexpr>^   s4      +N "11!4zADHCO+Ns   '*)r   )fdr<   	bytearrayr;   r   getmodebandsmodestatexsizeysizelenr   gettuple	enumeraterI   
set_as_raw)r)   bufferdatabandsdest_lengthbyterC   opop_indexsecond_bytediff_red	diff_blue
run_lengthr^   s   `            @r   decodeQoiDecoder.decode5   s   ww"""')$(8{""499-jj&&)9)99EA$i+%77<<?1%Dz!d&:&:!$'',,q/2T5I5I!"5MM#QQY7#j0H 88<< )L"9E 1W!5!5%!11!4
9Jq8PQTUU!"!11!4
9Jq8PQTUU!"!11!4z8IJQNRUU 003	E 1W!5!5"&'',,q/!"4K"&"3r!9J!,z!9a ?1DH!,z!9Q >I% +4h95M+N E T11!"55E1W!5!5"&"3q!8J 00Ez %bq	J..D((/zbq	MDc $i+%d 	r   rB   )rC   zbytes | bytearrayr.   r/   )rn   z$bytes | Image.SupportsArrayInterfacer.   ztuple[int, int])r0   r1   r2   r3   	_pulls_fdr;   __annotations__r<   rI   ry   r6   r7   r   r   r9   r9   )   s(    I04O-4<>9>9<r   r9   c           	     J   U R                   S:X  a  SnO U R                   S:X  a  SnOSn[        U5      eU R                  R                  S5      S:X  a  SOS	nUR	                  S
5        UR	                  [        U R                  S   5      5        UR	                  [        U R                  S	   5      5        UR	                  [        U5      5        UR	                  [        U5      5        [        R                  " X[        R                  " SSU R                  -   5      /5        g )Nr   r   r   r   zUnsupported QOI image mode
colorspacesRGBr   r   r   r   r   )re   
ValueErrorencoderinforj   writeo32sizer	   r   _saver&   )imr   filenamer+   r*   r~   s         r   r   r   t   s    	ww%	F	*onn((6&@aJHHWHHS_HHS_HHR\HHR
^OOBY__UFRWW4DEFGr   c                  X    \ rS rSr% SrSrS\S'   0 rS\S'   SrSS	 jr	SS
 jr
SS jrSrg)
QoiEncoder   TNz tuple[int, int, int, int] | Noner;   z$dict[int, tuple[int, int, int, int]]r<   r   c                J    [        SU R                  S-
  -  5      nSU l        U$ )N   r   r   )r	   _run)r)   ro   s     r   
_write_runQoiEncoder._write_run   s%    *		A./	r   c                *    X-
  S-  nUS:  a  US-  nU$ )NrM      rT   r7   )r)   leftrightresults       r   _deltaQoiEncoder._delta   s#    ,#%S=cMFr   c                d   U R                   c   eSS0U l        SU l        [        5       nU R                   R                  u  p4[
        R                  " U R                  5      n[        U5       GH  n[        U5       GHm  nU R                   R                  Xv45      nUS:X  a  / UQSP7nXR                  :X  a9  U =R                  S-  sl
        U R                  S:X  a  X R                  5       -  nGOU R                  (       a  X R                  5       -  nUu  ppU	S-  U
S-  -   US	-  -   US
-  -   S-  nU R                  R                  U5      U:X  a  U[        U5      -  nGOU R                  (       Gao  XR                  U'   U R                  u  pnnUU:X  Ga.  U R                  X5      nU R                  X5      nU R                  UU5      nSUs=::  a  S:  aJ  O  OGSUs=::  a  S:  a:  O  O7SUs=::  a  S:  a*  O  O'U[        SUS-   S-  -  US-   S-  -  US-   -  5      -  nOU R                  UU5      nU R                  UU5      nSUs=::  a  S:  aR  O  OOSUs=::  a  S:  aB  O  O?SUs=::  a  S:  a2  O  O/U[        SUS-   -  5      -  nU[        US-   S-  US-   -  5      -  nO<U[        S5      -  nU[        US S 5      -  nOU[        S5      -  nU[        U5      -  nXl        GMp     GM     U R                  (       a  X R                  5       -  nU[        S5      -  n[!        U5      SU4$ )Nr   rQ   rL   r   rM   r   >   r>   r?   r@   rA   rS   r   irX   irV   r   rN   )r   r   r   r   r   r   r   r   )r   r<   r;   rc   r   r   rd   re   rangegetpixelr   r   rj   r	   r   bytesri   )r)   bufsizero   whrp   yxpixelrD   rE   rF   rG   rH   prev_rprev_gprev_bprev_adelta_rdelta_gdelta_bdelta_grdelta_gbs                          r   encodeQoiEncoder.encode   s   ww"""()<'8$-{ww||""499-qA1X((!0A:)eMSME000IINIyyB 11yy 11!&JA!"#a%!a%-!a%"7!b&"@B!FJ3377
CuL:.---CH44Z@9=9M9M6!Q;&*kk!&<G&*kk!&<G&*kk!V&<G !#g 1 1$&'$5A$5$&'$5A$5 $$.'.{q&8%9'.{q&8%9 (/{%4)" !" ,0;;w+H+/;;w+H$&($6Q$6(+w(;(;(*h(:(:$(B(2gl(C-& %&D %)B1/BhQRl/S,T$TD$(BzN$:D$(E%),<$<D BzN2D E%L0D',$q  v 99OO%%D.//4y!T!!r   )r;   r<   r   )r.   r   )r   intr   r   r.   r   )r   r   r.   ztuple[int, int, bytes])r0   r1   r2   r3   
_pushes_fdr;   r|   r<   r   r   r   r   r6   r7   r   r   r   r      s3    J8<O5<DFAFD
I"r   r   r   z.qoi)r   r   r.   bool)r   zImage.Imager   z	IO[bytes]r   zstr | bytesr.   r/   )
__future__r   r$   typingr    r   r   _binaryr   r    r	   r
   r   r   r   	PyDecoderr9   r   	PyEncoderr   register_openr4   register_decoderregister_extensionregister_saveregister_encoderr7   r   r   <module>r      s    # 	   !  !&R9&& R$H$$ HVH(Z"$$ Z"z   L''w ?   uj )   ,,f 5   L'' /   uj )r   