U
    ,d(R                     @   sB  d Z ddlZddlmZ ddlmZ ddlmZ ddlZddl	Z	ddl
ZddlZddlmZ ddlmZmZ ddlmZmZmZ dd	lmZmZ dd
lmZ ddlmZmZ ddlmZmZm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddlm+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 dd Z7e7 Z8e+dd Z9e+dd Z:eej;ej<edej<dd Z=edd Z>dd  Z?eej;ej<ej@ejAeej;ej<ejBejAedej<ej@ejAedej<ejBejAd!d" ZCeej;ej<ejAedej<ejAd#d$ ZDeej;ej<ej@eej;ej<ejBedej<ej@edej<ejBd%d& ZEeejFej<ed'ej<d(d) ZGeejHej<ed*ej<d+d, ZIeejJej<ed-ej<d.d/ ZKeejLej<ed0ej<d1d2 ZMeejNej<ed3ej<d4d5 ZOeejPej<ed6ej<d7d8 ZQd9d: ZRd;d< ZSeeSd=d> ZTeejUej<ed?ej<d@dA ZVeejWej<edBej<dCdD ZXedEdF ZYedGdH ZZedIdJ Z[eej\eej<dKddLdMZ]edNdO Z^edPdQ Z_edRdS Z`dTdU Zaeejbeej<dVddWdXZceejdeej<dYdZd[ Zeed d_d`Zfeejgeej<daddbdcZheejieej<dddedf ZjeejkddgdhZldidj Zmeejndkdl Zoeejpdmdn Zqeejrdodp Zreejsdqdr Zseejtdsdt Zududv ZveejwddwdxZweejxddydzZxed{d| Zyed}d~ Zzedd Z{dd Z|ee|eyd^dZ}ee|ezd^dZ~ee|eyddZee|ezddZeejdd Zeejdd Zeejdd Zeejdd Zeejdd Zeejdd Zeejdd Zeejdd Zeejdd Zedd Zdd ZeeezZeeeyZedd Zeej<deejdd Zedd Zdd ZeeeyZeeeZdd ZeeeZeeeZedd Zedd Zeejdd Zedd Zedd Zedd Zedd Zedd Zedd Zdd Zeejdd Zeejdd Zeejdd Zeejdd ZeejddÄ Zeddń ZeddǄ ZeejddɄ Zedd˄ Zeejddd̈́Zeddτ ZedddфZeejdddӄZeejdddՄZeejÃd	ddׄZed
ddلZeejƃdddۄZeejȃddd݄Zeejʃddd߄Zdd Zeẽdd Zdd ZeejσdddZdd Zeeуdd Zdd ZeeӃdd ZeejՃdddZedd Zedd ZeejكdddZeejۃdd ZdZedd Zedd Zߐd d Zedd Zedd Zdd ZeeddZeeddZeed^dZeed^dZeejd	d
 Zedd Zedd Zdd Zeedd Zedd Zedd Zdd Zdd Zedd Zedd Zedd Zd d! Zed"d# Zed$d% Zeejdd&d'Zeejdd(d)Zeejd*d+ Zeejd,d- Zed.d/ Z ed0d1 Zed2d3 Zed4d5 Zed6d7 Zed8d Zd9d: Zeed;d< Zeejdd=d>Z	d?d@ Z
dAdB Ze4ejeje4ejejdCdD Ze4ejeje4ejejdEdF Ze4ejeje4ejejdGdH Ze4ejejeje4ejejeje4ejejeje4ejejejdIdJ Ze4ejejeje4ejejejdKdL Ze4ejej<ejej<e4ejej<ejej<dMdN Ze4ejej<dOdP Ze4ejejdQdR Ze4ejeje4ejejejdSdT Ze4ejej<e4ejej<ejdUdV Zeejej<edWej<e4ej ej<dXdY Z!dZd[ Z"ed\d] Z#ed^d_ Z$ed`da Z%dbdc Z&ee&e#ddZ'ee&e%ddZ(ee&e$ddZ)e4ej ej*ej*ej*dedf Z+eej,dgdh Z-eej.didj Z/eej0dkdl Z1eej2ddmdnZ3edod Z4edpd Z5eej6dqdr Z7eej8ddtduZ9eej:dvdw Z;eej<dxdy Z=dzd{ Z>eej?dd|d}Z@d~d ZAeyZBedd ZCeeAeBZDeeAeCZEeejFdddZFeejGdddZHeIZJeejKdddZLdZMedeMZNdZOedeOZPdZQedeQZRdd ZSeS  dd ZTeTejPePeO eTejReReQ dd ZUdd ZVdd ZWG dd deZXeeWdd ZYeejZdd Z[eej\dd Z]eej^dddZ_eej`ejafddZbeejcdd ZdeejedddZfeejgdddZhedd Ziedd Zjedd Zkedd Zldd Zmeejnemei eejoemej eejpemek eejqemel erdddddddddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdgZserdӐdԐdՐd֐dאdؐdِdڐdېdܐdݐdސdߐddddddddddddgZtedd Zuedd Zvedd Zweejxdd Zyedd Zzedd Z{eej|dd Z}edd Z~edd ZdS (  z5
Implementation of math operations on Array objects.
    N)
namedtuple)IntEnum)partial)generated_jit)typescgutils)overloadoverload_methodregister_jitable)as_dtypetype_can_asarraynumpy_version)is_nonelikecheck_is_integer)lower_builtinimpl_ret_borrowedimpl_ret_new_refimpl_ret_untracked)	signature)
make_array	load_item
store_item_empty_nd_impl)ensure_blas)	intrinsic)RequireLiteralValueTypingErrorNumbaValueErrorNumbaNotImplementedErrorNumbaTypeErrorNumbaDeprecationWarning)glue_lowering)tuple_setitemc                   C   s&   z
t   W n tk
r    Y dS X dS NFT)r   ImportError r&   r&   6/tmp/pip-unpacked-wheel-eu7e0c37/numba/np/arraymath.py_check_blas$   s
    
r(   c                    s<   t |d  ttj |} fdd}||fS )a  
    This routine converts shape list where the axis dimension has already
    been popped to a tuple for indexing of the same size.  The original shape
    tuple is also required because it contains a length field at compile time
    whereas the shape list does not.
       c              	      sp   |  }t|}|\}}dd }t D ]>}	| tj|	}
| ||ttj||
g}||||	}q,|S )Nc                 S   s   | | S Nr&   )air&   r&   r'   array_indexerI   s    zB_create_tuple_result_shape.<locals>.codegen.<locals>.array_indexer)	get_value_typer   get_null_valuerangeget_constantr   intpcompile_internalinsert_value)cgctxbuilderr   argslltuptytupZin_shape_r-   r,   Zdataidxdatand
shape_listtuptyr&   r'   codegenA   s    

z+_create_tuple_result_shape.<locals>.codegen)lenr   UniTupler2   )tyctxr>   shape_tuplefunction_sigr@   r&   r<   r'   _create_tuple_result_shape0   s
    
rF   c           	         s   t |tjstd|j t| kr.d  }| d }g }|tjg| 7 }|tjg7 }|tjg| 7 }t||||} fdd}||fS )aH  
    Generates a tuple that can be used to index a specific slice from an
    array for sum with axis.  shape_tuple is the size of the dimensions of
    the input array.  'value' is the value to put in the indexing tuple
    in the axis dimension and 'axis' is that dimension.  For this to work,
    axis has to be a const.
    z axis argument must be a constantr   r)   c                    s   |  }t|}|\}}}dd }| ||t g }	td D ]}
|||	|
}qD||| }t d D ]}
|||	|
}qt|S )Nc                   S   s
   t d d S r*   )slicer&   r&   r&   r'   create_full_slice   s    z<_gen_index_tuple.<locals>.codegen.<locals>.create_full_slicer   r)   )r.   r   r/   r3   r   slice2_typer0   r4   )r5   r6   r   r7   r8   r9   r:   Z	value_argrH   Z
slice_datar,   Z
axis_valuer=   r?   r&   r'   r@      s    


z!_gen_index_tuple.<locals>.codegen)	
isinstancer   Literalr   literal_valuerA   rI   r2   Tuple)	rC   rD   valueaxisbeforeafterZ
types_listrE   r@   r&   rJ   r'   _gen_index_tupleY   s     	
rS   z	array.sumc                    sB   | d  fdd}| j||||t|j dd}t| ||j |S )Nr   c                    s$    }t | D ]}|| 7 }q|S r*   npnditeritemarrcvzeror&   r'   array_sum_impl   s    z!array_sum.<locals>.array_sum_implrZ   localsreturn_typer3   dictr   contextr6   sigr7   r^   resr&   r\   r'   	array_sum   s    

ri   c                 C   s   | S r*   r&   )rY   r[   r&   r&   r'   _array_sum_axis_nop   s    rj   c                    s    fdd}|S )Nc                    s4  | j }s"|dk s|dkr"td||kr2tdt| j}|| }|| t|| j}t|t}t	|D ]}rt
| j| }|| | 7 }qt|dkrt
| j|d}	|| |	 7 }qt|dkrt
| j|d}
|| |
 7 }qt|dkrt
| j|d}|| | 7 }qt|dkrtt
| j|d}|| | 7 }qt|dS )a(  
        function that performs sums over one specific axis

        The third parameter to gen_index_tuple that generates the indexing
        tuples has to be a const so we can't just pass "axis" through since
        that isn't const.  We can check for specific values and have
        different instances that do take consts.  Supporting axis summation
        only up to the fourth dimension for now.

        typing/arraydecl.py:sum_expand defines the return type for sum with
        axis. It is one dimension less than the input array.
        r      zHNumba does not support sum with axis parameter outside the range 0 to 3.zaxis is out of bounds for arrayr)      )ndim
ValueErrorlistshapepoprF   rU   fulltyper0   rS   )rY   rP   rm   ZashapeZaxis_lenZashape_without_axisresultZ
axis_indexZindex_tuple_genericZindex_tuple1Zindex_tuple2Zindex_tuple3Zindex_tuple4const_axis_valis_axis_constopr]   r&   r'   inner   s<    


z gen_sum_axis_impl.<locals>.innerr&   )rw   rv   rx   r]   ry   r&   ru   r'   gen_sum_axis_impl   s    =rz   c                    s  |j }t|d|d}t|dd d kr.tj}nt}|j\}}}	d}
d}t|tjr|j	}|dk rj|j
| }|dk s|||j
krtd| j|}| ||}|d ||d f}|j|||	gd}d}
t|
|||}t|  fd	d
}| ||||}t| ||j |S )Ndtyper   rm   Fz'axis' entry is out of boundsrl   r7   Tc                    s
    | |S r*   r&   )rY   rP   r{   Zcompiledr&   r'   array_sum_impl_axis  s    z1array_sum_axis_dtype.<locals>.array_sum_impl_axis)rc   getattrrU   takerj   r7   rK   r   rL   rM   rm   rn   typing_contextresolve_value_typer1   replacerz   r
   r3   r   )rf   r6   rg   r7   rettyr]   rx   ty_arrayty_axisZty_dtyperw   rv   axis_valgen_implr~   rh   r&   r}   r'   array_sum_axis_dtype   s0    
r   c                    sB   | d  fdd}| j||||t|j dd}t| ||j |S )Nr   c                    s$    }t | D ]}|| 7 }q|S r*   rT   )rY   r{   rZ   r[   r\   r&   r'   r^   +  s    z'array_sum_dtype.<locals>.array_sum_implr_   r`   rb   re   r&   r\   r'   array_sum_dtype&  s    

r   c                    s  |j }t|d|d}t|dd d kr.tj}nt}|j\}}d}	d}
t|tjr|j	}
|
dk rh|j
|
 }
|
dk sz|
|j
krd|
 d}t|| j|
}| ||
}|d |f}|j||gd}d}	t|	|
||}t|  fd	d
}| ||||}t| ||j |S )Nr{   r   rm   Fz'axis' entry (z) is out of boundsr|   Tc                    s
    | |S r*   r&   rY   rP   r}   r&   r'   r~   [  s    z+array_sum_axis.<locals>.array_sum_impl_axis)rc   r   rU   r   rj   r7   rK   r   rL   rM   rm   r   r   r   r1   r   rz   r
   r3   r   )rf   r6   rg   r7   r   r]   rx   r   r   rw   rv   msgr   r   r~   rh   r&   r}   r'   array_sum_axis6  s2    

r   z
array.prodc                 C   s4   dd }| j ||||t|jdd}t| ||j|S )Nc                 S   s$   d}t | D ]}|| 9 }q|S Nr)   rT   rX   r&   r&   r'   array_prod_implf  s    z#array_prod.<locals>.array_prod_implr_   r`   )r3   rd   rc   r   )rf   r6   rg   r7   r   rh   r&   r&   r'   
array_prodb  s
    
r   zarray.cumsumc                    sP   |j j}t| |d fdd}| j||||t|dd}t| ||j |S )Nr   c                    s:   t | j }}t| jD ]\}}||7 }|||< q|S r*   rU   emptysize	enumerateflatrY   outrZ   idxr[   r{   r]   r&   r'   array_cumsum_implx  s    
z'array_cumsum.<locals>.array_cumsum_implr_   r`   rc   r{   r   r3   rd   r   )rf   r6   rg   r7   scalar_dtyper   rh   r&   r   r'   array_cumsumq  s    r   zarray.cumprodc                    sF   |j j}t|  fdd}| j||||t|dd}t| ||j |S )Nc                    s:   t | j }d}t| jD ]\}}||9 }|||< q|S r   r   r   r{   r&   r'   array_cumprod_impl  s    
z)array_cumprod.<locals>.array_cumprod_implr_   r`   r   )rf   r6   rg   r7   r   r   rh   r&   r   r'   array_cumprod  s    r   z
array.meanc                    sB   | d  fdd}| j||||t|j dd}t| ||j |S )Nr   c                    s*    }t | D ]}|| 7 }q|| j S r*   )rU   rV   rW   r   rX   r\   r&   r'   array_mean_impl  s    z#array_mean.<locals>.array_mean_implr_   r`   rc   r3   rd   r   )rf   r6   rg   r7   r   rh   r&   r\   r'   
array_mean  s    

