Ë
    üÇ:j™œ  ã                   ó   — 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 d dlmZmZmZmZm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mZ d d
l m!Z! d dlm"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z*  G d„ d«      Z+d„ Z, G d„ de«      Z- G d„ dej\                  ej^                  e«      Z0e!jb                  je                  e0«       y)é    N)ÚjitÚtypeof)ÚcgutilsÚtypesÚ	serializeÚsigutilsÚerrors)Ú	is_jittedÚoverload_attributeÚoverload_methodÚregister_jitableÚ	intrinsic)Únpydecl)ÚAbstractTemplateÚ	signature)Útuple_setitem)Ú	_internal)Ú	UfuncBaseÚUfuncLowererBase)Úarray_analysis)Úufuncbuilder)Únumpy_support)ÚCallable)Úir)Úglobal_compiler_lockc                   óD   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zy)ÚUfuncAtIteratorNc                 óf   — || _         || _        || _        || _        || _        || _        || _        y ©N)ÚufuncÚaÚa_tyÚindicesÚ
indices_tyÚbÚb_ty)Úselfr    r!   r"   r#   r$   r%   r&   s           új/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/numba/np/ufunc/dufunc.pyÚ__init__zUfuncAtIterator.__init__   s3   € ØˆŒ
ØˆŒØˆŒ	ØˆŒØ$ˆŒØˆŒØˆ�	ó    c                 ó¼   — | j                  ||«       | j                  j                  «       \  }}| j                  |||«       | j                  j	                  «        y r   )Ú_prepareÚindexerÚbegin_loopsÚ_call_ufuncÚ	end_loops)r'   ÚcontextÚbuilderÚloop_indicesÚ_s        r(   ÚrunzUfuncAtIterator.run$   sH   € Ø�‰�g˜wÔ'ØŸ,™,×2Ñ2Ó4‰ˆ�aØ×Ñ˜ '¨<Ô8Ø�‰×ÑÕ r*   c                 óJ   — t        | j                  t        j                  «      S r   )Ú
isinstancer$   r   Ú	BaseTuple©r'   s    r(   Úneed_advanced_indexingz&UfuncAtIterator.need_advanced_indexing*   s   € Ü˜$Ÿ/™/¬5¯?©?Ó;Ð;r*   c                 óR  — ddl m}m} | j                  | j                  }}| j
                  | j                  }} |j                  t        j                  «      d«      }	| j                  �t        j                  ||	«      | _        | j                  «       r<t        j                  ||t!        |«      ¬«      }|j                  }
 ||||
|«      \  }
}n|f}|f}
 ||||
|«      \  }
} ||||||
|«      | _        | j"                  j%                  «        | j'                  ||«      | _        y )Nr   )Únormalize_indicesÚFancyIndexer)Úcount)Únumba.np.arrayobjr<   r=   r!   r#   r"   r$   Úget_value_typer   Úintpr%   r   Úalloca_once_valueÚb_indicer:   Úunpack_tupleÚlenr-   ÚprepareÚ_compile_ufuncÚcres)r'   r1   r2   r<   r=   r!   r#   r"   r$   ÚzeroÚindex_typess              r(   r,   zUfuncAtIterator._prepare-   s  € ßEà—V‘V˜TŸ\™\ˆ7ˆØŸ9™9 d§o¡oˆjˆà1ˆw×%Ñ%¤e§j¡jÓ1°!Ó4ˆà�6‰6ÐÜ#×5Ñ5°g¸tÓDˆDŒMà×&Ñ&Ô(Ü×*Ñ*¨7°GÜ14°Z³ôBˆGà$×*Ñ*ˆKÙ#4°W¸gØ5@À'ó$KÑ ˆK™ð �jˆGØ%˜-ˆKÙ#4°W¸gØ5@À'ó$KÑ ˆK˜ñ $ G¨W°d¸AØ$/°ó:ˆŒà�‰×ÑÔØ×'Ñ'¨°Ó9ˆ�	r*   c           	      ó  — ddl m} t        j                  ||j                  «      }t        j                  ||j
                  «      }|j                  }	t        j                  |||	|||j                  |«      }
 |||||
«      }|
|fS )Nr   )Ú	load_item)	r?   rL   r   rD   ÚshapeÚstridesÚdataÚget_item_pointer2Úlayout)r'   r1   r2   r3   ÚarrayÚarray_tyrL   ÚshapesrN   rO   ÚptrÚvals               r(   Ú	_load_valzUfuncAtIterator._load_valI   sw   € Ý/Ü×%Ñ% g¨u¯{©{Ó;ˆÜ×&Ñ& w°·±Ó>ˆØ�z‰zˆä×'Ñ'¨°¸$ÀÈØ(0¯©¸óGˆá˜ ¨(°CÓ8ˆØ�Cˆxˆr*   c                 óT  — |j                  |«      }|j                  |t        j                  «      }|j	                  t
        j                  |«      } ||||f«      }	 |j                  t        j                  «      d«      }
|j                  ||
«      }|j                  ||«       d |	fS )Né   )
ÚloadÚdtyper   rA   Úget_functionÚoperatorÚgetitemr@   ÚaddÚstore)r'   r1   r2   r#   rR   rS   ÚidxÚsigÚimplrV   Úones              r(   Ú
_load_flatzUfuncAtIterator._load_flatT   s‘   € Ø�l‰l˜7Ó#ˆØ�n‰n˜X¤u§z¡zÓ2ˆØ×#Ñ#¤H×$4Ñ$4°cÓ:ˆÙ�7˜U C˜LÓ)ˆð 1ˆg×$Ñ$¤U§Z¡ZÓ0°Ó3ˆØ�k‰k˜#˜sÓ#ˆØ�‰�c˜7Ô#à�SˆyÐr*   c                 ó¨   — ddl m} | j                  j                  j                  }|j
                  }	|j                  ||||	«      } ||||||«       y )Nr   )Ú
store_item)r?   rg   rH   r   Úreturn_typer[   Úcast)
r'   r1   r2   rR   rS   rU   rV   rg   ÚfromtyÚtotys
             r(   Ú
_store_valzUfuncAtIterator._store_vala   sG   € Ý0Ø—‘×$Ñ$×0Ñ0ˆØ�~‰~ˆØ�l‰l˜7 C¨°Ó6ˆÙ�7˜G X¨s°CÕ8r*   c                 ó2  — | j                   j                  d   }| j                  €| j                  j                  f}n,| j                  j                  | j
                  j                  f}|j                  |«      }|j                  |j                  f«       |S ©Nr   )	r    Úkeyr%   r"   r[   r&   r_   Úadd_linking_libsÚlibrary)r'   r1   r2   r    rb   rH   s         r(   rG   zUfuncAtIterator._compile_ufunch   sm   € Ø—
‘
—‘˜qÑ!ˆà�6‰6ˆ>Ø—9‘9—?‘?Ð$‰Cà—9‘9—?‘? D§I¡I§O¡OÐ4ˆCà�y‰y˜‹~ˆØ× Ñ  $§,¡, Ô1Øˆr*   c                 ó˜  — | j                   }| j                  | j                  }}| j                  |||||«      \  }}| j                  €|f}	n@| j                  | j
                  | j                  }}}
