
    g2                    ,   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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)i32bec                    | d d dk(  S )N   s   qoif )prefixs    G/var/www/openai/venv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py_acceptr      s    "1:      c                      e Zd ZdZdZd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#     BA3tww||A/s   .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)returnNone)__name__
__module____qualname__formatformat_descriptionr,   r
   r   r   r   r      s    F)I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    $
1a!ea!ema!e+a"f4:
38$$Z0r   c           
          j                   J i  _         j                  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   rE   r	      ?   )r   r   r   r   0   r                      c              3  T   K   | ]  \  }}j                   |   z   |z   d z   ! yw)rJ   N)r6   )r   r   diff
diff_greenr   s      r   r   z$QoiDecoder.decode.<locals>.<genexpr>[   s7      +N4 "11!4zADHCO+Ns   %()r   )fdr7   rC   	bytearrayr   getmodebandsmodestatexsizeysizelenr   r6   getr!   	enumerate
set_as_raw)r   bufferdatabandsdest_lengthbyter=   opop_indexsecond_bytediff_red	diff_blue
run_lengthrR   s   `            @r   decodezQoiDecoder.decode2   s   ww"""')$$$Y~%>?{""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%!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"&'',,q/!"4K"&"3r!9J!,z!9a ?1DH!,z!9Q >I% +4h95M+N E T11!"55E1W!5!5"&"3q!8J 00Ez %bq	EJ..D((/zbq	EMDc $i+%d 	r   )r=   zbytes | bytearrayr-   r.   )r_   bytesr-   ztuple[int, int])	r/   r0   r1   	_pulls_fdr6   __annotations__r7   rC   rj   r
   r   r   r5   r5   &   s(    I04O-4<>9>9<r   r5   r   z.qoi)r   rk   r-   bool)
__future__r   r&    r   r   _binaryr   r   r   r   	PyDecoderr5   register_openr2   register_decoderregister_extensionr
   r   r   <module>rv      s    # 	  !!I9&& I$H$$ HV   L''w ?   uj )   ,,f 5r   