
    J/Ph                        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!j1        2                    e0           dS )    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                   F    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 ZdS )UfuncAtIteratorNc                 h    || _         || _        || _        || _        || _        || _        || _        d S N)ufuncaa_tyindices
indices_tybb_ty)selfr    r!   r"   r#   r$   r%   r&   s           U/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/np/ufunc/dufunc.py__init__zUfuncAtIterator.__init__   s7    
	$			    c                     |                      ||           | j                                        \  }}|                     |||           | j                                         d S r   )_prepareindexerbegin_loops_call_ufunc	end_loops)r'   contextbuilderloop_indices_s        r(   runzUfuncAtIterator.run$   s_    gw''',2244a'<888     r*   c                 @    t          | j        t          j                  S r   )
isinstancer$   r   	BaseTupler'   s    r(   need_advanced_indexingz&UfuncAtIterator.need_advanced_indexing*   s    $/5?;;;r*   c                 B   ddl m}m} | j        | j        }}| j        | j        }} |                    t          j	                  d          }	| j
        t          j        ||	          | _        |                                 r=t          j        ||t!          |                    }|j        }
 ||||
|          \  }
}n|f}|f}
 ||||
|          \  }
} ||||||
|          | _        | j                                         |                     ||          | _        d S )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-   sZ   EEEEEEEEVT\79doj1w%%ej11!446#5gtDDDM&&(( 
	K*7G14ZB B BG$*K#4#4Wg5@'$K $K K jG%-K#4#4Wg5@'$K $K K $|GWdA$/: :''9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   s    //////%gu{;;&w>>z'$(0G Gi(C88Cxr*   c                 x   |                     |          }|                    |t          j                  }|                    t
          j        |          } ||||f          }	 |                    t          j                  d          }
|                    ||
          }|	                    ||           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    ll7##nnXuz22##H$4c::d7UCL)) 1g$$UZ0033kk#s##c7###Syr*   c                     ddl m} | j        j        j        }|j        }	|                    ||||	          } ||||||           d S )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   s]    000000$0~ll7C66