| j                  ||||
|«      \  }}||f}	|j                  ||j                  |j                  |	«      }| j                  ||||||«       y r   )rH   r!   r"   rW   r%   r&   rC   re   Úcall_internalÚfndescr   rl   )r'   r1   r2   r3   rH   r!   r"   rU   rV   Úargsr%   r&   Úb_idxr4   Úval_bÚress                   r(   r/   zUfuncAtIterator._call_ufunct   s¹   € Ø�y‰yˆØ—&‘&˜$Ÿ)™)ˆ4ˆà—>‘> '¨7°LÀ!ÀTÓJ‰ˆˆSà�6‰6ˆ>Ø�6‰Dà!ŸV™V T§Y¡Y°·±�UˆtˆAØ—‘ w°¸ÀÀ4ÓH‰HˆAˆuØ˜�<ˆDà×#Ñ# G¨T¯[©[¸$¿.¹.Ø$(ó*ˆà�‰˜ ¨!¨T°3¸Õ<r*   ©NN)Ú__name__Ú
__module__Ú__qualname__r)   r5   r:   r,   rW   re   rl   rG   r/   © r*   r(   r   r      s/   „ óò!ò<ò:ò8	òò9ò
ó=r*   r   c                 ó”   ‡ — ddl m}  G ˆ fd„d|j                  «      }|xj                  ‰ j                  j                  z  c_        |S )Nr   ©Únpyimplc                   ó*   •‡ — e Zd ZdZW °Zˆ fd„Zˆ xZS )ú(make_dufunc_kernel.<locals>.DUFuncKernelzÉ
        npyimpl._Kernel subclass responsible for lowering a DUFunc kernel
        (element-wise function) inside a broadcast loop (which is
        generated by npyimpl.numpy_ufunc_kernel()).
        c                 óŒ   •— t         ‰| �  |||«       | j                  j                  |j                  «      \  | _        | _        y r   )Úsuperr)   ÚdufuncÚfind_ewise_functionru   Ú	inner_sigrH   )r'   r1   r2   Ú	outer_sigÚ	__class__s       €r(   r)   z1make_dufunc_kernel.<locals>.DUFuncKernel.__init__‘   s8   ø€ Ü‰GÑ˜W g¨yÔ9Ø(,¯©×(GÑ(GØ—‘ó) Ñ%ˆDŒN˜D�Ir*   )rz   r{   r|   Ú__doc__r…   r)   Ú__classcell__)r‰   Ú_dufuncs   @€r(   ÚDUFuncKernelr‚   ‰   s   ù„ ñ	ñ
 ˆ÷	 ð 	 r*   r�   )Únumba.npr€   Ú_Kernelrz   r    )rŒ   r€   r�   s   `  r(   Úmake_dufunc_kernelr�   †   s9   ø€ Ý ö �w—‘ô  ð ×Ò˜WŸ]™]×3Ñ3Ñ3ÕØÐr*   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚDUFuncLowererzHCallable class responsible for lowering calls to a specific DUFunc.
    c                 óP   •— ddl m} t        ‰| �  |t        |j
                  «       y )Nr   r   )rŽ   r€   r„   r)   r�   Únumpy_ufunc_kernel)r'   r…   r€   r‰   s      €r(   r)   zDUFuncLowerer.__init__�   s!   ø€ Ý$Ü‰Ñ˜Ü+Ø ×3Ñ3õ	5r*   )rz   r{   r|   rŠ   r)   r‹   ©r‰   s   @r(   r’   r’   š   s   ø„ ñ÷5ð 5r*   r’   c                   óR  ‡ — e Zd ZdZ ed«      Zdd„Zˆ fd„Zd„ Ze	d„ «       Z
d„ Zed„ «       Zed	„ «       Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zd„ Zd„ Zˆ fd„Zd„ Zed d„«       Zd„ Zd!d„Zd!d„Zd!d„Zd!d„Zd!d„Z d ˆ fd„	Z!d d„Z"d„ Z#d„ Z$ˆ xZ%S )"ÚDUFuncz¹
    Dynamic universal function (DUFunc) intended to act like a normal
    Numpy ufunc, but capable of call-time (just-in-time) compilation
    of fast loops specialized to inputs.
    )ÚidentityÚ
_keepaliveÚninÚnoutc                 ó  — |€i }t        |«      r|j                  }t        j                  «       5   t	        dd|dœ|¤Ž|«      }d d d «       | j                  |«       t        j                  | |«       y # 1 sw Y   Œ2xY w)NÚnpyufunc)Ú_targetÚcacher}   )r
   Úpy_funcr   Ú3_suppress_deprecation_warning_nopython_not_suppliedr   Ú_initializeÚ	functoolsÚupdate_wrapper)r'   r    r˜   rŸ   ÚtargetoptionsÚ
dispatchers         r(   r)   zDUFunc.__init__®   s‰   € ØÐ ØˆMÜ�WÔØ—o‘oˆGÜ×MÑMÓOñ 	7ð.œð . ZØ#(ñ.à,ñ.à.5ó7ˆJ÷	7ð 	×Ñ˜ XÔ.Ü× Ñ   wÕ/÷	7ð 	7ús   °A6Á6A?c                 óV  •— t        j                  |«      }t        t        | �  ||¬«       |t
        j                  k7  | _        |j                  j                  | _	        |j                  j                  | _
        t        | «      | _        | j                  «        | j                  «        y )N)r˜   )r   Úparse_identityr„   r—   r)   r   ÚPyUFunc_NoneÚreorderabler    rz   rŠ   r’   Ú	_lower_meÚ_install_cgÚ_install_type)r'   r¦   r˜   r‰   s      €r(   r¢   zDUFunc._initializeº   s†   ø€ Ü×.Ñ.¨xÓ8ˆÜŒf�dÑ$ Z¸(Ð$ÔCð %¬	×(>Ñ(>Ñ>ˆÔØ"×*Ñ*×3Ñ3ˆŒØ!×)Ñ)×1Ñ1ˆŒÜ& tÓ,ˆŒØ×ÑÔØ×ÑÕr*   c                 ó¶   — t        | j                  j                  j                  «       «      }t	        | j                  | j
                  | j                  |¬«      S )ú4
        NOTE: part of ReduceMixin protocol
        )r¦   r˜   ÚfrozenÚsiglist)ÚlistÚ_dispatcherÚ	overloadsÚkeysÚdictr˜   Ú_frozen)r'   r±   s     r(   Ú_reduce_stateszDUFunc._reduce_statesÆ   sJ   € ô �t×'Ñ'×1Ñ1×6Ñ6Ó8Ó9ˆÜØ×'Ñ'Ø—]‘]Ø—<‘<Øô	
ð 	
r*   c                 ó¼   — t         j                  j                  | «      }|j                  ||«       |D ]  }|j	                  |«       Œ |r|j                  «        |S )r¯   )r   Ú_DUFuncÚ__new__r¢   r_   Údisable_compile)Úclsr¦   r˜   r°   r±   r'   rb   s          r(   Ú_rebuildzDUFunc._rebuildÒ   sX   € ô
 × Ñ ×(Ñ(¨Ó-ˆØ×Ñ˜ XÔ.àò 	ˆCØ�H‰H�S�Mð	áØ× Ñ Ô"Øˆr*   c                 ó   — | S )zK
        For compatibility with the various *UFuncBuilder classes.
        r}   r9   s    r(   Úbuild_ufunczDUFunc.build_ufuncà   s	   € ð ˆr*   c                 ó.   — | j                   j                  S r   )r³   r¥   r9   s    r(   r¥   zDUFunc.targetoptionsæ   s   € à×Ñ×-Ñ-Ð-r*   c                 ó.   — | j                   j                  S r   )r    rš   r9   s    r(   rš   z
DUFunc.ninê   s   € à�z‰z�~‰~Ðr*   c                 ó.   — | j                   j                  S r   )r    r›   r9   s    r(   r›   zDUFunc.noutî   s   € à�z‰z�‰Ðr*   c                 ó.   — | j                   j                  S r   )r    Únargsr9   s    r(   rÅ   zDUFunc.nargsò   ó   € à�z‰z×ÑÐr*   c                 ó.   — | j                   j                  S r   )r    Úntypesr9   s    r(   rÈ   zDUFunc.ntypesö   s   € à�z‰z× Ñ Ð r*   c                 ó.   — | j                   j                  S r   )r    r   r9   s    r(   r   zDUFunc.typesú   rÆ   r*   c                 ó.   — | j                   j                  S r   )r    r˜   r9   s    r(   r˜   zDUFunc.identityþ   s   € à�z‰z×"Ñ"Ð"r*   c                 ó.   — | j                   j                  S r   )r    r   r9   s    r(   r   zDUFunc.signature  s   € à�z‰z×#Ñ#Ð#r*   c                 óZ   — t        | j                  j                  «      dkD  sJ ‚d| _        y)zI
        Disable the compilation of new signatures at call time.
        r   TN)rE   r³   r´   r·   r9   s    r(   r¼   zDUFunc.disable_compile  s*   € ô
 �4×#Ñ#×-Ñ-Ó.°Ò2Ð2Ð2Øˆ�r*   c                 óV   — t        j                  |«      \  }}| j                  ||«      S )z=
        Compile the DUFunc for the given signature.
        )r   Únormalize_signatureÚ_compile_for_argtys)r'   rb   ru   rh   s       r(   r_   z
DUFunc.add  s,   € ô %×8Ñ8¸Ó=ÑˆˆkØ×'Ñ'¨¨kÓ:Ð:r*   c                 ó$  •— t         j                  j                  j                  }|t	        |j                  «       «      z   D ]>  }t        t        |«      d|«      |usŒ |j                  | dg|¢­i |¤Ž}|t        usŒ<|c S  t        ‰| �(  |i |¤ŽS )z}
        Allow any argument that has overridden __array_ufunc__ (NEP-18)
        to take control of DUFunc.__call__.
        Ú__array_ufunc__Ú__call__)r   ÚnpÚndarrayrÑ   ÚtupleÚvaluesÚgetattrÚtypeÚNotImplementedr„   rÒ   )r'   ru   ÚkwsÚdefaultÚargÚoutputr‰   s         €r(   rÒ   zDUFunc.__call__  s“   ø€ ô
  ×"Ñ"×*Ñ*×:Ñ:ˆàœ% §
¡
£Ó-Ñ-ò 	2ˆCÜ”t˜C“yÐ"3°WÓ=ÀWÒLØ,˜×,Ñ,¨T°:ÐLÀÒLÈÑL�Ø¤Ò/Ø!’Mð		2ô ‘7Ñ# TÐ1¨SÑ1Ð1r*   c           	      ó&  — | j                   j                  }|rJd|v r|j                  d«      }||fz  }|r-t        ddj	                  d„ t        |«      D «       «      z  «      ‚t        |«      }||k(  s||| j                   j                  z   k(  sJ ‚|rJ ‚g }|d | D ]Z  }t        |«      }t        |t        j                  «      r|j                  }nt        j                  |«      }|j                  |«       Œ\ | j!                  t#        |«      «      S )NÚoutz)unexpected keyword arguments to ufunc: %sz, c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Úrepr)Ú.0Úks     r(   ú	<genexpr>z+DUFunc._compile_for_args.<locals>.<genexpr>,  s   è ø€ Ò+I¸¬D°¯GÑ+Iùó   ‚)r    rš   ÚpopÚ	TypeErrorÚjoinÚsortedrE   r›   r   r7   r   ÚArrayr[   r   Úmap_arrayscalar_typeÚappendrÏ   rÕ   )	r'   ru   rÚ   rš   rß   Úargs_lenÚargtysrÜ   Úargtys	            r(   Ú_compile_for_argszDUFunc._compile_for_args$  s  € Ø�j‰j�n‰nˆÙØ˜‰|Ø—g‘g˜e“n�Ø˜˜‘�ÙÜÐ KØ"&§)¡)Ñ+I¼VÀC»[Ô+IÓ"Iñ!Jó Kð Kô �t“9ˆØ˜C’ X°°t·z±z·±Ñ1FÒ%FÐGÐGÙˆˆwØˆØ˜˜�:ò 	!ˆCÜ˜3“KˆEÜ˜%¤§¡Ô-ØŸ™‘ô &×:Ñ:¸3Ó?�Ø�M‰M˜%Õ ð	!ð ×'Ñ'¬¨f«Ó6Ð6r*   c                 óè  — | j                   rt        d| ›�«      ‚t        |t        «      sJ ‚|€|}n ||Ž }| j                  j
                  j                  «       D ]B  \  }}||j                  k(  sŒd|› d�}t        j                  |t        j                  «       |c S  t        j                  | j                  | j                  |«      \  }}}t        j                  |||«      }t        j                   ||«      \  }}	}
| j#                  t%        |	«      |«       | j&                  j)                  |	|j*                  |
f«       | j,                  j.                  j)                  |j*                  «       |S )a/  
        Given a tuple of argument types (these should be the array
        dtypes, and not the array types themselves), compile the
        element-wise function for those inputs, generate a UFunc loop
        wrapper, and register the loop with the Numpy ufunc object for
        this DUFunc.
        úcompilation disabled for z>Compilation requested for previously compiled argument types (z~). This has no effect and perhaps indicates a bug in the calling code (compiling a ufunc more than once for the same signature)r·   ÚRuntimeErrorr7   rÕ   r³   r´   Úitemsru   ÚwarningsÚwarnr	   ÚNumbaWarningr   Ú_compile_element_wise_functionr¥   Ú_finalize_ufunc_signatureÚ!_build_element_wise_ufunc_wrapperÚ	_add_loopÚintr™   rì   rq   r«   Úlibs)r'   rî   rh   rb   rã   rH   ÚmsgÚ
actual_sigÚ	dtypenumsrU   Úenvs              r(   rÏ   zDUFunc._compile_for_argtysC  sT  € ð �<Š<ÝÁÐFÓGÐGÜ˜&¤%Ô(Ð(Ð(ØÐØ‰Cá˜vÐ&ˆCà×'Ñ'×1Ñ1×7Ñ7Ó9ò 	‰GˆAˆtØ˜Ÿ™Óð"Ø"( ð *EðE�ô —‘˜c¤6×#6Ñ#6Ô7Ø’ð	ô %1×$OÑ$OØ×Ñ˜d×0Ñ0°#ó%7Ñ!ˆˆf�kä!×;Ñ;Ø�&˜+ó'ˆ
ä*×LÑLØ�*óÑˆ	�3˜à�‰”s˜3“x Ô+Ø�‰×Ñ  T§\¡\°3Ð7Ô8Ø�‰×Ñ×"Ñ" 4§<¡<Ô0Øˆr*   c                 ó    — |j                   |k(  S r   )ru   )r'   Úewise_typesrb   s      r(   Úmatch_signaturezDUFunc.match_signatureh  s   € Ø�x‰x˜;Ñ&Ð&r*   c                 ó”   — dt         dt        fd„}t        j                  |«      }d}|D ]  } ||«      } t	        ||«      |«       Œ y )NÚattrÚreturnc                 ó   ‡ — ˆ fd„}|S )Nc                 óB   •‡— t        | j                  d   ‰«      Šˆfd„S )Nr   c                 ó   •— ‰S r   r}   )r    rV   s    €r(   ú<lambda>zUDUFunc._install_ufunc_attributes.<locals>.get_attr_fn.<locals>.impl.<locals>.<lambda>q  s   ø€  S€ r*   )r×   ro   )r    rV   r  s    @€r(   rc   zCDUFunc._install_ufunc_attributes.<locals>.get_attr_fn.<locals>.implo  s   ù€ Ü˜eŸi™i¨™l¨DÓ1�Û(Ð(r*   r}   )r  rc   s   ` r(   Úget_attr_fnz5DUFunc._install_ufunc_attributes.<locals>.get_attr_fnm  s   ø€ ô)ð ˆKr*   )rš   r›   rÅ   r˜   r   )Ústrr   r   ÚFunctionr   )r'   Útemplater  ÚatÚ
attributesr  Úattr_fns          r(   Ú_install_ufunc_attributesz DUFunc._install_ufunc_attributesk  sW   € ð	œcð 	¤hó 	ô �^‰^˜HÓ%ˆð/ˆ
àò 	2ˆDÙ! $Ó'ˆGØ(Ô˜r 4Ó(¨Õ1ñ	2r*   c                 ój   — | j                  |«       | j                  |«       | j                  |«       y r   )Ú_install_ufunc_reduceÚ_install_ufunc_reduceatÚ_install_ufunc_at)r'   r  s     r(   Ú_install_ufunc_methodszDUFunc._install_ufunc_methods€  s,   € Ø×"Ñ" 8Ô,Ø×$Ñ$ XÔ.Ø×Ñ˜xÕ(r*   c                 óZ   ‡ — t        j                  |«      }t        |d«      dˆ fd„	«       }y )Nr  c                 ó  •‡ ‡‡‡‡— t        j                  dt        j                  ¬«       t	        |t
        j                  «      sd}t        j                  |«      ‚t	        |t
        j                  «      }t	        |t
        j                  «      }t	        |t
        j                  «      }t	        |t
        j                  «      }|xs |xs | }	|xr t        |«      dk(  }