r   z	array.varc                 C   s(   dd }|  ||||}t| ||j|S )Nc                 S   sJ   |   }d}t| D ](}| | }|t|t| 7 }q|| j S Nr   )meanrU   rV   rW   realconjr   )rY   mssdr[   valr&   r&   r'   array_var_impl  s    z!array_var.<locals>.array_var_implr3   r   rc   )rf   r6   rg   r7   r   rh   r&   r&   r'   	array_var  s    r   z	array.stdc                 C   s(   dd }|  ||||}t| ||j|S )Nc                 S   s   |   d S N      ?)var)arryr&   r&   r'   array_std_impl  s    z!array_std.<locals>.array_std_implr   )rf   r6   rg   r7   r   rh   r&   r&   r'   	array_std  s    r   c                 C   s   d | }|S )Nz@zero-size array to reduction operation {0} which has no identity)format)fn_namer   r&   r&   r'   zero_dim_msg  s    r   c                 C   s   d S r*   r&   xr&   r&   r'   _is_nat  s    r   c                    s(   t dkrdd S | d  fddS d S )Nr)      c                 S   s
   t | S r*   )rU   Zisnatr   r&   r&   r'   <lambda>      zol_is_nat.<locals>.<lambda>ZNaTc                    s   |  kS r*   r&   r   Znatr&   r'   r     r   r   r   r&   r   r'   	ol_is_nat  s    r   z	array.minc                    s   |j d j}td t|tjtjfr4 fdd}n@t|tjrN fdd}n&t|tjrh fdd}n fdd}| 	||||}t
| ||j|S )Nr   Zminimumc                    sr   | j dkrt t| }t|d}t|r6|S |D ]2}| }t|r`tdkr:|  S q:||k r:|}q:|S Nr   r   	r   rn   rU   rV   nextr   r   rW   r   r   it	min_valueviewr[   ZMSGr&   r'   array_min_impl  s    

z!array_min.<locals>.array_min_implc                    sn   | j dkrt t| }t|d}|D ]:}| }|j|jk rL|}q.|j|jkr.|j|jk r.|}q.|S r   	r   rn   rU   rV   r   r   rW   r   imagr   r   r&   r'   r     s    

c                    sl   | j dkrt t| }t|d}t|r8|S |D ]*}| }t|rZ|  S ||k r<|}q<|S r   r   rn   rU   rV   r   r   isnanrW   r   r   r&   r'   r     s    



c                    sL   | j dkrt t| }t|d}|D ]}| }||k r.|}q.|S r   r   rn   rU   rV   r   r   rW   r   r   r&   r'   r     s    

r7   r{   r   rK   r   
NPDatetimeNPTimedeltaComplexFloatr3   r   rc   )rf   r6   rg   r7   tyr   rh   r&   r   r'   	array_min  s    r   z	array.maxc                    s   |j d j}td t|tjtjfr4 fdd}n@t|tjrN fdd}n&t|tjrh fdd}n fdd}| 	||||}t
| ||j|S )Nr   maximumc                    sr   | j dkrt t| }t|d}t|r6|S |D ]2}| }t|r`tdkr:|  S q:||kr:|}q:|S r   r   r   r   	max_valuer   r[   r   r&   r'   array_max_impl5  s    

z!array_max.<locals>.array_max_implc                    sn   | j dkrt t| }t|d}|D ]:}| }|j|jkrL|}q.|j|jkr.|j|jkr.|}q.|S r   r   r   r   r&   r'   r   J  s    

c                    sl   | j dkrt t| }t|d}t|r8|S |D ]*}| }t|rZ|  S ||kr<|}q<|S r   r   r   r   r&   r'   r   [  s    



c                    sL   | j dkrt t| }t|d}|D ]}| }||kr.|}q.|S r   r   r   r   r&   r'   r   m  s    

r   )rf   r6   rg   r7   r   r   rh   r&   r   r'   	array_max+  s    r   c                 C   s   | j dkrtdt| }t|d}d}t|r:|S d}|D ]F}| }t|rptdkrf|  S |d7 }qB||k r|}|}|d7 }qB|S )Nr   *attempt to get argmin of an empty sequencer)   r   r   )r   r   r   min_idxr   r   r[   r&   r&   r'   array_argmin_impl_datetime~  s(    


r   c                 C   sv   | j dkrtd| jD ]}|}d} q*qt|r8|S d}| jD ].}t|rX|  S ||k rh|}|}|d7 }qB|S )Nr   r   r)   r   rn   r   rU   r   r   r[   r   r   r   r&   r&   r'   array_argmin_impl_float  s"    





r   c                 C   s^   | j dkrtd| jD ]}|}d} q2qtdd}| jD ]}||k rP|}|}|d7 }q<|S )Nr   r   Zunreachabler)   )r   rn   r   RuntimeErrorr   r&   r&   r'   array_argmin_impl_generic  s    



r   argminc                    sZ   t | jtjtjfrt nt | jtjr.t nt t	|rJd fdd	}nt
| | }|S )Nc                    s    | S r*   r&   r   flatten_implr&   r'   array_argmin_impl  s    z'array_argmin.<locals>.array_argmin_impl)N)rK   r{   r   r   r   r   r   r   r   r   %build_argmax_or_argmin_with_axis_impl)rY   rP   r   r&   r   r'   array_argmin  s      r   c                 C   s   | j dkrtdt| }t|d}d}t|r:|S d}|D ]F}| }t|rptdkrf|  S |d7 }qB||kr|}|}|d7 }qB|S )Nr   *attempt to get argmax of an empty sequencer)   r   r   )r   r   r   max_idxr   r   r[   r&   r&   r'   array_argmax_impl_datetime  s(    


r   c                 C   sv   | j dkrtd| jD ]}|}d} q*qt|r8|S d}| jD ].}t|rX|  S ||krh|}|}|d7 }qB|S Nr   r   r)   r   r   r[   r   r   r   r&   r&   r'   array_argmax_impl_float  s"    





r   c                 C   sV   | j dkrtd| jD ]}|}d} q*qd}| jD ]}||krH|}|}|d7 }q4|S r   )r   rn   r   r   r&   r&   r'   array_argmax_impl_generic  s    



r   c                    s4   t |d tjtt| jd fdd	}|S )z|
    Given a function that implements the logic for handling a flattened
    array, return the implementation function.
    rP   Nc           	         s  |dk r| j | }|dk s$|| j kr,td| j dkr> | S }t|| j d D ]}t|||d }qRt|| j d |}| |}|jd }| }|j| jkst|j| dkstt	
|j| }t|jD ]$} ||| |d |  ||< q||jd d S )Nr   zaxis is out of boundsr)   )rm   rn   r0   r#   	transposerp   ravelr   AssertionErrorrU   r   reshape)	rY   rP   tmpr,   Ztranspose_indexZtransposed_arrr   Zraveledr   r   r   Ztuple_bufferr&   r'   impl"  s&    



"z3build_argmax_or_argmin_with_axis_impl.<locals>.impl)N)r   r   r2   tupler0   rm   )rY   rP   r   r   r&   r   r'   r     s
    
r   argmaxc                    sZ   t | jtjtjfrt nt | jtjr.t nt t	|rJd fdd	}nt
| | }|S )Nc                    s    | S r*   r&   r   r   r&   r'   array_argmax_implO  s    z'array_argmax.<locals>.array_argmax_impl)N)rK   r{   r   r   r   r   r   r   r   r   r   )rY   rP   r   r&   r   r'   array_argmaxD  s      r   allc                 C   s   dd }|S )Nc                 S   s"   t | D ]}| s
 dS q
dS r$   rT   r+   r[   r&   r&   r'   flat_all[  s    znp_all.<locals>.flat_allr&   )r+   r   r&   r&   r'   np_allX  s    r   h㈵>:0yE>Fc                 C   s   t | }t |}|s|s$|r(|s(dS |r:|r:|s~dS nDt | sNt |rV| |kS t | | ||t |d   kr~dS dS )NF      ?T)rU   r   isinfabs)Za_vZb_vrtolatol	equal_nanZ	a_v_isnanZ	b_v_isnanr&   r&   r'   _allclose_scalarsd  s     

$r  allclosec                 C   s   t | stdt |s tdt|tjs4tdt|tjsHtdt|tjs\tdt| tj}t|tj}|r|rdd	d
}|S |r|sddd}|S |s|rddd}	|	S |s|sddd}
|
S d S )Nz)The first argument "a" must be array-likez*The second argument "b" must be array-likez2The third argument "rtol" must be a floating pointz3The fourth argument "atol" must be a floating pointz0The fifth argument "equal_nan" must be a booleanr   r   Fc                 S   s   t | ||||dS )Nr  r  r  )r  )r+   br  r  r  r&   r&   r'   np_allclose_impl_scalar_scalar  s    
z3np_allclose.<locals>.np_allclose_impl_scalar_scalarc                 S   s:   t |}t |D ] }t| | |||ds dS qdS Nr	  FTrU   asarrayrV   r  rW   )r+   r
  r  r  r  bvr&   r&   r'   np_allclose_impl_scalar_array  s    
z2np_allclose.<locals>.np_allclose_impl_scalar_arrayc                 S   s:   t | } t | D ] }t| ||||ds dS qdS r  r  )r+   r
  r  r  r  avr&   r&   r'   np_allclose_impl_array_scalar  s    
z2np_allclose.<locals>.np_allclose_impl_array_scalarc           	      S   s`   t | } t |}t | |\}}t ||fD ](\}}t| | |||ds2 dS q2dS r  )rU   r  Zbroadcast_arraysrV   r  rW   )	r+   r
  r  r  r  Za_aZb_br  r  r&   r&   r'   np_allclose_impl_array_array  s    

 z1np_allclose.<locals>.np_allclose_impl_array_array)r   r   F)r   r   F)r   r   F)r   r   F)r   	TypeErrorrK   r   r   r   BooleanNumber)r+   r
  r  r  r  Zis_a_scalarZis_b_scalarr  r  r  r  r&   r&   r'   np_allclose~  s@      
  
  
  
r  anyc                 C   s   dd }|S )Nc                 S   s"   t | D ]}| r
 dS q
dS NTFrT   r   r&   r&   r'   flat_any  s    znp_any.<locals>.flat_anyr&   )r+   r  r&   r&   r'   np_any  s    r  c                 C   sN   |d kst |tjr ddd}n*|d ks4t |tjr@ddd}n
ddd}|S )Nc                 S   s   t | } t | S r*   )rU   r  r   rY   rP   weightsr&   r&   r'   np_average_impl  s    
z#np_average.<locals>.np_average_implc                 S   sv   t | } t |}| j|jkrB|d kr0td|jdkrBtdt |}|dkr\tdt t | || }|S )NzCNumba does not support average when shapes of a and weights differ.r)   z81D weights expected when shapes of a and weights differ.        z)Weights sum to zero, can't be normalized.)rU   r  rp   r  rm   sumZeroDivisionErrormultiply)rY   rP   r  Zsclavgr&   r&   r'   r    s$    



c                 S   s   t dd S )Nz)Numba does not support average with axis.)r  r  r&   r&   r'   r    s    )NN)NN)NN)rK   r   ZNoneType)rY   rP   r  r  r&   r&   r'   
np_average  s    
r$  c                 C   s,   t | tjtjfrtjS tdd }|S dS )z$
    A generic isnan() function
    c                 S   s   dS NFr&   r   r&   r&   r'   _trivial_isnan  s    z!get_isnan.<locals>._trivial_isnanN)rK   r   r   r   rU   r   r
   )r{   r&  r&   r&   r'   	get_isnan  s
    
r'  c                 C   s   t | rdd S d S )Nc                 S   s   t | jdkS r   rU   r  r   r   r&   r&   r'   r     r   znp_iscomplex.<locals>.<lambda>r   r   r&   r&   r'   np_iscomplex   s    r*  c                 C   s   t | rdd S d S )Nc                 S   s   t | jdkS r   r(  r   r&   r&   r'   r     r   znp_isreal.<locals>.<lambda>r)  r   r&   r&   r'   	np_isreal  s    r+  c                    sV   t | }t| tjrt | j}t|tj t| tjrF fdd}n fdd}|S )Nc                    s   | d krdS  S r%  r&   r   Ziscmplxr&   r'   r     s    ziscomplexobj.<locals>.implc                    s    S r*   r&   r   r,  r&   r'   r     s    )determine_dtyperK   r   Optionalrs   rU   
issubdtypecomplexfloating)r   dtr   r&   r,  r'   iscomplexobj  s    
r2  c                 C   s   dd }|S )Nc                 S   s   t |  S r*   )rU   r2  r   r&   r&   r'   r   )  s    zisrealobj.<locals>.implr&   )r   r   r&   r&   r'   	isrealobj$  s    r3  c                    s&   t | tjtjtjf  fdd}|S )Nc                    s    S r*   r&   )numrh   r&   r'   r   2  s    znp_isscalar.<locals>.impl)rK   r   r  ZUnicodeTyper  )r4  r   r&   r5  r'   np_isscalar.  s    r6  c                    s*   t |rd fdd	}nd fdd	}|S )Nc                    s   t t |  t | S r*   rU   logical_andr  Zsignbitr   r   fnr&   r'   r   ;  s    zis_np_inf_impl.<locals>.implc                    s   t t |  t | |S r*   r7  r9  r:  r&   r'   r   >  s    )N)Nr   )r   r   r;  r   r&   r:  r'   is_np_inf_impl7  s    r=  c                 C   s   t dd }t| ||S )Nc                 S   s   | S r*   r&   r   r&   r&   r'   r   F  r   zisneginf.<locals>.<lambda>r
   r=  r   r   r;  r&   r&   r'   isneginfD  s    r@  c                 C   s   t dd }t| ||S )Nc                 S   s   |  S r*   r&   r   r&   r&   r'   r   L  r   zisposinf.<locals>.<lambda>r>  r?  r&   r&   r'   isposinfJ  s    rA  c                 C   s   | |k S r*   r&   r+   r
  r&   r&   r'   	less_thanP  s    rC  c                 C   s   | |kS r*   r&   rB  r&   r&   r'   greater_thanU  s    rD  c                 C   s   | j dkrtdd S )Nr   z3zero-size array to reduction operation not possible)r   rn   r+   r&   r&   r'   check_arrayZ  s    
rF  c                    s"   |r fdd}n fdd}|S )Nc                    s   t | }t| t |}t|d}|D ]\}| }t |jrXt |jsX|}q. |j|jrl|}q.|j|jkr. |j	|j	r.|}q.|S r   )
rU   r  rF  rV   r   r   rW   r   r   r   r+   rY   r   
return_valr   r[   comparison_opr&   r'   r   b  s    

z!nan_min_max_factory.<locals>.implc                    sX   t | }t| t |}t|d}|D ]$}| }t |s. ||s.|}q.|S r   )rU   r  rF  rV   r   r   rW   r   rG  rI  r&   r'   r   s  s    



r&   )rJ  is_complex_dtyper   r&   rI  r'   nan_min_max_factory`  s    rL  )rK  Tc                 C   s"   t | }t|tjrtS tS d S r*   )r-  rU   r/  r0  complex_nanminreal_nanminr+   r1  r&   r&   r'   	np_nanmin  s    rP  c                 C   s"   t | }t|tjrtS tS d S r*   )r-  rU   r/  r0  complex_nanmaxreal_nanmaxrO  r&   r&   r'   	np_nanmax  s    rS  c                    s*   t | tjsd S t| j  fdd}|S )Nc                    sH   d}d}t | D ](}| } |s|| 7 }|d7 }qt ||S Nr  r   r)   )rU   rV   rW   divide)r+   rZ   countr   r[   r   r&   r'   nanmean_impl  s    
z np_nanmean.<locals>.nanmean_implrK   r   Arrayr'  r{   )r+   rX  r&   rW  r'   
np_nanmean  s
    
