ó
    „ñ:iú1  ã                   óÒ   • S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SKJr  S SKJrJr  S SKJr  S S	KJrJr  S S
KrS r " S S\
5      r " S S\R.                  \	5      rS rg
)é    )Útypeof)Útypes)ÚGUFuncBuilder)Úparse_signature)Ú	UfuncBaseÚUfuncLowererBase)Úufunc_find_matching_loop)Ú	serializeÚerrors)Únpydecl)Ú	signatureÚAbstractTemplateNc                 ó‚   ^ • SSK Jn   " U 4S jSUR                  5      nU=R                  T R                  -  sl        U$ )Nr   ©Únpyimplc                   óL   >^ • \ rS rSrSr YrU 4S jrU 4S jrU 4S jrSr	U =r
$ )Ú(make_gufunc_kernel.<locals>.GUFuncKernelé   zª
npyimpl._Kernel subclass responsible for lowering a gufunc kernel
(element-wise function) inside a broadcast loop (which is
generated by npyimpl.numpy_gufunc_kernel()).
c                 óÀ   >• [         TU ]  XU5        U R                  R                  UR                  5      nU R                  R                  U5      u  U l        U l        g ©N)ÚsuperÚ__init__ÚdufuncÚ_get_ewise_dtypesÚargsÚfind_ewise_functionÚ	inner_sigÚcres)ÚselfÚcontextÚbuilderÚ	outer_sigÚewise_typesÚ	__class__s        €ÚX/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/numba/np/ufunc/gufunc.pyr   Ú1make_gufunc_kernel.<locals>.GUFuncKernel.__init__   sJ   ø€ Ü‰GÑ˜W¨yÔ9ØŸ+™+×7Ñ7¸	¿¹ÓGˆKØ(,¯©×(GÑ(GØó)Ñ%ˆDŒN˜D�Ió    c                 óÔ   >• [        U[        R                  5      (       a9  [        U[        R                  5      (       d  [        TU ]  XR
                  U5      $ [        TU ]  XU5      $ r   )Ú
isinstancer   ÚArrayr   ÚcastÚdtype)r   ÚvalÚfromtyÚtotyr$   s       €r%   r+   Ú-make_gufunc_kernel.<locals>.GUFuncKernel.cast   sK   ø€ ä˜&¤%§+¡+×.Ñ.Ü˜t¤U§[¡[×1Ñ1Ü‘w‘| C¯©°tÓ<Ð<Ü‘7‘< ¨TÓ2Ð2r'   c                 óä   >• U R                   R                  (       a  Sn[        R                  " U5      eU R                  R                  U R                   R                  45        [        TU ]   " U6 $ )NzCCalling a guvectorize function in object mode is not supported yet.)	r   Ú
objectmoder   ÚNumbaRuntimeErrorr    Úadd_linking_libsÚlibraryr   Úgenerate)r   r   Úmsgr$   s      €r%   r6   Ú1make_gufunc_kernel.<locals>.GUFuncKernel.generate%   sW   ø€ Ø�y‰y×#×#ð(�ä×.Ò.¨sÓ3Ð3Ø�L‰L×)Ñ)¨4¯9©9×+<Ñ+<Ð*>Ô?Ü‘7Ò# TÐ*Ð*r'   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r+   r6   Ú__static_attributes__Ú__classcell__)r$   Ú_dufuncs   @€r%   ÚGUFuncKernelr      s#   ù† ñ	ñ
 ˆõ	õ	3÷	+ó 	+r'   rA   )Únumba.npr   Ú_Kernelr9   )r@   r   rA   s   `  r%   Úmake_gufunc_kernelrD      s5   ø€ Ý ÷+�w—‘ô +ð: ×Ò˜W×-Ñ-Ñ-ÕØÐr'   c                   ó,   ^ • \ rS rSrSrU 4S jrSrU =r$ )ÚGUFuncLowereré1   zHCallable class responsible for lowering calls to a specific gufunc.
    c                 óP   >• SSK Jn  [        TU ]  U[        UR
                  5        g )Nr   r   )rB   r   r   r   rD   Únumpy_gufunc_kernel)r   Úgufuncr   r$   s      €r%   r   ÚGUFuncLowerer.__init__4   s!   ø€ Ý$Ü‰Ñ˜Ü+Ø ×4Ñ4õ	6r'   © )r9   r:   r;   r<   r=   r   r>   r?   )r$   s   @r%   rF   rF   1   s   ø† ñ÷6ó 6r'   rF   c                   ó¢   • \ rS rSrSr  SS jrS rS r\S 5       r	S r
SS	 jrS
 rS rS rS rSS jrS r\S 5       rS rS rS rS rSrg)ÚGUFuncé;   z¶
Dynamic generalized universal function (GUFunc)
intended to act like a normal Numpy gufunc, but capable
of call-time (just-in-time) compilation of fast loops
specialized to inputs.
Nc                 ó’  • Uc  0 nS U l         SU l        XPl        X0l        [	        XX4Xg5      U l        U R
                  R                  R                  U l        U R
                  R                  R                  U l        U R
                  R                  U l
        U R                  U R                  5        [        R                  " X5        g )NF)ÚufuncÚ_frozenÚ_is_dynamicÚ	_identityr   Úgufunc_builderÚpy_funcr9   r=   Únb_funcÚ_dispatcherÚ_initializeÚ	functoolsÚupdate_wrapper)r   rV   r   ÚidentityÚcacheÚ
is_dynamicÚtargetoptionsÚwritable_argss           r%   r   ÚGUFunc.__init__C   s§   € àÑ ØˆMØˆŒ
ØˆŒØ%ÔØ!Œô
 ,Ø °óOˆÔð ×+Ñ+×3Ñ3×<Ñ<ˆŒØ×*Ñ*×2Ñ2×:Ñ:ˆŒØ×.Ñ.×6Ñ6ˆÔØ×Ñ˜×)Ñ)Ô*Ü× Ò  Õ/r'   c                 ó„   • U R                  5         U R                  5         [        U 5      U l        U R	                  5         g r   )Úbuild_ufuncÚ_install_typerF   Ú	_lower_meÚ_install_cg)r   Ú
dispatchers     r%   rY   ÚGUFunc._initializeX   s2   € Ø×ÑÔØ×ÑÔÜ& tÓ,ˆŒØ×ÑÕr'   c                 óô   • U R                   n[        UR                  UR                  U R                  UR
                  U R                  UR                  UR                  UR                  U R                  S9	nU$ )N)	rV   r   r\   r]   r^   r_   r`   ÚtypesigsÚfrozen)rU   ÚdictrV   r   rT   r]   rS   r_   r`   Ú_sigsrR   )r   ÚgbÚdcts      r%   Ú_reduce_statesÚGUFunc._reduce_states^   sc   € Ø× Ñ ˆÜØ—J‘JØ—l‘lØ—^‘^Ø—(‘(Ø×'Ñ'Ø×*Ñ*Ø×*Ñ*Ø—X‘XØ—<‘<ñ

ˆð ˆ
r'   c
           
      óx   • U " XUXEXgS9n
U H  nU
R                  U5        M     U
R                  5         Xšl        U
$ )N)rV   r   r\   r]   r^   r_   r`   )Úaddrc   rR   )ÚclsrV   r   r\   r]   r^   r_   r`   rj   rk   r   Úsigs               r%   Ú_rebuildÚGUFunc._rebuildm   sF   € ñ ˜7À(ØØ!.ñMˆó ˆCØ�H‰H�SŽMñ à×ÑÔØŒØˆr'   c                 ó"   • SU R                    S3$ )Nz<numba._GUFunc 'z'>)r9   ©r   s    r%   Ú__repr__ÚGUFunc.__repr__y   s   € Ø! $§-¡- °Ð3Ð3r'   c           	      óÌ   • Uc   U R                   R                  R                  n[        SU R                  -   [
        4[        X R                  S95      nUR                  X5        g)a  Constructs and installs a typing class for a gufunc object in the
input typing context.  If no typing context is given, then
_install_type() installs into the typing context of the
dispatcher object (should be same default context used by
jit() and njit()).
NÚGUFuncTyping_)ÚkeyÚgeneric)	rX   ÚtargetdescrÚtyping_contextÚtyper9   r   rl   Ú_type_meÚinsert_user_function)r   Ú	typingctxÚ_ty_clss      r%   rd   ÚGUFunc._install_type|   sX   € ð ÑØ×(Ñ(×4Ñ4×CÑCˆIÜ�¨¯©Ñ6Ü(Ð*Ü ¯m©mÑ<ó>ˆð 	×&Ñ& tÕ5r'   c                 ó:   • U R                   R                  U5        g r   )rU   rs   )r   Úftys     r%   rs   Ú
GUFunc.addŠ   s   € Ø×Ñ×Ñ Õ$r'   c                 óD   • U R                   R                  5       U l        U $ r   )rU   rc   rQ   ry   s    r%   rc   ÚGUFunc.build_ufunc�   s   € Ø×(Ñ(×4Ñ4Ó6ˆŒ
Øˆr'   c                 ó°   • [        U R                  R                  5      n[        [	        [
        US   5      5      [        [	        [
        US   5      5      4$ ©Nr   é   )r   rU   r   ÚtupleÚmapÚlen)r   Ú
parsed_sigs     r%   Úexpected_ndimsÚGUFunc.expected_ndims‘   sC   € Ü$ T×%8Ñ%8×%BÑ%BÓCˆ
Ü”cœ#˜z¨!™}Ó-Ó.´´c¼#¸zÈ!¹}Ó6MÓ0NÐOÐOr'   c                 óð  • U(       a   eU R                   nU R                  R                  nU R                  5       u  pVXV-   n[	        U5      (       d   [	        U5      5       e[        U5       Hª  u  p‰[        U	[        R                  5      (       d  M&  U	R                  Xx   :  d  M:  U[	        U5      :  a  SOSn
U[	        U5      :  a  UOU[	        U5      -
  nU R                   SU
 SU SU	R                   SU SXx    S3n[        R                  " U5      e   [        R                  R                  X1U5      nUu  n    nU R!                  U5      u  pOUc†  U R"                  (       a  S	U  S
U 3n[        R                  " U5      eU R%                  U5        U R!                  U5      u  pOUS:X  a(  SU R                   S
U 3n[        R                  " U5      eUc   e[        [        R&                  /UQ76 $ )zÄ
Implement AbstractTemplate.generic() for the typing class
built by gufunc._install_type().

Return the call-site signature after either validating the
element-wise signature or compiling for it.
ÚInputÚOutputz: z	 operand z& does not have enough dimensions (has z, gufunc core with signature z
 requires Ú)zcannot call z with types ©NNzFail to compile )rQ   rU   r   r”   r’   Ú	enumerater)   r   r*   Úndimr9   r   ÚTypingErrorr   ÚNumpy_rules_ufuncÚ_handle_inputsr   rR   Ú_compile_for_argtysÚnone)r   ÚargtysÚkwsrQ   ru   Ú	inp_ndimsÚ	out_ndimsÚndimsÚidxÚargÚkindÚir7   Ú_handle_inputs_resultr#   Ú_s                   r%   rƒ   ÚGUFunc._type_me•   sá  € ö ˆˆwØ—
‘
ˆØ×!Ñ!×+Ñ+ˆØ#×2Ñ2Ó4Ñˆ	ØÑ%ˆä�6�{‰{Ð&œC ›JÓ&ˆ{Ü! &Ö)‰HˆCÜ˜#œuŸ{™{×+Ó+°·±¸5¹:Õ0EØ"%¬¨I«Ó"6‘w¸H�Ø¤ Y£Ó/‘C°S¼3¸y»>Ñ5I�à—}‘}�o R¨ v¨Y°q°cð :.Ø.1¯h©h¨Zð 8!Ø!$  Z°±
¨|¸1ð>ð ô ×(Ò(¨Ó-Ð-ñ *ô !(× 9Ñ 9× HÑ HØ˜3ó! Ðà4Ñˆ�Q˜˜1Ø×)Ñ)¨+Ó6‰ˆà‰;ð �|�|Ø$ T F¨,°v°hÐ?�Ü×(Ò(¨Ó-Ð-Ø×$Ñ$ [Ô1à×-Ñ-¨kÓ:‰FˆCØ�lÓ"Ø(¨¯©¨°|ÀFÀ8ÐL�Ü×(Ò(¨Ó-Ð-à‘?Ð"�?äœŸ™Ð- fÒ-Ð-r'   c                 óX   • U R                   " U6 nU R                  R                  U5        g r   )Ú_get_function_typerU   rs   )r   r¢   Úreturn_typeÚfntys       r%   r    ÚGUFunc._compile_for_argtysÄ   s(   € ð ×&Ò&¨Ð/ˆØ×Ñ×Ñ Õ%r'   c                 óf   • U R                  UR                  5      n[        U5      [        U5      :H  $ r   )r   r   r�   )r   r#   ru   Údtypess       r%   Úmatch_signatureÚGUFunc.match_signatureË   s*   € Ø×'Ñ'¨¯©Ó1ˆÜ�V‹}¤ kÓ 2Ñ2Ð2r'   c                 ó   • U R                   $ r   )rS   ry   s    r%   r^   ÚGUFunc.is_dynamicÏ   s   € à×ÑÐr'   c                 óÐ   • [        S U5      n/ nU HP  n[        U[        R                  5      (       a  UR	                  UR
                  5        M?  UR	                  U5        MR     U$ )Nc                 óZ   • [        U [        R                  5      (       a  U $ [        U 5      $ r   )r)   r   ÚTyper   )r¨   s    r%   Ú<lambda>Ú*GUFunc._get_ewise_dtypes.<locals>.<lambda>Ô   s%   € ¬
°3¼¿
¹
×(CÑ(C ð "!Ü˜C“[ð"!r'   )r‘   r)   r   r*   Úappendr,   )r   r   r¢   ÚtysÚargtys        r%   r   ÚGUFunc._get_ewise_dtypesÓ   sW   € Üñ !Ø"&ó(ˆàˆÛˆEÜ˜%¤§¡×-Ñ-Ø—
‘
˜5Ÿ;™;Ö'à—
‘
˜5Ö!ñ	 ð
 ˆ
r'   c                 ó’   • [        U R                  R                  5      n[        U5      [        US   5      [        US   5      -   :H  $ rŽ   )r   rU   r   r’   )r   r   r“   s      r%   Ú_num_args_matchÚGUFunc._num_args_matchÞ   s>   € Ü$ T×%8Ñ%8×%BÑ%BÓCˆ
Ü�4‹yœC 
¨1¡Ó.´°ZÀ±]Ó1CÑCÑCÐCr'   c                 ó$  • [        U R                  R                  5      nU R                  U5      n/ n[	        US   5       HT  u  pV[        U5      nUS:X  a  UR                  X5   5        M+  UR                  [        R                  " X5   US5      5        MV     [        US   5      n[	        US   5       HF  u  pVX5U-      n	[        U5      =(       d    Sn
UR                  [        R                  " XšS5      5        MH     [        R                  " U6 $ )Nr   ÚAr�   )
r   rU   r   r   r›   r’   r¾   r   r*   r¡   )r   r   r“   r#   Úlr§   Úsig_dimrœ   ÚoffsetÚrettyÚret_ndims              r%   r¯   ÚGUFunc._get_function_typeâ   så   € Ü$ T×%8Ñ%8×%BÑ%BÓCˆ
à×,Ñ,¨TÓ2ˆð ˆÜ% j°¡mÖ4‰LˆCÜ�w“<ˆDØ�q‹yØ—‘˜Ñ)Ö*à—‘œŸš [Ñ%5°t¸SÓAÖBñ 5ô �Z ‘]Ó#ˆä% j°¡mÖ4‰LˆCØ f¡Ñ-ˆEÜ˜7“|×( qˆHØ�H‰H”U—[’[ °#Ó6Ö7ñ 5ô
 �zŠz˜1ˆ~Ðr'   c                 óˆ  • U R                   (       d  U R                  (       dF  U(       a-  [        US   5      (       a  US   R                  " U S/UQ70 UD6$ U R                  " U0 UD6$ SU;   a  XR                  S5      4-  nU R                  " U6 SL a  SU R                   S3n[        U5      eU R                  U5      nU R                  (       a  [        U R                  U5      (       dE  U R                  U5      S:w  d   U R                  " U6 nU R                  U5        U R                  5         U R                  " U0 UD6$ )Nr   Ú__call__ÚoutFz Too few arguments for function 'z'. Note that the pattern `out = gufunc(Arg1, Arg2, ..., ArgN)` is not allowed. Use `gufunc(Arg1, Arg2, ..., ArgN, out) instead.rš   )rR   r^   Ú_is_array_wrapperÚ__array_ufunc__rQ   ÚpoprÃ   r9   Ú	TypeErrorr   r	   r   r¯   rs   rc   )r   r   Úkwargsr7   Úewiseru   s         r%   rÎ   ÚGUFunc.__call__ú   s8  € ð �<�<˜tŸŸö
 Ô)¨$¨q©'×2Ñ2Ø˜A‘w×.Ò.Ø˜*ðØ'+òØ/5ñð ð —z’z 4Ð2¨6Ñ2Ð2Ø�f‹_à—Z‘Z Ó&Ð(Ñ(ˆDà×Ò Ð&¨%Ò/ð
 3°4·=±=°/ð Bð ð ô
 ˜C“.Ð ð ×&Ñ& tÓ,ˆØ—
—
Ô7¸¿
¹
ÀE×JÑJð ×+Ñ+¨EÓ2°lÓBØ×-Ò-¨tÐ4�Ø—‘˜”Ø×ÑÔà�zŠz˜4Ð* 6Ñ*Ð*r'   )	r=   r9   rX   rR   rT   rS   re   rU   rQ   )NNFNrL   r   )r9   r:   r;   r<   r=   r   rY   rp   Úclassmethodrv   rz   rd   rs   rc   r”   rƒ   r    rµ   Úpropertyr^   r   rÃ   r¯   rÎ   r>   rL   r'   r%   rN   rN   ;   s‡   † ñð AEØEGô0ò*òð ñ	ó ð	ò4ô6ò%òòPò-.ô^&ò3ð ñ ó ð ò	òDòõ0(+r'   rN   c                 óx   • [        U [        5      (       + =(       a    [        U S5      =(       a    [        U S5      $ )a  Return True if obj wraps around numpy or another numpy-like library
and is likely going to apply the ufunc to the wrapped array; False
otherwise.

At the moment, this returns True for

- dask.array.Array
- dask.dataframe.DataFrame
- dask.dataframe.Series
- xarray.DataArray
- xarray.Dataset
- xarray.Variable
- pint.Quantity
- other potential wrappers around dask array or dask dataframe

We may need to add other libraries that pickle ufuncs from their
__array_ufunc__ method in the future.

Note that the below test is a lot more naive than
`dask.base.is_dask_collection`
(https://github.com/dask/dask/blob/5949e54bc04158d215814586a44d51e0eb4a964d/dask/base.py#L209-L249),  # noqa: E501
because it doesn't need to find out if we're actually dealing with
a dask collection, only that we're dealing with a wrapper.
Namely, it will return True for a pint.Quantity wrapping around a plain float, a
numpy.ndarray, or a dask.array.Array, and it's OK because in all cases
Quantity.__array_ufunc__ is going to forward the ufunc call inwards.
Ú__dask_graph__rÑ   )r)   r‚   Úhasattr)Úobjs    r%   rÐ   rÐ   %  s6   € ô: �sœDÓ!Ô!÷ 	,Ü�CÐ)Ó*÷	,ä�CÐ*Ó+ðr'   )Únumbar   Ú
numba.corer   Únumba.np.ufunc.ufuncbuilderr   Únumba.np.ufunc.sigparser   Únumba.np.ufunc.ufunc_baser   r   Únumba.np.numpy_supportr	   r
   r   Únumba.core.typingr   Únumba.core.typing.templatesr   r   rZ   rD   rF   ÚReduceMixinrN   rÐ   rL   r'   r%   Ú<module>ræ      sR   ðÝ Ý Ý 5Ý 3ß AÝ ;ß (Ý %ß CÛ ò!ôH6Ð$ô 6ôg+ˆY×"Ñ" Iô g+óT r'   