Ë
    ¼Ó^jwt  ã                  ó¾  — d dl mZ d dlmZ d dlmZmZmZ d dlZd dl	Z
d dlZd dlZd dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZ e
j:                  e
j<                  e
j>                  dœZ ej:                  ej<                  ejB                  dœZ"dEd„Z#dFd	„Z$dGd
„Z%dGd„Z&	 	 	 	 	 	 	 	 dHd„Z'edIdJd„«       Z(	 	 	 	 	 	 	 	 	 	 dKd„Z)	 	 	 	 	 	 	 	 dLd„Z*	 	 	 	 	 	 	 	 dMd„Z+	 	 	 	 	 	 	 	 dNd„Z,	 	 	 	 	 	 	 	 dOd„Z-dPd„Z.edQd„«       Z/dRd„Z0edSd„«       Z1edTd„«       Z2edFd„«       Z3dUdVd„ZedUdPd„«       Z4dRd„Z5dPd„Z6edUdSd„«       Z7edWd„«       Z8edUdWd„«       Z9dUdVd „ZdXd!„Z:edXd"„«       Z;edXd#„«       Z<dYd$„Z=dZd%„Z>edGd&„«       Z?dUd[d'„Z@edUd\d(„«       ZdEd)„ZAedEd*„«       ZBe	 dU	 	 	 	 	 	 	 	 	 	 	 d]d+„«       ZCedEd,„«       ZDd^d-„ZEed^d.„«       ZFd_d/„ZGedUd_d0„«       ZHed`d1„«       ZIed`d2„«       ZJed`d3„«       ZKd`d4„ZLdadbd5„ZMedadbd6„«       ZNedadbd7„«       ZOdadbd8„ZPdadcd9„ZQedadcd:„«       ZRdadcd;„ZSeddd<„«       ZTeddd=„«       ZUddd>„ZVeddd?„«       ZWeddd@„«       ZXdddA„ZYdedB„ZZdfdC„Z[dfdD„Z\y)gé    )Úannotations©Úwraps)ÚAnyÚCallableÚLiteralN)Ú
contiguousÚpreserve_channel_dim)
ÚMAX_OPENCV_WORKING_CHANNELSÚMAX_VALUES_BY_DTYPEÚMONO_CHANNEL_DIMENSIONSÚNormalizationTypeÚ	ValueTypeÚclipÚclippedÚconvert_valueÚget_max_valueÚget_num_channels)ÚmultiplyÚaddÚpowerc           	     óf  — | j                   }| j                  }|j                  |k7  rt        |j                  |d¬«      |d¬«      }t	        j
                  t        j                  | j                  d«      |j                  |d¬«      j                  d«      ||¬«      |¬«      j                  |«      S )NF©ÚcopyT©Úinplaceéÿÿÿÿ)ÚalphaÚbeta©Údtype)	Úshaper!   r   ÚastypeÚnpÚ
frombufferÚssÚwsumÚreshape)Úimg1Úweight1Úimg2Úweight2Úoriginal_shapeÚoriginal_dtypes         ú]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/albucore/functions.pyÚadd_weighted_simsimdr0      s•   € Ø—Z‘Z€NØ—Z‘Z€Nà‡z�z�^Ò#Ü�D—K‘K °U�KÓ;¸^ÐUYÔZˆä�=‰=Ü
�‰�—‘˜RÓ  $§+¡+¨nÀ5 +Ó"I×"QÑ"QÐRTÓ"UÐ]dÐkrÔsØô÷ �gØóðó    c                ó   — t        | d|d«      S ©Né   )r0   ©ÚimgÚvalues     r/   Úadd_array_simsimdr8   -   s   € Ü  Q¨¨qÓ1Ð1r1   c                óD   — t        | |t        j                  | «      d«      S ©Nr   )r0   r$   Ú
zeros_liker5   s     r/   Úmultiply_by_constant_simsimdr<   1   s   € Ü  U¬B¯M©M¸#Ó,>ÀÓBÐBr1   c                ó€   — t        | dt        j                  | «      |z  j                  | j                  d¬«      d«      S )Nr4   Fr   )r0   r$   Ú	ones_liker#   r!   r5   s     r/   Úadd_constant_simsimdr?   5   s7   € Ü  Q¬¯©°cÓ):¸UÑ)B×(JÑ(JÈ3Ï9É9Ð[`Ð(JÓ(aÐcdÓeÐer1   c                ót  — t         |    }| t        j                  k(  r|dk(  rt        j                  |«      }t        j                  |t        j
                  ¬«      j                  dd«      }t        j                  d|dz   t        j
                  ¬«      }|t        v rt        |   ||«      S t        d|› �«      ‚)Nr   r    r   r4   r   zUnsupported operation: )
r   r$   Úuint8ÚtruncÚarrayÚfloat32r(   ÚarangeÚnp_operationsÚ
ValueError)r!   r7   Ú	operationÚ	max_valueÚluts        r/   Úcreate_lut_arrayrK   9   s–   € ô
 $ EÑ*€Ià”—‘Ò˜Y¨%Ò/Ü—‘˜“ˆä�H‰H�U¤"§*¡*Ô-×5Ñ5°b¸!Ó<€EÜ
�)‰)�A�y 1‘}¬B¯J©JÔ
7€Cà”MÑ!Ü˜YÑ'¨¨UÓ3Ð3ä
Ð.¨y¨kÐ:Ó
;Ð;r1   c                ó~   — |s| j                  «       } t        j                  t        | «      t        |«      d¬«       | S ©NTr   )r   ÚszÚ	translateÚ
memoryview)r6   rJ   r   s      r/   Úsz_lutrQ   L   s-   € áØ�h‰h‹jˆä‡L�L”˜C“¤*¨S£/¸4Õ@Ø€Jr1   c                ót  — | j                   }t        |t        t        f«      r&t	        |||«      }t        | t        ||d¬«      d«      S | j                  d   }t        t	        |||«      |d¬«      }t        j                  t        |«      D �cg c]  }t        | d d …d d …|f   ||   |«      ‘Œ c}«      S c c}w )NFr   r   )r!   Ú
isinstanceÚintÚfloatrK   rQ   r   r"   Úcv2ÚmergeÚrange)	r6   r7   rH   r   r!   rJ   Únum_channelsÚlutsÚis	            r/   Ú	apply_lutr\   U   sŸ   € ð �I‰I€Eä�%œ#œu˜Ô&Ü˜u e¨YÓ7ˆÜ�cœ4  U°EÔ:¸EÓBÐBà—9‘9˜R‘=€LäÔ  ¨¨yÓ9¸5È%ÔP€DÜ�9‰9ÄeÈLÓFYÖZÀ”f˜S¢¢A q ™\¨4°©7°GÕ<ÒZÓ[Ð[ùÒZs   Â!B5c                ób   — t        |t        t        f«      rt        | ||«      S t	        | ||«      S ©N)rS   rT   rU   Ú_prepare_scalar_valueÚ_prepare_array_value©r6   r7   rH   s      r/   Úprepare_value_opencvrb   g   s8   € ô �eœc¤5˜\Ô*ô 	˜c 5¨)Ó4ðô " # u¨iÓ8ðr1   c                ó‚  — |dk(  r(| j                   t        j                  k(  rt        |«      }t	        | «      }|t
        kD  r}|dk(  rC|dk  rt        j                  n| j                   }t        j                  | j                  ||¬«      S |dk(  r0t        j                  | j                  |t        j                  ¬«      S |S )Nr   r   r    r   )	r!   r$   rA   rT   r   r   rD   Úfullr"   )r6   r7   rH   rY   Ú	cast_types        r/   r_   r_   s   s“   € ð
 �EÒ˜cŸi™i¬2¯8©8Ò3Ü�E“