r[  c                    s*   t | tjsd S t| j  fdd}|S )Nc                    sj   t | }d}d}t | D ]@}| } |s| | }|t |t | 7 }|d7 }qt ||S rT  )rU   nanmeanrV   rW   r   r   rU  )r+   r   r   rV  r   r[   r   rW  r&   r'   nanvar_impl  s    

znp_nanvar.<locals>.nanvar_implrY  )r+   r]  r&   rW  r'   	np_nanvar  s
    
r^  c                 C   s   t | tjsd S dd }|S )Nc                 S   s   t | d S r   )rU   nanvarrE  r&   r&   r'   nanstd_impl  s    znp_nanstd.<locals>.nanstd_implrK   r   rZ  )r+   r`  r&   r&   r'   	np_nanstd  s    rb  c                    sP   t | tjsd S t | jtjr&tj}n| j}|dt| j  fdd}|S )Nr   c                    s0   }t | D ]}| } |s||7 }q|S r*   rT   r+   rZ   r   r[   r   r]   r&   r'   nansum_impl  s    
znp_nansum.<locals>.nansum_implrK   r   rZ  r{   Integerr2   r'  )r+   r   re  r&   rd  r'   	np_nansum  s    
rh  c                    sP   t | tjsd S t | jtjr&tj}n| j}|dt| j  fdd}|S )Nr)   c                    s0   }t | D ]}| } |s||9 }q|S r*   rT   rc  r   oner&   r'   nanprod_impl  s    
z np_nanprod.<locals>.nanprod_implrf  )r+   r   rk  r&   ri  r'   
np_nanprod  s    
rl  c                    sZ   t | tjsd S t | jtjtjfr,dd S | jt d fdd}|S d S )Nc                 S   s
   t | S r*   )rU   cumprodrE  r&   r&   r'   r     r   znp_nancumprod.<locals>.<lambda>r)   c                    sD   t | j}}t| jD ]"\}} | r6||9 }|||< q|S r*   r   r+   r   rZ   r   r[   is_nanrj  r   r&   r'   nancumprod_impl  s    

z&np_nancumprod.<locals>.nancumprod_implrK   r   rZ  r{   r  rg  r'  )r+   rq  r&   ro  r'   np_nancumprod  s    	rs  c                    sZ   t | tjsd S t | jtjtjfr,dd S | jt d fdd}|S d S )Nc                 S   s
   t | S r*   )rU   cumsumrE  r&   r&   r'   r   &  r   znp_nancumsum.<locals>.<lambda>r   c                    sD   t | j}}t| jD ]"\}} | r6||7 }|||< q|S r*   r   rn  rp  r   r]   r&   r'   nancumsum_impl,  s    

z$np_nancumsum.<locals>.nancumsum_implrr  )r+   rv  r&   ru  r'   np_nancumsum  s    	rw  c                 C   s&   t | }t|dkrtdn|S d S )Nr   z&zero-size array reduction not possible)_asarrayrA   rn   r+   rY   r&   r&   r'   prepare_ptp_input8  s    
rz  c                    s    fdd}|S )Nc                    s*   t | tjr fdd}n fdd}|S )Nc                    s4    |j | j r|S |j | j kr0 |j| jr0|S | S r*   )r   r   current_valr   rx   r&   r'   r   I  s    zN_compute_current_val_impl_gen.<locals>._compute_current_val_impl.<locals>.implc                    s    || r|S | S r*   r&   r{  r}  r&   r'   r   Q  s    )rK   r   r   )r|  r   r   r}  r&   r'   _compute_current_val_implB  s    z@_compute_current_val_impl_gen.<locals>._compute_current_val_implr&   )rx   r~  r&   r}  r'   _compute_current_val_impl_genA  s    r  c                    sH   d t | tjr fdd}n&t | tjr8 fdd}n fdd}|S )Nr   c                    sH   t | jr<t | jr,dt jt jd  fS dt jd fS nd fS d S )NT              ?y                F)rU   r   r   r   nanr   ZUNUSEDr&   r'   r   _  s
    z_early_return.<locals>.implc                    s    t | rdt jfS d fS d S r  )rU   r   r  r  r  r&   r'   r   h  s    

c                    s   d fS r%  r&   r  r  r&   r'   r   n  s    )rK   r   r   r   )r   r   r&   r  r'   _early_return[  s    r  ptpc                 C   s,   t | dr t| jtjr tddd }|S )Nr{   +Boolean dtype is unsupported (as per NumPy)c           	      S   sj   t | }|j}|d }|d }t|jD ]8}|| }t|\}}|rL|  S t||}t||}q(|| S r   )rz  r   r0   r   r  _compute_a_max_compute_a_min)	r+   rY   Za_flatZa_mina_maxr,   r   Ztake_branchretvalr&   r&   r'   np_ptp_impl|  s    
znp_ptp.<locals>.np_ptp_impl)hasattrrK   r{   r   r  r   )r+   r  r&   r&   r'   np_ptps  s
    
r  c                 C   s(   t | rdS t |rdS | |k S d S r$   )rU   r   rB  r&   r&   r'   nan_aware_less_than  s
    

r  c                    s    fdd}|S )Nc                    sZ  || d? } | | | | r8| | | |  | |< | |<  | | | | rd| | | |  | |< | |<  | | | | r| | | |  | |< | |< | | }| | | |  | |< | |< |}|d }||k rވ | | |r|d7 }q||kr || | r|d8 }q||krq<| | | |  | |< | |< |d7 }|d8 }q| | | |  | |< | |< |S r   r&   )AlowhighmidZpivotr,   j	pivotimplr&   r'   
_partition  s,    



z&_partition_factory.<locals>._partitionr&   )r  r  r&   r  r'   _partition_factory  s    !r  c                    s    fdd}|S )Nc                    sP    | ||}||krH||k r2|d } | ||}q|d } | ||}q| | S )zJ
        Select the k'th smallest element in array[low:high + 1].
        r)   r&   r   kr  r  r,   partitionimplr&   r'   _select  s    z _select_factory.<locals>._selectr&   )r  r  r&   r  r'   _select_factory  s    r  c                 C   s   ||kst t| ||}||k r*|d }q ||d kr@|d }q ||krbt| |d |d | qxq t| |||d  qxq | | | |d  fS )z
    Select the k'th and k+1'th smallest elements in array[low:high + 1].

    This is significantly faster than doing two independent selections
    for k and k+1.
    r)   )r   r  r  r  r&   r&   r'   _select_two  s    	

r  c                 C   sT   d}|d }|d? }|d@ dkrBt | |d ||\}}|| d S t| |||S dS )zt
    The main logic of the median() call.  *temp_arry* must be disposable,
    as this function will mutate it.
    r   r)   rl   N)r  r  )	temp_arrynr  r  Zhalfr+   r
  r&   r&   r'   _median_inner  s    r  c                 C   s   t | tjsd S dd }|S )Nc                 S   s   |   }|jd }t||S r   )flattenrp   r  )r+   r  r  r&   r&   r'   median_impl
  s    
znp_median.<locals>.median_implra  )r+   r  r&   r&   r'   	np_median  s    r  c                 C   s  t | }|dkr.tjt || d tjd}ntjt |tjd}tt |D ]`}|| }|dkrt| }tt|  rt| rtj	}n|dkrJt
| }tt|  rt| tjk}t| tj k}|||  }	|	dkrtj	}|dkr|dkrtj	}|dkr$tj	}|	dkr|dkr|dkrtj	}n^d|d t|d  }
t|
}|
| }t| t|d d|d d\}}|d|  ||  }|||< qN|S )Nr)   r   r   d   rl         Y@)r  r  r  )rA   rU   rr   float64r   r0   maxr   isfiniter  minr   inftrue_dividemathfloorr  int)r+   qr  r   r,   
percentiler   Znum_pos_infZnum_neg_infZ
num_finiteZrankfr   lowerupperr&   r&   r'   _collect_percentiles_inner  sD    








 
r  c                 C   sT   |r | |  } t | dkr.dS nt|r.dS t | dkrL| d }t|S dS d S )Nr   Fr)   T)rA   rU   r  r  )r+   nan_maskskip_nanr   r&   r&   r'   _can_collect_percentilesI  s    


r  c                 C   s   d}| j dkrX| jdk rXt| jD ]2}| | dk sL| | |ksLt| | r"d} qq"n0tt| st| dk st| |krd}|S )NTr)   
   r  F)rm   r   r0   rU   r   r  )r  q_upper_boundZvalidr,   r&   r&   r'   check_validZ  s    &,r  c                 C   s   t | ddstdd S )Nr  r  z)Percentiles must be in the range [0, 100]r  rn   r  r&   r&   r'   percentile_is_validk  s    r  c                 C   s   t | ddstdd S )Nr  r  z%Quantiles must be in the range [0, 1]r  r  r&   r&   r'   quantile_is_validq  s    r  c                 C   sz   t j|t jd }|| || }t j| t jd }t |}t|||rd||  }t||}nt t|t j	}|S Nr   )
rU   r  r  r  r   r  r  rr   rA   r  )r+   r  check_qfactorr  r  r  r   r&   r&   r'   _collect_percentilesw  s    

r  c                    sv   t | }t|tjrtd fdd} fdd}t|tjtjfrT|S t|tj	rn|j
dkrn|S |S dS )z
    The underlying algorithm to find percentiles and quantiles
    is the same, hence we converge onto the same code paths
    in this inner function implementation
    zNot supported for complex dtypec                    s   t | | d S r   r  r+   r  r  r  r  r&   r'   np_percentile_q_scalar_impl  s    z?_percentile_quantile_inner.<locals>.np_percentile_q_scalar_implc                    s   t | | S r*   r  r  r  r&   r'   np_percentile_impl  s    z6_percentile_quantile_inner.<locals>.np_percentile_implr   N)r-  rU   r/  r0  r   rK   r   r  r  rZ  rm   )r+   r  r  r  r  r1  r  r  r&   r  r'   _percentile_quantile_inner  s    r  c                 C   s   t | |ddtdS )NFr  r  r  r  r  r  r  r&   r&   r'   np_percentile  s        r  c                 C   s   t | |ddtdS )NTr  r  r  r  r&   r&   r'   np_nanpercentile  s        r  c                 C   s   t | |ddtdS )NFr  r  r  r  r  r&   r&   r'   np_quantile  s        r  c                 C   s   t | |ddtdS )NTr  r  r  r  r&   r&   r'   np_nanquantile  s        r  c                    s*   t | tjsd S t| j  fdd}|S )Nc                    s\   t | j| j}d}t | D ]$}| } |s|||< |d7 }q|dkrRt jS t||S Nr   r)   )rU   r   r   r{   rV   rW   r  r  )r+   r  r  r   r[   rW  r&   r'   nanmedian_impl  s    
z$np_nanmedian.<locals>.nanmedian_implrY  )r+   r  r&   rW  r'   np_nanmedian  s
    
r  c           	      C   sl   t | }t | jd d }|D ]D}| |  }d}t|d }|D ]}t|||| |}qF|||< q"|S )Nr   r   r)   )rU   
empty_likendindexrp   copyrA   _select_w_nan)	r+   	kth_arrayr   r   sr   r  r  kthr&   r&   r'   np_partition_impl_inner  s    

r  c                 C   s   t |tj}|jdkr"tdtt|| jd krDtdt	|}t
|D ],\}}|dk r||| jd  ||< qX|||< qXt|S )a  
    Returns a sorted, unique array of kth values which serve
    as indexers for partitioning the input array, a.

    If the absolute value of any of the provided values
    is greater than a.shape[-1] an exception is raised since
    we are partitioning along the last axis (per Numpy default
    behaviour).

    Values less than 0 are transformed to equivalent positive
    index values.
    r)   zkth must be scalar or 1-Dr   zkth out of boundsr   )rx  astyperU   Zint64rm   rn   r  r  rp   r  ndenumerateunique)r+   r  r  r   indexr   r&   r&   r'   
