o
    eV                     @  s   d dl mZ d dlZddlmZmZ ddl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)i32beo8c                 C  s   | d d dkS )N   s   qoif )prefixr
   r
   E/var/www/html/venv/lib/python3.10/site-packages/PIL/QoiImagePlugin.py_accept   s   r   c                   @  s   e Zd ZdZdZdd ZdS )QoiImageFileQOIzQuite OK Imagec                   s   t  jdsd}t|t fddtdD  _ jdd }|dkr*d	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>   s    z%QoiImageFile._open.<locals>.<genexpr>   r   r      RGBRGBAqoi)r   r   )r   r   r   SyntaxErrortuplerange_size_modeseekosSEEK_CURtelltile)r   msg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a
hash_valuer
   r
   r   _add_to_previous_pixels*   s   $z"QoiDecoder._add_to_previous_pixelsc                   sP  i _ d _ddd dD  t }tj}t|j	j
j	j | k rjdd }|dkrEjdjdd   }n|d	krPjd
}n|d? }|dkrd|d@ }j |d}n|dkrjd |d@ d
?  d d jd |d@ d?  d d jd |d@  d d f}|jd f7 }nX|dkrՈjdd }|d@ d  |d@ d
? d }	|d@ d }
t fddt|	d|
fD }|jd f7 }n|dkr|d@ d }j}|dkr|d d }||| 7 }qddd |D }| |dkr|d d }||7 }t|j	j
j	j | k s+t| dS )N    c                 s      | ]}t |V  qd S Nr   r   r
   r
   r   r   4       z$QoiDecoder.decode.<locals>.<genexpr>)r   r   r      r   r      r   rB   r	      ?   )r   r   r   r   0   r                      c                 3  s*    | ]\}}j |   | d  V  qdS )rG   N)r5   )r   r   diff
diff_greenr   r
   r   r   R   s
    
c                 s  r?   r@   r   r   r
   r
   r   r   ^   rA   )r   )r6   r5   r=   join	bytearrayr   getmodebandsmodelenstatexsizeysizefdr   getr   	enumerate
set_as_rawbytes)r   bufferdatabandsbyter7   opop_indexsecond_bytediff_red	diff_blue
run_lengthr
   rN   r   decode1   sb   

,zQoiDecoder.decodeN)r+   r,   r-   	_pulls_fdr=   rh   r
   r
   r
   r   r0   '   s    r0   r   z.qoi)
__future__r   r$    r   r   _binaryr   r   r   r   r   	PyDecoderr0   register_openr.   register_decoderregister_extensionr
   r
   r
   r   <module>   s   A