o
    8ήc(R                    @   sr  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dd_d`Zfeejgeej<daddbdcZheejieej<dddedf Zjeejkddgdh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ddwdxZweejxddydz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ddd̈́Zeddτ ZedddфZeejdddӄZeejdddՄZeejÃdddׄZedddلZeejƃdddۄZeejȃddd݄Zeejʃddd߄Zdd Zeẽdd Zdd ZeejσdddZdd Zeeуdd Zdd ZeeӃdd ZeejՃdddZedd Zedd Zeejكddd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rg dZserg d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 dS  ty   Y dS w NFT)r   ImportError r&   r&   9/tmp/pip-target-vg8gfxp4/lib/python/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      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tupin_shape_r-   r,   dataidxdatand
shape_listtuptyr&   r'   codegenA   s   

z+_create_tuple_result_shape.<locals>.codegen)lenr   UniTupler3   )tyctxrA   shape_tuplefunction_sigrC   r&   r?   r'   _create_tuple_result_shape0   s
   
rI   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 ]	}
|||	|
}q"||| }t d D ]	}
|||	|
}q:|S )Nc                   S   s
   t d d S r*   )slicer&   r&   r&   r'   create_full_slice      
z<_gen_index_tuple.<locals>.codegen.<locals>.create_full_slicer   r)   )r/   r   r0   r4   r   slice2_typer1   r5   )r6   r7   r   r8   r9   r:   r<   	value_argrK   
slice_datar,   
axis_valuer@   rB   r&   r'   rC      s   


z!_gen_index_tuple.<locals>.codegen)	
isinstancer   Literalr   literal_valuerD   rM   r3   Tuple)	rF   rG   valueaxisbeforeafter
types_listrH   rC   r&   rP   r'   _gen_index_tupleY   s    	
r[   z	array.sumc                    B   | 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      z!array_sum.<locals>.array_sum_implrc   localsreturn_typer4   dictr   contextr7   sigr8   rg   resr&   re   r'   	array_sum      

rs   c                 C      | S r*   r&   )rb   rd   r&   r&   r'   _array_sum_axis_nop      rv   c                    s    fdd}|S )Nc                    s2  | j }s|dk s|dkrtd||krtdt| j}|| }|| t|| j}t|t}t	|D ]Y}rLt
| j| }|| | 7 }q:|dkr^t
| j|d}	|| |	 7 }q:|dkrpt
| j|d}
|| |
 7 }q:|dkrt
| j|d}|| | 7 }q:|dkrt
| j|d}|| | 7 }q:|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poprI   r^   fulltyper1   r[   )rb   rW   rz   ashapeaxis_lenashape_without_axisresult
axis_indexindex_tuple_genericindex_tuple1index_tuple2index_tuple3index_tuple4const_axis_valis_axis_constoprf   r&   r'   inner   s>   


z gen_sum_axis_impl.<locals>.innerr&   )r   r   r   rf   r   r&   r   r'   gen_sum_axis_impl   s   =r   c                    s  |j }t|d|d}t|dd d u rtj}nt}|j\}}}	d}
d}t|tjrb|j	}|dk r5|j
| }|dk s>||j
krBtd| j|}| ||}|d ||d f}|j|||	gd}d}
t|
|||}t|  fd	d
}| ||||}t| ||j |S )Ndtyper   rz   Fz'axis' entry is out of boundsry   r8   Tc                    
    | |S r*   r&   )rb   rW   r   compiledr&   r'   array_sum_impl_axis  rL   z1array_sum_axis_dtype.<locals>.array_sum_impl_axis)rm   getattrr^   takerv   r8   rR   r   rS   rT   rz   r{   typing_contextresolve_value_typer2   replacer   r
   r4   r   )rp   r7   rq   r8   rettyrf   r   ty_arrayty_axisty_dtyper   r   axis_valgen_implr   rr   r&   r   r'   array_sum_axis_dtype   s0   
r   c                    r\   )Nr   c                    s$    }t | D ]}|| 7 }q|S r*   r]   )rb   r   rc   rd   re   r&   r'   rg   +  rh   z'array_sum_dtype.<locals>.array_sum_implri   rj   rl   ro   r&   re   r'   array_sum_dtype&  rt   r   c                    s  |j }t|d|d}t|dd d u rtj}nt}|j\}}d}	d}
t|tjrc|j	}
|
dk r4|j
|
 }
|
dk s=|
|j
krGd|
 d}t|| j|
}| ||
}|d |f}|j||gd}d}	t|	|
||}t|  fd	d
}| ||||}t| ||j |S )Nr   r   rz   Fz'axis' entry (z) is out of boundsr   Tc                    r   r*   r&   rb   rW   r   r&   r'   r   [  rL   z+array_sum_axis.<locals>.array_sum_impl_axis)rm   r   r^   r   rv   r8   rR   r   rS   rT   rz   r   r   r   r2   r   r   r
   r4   r   )rp   r7   rq   r8   r   rf   r   r   r   r   r   msgr   r   r   rr   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)   r]   ra   r&   r&   r'   array_prod_implf  rh   z#array_prod.<locals>.array_prod_implri   rj   )r4   rn   rm   r   )rp   r7   rq   r8   r   rr   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*   r^   emptysize	enumerateflatrb   outrc   idxrd   r   rf   r&   r'   array_cumsum_implx     
z'array_cumsum.<locals>.array_cumsum_implri   rj   rm   r   r   r4   rn   r   )rp   r7   rq   r8   scalar_dtyper   rr   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  r   z)array_cumprod.<locals>.array_cumprod_implri   rj   r   )rp   r7   rq   r8   r   r   rr   r&   r   r'   array_cumprod  s   r   z
array.meanc                    r\   )Nr   c                    s*    }t | D ]}|| 7 }q|| j S r*   )r^   r_   r`   r   ra   re   r&   r'   array_mean_impl  s   
z#array_mean.<locals>.array_mean_implri   rj   rm   r4   rn   r   )rp   r7   rq   r8   r   rr   r&   re   r'   
array_mean  s   

r   z	array.varc                 C   (   dd }|  ||||}t| ||j|S )Nc                 S   sJ   |   }d}t| D ]}| | }|t|t| 7 }q|| j S Nr   )meanr^   r_   r`   realconjr   )rb   mssdrd   valr&   r&   r'   array_var_impl  s   
z!array_var.<locals>.array_var_implr4   r   rm   )rp   r7   rq   r8   r   rr   r&   r&   r'   	array_var  s   r   z	array.stdc                 C   r   )Nc                 S   s   |   d S N      ?)var)arryr&   r&   r'   array_std_impl     z!array_std.<locals>.array_std_implr   )rp   r7   rq   r8   r   rr   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      d S r*   r&   xr&   r&   r'   _is_nat     r   c                    s$   t dkrdd S | d  fddS )Nr)      c                 S   
   t | S r*   )r^   isnatr   r&   r&   r'   <lambda>     
 zol_is_nat.<locals>.<lambda>NaTc                    s   |  kS r*   r&   r   natr&   r'   r         r   r   r&   r   r'   	ol_is_nat  s   r   z	array.minc                       |j d j}td t|tjtjfr fdd}n t|tjr' fdd}nt|tjr4 fdd}n fdd}| 	||||}t
| ||j|S )Nr   minimumc                    sr   | j dkr	t t| }t|d}t|r|S |D ]}| }t|r0tdkr/|  S q||k r6|}q|S Nr   r   	r   r{   r^   r_   nextr   r   r`   r   r   it	min_valueviewrd   MSGr&   r'   array_min_impl      

z!array_min.<locals>.array_min_implc                    sn   | j dkr	t t| }t|d}|D ]}| }|j|jk r&|}q|j|jkr4|j|jk r4|}q|S r   	r   r{   r^   r_   r   r   r`   r   imagr   r   r&   r'   r        

c                    sl   | j dkr	t t| }t|d}t|r|S |D ]}| }t|r-|  S ||k r3|}q|S r   r   r{   r^   r_   r   r   isnanr`   r   r   r&   r'   r        



c                    sL   | j dkr	t t| }t|d}|D ]}| }||k r#|}q|S r   r   r{   r^   r_   r   r   r`   r   r   r&   r'   r        

r8   r   r   rR   r   
NPDatetimeNPTimedeltaComplexFloatr4   r   rm   )rp   r7   rq   r8   tyr   rr   r&   r   r'   	array_min     r   z	array.maxc                    r   )Nr   maximumc                    sr   | j dkr	t t| }t|d}t|r|S |D ]}| }t|r0tdkr/|  S q||kr6|}q|S r   r   r   r   	max_valuer   rd   r   r&   r'   array_max_impl5  r   z!array_max.<locals>.array_max_implc                    sn   | j dkr	t t| }t|d}|D ]}| }|j|jkr&|}q|j|jkr4|j|jkr4|}q|S r   r   r  r   r&   r'   r  J  r   c                    sl   | j dkr	t t| }t|d}t|r|S |D ]}| }t|r-|  S ||kr3|}q|S r   r   r  r   r&   r'   r  [  r   c                    sL   | j dkr	t t| }t|d}|D ]}| }||kr#|}q|S r   r   r  r   r&   r'   r  m  r   r   )rp   r7   rq   r8   r   r  rr   r&   r   r'   	array_max+  r   r  c                 C   s   | j dkr	tdt| }t|d}d}t|r|S d}|D ]#}| }t|r8tdkr3|  S |d7 }q!||k r@|}|}|d7 }q!|S )Nr   *attempt to get argmin of an empty sequencer)   r   r   )r   r   r   min_idxr   r   rd   r&   r&   r'   array_argmin_impl_datetime~  (   


r  c                 C   sr   | j dkr	td| jD ]}|}d} t|r|S d}| jD ]}t|r*|  S ||k r2|}|}|d7 }q|S )Nr   r  r)   r   r{   r   r^   r   r   rd   r   r  r   r&   r&   r'   array_argmin_impl_float  "   





r  c                 C   s\   | j dkr	td| jD ]}|}d} ntdd}| jD ]}||k r'|}|}|d7 }q|S )Nr   r  unreachabler)   )r   r{   r   RuntimeErrorr
  r&   r&   r'   array_argmin_impl_generic  s   