valid_kths  s    


r  c                 C   sn   t | tjtjtjfstdt | tjr<| jdkr<tdt|d|}t |tjtj	fsbtddd }|S )Nz(The first argument must be an array-liker   z3The first argument must be at least 1-D (found 0-D)r{   zPartition index must be integerc                 S   s2   t | }|jdkr| S t||}t||S d S r   )rx  r   r  r  r  )r+   r  Za_tmpr  r&   r&   r'   np_partition_impl  s
    

z'np_partition.<locals>.np_partition_impl)
rK   r   rZ  SequencerN   r  rm   r   r  rg  )r+   r  Zkthdtr  r&   r&   r'   np_partition  s    r  c                 C   sv   t d| t d|f}tj|tjd}t|d D ]@}tt d|| d |d }d||d |f< d|||d f< q0|S )Nr   r   r)   )r  rU   r   r  r0   r  )NMr  rp   r   r,   Zm_maxr&   r&   r'   	_tri_impl,  s    r  c                 C   s   t |d ddd}|S )Nr  r   c                 S   s   |d kr| }t | ||S r*   )r  )r  r  r  r&   r&   r'   tri_impl?  s    znp_tri.<locals>.tri_impl)Nr   )r   )r  r  r  r  r&   r&   r'   np_tri9  s    

r  c                 C   sD   | j dkstt| }tj||f| jd}t|D ]}| ||< q2|S )zq
    Takes a 1d array and tiles it to form a square matrix
    - i.e. a facsimile of np.tile(m, (len(m), 1))
    r)   r   )rm   r   rA   rU   r   r{   r0   )r   Zlen_mr   r,   r&   r&   r'   _make_squareG  s    
r  c                 C   s>   t j| jd | jd |dt j}t || t j| | jdS Nr   r  r  r   rU   trirp   r  uintwhere
zeros_liker{   r   r  maskr&   r&   r'   np_tril_impl_2dX  s    $r  c                 C   sB   t |d d	dd}d
dd}| jdkr,|S | jdkr:tS |S d S )Nr  r   c                 S   s   t | }t||S r*   )r  r  r   r  Zm_2dr&   r&   r'   np_tril_impl_1dd  s    z my_tril.<locals>.np_tril_impl_1dc                 S   sv   t j| jd | jd |dt j}t | jd d }t | }t j|| jd}|D ]}t 	|| | |||< qV|S r  
rU   r  rp   r  r  r  r  r  r{   r  r   r  r  r   zZzero_optselr&   r&   r'   np_tril_impl_multih  s    $
z#my_tril.<locals>.np_tril_impl_multir)   rl   )r   )r   )r   rm   r  )r   r  r  r  r&   r&   r'   my_tril^  s    


	

r  c                 C   s4   t | d t |d t|s&t |d ddd}|S )Nr  r  r   r   c                 S   s   t t j| ||dS )Nr  rU   nonzeror  r  r  r   r&   r&   r'   np_tril_indices_impl  s    z-np_tril_indices.<locals>.np_tril_indices_impl)r   Nr   r   )r  r  r   r  r&   r&   r'   np_tril_indicesy  s    



r  c                 C   s*   t |d | jdkrtdddd}|S )Nr  rl   input array must be 2-dr   c                 S   s   t j| jd || jd dS Nr   r)   )r  r   )rU   tril_indicesrp   rY   r  r&   r&   r'   np_tril_indices_from_impl  s    z7np_tril_indices_from.<locals>.np_tril_indices_from_impl)r   r   rm   r   )rY   r  r	  r&   r&   r'   np_tril_indices_from  s
    


r  c                 C   sB   t j| jd | jd |d dt j}t |t j| | jd| S Nr  r   r)   r  r   r  r  r&   r&   r'   np_triu_impl_2d  s    (r  c                 C   sB   t |d d	dd}d
dd}| jdkr,|S | jdkr:tS |S d S )Nr  r   c                 S   s   t | }t||S r*   )r  r  r  r&   r&   r'   np_triu_impl_1d  s    z my_triu.<locals>.np_triu_impl_1dc                 S   sz   t j| jd | jd |d dt j}t | jd d }t | }t j|| jd}|D ]}t 	||| | ||< qZ|S r  r  r  r&   r&   r'   np_triu_impl_multi  s    (
z#my_triu.<locals>.np_triu_impl_multir)   rl   )r   )r   )r   rm   r  )r   r  r  r  r&   r&   r'   my_triu  s    


	

r  c                 C   s4   t | d t |d t|s&t |d ddd}|S )Nr  r  r   r   c                 S   s   t dt j| ||d d S )Nr)   r  r  r  r&   r&   r'   np_triu_indices_impl  s    z-np_triu_indices.<locals>.np_triu_indices_impl)r   Nr  )r  r  r   r  r&   r&   r'   np_triu_indices  s    



r  c                 C   s*   t |d | jdkrtdddd}|S )Nr  rl   r  r   c                 S   s   t j| jd || jd dS r  )rU   triu_indicesrp   r  r&   r&   r'   np_triu_indices_from_impl  s    z7np_triu_indices_from.<locals>.np_triu_indices_from_impl)r   r
  )rY   r  r  r&   r&   r'   np_triu_indices_from  s
    


r  c                 C   s   d S r*   r&   rY   r&   r&   r'   _prepare_array  s    r  c                 C   s"   | d t jfkrdd S dd S d S )Nc                 S   s
   t dS )Nr&   rU   arrayr  r&   r&   r'   r     r   z%_prepare_array_impl.<locals>.<lambda>c                 S   s   t |  S r*   )rx  r   r  r&   r&   r'   r     r   r   noner  r&   r&   r'   _prepare_array_impl  s    r  c                 C   s   | }t |tjtjfrt|S t|dd }|d k	rB| dkrBtjS t|dd }|d kr^tdt |tj	rr|j
}qt|S qd S )N__len__r   r{   ztype has no dtype attr)rK   r   r  r  r   r   rU   r  r  r  r{   )Zinobjobjlr1  r&   r&   r'   _dtype_of_compound  s    r   c                 C   s   t | tjr"t | jtjr"tdtdkrt| }d }t|sFt|}d }t|sZt|}|d k	rzt	
||szd}t||d k	rt	
||sd}t|ddd}|S )Nr  r)      z3dtype of to_begin must be compatible with input aryz1dtype of to_end must be compatible with input aryc           
      S   s   t |}t | }t |}|j}t|dkrtjt|t| t| d |d}t|}t|t| d }	||d |< t||||	< |||	d < n:tjt|t| |d}t|}||d |< |||d < |S )Nr   r)   r   )r  r{   rA   rU   r   diff)
aryto_endto_beginstartr  end	out_dtyper   Z	start_idxZmid_idxr&   r&   r'   np_ediff1d_impl
  s$    z#np_ediff1d.<locals>.np_ediff1d_impl)NN)rK   r   rZ  r{   r  r    r   r   r   rU   Zcan_cast)r$  r%  r&  Zary_dtZto_begin_dtZ	to_end_dtr   r*  r&   r&   r'   
np_ediff1d  s&    
r+  c                 C   s   d S r*   r&   r  r&   r&   r'   _select_element(  s    r,  c                 C   s0   t | dd dk}|r dd }|S dd }|S d S )Nrm   r   c                 S   s$   t jd| jd}| |d d < |d S )N)r)   r   r   )rU   r  r{   )rY   r   r&   r&   r'   r   0  s    z"_select_element_impl.<locals>.implc                 S   s   | S r*   r&   r  r&   r&   r'   r   6  s    r   )rY   Zzerodr   r&   r&   r'   _select_element_impl,  s    r.  c                 C   s   d S r*   r&   )dxr   r&   r&   r'   _get_d;  s    r0  c                 C   s   t | rdd }ndd }|S )Nc                 S   s
   t |S r*   rU   r  r   r/  r&   r&   r'   r   B  s    zget_d_impl.<locals>.implc                 S   s   t t | S r*   )rU   r#  r  r2  r&   r&   r'   r   E  s    r<  )r   r/  r   r&   r&   r'   
get_d_impl?  s    
r3  r  c                 C   sH   t | tjtjfrtdnt | tjr:| jdkr:tdddd}|S )Nzy cannot be a scalarr   zy cannot be 0Dr  c                 S   sX   t | }t||}|dtdd f |dtd df  d }t || d}t|}|S )N.r)   r          @)rU   r  r0  rG   r   r,  )yr   r/  ZyarrdZy_averet	processedr&   r&   r'   r   U  s    

(znp_trapz.<locals>.impl)Nr  )rK   r   r  r  r   rZ  rm   )r5  r   r/  r   r&   r&   r'   np_trapzJ  s    

r9  c                 C   s   |j \}}|t| kst||ks&t|r|t|D ]F}|dkrPd|dd|f< q2t| |dd|d f |dd|f< q2n\t|d ddD ]J}||d krd|dd|f< qt| |dd|d f |dd|f< qdS )a*  
    Generate an N-column Vandermonde matrix from a supplied 1-dimensional
    array, x. Store results in an output matrix, out, which is assumed to
    be of the required dtype.

    Values are accumulated using np.multiply to match the floating point
    precision behaviour of numpy.vander.
    r   r)   Nr   )rp   rA   r   r0   rU   r"  )r   r  
increasingr   r   r  r,   r&   r&   r'   
_np_vander`  s    

,r;  c                 C   s&   | j dkrtd|dk r"tdd S )Nr)   z.x must be a one-dimensional array or sequence.r   z#Negative dimensions are not allowed)rm   rn   )r   r  r&   r&   r'   _check_vander_params|  s    
r<  c                    sz   |d t jfkr"t|t js"tdd fdd	}ddd}t| t jr`t| j}t	|t
 |S t| t jt jfrv|S d S )	Nz,Second argument N must be None or an integerFc                    sF   |d krt | }t| | tjt | t|f d}t| ||| |S r  )rA   r<  rU   r   r  r;  )r   r  r:  r   r   r&   r'   np_vander_impl  s    
z!np_vander.<locals>.np_vander_implc                 S   sR   |d krt | }t| }t|| tjt | t|f|jd}t|||| |S r  )rA   rU   r  r<  r   r  r{   r;  )r   r  r:  Zx_arrr   r&   r&   r'   np_vander_seq_impl  s    

z%np_vander.<locals>.np_vander_seq_impl)NF)NF)r   r  rK   rg  r   rZ  r   r{   rU   promote_typesr  rN   r  )r   r  r:  r=  r>  x_dtr&   r   r'   	np_vander  s    

rA  c                 C   sD   t |tjtjfstddd }t | tjtjfr<dd S |S d S )Nzshift must be an integerc                 S   sR   t | }t j|j|jd}|j}t|jD ] }|| |j }|| |j|< q,|S r  )rU   r  r   rp   r{   r   r0   r   )r+   shiftrY   r   Zarr_flatr,   r   r&   r&   r'   np_roll_impl  s    
znp_roll.<locals>.np_roll_implc                 S   s
   t | S r*   r1  )r+   rB  r&   r&   r'   r     r   znp_roll.<locals>.<lambda>)rK   r   rg  r  r   r  )r+   rB  rC  r&   r&   r'   np_roll  s    rD     c                 C   sr  d}|}| ||d  kr|S | |d k r,dS |dkr^d}||k rV| || krV|d7 }q8|d S ||d krr|d }|dk r~d}| || k r| ||d  k r|d }|t kr| ||t   kr|t  }n|d S nb| ||d  k r|S | ||d  k  r|d S |d }||t  d k r0| ||t   k r0|t  }||k rj||| d?  }| || krb|d }n|}q0|d S )Nr   r)   r      rk   rl   )LIKELY_IN_CACHE_SIZE)keyrY   lengthguessZiminZimaxr,   Zimidr&   r&   r'   binary_search_with_guess  sL    




rK  c                 C   s
  t | }t |}t |}t|dkr2tdt|t|krJtd|jdkrjt j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t|D ]@}|j	| }||k r|
|j	|< q||kr||j	|< q||j	|< qnd}|	|kr&t j|	d |d}nt jd|d}|jrt|	d D ]f}d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  ||< qHt|D ]J}|j	| }t |r|}d}|d|  |j	|< qt|||	|}|d	kr|
|j	|< n||	kr,||j	|< n||	d krJ|| |j	|< n|jr\|| }n\d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  }|j
|||   || j
 }|j|||   || j }|d|  |j	|< q|S 
Nr   array of sample points is empty#fp and xp are not of the same size.r)   Z
fill_valuer{   r   r  r  r   )rU   r  rA   rn   r   rr   rp   r   r0   r   r   r   r   rK  )r   xpfpr{   dzr/  dydreslenxlenxplvalrvalxp_valfp_valr,   x_valr  slopesinv_dxr   r   sloper&   r&   r'   np_interp_impl_complex_fp_inner	  st    










	r_  c                    s   t  fdd}|S )Nc              	      sR  t | }t |}t |}t|dkr2tdt|t|krJtd|jdkrjt j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t|D ]@}|j	| }||k r|