ˆÜ# CÓ(€LØÔ1Ò1Ø˜Òà&+¨a¢iœŸ
š
°S·Y±YˆIÜ—7‘7˜3Ÿ9™9 e°9Ô=Ð=Ø˜
Ò"Ü—7‘7˜3Ÿ9™9 e´2·:±:Ô>Ð>Ø€Lr1   c                ó  — |j                   t        j                  k(  r!|j                  t        j                  d¬«      }|j
                  dk(  r|j                  ddd«      }t        j                  || j                  «      }|dk(  r…| j                   t        j                  k(  rht        j                  |dk\  «      rt        |t        j                  d¬«      S t        j                  |«      j                  t        j                  d¬«      S |S )NFr   r4   r   r   r   r   )r!   r$   Úfloat64r#   rD   Úndimr(   Úbroadcast_tor"   rA   Úallr   rB   ra   s      r/   r`   r`   …   s¼   € ð
 ‡{�{”b—j‘jÒ Ø—‘œRŸZ™Z¨e�Ó4ˆØ‡z�z�Q‚Ø—‘˜a  BÓ'ˆÜ�O‰O˜E 3§9¡9Ó-€EØ�EÒ˜cŸi™i¬2¯8©8Ò3Ü�6‰6�%˜1‘*ÔÜ˜œrŸx™x°Ô7Ð7Ü�x‰x˜‹×%Ñ%¤b§j¡j°uÐ%Ó=Ð=Ø€Lr1   c                óÌ   — |dk(  r2| j                   t        j                  k(  rt        j                  |«      }t	        |   | j                  t        j                  d¬«      |«      S )Nr   Fr   )r!   r$   rA   Úint16rF   r#   rD   ra   s      r/   Úapply_numpyrm   –   sK   € ð
 �EÒ˜cŸi™i¬2¯8©8Ò3Ü—‘˜“ˆä˜Ñ# C§J¡J¬r¯z©zÀ JÓ$FÈÓNÐNr1   c                ó   — t        | |d|«      S ©Nr   ©r\   ©r6   r7   r   s      r/   Úmultiply_lutrr   ¡   s   € Ü�S˜% ¨WÓ5Ð5r1   c                óì   — t        | |d«      }| j                  t        j                  k(  r5t	        j
                  | j                  t        j                  d¬«      |«      S t	        j
                  | |«      S )Nr   Fr   )rb   r!   r$   rA   rV   r   r#   rD   r5   s     r/   Úmultiply_opencvrt   ¥   sS   € ä   e¨ZÓ8€EØ
‡y�y”B—H‘HÒÜ�|‰|˜CŸJ™J¤r§z¡z¸˜JÓ>ÀÓFÐFÜ�<‰<˜˜UÓ#Ð#r1   c                ó   — t        | |d«      S ro   ©rm   r5   s     r/   Úmultiply_numpyrw   ­   s   € Ü�s˜E :Ó.Ð.r1   c                óÀ   — | j                   t        j                  k(  rt        | ||«      S | j                   t        j                  k(  rt        | |«      S t        | |«      S r^   )r!   r$   rA   rr   rD   rw   rt   rq   s      r/   Úmultiply_by_constantry   ±   sK   € à
‡y�y”B—H‘HÒÜ˜C ¨Ó0Ð0Ø
‡y�y”B—J‘JÒÜ˜c 5Ó)Ð)Ü˜3 Ó&Ð&r1   c                ó˜   — | j                   t        j                  k(  rt        | ||«      S |t        kD  rt        | |«      S t        | |«      S r^   )r!   r$   rA   rr   r   rw   rt   )r6   r7   rY   r   s       r/   Úmultiply_by_vectorr{   º   sF   € ð ‡y�y”B—H‘HÒÜ˜C ¨Ó0Ð0àÔ1Ò1Ü˜c 5Ó)Ð)Ü˜3 Ó&Ð&r1   c                ó   — t        | |«      S r^   )rt   r5   s     r/   Úmultiply_by_arrayr}   Å   s   € ä˜3 Ó&Ð&r1   c                óü   — t        | «      }t        ||«      }t        |t        t        f«      rt        | ||«      S t        |t        j                  «      r|j                  dk(  rt        | |||«      S t        | |«      S r3   )r   r   rS   rU   rT   ry   r$   Úndarrayrh   r{   r}   ©r6   r7   r   rY   s       r/   r   r   Ê   sk   € Ü# CÓ(€LÜ˜% Ó.€Eä�%œ%¤˜Ô&Ü# C¨°Ó8Ð8ä�%œŸ™Ô$¨¯©°qªÜ! # u¨l¸GÓDÐDä˜S %Ó(Ð(r1   c                ó*  — t        | |d«      }| j                  t        j                  k(  xrX t	        |t
        t        f«      xr |dk  xs9 t	        |t        j                  «      xr |j                  t        j                  k7  }|rpt        j                  | j                  t        j                  d¬«      t	        |t
        t        f«      r|«      S |j                  t        j                  d¬«      «      S |r| nd }t        j                  | ||¬«      S )Nr   r   Fr   )Údst)rb   r!   r$   rA   rS   rT   rU   r   rV   r   r#   rD   )r6   r7   r   Úneeds_floatr‚   s        r/   Ú
add_opencvr„   ×   sâ   € ä   e¨UÓ3€Eð
 —)‘)œrŸx™xÑ'ò Ü	�EœC¤˜<Ó	(Ò	6¨U°Q©YÒv¼JÀuÌbÏjÉjÓ<YÒ<uÐ^c×^iÑ^iÔmo×muÑmuÑ^uð ñ Ü�w‰wØ�J‰J”r—z‘z¨ˆJÓ.Ü ¬¬U |Ô4ˆEó
