Ë
    Bü´j|!  ã                  óâ  — 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d	„Z G d
„ dej                  «      Z G d„ dej                   «      Zdd„Z G d„ dej&                  «      Z ej*                  ej,                  ee«        ej.                  de«        ej0                  ej,                  d«        ej2                  ej,                  e«        ej4                  de«       y)é    )ÚannotationsN)ÚIOé   )ÚImageÚ	ImageFile)Úi32be)Úo8)Úo32bec                ó$   — | j                  d«      S )Nó   qoif)Ú
startswith)Úprefixs    úP/root/workspace/ytshorts/venv/lib/python3.12/site-packages/PIL/QoiImagePlugin.pyÚ_acceptr      s   € Ø×Ñ˜WÓ%Ð%ó    c                  ó   — e Zd ZdZdZdd„Zy)ÚQoiImageFileÚQOIzQuite OK Imagec                ó0  — t        | j                  j                  d«      «      sd}t        |«      ‚t	        | j                  j                  d«      «      t	        | j                  j                  d«      «      f| _        | j                  j                  d«      d   }|dk(  rdnd| _        | j                  j                  dt        j                  «       t        j                  dd	| j
                  z   | j                  j                  «       «      g| _        y )
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   Ú_openzQoiImageFile._open   s¹   € Ü�t—w‘w—|‘| A“Ô'Ø"ˆCÜ˜cÓ"Ð"ä˜Ÿ™Ÿ™ a›Ó)¬3¨t¯w©w¯|©|¸A«Ó+?Ð?ˆŒ
à—7‘7—<‘< “? 1Ñ%ˆØ&¨!šm‘U°ˆŒ
à�‰�‰�QœŸ™Ô$Ü—_‘_ U¨F°T·Z±ZÑ,?ÀÇÁÇÁÃÓPÐQˆ�	r   N)ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr+   © r   r   r   r      s   „ Ø€FØ)ÐôRr   r   c                  ó>   — e Zd ZU dZdZded<   i Zded<   d	d„Zd
d„Zy)Ú
QoiDecoderTNzbytes | bytearray | NoneÚ_previous_pixelzdict[int, bytes | bytearray]Ú_previously_seen_pixelsc                ór   — || _         |\  }}}}|dz  |dz  z   |dz  z   |dz  z   dz  }|| j                  |<   y )Nr   é   é   é   é@   )r6   r7   )r(   ÚvalueÚrÚgÚbÚaÚ
hash_values          r   Ú_add_to_previous_pixelsz"QoiDecoder._add_to_previous_pixels.   sO   € Ø$ˆÔà‰
ˆˆ1ˆa�Ø˜!‘e˜a !™e‘m a¨!¡eÑ+¨a°"©fÑ4¸Ñ:ˆ
Ø38ˆ×$Ñ$ ZÒ0r   c           
     óœ  ‡ ‡— ‰ j                   €J ‚i ‰ _        t        d«      ‰ _        t        «       }t	        j
                  ‰ j                  «      }‰ j                  j                  ‰ j                  j                  z  |z  }t        |«      |k  �r,‰ j                   j                  d«      d   }|dk(  rB‰ j                  r6t        ‰ j                   j                  d«      «      ‰ j                  dd  z   }�n—|dk(  r‰ j                   j                  d«      }�nu|dz	  }|dk(  r,|d	z  }‰ j                  j                  |t        d
«      «      }�n?|dk(  rz‰ j                  rnt        ‰ j                  d   |dz  dz	  z   dz
  dz  ‰ j                  d   |dz  dz	  z   dz
  dz  ‰ j                  d   |dz  z   dz
  dz  ‰ j                  d   f«      }nÀ|dk(  r‚‰ j                  rv‰ j                   j                  d«      d   }	|d	z  dz
  Š|	dz  dz	  dz
  }
|	dz  dz
  }t        t        ˆˆ fd„t        |