|j	|< q||kr||j	|< q||j	|< qnJd}|	|kr&t j|	d |d}nt jd|d}|jrt|	d D ]f}d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  ||< qHt|D ]}|j	| }t |r|}d}|d|  |j	|< qt|||	|}|d	kr|
|j	|< q||	kr0||j	|< q||	d krN|| |j	|< n|| |krl|| |j	|< n|jr~|| }n\d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  } r t| ||||||}||j	|< nJ|j
|||   || j
 }|j|||   || j }|d|  |j	|< q|S rL  )rU   r  rA   rn   r   rr   rp   r   r0   r   r   r   r   rK  'np_interp_impl_complex_fp_innermost_117)r   rP  rQ  r{   rR  r/  rS  rT  rU  rV  rW  rX  rY  rZ  r,   r[  r  r\  r]  r   r   r^  rt   np117_nan_handlingr&   r'   r   o	  s    	










      z5np_interp_impl_complex_fp_inner_factory.<locals>.impl)r
   rb  r   r&   ra  r'   'np_interp_impl_complex_fp_inner_factoryn	  s    drd  c           	      C   s   |j |||   || j  }t|rv|j |||d    ||d  j  }t|rv|| j ||d  j krv|| j }|j|||   || j }t|r|j|||d    ||d  j }t|r|| j||d  jkr|| j}|d|  S )Nr)   r  )r   rU   r   r   )	r   r^  r[  r/  rS  r,   r  r   r   r&   r&   r'   r`  	  s    	
$"

$"
r`  c                 C   sN  t j| t jd}t j|t jd}t j|t jd}t|dkrDtdt|t|kr\td|jdkr|t j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t	|D ]B}|j
| }||k r|
|j
|< q||kr||j
|< q||j
|< qАn2d}|	|krX|dd  |d d  |dd  |d d   }nt jd|d}t	|D ]}|j
| }t |r||j
|< qnt|||	|}|dkr|
|j
|< n||	kr||j
|< nv||	d kr|| |j
|< nX|jr || }n(||d  ||  ||d  ||   }||||   ||  |j
|< qn|S Nr   r   rM  rN  r)   rO  r   rU   r  r  rA   rn   r   rr   rp   r   r0   r   r   rK  r   rP  rQ  r{   rR  r/  rS  rT  rU  rV  rW  rX  rY  rZ  r,   r[  r  r\  r^  r&   r&   r'   np_interp_impl_inner	  sZ    




2




("rh  c                    s    fdd}|S )Nc                    s  t j| t jd}t j|t jd}t j|t jd}t|dkrDtdt|t|kr\td|jdkr|t j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t	|D ]B}|j
| }||k r|
|j
|< q||kr||j
|< q||j
|< qАnd}|	|krX|dd  |d d  |dd  |d d   }nt jd|d}t	|D ]p}|j
| }t |r||j
|< qnt|||	|}|dkr|
|j
|< qn||	kr||j
|< qn||	d kr|| |j
|< n|| |kr|| |j
|< n|jr$|| }n(||d  ||  ||d  ||   }||||   ||  |j
|<  rnt |j
| rn||||d    ||d   |j
|< t |j
| rn|| ||d  krn|| |j
|< qn|S re  rf  rg  ra  r&   r'   r   E
  sh    




2




(&(z*np_interp_impl_inner_factory.<locals>.implr&   rc  r&   ra  r'   np_interp_impl_inner_factoryD
  s    Wri  ra  c           
         s   t |dr|jdkrtdt |dr8|jdkr8tdd}t|}t|tjrZt|tdkrlt}t	}ntdkr~t
}t}nt}t}t|}t|tj t tjr|n| fdd	} fd
d}	t| tjrt| tjrt||	S |S )Nrm   r)   zxp must be 1Dzfp must be 1Dz:Cannot cast array data from complex dtype to float64 dtyper)      r!  c                    s   | || S r*   r&   r   rP  rQ  r{   ry   r&   r'   np_interp_impl
  s    z!np_interp.<locals>.np_interp_implc                    s   | || j d S r   r   rl  rm  r&   r'   np_interp_scalar_impl
  s    z(np_interp.<locals>.np_interp_scalar_impl)r  rm   r   r-  rU   r/  r0  r   np_interp_impl_inner_post_np117'np_interp_impl_complex_inner_post_np117np_interp_impl_inner_pre_np117&np_interp_impl_complex_inner_pre_np117rh  r_  result_typer  rK   r   r  r   )
r   rP  rQ  Zcomplex_dtype_msgZxp_dtr   Zimpl_complexZfp_dtrn  rp  r&   rm  r'   	np_interp
  s:    rv  c                 C   s`   | j dkst| j\}}tj|df| jd}t|D ]&}t| |d d f | ||df< q4|S )Nrl   r)   r   r   )rm   r   rp   rU   r   r{   r0   r   )r+   r   r  r   r,   r&   r&   r'   row_wise_average
  s    
$rw  c                 C   sb   |d kr|rd}nd}| j d | }t|d}| t| 8 } t| t| j}|td|9 }|S )Nr   r)   r  )rp   r  rw  rU   dotr   Tr  )XbiasddofZfactrZ   r&   r&   r'   np_cov_impl_inner
  s    
r}  c                   C   s   d S r*   r&   r&   r&   r&   r'   _prepare_cov_input_inner  s    r~  c                 C   s$   |d t jfkrdd }ndd }|S )Nc                 S   s   t t| }|s|j}|S r*   )rU   
atleast_2drx  ry  )r   r5  rowvarr{   m_arrr&   r&   r'   r~    s    z9_prepare_cov_input_impl.<locals>._prepare_cov_input_innerc                 S   s   t t| }t t|}|sH|jd dkr4|j}|jd dkrH|j}|j\}}|j\}}	||	krltdt j|| |f|d}
||
d |d d f< ||
| d d d f< |
S )Nr   r)   z$m and y have incompatible dimensionsr   )rU   r  rx  rp   ry  rn   r   )r   r5  r  r{   r  Zy_arrZm_rowsZm_colsZy_rowsZy_colsr   r&   r&   r'   r~  %  s    

r  )r   r5  r  r{   r~  r&   r&   r'   _prepare_cov_input_impl  s    
r  c                 C   s(   | j dkr$| jd dkr$d}t|d S )Nrl   r   r)   z2D array containing a single row is unsupported due to ambiguity in type inference. To use numpy.cov in this case simply pass the row as a 1D array, i.e. m[0].)rm   rp   r   )r   r   r&   r&   r'   _handle_m_dim_changeB  s    r  c                 C   s   | S r*   r&   r   r&   r&   r'   r   K  r   r   c                    s   t j}t| tjrt| j}nt| tjtjfr:t| }nt| tj	tj
frt  | D ],}t|drx fdd|D  qV | qVt dkrt jdd  D  }nt dkrt  }|S )NrV  c                    s   g | ]}  |qS r&   )add).0r[   Zcoltypesr&   r'   
<listcomp>X  s     z#determine_dtype.<locals>.<listcomp>r)   c                 S   s   g | ]}t |qS r&   )r   )r  r   r&   r&   r'   r  \  s     )rU   r  rK   r   rZ  r   r{   r  r  rB   rN   setr  r  rA   r?  rq   )
array_likeZarray_like_dtr   r&   r  r'   r-  N  s     

r-  c                 C   sn   t | tjr&| jdkrjtd|nDt | tjrjt | jd tjrjt | jd jd tjrjtd|d S )Nrl   z{0} has more than 2 dimensionsr   )rK   r   rZ  rm   r  r   r  rH  )r  namer&   r&   r'   check_dimensionsc  s    
r  c                 C   s.   t | std| t|  dkr*tdd S )Nz)Cannot convert non-finite ddof to integerr   zddof must be integral value)rU   r  rn   r  )r|  r&   r&   r'   _handle_ddofm  s    
r  c                 C   s   | S r*   r&   r   r&   r&   r'   r   u  r   c                 C   s   ||  || t | |||S r*   )r~  )r   r5  r  r{   r|  _DDOF_HANDLER_M_DIM_HANDLERr&   r&   r'   _prepare_cov_inputx  s    r  c                 C   s   |d t jfk}t| t jr(| jdkr(|S t| t jrptdd | j D rL|S t| j dkrpt| j d t jrp|S t| t jt j	fr|S t| t j
rt| jd t j
s|rdS dS )Nr)   c                 s   s    | ]}t |tjtjfV  qd S r*   )rK   r   r  r  r  r   r&   r&   r'   	<genexpr>  s   z)scalar_result_expected.<locals>.<genexpr>r   TF)r   r  rK   rZ  rm   Z	BaseTupler   rA   r  r  r  rH  )Zmandatory_inputZoptional_inputZopt_is_noner&   r&   r'   scalar_result_expected  s(    r  c                 C   s   t t | dkt | | S r   )rU   r  fabssignr   r&   r&   r'   
_clip_corr  s    r  c                 C   s    t | j}t | j}|d|  S )Nr  )r  r   r   )r   r   r   r&   r&   r'   _clip_complex  s    

r  c           	         s   t | d t |d |d tjfkr(t n2t|tjtjfr@t nt|tjrRt nt	dt
t| tjrntt| }t|}t||tjd
 fdd	}d fdd		}t| |r|S |S d S )Nr   r5  z)ddof must be a real numerical scalar typeTFc                    sb   t | ||| }tt|jdkrRtj|jd |jd ftjdS t|||S d S )Nr   rO  )	r  r  rU   r  r  rp   rr   r  r}  )r   r5  r  r{  r|  rz  r  r  r{   r&   r'   np_cov_impl  s    znp_cov.<locals>.np_cov_implc                    sT   t | ||| }tt|jdkr8tj}nt|||jd }t|S r   )	r  r  rU   r  r  rp   r  r}  r   )r   r5  r  r{  r|  rz  Zvariancer  r&   r'   np_cov_impl_single_variable  s    z+np_cov.<locals>.np_cov_impl_single_variable)NTFN)NTFN)r  r   r  _handle_ddof_noprK   rg  r  r   r  r   _handle_m_dim_noprZ  r  r-  rU   ru  r  r  )	r   r5  r  r{  r|  Zm_dty_dtr  r  r&   r  r'   np_cov  s,    


  
r  c                    sb   t | }t |}t||tj}|tjkr0t nt d fdd	}ddd}t| |rZ|S |S d S )NTc                    sp   t | ||}t |}t |j}t|jd D ]4}||d d f  |  < |d d |f  |  < q2 |S r   )rU   covZdiagsqrtr   r0   rp   )r   r5  r  rZ   r6  stddevr,   Zclip_fnr&   r'   np_corrcoef_impl  s    
z%np_corrcoef.<locals>.np_corrcoef_implc                 S   s   t | ||}|| S r*   )rU   r  )r   r5  r  rZ   r&   r&   r'    np_corrcoef_impl_single_variable  s    z5np_corrcoef.<locals>.np_corrcoef_impl_single_variable)NT)NT)r-  rU   ru  r  Zcomplex_r  r  r  )r   r5  r  r@  r  r{   r  r  r&   r  r'   np_corrcoef  s    


r  c                    s   t dkot| tjtjf}t| rV|sVt dk r<tdd  ntdd   fdd}n(t dk rhddnd	d
fdd}|S )Nr   c                 S   s   t |  S r*   )rU   r  r   r&   r&   r'   r     r   znp_argwhere.<locals>.<lambda>c                 S   s   dS )NTr&   r   r&   r&   r'   r     r   c                    sB   t | }|jdkr, |r,t jdtjdS t t t |S )Nr&   r   r)   r   )	rU   r  rp   zerosr   r2   r   Zvstackr   ry  )checkr&   r'   r     s    
znp_argwhere.<locals>.implr  )r)   r)   )r   r   )r)   r   c                    s4   | d k	r t | r tjtjdS tj tjdS d S r  )boolrU   r  r   r2   rE  )falseishtrueishr&   r'   r      s    )r   rK   r   r  r  r   r
   )r+   Z
use_scalarr   r&   )r  r  r  r'   np_argwhere  s    r  c                 C   s   t | rdd }ndd }|S )Nc                 S   s   t | }t t |d S r   )rU   r  r   r   ry  r&   r&   r'   r   -  s    
znp_flatnonzero.<locals>.implc                 S   s:   | d k	rt | rdg}ndd tdD }tj|tjdS )Nr   c                 S   s   g | ]}|qS r&   r&   r  r&   r&   r'   r  5  s     z0np_flatnonzero.<locals>.impl.<locals>.<listcomp>r   )r  r0   rU   r  r   r2   )r+   r;   r&   r&   r'   r   1  s    r)  )r+   r   r&   r&   r'   np_flatnonzero)  s    
r  c                 C   s   | j dkrD| jd }| jd }d| }|r4|| }q|t|| }nJt| j}tt|dksltddt|d d 	  }|
 }||fS )Nrl   r   r)   z/All dimensions of input must be of equal lengthr   )rm   rp   r  rU   r  r   r#  rn   rm  r   prod)r+   wrapr   r  stepr(  rp   r&   r&   r'   _fill_diagonal_params;  s    



r  c                 C   s.   t | |\}}td||D ]}|| j|< qd S r   )r  r0   r   )r+   r   r  r(  r  r,   r&   r&   r'   _fill_diagonal_scalarQ  s    r  c                 C   sN   t | |\}}d}t|}td||D ]"}|| | j|< |d7 }|| }q&d S r  )r  rA   r0   r   )r+   r   r  r(  r  ZctrZv_lenr,   r&   r&   r'   _fill_diagonalY  s    r  c                 C   sR   t | j}|j}|j}t t | sFt ||k sFt ||krNtdd S Nz'Unable to safely conform val to a.dtype)rU   iinfor{   r  r  r  r  rn   )r+   r   r  v_minv_maxr&   r&   r'   _check_val_inte  s
    .r  c                 C   sN   t | j}|j}|j}|t | }t ||k sBt ||krJtdd S r  )rU   finfor{   r  r  r  r  rn   )r+   r   r  r  r  Zfinite_valsr&   r&   r'   _check_val_floatp  s    r  c                 C   s   | S r*   r&   r   r5  r&   r&   r'   r   }  r   c                 C   s   d S r*   r&   r   r&   r&   r'   rx    s    rx  c                    sX   t | tjrdd S t | tjtjfr.dd S t | tjtjfrTt|   fddS d S )Nc                 S   s   | S r*   r&   r   r&   r&   r'   r     r   z_asarray_impl.<locals>.<lambda>c                 S   s
   t | S r*   r  r   r&   r&   r'   r     r   c                    s   t j| g dS r  r  r   r   r&   r'   r     r   )rK   r   rZ  r  rN   r  r  r   r   r&   r  r'   _asarray_impl  s    r  c                    s   | j dkrt| jtjrt nt| jtjr2t nt d fdd	}d	 fdd	}t|tjtjtj	frl|S t|tj