t	        |t
        j                  t
        j                  t
        j                  t
        j                  f«      }t        j                  |«      Š|xs ‰ }t        |g«      }‰j                   j"                  }|dk(  r*t        j                  |«      rt        j$                  d«      ‚|dk(  r,t        j                  |«      sd}t        j$                  |«      ‚t        j                  |«      r‰j'                  |j(                  f«       nG|r‰j'                  |j(                  |f«       n'‰j'                  |j(                  |j(                  f«       ˆ fd	„Št*        ˆfd
„«       Št*        ˆfd„«       Šdˆfd„	}dˆˆˆfd„	}dd„}dˆfd„	}|r|S |
r|r|S |	r|r|S |S )Nz ufunc.at feature is experimental©Úcategoryz)The first argument "a" must be array-liker   é   zsecond operand needed for ufuncrY   z+second operand provided when ufunc is unaryc           	      ó  •— ddl m} t        |«      dk(  r|j                  \  }}}}|\  }}	}
}n|j                  dz   \  }}}}|dz   \  }}	}
}  ||«      | ||	«      }	t	        ‰|	||
|||«      }|j                  | |«       y )Nr   )Ú
make_arrayé   r   )r?   r  rE   ru   r   r5   )r1   r2   rb   ru   r  r4   ÚatyÚidxtyÚbtyr!   r#   r%   Úat_iterr    s                €r(   Úapply_ufunc_codegenzDDUFunc._install_ufunc_at.<locals>.ol_at.<locals>.apply_ufunc_codegen¯  s’   ø€ Ý8ä�t“9 ’>Ø),¯©Ñ&�A�s˜E 3Ø'+Ñ$�A�q˜'¡1à),¯©°GÑ);Ñ&�A�s˜E 3Ø'+¨g¡~Ñ$�A�q˜' 1à#‘J˜s“O G¨W°aÓ8�Ü)¨%°°C¸À%ÈÈCÓP�Ø—‘˜G WÕ-r*   c                 ó<   •— t        j                  ||||«      }|‰fS r   ©r   Únone)Ú	typingctxr    r!   r#   r%   rb   r%  s         €r(   Úapply_a_b_ufuncz@DUFunc._install_ufunc_at.<locals>.ol_at.<locals>.apply_a_b_ufunc½  s#   ø€ ä—j‘j ¨¨7°AÓ6�ØÐ/Ð/Ð/r*   c                 ó:   •— t        j                  |||«      }|‰fS r   r'  )r)  r    r!   r#   rb   r%  s        €r(   Úapply_a_ufuncz>DUFunc._install_ufunc_at.<locals>.ol_at.<locals>.apply_a_ufuncÂ  s!   ø€ ä—j‘j ¨¨7Ó3�ØÐ/Ð/Ð/r*   c                 óÄ   •— ‰r%| j                  |t        j                  |«      «      S | j                  |t        j                  |«      t        j                  |«      «      S r   )r  rÓ   Úasarray©r    r!   r#   r%   Úb_nones       €r(   Ú	impl_castz:DUFunc._install_ufunc_at.<locals>.ol_at.<locals>.impl_castÇ  sJ   ø€ ÙØ Ÿ8™8 A¤r§z¡z°'Ó':Ó;Ð;à Ÿ8™8 AÜ$&§J¡J¨wÓ$7Ü$&§J¡J¨q£Mó3ð 3r*   c                 ó¾   •— ‰r ‰| ||«       y t        j                  |«      }||   }t        j                  ||j                  «      } ‰| |||j                  «       y r   )rÓ   r.  Úbroadcast_torM   Úflat)	r    r!   r#   r%   Úb_Úa_r*  r,  r0  s	         €€€r(   Úimpl_genericz=DUFunc._install_ufunc_at.<locals>.ol_at.<locals>.impl_genericÏ  sN   ø€ ÙÙ! %¨¨GÕ5äŸ™ A›�BØ˜7™�BÜŸ™¨¨R¯X©XÓ6�BÙ# E¨1¨g°r·w±wÕ?r*   c                 ó"   —  | |d   |«      |d<   y )Nr}   r}   )r    r!   r#   r%   s       r(   Úimpl_indices_empty_b_scalarzLDUFunc._install_ufunc_at.<locals>.ol_at.<locals>.impl_indices_empty_b_scalarØ  s   € Ù˜a ™e Q›��"’r*   c                 óF   •— ‰r | ||   «      ||<   y  | ||   |«      ||<   y r   r}   r/  s       €r(   Úimpl_scalar_scalarzCDUFunc._install_ufunc_at.<locals>.ol_at.<locals>.impl_scalar_scalarÛ  s,   ø€ ÙÙ!& q¨¡zÓ!2�A�g’Já!& q¨¡z°1Ó!5�A�g’Jr*   r   )rõ   rö   r	   ÚNumbaExperimentalFeatureWarningr7   r   rê   ÚNumbaTypeErrorÚListÚTupleÚ	SliceTyperE   ÚSequencer   Úis_nonelikeÚanyr    rš   ÚTypingErrorr_   r[   r   )r    r!   r#   r%   rþ   Úindices_arrÚindices_listÚindices_tupleÚindices_sliceÚindices_scalarÚindices_empty_tupleÚb_arrayÚb_scalarÚ	need_castrš   r1  r7  r9  r;  r*  r,  r%  r0  r'   s   `                  @@@@€r(   Úol_atz'DUFunc._install_ufunc_at.<locals>.ol_atˆ  s  ý€ ä�M‰MÐ<Ü#)×#IÑ#IõKô ˜a¤§¡Ô-ØA�Ü×+Ñ+¨CÓ0Ð0ä$ W¬e¯k©kÓ:ˆKÜ% g¬u¯z©zÓ:ˆLÜ& w´·±Ó<ˆMÜ& w´·±Ó@ˆMØ"-Ò"O°Ò"OÀ-ÐPˆNØ"/Ò"E´C¸³LÀAÑ4EÐÜ  ¤U§[¡[´%·.±.Ä%Ç*Á*Ü%*§[¡[ð%2ó 3ˆGä×(Ñ(¨Ó+ˆFØ#Ò- vÐ.ˆHÜ˜\˜NÓ+ˆIà—*‘*—.‘.ˆCð �aŠxœG×/Ñ/°Ô2Ü×(Ñ(Ð)JÓKÐKð �aŠx¤× 3Ñ 3°AÔ 6ØC�Ü×(Ñ(¨Ó-Ð-ä×"Ñ" 1Ô%Ø—‘˜!Ÿ'™'˜Õ$ÙØ—‘˜!Ÿ'™' 1˜Õ&à—‘˜!Ÿ'™' 1§7¡7Ð+Ô,ô.ô ó0ó ð0ô ó0ó ð0õ3÷@ó(õ6ñ Ø Ð Ù$©Ø2Ð2Ù¡HØ)Ð)à#Ð#r*   r   ©r   r  r   )r'   r  r  rN  s   `   r(   r  zDUFunc._install_ufunc_at…  s,   ø€ Ü�^‰^˜HÓ%ˆä	˜˜TÓ	"ô_	$ó 
#ñ_	$r*   c                 óZ   ‡ — t        j                  |«      }t        |d«      dˆ fd„	«       }y )NÚreducec                 óŽ  •‡‡‡‡‡‡‡‡‡‡‡‡‡‡— t        j                  dt        j                  ¬«       t	        |t
        j                  «      sd}t        j                  |«      ‚t	        |t
        j                  «      xr$ t	        |j                  t
        j                  «      }t	        |t
        j                  «      xr t        |«      dk(  }t        j                  |«      }‰j                  j                   d u Š‰j                  j"                  Š‰j$                  s+|r)t        |«      dkD  rd‰› d�}t        j                  |«      ‚d|j&                  z  Šd|j&                  dz
  z  Št        j                  |«      r|j                  n|Š‰j                   Št        j                  ‰«      Št        j                  |«      Št(        ˆfd	„«       Št(        ˆfd
„«       Št*        d„ «       Št(        d„ «       Št(        d„ «       Šdˆˆˆˆˆfd„	}		 	 	 dˆˆˆˆˆˆˆfd„	}
	 	 	 dˆˆˆfd„	}	 	 	 dd„}	 	 	 dˆfd„	}|j&                  dk(  r|s|	S |r|S |r t-        t/        |j&                  «      «      Š|S |rdt        |«      dz
  z  Š|S |dk(  s9t	        |t
        j                  t
        j0                  t
        j2                  f«      r|
S y )Nz$ufunc.reduce feature is experimentalr  ú-The first argument "array" must be array-liker   rY   zreduction operation 'z:' is not reorderable, so at most one axis may be specified©r   c                 óf   •— ‰}d}t        | «      D ]  \  }}||k(  rŒt        |||«      }|dz  }Œ |S ©Nr   rY   )Ú	enumerater   )ÚtupÚposÚsÚiÚjÚeÚtup_init_m1s         €r(   Útuple_slicezDDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.tuple_slice  sN   ø€ ð  �Ø�Ü% c›Nò ‘D�A�qØ˜C’xØ Ü% a¨¨AÓ.�AØ˜‘F‘Að	ð
 �r*   c                 óž   •— ‰}ddt        |«      }}}||k  r5||k(  rt        |||«      }n| |   }t        |||«      }|dz  }|dz  }||k  rŒ5|S rV  ©rE   r   )	rX  rY  rV   rZ  r[  r\  Úszr]  Útup_inits	           €r(   Útuple_slice_appendzKDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.tuple_slice_append  sp   ø€ ð �Ø˜a¤ Q£�b�1�Ø˜"’fØ˜C’xÜ)¨!¨Q°Ó4™à ™F˜Ü)¨!¨Q°Ó2˜Ø˜Q™˜Ø˜‘F�Að ˜"“fð �r*   c                 ój   ‡‡— t        j                  ||||«      }t        |«      Šˆfd„Šˆˆfd„}||fS )Nc                 óþ  •— |\  }}}}| j                  |¬«      }| j                  |«      5   t        j                  d«      d«      }	|	}