ð 	
à:?¿,¹,ÄrÇzÁzÐX]¸,Ó:^ó
ð 	
ñ ‰#˜d€CÜ�7‰7�3˜ 3Ô'Ð'r1   c                ó   — t        | |d«      S ©Nr   rv   r5   s     r/   Ú	add_numpyr‡   í   s   € Ü�s˜E 5Ó)Ð)r1   c                ó   — t        | |d|«      S r†   rp   rq   s      r/   Úadd_lutr‰   ñ   s   € Ü�S˜% ¨Ó0Ð0r1   c                ó   — t        | ||«      S r^   ©r„   rq   s      r/   Úadd_constantrŒ   õ   ó   € ä�c˜5 'Ó*Ð*r1   c                óp   — | j                   t        j                  k(  rt        | ||«      S t	        | ||«      S r^   )r!   r$   rA   r‰   r„   rq   s      r/   Ú
add_vectorr�   ú   s0   € à
‡y�y”B—H‘HÒÜ�s˜E 7Ó+Ð+Ü�c˜5 'Ó*Ð*r1   c                ó   — t        | ||«      S r^   r‹   rq   s      r/   Ú	add_arrayr‘     r�   r1   c                ó&  — t        | «      }t        ||«      }t        |t        t        f«      r<|dk(  r| S | j
                  t        j                  k(  rt	        |«      }t        | ||«      S |j                  dk(  rt        | ||«      S t        | ||«      S )Nr   r4   )r   r   rS   rU   rT   r!   r$   rA   rŒ   rh   r�   r‘   r€   s       r/   r   r     sƒ   € Ü# CÓ(€LÜ˜% Ó.€Eä�%œ%¤˜Ô&Ø�AŠ:ØˆJà�9‰9œŸ™Ò Ü˜“JˆEä˜C ¨Ó0Ð0à.3¯j©j¸AªoŒ:�c˜5 'Ó*ÐaÄ9ÈSÐRWÐY`ÓCaÐar1   c                óX   — | j                  t        j                  d¬«      } | |z  } | |z  S ©NFr   ©r#   r$   rD   )r6   ÚmeanÚdenominators      r/   Únormalize_numpyr˜     s,   € Ø
�*‰*”R—Z‘Z eˆ*Ó
,€CØˆ4�K€CØ�ÑÐr1   c                óº  — | j                  t        j                  d¬«      } t        j                  | t        j                  ¬«      }t        j                  | t        j                  ¬«      }t	        |t
        t        f«      r0t        j                  | j                  |t        j                  ¬«      }t	        |t
        t        f«      r0t        j                  | j                  |t        j                  ¬«      }||z   j                  t        j                  d¬«      }||z   }t        j                  | |«      }t        j                  ||t        j                  ¬«      S )NFr   r    )r#   r$   rD   r;   rS   rU   rT   rd   r"   rV   Úsubtractr   ÚCV_32F)r6   r–   r—   Úmean_imgÚdenominator_imgÚresults         r/   Únormalize_opencvrŸ     sâ   € à
�*‰*”R—Z‘Z eˆ*Ó
,€CÜ�}‰}˜S¬¯
©
Ô3€HÜ—m‘m C¬r¯z©zÔ:€Oô �$œ¤˜Ô%Ü�w‰w�s—y‘y $¬b¯j©jÔ9ˆÜ�+¤¤s˜|Ô,Ü—g‘g˜cŸi™i¨¼B¿J¹JÔGˆð ˜4‘×'Ñ'¬¯
©
¸Ð'Ó?€HØ%¨Ñ3€Oä�\‰\˜#˜xÓ(€FÜ�<‰<˜ ´s·z±zÔBÐBr1   c                óô  — | j                   }t        |   }t        | «      }t        |t        t
        f«      r[t        |t        t
        f«      rEt        j                  d|dz   t        j                  ¬«      |z
  |z  }t        j                  | |«      S t        |t        j                  «      r!|j                  dk7  r|j                  dd«      }t        |t        j                  «      r|j                  dd«      }t        j                  d|dz   t        j                  ¬«      |z
  |z  }t        j                  t        |«      D �cg c]%  }t        j                  | d d …d d …|f   ||   «      ‘Œ' c}«      S c c}w )Nr   r4   r    © r   )r!   r   r   rS   rU   rT   r$   rE   rD   rV   ÚLUTr   r"   r(   rW   rX   )	r6   r–   r—   r!   rI   rY   rJ   rZ   r[   s	            r/   Únormalize_lutr£   0  s  € à�I‰I€EÜ# EÑ*€IÜ# CÓ(€Lä�+¤¤s˜|Ô,´¸DÄ5Ì#À,Ô1OÜ�y‰y˜˜I¨™M´·±Ô<¸tÑCÀ{ÑRˆÜ�w‰w�s˜CÓ Ð ä�+œrŸz™zÔ*¨{×/@Ñ/@ÀBÒ/FØ!×)Ñ)¨"¨aÓ0ˆä�$œŸ
