
    zvgW                       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           dS )    )annotationsN   )Image	ImageFile)i32beprefixbytesreturnboolc                    | d d         dk    S )N   s   qoif )r   s    O/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/PIL/QoiImagePlugin.py_acceptr      s    "1":      c                      e Zd ZdZdZddZdS )QoiImageFileQOIzQuite OK Imager
   Nonec                :   t          | j                            d                    sd}t          |          t	          | j                            d                    t	          | j                            d                    f| _        | j                            d          d         }|dk    rdnd| _        | j                            dt          j	                   t          j        dd	| j        z   | j                                                  g| _        d S )
Nr   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    tw||A'' 	#"Cc"""a))3tw||A+?+??
7<<??1%&!mmUU
Q$$$_UFTZ,?PPQ			r   N)r
   r   )__name__
__module____qualname__formatformat_descriptionr*   r   r   r   r   r      s9        F)R R R R R 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dS )
QoiDecoderTNzbytes | bytearray | None_previous_pixelzdict[int, bytes | bytearray]_previously_seen_pixelsvaluebytes | bytearrayr
   r   c                j    || _         |\  }}}}|dz  |dz  z   |dz  z   |dz  z   dz  }|| j        |<   d S )Nr            @   )r2   r3   )r'   r4   rgba
hash_values          r   _add_to_previous_pixelsz"QoiDecoder._add_to_previous_pixels+   sR    $
1a!ea!ema!e+a"f4:
38$Z000r   buffer$bytes | Image.SupportsArrayInterfacetuple[int, int]c           
          j         J i  _                             t          d                     t                      }t	          j         j                  } j        j         j        j	        z  |z  }t          |          |k     rA j                             d          d         }|dk    r@ j        r9t           j                             d                     j        dd          z   }n|dk    r j                             d          }n{|dz	  }|dk    r/|d	z  } j                            |t          d
                    }nA|dk    rq j        rjt           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        r 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  }n6|dk    r0 j        r)|d	z  dz   } j        }|dk    r
|d d         }|||z  z  }                     |           |dk    r
|d d         }||z  }t          |          |k     A                     |           dS )N)r   r   r      r   r      r   rE   r      ?   )r   r   r   r   0                         c              3  J   K   | ]\  }}j         |         z   |z   d z  V  dS )rK   N)r2   ).0idiff
diff_greenr'   s      r   	<genexpr>z$QoiDecoder.decode.<locals>.<genexpr>[   sR         '4 "1!4zADHCO     r   )r   )fdr3   r@   	bytearrayr   getmodebandsmodestatexsizeysizelenr   r2   gettuple	enumerate
set_as_raw)r'   rA   databandsdest_lengthbyter4   opop_indexsecond_bytediff_red	diff_blue
run_lengthrU   s   `            @r   decodezQoiDecoder.decode2   sN   w"""')$$$Y~%>%>???{{"49--j&)99EA$ii+%%7<<??1%Dz!!d&:!!$',,q//22T5I!""5MM##QQY77#j0H 8<< )L"9"9 EE 1WW!5W%!1!4
9Jq8PQTUU!"!1!4
9Jq8PQTUU!"!1!4z8IJQNRUU 03	 	EE 1WW!5W"&',,q//!"4K"&"3r!9J!,z!9a ?1DH!,z!9Q >I%     +4h95M+N+N     E T1!""55EE1WW!5W"&"3q!8J 0Ezz %bqb	EJ..D((///zzbqb	EMDc $ii+%%d 	ur   )r4   r5   r
   r   )rA   rB   r
   rC   )	r+   r,   r-   	_pulls_fdr2   __annotations__r3   r@   rn   r   r   r   r1   r1   &   sf         I04O4444<>>>>>9 9 9 9< < < < < <r   r1   r   z.qoi)r   r	   r
   r   )
__future__r   r"    r   r   _binaryr   r   r   r   	PyDecoderr1   register_openr.   register_decoderregister_extensionr   r   r   <module>rx      s   # " " " " " 				         ! ! ! ! ! !! ! ! !R R R R R9& R R R$H H H H H$ H H HV  L'w ? ? ?  uj ) ) )  ,f 5 5 5 5 5r   