|dk(  r^t	        d‰«      D ]M  }| j                  ||dz
  «      }| j                  ||«      }| j                  ||«      }| j                  |
|«      }
ŒO �n&d|cxk  r‰dz
  k  r¼n n¹t	        d|«      D ]J  }| j                  ||«      }| j                  ||«      }| j                  ||«      }| j                  |
|«      }
ŒL t	        |dz   ‰«      D ]M  }| j                  ||dz
  «      }| j                  ||«      }| j                  ||«      }| j                  |
|«      }
ŒO n\t	        d‰dz
  «      D ]J  }| j                  ||«      }| j                  ||«      }| j                  ||«      }| j                  |
|«      }
ŒL | j                  |«       d d d «       ||
fS # 1 sw Y   |
fS xY w)N©Únameé@   r   rY   )	Úappend_basic_blockÚ
goto_blockr   ÚIntTypeÚrangeÚextract_valueÚmulr_   Úbranch)r2   Ú	block_posÚ
block_nameÚbb_endru   rN   r4   ra   ÚbbrI   Úflat_idxr[  ÚstrideÚidx_iÚmÚlen_idxs                  €r(   Ú	gen_blockz\DUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.compute_flat_idx.<locals>.gen_block0  s  ø€ Ø)-Ñ&�G˜Q  QØ ×3Ñ3¸Ð3ÓD�Bà ×+Ñ+¨BÓ/ñ /Ø-œrŸz™z¨"›~¨aÓ0˜Ø#'˜à$¨š>Ü%*¨1¨gÓ%6ò D Ø)0×)>Ñ)>¸wÈÈAÉÓ)N Ø(/×(=Ñ(=¸cÀ1Ó(E Ø$+§K¡K°¸Ó$> Ø+2¯;©;°xÀÓ+C¡ò	Dð
  Ô8¨W°q©[Õ8Ü%*¨1¨iÓ%8ò D Ø)0×)>Ñ)>¸wÈÓ)J Ø(/×(=Ñ(=¸cÀ1Ó(E Ø$+§K¡K°¸Ó$> Ø+2¯;©;°xÀÓ+C¡ð	Dô &+¨9°q©=¸'Ó%Bò D Ø)0×)>Ñ)>¸wÈÈAÉÓ)N Ø(/×(=Ñ(=¸cÀ1Ó(E Ø$+§K¡K°¸Ó$> Ø+2¯;©;°xÀÓ+C¡ñ	Dô &+¨1¨g¸©kÓ%:ò D Ø)0×)>Ñ)>¸wÈÓ)J Ø(/×(=Ñ(=¸cÀ1Ó(E Ø$+§K¡K°¸Ó$> Ø+2¯;©;°xÀÓ+C¡ð	Dð  Ÿ™ vÔ.÷;/ð> ˜x˜<Ð'÷?/ð> ˜x˜<Ð'ús   ¬F8G0Ç0G<c                 óJ  •— |\  }}}}|j                   }|j                  d¬«      }	g }
t        ‰«      D ]'  } ‰||d|› �|	|«      \  }}|
j                  ||f«       Œ) |j	                  |«      5  |j                  ||
d   d   «      }t        ‰«      D ]  }|j                  ||
|   d   «       Œ 	 d d d «       |j                  |	«       |j                  |
d   d   j                  «      }|
D ]  \  }}|j                  ||«       Œ |j                  ||«      S # 1 sw Y   ŒixY w)NÚaxis_endrg  Úaxis_éÿÿÿÿr   rY   )Úbasic_blockrj  rm  rì   rk  ÚswitchÚadd_caseÚposition_at_endÚphirØ   Úadd_incomingÚsdiv)r1   r2   rb   ru   rN   Úitemsizera   Úaxisrt  Ú
switch_endÚlr[  Úblockru  r€  rƒ  Úvaluerz  ry  s                    €€r(   ÚcodegenzZDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.compute_flat_idx.<locals>.codegenU  s<  ø€ Ø37Ñ0�G˜X s¨Dà ×,Ñ,�BØ!(×!;Ñ!;ÀÐ!;Ó!L�JØ�AÜ" 7›^ò 4˜Ù*3°G¸QÀ%ÈÀsÀØ4>Àó+F™˜˜xàŸ™ %¨Ð!2Õ3ð4ð
 !×+Ñ+¨BÓ/ñ 8Ø!(§¡°°a¸±e¸A±hÓ!?˜Ü!& w£ò 8˜AØ"ŸO™O¨A¨q°©t°A©wÕ7ñ8÷8ð
 ×+Ñ+¨JÔ7Ø!Ÿ+™+ a¨¡d¨1¡g§l¡lÓ3�CØ()ò 7™˜˜uØ×(Ñ(¨°Õ6ð7à"Ÿ<™<¨¨XÓ6Ð6÷8ð 8ús   Á/ADÄD")r   rA   rE   )	r)  rN   r†  ra   r‡  rb   rŒ  rz  ry  s	          @@r(   Úcompute_flat_idxzIDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.compute_flat_idx+  s7   ù€ ä—j‘j ¨(°C¸Ó>�Ü˜c›(�ô#(õJ7ð, ˜G�|Ð#r*   c                 ó€   — | }t        t        | «      «      D ]$  }| |   dk  r| |   |z   n| |   }t        |||«      }Œ& |S rn   )rm  rE   r   )r‡  ÚndimÚaxr[  rV   s        r(   Ú
fixup_axiszCDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.fixup_axism  sQ   € à�Üœs 4›yÓ)ò 3�AØ,0°©G°aªK˜$˜q™' Dš.¸TÀ!¹W�CÜ& r¨1¨cÓ2‘Bð3ð �	r*   c                 ój   — d| d   }}t        t        | «      «      D ]  }| |   |k  sŒ|| |   }}Œ ||fS rn   )rm  rE   )rX  ra   r]  r[  s       r(   Úfind_minzADUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.find_minu  sI   € à˜C ™F�Q�Üœs 3›x›ò +�AØ˜1‘v “zØ!" C¨¡F˜Q™ð+ð ˜A�v�r*   c                 óÐ   •— ‰r!|€t        |«      dk(  rd‰› d�}t        |«      ‚d}‰r
‰
rd}|d   }n‰r‰}n|}|j                  d   }t        ||«      D ]  }	 | |||	   «      }Œ |S )Nr   ú'zero-size array to reduction operation ú which has no identityrY   )rE   Ú
ValueErrorrM   rm  )r    rR   r‡  r[   Úinitialrþ   ÚstartÚrrb  r[  Úid_noner˜   Úidentity_noneÚ	init_noneÚ
ufunc_names             €€€€€r(   Úimpl_1dz@DUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.impl_1d}  sŽ   ø€ Ù  W _¼¸U»ÀqºØDØ(˜\Ð)?ðA�Cä$ S›/Ð)à�Ù¡Ø�EØ˜a™‘AÙØ ‘Aà�Aà—[‘[ ‘^�Ü˜u bÓ)ò +�AÙ˜a  q¡Ó*‘Að+à�r*   c                 ó�  •— |€t        d«      ‚|dk  r||j                  z  }|dk  s||j                  k\  rt        d«      ‚‰r%|€#|j                  |   dk(  rd‰› d�}t        |«      ‚ ‰|j                  |«      }|€I‰€Gt        j                  |‰¬«      }t        j
                  |«      D ]  \  }}	 ‰||d«      }
