a
    ¶Dfé  ã                   @  sŠ   d dl mZ d dlZddlmZmZ ddlmZ dd„ Z	G dd	„ d	ejƒZ
G d
d„ dejƒZe e
je
e	¡ e de¡ e e
jd¡ dS )é    )ÚannotationsNé   )ÚImageÚ	ImageFile)Úi32bec                 C  s   | d d… dkS )Né   s   qoif© )Úprefixr   r   ú_/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/PIL/QoiImagePlugin.pyÚ_accept   s    r   c                   @  s   e Zd ZdZdZdd„ ZdS )ÚQoiImageFileZQOIzQuite OK Imagec                   sŠ   t ˆ j d¡ƒsd}t|ƒ‚t‡ fdd„tdƒD ƒƒˆ _ˆ j d¡d }|dkrTd	nd
ˆ _ˆ j dt	j
¡ ddˆ j ˆ j ¡ d fgˆ _d S )Nr   znot a QOI filec                 3  s   | ]}t ˆ j d ¡ƒV  qdS )r   N)Úi32ÚfpÚread)Ú.0Úi©Úselfr   r
   Ú	<genexpr>   ó    z%QoiImageFile._open.<locals>.<genexpr>é   r   r   é   ZRGBZRGBAÚqoi)r   r   )r   r   r   ÚSyntaxErrorÚtupleÚrangeÚ_sizeÚ_modeÚseekÚosÚSEEK_CURÚtellZtile)r   ÚmsgZchannelsr   r   r
   Ú_open   s    zQoiImageFile._openN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr#   r   r   r   r
   r      s   r   c                   @  s    e Zd ZdZdd„ Zdd„ ZdS )Ú
QoiDecoderTc                 C  sD   || _ |\}}}}|d |d  |d  |d  d }|| j|< d S )Nr   é   é   é   é@   )Ú_previous_pixelÚ_previously_seen_pixels)r   ÚvalueÚrÚgÚbÚaZ
hash_valuer   r   r
   Ú_add_to_previous_pixels)   s    $z"QoiDecoder._add_to_previous_pixelsc                   s.  i ˆ_ d ˆ_ˆ tdƒ¡ tƒ }t ˆj¡}ˆjjˆjj	 | }t
|ƒ|k r ˆj d¡d }|dkrˆtˆj d¡ƒˆjdd …  }nn|dkr ˆj d¡}nV|d? }|dkrÎ|d	@ }ˆj  |td
ƒ¡}n(|dkr:tˆjd |d@ d?  d d ˆjd |d@ d?  d d ˆjd |d@  d d ˆjd fƒ}n¼|dkr¶ˆj d¡d }	|d	@ d ‰ |	d@ d? d }
|	d@ d }tt‡ ‡fdd„t|
d|fƒD ƒƒƒ}|ˆjdd … 7 }n@|dkrö|d	@ d }ˆj}|dkrè|d d… }||| 7 }q@ˆ |¡ |dkr|d d… }||7 }q@ˆ |¡ dS )N)r   r   r   éÿ   r   r   éþ   r   r6   r   é   é?   )r   r   r   r   é0   r   é   é   é    éð   é   é   c                 3  s(   | ] \}}ˆj | ˆ  | d  V  qdS )r;   N)r.   )r   r   Údiff©Z
diff_greenr   r   r
   r   W   s   ÿz$QoiDecoder.decode.<locals>.<genexpr>)éÿÿÿÿr   )r/   r.   r5   Ú	bytearrayr   ZgetmodebandsÚmodeÚstateZxsizeZysizeÚlenÚfdr   Úgetr   Ú	enumerateZ
set_as_raw)r   ÚbufferÚdataZbandsZdest_lengthÚbyter0   ÚopZop_indexZsecond_byteZdiff_redZ	diff_blueZ
run_lengthr   rB   r
   Údecode0   sl    "ÿ
ÿÿúÿ

þÿ





zQoiDecoder.decodeN)r$   r%   r&   Z	_pulls_fdr5   rO   r   r   r   r
   r)   &   s   r)   r   z.qoi)Ú
__future__r   r   Ú r   r   Ú_binaryr   r   r   r   Z	PyDecoderr)   Zregister_openr'   Zregister_decoderZregister_extensionr   r   r   r
   Ú<module>   s   G