™
Ô#Ø�|‰|˜B Ó"ˆä�I‰I�a˜ Q™¬b¯j©jÔ9¸DÑ@ÀKÑO€Dä�9‰9¼eÀLÓ>QÖR¸”c—g‘g˜c¢!¢Q¨ '™l¨D°©GÕ4ÒRÓSÐSùÒRs   Å*E5c                ó¶   — t        | «      }t        ||«      }t        ||«      }| j                  t        j                  k(  rt        | ||«      S t        | ||«      S r^   )r   r   r!   r$   rA   r£   rŸ   )r6   r–   r—   rY   s       r/   Ú	normalizer¥   E  sR   € Ü# CÓ(€LÜ ¨\Ó:€KÜ˜˜|Ó,€DØ
‡y�y”B—H‘HÒÜ˜S $¨Ó4Ð4ä˜C  {Ó3Ð3r1   c                ó   — t        | |d«      S ©Nr   rv   )r6   Úexponents     r/   Úpower_numpyr©   O  s   € Ü�s˜H gÓ.Ð.r1   c                óè  — | j                   t        j                  k(  rt        j                  | |«      S | j                   t        j
                  k(  r$t        |«      |k(  rt        j                  | |«      S | j                   t        j
                  k(  rGt        |t        «      r7| j                  t        j                  d¬«      }t        j                  ||«      S t        d| j                   › d|› �«      ‚)z(Handle the 'power' operation for OpenCV.Fr   zUnsupported image type z  for power operation with value )r!   r$   rD   rV   ÚpowrA   rT   rS   rU   r#   rG   )r6   r7   Ú	img_floats      r/   Úpower_opencvr­   S  s±   € ð ‡y�y”B—J‘JÒä�w‰w�s˜EÓ"Ð"Ø
‡y�y”B—H‘HÒ¤ U£¨uÒ!4ä�w‰w�s˜EÓ"Ð"Ø
‡y�y”B—H‘HÒ¤¨E´5Ô!9à—J‘JœrŸz™z°�JÓ6ˆ	Ü�w‰w�y %Ó(Ð(ä
Ð.¨s¯y©y¨kÐ9YÐZ_ÐY`ÐaÓ
bÐbr1   c                ó   — t        | |d|«      S r§   rp   )r6   r¨   r   s      r/   Ú	power_lutr¯   e  s   € Ü�S˜( G¨WÓ5Ð5r1   c                óà   — t        | «      }t        ||«      }| j                  t        j                  k(  rt        | ||«      S t        |t        t        f«      rt        | |«      S t        | |«      S r^   )r   r   r!   r$   rA   r¯   rS   rU   rT   r­   r©   )r6   r¨   r   rY   s       r/   r   r   i  s_   € ä# CÓ(€LÜ˜X |Ó4€HØ
‡y�y”B—H‘HÒÜ˜˜h¨Ó0Ð0ä�(œU¤C˜LÔ)Ü˜C Ó*Ð*ä�s˜HÓ%Ð%r1   c                ó”   — | j                  t        j                  d¬«      |z  |j                  t        j                  d¬«      |z  z   S r”   r•   ©r)   r*   r+   r,   s       r/   Úadd_weighted_numpyr³   v  s;   € Ø�;‰;”r—z‘z¨ˆ;Ó.°Ñ8¸4¿;¹;ÄrÇzÁzÐX]¸;Ó;^ÐahÑ;hÑhÐhr1   c                ó4   — t        j                  | |||d«      S r:   )rV   ÚaddWeightedr²   s       r/   Úadd_weighted_opencvr¶   z  s   € ä�?‰?˜4 ¨$°¸Ó;Ð;r1   c                óê  — | j                   }t        |   }|dk(  r|dk(  r| S |dk(  r|dk(  r|S |dk(  r|dk(  rt        j                  | «      S |dk(  r|dk(  rt	        | ||«      S t        j
                  d|dz   t        j                  ¬«      |z  }t        j                  | |«      }t        j
                  d|dz   t        j                  ¬«      |z  }	t        j                  ||	«      }
t        ||
|«      S )Nr4   r   r    )
r!   r   r$   r;   r‘   rE   rD   rV   r¢   r„   )r)   r*   r+   r,   r   r!   rI   Úlut1Úresult1Úlut2Úresult2s              r/   Úadd_weighted_lutr¼     sà   € ð �J‰J€EÜ# EÑ*€Ià�!‚|˜ 1šØˆà�!‚|˜ 1šØˆà�!‚|˜ 1šÜ�}‰}˜TÓ"Ð"à�!‚|˜ 1šÜ˜˜t WÓ-Ð-ä�9‰9�Q˜	 A™¬R¯Z©ZÔ8¸7ÑB€DÜ�g‰g�d˜DÓ!€Gä�9‰9�Q˜	 A™¬R¯Z©ZÔ8¸7ÑB€DÜ�g‰g�d˜DÓ!€Gä�g˜w¨Ó0Ð0r1   c                óœ   — | j                   |j                   k7  r&t        d| j                   › d|j                   › d�«      ‚t        | |||«      S )Nz/The input images must have the same shape. Got z and ú.)r"   rG   r0   r²   s       r/   Úadd_weightedr¿   Ÿ  sL   € à‡z�z�T—Z‘ZÒÜÐJÈ4Ï:É:È,ÐV[Ð\`×\fÑ\fÐ[gÐghÐiÓjÐjä  g¨t°WÓ=Ð=r1   c                óJ  — t        |t        t        f«      rA|dk(  r<t        |t        t        f«      r&|dk(  r!t        j                  | | j
                  ¬«      S |dk7  rt        j                  | |«      nt        j                  | «      }|dk(  r|S t        j                  ||«      S )Nr   r    )rS   rT   rU   r$   r;   r!   r   r   ©r6   Úfactorr7   rž   s       r/   Úmultiply_add_numpyrÃ   §  s   € Ü�%œ#œu˜Ô&¨5°Aª:¼*ÀVÌcÔSXÈ\Ô:ZÐ_eÐijÒ_jÜ�}‰}˜S¨¯	©	Ô2Ð2à)/°1ªŒR�[‰[˜˜fÔ%¼"¿-¹-ÈÓ:L€Fà˜a’Zˆ6Ð:¤R§V¡V¨F°EÓ%:Ð:r1   c                ó$  — t        |t        t        f«      r5|dk(  r0t        |t        t        f«      r|dk(  rt        j                  | «      S | j                  t        j                  d¬«      }|dk7  r<t        j                  |t        j                  |«      |z  t        j                  ¬«      n t        j                  || j                  ¬«      }|dk(  r|S t        j                  |t        j                  |«      |z  t        j                  ¬«      S )Nr   Fr   r    )rS   rT   rU   r$   r;   r#   rD   rV   r   r>   ÚCV_64Fr!   r   rÁ   s       r/   Úmultiply_add_opencvrÆ   °  sË   € ä�%œ#œu˜Ô&¨5°Aª:¼*ÀVÌcÔSXÈ\Ô:ZÐ_eÐijÒ_jÜ�}‰}˜SÓ!Ð!à�Z‰ZœŸ
™
¨ˆZÓ/€Fð �QŠ;ô 	�‰�VœRŸ\™\¨&Ó1°FÑ:Ä#Ç*Á*ÕMä�]‰]˜6¨¯©Ô3ð ð
 ˜a’Zˆ6Ðd¤S§W¡W¨V´R·\±\À&Ó5IÈEÑ5QÔY\×YcÑYcÔ%dÐdr1   c                ó  — | j                   }t        |   }t        | «      }t        |t        t
        f«      r^t        |t        t
        f«      rHt        t        j                  d|dz   t        j                  ¬«      |z  |z   |d¬«      }t        | ||«      S t        |t        j                  «      r!|j                  dk7  r|j                  dd«      }t        |t        j                  «      r!|j                  dk7  r|j                  dd«      }t        t        j                  d|dz   t        j                  ¬«      |z  |z   |d¬«      }t        j                  t!        |«      D �	cg c]  }	t        | d d …d d …|	f   ||	   |«      ‘Œ c}	«      S c c}	w )	Nr   r4   r    Fr   r¡   r   T)r!   r   r   rS   rU   rT   r   r$   rE   rD   rQ   r   r"   r(   rV   rW   rX   )
r6   rÂ   r7   r   r!   rI   rY   rJ   rZ   r[   s
             r/   Úmultiply_add_lutrÈ   ¾  s2  € Ø�I‰I€EÜ# EÑ*€IÜ# CÓ(€Lä�&œ5¤#˜,Ô'¬J°u¼uÄc¸lÔ,KÜ”2—9‘9˜Q 	¨A¡´R·Z±ZÔ@À6ÑIÈEÑQÐSXÐbgÔhˆÜ�c˜3 Ó(Ð(ä�&œ"Ÿ*™*Ô%¨&¯,©,¸"Ò*<Ø—‘  AÓ&ˆä�%œŸ™Ô$¨¯©¸Ò):Ø—‘˜b !Ó$ˆä”—	‘	˜!˜Y¨™]´"·*±*Ô=ÀÑFÈÑNÐPUÐ_cÔd€Dä�9‰9ÄeÈLÓFYÖZÀ”f˜S¢¢A q ™\¨4°©7°GÕ<ÒZÓ[Ð[ùÒZs   Å"!F
c                ó¸   — t        | «      }t        ||«      }t        ||«      }| j                  t        j                  k(  rt        | |||«      S t        | ||«      S r^   )r   r   r!   r$   rA   rÈ   rÆ   )r6   rÂ   r7   r   rY   s        r/   Úmultiply_addrÊ   Ò  sT   € ä# CÓ(€LÜ˜6 <Ó0€FÜ˜% Ó.€Eà
‡y�y”B—H‘HÒÜ  V¨U°GÓ<Ð<ä˜s F¨EÓ2Ð2r1   c                ój  — | j                  t        j                  d¬«      } d}| j                  t        k(  rt        j
                  | d¬«      } |dk(  s| j                  d   dk(  rÉ|dk(  rÄ| j                  «       j                  «       }| j                  «       j                  «       |z   }| j                  d   t        kD  r,t        j                  | |«      }t        j                  | |«      }t        j                  t        j                  | |«      |«      }t        j                  |d	d
|¬«      S |dk(  r¿t        j                   | «      \  }}|d d …df   }|d d …df   }| j                  d   t        kD  r,t        j                  | |«      }t        j                  | |«      }t        j                  t        j                  | |«      |t        j"                  ¬«      }t        j                  |d	d
|¬«      S |dk(  s| j                  d   dk(  r\|dk(  rW| j%                  «       }| j'                  «       }t        j(                  | d ddt        j*                  t        j"                  ¬«      S |dk(  r½| j%                  d¬«      }| j'                  d¬«      }| j                  d   t        kD  r,t        j                  | |«      }t        j                  | |«      }t        j                  t        j                  t        j                  | |«      ||z
  |z   t        j"                  ¬«      d	d
| ¬«      S t-        d|› �«      ‚)NFr   ç-Cëâ6?r   ©ÚaxisÚimager4   Úimage_per_channeléìÿÿÿé   ©Úoutr   r    Úmin_maxÚmin_max_per_channel)r   r   Ú	norm_typer!   ©r   r4   úUnknown normalization method: )r#   r$   rD   rh   r   Úexpand_dimsr"   r–   ÚitemÚstdr   Ú	full_likerV   Údividerš   r   Ú
meanStdDevr›   ÚminÚmaxr¥   ÚNORM_MINMAXrG   )r6   ÚnormalizationÚepsr–   rÜ   Únormalized_imgÚimg_minÚimg_maxs           r/   Únormalize_per_image_opencvrè   Þ  s�  € à
�*‰*”R—Z‘Z eˆ*Ó
,€CØ
€Cà
‡x�xÔ*Ò*Ü�n‰n˜S rÔ*ˆà˜Ò C§I¡I¨b¡M°QÒ$6¸=ÐL_Ò;_Ø�x‰x‹z�‰Ó ˆØ�g‰g‹i�n‰nÓ Ñ$ˆØ�9‰9�R‰=Ô6Ò6Ü—<‘<  TÓ*ˆDÜ—,‘,˜s CÓ(ˆCÜŸ™¤C§L¡L°°dÓ$;¸SÓAˆÜ�w‰w�~ s¨B°NÔCÐCàÐ+Ò+Ü—N‘N 3Ó'‰	ˆˆcØ’A�q�D‰zˆØ’!�Q�$‰iˆà�9‰9�R‰=Ô6Ò6Ü—<‘<  TÓ*ˆDÜ—,‘,˜s CÓ(ˆCäŸ™¤C§L¡L°°dÓ$;¸SÌÏ
É
ÔSˆÜ�w‰w�~ s¨B°NÔCÐCà˜	Ò! c§i¡i°¡m°qÒ&8¸]ÐNcÒ=cØ—'‘'“)ˆØ—'‘'“)ˆÜ�}‰}˜S $¨a°aÄ3Ç?Á?ÔZ]×ZdÑZdÔeÐeàÐ-Ò-Ø—'‘'˜v�'Ó&ˆØ—'‘'˜v�'Ó&ˆà�9‰9�R‰=Ô6Ò6Ü—l‘l 3¨Ó0ˆGÜ—l‘l 3¨Ó0ˆGä�w‰wÜ�J‰J”s—|‘| C¨Ó1°G¸gÑ4EÈÑ4KÔTW×T^ÑT^Ô_ØØØô	
ð 	
ô Ð5°m°_ÐEÓ
FÐFr1   c                ó  — | j                  t        j                  d¬«      } d}| j                  t        k(  rt        j
                  | d¬«      } |dk(  rD| j                  «       }| j                  «       |z   }| |z
  |z  }t        j                  |dd|¬	«      S |d
k(  rH| j                  d¬«      }| j                  d¬«      |z   }| |z
  |z  }t        j                  |dd|¬	«      S |dk(  rE| j                  «       }| j                  «       }	t        j                  | |z
  |	|z
  |z   z  dd| ¬	«      S |dk(  rI| j                  d¬«      }| j                  d¬«      }	t        j                  | |z
  |	|z
  |z   z  dd| ¬	«      S t        d|› �«      ‚)NFr   rÌ   r   rÍ   rÏ   rÑ   rÒ   rÓ   rÐ   rØ   rÕ   rÖ   rÙ   )r#   r$   rD   rh   r   rÚ   r–   rÜ   r   rà   rá   rG   )
r6   rã   rä   r–   rÜ   rå   Ú
pixel_meanÚ	pixel_stdræ   rç   s
             r/   Únormalize_per_image_numpyrì     s}  € à
�*‰*”R—Z‘Z eˆ*Ó
,€CØ
€Cà
‡x�xÔ*Ò*Ü�n‰n˜S rÔ*ˆà˜ÒØ�x‰x‹zˆØ�g‰g‹i˜#‰oˆØ ™*¨Ñ+ˆÜ�w‰w�~ s¨B°NÔCÐCàÐ+Ò+Ø—X‘X 6�XÓ*ˆ
Ø—G‘G �GÓ(¨3Ñ.ˆ	Ø 
Ñ*¨iÑ7ˆÜ�w‰w�~ s¨B°NÔCÐCà˜	Ò!Ø—'‘'“)ˆØ—'‘'“)ˆÜ�w‰w˜˜g™¨'°GÑ*;¸cÑ*AÑBÀCÈÐQTÔUÐUàÐ-Ò-Ø—'‘'˜v�'Ó&ˆØ—'‘'˜v�'Ó&ˆÜ�w‰w˜˜g™¨'°GÑ*;¸cÑ*AÑBÀCÈÐQTÔUÐUä
Ð5°m°_ÐEÓ
FÐFr1   c                óp  — | j                   }t        |   }d}t        | «      }| j                  t        k(  rt        j                  | d¬«      } |dk(  s| j                  d   dk(  r}|dk(  rx| j                  «       }| j                  «       |z   }t        j                  d|dz   t
        j                  ¬«      |z
  |z  }t        j                  | |«      j                  d	d
«      S |dk(  rÏ| j                  d¬«      }	| j                  d¬«      |z   }
t        |«      D �cg c]7  }t        j                  d|dz   t
        j                  ¬«      |	|   z
  |
|   z  ‘Œ9 }}t        j                   t        |«      D �cg c]5  }t        j                  | d d …d d …|f   ||   «      j                  d	d
«      ‘Œ7 c}«      S |dk(  s| j                  d   dk(  r€|dk(  r{| j#                  «       }| j%                  «       }t        j                  d|dz   t
        j                  ¬«      |z
  ||z
  |z   z  }t        j                  | |«      j                  d	d
«      S |dk(  rÅ| j#                  d¬«      }| j%                  d¬«      }t        |«      D �cg c]@  }t        j                  d|dz   t
        j                  ¬«      ||   z
  ||   ||   z
  |z   z  ‘ŒB }}t        j                   t        |«      D �cg c]%  }t        j                  | d d …d d …|f   ||   «      ‘Œ' c}«      S t'        d|› �«      ‚c c}w c c}w c c}w c c}w )NrÌ   r   rÍ   rÏ   r4   rÐ   r   r    rÑ   rÒ   rØ   rÕ   rÖ   rÙ   )r!   r   r   rh   r   r$   rÚ   r"   r–   rÜ   rE   rD   rV   r¢   r   rX   rW   rà   rá   rG   )r6   rã   r!   rI   rä   rY   r–   rÜ   rJ   rê   rë   ÚcrZ   r[   ræ   rç   s                   r/   Únormalize_per_image_lutrï   3  sè  € à�I‰I€EÜ# EÑ*€IØ
€CÜ# CÓ(€Là
‡x�xÔ*Ò*Ü�n‰n˜S rÔ*ˆà˜Ò C§I¡I¨b¡M°QÒ$6¸=ÐL_Ò;_Ø�x‰x‹zˆØ�g‰g‹i˜#‰oˆÜ�y‰y˜˜I¨™M´·±Ô<¸tÑCÀsÑJˆÜ�w‰w�s˜CÓ ×%Ñ% c¨2Ó.Ð.àÐ+Ò+Ø—X‘X 6�XÓ*ˆ
Ø—G‘G �GÓ(¨3Ñ.ˆ	ädiÐjvÓdwö
Ø_`ŒR�Y‰Y�q˜) a™-¬r¯z©zÔ:¸ZÈ¹]ÑJÈiÐXYÉlÓZð
ˆð 
ô �y‰yÔPUÐVbÓPcÖdÈ1œ#Ÿ'™' #¢aª¨A g¡,°°Q±Ó8×=Ñ=¸cÀ2ÕFÒdÓeÐeà˜	Ò! c§i¡i°¡m°qÒ&8¸]ÐNcÒ=cØ—'‘'“)ˆØ—'‘'“)ˆÜ�y‰y˜˜I¨™M´·±Ô<¸wÑFÈ7ÐU\ÑK\Ð_bÑKbÑcˆÜ�w‰w�s˜CÓ ×%Ñ% c¨2Ó.Ð.àÐ-Ò-Ø—'‘'˜v�'Ó&ˆØ—'‘'˜v�'Ó&ˆô ˜<Ó(ö
àô �Y‰Y�q˜) a™-¬r¯z©zÔ:¸WÀQ¹ZÑGÈGÐTUÉJÐY`ÐabÑYcÑLcÐfiÑLiÓjð
ˆð 
ô
 �y‰yÄ%ÈÓBUÖV¸Qœ#Ÿ'™' #¢aª¨A g¡,°°Q±Õ8ÒVÓWÐWä
Ð5°m°_ÐEÓ
FÐFùò+
ùò eùò
ùò
 Ws   Ä<L$Å4:L)ÊAL.Ë%*L3c                óv   — | j                   t        j                  k(  r|dk7  rt        | |«      S t	        | |«      S )NÚper_image_per_channel)r!   r$   rA   rï   rè   )r6   rã   s     r/   Únormalize_per_imagerò   ^  s4   € Ø
‡y�y”B—H‘HÒ Ð2IÒ!IÜ& s¨MÓ:Ð:ä% c¨=Ó9Ð9r1   c                óx   — |€t        | j                  «      }| |z  j                  t        j                  d¬«      S r”   )r   r!   r#   r$   rD   ©r6   rI   s     r/   Úto_float_numpyrõ   e  s4   € ØÐÜ! #§)¡)Ó,ˆ	Ø�)‰O×#Ñ#¤B§J¡J°UÐ#Ó;Ð;r1   c                ó  — |€t        | j                  «      }| j                  t        j                  d¬«      }t        | «      }|t        kD  r,t        j                  ||«      }t        j                  ||«      S t        j                  ||«      S r”   )
r   r!   r#   r$   rD   r   r   rÝ   rV   rÞ   )r6   rI   r¬   rY   Úmax_value_arrays        r/   Úto_float_opencvrø   k  ss   € àÐÜ! #§)¡)Ó,ˆ	à—
‘
œ2Ÿ:™:¨E�
Ó2€Iä# CÓ(€LàÔ1Ò1äŸ,™, y°)Ó<ˆÜ�z‰z˜) _Ó5Ð5ô �:‰:�i Ó+Ð+r1   c                óø   — | j                   t        j                  k7  rt        d«      ‚|€t        | j                      }t        j
                  dt        j                  ¬«      |z  }t        j                  | |«      S )Nz.LUT method is only applicable for uint8 imagesé   r    )	r!   r$   rA   rG   r   rE   rD   rV   r¢   )r6   rI   rJ   s      r/   Úto_float_lutrû   }  s\   € à
‡y�y”B—H‘HÒÜÐIÓJÐJàÐÜ'¨¯	©	Ñ2ˆ	Ü
�)‰)�CœrŸz™zÔ
*¨YÑ
6€CÜ�7‰7�3˜ÓÐr1   c                ó&  — | j                   t        j                  k(  r!| j                  t        j                  d¬«      S | j                   t        j                  k(  r| S | j                   t        j
                  k(  rt        | |«      S t        | |«      S r”   )r!   r$   rg   r#   rD   rA   rû   rõ   rô   s     r/   Úto_floatrý   ˆ  sh   € Ø
‡y�y”B—J‘JÒØ�z‰zœ"Ÿ*™*¨5ˆzÓ1Ð1Ø
‡y�y”B—J‘JÒØˆ
Ø
‡y�y”B—H‘HÒÜ˜C Ó+Ð+Ü˜#˜yÓ)Ð)r1   c                ód   — |€t        |«      }t        t        j                  | |z  «      |d¬«      S rM   )r   r   r$   Úrint©r6   Útarget_dtyperI   s      r/   Úfrom_float_numpyr  ’  s.   € ØÐÜ! ,Ó/ˆ	Ü”—‘˜˜i™Ó(¨,ÀÔEÐEr1   c                ód  — |€t        |«      }| j                  t        j                  d¬«      }t	        | «      }|t
        kD  rKt        j                  ||«      }t        t        j                  t        j                  ||«      «      |d¬«      S t        t        j                  | |z  «      |d¬«      S )NFr   r   )r   r#   r$   rD   r   r   rÝ   r   rÿ   rV   r   )r6   r  rI   r¬   rY   r÷   s         r/   Úfrom_float_opencvr  ˜  s�   € àÐÜ! ,Ó/ˆ	à—
‘
œ2Ÿ:™:¨E�
Ó2€Iä# CÓ(€LàÔ1Ò1äŸ,™, y°)Ó<ˆÜ”B—G‘GœCŸL™L¨°OÓDÓEÀ|Ð]bÔcÐcô ”—‘˜˜i™Ó(¨,ÀÔFÐFr1   c                ó  — |t         j                  k(  r| S |t         j                  k(  r!| j                  t         j                  d¬«      S | j                  t         j                  k(  rt        | ||«      S t        | ||«      S )aÆ  Convert a floating-point image to the specified target data type.

    This function converts an input floating-point image to the specified target data type,
    scaling the values appropriately based on the max_value parameter or the maximum value
    of the target data type.

    Args:
        img (np.ndarray): Input floating-point image array.
        target_dtype (np.dtype): Target numpy data type for the output image.
        max_value (float | None, optional): Maximum value to use for scaling. If None,
            the maximum value of the target data type will be used. Defaults to None.

    Returns:
        np.ndarray: Image converted to the target data type.

    Notes:
        - If the input image is of type float32, the function uses OpenCV for faster processing.
        - For other input types, it falls back to a numpy-based implementation.
        - The function clips values to ensure they fit within the range of the target data type.
    Fr   )r$   rD   rg   r#   r!   r  r  r   s      r/   Ú
from_floatr  ª  sf   € ð* ”r—z‘zÒ!Øˆ
à”r—z‘zÒ!Ø�z‰zœ"Ÿ*™*¨5ˆzÓ1Ð1à
‡y�y”B—J‘JÒÜ   l°IÓ>Ð>ä˜C ¨yÓ9Ð9r1   c                ó   — | d d …d d d…df   S ©Nr   .r¡   ©r6   s    r/   Úhflip_numpyr
  Ë  s   € àŠq‘$�B�$˜ˆ|ÑÐr1   c                óŠ   — | j                   dkD  r| j                  d   dkD  rt        | d¬«      S t        j                  | d«      S )Né   é   r4   ©Ú	flip_code©rh   r"   Ú_flip_multichannelrV   Úflipr	  s    r/   Ú	hflip_cv2r  Ð  ó<   € ð ‡x�x�!‚|˜Ÿ	™	 !™ sÒ*Ü! #°Ô3Ð3Ü�8‰8�C˜ÓÐr1   c                ó   — t        | «      S r^   )r  r	  s    r/   Úhflipr  Ø  ó   € Ü�S‹>Ðr1   c                óŠ   — | j                   dkD  r| j                  d   dkD  rt        | d¬«      S t        j                  | d«      S )Nr  r  r   r  r  r	  s    r/   Ú	vflip_cv2r  Ü  r  r1   c                ó   — | d d d…df   S r  r¡   r	  s    r/   Úvflip_numpyr  ä  s   € à‰t�ˆt�Sˆy‰>Ðr1   c                ó   — t        | «      S r^   )r  r	  s    r/   Úvflipr  é  r  r1   c                ó  — | j                   dd \  }}| j                  dk(  rdn| j                   d   }| j                  dk(  s|dk  rt        j                  | |«      S d}g }t	        d||«      D ]{  }t        ||z   |«      }| dd…dd…||…f   }	t        j                  |	|«      }
|
j                  dk(  r&| j                  dk(  rt        j                  |
d¬«      }
|j                  |
«       Œ} t        j                  |d¬«      S )a%  Process images with more than 512 channels by splitting into chunks.

    OpenCV's flip function has a limitation where it can only handle images with up to 512 channels.
    This function works around that limitation by splitting the image into chunks of 512 channels,
    flipping each chunk separately, and then concatenating the results.

    Args:
        img: Input image with many channels
        flip_code: OpenCV flip code (0 for vertical, 1 for horizontal, -1 for both)

    Returns:
        Flipped image with all channels preserved
    Nr  r4   r  r   é   rÍ   )
r"   rh   rV   r  rX   rà   r$   rÚ   ÚappendÚconcatenate)r6   r  ÚheightÚwidthrY   Ú
chunk_sizeÚresult_chunksr[   Úend_idxÚchunkÚflipped_chunks              r/   r  r  í  sø   € ð —I‘I˜b˜q�M�M€FˆEØŸ™ Aš‘1¨3¯9©9°Q©<€Lð ‡x�x�1‚}˜¨Ò+Ü�x‰x˜˜YÓ'Ð'ð €JØ€Mä�1�l JÓ/ò 
,ˆÜ�a˜*‘n lÓ3ˆØ’A’q˜!˜G˜)�OÑ$ˆÜŸ™ ¨	Ó2ˆð ×Ñ Ò" s§x¡x°1¢}ÜŸN™N¨=¸qÔAˆMà×Ñ˜]Õ+ð
,ô �>‰>˜-¨aÔ0Ð0r1   c                ó0   ‡ — t        ‰ «      dˆ fd„«       }|S )ar  Decorator to ensure float32 input/output for image processing functions.

    This decorator converts the input image to float32 before passing it to the wrapped function,
    and then converts the result back to the original dtype if it wasn't float32.

    Args:
        func (Callable[..., np.ndarray]): The image processing function to be wrapped.

    Returns:
        Callable[..., np.ndarray]: A wrapped function that handles float32 conversion.

    Example:
        @float32_io
        def some_image_function(img: np.ndarray) -> np.ndarray:
            # Function implementation
            return processed_img
    c                ó´   •— | j                   }|t        j                  k7  rt        | «      }  ‰| g|¢­i |¤Ž}|t        j                  k7  rt	        ||¬«      S |S ©N)r  )r!   r$   rD   rý   r  ©r6   ÚargsÚkwargsÚinput_dtyperž   Úfuncs        €r/   Úfloat32_wrapperz#float32_io.<locals>.float32_wrapper*  sS   ø€ à—i‘iˆØœ"Ÿ*™*Ò$Ü˜3“-ˆCÙ�cÐ+˜DÒ+ FÑ+ˆà?JÌbÏjÉjÒ?XŒz˜&¨{Ô;ÐdÐ^dÐdr1   ©r6   ú
np.ndarrayr-  r   r.  r   Úreturnr3  r   )r0  r1  s   ` r/   Ú
float32_ior5    s%   ø€ ô& ˆ4ƒ[ôeó ðeð Ðr1   c                ó0   ‡ — t        ‰ «      dˆ fd„«       }|S )ah  Decorator to ensure uint8 input/output for image processing functions.

    This decorator converts the input image to uint8 before passing it to the wrapped function,
    and then converts the result back to the original dtype if it wasn't uint8.

    Args:
        func (Callable[..., np.ndarray]): The image processing function to be wrapped.

    Returns:
        Callable[..., np.ndarray]: A wrapped function that handles uint8 conversion.

    Example:
        @uint8_io
        def some_image_function(img: np.ndarray) -> np.ndarray:
            # Function implementation
            return processed_img
    c                óÐ   •— | j                   }|t        j                  k7  rt        | t        j                  ¬«      }  ‰| g|¢­i |¤Ž}|t        j                  k7  rt	        |«      S |S r+  )r!   r$   rA   r  rý   r,  s        €r/   Úuint8_wrapperzuint8_io.<locals>.uint8_wrapperI  sW   ø€ à—i‘iˆàœ"Ÿ(™(Ò"Ü˜S¬r¯x©xÔ8ˆCá�cÐ+˜DÒ+ FÑ+ˆà#.´"·(±(Ò#:Œx˜ÓÐFÀÐFr1   r2  r   )r0  r8  s   ` r/   Úuint8_ior9  6  s%   ø€ ô& ˆ4ƒ[ôGó ðGð Ðr1   )