tjtjfr|S nd| j  }t|d S )
Nr)   Fc                    s&   t | } | | t| || d S r*   )rx  r  r  r+   r   r  Ztmpvalcheckerr&   r'   scalar_impl  s    
z%np_fill_diagonal.<locals>.scalar_implc                    s&   t | } | | t| || d S r*   )rx  r  r  r  r  r&   r'   non_scalar_impl  s    
z)np_fill_diagonal.<locals>.non_scalar_implz4The first argument must be at least 2-D (found %s-D))F)F)rm   rK   r{   r   rg  r  r   r  
_check_nopr  rN   r  rZ  r   )r+   r   r  r  r  r   r&   r  r'   np_fill_diagonal  s    

r  c                 C   s   d| j f S )Nzllvm.rint.f%d)Zbitwidth)tpr&   r&   r'   _np_round_intrinsic  s    r  c                 C   s@   |  |}|j}tj||g}t||t|}|||fS r*   )	r.   modulellvmliteZirFunctionTyper   Zget_or_insert_functionr  call)rf   r6   r  r   Zlltyr  Zfntyr;  r&   r&   r'   _np_round_float  s
    
r  c                 C   s(   t | ||jd |d }t| ||j|S r   )r  r7   r   rc   rf   r6   rg   r7   rh   r&   r&   r'   scalar_round_unary_float  s    r  c                 C   s   |d }t | ||j|S r   )r   rc   r  r&   r&   r'   scalar_round_unary_integer  s    r  c                 C   s`   |j d j}| ||j d |d }t| |||j|_t| |||j|_| }t| ||j|S r   )	r7   Zunderlying_floatZmake_complexr  r   r   	_getvaluer   rc   )rf   r6   rg   r7   Zflttyr  rh   r&   r&   r'   scalar_round_unary_complex  s    r  c                 C   s(   dd }|  ||||}t| ||j|S )Nc                 S   s   t | st | r| S |dkrr|dkr:d|d  }d}nd| }d}| | | }t |r`| S t|| | S d|  }| | }t|| S d S )Nr      g      $@gMDr  )r  r  r   rU   round)r   ndigitsZpow1Zpow2r5  r&   r&   r'   round_ndigits  s    

z0scalar_round_binary_float.<locals>.round_ndigitsr   rf   r6   rg   r7   r  rh   r&   r&   r'   scalar_round_binary_float  s    r  c                 C   s(   dd }|  ||||}t| ||j|S )Nc                 S   s   t t| j|t| j|S r*   )complexrU   r  r   r   )r  r  r&   r&   r'   r    s    z2scalar_round_binary_complex.<locals>.round_ndigitsr   r  r&   r&   r'   scalar_round_binary_complex  s    r  c                 C   s(   dd }|  ||||}t| ||j|S )Nc                 S   s<   | j |j krtdt| D ]\}}t||||< q|S )Nzinvalid output shape)rp   rn   rU   r  r  )rY   Zdecimalsr   r  r   r&   r&   r'   array_round_impl  s
    z%array_round.<locals>.array_round_implr3   r   rc   )rf   r6   rg   r7   r  rh   r&   r&   r'   array_round  s    r  c                 C   s(   dd }|  ||||}t| ||j|S )Nc                 S   s0   t | }t | D ]\}}t |||< q|S r*   )rU   r  r  sinc)rY   r   r  r   r&   r&   r'   array_sinc_impl  s    