r  argminc                    \   t | jtjtjfrt nt | jtjrt nt t	|r&d fdd	}|S t
| | }|S )Nc                        | S r*   r&   r   flatten_implr&   r'   array_argmin_impl  r.   z'array_argmin.<locals>.array_argmin_implr*   )rR   r   r   r   r   r  r   r  r  r   %build_argmax_or_argmin_with_axis_impl)rb   rW   r  r&   r  r'   array_argmin     r  c                 C   s   | j dkr	tdt| }t|d}d}t|r|S d}|D ]#}| }t|r8tdkr3|  S |d7 }q!||kr@|}|}|d7 }q!|S )Nr   *attempt to get argmax of an empty sequencer)   r   r   )r   r   r  max_idxr   r   rd   r&   r&   r'   array_argmax_impl_datetime  r  r  c                 C   sr   | j dkr	td| jD ]}|}d} t|r|S d}| jD ]}t|r*|  S ||kr2|}|}|d7 }q|S Nr   r  r)   r	  r   rd   r  r  r   r&   r&   r'   array_argmax_impl_float  r  r  c                 C   sR   | j dkr	td| jD ]}|}d} d}| jD ]}||kr"|}|}|d7 }q|S r  )r   r{   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.
    rW   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 }q)t|| j d |}| |}|jd }| }|j| jksSJ |j| dks\J t	|j| }t|jD ]} ||| |d |  ||< qj|
|jd d S )Nr   zaxis is out of boundsr)   )rz   r{   r1   r#   	transposer}   ravelr   r^   r   reshape)	rb   rW   tmpr,   transpose_indextransposed_arrr   raveledr   r  r   tuple_bufferr&   r'   impl"  s&   



"z3build_argmax_or_argmin_with_axis_impl.<locals>.implr*   )r   r   r3   tupler1   rz   )rb   rW   r  r*  r&   r(  r'   r    s
   
r  argmaxc                    r  )Nc                    r  r*   r&   r   r  r&   r'   array_argmax_implO  r.   z'array_argmax.<locals>.array_argmax_implr*   )rR   r   r   r   r   r  r   r  r  r   r  )rb   rW   r-  r&   r  r'   array_argmaxD  r  r.  allc                 C      dd }|S )Nc                 S   s"   t | D ]	}| s dS qdS r$   r]   r+   rd   r&   r&   r'   flat_all[  
   znp_all.<locals>.flat_allr&   )r+   r2  r&   r&   r'   np_allX     r4  h㈵>:0yE>Fc                 C   s   t | }t |}|s|s|r|sdS |r|r|sdS dS t | s(t |r,| |kS t | | ||t |d   kr@dS dS )NF      ?T)r^   r   isinfabs)a_vb_vrtolatol	equal_nan	a_v_isnan	b_v_isnanr&   r&   r'   _allclose_scalarsd  s"   

$rB  allclosec                 C   s   t | stdt |stdt|tjstdt|tjs$tdt|tjs.tdt| tj}t|tj}|rG|rG		dd	d
}|S |rT|sT		ddd}|S |sa|ra		ddd}	|	S |sn|sp		ddd}
|
S 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 booleanr6  r7  Fc                 S   s   t | ||||dS )Nr=  r>  r?  )rB  )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 NrD  FTr^   asarrayr_   rB  r`   )r+   rE  r=  r>  r?  bvr&   r&   r'   np_allclose_impl_scalar_array     
z2np_allclose.<locals>.np_allclose_impl_scalar_arrayc                 S   s:   t | } t | D ]}t| ||||ds dS q
dS rG  rH  )r+   rE  r=  r>  r?  avr&   r&   r'   np_allclose_impl_array_scalar  rL  z2np_allclose.<locals>.np_allclose_impl_array_scalarc           	      S   s`   t | } t |}t | |\}}t ||fD ]\}}t| | |||ds- dS qdS rG  )r^   rI  broadcast_arraysr_   rB  r`   )	r+   rE  r=  r>  r?  a_ab_brM  rJ  r&   r&   r'   np_allclose_impl_array_array  s   

z1np_allclose.<locals>.np_allclose_impl_array_arrayr6  r7  F)r   	TypeErrorrR   r   r   r   BooleanNumber)r+   rE  r=  r>  r?  is_a_scalaris_b_scalarrF  rK  rN  rR  r&   r&   r'   np_allclose~  sB   



rY  anyc                 C   r0  )Nc                 S   s"   t | D ]	}| r dS qdS NTFr]   r1  r&   r&   r'   flat_any  r3  znp_any.<locals>.flat_anyr&   )r+   r\  r&   r&   r'   np_any  r5  r]  c                 C   sR   |d u s
t |tjrddd}|S |d u st |tjr"ddd}|S ddd}|S )Nc                 S   s   t | } t | S r*   )r^   rI  r   rb   rW   weightsr&   r&   r'   np_average_impl  s   

z#np_average.<locals>.np_average_implc                 S   sv   t | } t |}| j|jkr!|d u rtd|jdkr!t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.)r^   rI  r}   rT  rz   sumZeroDivisionErrormultiply)rb   rW   r_  sclavgr&   r&   r'   r`    s$   



c                 S   s   t d)Nz)Numba does not support average with axis.)rT  r^  r&   r&   r'   r`    r.   NN)rR   r   NoneType)rb   rW   r_  r`  r&   r&   r'   
np_average  s   


ri  c                 C   s(   t | tjtjfrtjS tdd }|S )z$
    A generic isnan() function
    c                 S      dS NFr&   r   r&   r&   r'   _trivial_isnan  rw   z!get_isnan.<locals>._trivial_isnan)rR   r   r   r   r^   r   r
   )r   rl  r&   r&   r'   	get_isnan  s
   
rm  c                 C      t | rdd S d S )Nc                 S   s   t | jdkS r   r^   rI  r   r   r&   r&   r'   r         znp_iscomplex.<locals>.<lambda>r   r   r&   r&   r'   np_iscomplex      rr  c                 C   rn  )Nc                 S   s   t | jdkS r   ro  r   r&   r&   r'   r     rp  znp_isreal.<locals>.<lambda>rq  r   r&   r&   r'   	np_isreal  rs  rt  c                    sX   t | }t| tjrt | j}t|tj t| tjr$ fdd}|S  fdd}|S )Nc                    s   | d u rdS  S rk  r&   r   iscmplxr&   r'   r*    s   ziscomplexobj.<locals>.implc                        S r*   r&   r   ru  r&   r'   r*    r   )determine_dtyperR   r   Optionalr   r^   
issubdtypecomplexfloating)r   dtr*  r&   ru  r'   iscomplexobj  s   
r}  c                 C   r0  )Nc                 S      t |  S r*   )r^   r}  r   r&   r&   r'   r*  )  r   zisrealobj.<locals>.implr&   )r   r*  r&   r&   r'   	isrealobj$  s   r  c                    s&   t | tjtjtjf  fdd}|S )Nc                    rw  r*   r&   )numrr   r&   r'   r*  2  r   znp_isscalar.<locals>.impl)rR   r   rV  UnicodeTyperU  )r  r*  r&   r  r'   np_isscalar.  s   r  c                    s,   t |rd fdd	}|S d fdd	}|S )Nc                    s   t t |  t | S r*   r^   logical_andr9  signbitr   r   fnr&   r'   r*  ;     zis_np_inf_impl.<locals>.implc                    s   t t |  t | |S r*   r  r  r  r&   r'   r*  >     r*   r   )r   r   r  r*  r&   r  r'   is_np_inf_impl7  s
   r  c                 C      t dd }t| ||S )Nc                 S   ru   r*   r&   r   r&   r&   r'   r   F      zisneginf.<locals>.<lambda>r
   r  r   r   r  r&   r&   r'   isneginfD     r  c                 C   r  )Nc                 S   s   |  S r*   r&   r   r&   r&   r'   r   L  s    zisposinf.<locals>.<lambda>r  r  r&   r&   r'   isposinfJ  r  r  c                 C   s   | |k S r*   r&   r+   rE  r&   r&   r'   	less_thanP     r  c                 C   s   | |kS r*   r&   r  r&   r&   r'   greater_thanU  r  r  c                 C   s   | j dkr	tdd S )Nr   z3zero-size array to reduction operation not possible)r   r{   r+   r&   r&   r'   check_arrayZ  s   
r  c                    s$   |r
 fdd}|S  fdd}|S )Nc                    s   t | }t| t |}t|d}|D ].}| }t |jr,t |js,|}q |j|jr6|}q|j|jkrE |j	|j	rE|}q|S r   )
r^   rI  r  r_   r   r   r`   r   r   r   r+   rb   r   
return_valr   rd   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   )r^   rI  r  r_   r   r   r`   r   r  r  r&   r'   r*  s  s   



r&   )r  is_complex_dtyper*  r&   r  r'   nan_min_max_factory`  s
   r  )r  Tc                 C      t | }t|tjrtS tS r*   )rx  r^   rz  r{  complex_nanminreal_nanminr+   r|  r&   r&   r'   	np_nanmin     r  c                 C   r  r*   )rx  r^   rz  r{  complex_nanmaxreal_nanmaxr  r&   r&   r'   	np_nanmax  r  r  c                    *   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 Nra  r   r)   )r^   r_   r`   divide)r+   rc   countr   rd   r   r&   r'   nanmean_impl  s   z np_nanmean.<locals>.nanmean_implrR   r   Arrayrm  r   )r+   r  r&   r  r'   
np_nanmean  s
   
r  c                    r  )Nc                    sj   t | }d}d}t | D ] }| } |s.| | }|t |t | 7 }|d7 }qt ||S r  )r^   nanmeanr_   r`   r   r   r  )r+   r   r   r  r   rd   r   r  r&   r'   nanvar_impl  s   
znp_nanvar.<locals>.nanvar_implr  )r+   r  r&   r  r'   	np_nanvar  
   
r  c                 C      t | tjsd S dd }|S )Nc                 S   s   t | d S r   )r^   nanvarr  r&   r&   r'   nanstd_impl     znp_nanstd.<locals>.nanstd_implrR   r   r  )r+   r  r&   r&   r'   	np_nanstd  s   r  c                    P   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*   r]   r+   rc   r   rd   r   rf   r&   r'   nansum_impl     znp_nansum.<locals>.nansum_implrR   r   r  r   Integerr3   rm  )r+   r   r  r&   r  r'   	np_nansum     
r  c                    r  )Nr)   c                    s0   }t | D ]}| } |s||9 }q|S r*   r]   r  r   oner&   r'   nanprod_impl  r  z np_nanprod.<locals>.nanprod_implr  )r+   r   r  r&   r  r'   
np_nanprod  r  r  c                    sV   t | tjsd S t | jtjtjfrdd S | jt d fdd}|S )Nc                 S   r   r*   )r^   cumprodr  r&   r&   r'   r     r   znp_nancumprod.<locals>.<lambda>r)   c                    sD   t | j}}t| jD ]\}} | r||9 }|||< q|S r*   r   r+   r   rc   r   rd   is_nanr  r   r&   r'   nancumprod_impl     

