+
     i|!  c                  s   ^ RI Ht ^ RIt^ RIHt ^RIHtHt ^RIH	t
 ^RIHt ^RIHt R R	 lt ! R
 R]P                  4      t ! R R]P                   4      tR R lt ! R R]P&                  4      t]P*                  ! ]P,                  ]]4       ]P.                  ! R]4       ]P0                  ! ]P,                  R4       ]P2                  ! ]P,                  ]4       ]P4                  ! R]4       R# )    )annotationsN)IO)Image	ImageFile)i32be)o8)o32bec                    V ^8  d   QhRRRR/# )   prefixbytesreturnZbool format   "9/usr/lib64/python3.14/site-packages/PIL/QoiImagePlugin.py__annotate__r      s     & &E &d &    c                s$    V P                  R 4      # )   qoif)Z
startswith)r
   s   &r   _acceptr      s    W%%r   c                  s*    ] tR t^tRtRtR R ltRtR# )QoiImageFileZQOIzQuite OK Imagec                   V ^8  d   QhRR/# )r	   r   Noner   r   r   r   r   ZQoiImageFile.__annotate__   s     R Rt Rr   c                	sT   \        V P                  P                  ^4      4      '       g   Rp\        V4      h\	        V P                  P                  ^4      4      \	        V P                  P                  ^4      4      3V n        V P                  P                  ^4      ^ ,          pV^8X  d   RMRV n        V P                  P                  ^\        P                  4       \        P                  ! RRV P
                  ,           V P                  P                  4       4      .V n        R# )i   znot a QOI fileRGBRGBAqoiNr    r    )r   fpreadZSyntaxErrori32_size_modeZseekosZSEEK_CURr   _TileZtelltile)selfmsgchannelss   &  r   _openZQoiImageFile._open   s    tww||A''"Cc""a)3tww||A+??
77<<?1%&!mU
Q$__UFTZZ,?PQ	r   )r!   r    r$   N)__name__
__module____qualname____firstlineno__r   Zformat_descriptionr(   __static_attributes__r   r   r   r   r      s    F)R Rr   r   c                  sP    ] tR t^)t$ RtRtR]R&   / tR]R&   R R ltR	 R
 lt	Rt
R# )
QoiDecoderTNzbytes | bytearray | None_previous_pixelzdict[int, bytes | bytearray]_previously_seen_pixelsc               r   )r	   valuezbytes | bytearrayr   r   r   r   r   r   r   QoiDecoder.__annotate__.   s     9 9-> 94 9r   c                	s    Wn         Vw  r#rEV^,          V^,          ,           V^,          ,           V^,          ,           ^@,          pWP                  V&   R# )   Nr/   r0   )r%   r1   rgba
hash_values   &&     r   _add_to_previous_pixelsZ"QoiDecoder._add_to_previous_pixels.   sG    $
a!ea!ema!e+a"f4:
38$$Z0r   c               r   )r	   bufferz$bytes | Image.SupportsArrayInterfacer   ztuple[int, int]r   r   r   r   r   r2   5   s     < <A <o <r   c           
     	s  a a S P                   f   Q h/ S n        \        R4      S n        \        4       p\        P
                  ! S P                  4      pS P                  P                  S P                  P                  ,          V,          p\        V4      V8  Ed   S P                   P                  ^4      ^ ,          pV^8X  dQ   S P                  '       d?   \        S P                   P                  ^4      4      S P                  R,          ,           pEMmV^8X  d   S P                   P                  ^4      pEMIV^,	          pV^ 8X  d1   V^?,          pS P                  P                  V\        R4      4      pEM	V^8X  d   S P                  '       d   \        S P                  ^ ,          V^0,          ^,	          ,           ^,
          R,          S P                  ^,          V^,          ^,	          ,           ^,
          R,          S P                  ^,          V^,          ,           ^,
          R,          S P                  ^,          34      pEM9V^8X  d   S P                  '       d   S P                   P                  ^4      ^ ,          p	V^?,          ^ ,
          oV	^,          ^,	          ^,
          p
V	^,          ^,
          p\        \        ;QJ d$    . VV 3R l\        V
^ V34       4       F  NK  	  5M! VV 3R l\        V
^ V34       4       4      4      pVS P                  R,          ,          pMWV^8X  dQ   S P                  '       d?   V^?,          ^,           pS P                  pV^8X  d
   VR,          pW&V,          ,          pEK  S P                  X4       V^8X  d
   VR,          pW&,          pEK#  S P!                  V4       R# )N:r3   NN   c              3  sx   <"   T F/  w  rSP                   V,          S,           V,           R ,          x  K1  	  R# 5i)r<   N)r/   )Z.0ZiZdiff