z#array_sinc.<locals>.array_sinc_implr  )rf   r6   rg   r7   r  rh   r&   r&   r'   
array_sinc  s    r  c                 C   s8   |j }dd }| j||||t|dd}t| ||j |S )Nc                 S   s$   | dkrd} | t j9 } t | |  S )Nr  g#B;)rU   pisinr  r&   r&   r'   scalar_sinc_impl   s    
z%scalar_sinc.<locals>.scalar_sinc_implr_   r`   r   )rf   r6   rg   r7   r   r  rh   r&   r&   r'   scalar_sinc  s    r  c                    sn   | dtj   fdd}t|dkrN|tjf }t|j f|jtj	f  }| 
||||}t| ||j |S )N   c                    s,   |rt | j| j  S t | j| jS d S r*   )rU   Zarctan2r   r   )r   degZdeg_multr&   r'   scalar_angle_impl/  s    z-scalar_angle_kwarg.<locals>.scalar_angle_implr)   )rc   rU   r  rA   r   	false_bitr   r7   r   booleanr3   r   )rf   r6   rg   r7   r  rh   r&   r  r'   scalar_angle_kwarg*  s     r  c                    sf   |j j  fdd}t|dkrF|tjf }t|j f|jtjf  }| 	||||}t
| ||j |S )Nc                    s6   t j|  d}t | D ]\}}t ||||< q|S r  )rU   r  r  angle)rY   r  r   r  r   Z	ret_dtyper&   r'   array_angle_implB  s    z+array_angle_kwarg.<locals>.array_angle_implr)   )rc   r{   rA   r   r  r   r7   r   r  r3   r   )rf   r6   rg   r7   r  rh   r&   r  r'   array_angle_kwarg=  s    r  zarray.nonzeroc                    sH  |j d }|j}|j|j}t| |d }t |j}t |j}	|j	}
|j
}tjd}tjd}t |}t ||jj}t |
||	||}t ||} |j|} |     ||| W 5 Q R X W 5 Q R X  |f fddt|D } fdd|D }dd |D }t |}t ||j}t |
||	||}t ||} |j|} |p |s|f} |}t|D ]6}t || dd|g}t || | qȈ  ||| W 5 Q R X W 5 Q R X  |j|}t |j|S )	Nr   r)   c                    s   g | ]}t   qS r&   )r   r  )r  r,   r6   rf   	out_shapeoutarytyr&   r'   r  n  s   z!array_nonzero.<locals>.<listcomp>c                    s   g | ]}t  |qS r&   )r   r  r   )r6   rf   r  r&   r'   r  p  s     c                 S   s   g | ]
}|j qS r&   )r;   r  r&   r&   r'   r  q  s     r&   C)r7   rc   r{   rV  r   r   Zunpack_tuplerp   stridesr;   layoutr1   r   r2   Zalloca_once_valueZ	loop_nestrs   Zget_item_pointer2r   Zis_trueZif_thenstorer  loadr0   r   Z
make_tupler   )rf   r6   rg   r7   Zarytyr   Znoutsr$  rp   r  r;   r  r]   rj  rV  indicesptrr   ZnzZoutsZoutarysZ	out_datasr  curr,   r9   r&   r  r'   array_nonzeroP  sd    
 . 
  (r  c                    s   t dd |jD }tt|jd jt|jd j |t dksP|t dkr^ fdd}n fd	d}| ||||}t| ||j|S )
z'
    np.where(array, array, array)
    c                 s   s   | ]}|j V  qd S r*   )r  )r  r+   r&   r&   r'   r    s     zarray_where.<locals>.<genexpr>r)   rl   r  Fc           
         sx   | j }|j |ks|j |kr"tdtj| d}| j}|j}|j}|j}t| jD ] }	||	 rf||	 n||	 ||	< qR|S Nz%all inputs should have the same shaper   )rp   rn   rU   r  r   r0   r   )
condr   r5  rp   rh   cfZxfZyfrfr,   nptyr&   r'   
where_impl  s    zarray_where.<locals>.where_implc                    sb   | j }|j |ks|j |kr"tdtj| j  d}t| D ] \}}|rP|| n|| ||< q<|S r  )rp   rn   rU   r   r  )r  r   r5  rp   rh   r   rZ   r  r&   r'   r    s    )	r  r7   rU   r?  r   r{   r3   r   rc   )rf   r6   rg   r7   Zlayoutsr  rh   r&   r  r'   array_where  s    	r  c                 C   s(   t | D ]\}}|r|n|||< q
|S r*   rU   r  r  r   r5  rh   r   rZ   r&   r&   r'   _where_x_y_scalar  s    r  c                 C   s,   t | D ]\}}|r|n|| ||< q
|S r*   r  r  r&   r&   r'   _where_x_scalar  s    r  c                 C   s,   t | D ]\}}|r|| n|||< q
|S r*   r  r  r&   r&   r'   _where_y_scalar  s    r  c                    sp   |j \}}}t|}t|}	t||	|jdkrB fdd}
n fdd}
| ||
||}t| ||j|S )Nr  c                    s$   t t j| jd} | |||S r  )rU   Zasfortranarrayr   rp   r  r   r5  rh   r   r   r&   r'   r    s    z _where_inner.<locals>.where_implc                    s   t j| jd} | |||S r  )rU   r   rp   r  r	  r&   r'   r    s    )r7   r-  rU   r?  r  r3   r   rc   )rf   r6   rg   r7   r   r  r   r5  r@  r  r  rh   r&   r	  r'   _where_inner  s    
r
  )r   c           
      C   s   |j \}}}t|tjrt|tjrNt|tjr6t}qt|tjtjfrt}n:t|tjtjfrt|tjrrt}nt|tjtjfrt	}|| |||S dd }| 
||||}	t| ||j|	S )Nc                 S   s"   | r|n|}t |}||d< |S )zH
        np.where(scalar, scalar, scalar): return a 0-dim array
        r&   )rU   r  )r  r   r5  ZscalrY   r&   r&   r'   scalar_where_impl  s    
z$any_where.<locals>.scalar_where_impl)r7   rK   r   rZ  r  r  r  array_array_scalar_wherearray_scalar_array_wherearray_scalar_scalar_wherer3   r   rc   )
rf   r6   rg   r7   r  r   r5  r   r  rh   r&   r&   r'   	any_where  s     r  c                 C   s   dd }|S )Nc                 S   s   | j S r*   )r   rE  r&   r&   r'   np_real_impl  s    znp_real.<locals>.np_real_implr&   )r+   r  r&   r&   r'   np_real  s    r  c                 C   s   dd }|S )Nc                 S   s   | j S r*   )r   rE  r&   r&   r'   np_imag_impl	  s    znp_imag.<locals>.np_imag_implr&   )r+   r  r&   r&   r'   np_imag  s    r  c                 C   s   t | tjsd S dd }|S )Nc                 S   s"   t | D ]}||kr
 dS q
dS r  )rU   rV   )rY   rH  r   r&   r&   r'   np_contains_impl  s    z%np_contains.<locals>.np_contains_implra  )rY   rH  r  r&   r&   r'   np_contains  s    r  c                 C   s2   t | stdt|r$ddd}n
ddd}|S )Nz3The argument to np.count_nonzero must be array-likec                 S   s   t | }t |dkS r   )rU   r   r   rY   rP   Zarr2r&   r&   r'   r   &  s    
znp_count_nonzero.<locals>.implc                 S   s   |  tj}tj||dS )N)rP   )r  rU   bool_r   r  r&   r&   r'   r   *  s    )N)N)r   r   r   )rY   rP   r   r&   r&   r'   np_count_nonzero   s    
r  c                 C   s   | S r*   r&   r   r&   r&   r'   r   1  r   c                 C   s
   t | S r*   r1  r   r&   r&   r'   r   2  r   c                    s   t | tjtjfstdt |tjtjtjfrlt |tjrBt nt |jtjsXtdt	  fdd}|S t |tjstddd }|S d S )Nz)arr must be either an Array or a Sequencezobj should be of Integer dtypec                    s>   t t | } | j}t j|t jd} |}d||< | | S )Nr   F)rU   r   r  r   onesr  )rY   r  r  Zkeephandlerr&   r'   np_delete_implE  s    z!np_delete.<locals>.np_delete_implc                 S   sf   t t | } | j}|}|| k s,||kr4td|dk rD||7 }t | d | | |d d  fS )Nz"obj must be less than the len(arr)r   r)   )rU   r   r  r   
IndexErrorconcatenate)rY   r  r  posr&   r&   r'   np_delete_scalar_implS  s    z(np_delete.<locals>.np_delete_scalar_impl)
rK   r   rZ  r  r   Z	SliceTypenp_delete_handler_isslicer{   rg  np_delete_handler_isarray)rY   r  r  r   r&   r  r'   	np_delete5  s    r#  r)   c                 C   s(   t | tjr| jdkrd S ddd}|S )Nr   r)   c                 S   s0  |dkr|   S |dk r td| jd }| jd d t|| df }t|| j}|jdkrd|S | d|f}|d|jd f}t|| j}t	|jd D ]}t	|d D ]$}	|||	d f |||	f  ||	< qt	d|D ]2}
t	||
 d D ]}	||	d  ||	  ||	< qq|d ||  ||< q|S )Nr   z"diff(): order must be non-negativer   r)   )
r  rn   rp   r  rU   r   r{   r   r   r0   )r+   r  r   r  r   a2Zout2Zworkmajorr,   Zniterr&   r&   r'   	diff_impli  s(    

"znp_diff_impl.<locals>.diff_impl)r)   )rK   r   rZ  rm   )r+   r  r&  r&   r&   r'   np_diff_impld  s    
r'  c                 C   sN   t | rt |stdtjtjf}t| |rBt||rBdd }ndd }|S )Nz3Both arguments to "array_equals" must be array-likec                 S   s   | |kS r*   r&   rB  r&   r&   r'   r     s    znp_array_equal.<locals>.implc                 S   s2   t | } t |}| j|jkr.t | |kS dS r%  )rU   r  rp   r   rB  r&   r&   r'   r     s
    

)r   r   r   r  r  rK   )r+   r
  acceptedr   r&   r&   r'   np_array_equal  s    
r)  c                 C   s$   t | st |stddd }|S )Nz.intersect1d: first two args must be array-likec                 S   sj   t | } t |}t | } t |}t | |f}|  |dd  |d d k}|d d | }|S )Nr)   r   )rU   r  r  r  sort)ar1ar2Zauxr  Zint1dr&   r&   r'   np_intersects1d_impl  s    



z0jit_np_intersect1d.<locals>.np_intersects1d_implr   r   )r+  r,  r-  r&   r&   r'   jit_np_intersect1d  s    r/  c                 C   sD   t |tjr&|jdkr@td| nt |tjs@td| d S )Nr)   z${0}(): input should have dimension 1z+{0}(): input should be an array or sequence)rK   r   rZ  rm   r  r   r  )	func_nameseqr&   r&   r'   validate_1d_array_like  s    
r2  c                    s   t d|  t| jtjsd S t|d |d tjfkr^t d| tjt	dd t	dd  ntj
t	dd t	dd  d fd
d	}|S )Nbincount	minlengthc                 S   s   t | t |krtdd S )Nz7bincount(): weights and list don't have the same length)rA   rn   r+   r  r4  r&   r&   r'   validate_inputs  s    z$np_bincount.<locals>.validate_inputsc                 S   s   | |  || 7  < d S r*   r&   r   r   r   r  r&   r&   r'   
count_item  s    znp_bincount.<locals>.count_itemc                 S   s   d S r*   r&   r5  r&   r&   r'   r6    s    c                 S   s   | |  d7  < d S r   r&   r7  r&   r&   r'   r8    s    r   c                    s   | || |dk rt dt| }|dkr4| d nd}td|D ]&}| | dk rZt dt|| | }qBt|d |}t|}t|D ]} ||| | | q|S )Nr   z 'minlength' must not be negativer   r)   z/bincount(): first argument must be non-negative)rn   rA   r0   r  rU   r  )r+   r  r4  r  r  r,   Z
out_lengthr   r8  r)  r6  r&   r'   bincount_impl  s    z"np_bincount.<locals>.bincount_impl)Nr   )r2  rK   r{   r   rg  r   r  rU   r  r
   r2   )r+   r  r4  r:  r&   r9  r'   np_bincount  s$    





r;  c                    s    fdd}|S )Nc                    s   t |r:t|ddD ]}t | |d  s|  S qdS ||k rH|}nd}||k r\|d n|}||kr|| d? } | | |r|d }q`|}q`|S )a  Perform inner loop of searchsorted (i.e. a binary search).

        This is loosely based on the NumPy implementation in [1]_.

        Parameters
        ----------
        a: 1-D array_like
            The input array.
        v: array_like
            The current value to insert into `a`.
        v_last: array_like
            The previous value inserted into `a`.
        lo: int
            The initial/previous "low" value of the binary search.
        hi: int
            The initial/previous "high" value of the binary search.
        n: int
            The length of `a`.


        .. [1] https://github.com/numpy/numpy/blob/809e8d26b03f549fd0b812a17b8a166bcd966889/numpy/core/src/npysort/binsearch.cpp#L173
        r   r   r)   )rU   r   r0   )r+   r[   v_lastlohir  r,   r  funcr&   r'   searchsorted_inner  s    


z)_searchsorted.<locals>.searchsorted_innerr&   )r@  rA  r&   r?  r'   _searchsorted  s    .rB  c                 C   s   | |kS r*   r&   r  r&   r&   r'   r   /  r   leftc                    s   t |d|}|dkrt n|dkr(t ntd| t|tjrRd	 fdd	}n*t|tjrnd
 fdd	}nd fdd	}|S )NrM   rC  rightz Invalid value given for 'side': c           
         sn   t | }d}|}t|jtj}|jd }t||fD ]0\}}	 | | ||||}| }|	| q8|S r   )	rA   rU   r   rp   r2   r   rV   rW   itemset)
r+   r[   sider  r=  r>  r   r<  r   outviewZ	loop_implr&   r'   searchsorted_impl@  s    
z'searchsorted.<locals>.searchsorted_implc           	         sf   t | }d}|}tt |tj}|d }tt |D ]*} | || ||||}|||< || }q6|S r   )rA   rU   r   r2   r0   )	r+   r[   rF  r  r=  r>  r   r<  r,   rH  r&   r'   rI  N  s    
c                    s   t | } | ||d||S r   )rA   )r+   r[   rF  r  rH  r&   r'   rI  \  s    )rC  )rC  )rC  )r   _searchsorted_left_searchsorted_rightr   rK   r   rZ  r  )r+   r[   rF  Zside_valrI  r&   rH  r'   searchsorted4  s    rL  c                    sl   t dd  t dd t dd t| tjrFd fdd		}|S t| tjrhd fd
d		}|S d S )Nc                 S   sl   t | }d}d}|dkrh| d }td|D ]<}| | }|oB||k }|oP||k  }|sb|sbtd|}q*|S )NTr)   r   z3bins must be monotonically increasing or decreasing)rA   r0   rn   )binsr  is_increasingZis_decreasingprevr,   r  r&   r&   r'   are_bins_increasinge  s    z(np_digitize.<locals>.are_bins_increasingc                 S   s   t |}d}|}|rt| rNt|ddD ]}t||d  s*|  S q*dS ||kr|| d? }|| | k rx|d }qN|}qNn>t| r|S ||kr|| d? }|| | kr|d }q|}q|S )Nr   r   r)   rA   rU   r   r0   r   rM  rD  r  r=  r>  r,   r  r&   r&   r'   digitize_scalary  s,    




z$np_digitize.<locals>.digitize_scalarc                 S   s   t |}d}|}|rzt| rHtd|D ]}t|| s(|  S q(|S ||kr|| d? }|| | k rn|}qH|d }qHn>t| rdS ||kr|| d? }|| | kr|}q|d }q|S r  rQ  rR  r&   r&   r'   digitize_scalar_decreasing  s,    



z/np_digitize.<locals>.digitize_scalar_decreasingFc                    sd    |}t | jt j}t | |fD ]8\}}|rD| ||}n| ||}|| q&|S r*   )rU   r   rp   r2   rV   rW   rE  )r   rM  rD  rN  r   r   rG  r  rP  rS  rT  r&   r'   digitize_impl  s    z"np_digitize.<locals>.digitize_implc                    s^    |}t t| t j}tt| D ]2}|rD| | ||||< q&| | ||||< q&|S r*   )rU   r   rA   r2   r0   )r   rM  rD  rN  r   r,   rU  r&   r'   rV    s    )F)F)r
   rK   r   rZ  r  )r   rM  rD  rV  r&   rU  r'   np_digitizec  s    

%
$
rW  r  c                    sP   t |ttjfrB|d tjfkr6td d fdd	}qLddd}n
d	dd}|S )
Nr  r  c                    sL    }  }t | D ]$}| }||kr,|}||k r|}qt | |||fS r*   )rU   rV   rW   	histogram)r+   rM  r0   bin_minbin_maxr   r[   r  r&   r'   histogram_impl  s    z$np_histogram.<locals>.histogram_implc                 S   s   |dkrt d|\}}||ks(t dt|tj}||kr|||  }t| D ]h}| }t|| | }	d|	  kr|k rn n|t|	  d7  < qT||krT||d   d7  < qTt	|||d }
||
fS )Nr   z0histogram(): `bins` should be a positive integerz;histogram(): max must be larger than min in range parameterr)   )
rn   rU   r  r2   rV   rW   r  r  r  Zlinspace)r+   rM  r0   rY  rZ  histZ	bin_ratior   r[   r
  Z
bins_arrayr&   r&   r'   r\    s"    c                 S   s   t |d }t|D ] }|| ||d  kstdq|d }|| }t|tj}|dkrt| D ]t}| }	||	  kr|ksqf qfd}
|d }|
|k r|
| d d? }|	|| k r|d }q|}
q||
  d7  < qf||fS )Nr)   z-histogram(): bins must increase monotonicallyr   )rA   _rangern   rU   r  r2   rV   rW   )r+   rM  r0   Znbinsr,   rY  rZ  r]  r   r[   r=  r>  r  r&   r&   r'   r\    s*    

)r  N)r  N)r  N)rK   r  r   rg  r  float)r+   rM  r0   r\  r&   r[  r'   np_histogram  s    
!r`  )Zibetar   machepepsnegepepsnegiexpminexpZxminmaxexpZxmaxZirndZngrdepsilontinyZhuge	precision
resolutionMachAr)rb  rd  re  ra  r  rg  r  rf  rc  ZnexpZnmantrj  rk  ri  bitsr  )r  r  rm  r  c               	      s\   t dk d tjdd"d} tjd| tdd tjW 5 Q R X t fdd	}d S )
N)r)   r  T)recordz(`np.MachAr` is deprecated \(NumPy 1.22\)alwaysz.*numba.*arraymath)messagecategoryr  c                     sX    t fddtD  rHrHd } t| jjd t| j| j  fdd}|S )Nc                    s   g | ]}t  |qS r&   r-  r  r  r&   r'   r  `  s     z7_gen_np_machar.<locals>.MachAr_impl.<locals>.<listcomp>r   c                      s   t   S r*   )rl  r&   )_mach_ar_datar&   r'   r   i  s    z1_gen_np_machar.<locals>.MachAr_impl.<locals>.impl)	r   _mach_ar_supportedwarningswarn_explicitrp  r7   r!   filenamelineno)Zwmsgr   Z	np122plusZ	np_MachArw)rs  r  r'   MachAr_impl]  s    z#_gen_np_machar.<locals>.MachAr_impl)r   ru  catch_warningsfilterwarningsDeprecationWarningrU   rl  r   )r   r{  r&   ry  r'   _gen_np_macharS  s    r  c                    s   t  fdd}d S )Nc                    s`   t | d| }t|}z|W n tk
r6   Y d S X tfddD   fdd}|S )Nr{   c                    s   g | ]}t  |qS r&   r-  r  rr  r&   r'   r  {  s     z6generate_xinfo.<locals>.xinfo_impl.<locals>.<listcomp>c                    s     S r*   r&   )arg)	containerr;   r&   r'   r   }  s    z0generate_xinfo.<locals>.xinfo_impl.<locals>.impl)r   r   rn   r   )r  ZnbtyZnp_dtyper   attrr  np_func)r;   r  r'   
xinfo_implr  s    z"generate_xinfo.<locals>.xinfo_impl)r   )r  r  r  r  r&   r  r'   generate_xinfoq  s    r  c                    sl   t dd }ts|S tjtjB }| |ko.||k}|s8|S t| }t|}t|| t  fdd}|S d S )Nc                 S   s.   d}t t| D ]}|| | ||   }q|S r   r0   rA   )r+   r
  accr,   r&   r&   r'   
_innerprod  s    z#_get_inner_prod.<locals>._innerprodc                    s   t |  | S r*   )rU   rx  r  rB  r1  r&   r'   	_dot_wrap  s    z"_get_inner_prod.<locals>._dot_wrap)r
   
_HAVE_BLASr   Zreal_domaincomplex_domainr   rU   r?  )ZdtaZdtbr  ZfltyZfloatsa_dtb_dtr  r&   r  r'   _get_inner_prod  s    
r  c                 C   s&   t | tjr"| jdks"td| d S )Nr)   z!%s() only supported on 1D arrays )rK   r   rZ  rm   r   )r+   r0  r&   r&   r'   
_assert_1d  s    
r  c                 C   s   d S r*   r&   )ap1ap2mode	directionr&   r&   r'   _np_correlate_core  s    r  c                   @   s   e Zd ZdZdZdZdZdS )_corr_conv_Modez
    Enumerated modes for correlate/convolve as per:
    https://github.com/numpy/numpy/blob/ac6b1a902b99e340cf7eeeeb7392c91e38db9dd8/numpy/core/numeric.py#L862-L870    # noqa: E501
    r   r)   rl   N)__name__
__module____qualname____doc__VALIDZSAMEFULLr&   r&   r&   r'   r    s   r  c                    sF   t | j}t |j}t||t| j|jt  fdd}|S )Nc                    s  | j ks| jkstdt| }t|}|}|}| j krT|| d }d}d}	n0| jkr||d }	|d }|| d }ntdt|}
|| }|dkrd}d}n|dkr|d }d}ntdt|D ]4}| d |d  ||d  d  |
|< || }qt|| d D ](}| |||  ||
|< || }qt|	ddD ].}| | d  |d | |
|< || }qL|
S )NzInvalid moder)   r   r   zInvalid direction)r  r  rn   rA   rU   r  r0   )r  r  r  r  Zn1Zn2rI  r  Zn_leftZn_rightr7  r   incr,   Moder1  Z	innerprodr&   r'   r     sD    	

(
 z%_np_correlate_core_impl.<locals>.impl)r   r{   rU   r?  r  r  )r  r  r  r  r  r  r   r&   r  r'   _np_correlate_core_impl  s    

4r  c                    s   t | d t |d tdd }tdd }t | jtjkr\|jtjkrR||qz||n|jtjkrr||n||tdk fdd}|S )	Nznp.correlatec                 S   s
   t | S r*   )rU   r   r   r&   r&   r'   op_conj  s    z_np_correlate.<locals>.op_conjc                 S   s   | S r*   r&   r   r&   r&   r'   op_nop  s    z_np_correlate.<locals>.op_noprj  c                    st   t | }t |}dkr8|dkr(td|dkr8td||k rXt||  jdS t| | jdS d S )NTr   'a' cannot be empty'v' cannot be emptyr   r)   )rA   rn   r  r  r+   r[   Zlalvr  Z_NP_PREDZa_opZb_opr&   r'   r     s    z_np_correlate.<locals>.impl)r  r
   r  r{   r   r  r   )r+   r[   r  r  r   r&   r  r'   _np_correlate  s*    



r  c                    s(   t | d t |d t  fdd}|S )Nznp.convolvec                    sp   t | }t |}|dkr td|dkr0td||k rRt|| d d d  jdS t| |d d d  jdS d S )Nr   r  r  r   r)   )rA   rn   r  r  r  r  r&   r'   r   /  s    znp_convolve.<locals>.impl)r  r  )r+   r[   r   r&   r  r'   np_convolve(  s
    

r  c                    s.  t | sd S d }t| tjrHt|s0| j|jkr<d
dd}n
ddd}nt| tjtjfrzt|rnddd}n
ddd}nt| tjtj	frt|r| n|}t
|dfdd	}nvt| tjjrt| jtjtj	fstdt|r| jn|dfdd	}n(t| tjr*t| j d fd	d	}|S )Nc                 S   s   | S r*   r&   r+   r{   r&   r&   r'   r   K  s    znp_asarray.<locals>.implc                 S   s
   |  |S r*   )r  r  r&   r&   r'   r   N  s    c                 S   s
   t | S r*   r  r  r&   r&   r'   r   U  s    c                 S   s   t | |S r*   r  r  r&   r&   r'   r   X  s    c                    s   t |  S r*   r  r  r  r&   r'   r   ^  s    z?asarray support for List is limited to Boolean and Number typesc                    s4   t | }tj| d}t| D ]\}}|||< q|S r  )rA   rU   r   r   )r+   r{   r  r7  r,   r[   )target_dtyper&   r'   r   h  s
    
c                    s      S r*   )r  r  r  r&   r'   r   q  s    )N)N)N)N)N)N)N)r   rK   r   rZ  r   r{   r  rN   r  r  r   Z
containersZListTyper   ZStringLiteralrU   r  rM   )r+   r{   r   Zdt_convr&   )rY   r  r   r'   
np_asarray@  s4    r  c                    sD   t |tjrt|}t|tjs*tj n| tjf fdd	}|S )Nc                    s   t |  S r*   r1  r  r/  r&   r'   r     s    znp_asfarray.<locals>.impl)rK   r   Typer   rU   r/  Zinexactr  )r+   r{   r   r&   r  r'   np_asfarrayw  s    r  c                 C   s   dd }|S )Nc                    s   t |  t |  jdkr*tdt  jd  rVj jkrVd}t|t jj} fddt|D }t |S )Nr   z"Cannot extract from an empty arrayz+condition shape inconsistent with arr shapec                    s   g | ]}| r j | qS r&   ro  )r  r   r+   r  r&   r'   r    s      z7np_extract.<locals>.np_extract_impl.<locals>.<listcomp>)	rU   r  r  r   rn   r  r  r0   r  )	conditionrY   r   max_lenr   r&   r  r'   np_extract_impl  s    

 z#np_extract.<locals>.np_extract_implr&   )r  rY   r  r&   r&   r'   
np_extract  s    r  c                 C   sN  ddd}t | tjtjfs$tdt |tjtjfs>tdt |ttjtjfsZtdt | d tjsrtdt |d tjstdt | d tjrt | d j	tjstd	t | d tjrt | d tjrt | d d tjstd
t | d tjr | d j
|d j
kr tdt | d tjrJ| d j
dk rJtd|S )Nr   c                 S   sp   t | t |krtd|t|d j|d j }tt | d ddD ]"}| | }|| }t|||}qH|S )Nz7list of cases must be same length as list of conditionsr   r)   r   )rA   rn   rU   r  rp   r{   r0   r  )condlist
choicelistdefaultr   r,   r  choicer&   r&   r'   np_select_arr_impl  s    z%np_select.<locals>.np_select_arr_implz"condlist must be a List or a Tuplez$choicelist must be a List or a Tuplez,default must be a scalar (number or boolean)z items of condlist must be arraysz"items of choicelist must be arraysz%condlist arrays must contain booleansz*condlist tuples must only contain booleanszHcondlist and choicelist elements must have the same number of dimensionsr)   z/condlist arrays must be of at least dimension 1)r   )rK   r   ListrB   r    r  r  r  rZ  r{   rm   )r  r  r  r  r&   r&   r'   	np_select  s4    
"r  c                    sn   d}t | tjtjtjfs"t|t|r2| j n*zt| W n t	k
rZ   tdY nX d fdd	}|S )Nz7The argument to np.asarray_chkfinite must be array-likez!dtype must be a valid Numpy dtypec                    s4   t j|  d} t | D ]}t |stdq| S )Nr   z#array must not contain infs or NaNs)rU   r  rV   r  rn   )r+   r{   r,   r  r&   r'   r     s
    

z"np_asarray_chkfinite.<locals>.impl)N)
rK   r   rZ  r  rN   r   r   r{   r   r   )r+   r{   r   r   r&   r  r'   np_asarray_chkfinite  s    r  c                 C   s   t dkrHtd|  | d}tt|dd|| d   d|| d   S t| }tt|| d d d| | d  dd| | d   S d S )Nr)      r  rl   r   r)   r4  )r   rU   aranger  Z
less_equalr  r  r&   r&   r'   np_bartlett_impl  s    .
$r  c                 C   s   t dkrZtd|  | d}ddttj| | d    dtdtj | | d    S t| }ddtdtj | | d    dtd	tj | | d    S d S )
Nr  r  rl   gzG?r   r)   g{Gz?r4  g      @r   rU   r  cosr  r  r&   r&   r'   np_blackman_impl  s    
"r  c                 C   sl   t dkr:td|  | d}ddttj| | d    S t| }ddtdtj | | d    S d S )Nr  r)   rl   gHzG?gq=
ףp?r4  r  r  r&   r&   r'   np_hamming_impl  s
     
r  c                 C   sl   t dkr:td|  | d}ddttj| | d    S t| }ddtdtj | | d    S d S )Nr  r)   rl   r   r4  r  r  r&   r&   r'   np_hanning_impl  s
     
r  c                    s    fdd}|S )Nc                    s$   t | tjstd fdd}|S )NM must be an integerc                    s8   | dk rt jdt jdS | dkr0t jdt jdS  | S )Nr)   r&   r   )rU   r  float_r  )r  r?  r&   r'   window_impl$  s
    z>window_generator.<locals>.window_overload.<locals>.window_impl)rK   r   rg  r   )r  r  r?  r&   r'   window_overload   s    z)window_generator.<locals>.window_overloadr&   )r@  r  r&   r?  r'   window_generator  s    r  g4!\Tg}b3<gr넱g^<g"P
g'&&KF5=gbLag$ӛ/=gjzg<t̾=gVg4T&>g0Kg5dMv;p>g"c쑾g$>g'doҾgY(X?>gZY&+g|t(?gRBguZ?gI ^qga?g!Ng-Ί>?g-4pKgw?gWӿg*5N?gT`g0fFVg!<gA`<gҫ`g8箸g}<g攐*<gbe~g2hϙ]'gE_V=gsk[=g&GCi=gfCg{~5g%t9QgO $=guo >g["d,->gmրVX>gna>g+A>gRx?gI墌k?g	b?c                 C   sH   |d }d}t dt|D ] }|}|}| | | ||  }qd||  S )Nr   r  r)   r   r  )r   valsb0b1r,   b2r&   r&   r'   _chbevlt  s    r  c                 C   s\   | dk r|  } | dkr6d|  d }t | t|t S t | td|  d t t |  S )Nr   g       @r   r4  g      @@)rU   expr  _i0A_i0Br  r  r&   r&   r'   _i0  s    r  c                 C   sb   t j| t jd}tt |}tt|D ]2}t|t d| | | | d   | ||< q*|S )Nr   r)   r4  )rU   r  r  r  r0   rA   r  )r  alphabetar5  tr,   r&   r&   r'   _i0n  s
    0r  c                 C   s:   t | tjstdt |tjtjfs.tddd }|S )Nr  z beta must be an integer or floatc                 S   sT   | dk rt jdt jdS | dkr0t jdt jdS t d| }| d d }t|||S )Nr)   r&   r   r   r4  )rU   r  r  r  r  r  )r  r  r  r  r&   r&   r'   np_kaiser_impl  s    z!np_kaiser.<locals>.np_kaiser_impl)rK   r   rg  r   r   )r  r  r  r&   r&   r'   	np_kaiser  s    r  c                 C   s   dd }|| \}}}||\}}}	t ||	t || }