z&np_nancumprod.<locals>.nancumprod_implrR   r   r  r   rU  r  rm  )r+   r  r&   r  r'   np_nancumprod     	r  c                    sV   t | tjsd S t | jtjtjfrdd S | jt d fdd}|S )Nc                 S   r   r*   )r^   cumsumr  r&   r&   r'   r   &  r   znp_nancumsum.<locals>.<lambda>r   c                    sD   t | j}}t| jD ]\}} | r||7 }|||< q|S r*   r   r  r  r   rf   r&   r'   nancumsum_impl,  r  z$np_nancumsum.<locals>.nancumsum_implr  )r+   r  r&   r  r'   np_nancumsum  r  r  c                 C   s    t | }t|dkrtd|S )Nr   z&zero-size array reduction not possible)_asarrayrD   r{   r+   rb   r&   r&   r'   prepare_ptp_input8  s   r  c                        fdd}|S )Nc                    s,   t | tjr fdd}|S  fdd}|S )Nc                    s4    |j | j r	|S |j | j kr |j| jr|S | S r*   )r   r   current_valr   r   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   )rR   r   r   )r  r   r*  r  r&   r'   _compute_current_val_implB  s
   
z@_compute_current_val_impl_gen.<locals>._compute_current_val_implr&   )r   r  r&   r  r'   _compute_current_val_impl_genA  s   r  c                    sL   d t | tjr fdd}|S t | tjr fdd}|S  fdd}|S )Nr   c                    sB   t | jrt | jrdt jt jd  fS dt jd fS d fS )NT              ?y                F)r^   r   r   r   nanr   UNUSEDr&   r'   r*  _  s
   z_early_return.<locals>.implc                    s   t | r
dt jfS d fS r[  )r^   r   r  r  r  r&   r'   r*  h  s   

c                    s   d fS rk  r&   r  r  r&   r'   r*  n  r.   )rR   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 ]}|| }t|\}}|r&|  S t||}t||}q|| S r   )r  r   r1   r   r  _compute_a_max_compute_a_min)	r+   rb   a_flata_mina_maxr,   r   take_branchretvalr&   r&   r'   np_ptp_impl|  s   
znp_ptp.<locals>.np_ptp_impl)hasattrrR   r   r   rU  r   )r+   r  r&   r&   r'   np_ptps  s
   
r  c                 C   s$   t | rdS t |rdS | |k S r$   )r^   r   r  r&   r&   r'   nan_aware_less_than  s
   

r  c                    r  )Nc                    s|  || d? } | | | | r| | | | | |< | |<  | | | | r2| | | | | |< | |<  | | | | rH| | | | | |< | |< | | }| | | | | |< | |< |}|d }	 ||k rz | | |rz|d7 }||k rz | | |sk||kr || | r|d8 }||kr || | s||krn| | | | | |< | |< |d7 }|d8 }q`| | | | | |< | |< |S r   r&   )Alowhighmidpivotr,   j	pivotimplr&   r'   
_partition  s4   z&_partition_factory.<locals>._partitionr&   )r  r  r&   r  r'   _partition_factory  s   !r  c                    r  )Nc                    sV    | ||}||kr'||k r|d } | ||}n
|d } | ||}||ks
| | 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     r  c                 C   s   	 ||ksJ t | ||}||k r|d }n%||d kr!|d }n||kr1t| |d |d | nt| |||d  nq| | | |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.
    Tr)   )r  r  r  r&   r&   r'   _select_two  s   

r  c                 C   sP   d}|d }|d? }|d@ dkr!t | |d ||\}}|| d S t| |||S )zt
    The main logic of the median() call.  *temp_arry* must be disposable,
    as this function will mutate it.
    r   r)   ry   )r  r  )	temp_arrynr  r  halfr+   rE  r&   r&   r'   _median_inner  s   r  c                 C   r  )Nc                 S   s   |   }|jd }t||S r   )flattenr}   r  )r+   r  r  r&   r&   r'   median_impl
  s   

znp_median.<locals>.median_implr  )r+   r
  r&   r&   r'   	np_median  s   r  c                 C   s  t | }|dkrtjt || d tjd}|S tjt |tjd}tt |D ]}|| }|dkrIt| }tt|  rHt| rHtj	}n|dkrt
| }tt|  rt| tjk}t| tj k}|||  }	|	dkrytj	}|dkr|dkrtj	}|dkrtj	}|	dkr|dkr|dkrtj	}n/d|d t|d  }
t|
}|
| }t| t|d d|d d\}}|d|  ||  }|||< q'|S )Nr)   r   r   d   ry         Y@)r  r  r  )rD   r^   r   float64r   r1   maxr/  isfiniter  minrb  inftrue_dividemathfloorr  int)r+   qr  r   r,   
percentiler   num_pos_infnum_neg_inf
num_finiterankfr   lowerupperr&   r&   r'   _collect_percentiles_inner  sJ   *


 
r   c                 C   sP   |r| |  } t | dkrdS nt|rdS t | dkr&| d }t|S dS )Nr   Fr)   T)rD   r^   rZ  r  )r+   nan_maskskip_nanr   r&   r&   r'   _can_collect_percentilesI  s   


r#  c                 C   s   d}| j dkr.| jdk r.t| jD ]}| | dk s&| | |ks&t| | r+d} |S q|S tt| sDt| dk sDt| |krFd}|S )NTr)   
   ra  F)rz   r   r1   r^   r   rZ  )r  q_upper_boundvalidr,   r&   r&   r'   check_validZ  s   &,r'  c                 C      t | dds
tdd S )Nr  r%  z)Percentiles must be in the range [0, 100]r'  r{   r  r&   r&   r'   percentile_is_validk     r,  c                 C   r(  )Nr8  r)  z%Quantiles must be in the range [0, 1]r*  r+  r&   r&   r'   quantile_is_validq  r-  r.  c                 C   s|   t j|t jd }|| || }t j| t jd }t |}t|||r3||  }t||}|S t t|t j	}|S Nr   )
r^   rI  r  r	  r   r#  r   r   rD   r  )r+   r  check_qfactorr"  r  r!  r   r&   r&   r'   _collect_percentilesw  s   


r2  c                    sr   t | }t|tjrtd fdd} fdd}t|tjtjfr*|S t|tj	r7|j
dkr7|S |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   r2  r+   r  r0  r1  r"  r&   r'   np_percentile_q_scalar_impl     z?_percentile_quantile_inner.<locals>.np_percentile_q_scalar_implc                    s   t | | S r*   r3  r4  r5  r&   r'   np_percentile_impl     z6_percentile_quantile_inner.<locals>.np_percentile_implr   )rx  r^   rz  r{  r   rR   r   rV  rU  r  rz   )r+   r  r"  r1  r0  r|  r6  r8  r&   r5  r'   _percentile_quantile_inner  s   r:  c                 C      t | |ddtdS )NFr8  r"  r1  r0  r:  r,  r4  r&   r&   r'   np_percentile     
r>  c                 C   r;  )NTr8  r<  r=  r4  r&   r&   r'   np_nanpercentile  r?  r@  c                 C   r;  )NFr  r<  r:  r.  r4  r&   r&   r'   np_quantile  r?  rB  c                 C   r;  )NTr  r<  rA  r4  r&   r&   r'   np_nanquantile  r?  rC  c                    r  )Nc                    s\   t | j| j}d}t | D ]}| } |s!|||< |d7 }q|dkr)t jS t||S Nr   r)   )r^   r   r   r   r_   r`   r  r  )r+   r  r  r   rd   r  r&   r'   nanmedian_impl  s   
z$np_nanmedian.<locals>.nanmedian_implr  )r+   rE  r&   r  r'   np_nanmedian  r  rF  c           	      C   sl   t | }t | jd d }|D ]"}| |  }d}t|d }|D ]}t|||| |}q#|||< q|S )Nr   r   r)   )r^   
empty_likendindexr}   copyrD   _select_w_nan)	r+   	kth_arrayr   r   sr   r  r  kthr&   r&   r'   np_partition_impl_inner  s   

rN  c                 C   s   t |tj}|jdkrtdtt|| jd kr"tdt	|}t
|D ]\}}|dk r>|| jd  ||< q,|||< q,t|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   )r  astyper^   int64rz   r{   rZ  r:  r}   rG  ndenumerateunique)r+   rM  rK  r   indexr   r&   r&   r'   
valid_kths  s   



rT  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s1t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   s.   t | }|jdkr| S t||}t||S r   )r  r   rI  rT  rN  )r+   rM  a_tmprK  r&   r&   r'   np_partition_impl  s
   


z'np_partition.<locals>.np_partition_impl)
rR   r   r  SequencerU   rT  rz   r   rU  r  )r+   rM  kthdtrV  r&   r&   r'   np_partition  s   rY  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< q|S )Nr   r   r)   )r  r^   r   r  r1   r  )NMr  r}   r   r,   m_maxr&   r&   r'   	_tri_impl,  s   r]  c                 C   s   t |d ddd}|S )Nr  r   c                 S   s   |d u r| }t | ||S r*   )r]  )rZ  r[  r  r&   r&   r'   tri_impl?  s   znp_tri.<locals>.tri_implr   )r   )rZ  r[  r  r^  r&   r&   r'   np_tri9  s   

r_  c                 C   sD   | j dksJ t| }tj||f| jd}t|D ]}| ||< q|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   )rz   rD   r^   r   r   r1   )r   len_mr   r,   r&   r&   r'   _make_squareG  s   
ra  c                 C   s>   t j| jd | jd |dt j}t || t j| | jdS Nr   r[  r  r   r^   trir}   rO  uintwhere
zeros_liker   r   r  maskr&   r&   r'   np_tril_impl_2dX  s   $rl  c                 C   >   t |d d	dd}d	dd}| jdkr|S | jdkrtS |S )
Nr  r   c                 S      t | }t||S r*   )ra  rl  r   r  m_2dr&   r&   r'   np_tril_impl_1dd     
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 	|| | |||< q+|S rb  
r^   rf  r}   rO  rg  rH  rG  ri  r   rh  r   r  rk  r   zzero_optselr&   r&   r'   np_tril_impl_multih  s   $
z#my_tril.<locals>.np_tril_impl_multir)   ry   r   )r   rz   rl  )r   r  rq  rx  r&   r&   r'   my_tril^  s   



	
rz  c                 C   4   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  r^   nonzerorf  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     



r  c                 C   *   t |d | jdkrtdddd}|S )Nr  ry   input array must be 2-dr   c                 S      t j| jd || jd dS Nr   r)   )r  r   )r^   tril_indicesr}   rb   r  r&   r&   r'   np_tril_indices_from_impl  r  z7np_tril_indices_from.<locals>.np_tril_indices_from_implry  r   rz   r   )rb   r  r  r&   r&   r'   np_tril_indices_from  
   