r)   r3  r*   rU   r+   r3  r,   rU   r4  r3  )r6   r3  r7   r3  r4  r3  )r6   r3  r7   rU   r4  r3  )r!   ztype[np.number]r7   úfloat | np.ndarrayrH   ú#Literal['add', 'multiply', 'power']r4  r3  )T)r6   r3  rJ   r3  r   Úboolr4  r3  )
r6   r3  r7   r:  rH   r;  r   r<  r4  r3  )r6   r3  r7   únp.ndarray | floatrH   úLiteral['add', 'multiply']r4  r3  )r6   r3  r7   rU   rH   r>  r4  r=  )r6   r3  r7   r3  rH   r>  r4  r3  )r6   r3  r7   r:  rH   r;  r4  r3  )r6   r3  r7   r=  r   r<  r4  r3  )r6   r3  r7   r=  r4  r3  )r6   r3  r7   r:  r4  r3  )r6   r3  r7   rU   r   r<  r4  r3  )
r6   r3  r7   r3  rY   rT   r   r<  r4  r3  )F)r6   r3  r7   r   r   r<  r4  r3  )r6   r3  r7   r3  r   r<  r4  r3  )r6   r3  r–   r:  r—   r:  r4  r3  )r6   r3  r–   r   r—   r   r4  r3  )r6   r3  r¨   r:  r4  r3  )r6   r3  r¨   r:  r   r<  r4  r3  )r6   r3  r¨   r   r   r<  r4  r3  )r)   r3  r*   rU   r+   r3  r,   rU   r   r<  r4  r3  )r6   r3  rÂ   r   r7   r   r4  r3  )
r6   r3  rÂ   r   r7   r   r   r<  r4  r3  )r6   r3  rã   r   r4  r3  r^   )r6   r3  rI   úfloat | Noner4  r3  )r6   r3  r  znp.dtyperI   r?  r4  r3  )r6   r3  r4  r3  )r6   r3  r  rT   r4  r3  )r0  úCallable[..., np.ndarray]r4  r@  )]Ú
__future__r   Ú	functoolsr   Útypingr   r   r   rV   Únumpyr$   Úsimsimdr&   ÚstringzillarN   Úalbucore.decoratorsr	   r
   Úalbucore.utilsr   r   r   r   r   r   r   r   r   r   r   r   r   rF   r«   Úcv2_operationsr0   r8   r<   r?   rK   rQ   r\   rb   r_   r`   rm   rr   rt   rw   ry   r{   r}   r„   r‡   r‰   rŒ   r�   r‘   r˜   rŸ   r£   r¥   r©   r­   r¯   r³   r¶   r¼   r¿   rÃ   rÆ   rÈ   rÊ   rè   rì   rï   rò   rõ   rø   rû   rý   r  r  r  r
  r  r  r  r  r  r  r5  r9  r¡   r1   r/   ú<module>rJ     s{  ðÝ "å ß )Ñ )ã 
Û Û Û ç @÷÷ ÷ ð  Ÿ[™[°·±À"Ç(Á(ÑK€à!Ÿl™l°3·7±7ÀSÇWÁWÑM€óó2óCófð<Øð<àð<ð 3ð<ð ó	<ð& óó ðð\Ø	ð\àð\ð 3ð\ð ð	\ð
 ó\ð$	Ø	ð	àð	ð *ð	ð ó		ðØ	ðàðð *ðð ó	ð$Ø	ðàðð *ðð ó	ð"OØ	ðOàðOð 3ðOð ó	Oó6ð ò$ó ð$ó/ð 	ò'ó 	ð'ð 	ò'ó 	ð'ð 	ò'ó 	ð'ô
)ð ó(ó ð(ó**ó1ð 	ó+ó 	ð+ð 	ò+ó 	ð+ð 	ó+ó 	ð+ôbó ð òCó ðCð& òTó ðTó(4ó/ð òcó ðcô"6ð 	ó	&ó 	ð	&óið ò<ó ð<ð ð ð1Ø
ð1àð1ð ð1ð ð	1ð
 ð1ð ò1ó ð1ð> 	ò>ó 	ð>ó;ð ò
eó ð
eó\ð( 	ó3ó 	ð3ð ò0Gó ð0Gðf òGó ðGð@ ò'Gó ð'GóT:ô<ð ó,ó ð,ð" óó ðô*ôFð óGó ðGô":ðB òó ðð òó ðóð òó ðð òó ðóó'1óTô>r1   