||
   ||<   Œ n5|€‰�t        j                  |‰‰¬«      }nt        j                  ||‰¬«      }|j                  «       }|€\‰€Zt        j
                  |«      D ]@  \  }}||   dk(  rŒ ‰|j                  |j                  ||«      }||   |}} | ||«      ||<   ŒB |S t        j
                  |«      D ]D  \  }}|€‰€	||   dk(  rŒ ‰|j                  |j                  ||«      }||   |}} | ||«      ||<   ŒF |S )Nz'axis' must be specifiedr   úInvalid axisr•  r–  ©r[   )Ú
fill_valuer[   )
r—  r�  rM   rÓ   ÚemptyÚndenumerateÚfullÚravelrN   r†  )r    rR   r‡  r[   r˜  rþ   rM   rš  ra   r4   Ú
result_idxÚviewrV   Úflat_posÚlhsÚrhsr�  r˜   rœ  Únb_dtyper_  rd  rž  s                   €€€€€€€r(   Úimpl_nd_axis_intzIDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.impl_nd_axis_int‘  s  ø€ ð
 �<Ü$Ð%?Ó@Ð@à˜!’8Ø˜EŸJ™JÑ&�Dà˜!’8˜t u§z¡zÒ1Ü$ ^Ó4Ð4á  W _¸¿¹ÀTÑ9JÈaÒ9OØDØ(˜\Ð)?ðA�Cä$ S›/Ð)ñ $ E§K¡K°Ó6�à�? xÐ'7ÜŸ™ ¨hÔ7�AÜ"$§.¡.°Ó"3ò 3™˜˜Qá%7¸¸TÀ1Ó%E˜
Ø!& zÑ!2˜˜#šñ3ð �_¨Ð)=ô Ÿ™ °(À(ÔK‘AäŸ™ °'ÀÔJ�Að —w‘w“y�Ø�? xÐ'7Ü$&§N¡N°5Ó$9ò =™˜˜SØ˜t™9¨š>Ø$á'7¸¿	¹	À1Ç:Á:Ø8;¸Tó(C˜Hà'+¨H¡~°s ˜CÙ-2°3¸«_˜D šNð=ð" �ô %'§N¡N°5Ó$9ò 9™˜˜SØ"˜?¨xÐ/?Ø # D¡	¨Q¢Ø$Ù#3°A·I±I¸q¿z¹zØ47¸ó$?˜à#'¨¡>°3˜S˜Ù).¨s°C«˜˜Xšð9ð �r*   c                 óP  •—  ‰||j                   «      }t        dt        |«      «      D ]Z  }||   dk  s||   |j                   k\  rt        d«      ‚t        |dz   t        |«      «      D ]  }||   ||   k(  sŒt        d«      ‚ Œ\  ‰|«      \  }}	| j	                  ||	||¬«      }
t        |«      dk(  r|
S t        |«      dk(  r| j	                  |
||dz   dz     dz
  ¬«      S ‰}t        t        |«      «      D ]  }||k7  sŒ	t        ||||   «      }Œ | j	                  |