r  c                 C   sB   t j| jd | jd |d dt j}t |t j| | jd| S Nrc  r   r)   rd  r   re  rj  r&   r&   r'   np_triu_impl_2d  s   (r  c                 C   rm  )
Nr  r   c                 S   rn  r*   )ra  r  ro  r&   r&   r'   np_triu_impl_1d  rr  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 	||| | ||< q-|S r  rs  rt  r&   r&   r'   np_triu_impl_multi  s   (
z#my_triu.<locals>.np_triu_impl_multir)   ry   ry  )r   rz   r  )r   r  r  r  r&   r&   r'   my_triu  s   



	
r  c                 C   r{  )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  r  z-np_triu_indices.<locals>.np_triu_indices_implr  r  )r  r  r   r  r&   r&   r'   np_triu_indices  r  r  c                 C   r  )Nr  ry   r  r   c                 S   r  r  )r^   triu_indicesr}   r  r&   r&   r'   np_triu_indices_from_impl  r  z7np_triu_indices_from.<locals>.np_triu_indices_from_implry  r  )rb   r  r  r&   r&   r'   np_triu_indices_from  r  r  c                 C   r   r*   r&   rb   r&   r&   r'   _prepare_array  r   r  c                 C   s   | d t jfv rdd S dd S )Nc                 S   s
   t dS )Nr&   r^   arrayr  r&   r&   r'   r     r   z%_prepare_array_impl.<locals>.<lambda>c                 S   s   t |  S r*   )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 ur"| dkr"tjS t|dd }|d u r0tdt |tj	r:|j
}nt|S q)NT__len__r   r   ztype has no dtype attr)rR   r   rV  rU  r   r   r^   r  rT  rW  r   )inobjobjlr|  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rMt| }d }t|s#t|}d }t|s-t|}|d ur=t	
||s=d}t||d urMt	
||sMd}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rMtjt|t| t| d |d}t|}t|t| d }	||d |< t||||	< |||	d < |S tjt|t| |d}t|}||d |< |||d < |S )Nr   r)   r   )r  r   rD   r^   r   diff)
aryto_endto_beginstartr  end	out_dtyper   	start_idxmid_idxr&   r&   r'   np_ediff1d_impl
  s&   z#np_ediff1d.<locals>.np_ediff1d_implrg  )rR   r   r  r   rU  r    r   r  r   r^   can_cast)r  r  r  ary_dtto_begin_dt	to_end_dtr   r  r&   r&   r'   
np_ediff1d  s&   
r  c                 C   r   r*   r&   r  r&   r&   r'   _select_element(  r   r  c                 C   s,   t | dd dk}|rdd }|S dd }|S )Nrz   r   c                 S   s$   t jd| jd}| |d d < |d S )Nr)   r   r   )r^   r  r   )rb   r   r&   r&   r'   r*  0  s   z"_select_element_impl.<locals>.implc                 S   ru   r*   r&   r  r&   r&   r'   r*  6  r   r   )rb   zerodr*  r&   r&   r'   _select_element_impl,  s   r  c                 C   r   r*   r&   )dxr   r&   r&   r'   _get_d;  r   r  c                 C   s    t | r
dd }|S dd }|S )Nc                 S   s
   t |S r*   r^   rI  r   r  r&   r&   r'   r*  B  rL   zget_d_impl.<locals>.implc                 S   s   t t | S r*   )r^   r  rI  r  r&   r&   r'   r*  E  r9  r  )r   r  r*  r&   r&   r'   
get_d_impl?  s
   r  r8  c                 C   sF   t | tjtjfrtdt | tjr| jdkrtdddd}|S )Nzy cannot be a scalarr   zy cannot be 0Dr8  c                 S   sX   t | }t||}|dtdd f |dtd df  d }t || d}t|}|S )N.r)   r          @)r^   rI  r  rJ   rb  r  )yr   r  yarrdy_averet	processedr&   r&   r'   r*  U  s   

(znp_trapz.<locals>.implNr8  )rR   r   rV  rU  r   r  rz   )r  r   r  r*  r&   r&   r'   np_trapzJ  s   
r  c                 C   s   |j \}}|t| ksJ ||ksJ |r?t|D ]#}|dkr(d|dd|f< qt| |dd|d f |dd|f< qdS t|d ddD ]%}||d krXd|dd|f< qGt| |dd|d f |dd|f< qGd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   )r}   rD   r1   r^   rd  )r   rZ  
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)rz   r{   )r   rZ  r&   r&   r'   _check_vander_params|  s
   
r  c                    sz   |d t jfvrt|t jstdd fdd	}ddd}t| t jr0t| j}t	|t
 |S t| t jt jfr;|S d S )Nz,Second argument N must be None or an integerFc                    sF   |d u rt | }t| | tjt | t|f d}t| ||| |S r/  )rD   r  r^   r   r  r  )r   rZ  r  r   r   r&   r'   np_vander_impl  s   
z!np_vander.<locals>.np_vander_implc                 S   sR   |d u rt | }t| }t|| tjt | t|f|jd}t|||| |S r/  )rD   r^   r  r  r   r  r   r  )r   rZ  r  x_arrr   r&   r&   r'   np_vander_seq_impl  s   

z%np_vander.<locals>.np_vander_seq_implrk  )r   r  rR   r  r   r  r   r   r^   promote_typesr  rU   rW  )r   rZ  r  r  r  x_dtr&   r   r'   	np_vander  s   

r  c                 C   s@   t |tjtjfstddd }t | tjtjfrdd S |S )Nzshift must be an integerc                 S   sR   t | }t j|j|jd}|j}t|jD ]}|| |j }|| |j|< q|S r/  )r^   rI  r   r}   r   r   r1   r   )r+   shiftrb   r   arr_flatr,   r   r&   r&   r'   np_roll_impl  s   
znp_roll.<locals>.np_roll_implc                 S   r   r*   r  )r+   r  r&   r&   r'   r     r   znp_roll.<locals>.<lambda>)rR   r   r  rU  r   rV  )r+   r  r  r&   r&   r'   np_roll  s   r     c                 C   s|  d}|}| ||d  kr|S | |d k rdS |dkr8d}||k r4| || kr4|d7 }||k r4| || ks&|d S ||d krB|d }|dk rHd}| || k ro| ||d  k rk|d }|t krj| ||t   krj|t  }n2|d S | ||d  k ry|S | ||d  k r|d S |d }||t  d k r| ||t   k r|t  }||k r||| d?  }| || kr|d }n|}||k s|d S )Nr   r)   r      rx   ry   )LIKELY_IN_CACHE_SIZE)keyrb   lengthguessiminimaxr,   imidr&   r&   r'   binary_search_with_guess  sR   
r  c                 C   s  t | }t |}t |}t|dkrtdt|t|kr%td|jdkr5t j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t|D ] }|j	| }||k ro|
|j	|< q^||kry||j	|< q^||j	|< q^|S d}|	|krt j|	d |d}nt jd|d}|jrt|	d D ]2}d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  ||< qt|D ]}|j	| }t |r|}d}|d|  |j	|< qt|||	|}|d	kr|
|j	|< q||	kr||j	|< q||	d kr|| |j	|< q|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)   
fill_valuer   r   r  ra  r   )r^   rI  rD   r{   r   r   r}   r   r1   r   r   r   r   r  )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	  sv   




7




	r  c                    s   t  fdd}|S )Nc              	      s>  t | }t |}t |}t|dkrtdt|t|kr%td|jdkr5t j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t|D ] }|j	| }||k ro|
|j	|< q^||kry||j	|< q^||j	|< q^|S d}|	|krt j|	d |d}nt jd|d}|jrt|	d D ]2}d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  ||< qt|D ]}|j	| }t |r|}d}|d|  |j	|< qt|||	|}|d	kr|
|j	|< q||	kr||j	|< q||	d kr|| |j	|< q|| |kr-|| |j	|< q|jr6|| }n.d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  } rwt| ||||||}||j	|< q|j
|||   || j
 }|j|||   || j }|d|  |j	|< q|S r  )r^   rI  rD   r{   r   r   r}   r   r1   r   r   r   r   r  'np_interp_impl_complex_fp_innermost_117)r   r  r  r   r  r  r  r  r  r  r  r  r  r  r,   r  r  r  r  r   r   r  r   np117_nan_handlingr&   r'   r*  o	  s   
	



<




z5np_interp_impl_complex_fp_inner_factory.<locals>.impl)r
   r  r*  r&   r  r'   'np_interp_impl_complex_fp_inner_factoryn	  s   dr  c           	      C   s   |j |||   || j  }t|r;|j |||d    ||d  j  }t|r;|| j ||d  j kr;|| j }|j|||   || j }t|rv|j|||d    ||d  j }t|rv|| j||d  jkrv|| j}|d|  S )Nr)   r  )r   r^   r   r   )	r   r  r  r  r  r,   r  r   r   r&   r&   r'   r  	  s   	
$"

$"
r  c                 C   s:  t j| t jd}t j|t jd}t j|t jd}t|dkr"t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 ] }|j
| }||k rx|
|j
|< qg||kr||j
|< qg||j
|< qg|S d}|	|kr|dd  |d d  |dd  |d d   }nt jd|d}t	|D ]f}|j
| }t |r||j
|< qt|||	|}|dkr|
|j
|< q||	kr||j
|< q||	d kr|| |j
|< q|jr|| }n||d  ||  ||d  ||   }||||   ||  |j
|< q|S Nr   r   r  r  r)   r  r   r^   rI  r  rD   r{   r   r   r}   r   r1   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'   np_interp_impl_inner	  s\   

,2



( r  c                    r  )Nc                    s  t j| t jd}t j|t jd}t j|t jd}t|dkr"t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 ] }|j
| }||k rx|
|j
|< qg||kr||j
|< qg||j
|< qg|S d}|	|kr|dd  |d d  |dd  |d d   }nt jd|d}t	|D ]}|j
| }t |r||j
|< qt|||	|}|dkr|
|j
|< q||	kr||j
|< q||	d kr|| |j
|< q|| |kr|| |j
|< q|jr|| }n||d  ||  ||d  ||   }||||   ||  |j
|<  rct |j
| rc||||d    ||d   |j
|< t |j
| rc|| ||d  krc|| |j
|< q|S r  r  r  r  r&   r'   r*  E
  sl   

12



