
    ZMh\                       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          S )Ns   qoif)
startswith)r   s    R/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/PIL/QoiImagePlugin.py_acceptr      s    W%%%    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 )
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    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      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            @   )r3   r4   )r'   r5   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   rF   r      ?   )r   r   r   r   0                         c              3  J   K   | ]\  }}j         |         z   |z   d z  V  dS )rL   N)r3   ).0idiff
diff_greenr'   s      r   	<genexpr>z$QoiDecoder.decode.<locals>.<genexpr>[   sR         '4 "1!4zADHCO     r   )r   )fdr4   rA   	bytearrayr   getmodebandsmodestatexsizeysizelenr   r3   gettuple	enumerate
set_as_raw)r'   rB   databandsdest_lengthbyter5   opop_indexsecond_bytediff_red	diff_blue
run_lengthrV   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   )r5   r6   r
   r   )rB   rC   r
   rD   )	r+   r,   r-   	_pulls_fdr3   __annotations__r4   rA   ro   r0   r   r   r2   r2   &   sf         I04O4444<>>>>>9 9 9 9< < < < < <r   r2   r   z.qoi)r   r	   r
   r   )
__future__r   r"    r   r   _binaryr   r   r   r   	PyDecoderr2   register_openr.   register_decoderregister_extensionr0   r   r   <module>ry      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   