
    Xh|!                       d dl mZ d dlZd dlmZ ddlmZmZ ddlm	Z
 ddlmZ ddlmZ ddZ G d dej                  Z G d dej                  ZddZ G d dej                  Z ej        ej        ee            ej        de            ej        ej        d            ej        ej        e            ej        de           dS )     )annotationsN)IO   )Image	ImageFile)i32be)o8)o32beprefixbytesreturnboolc                ,    |                      d          S )N   qoif)
startswith)r   s    d/var/www/tools.fuzzalab.pt/emblema-extractor/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            @   )r8   r9   )r,   r:   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   rL   r      ?   r   r   r   r   0                         c              3  J   K   | ]\  }}j         |         z   |z   d z  V  dS )rS   N)r8   ).0idiff
diff_greenr,   s      r   	<genexpr>z$QoiDecoder.decode.<locals>.<genexpr>^   sR         '4 "1!4zADHCO     r   )r   )fdr9   	bytearrayr8   r   getmodebandsmodestatexsizeysizelenr!   gettuple	enumeraterF   
set_as_raw)r,   rG   databandsdest_lengthbyter:   opop_indexsecond_bytediff_red	diff_blue
run_lengthr]   s   `            @r   decodezQoiDecoder.decode5   sB   w"""')$(88{{"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   )r:   r;   r   r   )rG   rH   r   rI   )	r0   r1   r2   	_pulls_fdr8   __annotations__r9   rF   rv   r5   r   r   r7   r7   )   sf         I04O4444<>>>>>9 9 9 9< < < < < <r   r7   imImage.Imager    	IO[bytes]filenamestr | bytesr   c           	     n   | j         dk    rd}n| j         dk    rd}nd}t          |          | j                            d          dk    rdnd	}|                    d
           |                    t          | j        d                              |                    t          | j        d	                              |                    t          |                     |                    t          |                     t          j	        | |t          j
        dd| j        z             g           d S )Nr   r   r   r   zUnsupported QOI image mode
colorspacesRGBr   r   r   r   r   )rc   
ValueErrorencoderinforh   writeo32sizer	   r   _saver)   )ry   r    r|   r.   r-   r   s         r   r   r   t   s   	w%	F		*oon((66&@@aJHHWHHS__HHS__HHR\\HHR
^^OBY_UFRW4DEEFGGGGGr   c                  L    e Zd ZU dZdZded<   i Zded<   dZdd
ZddZ	ddZ
dS )
QoiEncoderTNz tuple[int, int, int, int] | Noner8   z$dict[int, tuple[int, int, int, int]]r9   r   r   r   c                H    t          d| j        dz
  z            }d| _        |S )N   r   r   )r	   _run)r,   rl   s     r   
_write_runzQoiEncoder._write_run   s&    *	A.//	r   leftintrightc                ,    ||z
  dz  }|dk    r|dz  }|S )NrL      rS   r5   )r,   r   r   results       r   _deltazQoiEncoder._delta   s'    ,#%S==cMFr   bufsizetuple[int, int, bytes]c                   | j         J ddi| _        d| _        t                      }| j         j        \  }}t          j        | j                  }t          |          D ]}t          |          D ]}| j         	                    ||f          }|dk    rg |dR }|| j        k    r4| xj
        dz  c_
        | j
        dk    r||                                 z  }n| j
        r||                                 z  }|\  }	}
}}|	dz  |
dz  z   |d	z  z   |d
z  z   dz  }| j                            |          |k    r|t          |          z  }n| j        r|| j        |<   | j        \  }}}}||k    r]|                     |	|          }|                     |
|          }|                     ||          }d|cxk    rdk     rNn nKd|cxk    rdk     r>n n;d|cxk    rdk     r.n n+|t          d|dz   dz  z  |dz   dz  z  |dz   z            z  }n|                     ||          }|                     ||          }d|cxk    rdk     rZn nWd|cxk    rdk     rJn nGd|cxk    rdk     r:n n7|t          d|dz   z            z  }|t          |dz   dz  |dz   z            z  }nQ|t          d          z  }|t          |d d                   z  }n$|t          d          z  }|t          |          z  }|| _        | j
        r||                                 z  }|t          d          z  }t!          |          d|fS )Nr   rP   rK   r   rL   r   >   r=   r>   r?   r@   rR   r   irW   irU   r   rM   )r   r   r   r   r   r   r   r   )ry   r9   r8   ra   r   r   rb   rc   rangegetpixelr   r   rh   r	   r   r   rg   )r,   r   rl   whrm   yxpixelrA   rB   rC   rD   rE   prev_rprev_gprev_bprev_adelta_rdelta_gdelta_bdelta_grdelta_gbs                          r   encodezQoiEncoder.encode   s   w"""()<'8$-{{w|1"49--q 9	- 9	-A1XX 8- 8-((!Q00A::)eMSMMED000IINIIyB 1 11y 2 1 11!&JAq!Q"#a%!a%-!a%"7!b&"@B!FJ377
CCuLL:.- %1CH4Z@9=9M6!Q;;&*kk!V&<&<G&*kk!V&<&<G&*kk!V&<&<G !#g 1 1 1 1 1 1 1 1 1$&'$5$5$5$5A$5$5$5$5$5$&'$5$5$5$5A$5$5$5$5$5 $$.'.{q&8%9'.{q&8%9 (/{%4)" )" !" ,0;;w+H+H+/;;w+H+H$&($6$6$6$6Q$6$6$6$6$6(+w(;(;(;(;(;(;(;(;(;(*h(:(:(:(:(:(:(:(:(:$(B(2gl(C-& -& %&D %)B1/BhQRl/S,T,T$TDD$(BzNN$:D$(E%),<,<$<DD BzNN2D E%LL0D',$$q8-t 9 	&DOO%%%D.///4yy!T!!r   )r   r   )r   r   r   r   r   r   )r   r   r   r   )r0   r1   r2   
_pushes_fdr8   rx   r9   r   r   r   r   r5   r   r   r   r      s         J8<O<<<<DFFFFFD   
   I" I" I" I" I" I"r   r   r   z.qoi)r   r   r   r   )ry   rz   r    r{   r|   r}   r   r   )
__future__r   r'   typingr    r   r   _binaryr   r#   r	   r
   r   r   r   	PyDecoderr7   r   	PyEncoderr   register_openr3   register_decoderregister_extensionregister_saveregister_encoderr5   r   r   <module>r      s   # " " " " " 				               ! ! ! ! ! !       ! ! ! ! ! !& & & &R R R R R9& R R R$H H H H H$ H H HVH H H H(Z" Z" Z" Z" Z"$ Z" Z" Z"z  L'w ? ? ?  uj ) ) )  ,f 5 5 5  L' / / /  uj ) ) ) ) )r   