(&(z*np_interp_impl_inner_factory.<locals>.implr&   r  r&   r  r'   np_interp_impl_inner_factoryD
  s   Wr  r  c           
         s   t |dr|jdkrtdt |dr|jdkrtdd}t|}t|tjr-t|tdkr6t}t	}ntdkr?t
}t}nt}t}t|}t|tj t tjrX|n| fdd	} fd
d}	t| tjrzt| tjrxt||	S |S )Nrz   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   r  r  r   r   r&   r'   np_interp_impl
  r  z!np_interp.<locals>.np_interp_implc                    s   | || j d S r   r   r  r  r&   r'   np_interp_scalar_impl
  r7  z(np_interp.<locals>.np_interp_scalar_impl)r  rz   r   rx  r^   rz  r{  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_np117r  r  result_typer  rR   r   rV  r   )
r   r  r  complex_dtype_msgxp_dtr*  impl_complexfp_dtr  r  r&   r  r'   	np_interp
  s:   r  c                 C   s`   | j dksJ | j\}}tj|df| jd}t|D ]}t| |d d f | ||df< q|S )Nry   r)   r   r   )rz   r}   r^   r   r   r1   rb  )r+   r   r  r   r,   r&   r&   r'   row_wise_average
  s   
$r  c                 C   sb   |d u r|r	d}nd}| j d | }t|d}| t| 8 } t| t| j}|td|9 }|S )Nr   r)   ra  )r}   r  r  r^   dotr   Tr  )Xbiasddoffactrc   r&   r&   r'   np_cov_impl_inner
  s   
r  c                   C   r   r*   r&   r&   r&   r&   r'   _prepare_cov_input_inner  r   r  c                 C   s&   |d t jfv rdd }|S dd }|S )Nc                 S   s   t t| }|s|j}|S r*   )r^   
atleast_2dr  r  )r   r  rowvarr   m_arrr&   r&   r'   r    s   z9_prepare_cov_input_impl.<locals>._prepare_cov_input_innerc                 S   s   t t| }t t|}|s$|jd dkr|j}|jd dkr$|j}|j\}}|j\}}	||	kr6tdt j|| |f|d}
||
d |d d f< ||
| d d d f< |
S )Nr   r)   z$m and y have incompatible dimensionsr   )r^   r  r  r}   r  r{   r   )r   r  r  r   r  y_arrm_rowsm_colsy_rowsy_colsr   r&   r&   r'   r  %  s   

r  )r   r  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 d S )Nry   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].)rz   r}   r  )r   r   r&   r&   r'   _handle_m_dim_changeB  s   r#  c                 C   ru   r*   r&   r   r&   r&   r'   r   K  r  r   c                    s   t j}t| tjrt| j}|S t| tjtjfrt| }|S t| tj	tj
frbt  | D ]}t|dr> fdd|D  q- | q-t dkrVt jdd  D  }|S t dkrbt  }|S )Nr  c                    s   g | ]}  |qS r&   )add).0rd   coltypesr&   r'   
<listcomp>X      z#determine_dtype.<locals>.<listcomp>r)   c                 S   s   g | ]}t |qS r&   )r   )r%  r   r&   r&   r'   r(  \  s    )r^   r  rR   r   r  r   r   rV  rU  rE   rU   setr  r$  rD   r  r~   )
array_likearray_like_dtr   r&   r&  r'   rx  N  s&   

rx  c                 C   sx   t | tjr| jdkrtd|d S t | tjr6t | jd tjr8t | jd jd tjr:td|d S d S d S )Nry   z{0} has more than 2 dimensionsr   )rR   r   r  rz   rT  r   rW  r  )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)r^   r  r{   r  )r  r&   r&   r'   _handle_ddofm  s
   
r/  c                 C   ru   r*   r&   r   r&   r&   r'   r   u  r  c                 C   s   ||  || t | |||S r*   )r  )r   r  r  r   r  _DDOF_HANDLER_M_DIM_HANDLERr&   r&   r'   _prepare_cov_inputx  s   r2  c                 C   s   |d t jfv }t| t jr| jdkr|S t| t jr8tdd | j D r&|S t| j dkr8t| j d t jr8|S t| t jt j	frC|S t| t j
rVt| jd t j
sV|rVdS dS )Nr)   c                 s   s"    | ]}t |tjtjfV  qd S r*   )rR   r   rV  rU  r%  r   r&   r&   r'   	<genexpr>  s    z)scalar_result_expected.<locals>.<genexpr>r   TF)r   r  rR   r  rz   	BaseTupler/  rD   rV  rU  rW  r  )mandatory_inputoptional_inputopt_is_noner&   r&   r'   scalar_result_expected  s(   r9  c                 C   s   t t | dkt | | S r   )r^   rh  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v rt nt|tjtjfr t nt|tjr)t nt	dt
t| tjr7tt| }t|}t||tjd
 fdd	}		 d
 fdd		}t| |rb|S |S )Nr   r  z)ddof must be a real numerical scalar typeTFc                    s^   t | ||| }tt|jdkr)tj|jd |jd ftjdS t|||S )Nr   r  )	r2  rO  r^   rZ  r  r}   r   r  r  )r   r  r  r  r  r  r0  r1  r   r&   r'   np_cov_impl  s   znp_cov.<locals>.np_cov_implc                    sT   t | ||| }tt|jdkrtj}n	t|||jd }t|S r   )	r2  rO  r^   rZ  r  r}   r  r  r   )r   r  r  r  r  r  variancer>  r&   r'   np_cov_impl_single_variable  s   
z+np_cov.<locals>.np_cov_impl_single_variableNTFN)r.  r   r  _handle_ddof_noprR   r  rU  r   r/  r   _handle_m_dim_nopr  r#  rx  r^   r  r  r9  )	r   r  r  r  r  m_dty_dtr?  rA  r&   r>  r'   np_cov  s,   



rG  c                    s^   t | }t |}t||tj}|tjkrt nt d fdd	}ddd}t| |r-|S |S )NTc                    sp   t | ||}t |}t |j}t|jd D ]}||d d f  |  < |d d |f  |  < q |S r   )r^   covdiagsqrtr   r1   r}   )r   r  r  rc   r  stddevr,   clip_fnr&   r'   np_corrcoef_impl  s   
z%np_corrcoef.<locals>.np_corrcoef_implc                 S   s   t | ||}|| S r*   )r^   rH  )r   r  r  rc   r&   r&   r'    np_corrcoef_impl_single_variable  s   z5np_corrcoef.<locals>.np_corrcoef_impl_single_variableNT)rx  r^   r  r  complex_r=  r<  r9  )r   r  r  r  rF  r   rN  rO  r&   rL  r'   np_corrcoef  s   


rR  c                    s   t dkot| tjtjf}t| r,|s,t dk rtdd  ntdd   fdd}|S t dk r5ddnd	d
fdd}|S )Nr   c                 S   r~  r*   )r^   rZ  r   r&   r&   r'   r     r  znp_argwhere.<locals>.<lambda>c                 S   rj  rP  r&   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   )	r^   rI  r}   zerosr   r3   r!  vstackr~  r  )checkr&   r'   r*    s   
znp_argwhere.<locals>.implrS  )r)   r)   )r   r   )r)   r   c                    s0   | d urt | rtjtjdS tj tjdS r/  )boolr^   rT  r   r3   r  )falseishtrueishr&   r'   r*     s   )r   rR   r   rV  rU  r   r
   )r+   
use_scalarr*  r&   )rV  rX  rY  r'   np_argwhere  s    r[  c                 C   s    t | r
dd }|S dd }|S )Nc                 S   s   t | }t t |d S r   )r^   rI  r~  r"  r  r&   r&   r'   r*  -  s   
znp_flatnonzero.<locals>.implc                 S   s:   | d u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&   r3  r&   r&   r'   r(  5  rp  z0np_flatnonzero.<locals>.impl.<locals>.<listcomp>r   )rW  r1   r^   r  r   r3   )r+   r>   r&   r&   r'   r*  1  s   rq  )r+   r*  r&   r&   r'   np_flatnonzero)  s
   r\  c                 C   s   | j dkr(| jd }| jd }d| }|r|| }||fS |t|| }||fS t| j}tt|dks<tddt|d d 	  }|
 }||fS )Nry   r   r)   z/All dimensions of input must be of equal lengthr   )rz   r}   r  r^   r  r/  r  r{   r  rb  prod)r+   wrapr   r  stepr  r}   r&   r&   r'   _fill_diagonal_params;  s   



r`  c                 C   s.   t | |\}}td||D ]}|| j|< qd S r   )r`  r1   r   )r+   r   r^  r  r_  r,   r&   r&   r'   _fill_diagonal_scalarQ  s   ra  c                 C   sN   t | |\}}d}t|}td||D ]}|| | j|< |d7 }|| }qd S rD  )r`  rD   r1   r   )r+   r   r^  r  r_  ctrv_lenr,   r&   r&   r'   _fill_diagonalY  s   
rd  c                 C   sR   t | j}|j}|j}t t | s#t ||k s#t ||kr'tdd S Nz'Unable to safely conform val to a.dtype)r^   iinfor   r  r  rZ  r  r{   )r+   r   rf  v_minv_maxr&   r&   r'   _check_val_inte  s   .ri  c                 C   sN   t | j}|j}|j}|t | }t ||k s!t ||kr%tdd S re  )r^   finfor   r  r  r  rZ  r{   )r+   r   rj  rg  rh  finite_valsr&   r&   r'   _check_val_floatp  s   rl  c                 C   ru   r*   r&   r   r  r&   r&   r'   r   }  r  c                 C   r   r*   r&   r   r&   r&   r'   r    r   r  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r*t|   fddS d S )Nc                 S   ru   r*   r&   r   r&   r&   r'   r     r  z_asarray_impl.<locals>.<lambda>c                 S   r   r*   r  r   r&   r&   r'   r     r   c                    s   t j| g dS r/  r  r   r   r&   r'   r     rp  )rR   r   r  rW  rU   rV  rU  r   r   r&   rn  r'   _asarray_impl  s   ro  c                    s   | j dkrEt| jtjrt nt| jtjrt nt d fdd	}d fdd	}t|tjtjtj	fr6|S t|tj
tjtjfrC|S d S d| j  }t|)	Nr)   Fc                    s&   t | } | | t| || d S r*   )r  r	  ra  r+   r   r^  tmpvalcheckerr&   r'   scalar_impl     
z%np_fill_diagonal.<locals>.scalar_implc                    s&   t | } | | t| || d S r*   )r  r	  rd  rp  rr  r&   r'   non_scalar_impl  ru  z)np_fill_diagonal.<locals>.non_scalar_implz4The first argument must be at least 2-D (found %s-D)F)rz   rR   r   r   r  ri  r   rl  
_check_noprU  rU   rW  r  r   )r+   r   r^  rt  rv  r   r&   rr  r'   np_fill_diagonal  s   