7GXsC88888r*   c                     | j         j        d         }| j        | j        j        f}n| j        j        | j        j        f}|                    |          }|                    |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   sc    
q!6>9?$CC9?DIO4Cyy~~  $,111r*   c                 `   | j         }| j        | j        }}|                     |||||          \  }}| j        |f}	n5| j        | j        | j        }}}
|                     ||||
|          \  }}||f}	|                    ||j	        |j
        |	          }|                     ||||||           d S 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&$)4>>'7L!TJJS6>6DD!VTYUtAw4HHHAu<D##GT[$.$(* *!T3<<<<<r*   NN)__name__
__module____qualname__r)   r5   r:   r,   rW   re   rl   rG   r/    r*   r(   r   r      s           ! ! !< < <: : :8	 	 	  9 9 9
 
 
= = = = =r*   r   c                 r     ddl m}  G  fdd|j                  }|xj         j        j        z  c_        |S )Nr   npyimplc                   (     e Zd ZdZ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                  \  | _        | _        d S r   )superr)   dufuncfind_ewise_functionru   	inner_sigrH   )r'   r1   r2   	outer_sig	__class__s       r(   r)   z1make_dufunc_kernel.<locals>.DUFuncKernel.__init__   sH    GGWgy999(,(G(G)  ) %DNDIIIr*   )rz   r{   r|   __doc__r   r)   __classcell__)r   _dufuncs   @r(   DUFuncKernelr      sJ        	 	
 	  	  	  	  	  	  	  	  	 r*   r   )numba.npr   _Kernelrz   r    )r   r   r   s   `  r(   make_dufunc_kernelr      sl                       w       W]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                 n    ddl m} t                                          |t          |j                   d S )Nr   r   )r   r   r   r)   r   numpy_ufunc_kernel)r'   r   r   r   s      r(   r)   zDUFuncLowerer.__init__   sF    $$$$$$+ 3	5 	5 	5 	5 	5r*   )rz   r{   r|   r   r)   r   r   s   @r(   r   r      sB         5 5 5 5 5 5 5 5 5r*   r   c                       e Zd ZdZ ed          Zddi f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! 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noutNFc                    t          |          r|j        }t          j                    5   t	          dd|d||          }d d d            n# 1 swxY w Y   |                     ||           t          j        | |           d S )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    W 	&oGMOO 	7 	7. .Z#(. .,. ..57 7J	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	X... w/////s   AAAc                 j   t          j        |          }t          t          |                               ||           |t
          j        k    | _        |j        j	        | _	        |j        j
        | _
        t          |           | _        |                                  |                                  d S )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8fd$$Z($CCC %	(>>"*3!)1&t,,r*   c                     t          | 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   sM     t'1668899']<	
 
 
 	
r*   c                     t           j                            |           }|                    ||           |D ]}|                    |           |r|                                 |S )r   )r   _DUFunc__new__r   r_   disable_compile)clsr   r   r   r   r'   rb   s          r(   _rebuildzDUFunc._rebuild   so    
  ((--X... 	 	CHHSMMMM 	#  """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~r*   c                     | j         j        S r   )r    r   r9   s    r(   r   zDUFunc.nout   s    zr*   c                     | j         j        S r   )r    nargsr9   s    r(   r   zDUFunc.nargs       zr*   c                     | j         j        S r   )r    ntypesr9   s    r(   r   zDUFunc.ntypes   s    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""r*   c                     | j         j        S r   )r    r   r9   s    r(   r   zDUFunc.signature   s    z##r*   c                 R    t          | j        j                  dk    sJ d| _        dS )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2r*   c                 \    t          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==k''k:::r*   c                 .   t           j        j        j        }|t	          |                                          z   D ]A}t          t          |          d|          |ur |j        | dg|R i |}|t          ur|c S B t                      j
        |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 	2CtCyy"3W==WLL,,T:LLLLLL//!MMM#577#T1S111r*   c           	      J   | j         j        }|r]d|v r|                    d          }||fz  }|r<t          dd                    d t          |          D                       z            t          |          }||k    s||| j         j        z   k    sJ |rJ g }|d |         D ]\}t          |          }t          |t          j                  r|j        }nt          j        |          }|                    |           ]|                     t#          |                    S )Noutz)unexpected keyword arguments to ufunc: %sz, c              3   4   K   | ]}t          |          V  d S r   )repr).0ks     r(   	<genexpr>z+DUFunc._compile_for_args.<locals>.<genexpr>*  s(      +I+IDGG+I+I+I+I+I+Ir*   )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@   jn 	K||ggenn K K"&))+I+IVC[[+I+I+I"I"I!J K K K t99CXtz1F%F%F%F%F: 	! 	!C3KKE%-- @ &:3??MM%    ''f666r*   c                    | j         rt          d|           t          |t                    sJ ||}n || }| j        j                                        D ]9\  }}||j        k    r)d| d}t          j	        |t          j                   |c S :t          j        | j        | j        |          \  }}}t          j        |||          }t          j        ||          \  }}	}