|¬«      S )Nr   r¡  rY   zduplicate value in 'axis')r‡  r[   r˜  r  ©r‡  )r�  rm  rE   r—  rQ  r   )r    rR   r‡  r[   r˜  r}  r[  r\  Úmin_idxÚmin_elemrš  r�  Úaxis_tupr“  r‘  s               €€€r(   Úimpl_nd_axis_tuplezKDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.impl_nd_axis_tupleÏ  sO  ø€ ñ
 # 4¨¯©Ó4�Ü˜q¤# e£*Ó-ò J�AØ˜Q‘x !’| u¨Q¡x°5·:±:Ò'=Ü(¨Ó8Ð8ä" 1 q¡5¬#¨e«*Ó5ò J˜Ø  ™8 u¨Q¡xÓ/Ü",Ð-HÓ"IÐIñJð	Jñ %-¨U£OÑ!�˜Ø—L‘L Ø&.Ø',Ø)0ð !ó 2�ô �t“9 ’>Ø�HÜ˜“Y !’^Ø Ÿ<™<¨°°wÀ±{ÀaÑ6GÑ0HÈ1Ñ0L˜<ÓMÐMà!�BÜ"¤3 r£7›^ò @˜Ø ›<Ü!.¨r°1°e¸A±hÓ!?™Bð@ð !Ÿ<™<¨°˜<Ó3Ð3r*   c                 ó   — |S r   r}   )r    rR   r‡  r[   r˜  s        r(   Úimpl_axis_empty_tuplezNDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.impl_axis_empty_tupleí  s	   € ð
 �r*   c                 ó,   •— | j                  |‰||«      S r   )rQ  )r    rR   r‡  r[   r˜  r³  s        €r(   Úimpl_axis_nonezGDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.impl_axis_noneô  s   ø€ ð
 —|‘| E¨8°U¸GÓDÐDr*   ©r   NN)rõ   rö   r	   r<  r7   r   rê   r=  ÚUniTupler[   ÚIntegerr?  rE   r   rB  r    r˜   rz   rª   r�  r   r   rÕ   rm  ÚOmittedÚIntegerLiteral)r    rR   r‡  r[   r˜  rþ   Úaxis_int_tupleÚaxis_empty_tupleÚ	axis_nonerŸ  r®  r´  r¶  r¸  r³  r�  r“  r‘  r›  r˜   rœ  r�  r­  rc  r^  r_  rd  rž  r'   s                 @@@@@@@@@@@@@@€r(   Ú	ol_reducez/DUFunc._install_ufunc_reduce.<locals>.ol_reduceí  s¥  ÿþ€ ô �M‰MÐ@Ü#)×#IÑ#IõKô ˜e¤U§[¡[Ô1ØE�Ü×+Ñ+¨CÓ0Ð0ä'¨¬e¯n©nÓ=ò 6Ü˜4Ÿ:™:¤u§}¡}Ó5ð ä)¨$´·±Ó<ÒOÄÀTÃÈaÁÐÜ×+Ñ+¨DÓ1ˆIà ŸJ™J×/Ñ/°4Ð7ˆMØŸ™×,Ñ,ˆJð ×#Ò#©¼3¸t»9Àqº=Ø.¨z¨lð ;Kð K�ä×+Ñ+¨CÓ0Ð0à˜uŸz™zÑ*ˆHØ %§*¡*¨q¡.Ñ1ˆKÜ&-×&9Ñ&9¸%Ô&@�u—{’{ÀeˆHØ—}‘}ˆHä×)Ñ)¨(Ó3ˆGÜ×+Ñ+¨GÓ4ˆIäó