t ||t ||	 }t ||t || }|
|d< ||d< ||d< d S )Nc                 S   sF   | d }| d }| j d dkr(| d }nt| jd|}|||fS )N.r   .r)   r   rk   .rl   r   )rp   rU   r"  r{   rs   )r   x0x1Zx2r&   r&   r'   _cross_preprocessing  s    
z._cross_operation.<locals>._cross_preprocessingr  r  r  )rU   r"  )r+   r
  r   r  a0a1r$  r  r  r  Zcp0Zcp1Zcp2r&   r&   r'   _cross_operation  s    	r  c                    sJ   t t| jt|j | jdkr:|jdkr: fdd}n fdd}|S )Nr)   c                    s   t d }t| || |S )Nrk   )rU   r   r  )r+   r
  cpr   r&   r'   r     s    z_cross_impl.<locals>.implc                    s6   t | d |d j}t |d  }t| || |S )Nr  r  )rU   r  rp   r   r  )r+   r
  rp   r  r   r&   r'   r     s    )rU   r?  r   r{   rm   r+   r
  r   r&   r   r'   _cross_impl  s
    r  c                 C   s$   t | rt |stddd }|S )NInputs must be array-like.c                 S   sj   t | }t |}|jd dks0|jd dkr8td|jd dksT|jd dkr^t||S tdd S )Nr   )rl   rk   zDIncompatible dimensions for cross product
(dimension must be 2 or 3)rk   zDimensions for both inputs is 2.
Please replace your numpy.cross(a, b) call with a call to `cross2d(a, b)` from `numba.np.extensions`.)rU   r  rp   rn   r  r+   r
  Za_Zb_r&   r&   r'   r     s    


znp_cross.<locals>.implr.  r  r&   r&   r'   np_cross  s    r  c                 C   sB   dd }|| \}}||\}}t ||t || }t |S )Nc                 S   s   | d }| d }||fS )Nr  r  r&   )r   r  r  r&   r&   r'   r    s    z0_cross2d_operation.<locals>._cross_preprocessing)rU   r"  r  )r+   r
  r  r  r  r  r  r  r&   r&   r'   _cross2d_operation  s
    r  c                 C   s$   t | rt |stddd }|S )Nr  c                 S   sB   t | }t |}|jd dks0|jd dkr8tdt||S )Nr   rl   zRIncompatible dimensions for 2D cross product
(dimension must be 2 for both inputs))rU   r  rp   rn   r  r  r&   r&   r'   r     s    

zcross2d.<locals>.implr.  r  r&   r&   r'   cross2d  s    
r  )N)N)r   r   F)r   r   F)NN)N)N)Nr   )r   )r   )r   N)r   )r   )r   )r   N)r   )NN)Nr  )NF)NTFN)NT)F)N)r)   )Nr   )rC  )F)r  N)N)r   )N(  r  r  collectionsr   enumr   	functoolsr   operatorru  Zllvmlite.irr  ZnumpyrU   Znumbar   Z
numba.corer   r   Znumba.core.extendingr   r	   r
   Znumba.np.numpy_supportr   r   r   r   r   Znumba.core.imputilsr   r   r   r   Znumba.core.typingr   Znumba.np.arrayobjr   r   r   r   Znumba.np.linalgr   r   Znumba.core.errorsr   r   r   r   r    r!   Znumba.core.overload_gluer"   Znumba.cpython.unsafe.tupler#   r(   r  rF   rS   r   rZ  ri   rj   rz   r2   Z	DTypeSpecZIntegerLiteralr   r   r   r  r   rt  r   rm  r   r   r   r   r   Zstdr   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  Zaverager$  r'  Z	iscomplexr*  Zisrealr+  r2  r3  Zisscalarr6  r=  r@  rA  rC  rD  rF  rL  rN  rR  rM  rQ  ZnanminrP  ZnanmaxrS  r\  r[  r_  r^  Znanstdrb  Znansumrh  Znanprodrl  Z
nancumprodrs  Z	nancumsumrw  rz  r  r  r  r  r  r  r  r  r  Z_partition_w_nanr  r  r  r  r  Zmedianr  r  r  r  r  r  r  r  r  r  Znanpercentiler  Zquantiler  Znanquantiler  Z	nanmedianr  r  r  	partitionr  r  r  r  r  r  Ztrilr  r  r  Ztril_indices_fromr  r  Ztriur  r  r  Ztriu_indices_fromr  r  r  r   Zediff1dr+  r,  r.  r0  r3  Ztrapzr9  r;  r<  ZvanderrA  ZrollrD  rG  rK  r_  rd  r`  rh  ri  rq  rr  rs  rt  Zinterprv  rw  r}  r~  r  r  r  r-  r  r  r  r  r  r  r  r  r  Zcorrcoefr  Zargwherer  Zflatnonzeror  r  r  r  r  r  r  rx  r  Zfill_diagonalr  r  r  Zaroundr   r  r  rg  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  Anyr  r   r  r   r  containsr  Zcount_nonzeror  r!  r"  deleter#  r#  r'  Zarray_equalr)  Zintersect1dr/  r2  r3  r;  rB  Z_ltZ_lerJ  rK  rL  ZdigitizerW  r0   r^  rX  r`  rt  rl  Z_finfo_supportedr  Z_iinfo_supportedr  r  r  r  r  r  r  r  Z	correlater  Zconvolver  r  r  Zasfarrayr  r  extractr  selectr  Zasarray_chkfiniter  r  r  r  r  r  ZbartlettZblackmanZhammingZhanningr  r  r  r  r  r  Zkaiserr  r  r  Zcrossr  r  r  r&   r&   r&   r'   <module>   s(   	
(
K

A'(







Q
Q






,



B

$



	



"


















%



4











"



9




'

D
_iT[



B'
:$"


 		
8% 





.
&



92
.
 
T
?
/

6


2
 
		!
	