d|f«      D «       «      «      }|‰ j                  dd  z  }n9|dk(  r4‰ j                  r(|d	z  dz   }‰ j                  }|dk(  r|d d }|||z  z  }�Œ‰ j                  «       |dk(  r|d d }||z  }t        |«      |k  r�Œ,‰ j!                  |«       y)N©r   r   r   éÿ   r   r   éþ   r   rF   r   é   é?   ©r   r   r   r   é0   é   é   é   é    éð   é   é   c              3  óT   •K  — | ]  \  }}‰j                   |   ‰z   |z   d z  –— Œ! y­w)rM   N)r6   )Ú.0ÚiÚdiffÚ
diff_greenr(   s      €€r   ú	<genexpr>z$QoiDecoder.decode.<locals>.<genexpr>^   s7   øè ø€ ò á '  4ð "×1Ñ1°!Ñ4°zÑAÀDÑHÈCÕOñùs   ƒ%()éÿÿÿÿr   )Úfdr7   Ú	bytearrayr6   r   ÚgetmodebandsÚmodeÚstateÚxsizeÚysizeÚlenr   ÚgetÚtupleÚ	enumeraterC   Ú
set_as_raw)r(   ÚbufferÚdataÚbandsÚdest_lengthÚbyter=   ÚopÚop_indexÚsecond_byteÚdiff_redÚ	diff_blueÚ
run_lengthrW   s   `            @r   ÚdecodezQoiDecoder.decode5   sî  ù€ Ø�w‰wÐ"Ð"Ð"à')ˆÔ$Ü(¨Ó8ˆÔä‹{ˆÜ×"Ñ" 4§9¡9Ó-ˆØ—j‘j×&Ñ&¨¯©×)9Ñ)9Ñ9¸EÑAˆÜ�$‹i˜+Ó%Ø—7‘7—<‘< “? 1Ñ%ˆDà�zÒ! d×&:Ò&:Ü! $§'¡'§,¡,¨q£/Ó2°T×5IÑ5IÈ!È"Ð5MÑM’Ø˜Ò#ØŸ™Ÿ™ Q›’à˜Q‘Y�Ø˜’7Ø# jÑ0�HØ ×8Ñ8×<Ñ<Ø ¤)¨LÓ"9ó’Eð ˜1’W ×!5Ò!5Ü%à!×1Ñ1°!Ñ4¸À
Ñ9JÈqÑ8PÑQÐTUÑUØ!ñ"à!×1Ñ1°!Ñ4¸À
Ñ9JÈqÑ8PÑQÐTUÑUØ!ñ"à!×1Ñ1°!Ñ4¸¸zÑ8IÑJÈQÑNÐRUÑUØ ×0Ñ0°Ñ3ðó	‘Eð ˜1’W ×!5Ò!5Ø"&§'¡'§,¡,¨q£/°!Ñ"4�KØ"&¨Ñ"3°rÑ!9�JØ!,¨zÑ!9¸aÑ ?À1ÑD�HØ!,¨zÑ!9¸QÑ >�Iä%Üô ä+4°hÀÀ9Ð5MÓ+Nôó ó�Eð ˜T×1Ñ1°!°"Ð5Ñ5‘EØ˜1’W ×!5Ò!5Ø"&¨Ñ"3°qÑ!8�JØ ×0Ñ0�EØ ’zØ % b q 	˜Ø˜E JÑ.Ñ.�DÙØ×(Ñ(¨Ô/à˜ŠzØ˜b˜q˜	�Ø�E‰MˆDôc �$‹i˜+Ô%ðd 	�‰˜ÔØr   )r=   zbytes | bytearrayr,   r-   )rf   z$bytes | Image.SupportsArrayInterfacer,   ztuple[int, int])	r.   r/   r0   Ú	_pulls_fdr6   Ú__annotations__r7   rC   rq   r3   r   r   r5   r5   )   s(   … Ø€IØ04€OÐ-Ó4Ø<>ÐÐ9Ó>ó9ô<r   r5   c           	     óB  — | j                   dk(  rd}n| j                   dk(  rd}nd}t        |«      ‚| j                  j                  d«      dk(  rdnd	}|j	                  d
«       |j	                  t        | j                  d   «      «       |j	                  t        | j                  d	   «      «       |j	                  t        |«      «       |j	                  t        |«      «       t        j                  | |t        j                  dd| j                  z   «      g«       y )Nr   r   r   r   zUnsupported QOI image modeÚ
colorspaceÚsRGBr   r   r   r   r   )r]   Ú
ValueErrorÚencoderinforb   ÚwriteÚo32Úsizer	   r   Ú_saver%   )Úimr   Úfilenamer*   r)   ru   s         r   r|   r|   t   sÓ   € Ø	‡w�w�%ÒØ‰Ø	�‰�FÒ	Ø‰à*ˆÜ˜‹oÐà—n‘n×(Ñ(¨Ó6¸&Ò@‘Àa€Jà‡H�HˆWÔØ‡H�HŒS�—‘˜‘‹_ÔØ‡H�HŒS�—‘˜‘‹_ÔØ‡H�HŒR�‹\ÔØ‡H�HŒR�
‹^Ôä‡O�O�B˜œYŸ_™_¨U°F¸R¿W¹WÑ4DÓEÐFÕGr   c                  óJ   — e Zd ZU dZdZded<   i Zded<   dZdd„Zdd	„Z	dd
„Z
y)Ú
QoiEncoderTNz tuple[int, int, int, int] | Noner6   z$dict[int, tuple[int, int, int, int]]r7   r   c                óJ   — t        d| j                  dz
  z  «      }d| _        |S )NéÀ   r   r   )r	   Ú_run)r(   rg   s     r   Ú
_write_runzQoiEncoder._write_runŽ   s%   € Ü�* §	¡	¨A¡Ñ.Ó/ˆØˆŒ	Øˆr   c                ó*   — ||z
  dz  }|dk\  r|dz  }|S )NrF   é€   rM   r3   )r(   ÚleftÚrightÚresults       r   Ú_deltazQoiEncoder._delta“   s%   € Ø˜‘, #Ñ%ˆØ�SŠ=Ø�c‰MˆFØˆr   c                ó4  — | j                   €J ‚ddi| _        d| _        t        «       }| j                   j                  \  }}t        j                  | j                  «      }t        |«      D �]o  }t        |«      D �]]  }| j                   j                  ||f«      }|dk(  rg |¢d‘­}|| j                  k(  r:| xj                  dz  c_
        | j                  dk(  �rö|| j                  «       z  }�ná| j                  r|| j                  «       z  }|\  }	}
}}|	dz  |
dz  z   |d	z  z   |d
z  z   dz  }| j                  j                  |«      |k(  r|t        |«      z  }�ns| j                  �rf|| j                  |<   | j                  \  }}}}||k(  �r$| j                  |	|«      }| j                  |
|«      }| j                  ||«      }d|cxk  rdk  rFn nCd|cxk  rdk  r8n n5d|cxk  rdk  r*n n'|t        d|dz   dz  z  |dz   dz  z  |dz   z  «      z  }n¹| j                  ||«      }| j                  ||«      }d|cxk  rdk  rNn nKd|cxk  rdk  r@n n=d|cxk  rdk  r2n n/|t        d|dz   z  «      z  }|t        |dz   dz  |dz   z  «      z  }n<|t        d«      z  }|t        |d d «      z  }n|t        d«      z  }|t        |«      z  }|| _        �Œ` �Œr | j                  r|| j                  «       z  }|t        d«      z  }t!        |«      d|fS )Nr   rJ   rE   r   rF   r   é>   r9   r:   r;   r<   éþÿÿÿrL   r   iøÿÿÿrQ   iàÿÿÿrO   r†   rG   )r   r   r   r   r   r   r   r   )r}   r7   r6   r[   r{   r   r\   r]   ÚrangeÚgetpixelrƒ   r„   rb   r	   rŠ   Úbytesra   )r(   Úbufsizerg   ÚwÚhrh   ÚyÚxÚpixelr>   r?   r@   rA   rB   Úprev_rÚprev_gÚprev_bÚprev_aÚdelta_rÚdelta_gÚdelta_bÚdelta_grÚdelta_gbs                          r   ÚencodezQoiEncoder.encode™   s/  € Ø�w‰wÐ"Ð"Ð"à()¨<Ð'8ˆÔ$Ø-ˆÔä‹{ˆØ�w‰w�|‰|‰ˆˆ1Ü×"Ñ" 4§9¡9Ó-ˆä�q“ó 9	-ˆAÜ˜1“Xó 8-�ØŸ™×(Ñ(¨!¨Q¨Ó0�Ø˜A’:Ø)˜e˜M S™M�Eà˜D×0Ñ0Ò0Ø—I’I ‘N•IØ—y‘y B“Ø §¡Ó 1Ñ1šà—y’yØ §¡Ó 1Ñ1˜à!&‘J�A�q˜!˜QØ"# a¡%¨!¨a©%¡-°!°a±%Ñ"7¸!¸b¹&Ñ"@ÀBÑ!F�JØ×3Ñ3×7Ñ7¸
ÓCÀuÒLØ¤ :£Ñ.šØ×-Ó-ØCH˜×4Ñ4°ZÑ@à9=×9MÑ9MÑ6˜ ¨°Ø! Q›;Ø&*§k¡k°!°VÓ&<˜GØ&*§k¡k°!°VÓ&<˜GØ&*§k¡k°!°VÓ&<˜Gð !# gÔ 1°Õ 1Ø$&¨'Ô$5°AÕ$5Ø$&¨'Ô$5°AÕ$5à $¬Ø$.Ø'.°¡{°qÑ&8ñ%9à'.°¡{°qÑ&8ñ%9ð (/°¡{ñ%4ó)"ñ !"¡ð ,0¯;©;°wÀÓ+H Ø+/¯;©;°wÀÓ+H à$&¨(Ô$6°QÕ$6Ø(+¨wÔ(;¸Õ(;Ø(*¨hÔ(:¸Õ(:à$(¬BØ(2°gÀ±lÑ(Có-&ñ %& Dð %)¬B°¸1±ÀÑ/BÀhÐQRÁlÑ/SÓ,TÑ$T¡Dà$(¬B¨z«NÑ$: DØ$(¬E°%¸¸°)Ó,<Ñ$<¡Dà ¤B z£NÑ2˜DØ ¤E¨%£LÑ0˜Dà',�Ö$òq8-ð9	-ðv �9Š9Ø�D—O‘OÓ%Ñ%ˆDØ”Ð.Ó/Ñ/ˆä�4‹y˜!˜TÐ!Ð!r   )r,   r�   )r‡   Úintrˆ   r¡   r,   r¡   )r‘   r¡   r,   ztuple[int, int, bytes])r.   r/   r0   Ú
_pushes_fdr6   rs   r7   rƒ   r„   rŠ   r    r3   r   r   r€   r€   ˆ   s3   … Ø€JØ8<€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
   rz   r   r   Ú	PyDecoderr5   r|   Ú	PyEncoderr€   Úregister_openr1   Úregister_decoderÚregister_extensionÚregister_saveÚregister_encoderr3   r   r   ú<module>r¯      sÕ   ðõ #ã 	Ý ç Ý !Ý Ý !ó&ôR�9×&Ñ&ô Rô$H�×$Ñ$ô HóVHô(Z"�×$Ñ$ô Z"ðz €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ �u˜jÔ )Ø €× Ñ ˜×,Ñ,¨fÔ 5à €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ �u˜jÕ )r   