
    :h\                    ,   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                $    | j                  d      S )Ns   qoif)
startswith)prefixs    P/var/www/urcfiles/bundle/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    tww||A'"Cc""a)3tww||A+??
77<<?1%&!mU
Q$__UFTZZ,?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            @   )r1   r2   )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   r@   r      ?   )r   r   r   r   0                         c              3  T   K   | ]  \  }}j                   |   z   |z   d z   ! yw)rF   N)r1   ).0idiff
diff_greenr#   s      r   	<genexpr>z$QoiDecoder.decode.<locals>.<genexpr>[   s7      +N4 "11!4zADHCO+Ns   %()r   )fdr2   r>   	bytearrayr   getmodebandsmodestatexsizeysizelenr   r1   gettuple	enumerate
set_as_raw)r#   bufferdatabandsdest_lengthbyter8   opop_indexsecond_bytediff_red	diff_blue
run_lengthrP   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   )r8   zbytes | bytearrayr'   r(   )r_   z$bytes | Image.SupportsArrayInterfacer'   ztuple[int, int])	r)   r*   r+   	_pulls_fdr1   __annotations__r2   r>   rj   r.   r   r   r0   r0   &   s(    I04O-4<>9>9<r   r0   r   z.qoi)r
   bytesr'   bool)
__future__r   r    r   r   _binaryr   r   r   r   	PyDecoderr0   register_openr,   register_decoderregister_extensionr.   r   r   <module>rv      s    # 	  !&R9&& R$H$$ HV   L''w ?   uj )   ,,f 5r   