|                     t%          |	          |           | j                            |	|j        |
f           | 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 Nz>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_argtysA  s    < 	H,FGGG&%(((((CC+v&C'17799 	 	GAtE"(E E E c6#6777   %1$Od0#%7 %7!fk!;&+' '
*L* 	3s3xx+++T\37888""4<000r*   c                     |j         |k    S r   )ru   )r'   ewise_typesrb   s      r(   match_signaturezDUFunc.match_signaturef  s    x;&&r*   returnc                     dt           dt          fd}t          j        |          }d}|D ]&} ||          } t	          ||          |           'd S )Nattrr  c                       fd}|S )Nc                 F    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>o  s    S r*   )r   ro   )r    rV   r  s    @r(   rc   zCDUFunc._install_ufunc_attributes.<locals>.get_attr_fn.<locals>.implm  s(    eilD11(((((r*   r}   )r  rc   s   ` r(   get_attr_fnz5DUFunc._install_ufunc_attributes.<locals>.get_attr_fnk  s#    ) ) ) ) ) Kr*   )r   r   r   r   r   )strr   r   Functionr   )r'   templater  at
attributesr  attr_fns          r(   _install_ufunc_attributesz DUFunc._install_ufunc_attributesi  s    	c 	h 	 	 	 	 ^H%%/
 	2 	2D!k$''G(r4((1111	2 	2r*   c                 Z    |                      |           |                     |           d S r   )_install_ufunc_reduce_install_ufunc_at)r'   r  s     r(   _install_ufunc_methodszDUFunc._install_ufunc_methods~  s0    ""8,,,x(((((r*   c                 h     t          j        |          }t          |d          d fd	            }d S )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
                  }|p|p| }	|ot          |          dk    }
t	          |t
          j        t
          j        t
          j        t
          j	        f          }t          j        |          |p }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        f           n@|r                    |j        |f           n!                    |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	          |	||
|||          }|                    | |           d S )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88888t99>>),&AsE3'+$Aq'11),G);&AsE3'+g~$Aq'1#JJsOOGWa88)%C%CPPGW-----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7A66///r*   c                 8    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733///r*   c                     r(|                      |t          j        |                    S |                      |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  sY     3 88Arz'':':;;; 88A$&Jw$7$7$&JqMM3 3 3r*   c                     r | ||           d S t          j        |          }||         }t          j        ||j                  } | |||j                   d S r   )r   r,  broadcast_torM   flat)	r    r!   r#   r%   b_a_r(  r*  r.  s	         r(   impl_genericz=DUFunc._install_ufunc_at.<locals>.ol_at.<locals>.impl_generic  sm     @!M%G55555AB7BRX66B#OE1grw?????r*   c                 0     | |d         |          |d<   d S )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eQ"r*   c                 b    r | ||                   ||<   d S  | ||         |          ||<   d S r   r}   r-  s       r(   impl_scalar_scalarzCDUFunc._install_ufunc_at.<locals>.ol_at.<locals>.impl_scalar_scalar  sC     6!&qz!2!2AgJJJ!&qz1!5!5AgJJJr*   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   r/  r5  r7  r9  r(  r*  r#  r.  r'   s   `                  @@@@r(   ol_atz'DUFunc._install_ufunc_at.<locals>.ol_at  s   M<#)#IK K K K a-- 1A+C000$Wek::K%guz::L&w<<M&w@@M"-"O"O-PN"/"ECLLA4E U[%.%*%*[%2 3 3G(++F#-v.H\N++I*.C axxG/22x()JKKK axx 3A 6 6xC(---"1%% -!'$$$$ -!'1&&&&!'17+,,,. . . . . 0 0 0 0 Y0 0 0 0 0 Y03 3 3 3 3 3@ @ @ @ @ @ @ @( ( ( (6 6 6 6 6 6  $  $ $ $22 $H $))##r*   r   r   r  r   )r'   r  r  rL  s   `   r(   r  zDUFunc._install_ufunc_at  sW    ^H%%	T	"	"_	$ _	$ _	$ _	$ _	$ 
#	"_	$ _	$ _	$r*   c                 h     t          j        |          }t          |d          d fd	            }d S )Nreducer   c                 B   t          j        dt          j                   t	          |t
          j                  sd}t          j        |          t	          |t
          j                  ot	          |j	        t
          j
                  }t	          |t
          j                  ot          |          dk    }t          j        |          }j        j        d u j        j        j        s/|r-t          |          dk    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    s1t	          |t
          j
        t
          j        t
          j        f          r|
S d S )Nz$ufunc.reduce feature is experimentalr  z-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                 t    }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  sU      %cNN  DAqCxx %aA..AFAAr*   c                     }ddt          |          }}}||k     rA||k    rt          |||          }n| |         }t          |||          }|dz  }|dz  }||k     A|S rR  )rE   r   )	rT  rU  rV   rV  rW  rX  szrY  tup_inits	           r(   tuple_slice_appendzKDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.tuple_slice_append  s     aQb1"ffCxx)!Q44F)!Q22QFA "ff r*   c                 p    t          j        ||||          }t          |          fdfd}||fS )Nc                    |\  }}}}|                      |          }|                     |          5   t          j        d          d          }	|	}
|dk    rpt	          d          D ]]}|                     ||dz
            }|                     ||          }|                     ||          }|                     |
|          }
^n^d|cxk     r	dz
  k     rn nt	          d|          D ]Z}|                     ||          }|                     ||          }|                     ||          }|                     |
|          }
[t	          |dz             D ]]}|                     ||dz
            }|                     ||          }|                     ||          }|                     |
|          }
^nnt	          ddz
            D ]Z}|                     ||          }|                     ||          }|                     ||          }|                     |
|          }
[|                     |           d d d            n# 1 swxY w Y   ||
fS )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_idxrW  strideidx_imlen_idxs                  r(   	gen_blockz\DUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.compute_flat_idx.<locals>.gen_block-  s   )-&GQQ 333DDB ++B// / /-rz"~~a00#'$>>%*1g%6%6 D D)0)>)>wA)N)N(/(=(=c1(E(E$+KK$>$>+2;;x+C+C	D
 8888Wq[88888%*1i%8%8 D D)0)>)>w)J)J(/(=(=c1(E(E$+KK$>$>+2;;x+C+C%*9q='%B%B D D)0)>)>wA)N)N(/(=(=c1(E(E$+KK$>$>+2;;x+C+C	D &+1gk%:%: D D)0)>)>w)J)J(/(=(=c1(E(E$+KK$>$>+2;;x+C+Cv...;/ / / / / / / / / / / / / / /> x<'s   H	I		IIc                    |\  }}}}|j         }|                    d          }	g }