ry  c                 C   s   d| j f S )Nzllvm.rint.f%d)bitwidth)tpr&   r&   r'   _np_round_intrinsic  s   r|  c                 C   s@   |  |}|j}tj||g}t||t|}|||fS r*   )	r/   modulellvmliteirFunctionTyper   get_or_insert_functionr|  call)rp   r7   r{  r   lltyr}  fntyr  r&   r&   r'   _np_round_float  s
   
r  c                 C   s(   t | ||jd |d }t| ||j|S r   )r  r8   r   rm   rp   r7   rq   r8   rr   r&   r&   r'   scalar_round_unary_float  s   r  c                 C   s   |d }t | ||j|S r   )r   rm   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   )	r8   underlying_floatmake_complexr  r   r   	_getvaluer   rm   )rp   r7   rq   r8   flttyru  rr   r&   r&   r'   scalar_round_unary_complex  s   r  c                 C   r   )Nc                 S   s   t | s
t | r| S |dkr9|dkrd|d  }d}nd| }d}| | | }t |r0| S t|| | S d|  }| | }t|| S )Nr      g      $@gMDr8  )r  r9  r   r^   round)r   ndigitspow1pow2r  r&   r&   r'   round_ndigits  s   

z0scalar_round_binary_float.<locals>.round_ndigitsr   rp   r7   rq   r8   r  rr   r&   r&   r'   scalar_round_binary_float  s   r  c                 C   r   )Nc                 S   s   t t| j|t| j|S r*   )complexr^   r  r   r   )ru  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   r   )Nc                 S   s<   | j |j kr
tdt| D ]\}}t||||< q|S )Nzinvalid output shape)r}   r{   r^   rQ  r  )rb   decimalsr   rS  r   r&   r&   r'   array_round_impl  s
   z%array_round.<locals>.array_round_implr4   r   rm   )rp   r7   rq   r8   r  rr   r&   r&   r'   array_round  s   r  c                 C   r   )Nc                 S   s0   t | }t | D ]\}}t |||< q
|S r*   )r^   ri  rQ  sinc)rb   r   rS  r   r&   r&   r'   array_sinc_impl  s   
z#array_sinc.<locals>.array_sinc_implr  )rp   r7   rq   r8   r  rr   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 )Nra  g#B;)r^   pisinr  r&   r&   r'   scalar_sinc_impl   s   
z%scalar_sinc.<locals>.scalar_sinc_implri   rj   r   )rp   r7   rq   r8   r   r  rr   r&   r&   r'   scalar_sinc  s   r  c                    sp   | dtj   fdd}t|dkr(|tjf }t|j g|jtj	f R  }| 
||||}t| ||j |S )N   c                    s(   |rt | j| j  S t | j| jS r*   )r^   arctan2r   r   )r   degdeg_multr&   r'   scalar_angle_impl/  s   z-scalar_angle_kwarg.<locals>.scalar_angle_implr)   )rm   r^   r  rD   r   	false_bitr   r8   r   booleanr4   r   )rp   r7   rq   r8   r  rr   r&   r  r'   scalar_angle_kwarg*  s   r  c                    sh   |j j  fdd}t|dkr$|tjf }t|j g|jtjf R  }| 	||||}t
| ||j |S )Nc                    s6   t j|  d}t | D ]\}}t ||||< q|S r/  )r^   ri  rQ  angle)rb   r  r   rS  r   	ret_dtyper&   r'   array_angle_implB  s   z+array_angle_kwarg.<locals>.array_angle_implr)   )rm   r   rD   r   r  r   r8   r   r  r4   r   )rp   r7   rq   r8   r  rr   r&   r  r'   array_angle_kwarg=  s   r  zarray.nonzeroc                    s  |j d }|j}|j|j}t| |d }t |j}t |j}	|j	}
|j
}tjd}tjd}t |}t ||jD}t |
||	||}t ||} |j|} |    ||| W d    n1 sw   Y  W d    n1 sw   Y   |f fddt|D } fdd|D }dd |D }t |}t ||jk}t |
||	||}t ||} |j|} |; |s|f} |}t|D ]}t || dd|g}t || | q  ||| W d    n	1 s'w   Y  W d    n	1 s7w   Y   |j|}t |j|S )	Nr   r)   c                    s   g | ]}t   qS r&   )r   r  )r%  r,   r7   rp   	out_shapeoutarytyr&   r'   r(  n  s    z!array_nonzero.<locals>.<listcomp>c                    s   g | ]
}t  |qS r&   )r   r%  r   )r7   rp   r  r&   r'   r(  p  s    c                 S   s   g | ]}|j qS r&   )r>   r  r&   r&   r'   r(  q  s    r&   C)r8   rm   r   r  r   r   unpack_tupler}   stridesr>   layoutr2   r   r3   alloca_once_value	loop_nestr   get_item_pointer2r   is_trueif_thenstorer$  loadr1   r   
make_tupler   )rp   r7   rq   r8   arytyr   noutsr  r}   r  r>   r  rf   r  r  indicesptrr   nzoutsoutarys	out_datasrS  curr,   r:   r&   r  r'   array_nonzeroP  sh   
	
r  c                    s   t dd |jD }tt|jd jt|jd j |t dks(|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'   r4    s    zarray_where.<locals>.<genexpr>r)   ry   r  Fc           
         sx   | j }|j |ks|j |krtdtj| d}| j}|j}|j}|j}t| jD ]}	||	 r3||	 n||	 ||	< q)|S Nz%all inputs should have the same shaper   )r}   r{   r^   rG  r   r1   r   )
condr   r  r}   rr   cfxf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 ]\}}|r(|| n|| ||< q|S r  )r}   r{   r^   r   rQ  )r  r   r  r}   rr   r   rc   r  r&   r'   r    s   )	r*  r8   r^   r  r   r   r4   r   rm   )rp   r7   rq   r8   layoutsr  rr   r&   r  r'   array_where  s   	r  c                 C   s(   t | D ]\}}|r|n|||< q|S r*   r^   rQ  r  r   r  rr   r   rc   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     r  c                 C   s,   t | D ]\}}|r|| n|||< q|S r*   r  r  r&   r&   r'   _where_y_scalar  r  r  c                    sp   |j \}}}t|}t|}	t||	|jdkr! fdd}
n fdd}
| ||
||}t| ||j|S )Nr  c                    s$   t t j| jd} | |||S r/  )r^   asfortranarrayr   r}   r  r   r  rr   r*  r  r&   r'   r    s   z _where_inner.<locals>.where_implc                    s   t j| jd} | |||S r/  )r^   r   r}   r  r  r&   r'   r    s   )r8   rx  r^   r  r  r4   r   rm   )rp   r7   rq   r8   r*  r  r   r  r  rF  r  rr   r&   r  r'   _where_inner  s   
r  )r*  c           
      C   s   |j \}}}t|tjrKt|tjr't|tjrt}n)t|tjtjfr&t}nt|tjtjfrDt|tjr9t}nt|tjtjfrDt	}|| |||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&   )r^   rG  )r  r   r  scalrb   r&   r&   r'   scalar_where_impl  s   
z$any_where.<locals>.scalar_where_impl)r8   rR   r   r  r  rV  rU  array_array_scalar_wherearray_scalar_array_wherearray_scalar_scalar_wherer4   r   rm   )
rp   r7   rq   r8   r  r   r  r*  r  rr   r&   r&   r'   	any_where  s"   r  c                 C   r0  )Nc                 S      | j S r*   )r   r  r&   r&   r'   np_real_impl     znp_real.<locals>.np_real_implr&   )r+   r  r&   r&   r'   np_real     r  c                 C   r0  )Nc                 S   r  r*   )r   r  r&   r&   r'   np_imag_impl	  r  znp_imag.<locals>.np_imag_implr&   )r+   r  r&   r&   r'   np_imag  r  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[  )r^   r_   )rb   r  r   r&   r&   r'   np_contains_impl  r3  z%np_contains.<locals>.np_contains_implr  )rb   r  r  r&   r&   r'   np_contains  s   r  c                 C   s4   t | stdt|rddd}|S ddd}|S )Nz3The argument to np.count_nonzero must be array-likec                 S   s   t | }t |dkS r   )r^   r"  rb  rb   rW   arr2r&   r&   r'   r*  &  s   
znp_count_nonzero.<locals>.implc                 S   s   |  tj}tj||dS )N)rW   )rO  r^   bool_rb  r  r&   r&   r'   r*  *  s   r*   )r   r   r   )rb   rW   r*  r&   r&   r'   np_count_nonzero   s   

r  c                 C   ru   r*   r&   r   r&   r&   r'   r   1  r  c                 C   r   r*   r  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r6t |tjr!t nt |jtjs,tdt	  fdd}|S t |tjs@tdd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)r^   r"  rI  r   onesr  )rb   r  rZ  keephandlerr&   r'   np_delete_implE  s   z!np_delete.<locals>.np_delete_implc                 S   sf   t t | } | j}|}|| k s||krtd|dk r"||7 }t | d | | |d d  fS )Nz"obj must be less than the len(arr)r   r)   )r^   r"  rI  r   
IndexErrorconcatenate)rb   r  rZ  posr&   r&   r'   np_delete_scalar_implS  s   "z(np_delete.<locals>.np_delete_scalar_impl)
rR   r   r  rW  r   	SliceTypenp_delete_handler_isslicer   r  np_delete_handler_isarray)rb   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r2|S | d|f}|d|jd f}t|| j}t	|jd D ]D}t	|d D ]}	|||	d f |||	f  ||	< qYt	d|D ]}
t	||
 d D ]}	||	d  ||	  ||	< q{qq|d ||  ||< qQ|S )Nr   z"diff(): order must be non-negativer   r)   )
rI  r{   r}   r  r^   r   r   r   r#  r1   )r+   r  r   r  r   a2out2workmajorr,   niterr&   r&   r'   	diff_impli  s*   