ó ð
ô óó ðô ñ?$ó ð?$ôB ñó ðô ñó ð÷ñ ð, '(Ø'+Ø)-÷	<ó <ð@ )*Ø)-Ø+/÷	4ð@ ,-Ø,0Ø.2ó	ð %&Ø%)Ø'+õ	Eð �z‰z˜QŠÑ'7Ø�Ù!à,Ð,Ùä ¤ u§z¡zÓ!2Ó3�Ø%Ð%Ùð  ¤3 t£9¨q¡=Ñ1�Ø)Ð)Ø˜’œj¨´·±Ü05·±Ü05×0DÑ0Dð0Fô Gð
 (Ð'ðGr*   r¹  rO  )r'   r  r  rÁ  s   `   r(   r  zDUFunc._install_ufunc_reduceê  s,   ø€ Ü�^‰^˜HÓ%ˆä	˜˜XÓ	&ô`	(ó 
'ñ`	(r*   c                 óZ   ‡ — t        j                  |«      }t        |d«      dˆ fd„	«       }y )NÚreduceatc                 ól  •‡‡‡‡‡‡— t        j                  dt        j                  ¬«       ‰j                  j
                  dk7  rd}t        j                  |«      ‚t        j                  |«      sd}t        j                  |«      ‚t        j                  |«      sd}t        j                  |«      ‚t        |t        j                  t        j                  t        j                  t        f«      sd}t        j                  |«      ‚t        j                   |«      Š‰s/t        |t        j"                  «      st        j                  d«      ‚t        |t        j"                  «      }|r|j$                  nd	Šd
‰dz
  z  Št        |t        j"                  «      }t        j                   |«      r|j&                  n|Š|xr | }	|r3|j$                  dk7  r$d|j$                  › �}t        j(                  |«      ‚|	rdd„}
|
S t*        ˆfd„«       Šd	dlm}  ||j$                  d«      Šdˆˆˆˆˆfd„	}|S )Nz&ufunc.reduceat feature is experimentalr  r  z,reduceat only supported for binary functionsrS  z0The second argument "indices" must be array-likez"axis" must be an integerzoutput must be an arrayr   rT  rY   z8Expect "indices" array to have at most 1 dimension. Got c                 óz   — | j                  t        j                  |«      t        j                  |«      |||¬«      S )N)r[   rß   )rÃ  rÓ   r.  )r    rR   r#   r‡  r[   rß   s         r(   r1  zFDUFunc._install_ufunc_reduceat.<locals>.ol_reduceat.<locals>.impl_cast<  s8   € Ø Ÿ>™>¬"¯*©*°UÓ*;Ü*,¯*©*°WÓ*=Ø*.Ø05Ø.1ð	 *ó 3ð 3r*   c                 óŽ   •— ‰}d\  }}|t        | «      k  r.||k7  rt        ||| |   «      }|dz  }|dz  }|t        | «      k  rŒ.|S )N)r   r   rY   ra  )rX  rY  rZ  r[  r\  Útup_m1s        €r(   r_  zHDUFunc._install_ufunc_reduceat.<locals>.ol_reduceat.<locals>.tuple_sliceD  s[   ø€ à�Ø‘��1Øœ#˜c›(’lØ˜C’xÜ)¨!¨Q°°A±Ó7˜Ø˜Q™˜Ø˜‘F�Að	 œ#˜c›(“lð
 �r*   )Ú"generate_getitem_setitem_with_axisÚsetitemc                 ó  •— |j                   d   }|}|dk  r|‰z  }|dk  s|‰k\  rt        d|› d‰› �«      ‚t        |j                   ||«      }‰s|j                   |k7  rd}	t        |	«      ‚‰rt        j                  |‰¬«      }t        |«      dk(  r|S d}