diff_greenr%   s   &  r   Z	<genexpr>Z$QoiDecoder.decode.<locals>.<genexpr>^   s7      +N "11!4zADHCOO+Ns   7:Nr3   Nr    r    r       r    r    r    r    )ir    )Zfdr0   	bytearrayr/   r   getmodebandsmodeZstateZxsizeZysizelenr   getZtupleZ	enumerater:   Z
set_as_raw)r%   r;   databandsZdest_lengthZbyter1   ZopZop_indexZsecond_byteZdiff_redZ	diff_blueZ
run_lengthr=   s   f&           @r   decodeZ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!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!5"&'',,q/!"4K"&"3r!9J!,z!9a ?1DH!,z!9Q >I% +4h95M+N +4h95M+N E T11"55E1W!5!5!5"&"3q!8J 00Ez %b	J..D((/zb	MDr   r4   )r)   r*   r+   r,   Z	_pulls_fdr/   __annotations__r0   r:   rI   r-   r   r   r   r.   r.   )   s-    I04O-4<>9>9< <r   r.   c               s(    V ^8  d   QhRRRRRRRR/# )	r	   imzImage.Imager   z	IO[bytes]filenamezstr | bytesr   r   r   r   r   r   r   r   t   s.     H Hk Hy HK HD Hr   c           	     sj   V P                   R 8X  d   ^pM!V P                   R8X  d   ^pMRp\        V4      hV P                  P                  R4      R8X  d   ^ M^pVP	                  R4       VP	                  \        V P                  ^ ,          4      4       VP	                  \        V P                  ^,          4      4       VP	                  \        V4      4       VP	                  \        V4      4       \        P                  ! W\        P                  ! RRV P                  ,           4      .4       R# )	r   r   zUnsupported QOI image mode
colorspaceZsRGBr   r   Nr   )rD   Z
ValueErrorZencoderinforF   Zwriteo32sizer   r   _saver#   )rK   r   rL   r'   r&   rM   s   &&&   r   rP   rP   t   s    	ww%	F	*onn((6&@aJHHWHHS_HHS_HHR\HHR
^OOBY__UFRWW4DEFGr   c                  s`    ] tR t^t$ RtRtR]R&   / tR]R&   ^ tR R lt	R	 R
 lt
R R ltRtR# )
QoiEncoderTNz tuple[int, int, int, int] | Noner/   z$dict[int, tuple[int, int, int, int]]r0   c               r   )r	   r   r   r   r   r   r   r   QoiEncoder.__annotate__   s      E r   c                	sZ    \        ^V P                  ^,
          ,          4      p^ V n        V# )i   )r   _run)r%   rG   s   & r   
_write_runZQoiEncoder._write_run   s%    *		A./	r   c               s$    V ^8  d   QhRRRRRR/# )r	   leftintrightr   r   r   r   r   r   rR      s!      3 s s r   c                	sD    W,
          ^,          pV^8  d
   VR,          pV# )r@   r<   r   )r%   rU   rW   Zresults   &&& r   _deltaZQoiEncoder._delta   s#    ,#%S=cMFr   c               r   )r	   bufsizerV   r   ztuple[int, int, bytes]r   r   r   r   r   rR      s     I" I"c I"&< I"r   c                	s   V P                   f   Q h^ R/V n        RV n        \        4       pV P                   P                  w  r4\
        P                  ! V P                  4      p\        V4       EF  p\        V4       EF  pV P                   P                  Wv34      pV^8X  d   . VO^N5pWP                  8X  dC   V ;P                  ^,          un
        V P                  ^>8X  d   W P                  4       ,          pEMV P                  '       d   W P                  4       ,          pVw  rrV	^,          V
^,          ,           V^,          ,           V^,          ,           ^@,          pV P                  P                  V4      V8X  d   V\        V4      ,          pEMV P                  '       Ed   WP                  V&   V P                  w  rppVV8X  Ed   V P                  W4      pV P                  W4      pV P                  VV4      pRTu;8:  d   ^8  ds   M MoRTu;8:  d   ^8  da   M M]RTu;8:  d   ^8  dO   M MKV\        ^@V^,           ^,          ,          V^,           ^,          ,          V^,           ,          4      ,          pMV P                  VV4      pV P                  VV4      pRTu;8:  d   ^8  dw   M MsRTu;8:  d   ^ 8  de   M MaRTu;8:  d   ^8  dS   M MOV\        ^V^ ,           ,          4      ,          pV\        V^,           ^,          V^,           ,          4      ,          pMPV\        ^4      ,          pV\        VR,          4      ,          pM$V\        ^4      ,          pV\        V4      ,          pWn        EK  	  EK  	  V P                  '       d   W P                  4       ,          pV\        R4      ,          p\!        V4      ^ V3# )Nr>   rA   r?   iii)r    r    r    r    r    r    r    i   )rK   r0   r/   rB   rO   r   rC   rD   ZrangeZgetpixelrS   rT   rF   r   rX   r   rE   )r%   rY   rG   ZwZhrH   ZyZxZpixelr5   r6   r7   r8   r9   Zprev_rZprev_gZprev_bZprev_aZdelta_rZdelta_gZdelta_bZdelta_grZdelta_gbs   &&                     r   encodeZQoiEncoder.encode   s   ww"""()<'8$-{ww||""499-qA1X((!0A:)eMSME000IINIyyB 11yyy 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 999OO%%D.//4y!T!!r   )r/   r0   rS   )r)   r*   r+   r,   Z
_pushes_fdr/   rJ   r0   rS   rT   rX   rZ   r-   r   r   r   rQ   rQ      s9    J8<O5<DFAFD
I" I"r   rQ   r   z.qoi)Z
__future__r   r"   Ztypingr   Z r   r   Z_binaryr   r   r   r   rN   r   r   Z	PyDecoderr.   rP   Z	PyEncoderrQ   Zregister_openr   Zregister_decoderZregister_extensionZregister_saveZregister_encoderr   r   r   <module>r[      s    # 	   !  !&R9&& R$H$$ HVH(Z"$$ Z"z   L''w ?   uj )   ,,f 5   L'' /   uj )r   