"znp_diff_impl.<locals>.diff_implr  )rR   r   r  rz   )r+   r  r  r&   r&   r'   np_diff_impld  s   
r  c                 C   sP   t | rt |stdtjtjf}t| |r"t||r"dd }|S dd }|S )Nz3Both arguments to "array_equals" must be array-likec                 S   s   | |kS r*   r&   r  r&   r&   r'   r*    r.   znp_array_equal.<locals>.implc                 S   s2   t | } t |}| j|jkrt | |kS dS rk  )r^   rI  r}   r/  r  r&   r&   r'   r*    s
   

)r   r   r   rU  rV  rR   )r+   rE  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   )r^   rI  rR  r  sort)ar1ar2auxrk  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   sF   t |tjr|jdkrtd| d S t |tjs!td| d S )Nr)   z${0}(): input should have dimension 1z+{0}(): input should be an array or sequence)rR   r   r  rz   rT  r   rW  )	func_nameseqr&   r&   r'   validate_1d_array_like  s   
r  c                    s   t d|  t| jtjsd S t|d |d tjfv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)rD   r{   r+   r_  r  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     znp_bincount.<locals>.count_itemc                 S   r   r*   r&   r  r&   r&   r'   r    rw   c                 S   s   | |  d7  < d S r   r&   r  r&   r&   r'   r    s   r   c                    s   | || |dk rt dt| }|dkr| d nd}td|D ]}| | dk r-t dt|| | }q!t|d |}t|}t|D ]} ||| | | qF|S )Nr   z 'minlength' must not be negativer   r)   z/bincount(): first argument must be non-negative)r{   rD   r1   r  r^   rT  )r+   r_  r  r  r  r,   
out_lengthr   r  r  r  r&   r'   bincount_impl  s   z"np_bincount.<locals>.bincount_implr   )r  rR   r   r   r  r   r  r^   r  r
   r3   )r+   r_  r  r  r&   r  r'   np_bincount  s$   





r  c                    r  )Nc                    s   t |rt|ddD ]}t | |d  s|  S qdS ||k r$|}nd}||k r.|d n|}||krL|| d? } | | |rF|d }n|}||ks4|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)   )r^   r   r1   )r+   rd   v_lastlohir  r,   r  funcr&   r'   searchsorted_inner  s"   

z)_searchsorted.<locals>.searchsorted_innerr&   )r$  r%  r&   r#  r'   _searchsorted  s   .r&  c                 C   s   | |kS r*   r&   rm  r&   r&   r'   r   /  r   leftc                    s   t |d|}|dkrt n|dkrt ntd| t|tjr*d	 fdd	}|S t|tjr9d	 fdd	}|S d	 fdd	}|S )
NrT   r'  rightz Invalid value given for 'side': c           
         sn   t | }d}|}t|jtj}|jd }t||fD ]\}}	 | | ||||}| }|	| q|S r   )	rD   r^   r   r}   r3   r   r_   r`   itemset)
r+   rd   sider  r!  r"  r   r   r   outview	loop_implr&   r'   searchsorted_impl@  s   
z'searchsorted.<locals>.searchsorted_implc           	         sf   t | }d}|}tt |tj}|d }tt |D ]} | || ||||}|||< || }q|S r   )rD   r^   r   r3   r1   )	r+   rd   r*  r  r!  r"  r   r   r,   r,  r&   r'   r.  N  s   
c                    s   t | } | ||d||S r   )rD   )r+   rd   r*  r  r,  r&   r'   r.  \  s   r'  )r   _searchsorted_left_searchsorted_rightr   rR   r   r  rW  )r+   rd   r*  side_valr.  r&   r,  r'   searchsorted4  s    r3  c                    sl   t dd  t dd t dd t| tjr#d fdd		}|S t| tjr4d fd
d		}|S d S )Nc                 S   sl   t | }d}d}|dkr4| d }td|D ]}| | }|o!||k }|o(||k  }|s1|s1td|}q|S )NTr)   r   z3bins must be monotonically increasing or decreasing)rD   r1   r{   )binsr  is_increasingis_decreasingprevr,   r  r&   r&   r'   are_bins_increasinge  s   z(np_digitize.<locals>.are_bins_increasingc                 S   s   t |}d}|}|rDt| r't|ddD ]}t||d  s$|  S qdS ||krB|| d? }|| | k r<|d }n|}||ks+|S t| rK|S ||krf|| d? }|| | kr`|d }n|}||ksO|S )Nr   r   r)   rD   r^   r   r1   r   r4  r(  r  r!  r"  r,   r  r&   r&   r'   digitize_scalary  s4   



	z$np_digitize.<locals>.digitize_scalarc                 S   s   t |}d}|}|rAt| r$td|D ]}t|| s!|  S q|S ||kr?|| d? }|| | k r7|}n|d }||ks(|S t| rHdS ||krc|| d? }|| | kr[|}n|d }||ksL|S rD  r9  r:  r&   r&   r'   digitize_scalar_decreasing  s4   

	z/np_digitize.<locals>.digitize_scalar_decreasingFc                    sd    |}t | jt j}t | |fD ]\}}|r"| ||}n| ||}|| q|S r*   )r^   r   r}   r3   r_   r`   r)  )r   r4  r(  r5  r   r   r+  rS  r8  r;  r<  r&   r'   digitize_impl  s   z"np_digitize.<locals>.digitize_implc                    s^    |}t t| t j}tt| D ]}|r"| | ||||< q| | ||||< q|S r*   )r^   r   rD   r3   r1   )r   r4  r(  r5  r   r,   r=  r&   r'   r>    s   rw  )r
   rR   r   r  rW  )r   r4  r(  r>  r&   r=  r'   np_digitizec  s   

%
$
r?  r$  c                    sT   t |ttjfr#|d tjfv rtd d fdd	}|S ddd}|S ddd}|S )Nr  r$  c                    sL    }  }t | D ]}| }||kr|}||k r|}q
t | |||fS r*   )r^   r_   r`   	histogram)r+   r4  r1   bin_minbin_maxr   rd   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 ]4}| }t|| | }	d|	  krC|k rPn n|t|	  d7  < q*||kr^||d   d7  < q*t	|||d }
||
fS )Nr   z0histogram(): `bins` should be a positive integerz;histogram(): max must be larger than min in range parameterr)   )
r{   r^   rT  r3   r_   r`   r  r  r  linspace)r+   r4  r1   rA  rB  hist	bin_ratior   rd   rE  
bins_arrayr&   r&   r'   rD    s$   c                 S   s   t |d }t|D ]}|| ||d  kstdq
|d }|| }t|tj}|dkrqt| D ]=}| }	||	  krC|ksEn q3d}
|d }|
|k rh|
| d d? }|	|| k rb|d }n|}
|
|k sO||
  d7  < q3||fS )Nr)   z-histogram(): bins must increase monotonicallyr   )rD   _ranger{   r^   rT  r3   r_   r`   )r+   r4  r1   nbinsr,   rA  rB  rF  r   rd   r!  r"  r  r&   r&   r'   rD    s.   
r$  N)rR   r  r   r  r  float)r+   r4  r1   rD  r&   rC  r'   np_histogram  s   G
;
!rM  )ibetar   machepepsnegepepsnegiexpminexpxminmaxexpxmaxirndngrdepsilontinyhuge	precision
resolutionMachAr)rP  rR  rS  rO  r  rV  r  rT  rQ  nexpnmantr]  r^  r[  bitsrj  )r  r  rb  rf  c                     sp   t dk d tjddd} tjd| tdd tjW d    n1 s%w   Y  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  r$r$d } t| jjd t| j| j  fdd}|S )Nc                       g | ]}t  |qS r&   r  r3  r  r&   r'   r(  `  r)  z7_gen_np_machar.<locals>.MachAr_impl.<locals>.<listcomp>r   c                      s   t   S r*   )r_  r&   )_mach_ar_datar&   r'   r*  i  r.   z1_gen_np_machar.<locals>.MachAr_impl.<locals>.impl)	r+  _mach_ar_supportedwarningswarn_explicitre  r8   r!   filenamelineno)wmsgr*  	np122plus	np_MachArw)ri  r  r'   MachAr_impl]  s   z#_gen_np_machar.<locals>.MachAr_impl)r   rk  catch_warningsfilterwarningsDeprecationWarningr^   r_  r   )r   rt  r&   rp  r'   _gen_np_macharS  s   rx  c                    s   t  fdd}d S )Nc                    s^   t | d| }t|}z|W n
 ty   Y d S w tfddD   fdd}|S )Nr   c                    rg  r&   r  r3  rh  r&   r'   r(  {  r)  z6generate_xinfo.<locals>.xinfo_impl.<locals>.<listcomp>c                    s     S r*   r&   )arg)	containerr>   r&   r'   r*  }  r.   z0generate_xinfo.<locals>.xinfo_impl.<locals>.impl)r   r   r{   r+  )ry  nbtynp_dtyper*  attrrz  np_func)r>   r  r'   
xinfo_implr  s   z"generate_xinfo.<locals>.xinfo_impl)r   )r  rz  r~  r  r&   r}  r'   generate_xinfoq  s   r  c                    sh   t dd }ts
|S tjtjB }| |v o||v }|s|S t| }t|}t|| t  fdd}|S )Nc                 S   s.   d}t t| D ]}|| | ||   }q|S r   r1   rD   )r+   rE  accr,   r&   r&   r'   
_innerprod  s   z#_get_inner_prod.<locals>._innerprodc                    s   t |  | S r*   )r^   r  rO  r  r|  r&   r'   	_dot_wrap  r  z"_get_inner_prod.<locals>._dot_wrap)r
   
_HAVE_BLASr   real_domaincomplex_domainr   r^   r  )dtadtbr  flty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 d S )Nr)   z!%s() only supported on 1D arrays )rR   r   r  rz   r   )r+   r  r&   r&   r'   
_assert_1d  s
   
