K i|!ddlmZddlZddlmZddlmZmZddlm Z ddlm Z ddlm Z dd ZGd d ejZGd d ej ZddZGddej&Zej*ej,eeej.deej0ej,dej2ej,eej4dey)) annotationsN)IO)Image ImageFile)i32be)o8)o32bec$|jdS)Nqoif) startswith)prefixs X/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py_acceptrs   W %%ceZdZdZdZddZy) QoiImageFileQOIzQuite OK Imagec0t|jjds d}t|t |jjdt |jjdf|_|jjdd}|dk(rdnd|_|jjdtjtjdd |j z|jjg|_ y) Nznot a QOI filerrRGBRGBAqoirr)rfpread SyntaxErrori32_size_modeseekosSEEK_CURr_Tiletelltile)selfmsgchannelss r_openzQoiImageFile._openstww||A'"Cc" "a)3tww||A+?? 77<<?1%&!mU   Q $__UFTZZ,?PQ rN)returnNone)__name__ __module__ __qualname__formatformat_descriptionr+rrrrs F) Rrrc>eZdZUdZdZded<iZded<d dZd dZy) QoiDecoderTNzbytes | bytearray | None_previous_pixelzdict[int, bytes | bytearray]_previously_seen_pixelscr||_|\}}}}|dz|dzz|dzz|dzzdz}||j|<y)Nr @)r6r7)r(valuergba hash_values r_add_to_previous_pixelsz"QoiDecoder._add_to_previous_pixels.sO$ 1a!ea!ema!e+a"f4: 38$$Z0rc  jJi_td_t}t j j }jjjjz|z}t||kr,jjdd}|dk(rBjr6tjjdjddz}n|dk(rjjd}nu|dz }|dk(r,|d z}jj|td }n?|dk(rzjrntjd|d zdz zd z d zjd|dzd z zd z d zjd |dzzd z d zjdf}n|d k(rjrvjjdd} |d zdz | dzdz dz } | dzdz } tt fdt| d| fD}|jddz }n9|dk(r4jr(|d zdz} j}|dk(r|dd}||| zz } j|dk(r|dd}||z }t||kr,j!|y)NrrrrrrrFr?rrrr0 c3TK|]\}}j|z|zdz!yw)rMN)r6).0idiff diff_greenr(s r z$QoiDecoder.decode..^s7 '4"11!4zADHCOs%()r)fdr7 bytearrayr6r getmodebandsmodestatexsizeysizelenrgettuple enumeraterC set_as_raw)r(bufferdatabands dest_lengthbyter=opop_index second_bytediff_red diff_blue run_lengthrWs` @rdecodezQoiDecoder.decode5sww"""')$(8{""499-jj&&)9)99EA $i+%77<<?1%Dz!d&:&:!$'',,q/2T5I5I!"5MM# QQY7#j0H 88<< )L"9E1W!5!5%!11!4 9Jq8PQTUU!"!11!4 9Jq8PQTUU!"!11!4z8IJQNRUU 003  E1W!5!5"&'',,q/!"4K"&"3r!9J!,z!9a ?1DH!,z!9Q >I%+4h95M+NE T11!"55E1W!5!5"&"3q!8J 00Ez %bq EJ..D  ( ( /zbq  EMDc$i+%d r)r=zbytes | bytearrayr,r-)rfz$bytes | Image.SupportsArrayInterfacer,ztuple[int, int]) r.r/r0 _pulls_fdr6__annotations__r7rCrqr3rrr5r5)s(I04O-4<>9>9<rr5c B|jdk(rd}n|jdk(rd}n d}t||jjddk(rdnd }|j d |j t |j d|j t |j d |j t||j t|tj||tjd d |j zgy) NrrrrzUnsupported QOI image mode colorspacesRGBrrr rr) r] ValueError encoderinforbwriteo32sizer r_saver%)imrfilenamer*r)rus rr|r|ts ww% F *onn((6&@aJHHWHHS_HHS_HHR\HHR ^ OOBY__UFRWW4DEFGrcJeZdZUdZdZded<iZded<dZd dZd d Z d d Z y) QoiEncoderTNz tuple[int, int, int, int] | Noner6z$dict[int, tuple[int, int, int, int]]r7rcJtd|jdz z}d|_|S)Nrr)r _run)r(rgs r _write_runzQoiEncoder._write_runs%* A ./  rc*||z dz}|dk\r|dz}|S)NrFrMr3)r(leftrightresults r_deltazQoiEncoder._deltas%,#% S= cMF rc4|jJddi|_d|_t}|jj\}}t j |j}t|D]o}t|D]]}|jj||f}|dk(rg|d}||jk(r:|xjdz c_ |jdk(r||jz }n|jr||jz }|\} } } } | dz| dzz| d zz| d zzd z} |jj| |k(r|t| z }ns|jrf||j| <|j\}}}}|| k(r$|j| |}|j| |}|j| |}d |cxkrd krFnnCd |cxkrd kr8nn5d |cxkrd kr*nn'|td |d zdzz|d zd zz|d zzz }n|j||}|j||}d|cxkrdkrNnnKd|cxkrdkr@nn=d|cxkrdkr2nn/|td|dzzz }|t|dzdz|dzzz }n<|tdz }|t|ddz }n|tdz }|t|z }||_`r|jr||jz }|tdz }t!|d|fS)NrrJrErrFr>r9r:r;r<rLrirQirOrrG)rrrrrrrr)r}r7r6r[r{rr\r]rangegetpixelrrrbr rbytesra)r(bufsizergwhrhyxpixelr>r?r@rArBprev_rprev_gprev_bprev_adelta_rdelta_gdelta_bdelta_grdelta_gbs rencodezQoiEncoder.encodes/ww"""()<'8$-{ww||1""499-q9 -A1X8 -((!Q0A:)eMSMED000IINIyyB 11yy 11!&JAq!Q"#a%!a%-!a%"7!b&"@B!FJ3377 CuL:.--CH44Z@9=9M9M6!Q;&*kk!V&rs# !!&R9&&R$H$$HVH(Z"$$Z"zL''w?uj),,f5L''/uj)r