t                    D ].} ||d| |	|          \  }}|
                    ||f           /|                    |          5  |                    ||
d         d                   }t                    D ]$}|                    ||
|         d                    %	 d d d            n# 1 swxY w Y   |                    |	           |                    |
d         d         j	                  }|
D ]\  }}|
                    ||           |                    ||          S )Naxis_endrb  axis_r   rY   )basic_blockre  rh  r   rf  switchadd_caseposition_at_endphir   add_incomingsdiv)r1   r2   rb   ru   rN   itemsizera   axisro  
switch_endlrW  blockrp  r{  r~  valueru  rt  s                    r(   codegenzZDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.compute_flat_idx.<locals>.codegenR  s   370GXsD ,B!(!;!;!;!L!LJA"7^^ 4 4*3)GQ4>+F +Fx%!23333 ++B// 8 8!(aeAh!?!?!&w 8 8A"OOAqtAw777788 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 ++J777!++ad1gl33C() 7 7u((6666"<<X666s   ;ACC#&C#)r   rA   rE   )	r'  rN   r  ra   r  rb   r  ru  rt  s	          @@r(   compute_flat_idxzIDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.compute_flat_idx(  sh    j(C>>c((#( #( #( #( #(J7 7 7 7 7 7, G|#r*   c                     | }t          t          |                     D ]2}| |         dk     r| |         |z   n| |         }t          |||          }3|S rn   )rh  rE   r   )r  ndimaxrW  rV   s        r(   
fixup_axiszCDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.fixup_axisj  s]    s4yy)) 3 3A,0GaKK$q'D..T!WC&r1c22BB	r*   c                     d| d         }}t          t          |                     D ]}| |         |k     r
|| |         }}||fS rn   )rh  rE   )rT  ra   rY  rW  s       r(   find_minzADUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.find_minr  sN    CFQs3xx + +A1vzz!"CFQAv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   rh  )r    rR   r  r[   initialr   startrr]  rW  id_noner   identity_none	init_none
ufunc_names             r(   impl_1dz@DUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.impl_1dz  s      *W_UqA(A A AC$S//)    EaAA   AAA[^ub)) + +Aaq**AA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        |          }|KIt          j        |          }t          j        |          D ]\  }}	 ||d          }
||
         ||<   n3|t          j        |          }nt          j        ||          }|                                }|[Yt          j        |          D ]C\  }}||         dk    r |j        |j	        ||          }||         |}} | ||          ||<   Dn\t          j        |          D ]G\  }}|||         dk    r |j        |j	        ||          }||         |}} | ||          ||<   H|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[  r_  r  s                   r(   impl_nd_axis_intzIDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.impl_nd_axis_int  sY   
 <$%?@@@!88EJ&D!88tuz11$^444  *W_T9Ja9O9OA(A A AC$S//) $EK66?x'7h777A"$."3"3 3 3Q%7%7T1%E%E
!&z!2#3 _)= ((KKKAA'JJJA wwyy?x'7$&N5$9$9 = =St9>>$'7'7	1:8;T(C (CH'+H~sC-2U3__DNN= %'N5$9$9 9 9S"?x/? #D	Q$#3#3AIqz47$? $?#'>3S).sCXr*   c                     ||j                   }t          dt          |                    D ]r}||         dk     s||         |j         k    rt          d          t          |dz   t          |                    D ]#}||         ||         k    rt          d          $s |          \  }}	|                     ||	||          }
t          |          dk    r|
S t          |          dk    r&|                     |
||dz   dz           dz
            S }t          t          |                    D ]}||k    rt          ||||                   } |                     |