r  c                 C   r   r*   r&   )ap1ap2mode	directionr&   r&   r'   _np_correlate_core  r   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)   ry   N)__name__
__module____qualname____doc__VALID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r*|| d }d}d}	n| jkr>|d }	|d }|| d }ntdt|}
|| }|dkrUd}d}n|dkr`|d }d}ntdt|D ]}| d |d  ||d  d  |
|< || }qht|| d D ]}| |||  ||
|< || }qt|	ddD ]}| | d  |d | |
|< || }q|
S )NzInvalid moder)   r   r   zInvalid direction)r  r  r{   rD   r^   rT  r1   )r  r  r  r  n1n2r  r  n_leftn_rightr  r   incr,   Moder|  	innerprodr&   r'   r*    sD   	

(

 
z%_np_correlate_core_impl.<locals>.impl)r   r   r^   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v r.|jtjv r)||n||n|jtjv r9||n||tdk fdd}|S )	Nznp.correlatec                 S   r   r*   )r^   r   r   r&   r&   r'   op_conj  s   
z_np_correlate.<locals>.op_conjc                 S   ru   r*   r&   r   r&   r&   r'   op_nop  rw   z_np_correlate.<locals>.op_nopr   c                    sp   t | }t |}du r|dkrtd|dkrtd||k r,t||  jdS t| | jdS )NTr   'a' cannot be empty'v' cannot be emptyr   r)   )rD   r{   r  r  r+   rd   lalvr  _NP_PREDa_opb_opr&   r'   r*    s   z_np_correlate.<locals>.impl)r  r
   r  r   r   r  r   )r+   rd   r  r  r*  r&   r  r'   _np_correlate  s*   



r  c                    s(   t | d t |d t  fdd}|S )Nznp.convolvec                    sl   t | }t |}|dkrtd|dkrtd||k r)t|| d d d  jdS t| |d d d  jdS )Nr   r  r  r   r)   )rD   r{   r  r  r  r  r&   r'   r*  /  s   znp_convolve.<locals>.impl)r  r  )r+   rd   r*  r&   r  r'   np_convolve(  s
   

r  c                    s6  t | sd S d }t| tjr&t|s| j|jkrd
dd}|S d
dd}|S t| tjtjfrAt|r:d
dd}|S d
dd}|S t| tjtj	fr_t|rP| n|}t
|d
fdd	}|S t| tjjrt| jtjtj	fsttdt|r{| jn|d
fdd	}|S t| tjrt| j d
 fd	d	}|S )Nc                 S   ru   r*   r&   r+   r   r&   r&   r'   r*  K  r   znp_asarray.<locals>.implc                 S   s
   |  |S r*   )rO  r  r&   r&   r'   r*  N  rL   c                 S   r   r*   r  r  r&   r&   r'   r*  U  rL   c                 S   s   t | |S r*   r  r  r&   r&   r'   r*  X  r   c                       t |  S r*   r  r  rn  r&   r'   r*  ^  r   z?asarray support for List is limited to Boolean and Number typesc                    s4   t | }tj| d}t| D ]\}}|||< q|S r/  )rD   r^   r   r   )r+   r   r  r  r,   rd   )target_dtyper&   r'   r*  h  s
   
c                    s      S r*   )rI  r  r  r&   r'   r*  q  r.   r*   )r   rR   r   r  r   r   rW  rU   rV  rU  r   
containersListTyper   StringLiteralr^   rI  rT   )r+   r   r*  dt_convr&   )rb   r  r   r'   
np_asarray@  s@   
)
&

r  c                    sD   t |tjr
t|}t|tjstj n| tjf fdd	}|S )Nc                    r  r*   r  r  r  r&   r'   r*    r   znp_asfarray.<locals>.impl)rR   r   Typer   r^   rz  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  r+j jkr+d}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&   r  )r%  r   r+   r  r&   r'   r(    s    z7np_extract.<locals>.np_extract_impl.<locals>.<listcomp>)	r^   rI  r	  r   r{   rZ  r  r1   r  )	conditionrb   r   max_lenr   r&   r  r'   np_extract_impl  s   

 
z#np_extract.<locals>.np_extract_implr&   )r  rb   r  r&   r&   r'   
np_extract  s   r  c                 C   sF  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s-tdt | d tjs9tdt |d tjsEtdt | d tjrZt | d j	tjsZtd	t | d tjrxt | d tjrtt | d d tjsxtd
t | d tjr| d j
|d j
krtdt | d tjr| d j
dk rtd|S )Nr   c                 S   sp   t | t |krtd|t|d j|d j }tt | d ddD ]}| | }|| }t|||}q$|S )Nz7list of cases must be same length as list of conditionsr   r)   r   )rD   r{   r^   r  r}   r   r1   rh  )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 1ry  )rR   r   ListrE   r    r  rV  rU  r  r   rz   )r  r  r  r  r&   r&   r'   	np_select  s4   
r  c                    sh   d}t | tjtjtjfst|t|r| j nzt| W n t	y*   tdw 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)r^   rI  r_   r  r{   )r+   r   r,   r  r&   r'   r*    s   
z"np_asarray_chkfinite.<locals>.implr*   )
rR   r   r  rW  rU   r   r   r   r   r   )r+   r   r   r*  r&   r  r'   np_asarray_chkfinite  s   r  c                 C   s   t dkr$td|  | d}tt|dd|| d   d|| d   S t| }tt|| d d d| | d  dd| | d   S )Nr)      r8  ry   r   r)   r  )r   r^   arangerh  
less_equalr[  r  r&   r&   r'   np_bartlett_impl  s   .
$r  c                 C   s   t dkr-t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 )
Nr  r8  ry   gzG?r   r)   g{Gz?r  g      @r   r^   r  cosr  r  r&   r&   r'   np_blackman_impl  s   
"r  c                 C   sh   t dkrtd|  | d}ddttj| | d    S t| }ddtdtj | | d    S )Nr  r)   ry   gHzG?gq=
ףp?r  r  r  r&   r&   r'   np_hamming_impl  
    
$r  c                 C   sh   t dkrtd|  | d}ddttj| | d    S t| }ddtdtj | | d    S )Nr  r)   ry   r   r  r  r  r&   r&   r'   np_hanning_impl  r  r  c                    r  )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rt jdt jdS  | S )Nr)   r&   r   )r^   r  float_r  )r[  r#  r&   r'   window_impl$  s
   z>window_generator.<locals>.window_overload.<locals>.window_impl)rR   r   r  r   )r[  r  r#  r&   r'   window_overload   s   z)window_generator.<locals>.window_overloadr&   )r$  r  r&   r#  r'   window_generator  r  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   ra  r)   r   r  )r   valsb0b1r,   b2r&   r&   r'   _chbevlt  s   r  c                 C   s\   | dk r|  } | dkrd|  d }t | t|t S t | td|  d t t |  S )Nr   g       @r   r  g      @@)r^   expr  _i0A_i0BrJ  rm  r&   r&   r'   _i0  s   &r  c                 C   sb   t j| t jd}tt |}tt|D ]}t|t d| | | | d   | ||< q|S )Nr   r)   r  )r^   rG  r  r  r1   rD   rJ  )r  alphabetar  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rt jdt jdS t d| }| d d }t|||S )Nr)   r&   r   r   r  )r^   r  r  r  r  r  )r[  r  r  r  r&   r&   r'   np_kaiser_impl  s   z!np_kaiser.<locals>.np_kaiser_impl)rR   r   r  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   rx   .ry   r   )r}   r^   rd  r   r   )r   x0x1x2r&   r&   r'   _cross_preprocessing  s   

z._cross_operation.<locals>._cross_preprocessingr  r  r  )r^   rd  )r+   rE  r   r  a0a1r  r  r  r  cp0cp1cp2r&   r&   r'   _cross_operation  s   	r  c                    sL   t t| jt|j | jdkr|jdkr fdd}|S  fdd}|S )Nr)   c                    s   t d }t| || |S )Nrx   )r^   r   r  )r+   rE  cpr   r&   r'   r*    s   z_cross_impl.<locals>.implc                    s6   t | d |d j}t |d  }t| || |S )Nr  r  )r^   r$  r}   r   r  )r+   rE  r}   r  r   r&   r'   r*    s   )r^   r  r   r   rz   r+   rE  r*  r&   r   r'   _cross_impl  s   
r  c                 C   $   t | rt |stddd }|S )NInputs must be array-like.c                 S   sf   t | }t |}|jd dvs|jd dvrtd|jd dks*|jd dkr/t||S td)Nr   )ry   rx   zDIncompatible dimensions for cross product
(dimension must be 2 or 3)rx   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`.)r^   rI  r}   r{   r  r+   rE  a_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)r^   rd  rI  )r+   rE  r  r  r  r  r  r  r&   r&   r'   _cross2d_operation  s
   
r  c                 C   r   )Nr  c                 S   sB   t | }t |}|jd dks|jd dkrtdt||S )Nr   ry   zRIncompatible dimensions for 2D cross product
(dimension must be 2 for both inputs))r^   rI  r}   r{   r  r  r&   r&   r'   r*    s   


zcross2d.<locals>.implr  r  r&   r&   r'   cross2d  s   
r  r*   rS  rg  r   ry  r  r  rk  rB  rP  rw  r  r/  rK  (  r  r  collectionsr   enumr   	functoolsr   operatorrk  llvmlite.irr~  numpyr^   numbar   
numba.corer   r   numba.core.extendingr   r	   r
   numba.np.numpy_supportr   r   r   r   r   numba.core.imputilsr   r   r   r   numba.core.typingr   numba.np.arrayobjr   r   r   r   numba.np.linalgr   r   numba.core.errorsr   r   r   r   r    r!   numba.core.overload_gluer"   numba.cpython.unsafe.tupler#   r(   r  rI   r[   rb  r  rs   rv   r   r3   	DTypeSpecIntegerLiteralr   r   r   r]  r   r  r   r  r   r   r   r   r   stdr   r   r   r   r  r   r  r  r  r  r  r  r  r  r  r  r  r,  r.  r/  r4  rB  rC  rY  rZ  r]  averageri  rm  	iscomplexrr  isrealrt  r}  r  isscalarr  r  r  r  r  r  r  r  r  r  r  r  nanminr  nanmaxr  r  r  r  r  nanstdr  nansumr  nanprodr  
nancumprodr  	nancumsumr  r  r  r  r  r  r  r  r  r  r  _partition_w_nanr  r  rJ  r  r  medianr  r   r#  r'  r,  r.  r2  r:  r  r>  nanpercentiler@  quantilerB  nanquantilerC  	nanmedianrF  rN  rT  	partitionrY  r]  rf  r_  ra  rl  trilrz  r  r  tril_indices_fromr  r  triur  r  r  triu_indices_fromr  r  r  r  ediff1dr  r  r  r  r  trapzr  r  r  vanderr  rollr  r  r  r  r  r  r  r  r  r  r	  r
  interpr  r  r  r  r"  r#  rD  rx  r.  r/  rC  r2  r9  r<  r=  rH  rG  corrcoefrR  argwherer[  flatnonzeror\  r`  ra  rd  ri  rl  rx  r  ro  fill_diagonalry  r|  r  aroundr   r  r  r  r  r   r  r  r  r  r  r  rV  r  r  rU  r  r  r~  rh  r  r  r  r  r  r  r  r  r  Anyr  r   r  r   r  containsr  count_nonzeror  r  r  deleter   r  r  array_equalr	  intersect1dr  r  r  r  r&  _lt_ler0  r1  r3  digitizer?  r1   rI  r@  rM  rj  r_  _finfo_supportedrj  _iinfo_supportedrf  rx  r  r  r  r  r  r  	correlater  convolver  rI  r  asfarrayr  r  extractr  selectr  asarray_chkfiniter  r  r  r  r  r  bartlettblackmanhamminghanningr  r  r  r  r  r  kaiserr  r  r  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 
		!

	
