
    eV                    6   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 Z
 G d d	ej
                        Z G d
 dej                        Z ej                  ej                  ee
        ej                   de        ej"                  ej                  d       y)    )annotationsN   )Image	ImageFile)i32beo8c                    | d d dk(  S )N   s   qoif )prefixs    4/usr/lib/python3/dist-packages/PIL/QoiImagePlugin.py_acceptr      s    "1:      c                      e Zd ZdZdZd Zy)QoiImageFileQOIzQuite OK Imagec                    t         j                  j                  d            sd}t        |      t	         fdt        d      D               _         j                  j                  d      d   }|dk(  rdnd	 _         j                  j                  dt        j                         d
d j                  z    j                  j                         d fg _        y )Nr   znot a QOI filec              3  f   K   | ](  }t        j                  j                  d              * yw)r   N)i32fpread).0iselfs     r   	<genexpr>z%QoiImageFile._open.<locals>.<genexpr>   s"     BA3tww||A/Bs   .1   r   r      RGBRGBAqoi)r   r   )r   r   r   SyntaxErrortuplerange_size_modeseekosSEEK_CURtelltile)r   msgchannelss   `  r   _openzQoiImageFile._open   s    tww||A'"Cc""BqBB
77<<?1%&!mU
Q$Vdjj0$'',,.$GH	r   N)__name__
__module____qualname__formatformat_descriptionr.   r   r   r   r   r      s    F)Ir   r   c                      e Zd ZdZd Zd Zy)
QoiDecoderTc                r    || _         |\  }}}}|dz  |dz  z   |dz  z   |dz  z   dz  }|| j                  |<   y )Nr            @   )_previous_pixel_previously_seen_pixels)r   valuergba
hash_values          r   _add_to_previous_pixelsz"QoiDecoder._add_to_previous_pixels*   sO    $
1a!ea!ema!e+a"f4:
38$$Z0r   c                    i  _         d  _         j                  dj                  d dD                     t	               }t        j                   j                        }t        |       j                  j                   j                  j                  z  |z  k  r$ j                  j                  d      d   }|dk(  r- j                  j                  d       j                  dd  z   }nv|dk(  r j                  j                  d	      }nT|d
z	  }|dk(  r#|dz  } j                   j                  |d      }n|dk(  rj 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  f}| j                  d   fz  }n|dk(  rn j                  j                  d      d   }|dz  dz
  |dz  d	z	  dz
  }	|dz  dz
  }
t         fdt!        |	d|
f      D              }| j                  d   fz  }n-|dk(  r(|dz  dz   } j                  }|dk(  r|d d }|||z  z  }dj                  d D              } j                  |       |dk(  r|d d }||z  }t        |       j                  j                   j                  j                  z  |z  k  r$ j#                  t%        |             y)Nr   c              3  2   K   | ]  }t        |        y wNr   r   r   s     r   r   z$QoiDecoder.decode.<locals>.<genexpr>4   s     -Lbe-L   )r   r   r      r   r      r   rI   r      ?   )r   r   r   r   0   r                      c              3  T   K   | ]  \  }}j                   |   z   |z   d z   ! yw)rN   N)r;   )r   r   diff
diff_greenr   s      r   r   z$QoiDecoder.decode.<locals>.<genexpr>R   s7      "#At --a0:=DK"s   %(c              3  2   K   | ]  }t        |        y wrF   r   rG   s     r   r   z$QoiDecoder.decode.<locals>.<genexpr>^   s      61A 6rH   )r   )r<   r;   rC   join	bytearrayr   getmodebandsmodelenstatexsizeysizefdr   getr#   	enumerate
set_as_rawbytes)r   bufferdatabandsbyter=   opop_indexsecond_bytediff_red	diff_blue
run_lengthrV   s   `           @r   decodezQoiDecoder.decode1   s   ')$#$$SXX-L^-L%LM{""499-$i$****TZZ-=-==EE77<<?1%Dz!Q$*>*>qr*BB#QQY7#j0H 88<<X|TE1W--a0TJ5F14LMPQQ--a0TJ5F14LMPQQ--a0D:4EFJcQE d221577E1W"&'',,q/!"4K"&"3r!9J!,z!9a ?1DH!,z!9Q >I! "'0(Ay1I'J" E d221577E1W"&"3q!8J 00Ez %bq	EJ..D 6 66((/zbq	EMDW $i$****TZZ-=-==EEX 	d$r   N)r/   r0   r1   	_pulls_fdrC   rp   r   r   r   r5   r5   '   s    I94r   r5   r!   z.qoi)
__future__r   r(    r   r   _binaryr   r   r	   r   r   	PyDecoderr5   register_openr2   register_decoderregister_extensionr   r   r   <module>ry      s    # 	  ! !I9&& I$>$$ >B   L''w ?   uj )   ,,f 5r   