|          S )Nr   r  rY   zduplicate value in 'axis')r  r[   r  r  )r  )r  rh  rE   r  rO  r   )r    rR   r  r[   r  rx  rW  rX  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  s   
 #
444q#e**-- J JAQx!||uQx5:'='=(888"1q5#e**55 J J 8uQx//",-H"I"II 0J %-HUOO!LL&.',)0 ! 2 2 t99>>HYY!^^ <<w{a6G0H10L<MMM!B"3r77^^ @ @<<!.r1eAh!?!?B <<<3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                 4    |                      |||          S r   )rO  )r    rR   r  r[   r  r  s        r(   impl_axis_nonezGDUFunc._install_ufunc_reduce.<locals>.ol_reduce.<locals>.impl_axis_none  s    
 ||E8UGDDDr*   r   NN)r   r   r	   r:  r7   r   r   r;  UniTupler[   Integerr=  rE   r   r@  r    r   rz   r   r  r   r   r   rh  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  r^  rZ  r[  r_  r  r'   s                 @@@@@@@@@@@@@@r(   	ol_reducez/DUFunc._install_ufunc_reduce.<locals>.ol_reduce  s    M@#)#IK K K K eU[11 1E+C000'en== 64:u}55 )$<<OTa+D11I J/47M,J # 1 13t99q==Kz K K K+C000uz*H%*q.1K&-&9%&@&@Ku{{eH}H)(33G+G44I
 
 
 
 
      ?$ ?$ Y?$B               , '('+)-	< < < < < < < < < < < <@ )*)-+/	4 4 4 4 4 4 4 4@ ,-,0.2	    %&%)'+	E E E E E E zQ'7! (,, ( uz!2!233%% 
(  3t99q=1))j05050D0F G G
 (' r*   r  rM  )r'   r  r  r  s   `   r(   r  zDUFunc._install_ufunc_reduce  sW    ^H%%	X	&	&`	( `	( `	( `	( `	( 
'	&`	( `	( `	(r*   c                    t          j        |          r|fn||f}d |D             }t          d |D                       }|                     |          dk    r&| j        rd| d}t          |           | j        |  t          j        |          r"t                                          ||          S  t                      j        |||f S )Nc              3   4   K   | ]}t          |          V  d S r   )r   r   r   s     r(   r   zDUFunc.at.<locals>.<genexpr>  s(      ..#&++......r*   c              3   \   K   | ]'}t          |t          j                  r|j        n|V  (d S r   )r7   r   r   r[   r  s     r(   r   zDUFunc.at.<locals>.<genexpr>  sM       / / # *4C)E)ENCII3 / / / / / /r*   ry   r   z.at(...))	r   r@  r   r   r   r   r   r   r  )	r'   r!   r#   r%   ru   r   r  r   r   s	           r(   r  z	DUFunc.at  s    *1--9ttAq6..... / /'-/ / / / / ##K00L@@| ( (?CttE"3'''"D"D)) q!! 	077::a)))577:7A//r*   c                    || j         j        j        }t          d| j        j        z   t          ft          | | j                            }|	                    | |           | 
                    |           |                     |           dS )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CI)<<(*dm<<<> > 	&&tW555&&w///##G,,,,,r*   c                    | j         rJt          j        | |          }|dS t          |j        |j        z             dt          |                   }| j        j        	                                D ]\  }}|j
        |k    r||fc S dS )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_function2  s     < 	O 9$LLD|!zdl :;;<MS=M=M<MNK)399;; 	! 	!ICx;&&Dy    'zr*   c                    |rJ | j         }t          j                            |||          }|\  }}}}t	          |          }	|	dk    r&t          |dt	          |                              }
nt          |          }
|                     |
          \  }}|R| j        rt          j	        d| d|          | 
                    |
           |                     |
          \  }}|J |	dk    rt          |          }nK|j        dk    r,|dk    rt          j        |j        ||          g}n|j        g}nt          j        d          |                    |           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_meF  s    
 ' 9 H H65!" !"6K3
$eV #$4 5 5 1$$
+BS1A-B-B,B+B CDDKK
++K,,[99	T; | >++/3ttVV-= > > >$$[11100==IC??? 1$$*++FFZ1__qyy+coufEEF/*12MNNNf&!!r*   r   )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   s   @r(   r   r      s         CABBM)-U" 0 0 0 0
 
 
 
 


 

 

   [   . . X.   X   X     X  ! ! X!     X  # # X# $ $ X$  ; ; ;2 2 2 2 27 7 7> " " " "H' ' '2 2 2 2*) ) ) )c$ c$ c$ c$Jd( d( d( d(L	0 0 0 0 0 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     sR                     B B B B B B B B B B B B B B- - - - - - - - - - - - - - & % % % % % C C C C C C C C 4 4 4 4 4 4 $ $ $ $ $ $ A A A A A A A A ( ( ( ( ( ( ' ' ' ' ' ' " " " " " "             9 9 9 9 9 9j= j= j= j= j= j= j= j=Z  (5 5 5 5 5$ 5 5 5H" H" H" H" H"Y"I$5y H" H" H"V     ' ' ' ' 'r*   