t        t        |«      dz
  «      D ]ï  }||   ||dz      k  r`t        j                  ||   ||dz      «      }‰dkD  rt        j                  |||«      }n||   }| j                  ||¬«      } ‰||
||«       nz||   ||dz      k\  rQ||   }t        j                  |||«      }‰dkD  r$ ‰|j                   |«      }|j                  |«      } ‰||
||«       n||   |k\  s||   dk  rt        d«      ‚|
dz  }
Œñ t        j                  |d	   |j                   |   «      }‰dkD  rt        j                  |||«      }n||   }| j                  ||«      } ‰||
||«       |S )
Nr   zaxis z) is out of bounds for array of dimension z=operands could not be broadcast together with remmaped shapesr¢  rY   r°  zInvalid value for indicesr~  )rM   r—  r   rÓ   ÚzerosrE   rm  ÚarangeÚtakerQ  Úreshape)r    rR   r#   r‡  r[   rß   rb  r�  rM   rþ   r\  r[  ra   Ú	arr_sliceÚ
arr_reduceÚ_sliceÚ
array_ndimÚdtÚout_nonerÉ  r_  s                   €€€€€r(   rc   zADUFunc._install_ufunc_reduceat.<locals>.ol_reduceat.<locals>.implT  s:  ø€ Ø—]‘] 1Ñ%�à�Ø˜!’8Ø˜JÑ&�Dà˜!’8˜t zÒ1Ü$ u¨R¨Dð 15Ø5?°Lð&Bó Cð Cô & e§k¡k°4¸Ó<�á C§I¡I°Ò$6ð-�Cä$ S›/Ð)áÜŸ(™( 5°Ô3�Cô �w“< 1Ò$Ø�Jà�Üœs 7›|¨aÑ/Ó0ò �AØ˜q‘z G¨A°©E¡NÒ2Ü Ÿi™i¨°©
°G¸AÀ¹E±NÓC˜Ø%¨š>Ü(*¯©°°s¸DÓ(A™Ià(-¨c©
˜IØ%*§\¡\°)À$ \Ó%G˜
Ù  Q¨¨jÕ9Ø  ™ w¨q°1©u¡~Ò5Ø% a™j˜Ü$&§G¡G¨E°3¸Ó$=˜	Ø%¨š>Ù%0°·±¸dÓ%C˜FØ(1×(9Ñ(9¸&Ó(A˜IÙ  Q¨¨iÕ8Ø  ™ rÒ)¨W°Q©Z¸!ª^Ü(Ð)DÓEÐEØ˜‘F‘Að%ô* —i‘i ¨¡¨U¯[©[¸Ñ->Ó?�Ø ’>Ü "§¡¨¨s°DÓ 9‘Ià % c¡
�IØ"Ÿ\™\¨)°TÓ:�
Ù˜˜Q  jÔ1à�
r*   r¹  )rõ   rö   r	   r<  r    rš   r=  r   Útype_can_asarrayr7   r   r»  r¼  r½  rü   r   rB  rê   r�  r[   ÚNumbaValueErrorr   r?   rÈ  )r    rR   r#   r‡  r[   rß   rþ   Ú	array_arrrE  rM  r1  rÈ  rc   rÒ  rÓ  rÔ  rÉ  rÇ  r_  r'   s                @@@@@@€r(   Úol_reduceatz3DUFunc._install_ufunc_reduceat.<locals>.ol_reduceat  sÜ  þ€ ô �M‰MÐBÜ#)×#IÑ#IõKð �z‰z�~‰~ Ò"ØD�Ü×+Ñ+¨CÓ0Ð0ä ×1Ñ1°%Ô8ØE�Ü×+Ñ+¨CÓ0Ð0ä ×1Ñ1°'Ô:ØH�Ü×+Ñ+¨CÓ0Ð0ä˜d¤U§]¡]´E·M±MÜ%*×%9Ñ%9¼3ð%@ô Aà1�Ü×+Ñ+¨CÓ0Ð0ä×*Ñ*¨3Ó/ˆHÙ¤J¨s´E·K±KÔ$@Ü×+Ñ+Ð,EÓFÐFä" 5¬%¯+©+Ó6ˆIÙ'0˜Ÿš°aˆJØ˜Z¨!™^Ñ,ˆFÜ$ W¬e¯k©kÓ:ˆKÜ '× 3Ñ 3°EÔ :�—’ÀˆBà&Ò6¨;Ð7ˆIá˜wŸ|™|¨qÒ0ðØ%Ÿl™l˜^ð-�ä×,Ñ,¨SÓ1Ð1áó3ð !Ð äóó ðõ MÙ8¸¿¹ÀYÓOˆG÷8ñ 8ðt ˆKr*   r¹  rO  )r'   r  r  rØ  s   `   r(   r  zDUFunc._install_ufunc_reduceat  s,   ø€ Ü�^‰^˜HÓ%ˆä	˜˜ZÓ	(ôz	ó 
)ñz	r*   c                 óZ  •— t        j                  |«      r|fn||f}d„ |D «       }t        d„ |D «       «      }| j                  |«      dk(  r,| j                  rd| ›d�}t        |«      ‚ | j                  |Ž  t        j                  |«      rt        ‰| �!  ||«      S t        ‰| �   |||fŽ S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )r   ©râ   rÜ   s     r(   rä   zDUFunc.at.<locals>.<genexpr>“  s   è ø€ Ò. #”&˜—+Ñ.ùrå   c              3   ól   K  — | ],  }t        |t        j                  «      r|j                  n|–— Œ. y ­wr   )r7   r   rê   r[   rÛ  s     r(   rä   zDUFunc.at.<locals>.<genexpr>”  s.   è ø€ ò /Ø #ô *4°C¼¿¹Ô)E˜CŸIšIÈ3ÓNñ /ùs   ‚24ry   rò   z.at(...))	r   rB  rÕ   r†   r·   ró   rð   r„   r  )	r'   r!   r#   r%   ru   rî   r  rþ   r‰   s	           €r(   r  z	DUFunc.at�  s³   ø€ ä×*Ñ*¨1Ô-�‰t°A°q°6ˆÙ.¨Ô.ˆÜñ /Ø'-ô/ó /ˆð ×#Ñ# KÓ0°LÒ@à�|‹|Ú?CÐE�Ü" 3Ó'Ð'à"ˆD×"Ñ" DÑ)ô ×Ñ˜qÔ!Ü‘7‘:˜a Ó)Ð)ä‘7‘:  7¨A˜Ð/Ð/r*   c                 ó,  — |€ | j                   j                  j                  }t        d| j                  j
                  z   t        ft        | | j                  ¬«      «      }|j                  | |«       | j                  |«       | j                  |«       y)a*  Constructs and installs a typing class for a DUFunc 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ÚDUFuncTyping_)ro   Úgeneric)r³   ÚtargetdescrÚtyping_contextrØ   r    rz   r   r¶   Ú_type_meÚinsert_user_functionr  r  )r'   r)  Ú_ty_clss      r(   r­   zDUFunc._install_type¥  s~   € ð ÐØ×(Ñ(×4Ñ4×CÑCˆIÜ�¨¯©×)<Ñ)<Ñ<Ü(Ð*Ü ¨d¯m©mÔ<ó>ˆð 	×&Ñ& t¨WÔ5Ø×&Ñ& wÔ/Ø×#Ñ# GÕ,r*   c                 ó,  — | j                   rGt        j                  | |«      }|€yt        |j                  |j
                  z   «      dt        |«       }| j                  j                  j                  «       D ]  \  }}|j                  |k(  sŒ||fc S  y)a  
        Given a tuple of element-wise argument types, find a matching
        signature in the dispatcher.

        Return a 2-tuple containing the matching signature, and
        compilation result.  Will return two None's if no matching
        signature was found.
        Nry   )r·   r   Úufunc_find_matching_looprÕ   ÚinputsÚoutputsrE   r³   r´   rô   ru   )r'   r  Úlooprb   rH   s        r(   r†   zDUFunc.find_ewise_functionµ  sŒ   € ð �<Š<ä ×9Ñ9¸$ÀÓLˆDØˆ|Ø!Ü §¡¨d¯l©lÑ :Ó;Ð<M¼SÀÓ=MÐNˆKØ×)Ñ)×3Ñ3×9Ñ9Ó;ò 	!‰IˆC�Ø�x‰x˜;Ó&Ø˜D�yÒ ð	!ð r*   c                 ó®  — |rJ ‚| j                   }t        j                  j                  |||«      }|\  }}}}t	        |«      }	|	dkD  rt        |dt	        |«        «      }
nt        |«      }
| j                  |
«      \  }}|€P| j                  rt        j                  d| ›d|›�«      ‚| j                  |
«       | j                  |
«      \  }}|€J ‚|	dkD  rt        |«      }nZ|j                  dk(  r6|dkD  r#t        j                  |j                  ||«      g}n#|j                  g}nt        j                   d«      ‚|j#                  |«       t%        |Ž S )zì
        Implement AbstractTemplate.generic() for the typing class
        built by DUFunc._install_type().

        Return the call-site signature after either validating the
        element-wise signature or compiling for it.
        r   Nzcannot call z with types rY   ztyping gufuncs (nout > 1))r    r   ÚNumpy_rules_ufuncÚ_handle_inputsrE   rÕ   r†   r·   r	   r=  rÏ   r²   r›   r   rê   rh   ÚNumbaNotImplementedErrorÚextendr   )r'   rî   Úkwtysr    Ú_handle_inputs_resultÚ
base_typesÚexplicit_outputsÚndimsrQ   Úexplicit_output_countr  rb   rH   Úouttyss                 r(   râ  zDUFunc._type_meÉ  sY  € ñ ÐˆyØ—
‘
ˆÜ '× 9Ñ 9× HÑ HØ�6˜5ó!"Ðà6KÑ3ˆ
Ð$ e¨VÜ #Ð$4Ó 5ÐØ  1Ò$Ü 
Ð+B¬SÐ1AÓ-BÐ,BÐ CÓD‰Kä 
Ó+ˆKØ×,Ñ,¨[Ó9‰	ˆˆTØˆ;ð �|Š|Ü×+Ò+Ú/3±Vð-=ó >ð >à×$Ñ$ [Ô1Ø×0Ñ0°Ó=‰IˆC�Ø�?Ð"�?Ø  1Ò$ÜÐ*Ó+‰FØ�Z‰Z˜1Š_Ø�qŠyÜŸ+™+ c§o¡o°u¸fÓEÐF‘àŸ/™/Ð*‘ä×1Ñ1Ð2MÓNÐNØ�‰�fÔÜ˜&Ð!Ð!r*   )NFNr   )r  N)&rz   r{   r|   rŠ   ÚsetÚ_DUFunc__base_kwargsr)   r¢   r¸   Úclassmethodr¾   rÀ   Úpropertyr¥   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•   s   @r(   r—   r—   ¤   s>  ø„ ññ ÐAÓB€Mó
0ô
ò

ð ñó ðòð ñ.ó ð.ð ñó ðð ñó ðð ñ ó ð ð ñ!ó ð!ð ñ ó ð ð ñ#ó ð#ð ñ$ó ð$òò;ô2ò7ð> ò"ó ð"òH'ó2ó*)ó
c$óJd(óL	~õ@0ó*-ò ö(&"r*   r—   )3r£   r]   rõ   ÚnumpyrÓ   Únumbar   r   Ú
numba.corer   r   r   r   r	   Únumba.core.extendingr
   r   r   r   r   Únumba.core.typingr   Únumba.core.typing.templatesr   r   Únumba.cpython.unsafe.tupler   Únumba.np.ufuncr   Únumba.np.ufunc.ufunc_baser   r   Únumba.parforsr   r   rŽ   r   Útypingr   Úllvmliter   Únumba.core.compiler_lockr   r   r�   r’   ÚReduceMixinrº   r—   Ú	MAP_TYPESrì   r}   r*   r(   ú<module>r	     s›   ðÛ Û Û ã ç ß BÕ B÷-õ -õ &ß CÝ 4Ý $ß AÝ (Ý 'Ý "Ý Ý Ý 9÷j=ñ j=òZô(5Ð$ô 5ôK"ˆY×"Ñ" I×$5Ñ$5°yô K"ð\ × Ñ × Ñ  Õ 'r*   