a
    ·Df>                    @   s2  d Z ddl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mZ ddlmZmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZ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& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ dd Z0e0 Z1e&dd Z2e&dd Z3ee	j4ej5edej5dd Z6edd Z7dd Z8ee	j4ej5ej9ej:ee	j4ej5ej;ej:edej5ej9ej:edej5ej;ej:dd Z<ee	j4ej5ej:edej5ej:dd Z=ee	j4ej5ej9ee	j4ej5ej;edej5ej9edej5ej;dd Z>d d! Z?ee	j@eej5d"d#d$ ZAee	jBeej5d%d&d' ZCee	jDeej5d(d)d* ZEee	jFeej5d+d,d- ZGee	jHeej5d.d/d0 ZIee	jJeej5d1d2d3 ZKed4d5 ZLed6d7 ZMed8d9 ZNee	jOee	jPeej5d:d;d< ZQee	jRee	jSeej5d=d>d? ZTed@dA ZUedBdC ZVedDdE ZWee	jXeej5dFddGdHZYedIdJ ZZedKdL Z[edMdN Z\dOdP Z]ee	j^eej5dQddRdSZ_ee	j`eej5dTdUdV ZaeddZd[Zbee	jceej5d\dd]d^Zdee	jeeej5d_d`da Zfee	jgddbdcZhddde Ziee	jjdfdg Zkee	jldhdi Zmee	jndjdk Znee	jodldm Zoee	jpdndo Zqdpdq Zree	jsddrdsZsee	jtddtduZtedvdw Zuedxdy Zvedzd{ Zwd|d} ZxeexeudYd~ZyeexevdYd~Zzeexeudd~Z{eexevdd~Z|edd Z}ee	j~dddZ~e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 Zdd Zdd Zeedd Zeedd Zdd Zeedd Zeej5dee	jdd Zedd ZdddZeeeuZeeeZeeeddZdd Zeee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ddӄ Zee	j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ۃddd Zedd Zedd Zee	j߃dddZee	jdd Zd	Zed
d Zedd Zed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/d0Zee	jd1d2 Zee	jd3d4 Zed5d6 Zed7d8 Z ed9d: Zed;d< Zed=d> Zed?d Zd@dA ZeedBdC Zee	jddDdEZdFdG Z	e&dHdI Z
edJdK Zee	jee	jee	jddLdMZee	jdNdO Zee	jddPdQZee	jej5edRej5dSdT ZdUdV ZedWdX ZedYdZ Zd[d\ Zee	jd]d^ Zee	jd_d` Zee	jdadb Zee	jdcdd Z eej!dedf Z"ee	j#ddgdhZ$edid Z%edjd Z&ee	j'dkdl Z(ee	j)ddndoZ*ee	j+dpdq Z,ee	j-drds Z.dtdu Z/ee	j0ddvdwZ1eeZ2eeZ3edxdy Z4edzd{ Z5ed|d} Z6ed~d Z7edd Z8dd Z9e:ddhZ;dd Z<ee	j=dddZ=ee	j>dddZ?e@ZAee	jBdddZCdZDedeDZEdZFedeFZGdZHedeHZIdd ZJeJ  dd ZKee	jGdd ZLee	jIdd ZMdd ZNdd ZOdd ZPeePdd ZQee	jRd ddZSee	jTdddZUee	jVdddZWee	jXe	jYfddZZee	j[dd Z\ee	j]dddZ^ee	j_dd Z`ee	jadddZbee	jcdddZdedd Zeedd Zfedd Zgedd ZhdÐdĄ Ziee	jjeiee ee	jkeief ee	jleieg ee	jmeieh e	ng dŢZoe	ng dƢZpedǐdȄ Zqedɐdʄ Zredːd̄ Zsee	jtd͐d΄ ZuedϐdЄ Zvdѐd҄ ZweewdӐdԄ Zxee	jydՐdք Zzedאd؄ Z{dِdڄ Z|ee|dېd܄ Z}ee	j~ddސd߄ZdS (  z5
Implementation of math operations on Array objects.
    N)
namedtuple)typescgutils)overloadoverload_methodregister_jitable)as_dtypetype_can_asarraytype_is_scalarnumpy_versionis_nonelikecheck_is_integer	lt_floats
lt_complex)lower_builtinimpl_ret_borrowedimpl_ret_new_refimpl_ret_untracked)
make_array	load_item
store_item_empty_nd_impl)ensure_blas)	intrinsic)RequireLiteralValueTypingErrorNumbaValueErrorNumbaNotImplementedErrorNumbaTypeErrorNumbaDeprecationWarning)tuple_setitemc                   C   s$   z
t   W n ty   Y dS 0 dS NFT)r   ImportError r#   r#   _/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/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_indexerE   s    zB_create_tuple_result_shape.<locals>.codegen.<locals>.array_indexer)	get_value_typer   get_null_valuerangeget_constantr   intpcompile_internalinsert_value)cgctxbuilder	signatureargslltuptytupZin_shape_r*   r)   Zdataidxdatand
shape_listtuptyr#   r$   codegen=   s    

z+_create_tuple_result_shape.<locals>.codegen)lenr   UniTupler/   )tyctxr<   shape_tuplefunction_sigr>   r#   r:   r$   _create_tuple_result_shape,   s
    
rD   c           	         s   t |tjstd|j t| kr.d  }| d }g }|tjg| 7 }|tjg7 }|tjg| 7 }t||||} fdd}||fS )aH  
    Generates a tuple that can be used to index a specific slice from an
    array for sum with axis.  shape_tuple is the size of the dimensions of
    the input array.  'value' is the value to put in the indexing tuple
    in the axis dimension and 'axis' is that dimension.  For this to work,
    axis has to be a const.
    z axis argument must be a constantr   r&   c                    s   |  }t|}|\}}}dd }| ||t g }	td D ]}
|||	|
}qD||| }t d D ]}
|||	|
}qt|S )Nc                   S   s
   t d d S r'   )slicer#   r#   r#   r$   create_full_slice   s    z<_gen_index_tuple.<locals>.codegen.<locals>.create_full_slicer   r&   )r+   r   r,   r0   r   slice2_typer-   r1   )r2   r3   r4   r5   r6   r7   r8   Z	value_argrF   Z
slice_datar)   Z
axis_valuer;   r=   r#   r$   r>   |   s    


z!_gen_index_tuple.<locals>.codegen)	
isinstancer   Literalr   literal_valuer?   rG   r/   Tuple)	rA   rB   valueaxisbeforeafterZ
types_listrC   r>   r#   rH   r$   _gen_index_tupleU   s     	
rQ   z	array.sumc                    sB   | d  fdd}| j||||t|j dd}t| ||j |S )Nr   c                    s$    }t | D ]}|| 7 }q|S r'   npnditeritem)arrcvzeror#   r$   array_sum_impl   s    z!array_sum.<locals>.array_sum_implrW   localsreturn_typer0   dictr   contextr3   sigr5   r[   resr#   rY   r$   	array_sum   s    

rf   c                 C   s   | S r'   r#   )rV   rX   r#   r#   r$   _array_sum_axis_nop   s    rg   c                    s    fdd}|S )Nc                    s4  | j }s"|dk s|dkr"td||kr2tdt| j}|| }|| t|| j}t|t}t	|D ]}rt
| j| }|| | 7 }qt|dkrt
| j|d}	|| |	 7 }qt|dkrt
| j|d}
|| |
 7 }qt|dkrt
| j|d}|| | 7 }qt|dkrtt
| j|d}|| | 7 }qt|dS )a(  
        function that performs sums over one specific axis

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

        typing/arraydecl.py:sum_expand defines the return type for sum with
        axis. It is one dimension less than the input array.
        r      zHNumba does not support sum with axis parameter outside the range 0 to 3.zaxis is out of bounds for arrayr&      )ndim
ValueErrorlistshapepoprD   rS   fulltyper-   rQ   )rV   rN   rj   ZashapeZaxis_lenZashape_without_axisresultZ
axis_indexZindex_tuple_genericZindex_tuple1Zindex_tuple2Zindex_tuple3Zindex_tuple4const_axis_valis_axis_constoprZ   r#   r$   inner   s<    


z gen_sum_axis_impl.<locals>.innerr#   )rt   rs   ru   rZ   rv   r#   rr   r$   gen_sum_axis_impl   s    =rw   c                    s  |j }t|d|d}t|dd d u r.tj}nt}|j\}}}	d}
d}t|tjr|j	}|dk rj|j
| }|dk s|||j
krtd| j|}| ||}|d ||d f}|j|||	gd}d}
t|
|||}t|  fd	d
}| ||||}t| ||j |S )Ndtyper   rj   Fz'axis' entry is out of boundsri   r5   Tc                    s
    | |S r'   r#   )rV   rN   rx   Zcompiledr#   r$   array_sum_impl_axis  s    z1array_sum_axis_dtype.<locals>.array_sum_impl_axis)r`   getattrrS   takerg   r5   rI   r   rJ   rK   rj   rk   typing_contextresolve_value_typer.   replacerw   r   r0   r   )rc   r3   rd   r5   rettyrZ   ru   ty_arrayty_axisZty_dtypert   rs   axis_valgen_implr{   re   r#   rz   r$   array_sum_axis_dtype   s0    
r   c                    sB   | d  fdd}| j||||t|j dd}t| ||j |S )Nr   c                    s$    }t | D ]}|| 7 }q|S r'   rR   )rV   rx   rW   rX   rY   r#   r$   r[   '  s    z'array_sum_dtype.<locals>.array_sum_implr\   r]   r_   rb   r#   rY   r$   array_sum_dtype"  s    

r   c                    s  |j }t|d|d}t|dd d u r.tj}nt}|j\}}d}	d}
t|tjr|j	}
|
dk rh|j
|
 }
|
dk sz|
|j
krd|
 d}t|| j|
}| ||
}|d |f}|j||gd}d}	t|	|
||}t|  fd	d
}| ||||}t| ||j |S )Nrx   r   rj   Fz'axis' entry (z) is out of boundsry   Tc                    s
    | |S r'   r#   )rV   rN   rz   r#   r$   r{   W  s    z+array_sum_axis.<locals>.array_sum_impl_axis)r`   r|   rS   r}   rg   r5   rI   r   rJ   rK   rj   r   r~   r   r.   r   rw   r   r0   r   )rc   r3   rd   r5   r   rZ   ru   r   r   rt   rs   msgr   r   r{   re   r#   rz   r$   array_sum_axis2  s2    

r   c                 C   s,   | j tjkrt|| }n
|  |}|S r'   )rp   rS   Ztimedelta64int64view)rx   rM   acc_initr#   r#   r$   get_accumulator^  s    
r   prodc                    s4   t | tjr0t| j}t|d  fdd}|S d S )Nr&   c                    s$    }t | D ]}|| 9 }q|S r'   rR   r(   rW   rX   r   r#   r$   array_prod_impln  s    z#array_prod.<locals>.array_prod_impl)rI   r   Arrayr   rx   r   )r(   rx   r   r#   r   r$   
array_prodf  s
    

r   cumsumc                    sr   t | tjrn| jtjv }| jtjk}|r8| jjtjjk s<|rHttjn
t| jt	d  fdd}|S d S )Nr   c                    s:   t | j} }t| jD ]\}}||7 }|||< q|S r'   rS   emptysize	enumerateflatr(   outrW   idxrX   r   rx   r#   r$   array_cumsum_impl  s    
z'array_cumsum.<locals>.array_cumsum_impl
rI   r   r   rx   Zsigned_domainbool_bitwidthr/   r   r   )r(   
is_integeris_boolr   r#   r   r$   array_cumsumw  s    

r   cumprodc                    sr   t | tjrn| jtjv }| jtjk}|r8| jjtjjk s<|rHttjn
t| jt	d  fdd}|S d S )Nr&   c                    s:   t | j} }t| jD ]\}}||9 }|||< q|S r'   r   r   r   r#   r$   array_cumprod_impl  s    
z)array_cumprod.<locals>.array_cumprod_implr   )r(   r   r   r   r#   r   r$   array_cumprod  s    

r   meanc                    s\   t | tjrX| jtjttjgB v }|r4ttj}n
t| j}t	|d  fdd}|S d S )Nr   c                    s*    }t | D ]}|| 7 }q|| j S r'   )rS   rT   rU   r   r   r   r#   r$   array_mean_impl  s    z#array_mean.<locals>.array_mean_impl)
rI   r   r   rx   Zinteger_domain	frozensetr   r   float64r   )r(   Z	is_numberrx   r   r#   r   r$   
array_mean  s    

r   varc                 C   s   t | tjrdd }|S d S )Nc                 S   sJ   |   }d}t| D ](}| | }|t|t| 7 }q|| j S Nr   )r   rS   rT   rU   realconjr   )r(   mssdrX   valr#   r#   r$   array_var_impl  s    z!array_var.<locals>.array_var_implrI   r   r   )r(   r   r#   r#   r$   	array_var  s    r   stdc                 C   s   t | tjrdd }|S d S )Nc                 S   s   |   d S N      ?)r   r(   r#   r#   r$   array_std_impl  s    z!array_std.<locals>.array_std_implr   )r(   r   r#   r#   r$   	array_std  s    r   c                 C   s   | |k S r'   r#   r(   Zmin_valr#   r#   r$   min_comparator  s    r   c                 C   s   | |kS r'   r#   r   r#   r#   r$   max_comparator  s    r   c                 C   s   dS NFr#   r   r#   r#   r$   return_false  s    r   minc                    s   t | tjsd S t | jtjtjfr0tjt nFt | jtj	rTt
dd }t| n"t | jtjrntjt nt
t  fdd}|S )Nc                 S   s0   | j |j k rdS | j |j kr,| j|jk r,dS dS NTFr   imagr   r#   r#   r$   	comp_func  s    znpy_min.<locals>.comp_funcc                    sj   | j dkrtdt| }t|d}|r6|S |D ]*}| }|rV|  S  ||r:|}q:|S )Nr   zDzero-size array to reduction operation minimum which has no identityr   rk   rS   rT   nextr}   rU   )r(   it	min_valuer   rX   Z
comparatorZpre_return_funcr#   r$   impl_min  s    


znpy_min.<locals>.impl_min)rI   r   r   rx   
NPDatetimeNPTimedeltarS   isnatr   Complexr   r   Floatisnan)r(   r   r   r#   r   r$   npy_min  s     
r   maxc                    s   t | tjsd S t | jtjtjfr0tjt nFt | jtj	rTt
dd }t| n"t | jtjrntjt nt
t  fdd}|S )Nc                 S   s0   | j |j krdS | j |j kr,| j|jkr,dS dS r   r   )r(   Zmax_valr#   r#   r$   r   *  s    znpy_max.<locals>.comp_funcc                    sj   | j dkrtdt| }t|d}|r6|S |D ]*}| }|rV|  S  ||r:|}q:|S )Nr   zDzero-size array to reduction operation maximum which has no identityr   )r(   r   	max_valuer   rX   r   r#   r$   impl_max:  s    


znpy_max.<locals>.impl_max)rI   r   r   rx   r   r   rS   r   r   r   r   r   r   r   )r(   r   r   r#   r   r$   npy_max  s     
r   c                 C   s   | j dkrtdt| }t|d}d}t|r<|S d}|D ]6}| }t|rb|  S ||k rr|}|}|d7 }qD|S Nr   *attempt to get argmin of an empty sequencer&   r   rk   rS   rT   r   r}   r   rU   )arryr   r   min_idxr   r   rX   r#   r#   r$   array_argmin_impl_datetimeO  s"    




r   c                 C   sv   | j dkrtd| jD ]}|}d} q*qt|r8|S d}| jD ].}t|rX|  S ||k rh|}|}|d7 }qB|S r   r   rk   r   rS   r   r   rX   r   r   r   r#   r#   r$   array_argmin_impl_floate  s"    





r   c                 C   s^   | j dkrtd| jD ]}|}d} q2qtdd}| jD ]}||k rP|}|}|d7 }q<|S )Nr   r   Zunreachabler&   )r   rk   r   RuntimeErrorr   r#   r#   r$   array_argmin_impl_generic{  s    



r   argminc                    sZ   t | jtjtjfrt nt | jtjr.t nt t	|rJd fdd	}nt
| | }|S )Nc                    s    | S r'   r#   r(   rN   flatten_implr#   r$   array_argmin_impl  s    z'array_argmin.<locals>.array_argmin_impl)N)rI   rx   r   r   r   r   r   r   r   r   %build_argmax_or_argmin_with_axis_impl)r(   rN   r   r#   r   r$   array_argmin  s    r   c                 C   s   | j dkrtdt| }t|d}d}t|r<|S d}|D ]6}| }t|rb|  S ||krr|}|}|d7 }qD|S Nr   z*attempt to get argmax of an empty sequencer&   r   )r   r   r   max_idxr   r   rX   r#   r#   r$   array_argmax_impl_datetime  s"    




r   c                 C   sv   | j dkrtd| jD ]}|}d} q*qt|r8|S d}| jD ].}t|rX|  S ||krh|}|}|d7 }qB|S r   r   r   rX   r   r   r   r#   r#   r$   array_argmax_impl_float  s"    





r   c                 C   sV   | j dkrtd| jD ]}|}d} q*qd}| jD ]}||krH|}|}|d7 }q4|S r   )r   rk   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.
    rN   Nc           	         s  |dk r| j | }|dk s$|| j kr,td| j dkr> | S }t|| j d D ]}t|||d }qRt|| j d |}| |}|jd }| }|j| jksJ |j| dksJ t	|j| }t|jD ]$} ||| |d |  ||< q|
|jd d S )Nr   zaxis is out of boundsr&   )rj   rk   r-   r    	transposerm   ravelr   rS   r   reshape)	r(   rN   tmpr)   Ztranspose_indexZtransposed_arrr   Zraveledr   r   r   Ztuple_bufferr#   r$   impl  s&    



"z3build_argmax_or_argmin_with_axis_impl.<locals>.impl)N)r   r   r/   tupler-   rj   )r(   rN   r   r   r#   r   r$   r     s
    
r   argmaxc                    sZ   t | jtjtjfrt nt | jtjr.t nt t	|rJd fdd	}nt
| | }|S )Nc                    s    | S r'   r#   r   r   r#   r$   array_argmax_impl  s    z'array_argmax.<locals>.array_argmax_impl)N)rI   rx   r   r   r   r   r   r   r   r   r   )r(   rN   r   r#   r   r$   array_argmax  s    r   allc                 C   s   dd }|S )Nc                 S   s"   t | D ]}| s
 dS q
dS r!   rR   r(   rX   r#   r#   r$   flat_all$  s    znp_all.<locals>.flat_allr#   )r(   r   r#   r#   r$   np_all!  s    r   h㈵>:0yE>Fc                 C   s   t | }t |}|s|s$|r(|s(dS |r:|r:|s~dS nDt | sNt |rV| |kS t | | ||t |d   kr~dS dS )NF      ?TrS   r   isinfabs)Za_vZb_vrtolatol	equal_nanZ	a_v_isnanZ	b_v_isnanr#   r#   r$   _allclose_scalars-  s     

$r  allclosec                 C   s   t | stdt |s tdt|ttjfs8tdt|ttjfsPtdt|ttjfshtdt| tj}t|tj}|r|rdd	d
}|S |r|sddd}|S |s|rddd}	|	S |s|sddd}
|
S d S )N)The first argument "a" must be array-like*The second argument "b" must be array-like2The third argument "rtol" must be a floating point3The fourth argument "atol" must be a floating point0The fifth argument "equal_nan" must be a booleanr   r   Fc                 S   s   t | ||||dS )Nr  r  r  )r  r(   br  r  r  r#   r#   r$   np_allclose_impl_scalar_scalara  s    
z3np_allclose.<locals>.np_allclose_impl_scalar_scalarc                 S   s:   t |}t |D ] }t| | |||ds dS qdS Nr  FTrS   asarrayrT   r  rU   )r(   r  r  r  r  bvr#   r#   r$   np_allclose_impl_scalar_arrayg  s    
z2np_allclose.<locals>.np_allclose_impl_scalar_arrayc                 S   s:   t | } t | D ] }t| ||||ds dS qdS r  r  )r(   r  r  r  r  avr#   r#   r$   np_allclose_impl_array_scalarq  s    
z2np_allclose.<locals>.np_allclose_impl_array_scalarc           	      S   s`   t | } t |}t | |\}}t ||fD ](\}}t| | |||ds2 dS q2dS r  )rS   r  Zbroadcast_arraysrT   r  rU   )	r(   r  r  r  r  Za_aZb_br  r  r#   r#   r$   np_allclose_impl_array_array{  s    

z1np_allclose.<locals>.np_allclose_impl_array_array)r   r   F)r   r   F)r   r   F)r   r   F)	r	   r   rI   floatr   r   boolBooleanNumber)r(   r  r  r  r  Zis_a_scalarZis_b_scalarr  r  r  r  r#   r#   r$   np_allcloseG  s@      
  
  
  
r  anyc                 C   s   dd }|S )Nc                 S   s"   t | D ]}| r
 dS q
dS r   rR   r   r#   r#   r$   flat_any  s    znp_any.<locals>.flat_anyr#   )r(   r!  r#   r#   r$   np_any  s    r"  c                 C   sN   |d u st |tjr ddd}n*|d u s4t |tjr@ddd}n
ddd}|S )Nc                 S   s   t | }t |S r'   )rS   r  r   )r(   rN   weightsrV   r#   r#   r$   np_average_impl  s    
z#np_average.<locals>.np_average_implc                 S   sv   t | }t |}|j|jkrB|d u r0td|jdkrBtdt |}|dkr\tdt t ||| }|S )NzCNumba does not support average when shapes of a and weights differ.r&   z81D weights expected when shapes of a and weights differ.        z)Weights sum to zero, can't be normalized.)rS   r  rm   	TypeErrorrj   sumZeroDivisionErrormultiply)r(   rN   r#  rV   Zsclavgr#   r#   r$   r$    s$    



c                 S   s   t dd S )Nz)Numba does not support average with axis.)r&  )r(   rN   r#  r#   r#   r$   r$    s    )NN)NN)NN)rI   r   ZNoneType)r(   rN   r#  r$  r#   r#   r$   
np_average  s    
r+  c                 C   s,   t | tjtjfrtjS tdd }|S dS )z$
    A generic isnan() function
    c                 S   s   dS r   r#   xr#   r#   r$   _trivial_isnan  s    z!get_isnan.<locals>._trivial_isnanN)rI   r   r   r   rS   r   r   )rx   r.  r#   r#   r$   	get_isnan  s
    
r/  c                 C   s   t | rdd S d S )Nc                 S   s   t | jdkS r   rS   r  r   r,  r#   r#   r$   <lambda>      znp_iscomplex.<locals>.<lambda>r	   r,  r#   r#   r$   np_iscomplex  s    r4  c                 C   s   t | rdd S d S )Nc                 S   s   t | jdkS r   r0  r,  r#   r#   r$   r1    r2  znp_isreal.<locals>.<lambda>r3  r,  r#   r#   r$   	np_isreal  s    r5  c                    sV   t | }t| tjrt | j}t|tj t| tjrF fdd}n fdd}|S )Nc                    s   | d u rdS  S r   r#   r,  Ziscmplxr#   r$   r     s    ziscomplexobj.<locals>.implc                    s    S r'   r#   r,  r6  r#   r$   r     s    )determine_dtyperI   r   Optionalrp   rS   
issubdtypecomplexfloating)r-  dtr   r#   r6  r$   iscomplexobj  s    
r<  c                 C   s   dd }|S )Nc                 S   s   t |  S r'   )rS   r<  r,  r#   r#   r$   r     s    zisrealobj.<locals>.implr#   r-  r   r#   r#   r$   	isrealobj  s    r>  c                    s   t |   fdd}|S )Nc                    s    S r'   r#   )elementre   r#   r$   r     s    znp_isscalar.<locals>.impl)r
   )r?  r   r#   r@  r$   np_isscalar  s    rA  c                    s*   t |rd fdd	}nd fdd	}|S )Nc                    s   t t |  t | S r'   rS   logical_andr  Zsignbitr-  r   fnr#   r$   r     s    zis_np_inf_impl.<locals>.implc                    s   t t |  t | |S r'   rB  rD  rE  r#   r$   r     s    )N)Nr   )r-  r   rF  r   r#   rE  r$   is_np_inf_impl   s    rH  c                 C   s   t dd }t| ||S )Nc                 S   s   | S r'   r#   r,  r#   r#   r$   r1    r2  zisneginf.<locals>.<lambda>r   rH  r-  r   rF  r#   r#   r$   isneginf  s    rK  c                 C   s   t dd }t| ||S )Nc                 S   s   |  S r'   r#   r,  r#   r#   r$   r1    r2  zisposinf.<locals>.<lambda>rI  rJ  r#   r#   r$   isposinf  s    rL  c                 C   s   | |k S r'   r#   r(   r  r#   r#   r$   	less_than  s    rN  c                 C   s   | |kS r'   r#   rM  r#   r#   r$   greater_than  s    rO  c                 C   s   | j dkrtdd S )Nr   z3zero-size array to reduction operation not possible)r   rk   r   r#   r#   r$   check_array#  s    
rP  c                    s"   |r fdd}n fdd}|S )Nc                    s   t | }t| t |}t|d}|D ]\}| }t |jrXt |jsX|}q. |j|jrl|}q.|j|jkr. |j	|j	r.|}q.|S r   )
rS   r  rP  rT   r   r}   rU   r   r   r   r(   rV   r   
return_valr   rX   comparison_opr#   r$   r   +  s    

z!nan_min_max_factory.<locals>.implc                    sX   t | }t| t |}t|d}|D ]$}| }t |s. ||s.|}q.|S r   )rS   r  rP  rT   r   r}   rU   r   rQ  rS  r#   r$   r   <  s    



r#   )rT  is_complex_dtyper   r#   rS  r$   nan_min_max_factory)  s    rV  )rU  Tc                 C   st   t | rt |r|S t | r<t |r<| dk|dkkS t | sPt |rTdS t| | ||t|  kS d S )Nr   Fr  )r-  yr  r  r  r#   r#   r$   _isclose_itemY  s    rX  c                 C   s   t | stdt |s tdt|ttjfs8tdt|ttjfsPtdt|ttjfshtdt| tjrt|tj	rdd	d
}nRt| tj	rt|tjrddd
}n.t| tjrt|tjrddd
}n
ddd
}|S )Nr
  r  r  r  r  r   r   Fc           	      S   sV   |  d}|}tt|tj}tt|D ]}t|| ||||||< q,| | jS Nr   r   rS   zerosr?   r   r-   rX  rm   	r(   r  r  r  r  r-  rW  r   r)   r#   r#   r$   isclose_implz  s    
zisclose.<locals>.isclose_implc           	      S   sV   | }| d}tt|tj}tt|D ]}t||| |||||< q,| |jS rY  rZ  r\  r#   r#   r$   r]    s    
c                 S   s   t | j|j}t | |}t ||}t jt|t jd}tt ||fD ](\}	\}
}t	|

 |
 |||||	< qNt ||S Nrx   )rS   broadcast_shapesrm   broadcast_tor[  r?   r   r   rT   rX  rU   )r(   r  r  r  r  rm   a_b_r   r)   r  r  r#   r#   r$   r]    s    
c                 S   s   t | ||||S r'   )rX  r  r#   r#   r$   r]    s    )r   r   F)r   r   F)r   r   F)r   r   F)
r	   r   rI   r  r   r   r  r  r   r  )r(   r  r  r  r  r]  r#   r#   r$   isclosee  s$    
rd  c                 C   s"   t | }t|tjrtS tS d S r'   )r7  rS   r9  r:  complex_nanminreal_nanminr(   r;  r#   r#   r$   	np_nanmin  s    rh  c                 C   s"   t | }t|tjrtS tS d S r'   )r7  rS   r9  r:  complex_nanmaxreal_nanmaxrg  r#   r#   r$   	np_nanmax  s    rk  c                    s*   t | tjsd S t| j  fdd}|S )Nc                    sH   d}d}t | D ](}| } |s|| 7 }|d7 }qt ||S Nr%  r   r&   )rS   rT   rU   divide)r(   rW   countr   rX   r   r#   r$   nanmean_impl  s    
z np_nanmean.<locals>.nanmean_implrI   r   r   r/  rx   )r(   rp  r#   ro  r$   
np_nanmean  s
    
rr  c                    s*   t | tjsd S t| j  fdd}|S )Nc                    sj   t | }d}d}t | D ]@}| } |s| | }|t |t | 7 }|d7 }qt ||S rl  )rS   nanmeanrT   rU   r   r   rm  )r(   r   r   rn  r   rX   r   ro  r#   r$   nanvar_impl  s    

znp_nanvar.<locals>.nanvar_implrq  )r(   rt  r#   ro  r$   	np_nanvar  s
    
ru  c                 C   s   t | tjsd S dd }|S )Nc                 S   s   t | d S r   )rS   nanvarr   r#   r#   r$   nanstd_impl  s    znp_nanstd.<locals>.nanstd_implr   )r(   rw  r#   r#   r$   	np_nanstd  s    rx  c                    sP   t | tjsd S t | jtjr&tj}n| j}|dt| j  fdd}|S )Nr   c                    s0   }t | D ]}| } |s||7 }q|S r'   rR   r(   rW   r   rX   r   rZ   r#   r$   nansum_impl  s    
znp_nansum.<locals>.nansum_implrI   r   r   rx   Integerr/   r/  )r(   r   r{  r#   rz  r$   	np_nansum  s    
r~  c                    sP   t | tjsd S t | jtjr&tj}n| j}|dt| j  fdd}|S )Nr&   c                    s0   }t | D ]}| } |s||9 }q|S r'   rR   ry  r   oner#   r$   nanprod_impl	  s    
z np_nanprod.<locals>.nanprod_implr|  )r(   r   r  r#   r  r$   
np_nanprod  s    
r  c                    sZ   t | tjsd S t | jtjtjfr,dd S | jt d fdd}|S d S )Nc                 S   s
   t | S r'   )rS   r   r   r#   r#   r$   r1    r2  znp_nancumprod.<locals>.<lambda>r&   c                    sD   t | j}}t| jD ]"\}} | r6||9 }|||< q|S r'   r   r   is_nanr  r   r#   r$   nancumprod_impl!  s    

z&np_nancumprod.<locals>.nancumprod_implrI   r   r   rx   r  r}  r/  )r(   r  r#   r  r$   np_nancumprod  s    	r  c                    sZ   t | tjsd S t | jtjtjfr,dd S | jt d fdd}|S d S )Nc                 S   s
   t | S r'   )rS   r   r   r#   r#   r$   r1  4  r2  znp_nancumsum.<locals>.<lambda>r   c                    sD   t | j}}t| jD ]"\}} | r6||7 }|||< q|S r'   r   r   r  r   rZ   r#   r$   nancumsum_impl:  s    

z$np_nancumsum.<locals>.nancumsum_implr  )r(   r  r#   r  r$   np_nancumsum-  s    	r  c                 C   s&   t | }t|dkrtdn|S d S )Nr   z&zero-size array reduction not possible)_asarrayr?   rk   r(   rV   r#   r#   r$   prepare_ptp_inputF  s    
r  c                    s*   t |tjr fdd}n fdd}|S )Nc                    s4    |j | j r|S |j | j kr0 |j| jr0|S | S r'   r   current_valr   ru   r#   r$   r   V  s    z+_compute_current_val_impl_gen.<locals>.implc                    s    || r|S | S r'   r#   r  r  r#   r$   r   ^  s    )rI   r   r   )ru   r  r   r   r#   r  r$   _compute_current_val_impl_genO  s    r  c                 C   s   d S r'   r#   r  r#   r#   r$   _compute_a_maxc  s    r  c                 C   s   d S r'   r#   r  r#   r#   r$   _compute_a_ming  s    r  c                 C   s   t tj| |S r'   )r  operatorgtr  r#   r#   r$   _compute_a_max_implk  s    r  c                 C   s   t tj| |S r'   )r  r  ltr  r#   r#   r$   _compute_a_min_implp  s    r  c                 C   s   d S r'   r#   r   r#   r#   r$   _early_returnu  s    r  c                    sH   d t | tjr fdd}n&t | tjr8 fdd}n fdd}|S )Nr   c                    sH   t | jr<t | jr,dt jt jd  fS dt jd fS nd fS d S )NT              ?y                F)rS   r   r   r   nanr  ZUNUSEDr#   r$   r   }  s
    z _early_return_impl.<locals>.implc                    s    t | rdt jfS d fS d S r   )rS   r   r  r  r  r#   r$   r     s    

c                    s   d fS r   r#   r  r  r#   r$   r     s    )rI   r   r   r   )r   r   r#   r  r$   _early_return_imply  s    r  ptpc                 C   s,   t | dr t| jtjr tddd }|S )Nrx   +Boolean dtype is unsupported (as per NumPy)c           	      S   sj   t | }|j}|d }|d }t|jD ]8}|| }t|\}}|rL|  S t||}t||}q(|| S r   )r  r   r-   r   r  r  r  )	r(   rV   Za_flatZa_mina_maxr)   r   Ztake_branchretvalr#   r#   r$   np_ptp_impl  s    
znp_ptp.<locals>.np_ptp_impl)hasattrrI   rx   r   r  r   )r(   r  r#   r#   r$   np_ptp  s
    
r  c                 C   s(   t | rdS t |rdS | |k S d S r!   )rS   r   rM  r#   r#   r$   nan_aware_less_than  s
    

r  c                    s   d fdd	}|S )Nc                    s  || d? }| | | | rV| | | |  | |< | |<  rV|| ||  ||< ||< | | | | r| | | |  | |< | |<  r|| ||  ||< ||< | | | | r| | | |  | |< | |<  r|| ||  ||< ||< | | }| | | |  | |< | |<  r,|| ||  ||< ||< |}|d }||k r^| | |r^|d7 }q8||kr|| | r|d8 }q^||krq| | | |  | |< | |<  r|| ||  ||< ||< |d7 }|d8 }q8| | | |  | |< | |<  r|| ||  ||< ||< |S Nr&   r#   )AlowhighImidZpivotr)   jargpartition	pivotimplr#   r$   
_partition  sD    
z&_partition_factory.<locals>._partition)Nr#   )r  r  r  r#   r  r$   _partition_factory  s    -r  )r  c                    s   d fdd	}|S )Nc                    sV    | |||}||krN||k r6|d } | |||}q|d } | |||}q| | S )zJ
        Select the k'th smallest element in array[low:high + 1].
        r&   r#   )r   kr  r  r   r)   partitionimplr#   r$   _select  s    z _select_factory.<locals>._select)Nr#   )r  r  r#   r  r$   _select_factory  s    r  c                 C   s   ||ksJ t | ||}||k r*|d }q ||d kr@|d }q ||krbt| |d |d | qxq t| |||d  qxq | | | |d  fS )z
    Select the k'th and k+1'th smallest elements in array[low:high + 1].

    This is significantly faster than doing two independent selections
    for k and k+1.
    r&   )r  r  )r   r  r  r  r)   r#   r#   r$   _select_two  s    	

r  c                 C   sT   d}|d }|d? }|d@ dkrBt | |d ||\}}|| d S t| |||S dS )zt
    The main logic of the median() call.  *temp_arry* must be disposable,
    as this function will mutate it.
    r   r&   ri   N)r  r  )	temp_arrynr  r  Zhalfr(   r  r#   r#   r$   _median_inner$  s    r  c                 C   s   t | tjsd S dd }|S )Nc                 S   s   |   }|jd }t||S r   )flattenrm   r  )r(   r  r  r#   r#   r$   median_impl9  s    
znp_median.<locals>.median_implr   )r(   r  r#   r#   r$   	np_median4  s    r  c                 C   s  t | }|dkr.tjt || d tjd}ntjt |tjd}tt |D ]`}|| }|dkrt| }tt|  rt| rtj	}n|dkrJt
| }tt|  rt| tjk}t| tj k}|||  }	|	dkrtj	}|dkr|dkrtj	}|dkr$tj	}|	dkr|dkr|dkrtj	}n^d|d t|d  }
t|
}|
| }t| t|d d|d d\}}|d|  ||  }|||< qN|S )Nr&   r   r_  d   ri         Y@)r  r  r  )r?   rS   ro   r   r   r-   r   r   isfiniter  r   r'  inftrue_dividemathfloorr  int)r(   qr  r   r)   
percentiler   Znum_pos_infZnum_neg_infZ
num_finiteZrankfr   lowerupperr#   r#   r$   _collect_percentiles_innerC  sD    








 
r  c                 C   sT   |r | |  } t | dkr.dS nt|r.dS t | dkrL| d }t|S dS d S )Nr   Fr&   T)r?   rS   r   r  )r(   nan_maskskip_nanr   r#   r#   r$   _can_collect_percentilesx  s    


r  c                 C   s   d}| j dkrX| jdk rXt| jD ]2}| | dk sL| | |ksLt| | r"d} qq"n0tt| st| dk st| |krd}|S )NTr&   
   r%  F)rj   r   r-   rS   r   r   )r  q_upper_boundvalidr)   r#   r#   r$   check_valid  s    &,r  c                 C   s   t | ddstdd S )Nr  r  z)Percentiles must be in the range [0, 100]r  rk   r  r#   r#   r$   percentile_is_valid  s    r  c                 C   s   t | ddstdd S )Nr  r  z%Quantiles must be in the range [0, 1]r  r  r#   r#   r$   quantile_is_valid  s    r  c                 C   sz   t j|t jd }|| || }t j| t jd }t |}t|||rd||  }t||}nt t|t j	}|S r^  )
rS   r  r   r  r   r  r  ro   r?   r  )r(   r  check_qfactorr  r  r  r   r#   r#   r$   _collect_percentiles  s    

r  c                    sv   t | }t|tjrtd fdd} fdd}t|tjtjfrT|S t|tj	rn|j
dkrn|S |S dS )z
    The underlying algorithm to find percentiles and quantiles
    is the same, hence we converge onto the same code paths
    in this inner function implementation
    zNot supported for complex dtypec                    s   t | | d S r   r  r(   r  r  r  r  r#   r$   np_percentile_q_scalar_impl  s    z?_percentile_quantile_inner.<locals>.np_percentile_q_scalar_implc                    s   t | | S r'   r  r  r  r#   r$   np_percentile_impl  s    z6_percentile_quantile_inner.<locals>.np_percentile_implr   N)r7  rS   r9  r:  r   rI   r   r  r  r   rj   )r(   r  r  r  r  r;  r  r  r#   r  r$   _percentile_quantile_inner  s    r  c                 C   s   t | |ddtdS )NFr  r  r  r  r  r  r  r#   r#   r$   np_percentile  s    
r  c                 C   s   t | |ddtdS )NTr  r  r  r  r#   r#   r$   np_nanpercentile  s    
r  c                 C   s   t | |ddtdS )NFr  r  r  r  r  r#   r#   r$   np_quantile  s    
r  c                 C   s   t | |ddtdS )NTr  r  r  r  r#   r#   r$   np_nanquantile  s    
r  c                    s*   t | tjsd S t| j  fdd}|S )Nc                    s\   t | j| j}d}t | D ]$}| } |s|||< |d7 }q|dkrRt jS t||S Nr   r&   )rS   r   r   rx   rT   rU   r  r  )r(   r  r  r   rX   ro  r#   r$   nanmedian_impl  s    
z$np_nanmedian.<locals>.nanmedian_implrq  )r(   r  r#   ro  r$   np_nanmedian  s
    
r  c           	      C   sl   t | }t | jd d }|D ]D}| |  }d}t|d }|D ]}t|||| |}qF|||< q"|S )Nr   r   r&   )rS   
empty_likendindexrm   copyr?   _select_w_nan)	r(   	kth_arrayr   r   sr   r  r  kthr#   r#   r$   np_partition_impl_inner  s    

r  c           
      C   s   t j| t jd}t | jd d }|D ]T}| |  }t t|}d}t|d }|D ]}	t||	||| |	}qZ|||< q(|S )Nr_  r   r   r&   )	rS   r  r/   r  rm   r  aranger?   _arg_select_w_nan)
r(   r  r   r   r  r   Zidx_arryr  r  r  r#   r#   r$   np_argpartition_impl_inner  s    
r  c                 C   s   t |tj}|jdkr"tdtt|| jd krDtdt	|}t
|D ],\}}|dk r||| jd  ||< qX|||< qXt|S )a  
    Returns a sorted, unique array of kth values which serve
    as indexers for partitioning the input array, a.

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

    Values less than 0 are transformed to equivalent positive
    index values.
    r&   zkth must be scalar or 1-Dr   zkth out of boundsr   )r  astyperS   r   rj   rk   r   r  rm   r  ndenumerateunique)r(   r  r  r   indexr   r#   r#   r$   
valid_kths2  s    


r  c                 C   sn   t | tjtjtjfstdt | tjr<| jdkr<tdt|d|}t |tjtj	fsbtddd }|S )N(The first argument must be an array-liker   3The first argument must be at least 1-D (found 0-D)rx   Partition index must be integerc                 S   s2   t | }|jdkr| S t||}t||S d S r   )r  r   r  r  r  r(   r  Za_tmpr  r#   r#   r$   np_partition_implc  s
    

z'np_partition.<locals>.np_partition_impl
rI   r   r   SequencerL   r&  rj   r|   r  r}  )r(   r  kthdtr   r#   r#   r$   np_partitionU  s    r  c                 C   sn   t | tjtjtjfstdt | tjr<| jdkr<tdt|d|}t |tjtj	fsbtddd }|S )Nr  r   r  rx   r  c                 S   s8   t | }|jdkr | dS t||}t||S d S )Nr   r/   )r  r   r  r  r  r  r  r#   r#   r$   np_argpartition_impl|  s
    

z-np_argpartition.<locals>.np_argpartition_implr  )r(   r  r  r  r#   r#   r$   np_argpartitionn  s    r  c                 C   sv   t d| t d|f}tj|tjd}t|d D ]@}tt d|| d |d }d||d |f< d|||d f< q0|S )Nr   r_  r&   )r   rS   r   r   r-   r   )NMr  rm   r   r)   Zm_maxr#   r#   r$   	_tri_impl  s    r	  c                 C   s   t |d ddd}|S )Nr  r   c                 S   s   |d u r| }t | ||S r'   )r	  )r  r  r  r#   r#   r$   tri_impl  s    znp_tri.<locals>.tri_impl)Nr   )r   )r  r  r  r
  r#   r#   r$   np_tri  s    

r  c                 C   sD   | j dksJ t| }tj||f| jd}t|D ]}| ||< q2|S )zq
    Takes a 1d array and tiles it to form a square matrix
    - i.e. a facsimile of np.tile(m, (len(m), 1))
    r&   r_  )rj   r?   rS   r   rx   r-   )r   Zlen_mr   r)   r#   r#   r$   _make_square  s    
r  c                 C   s>   t j| jd | jd |dt j}t || t j| | jdS Nr   r  r  r_  rS   trirm   r  uintwhere
zeros_likerx   r   r  maskr#   r#   r$   np_tril_impl_2d  s    $r  c                 C   sB   t |d d	dd}d
dd}| jdkr,|S | jdkr:tS |S d S )Nr  r   c                 S   s   t | }t||S r'   )r  r  r   r  Zm_2dr#   r#   r$   np_tril_impl_1d  s    z my_tril.<locals>.np_tril_impl_1dc                 S   sv   t j| jd | jd |dt j}t | jd d }t | }t j|| jd}|D ]}t 	|| | |||< qV|S r  
rS   r  rm   r  r  r  r  r  rx   r  r   r  r  r   zZzero_optselr#   r#   r$   np_tril_impl_multi  s    $
z#my_tril.<locals>.np_tril_impl_multir&   ri   )r   )r   )r   rj   r  )r   r  r  r  r#   r#   r$   my_tril  s    


	

r  c                 C   s4   t | d t |d t|s&t |d ddd}|S )Nr  r  r   r   c                 S   s   t t j| ||dS )Nr  rS   nonzeror  r  r  r   r#   r#   r$   np_tril_indices_impl  s    z-np_tril_indices.<locals>.np_tril_indices_impl)r   Nr   r   )r  r  r   r$  r#   r#   r$   np_tril_indices  s    



r&  c                 C   s*   t |d | jdkrtdddd}|S )Nr  ri   input array must be 2-dr   c                 S   s   t j| jd || jd dS Nr   r&   )r  r   )rS   tril_indicesrm   rV   r  r#   r#   r$   np_tril_indices_from_impl  s    z7np_tril_indices_from.<locals>.np_tril_indices_from_impl)r   r   rj   r   )rV   r  r+  r#   r#   r$   np_tril_indices_from  s
    


r-  c                 C   sB   t j| jd | jd |d dt j}t |t j| | jd| S Nr  r   r&   r  r_  r  r  r#   r#   r$   np_triu_impl_2d  s    (r/  c                 C   sB   t |d d	dd}d
dd}| jdkr,|S | jdkr:tS |S d S )Nr  r   c                 S   s   t | }t||S r'   )r  r/  r  r#   r#   r$   np_triu_impl_1d  s    z my_triu.<locals>.np_triu_impl_1dc                 S   sz   t j| jd | jd |d dt j}t | jd d }t | }t j|| jd}|D ]}t 	||| | ||< qZ|S r.  r  r  r#   r#   r$   np_triu_impl_multi  s    (
z#my_triu.<locals>.np_triu_impl_multir&   ri   )r   )r   )r   rj   r/  )r   r  r0  r1  r#   r#   r$   my_triu  s    


	

r2  c                 C   s4   t | d t |d t|s&t |d ddd}|S )Nr  r  r   r   c                 S   s   t dt j| ||d d S )Nr&   r   r!  r#  r#   r#   r$   np_triu_indices_impl  s    z-np_triu_indices.<locals>.np_triu_indices_impl)r   Nr%  )r  r  r   r3  r#   r#   r$   np_triu_indices  s    



r4  c                 C   s*   t |d | jdkrtdddd}|S )Nr  ri   r'  r   c                 S   s   t j| jd || jd dS r(  )rS   triu_indicesrm   r*  r#   r#   r$   np_triu_indices_from_impl*  s    z7np_triu_indices_from.<locals>.np_triu_indices_from_impl)r   r,  )rV   r  r6  r#   r#   r$   np_triu_indices_from!  s
    


r7  c                 C   s   d S r'   r#   rV   r#   r#   r$   _prepare_array/  s    r9  c                 C   s"   | d t jfv rdd S dd S d S )Nc                 S   s
   t dS )Nr#   rS   arrayr8  r#   r#   r$   r1  6  r2  z%_prepare_array_impl.<locals>.<lambda>c                 S   s   t |  S r'   )r  r   r8  r#   r#   r$   r1  8  r2  r   noner8  r#   r#   r$   _prepare_array_impl3  s    r>  c                 C   s   | }t |tjtjfrt|S t|dd }|d urB| dkrBtjS t|dd }|d u r^tdt |tj	rr|j
}qt|S qd S )N__len__r   rx   ztype has no dtype attr)rI   r   r  r  r   r|   rS   r   r&  r  rx   )Zinobjobjlr;  r#   r#   r$   _dtype_of_compound;  s    rB  c                 C   s   t | tjr"t | jtjr"tdt| }d }t|s>t|}d }t|sRt|}|d urrt	||srd}t||d urt	||sd}t|ddd}|S )Nr  z3dtype of to_begin must be compatible with input aryz1dtype of to_end must be compatible with input aryc           
      S   s   t |}t | }t |}|j}t|dkrtjt|t| t| d |d}t|}t|t| d }	||d |< t||||	< |||	d < n:tjt|t| |d}t|}||d |< |||d < |S )Nr   r&   r_  )r9  rx   r?   rS   r   diff)
aryto_endto_beginstartr  end	out_dtyper   Z	start_idxmid_idxr#   r#   r$   np_ediff1d_implf  s$    z#np_ediff1d.<locals>.np_ediff1d_impl)NN)
rI   r   r   rx   r  r   rB  r   rS   Zcan_cast)rD  rE  rF  Zary_dtZto_begin_dtZ	to_end_dtr   rK  r#   r#   r$   
np_ediff1dL  s$    
rL  c                 C   s   d S r'   r#   r8  r#   r#   r$   _select_element  s    rM  c                 C   s0   t | dd dk}|r dd }|S dd }|S d S )Nrj   r   c                 S   s$   t jd| jd}| |d d < |d S )N)r&   r_  r   )rS   r;  rx   )rV   r-  r#   r#   r$   r     s    z"_select_element_impl.<locals>.implc                 S   s   | S r'   r#   r8  r#   r#   r$   r     s    r|   )rV   Zzerodr   r#   r#   r$   _select_element_impl  s    rO  c                 C   s   d S r'   r#   )dxr-  r#   r#   r$   _get_d  s    rQ  c                 C   s   t | rdd }ndd }|S )Nc                 S   s
   t |S r'   rS   r  r-  rP  r#   r#   r$   r     s    zget_d_impl.<locals>.implc                 S   s   t t | S r'   )rS   rC  r  rS  r#   r#   r$   r     s    rG  )r-  rP  r   r#   r#   r$   
get_d_impl  s    
rT  r  c                 C   sH   t | tjtjfrtdnt | tjr:| jdkr:tdddd}|S )Nzy cannot be a scalarr   zy cannot be 0Dr  c                 S   sX   t | }t||}|dtdd f |dtd df  d }t || d}t|}|S )N.r&   r          @)rS   r  rQ  rE   r'  rM  )rW  r-  rP  ZyarrdZy_averet	processedr#   r#   r$   r     s    

(znp_trapz.<locals>.impl)Nr  )rI   r   r  r  r   r   rj   )rW  r-  rP  r   r#   r#   r$   np_trapz  s    

rY  c                 C   s   |j \}}|t| ksJ ||ks&J |r|t|D ]F}|dkrPd|dd|f< q2t| |dd|d f |dd|f< q2n\t|d ddD ]J}||d krd|dd|f< qt| |dd|d f |dd|f< qdS )a*  
    Generate an N-column Vandermonde matrix from a supplied 1-dimensional
    array, x. Store results in an output matrix, out, which is assumed to
    be of the required dtype.

    Values are accumulated using np.multiply to match the floating point
    precision behaviour of numpy.vander.
    r   r&   Nr   )rm   r?   r-   rS   r)  )r-  r  
increasingr   r   r  r)   r#   r#   r$   
_np_vander  s    

,r[  c                 C   s&   | j dkrtd|dk r"tdd S )Nr&   z.x must be a one-dimensional array or sequence.r   z#Negative dimensions are not allowed)rj   rk   )r-  r  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r`t| j}t	|t
 |S t| t jt jfrv|S d S )	Nz,Second argument N must be None or an integerFc                    sF   |d u rt | }t| | tjt | t|f d}t| ||| |S r^  )r?   r\  rS   r   r  r[  )r-  r  rZ  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^  )r?   rS   r;  r\  r   r  rx   r[  )r-  r  rZ  x_arrr   r#   r#   r$   np_vander_seq_impl  s    

z%np_vander.<locals>.np_vander_seq_impl)NF)NF)r   r=  rI   r}  r   r   r   rx   rS   promote_typesr  rL   r  )r-  r  rZ  r]  r_  x_dtr#   r_  r$   	np_vander  s    

rb  c                 C   sD   t |tjtjfstddd }t | tjtjfr<dd S |S d S )Nzshift must be an integerc                 S   sR   t | }t j|j|jd}|j}t|jD ] }|| |j }|| |j|< q,|S r^  )rS   r  r   rm   rx   r   r-   r   )r(   shiftrV   r   Zarr_flatr)   r   r#   r#   r$   np_roll_impl	  s    
znp_roll.<locals>.np_roll_implc                 S   s
   t | S r'   rR  )r(   rc  r#   r#   r$   r1  	  r2  znp_roll.<locals>.<lambda>)rI   r   r}  r  r   r  )r(   rc  rd  r#   r#   r$   np_roll	  s    re     c                 C   sr  d}|}| ||d  kr|S | |d k r,dS |dkr^d}||k rV| || krV|d7 }q8|d S ||d krr|d }|dk r~d}| || k r| ||d  k r|d }|t kr| ||t   kr|t  }n|d S nb| ||d  k r|S | ||d  k  r|d S |d }||t  d k r0| ||t   k r0|t  }||k rj||| d?  }| || krb|d }n|}q0|d S )Nr   r&   r      rh   ri   )LIKELY_IN_CACHE_SIZE)keyrV   lengthguessZiminZimaxr)   Zimidr#   r#   r$   binary_search_with_guess%	  sL    




rl  c                 C   s  t | }t |}t |}t|dkr2tdt|t|krJtd|jdkrjt j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t|D ]@}|j	| }||k r|
|j	|< q||kr||j	|< q||j	|< qnd}|	|kr&t j|	d |d}nt jd|d}|jrt|	d D ]f}d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  ||< qHt|D ]0}|j	| }t |r|}d}|d|  |j	|< qt|||	|}|d	kr|
|j	|< q||	kr0||j	|< q||	d krP|| |j	|< q|| |krp|| |j	|< q|jr|| }n\d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  }|j
|||   || j
 }t |rZ|j
|||d    ||d  j
 }t |rZ|| j
||d  j
krZ|| j
}|j|||   || j }t |r|j|||d    ||d  j }t |r|| j||d  jkr|| j}|d|  |j	|< q|S )
Nr   array of sample points is empty#fp and xp are not of the same size.r&   Z
fill_valuerx   r_  r  r%  r   )rS   r  r?   rk   r   ro   rm   r   r-   r   r   r   r   rl  )r-  xpfprx   dzrP  dydreslenxlenxplvalrvalxp_valfp_valr)   x_valr  slopesZinv_dxr   r   sloper#   r#   r$   np_interp_impl_complex_innerj	  s    










	$&
$&
r~  c                 C   s  t j| t jd}t j|t jd}t j|t jd}t|dkrDtdt|t|kr\td|jdkr|t j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t	|D ]B}|j
| }||k r|
|j
|< q||kr||j
|< q||j
|< qАnd}|	|krX|dd  |d d  |dd  |d d   }nt jd|d}t	|D ]j}|j
| }t |r||j
|< qnt|||	|}|dkr|
|j
|< qn||	kr||j
|< qn||	d kr|| |j
|< n|| |kr|| |j
|< n|jr$|| }n(||d  ||  ||d  ||   }||||   ||  |j
|< t |j
| rn||||d    ||d   |j
|< t |j
| rn|| ||d  krn|| |j
|< qn|S )Nr_  r   rm  rn  r&   ro  r   )rS   r  r   r?   rk   r   ro   rm   r   r-   r   r   rl  )r-  rp  rq  rx   rr  rP  rs  rt  ru  rv  rw  rx  ry  rz  r)   r{  r  r|  r}  r#   r#   r$   np_interp_impl_inner	  sf    




2




(&(r  c                    s   t |dr|jdkrtdt |dr8|jdkr8tdd}t|}t|tjrZt|t|}t|tj t tjrt	nt
 fdd} fdd	}t| tjrt| tjrt||S |S )
Nrj   r&   zxp must be 1Dzfp must be 1Dz:Cannot cast array data from complex dtype to float64 dtypec                    s   | || S r'   r#   r-  rp  rq  rx   rv   r#   r$   np_interp_implL
  s    z!np_interp.<locals>.np_interp_implc                    s   | || j d S r   r   r  r  r#   r$   np_interp_scalar_implO
  s    z(np_interp.<locals>.np_interp_scalar_impl)r  rj   r   r7  rS   r9  r:  result_typer   r~  r  rI   r   r  r   )r-  rp  rq  Zcomplex_dtype_msgZxp_dtZfp_dtr  r  r#   r  r$   	np_interp1
  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< q4|S )Nri   r&   r_  r   )rj   rm   rS   r   rx   r-   r'  )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&   r%  )rm   r   r  rS   dotr   Tr  )XbiasddofZfactrW   r#   r#   r$   np_cov_impl_innerj
  s    
r  c                   C   s   d S r'   r#   r#   r#   r#   r$   _prepare_cov_input_inner
  s    r  c                 C   s$   |d t jfv rdd }ndd }|S )Nc                 S   s   t t| }|s|j}|S r'   )rS   
atleast_2dr  r  )r   rW  rowvarrx   m_arrr#   r#   r$   r  
  s    z9_prepare_cov_input_impl.<locals>._prepare_cov_input_innerc                 S   s   t t| }t t|}|sH|jd dkr4|j}|jd dkrH|j}|j\}}|j\}}	||	krltdt j|| |f|d}
||
d |d d f< ||
| d d d f< |
S )Nr   r&   z$m and y have incompatible dimensionsr_  )rS   r  r  rm   r  rk   r   )r   rW  r  rx   r  y_arrZm_rowsZm_colsZy_rowsZy_colsr   r#   r#   r$   r  
  s    

r<  )r   rW  r  rx   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 )Nri   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].)rj   rm   r   )r   r   r#   r#   r$   _handle_m_dim_change
  s    r  c                 C   s   | S r'   r#   r,  r#   r#   r$   r1  
  r2  r1  c                    s   t j}t| tjrt| j}nt| tjtjfr:t| }nt| tj	tj
frt  | D ],}t|drx fdd|D  qV | qVt dkrt jdd  D  }nt dkrt  }|S )Nrn  c                    s   g | ]}  |qS r#   )add).0rX   Zcoltypesr#   r$   
<listcomp>
  r2  z#determine_dtype.<locals>.<listcomp>r&   c                 S   s   g | ]}t |qS r#   )r   )r  tyr#   r#   r$   r  
  r2  )rS   r   rI   r   r   r   rx   r  r  r@   rL   setr  r  r?   r`  rn   )
array_likeZarray_like_dtr   r#   r  r$   r7  
  s     

r7  c                 C   sn   t | tjr&| jdkrjtd|nDt | tjrjt | jd tjrjt | jd jd tjrjtd|d S )Nri   z{0} has more than 2 dimensionsr   )rI   r   r   rj   r&  formatr  ri  )r  namer#   r#   r$   check_dimensions
  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)rS   r  rk   r  )r  r#   r#   r$   _handle_ddof
  s    
r  c                 C   s   | S r'   r#   r,  r#   r#   r$   r1  
  r2  c                 C   s   ||  || t | |||S r'   )r  )r   rW  r  rx   r  _DDOF_HANDLER_M_DIM_HANDLERr#   r#   r$   _prepare_cov_input
  s    r  c                 C   s   |d t jfv }t| t jr(| jdkr(|S t| t jrptdd | j D rL|S t| j dkrpt| j d t jrp|S t| t jt j	fr|S t| t j
rt| jd t j
s|rdS dS )Nr&   c                 s   s    | ]}t |tjtjfV  qd S r'   )rI   r   r  r  r  r-  r#   r#   r$   	<genexpr>
  s   z)scalar_result_expected.<locals>.<genexpr>r   TF)r   r=  rI   r   rj   Z	BaseTupler   r?   r  r  r  ri  )Zmandatory_inputZoptional_inputZopt_is_noner#   r#   r$   scalar_result_expected
  s(    r  c                 C   s   t t | dkt | | S r  )rS   r  fabssignr,  r#   r#   r$   
_clip_corr  s    r  c                 C   s    t | j}t | j}|d|  S )Nr  )r  r   r   )r-  r   r   r#   r#   r$   _clip_complex  s    

r  c           	         s   t | d t |d |d tjfv r(t n2t|tjtjfr@t nt|tjrRt nt	dt
t| tjrntt| }t|}t||tjd
 fdd	}d fdd		}t| |r|S |S d S )Nr   rW  z)ddof must be a real numerical scalar typeTFc                    sb   t | ||| }tt|jdkrRtj|jd |jd ftjdS t|||S d S )Nr   ro  )	r  r  rS   r   r;  rm   ro   r  r  )r   rW  r  r  r  r  r  r  rx   r#   r$   np_cov_impl2  s    znp_cov.<locals>.np_cov_implc                    sT   t | ||| }tt|jdkr8tj}nt|||jd }t|S r   )	r  r  rS   r   r;  rm   r  r  r   )r   rW  r  r  r  r  Zvariancer  r#   r$   np_cov_impl_single_variable<  s    z+np_cov.<locals>.np_cov_impl_single_variable)NTFN)NTFN)r  r   r=  _handle_ddof_noprI   r}  r  r   r  r   _handle_m_dim_nopr   r  r7  rS   r  r   r  )	r   rW  r  r  r  Zm_dty_dtr  r  r#   r  r$   np_cov  s,    


  
r  c                    sb   t | }t |}t||tj}|tjkr0t nt d fdd	}ddd}t| |rZ|S |S d S )NTc                    sp   t | ||}t |}t |j}t|jd D ]4}||d d f  |  < |d d |f  |  < q2 |S r   )rS   covZdiagsqrtr   r-   rm   )r-  rW  r  rW   rV  Zstddevr)   Zclip_fnr#   r$   np_corrcoef_implZ  s    
z%np_corrcoef.<locals>.np_corrcoef_implc                 S   s   t | ||}|| S r'   )rS   r  )r-  rW  r  rW   r#   r#   r$    np_corrcoef_impl_single_variablee  s    z5np_corrcoef.<locals>.np_corrcoef_impl_single_variable)NT)NT)r7  rS   r  r   Zcomplex_r  r  r  )r-  rW  r  ra  r  rx   r  r  r#   r  r$   np_corrcoefN  s    


r  c                    sB   t | tjtjf}t| r(|s(dd }nd d fdd}|S )Nc                 S   s:   t | }|jdkr$t jdtjdS t t t |S )Nr#   )r   r&   r_  )	rS   r  rm   r[  r   r/   r   Zvstackr"  r  r#   r#   r$   r   z  s    

znp_argwhere.<locals>.impl)r   r   )r&   r   c                    s4   | d ur t | r tjtjdS tj tjdS d S r^  )r  rS   r[  r   r/   r   ZfalseishZtrueishr#   r$   r     s    )rI   r   r  r  r	   )r(   Z
use_scalarr   r#   r  r$   np_argwheres  s    
r  c                 C   s   t | rdd }ndd }|S )Nc                 S   s   t | }t t |d S r   )rS   r  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#   r  r#   r#   r$   r    r2  z0np_flatnonzero.<locals>.impl.<locals>.<listcomp>r_  )r  r-   rS   r;  r   r/   )r(   r9   r#   r#   r$   r     s    r3  )r(   r   r#   r#   r$   np_flatnonzero  s    
r  c                 C   s   | j dkrD| jd }| jd }d| }|r4|| }q|t|| }nJt| j}tt|dksltddt|d d 	  }|
 }||fS )Nri   r   r&   z/All dimensions of input must be of equal lengthr   )rj   rm   r   rS   r;  r   rC  rk   r   r'  r   )r(   wrapr   r  steprH  rm   r#   r#   r$   _fill_diagonal_params  s    



r  c                 C   s.   t | |\}}td||D ]}|| j|< qd S r   )r  r-   r   )r(   r   r  rH  r  r)   r#   r#   r$   _fill_diagonal_scalar  s    r  c                 C   sN   t | |\}}d}t|}td||D ]"}|| | j|< |d7 }|| }q&d S r  )r  r?   r-   r   )r(   r   r  rH  r  ZctrZv_lenr)   r#   r#   r$   _fill_diagonal  s    r  c                 C   sR   t | j}|j}|j}t t | sFt ||k sFt ||krNtdd S Nz'Unable to safely conform val to a.dtype)rS   iinforx   r   r   r   r  rk   )r(   r   r  v_minv_maxr#   r#   r$   _check_val_int  s
    .r  c                 C   sN   t | j}|j}|j}|t | }t ||k sBt ||krJtdd S r  )rS   finforx   r   r   r  r   rk   )r(   r   r  r  r  Zfinite_valsr#   r#   r$   _check_val_float  s    r  c                 C   s   | S r'   r#   r-  rW  r#   r#   r$   r1    r2  c                 C   s   d S r'   r#   r,  r#   r#   r$   r    s    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rTt|   fddS d S )Nc                 S   s   | S r'   r#   r,  r#   r#   r$   r1    r2  z_asarray_impl.<locals>.<lambda>c                 S   s
   t | S r'   r:  r,  r#   r#   r$   r1    r2  c                    s   t j| g dS r^  r:  r,  r  r#   r$   r1    r2  )rI   r   r   r  rL   r  r  r   r,  r#   r  r$   _asarray_impl  s    r  c                    s   | j dkrt| jtjrt nt| jtjr2t nt d fdd	}d	 fdd	}t|tjtjtj	frl|S t|tj
tjtjfr|S nd| j  }t|d S )
Nr&   Fc                    s&   t | } | | t| || d S r'   )r  r  r  r(   r   r  Ztmpvalcheckerr#   r$   scalar_impl   s    
z%np_fill_diagonal.<locals>.scalar_implc                    s&   t | } | | t| || d S r'   )r  r  r  r  r  r#   r$   non_scalar_impl  s    
z)np_fill_diagonal.<locals>.non_scalar_implz4The first argument must be at least 2-D (found %s-D))F)F)rj   rI   rx   r   r}  r  r   r  
_check_nopr  rL   r  r   r   )r(   r   r  r  r  r   r#   r  r$   np_fill_diagonal  s    

r  c                 C   s   d| j f S )Nzllvm.rint.f%d)r   )tpr#   r#   r$   _np_round_intrinsic  s    r  c                 C   s   ||}dd }||fS )Nc                 S   s`   |\}|j d }| |}|j}tj||g}t||t|}	|	|	|f}
t
| ||j|
S r   )r5   r+   modulellvmliteZirFunctionTyper   Zget_or_insert_functionr  callr   r`   )rc   r3   rd   r5   r   r  Zlltyr  ZfntyrF  re   r#   r#   r$   r>     s    

z _np_round_float.<locals>.codegenr#   )Z	typingctxr   rd   r>   r#   r#   r$   _np_round_float  s    r  c                 C   s   t | st | r| S |dkrp|dkr:d|d  }d}nd| }d}| | | }t |r`| S t|| | S d|  }| | }t|| S d S )Nr      g      $@gMDr  )r  r  r   r  )r-  ndigitsZpow1Zpow2rW  r#   r#   r$   round_ndigits*  s    

r  c                 C   s   t | stdt|tjs0t|s0d}t|t| tjtjtjfrt|rt| tjrhddd}|S t| tjrddd}|S t| tjrddd}|S qddd}|S n0t| tjrt|rdd	d}|S dd
d}|S d S )Nz#The argument "a" must be array-likez5The argument "out" must be an array if it is providedr   c                 S   s   |dkrt | S t| |S d S r   )r  r  r(   decimalsr   r#   r#   r$   r   S  s    zimpl_np_round.<locals>.implc                 S   s   |dkr| S t t| |S d S r   )r  r  r  r#   r#   r$   r   Z  s    c                 S   s@   |dkrt | j}t | j}nt| j|}t| j|}t||S r   )r  r   r   r  complex)r(   r  r   r   r   r#   r#   r$   r   a  s    
c                 S   s   t | ||d< |S r   )rS   roundr  r#   r#   r$   r   k  s    c                 S   s   t | }t | ||S r'   )rS   r  r  r  r#   r#   r$   r   q  s    
c                 S   s<   | j |j krtdt| D ]\}}t||||< q|S )Nzinvalid output shape)rm   rk   rS   r  r  )r(   r  r   r  r   r#   r#   r$   r   v  s
    )r   N)r   N)r   N)r   N)r   N)r   N)	r	   r   rI   r   r   r   r   r}  r   )r(   r  r   r   r   r#   r#   r$   impl_np_roundE  s0    





r  c                 C   s<   t | tjrdd }|S t | tjr0dd }|S tdd S )Nc                 S   s$   | dkrd} | t j9 } t | |  S )Nr%  g#B;)rS   pisinr,  r#   r#   r$   r     s    
zimpl_np_sinc.<locals>.implc                 S   s0   t | }t | D ]\}}t |||< q|S r'   )rS   r  r  sinc)r-  r   r  r   r#   r#   r$   r     s    
z,Argument "x" must be a Number or array-like.)rI   r   r  r   r   r=  r#   r#   r$   impl_np_sinc  s    r  c                    s   t dtj  t| tjr,d fdd	}|S t| tjrz| j}t|tjrR|j	nt|tj
rd|nd S dfdd	}|S td|  d S )	N   Fc                    s,   |rt | j| j  S t | j| jS d S r'   )rS   Zarctan2r   r   )r  deg)deg_multr#   r$   r     s    zov_np_angle.<locals>.implc                    s6   t j|  d}t | D ]\}}t ||||< q|S r^  )rS   r  r  angle)r  r  r   r  r   )	ret_dtyper#   r$   r     s    z6Argument "z" must be a complex or Array[complex]. Got )F)F)r  rS   r  rI   r   r  r   rx   r   Zunderlying_floatr   r   )r  r  r   rx   r#   )r  r  r$   ov_np_angle  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}t |
||	||}t ||} |j|} |*    ||| W d    n1 s0    Y  W d    n1 s"0    Y   |f fddt|D } fdd|D }dd |D }t |}t ||j}t |
||	||}t ||} |j|} |z |s|f} |}t|D ]6}t || dd|g}t || | q  ||| W d    n1 sV0    Y  W d    n1 sv0    Y   |j|}t |j|S )	Nr   r&   c                    s   g | ]}t   qS r#   )r   Z	_getvalue)r  r)   r3   rc   	out_shapeoutarytyr#   r$   r    s   z!array_nonzero.<locals>.<listcomp>c                    s   g | ]}t  |qS r#   )r   r  r   )r3   rc   r  r#   r$   r    r2  c                 S   s   g | ]
}|j qS r#   )r9   r  r#   r#   r$   r    r2  r#   C)r5   r`   rx   rn  r   r   Zunpack_tuplerm   stridesr9   layoutr.   r   r/   Zalloca_once_valueZ	loop_nestrp   Zget_item_pointer2r   Zis_trueZif_thenstorer  loadr-   r   Z
make_tupler   )rc   r3   rd   r5   Zarytyr   ZnoutsrD  rm   r  r9   r  rZ   r  rn  indicesptrr   ZnzZoutsZoutarysZ	out_datasr  curr)   r7   r#   r  r$   array_nonzero  s\    
Z
Tr  c                    s    fdd}|S )Nc                    s,   t | }t | }| r(|S |S r'   )rS   r  r  )	conditionr-  rW  x_y_r_  r#   r$   r     s    z)_where_zero_size_array_impl.<locals>.implr#   rx   r   r#   r_  r$   _where_zero_size_array_impl  s    r  c                 C   s0   t | D ] \}}|r|| n|| ||< q
|S r'   )rS   r  )condr-  rW  re   r   rW   r#   r#   r$   _where_generic_inner_impl  s    r  c           	      C   sH   | j }|j }|j }|j }t| jD ] }|| r6|| n|| ||< q"|S r'   )r   r-   r   )	r  r-  rW  re   cfZxfZyfrfr)   r#   r#   r$   _where_fast_inner_impl  s    r  c                    s$   dhdhfv  fdd}|S )Nr  Fc                    s   t | t |t |  }}}t |j|j|j}t ||}t ||}t ||}	dkr~t j|d d d  dj}
nt j| d}
rt|||	|
S t|||	|
S d S )Nr   r   r_  )	rS   r  r`  rm   ra  r   r  r  r  )r  r-  rW  Zcond1x1y1rm   Zcond_r  r  re   rx   r  Zuse_faster_implr#   r$   r     s    "z!_where_generic_impl.<locals>.implr#   )rx   r  r   r#   r  r$   _where_generic_impl  s    r  c                 C   s    t | sd}t|dd }|S )N+The argument "condition" must be array-likec                 S   s   t |  S r'   )rS   r  r"  )r  r#   r#   r$   where_cond_none_none%  s    z)ov_np_where.<locals>.where_cond_none_none)r	   r   )r  r   r  r#   r#   r$   ov_np_where  s
    r  c                    s.  t | sd}t|t|s$t|r,tdt||fdD ]"\}}t |s:d}t||q:t| tj}t|tj}t|tj}|rt|}	t|}
t	
|	|
}dd  t fdd| ||fD }|rt|S | j}|r|r|j|j  kr| jkrn n|j}nd	}t||S d
d }|S d S )Nr  z"Argument "x" or "y" cannot be Noner  z0The argument "{}" must be array-like if providedc                 S   s"   t | tjp t | tjo | jdkS r   )rI   r   r  r   rj   argr#   r#   r$   check_0_dimL  s    z$ov_np_where_x_y.<locals>.check_0_dimc                    s   g | ]} |qS r#   r#   )r  r(   r
  r#   r$   r  O  r2  z#ov_np_where_x_y.<locals>.<listcomp>r  c                 S   s    t t | t |t |S r'   )rS   r  r  )r  r-  rW  r#   r#   r$   r   [  s    zov_np_where_x_y.<locals>.impl)r	   r   r   zipr  rI   r   r   r7  rS   r`  r   r  r  r  )r  r-  rW  r   r	  r  Zcond_arrr^  r  ra  r  rx   Zspecial_0_caser  r   r#   r  r$   ov_np_where_x_y*  s8    "
r  c                 C   s   dd }|S )Nc                 S   s   | j S r'   )r   r  r#   r#   r$   np_real_implb  s    znp_real.<locals>.np_real_implr#   )r   r  r#   r#   r$   np_real`  s    r  c                 C   s   dd }|S )Nc                 S   s   | j S r'   )r   r  r#   r#   r$   np_imag_implj  s    znp_imag.<locals>.np_imag_implr#   )r   r  r#   r#   r$   np_imagh  s    r  c                 C   s   t | tjsd S dd }|S )Nc                 S   s"   t | D ]}||kr
 dS q
dS r   )rS   rT   )rV   ri  r-  r#   r#   r$   np_contains_implx  s    z%np_contains.<locals>.np_contains_implr   )rV   ri  r  r#   r#   r$   np_containss  s    r  c                 C   s8   t | stdt|r&ddd}|S ddd}|S d S )Nz3The argument to np.count_nonzero must be array-likec                 S   s   t | }t |dkS r   )rS   r   r'  r(   rN   Zarr2r#   r#   r$   r     s    
znp_count_nonzero.<locals>.implc                 S   s   |  tj}tj||dS )N)rN   )r  rS   r   r'  r  r#   r#   r$   r     s    )N)N)r	   r   r   )r(   rN   r   r#   r#   r$   np_count_nonzero  s    

r  c                 C   s   | S r'   r#   r,  r#   r#   r$   r1    r2  c                 C   s
   t | S r'   rR  r,  r#   r#   r$   r1    r2  c                    s   t | tjtjfstdt |tjtjtjfrlt |tjrBt nt |jtjsXtdt	  fdd}|S t |tjstddd }|S d S )Nz)arr must be either an Array or a Sequencezobj should be of Integer dtypec                    s>   t t | } | j}t j|t jd} |}d||< | | S )Nr_  F)rS   r   r  r   onesr   )rV   r@  r  Zkeephandlerr#   r$   np_delete_impl  s    z!np_delete.<locals>.np_delete_implc                 S   sf   t t | } | j}|}|| k s,||kr4td|dk rD||7 }t | d | | |d d  fS )Nz"obj must be less than the len(arr)r   r&   )rS   r   r  r   
IndexErrorconcatenate)rV   r@  r  posr#   r#   r$   np_delete_scalar_impl  s    z(np_delete.<locals>.np_delete_scalar_impl)
rI   r   r   r  r   Z	SliceTypenp_delete_handler_isslicerx   r}  np_delete_handler_isarray)rV   r@  r  r  r#   r  r$   	np_delete  s    r   r&   c                 C   s(   t | tjr| jdkrd S ddd}|S )Nr   r&   c                 S   s0  |dkr|   S |dk r td| jd }| jd d t|| df }t|| j}|jdkrd|S | d|f}|d|jd f}t|| j}t	|jd D ]}t	|d D ]$}	|||	d f |||	f  ||	< qt	d|D ]2}
t	||
 d D ]}	||	d  ||	  ||	< qq|d ||  ||< q|S )Nr   z"diff(): order must be non-negativer   r&   )
r  rk   rm   r   rS   r   rx   r   r   r-   )r(   r  r   r  r   a2Zout2Zworkmajorr)   Zniterr#   r#   r$   	diff_impl  s(    

"znp_diff_impl.<locals>.diff_impl)r&   )rI   r   r   rj   )r(   r  r#  r#   r#   r$   np_diff_impl  s    
r$  c                 C   sN   t | rt |stdtjtjf}t| |rBt||rBdd }ndd }|S )Nz3Both arguments to "array_equals" must be array-likec                 S   s   | |kS r'   r#   )a1r!  r#   r#   r$   r     s    znp_array_equal.<locals>.implc                 S   s2   t | }t |}|j|jkr.t ||kS dS r   )rS   r  rm   r   )r%  r!  r(   r  r#   r#   r$   r     s
    

)r	   r   r   r  r  rI   )r%  r!  acceptedr   r#   r#   r$   np_array_equal  s    
r'  c                 C   s$   t | st |stddd }|S )Nz.intersect1d: first two args must be array-likec                 S   sj   t | } t |}t | } t |}t | |f}|  |dd  |d d k}|d d | }|S )Nr&   r   )rS   r  r  r  sort)ar1ar2Zauxr  Zint1dr#   r#   r$   np_intersects1d_impl
  s    



z0jit_np_intersect1d.<locals>.np_intersects1d_implr	   r   )r)  r*  r+  r#   r#   r$   jit_np_intersect1d  s    r-  c                 C   sD   t |tjr&|jdkr@td| nt |tjs@td| d S )Nr&   z${0}(): input should have dimension 1z+{0}(): input should be an array or sequence)rI   r   r   rj   r&  r  r  )	func_nameseqr#   r#   r$   validate_1d_array_like  s    
r0  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)r?   rk   r(   r#  r2  r#   r#   r$   validate_inputs2  s    z$np_bincount.<locals>.validate_inputsc                 S   s   | |  || 7  < d S r'   r#   r   r   r   r#  r#   r#   r$   
count_item8  s    znp_bincount.<locals>.count_itemc                 S   s   d S r'   r#   r3  r#   r#   r$   r4  ?  s    c                 S   s   | |  d7  < d S r  r#   r5  r#   r#   r$   r6  C  s    r   c                    s   | || |dk rt dt| }|dkr4| d nd}td|D ]&}| | dk rZt dt|| | }qBt|d |}t|}t|D ]} ||| | | q|S )Nr   z 'minlength' must not be negativer   r&   z/bincount(): first argument must be non-negative)rk   r?   r-   r   rS   r[  )r(   r#  r2  r  r  r)   Z
out_lengthr   r6  rI  r4  r#   r$   bincount_implG  s    z"np_bincount.<locals>.bincount_impl)Nr   )r0  rI   rx   r   r}  r   r=  rS   r   r   r/   )r(   r#  r2  r8  r#   r7  r$   np_bincount#  s$    





r9  c                 C   s   t | jrTt |jrNt | jr0t |jS t |jr@dS | j|jkS qdS nvt |jrddS t | jrt |jr| j|jkS dS n<t |jrdS | j|jk rdS | j|jkr| j|jkS dS d S r   )rS   r   r   r   rM  r#   r#   r$   less_than_or_equal_complexa  s*    r:  c                 C   s>   t | tst |trt| |S t |tr6t|r6dS | |kS )NT)rI   r  r:  r  rS   r   rM  r#   r#   r$   _less_than_or_equal  s    


r;  c                 C   s:   t | tst |trt| |S t |tr2t| |S | |k S r'   )rI   r  less_than_complexr  less_than_floatrM  r#   r#   r$   
_less_than  s
    


r>  c                 C   s$   t | rdS t |rdS | |k S r  )rS   r   rM  r#   r#   r$   _less_then_datetime64  s
    

r?  c                 C   s   t ||  S r'   )r?  rM  r#   r#   r$   _less_then_or_equal_datetime64  s    r@  c                    s    fdd}|S )Nc                    sB   ||k r:||| d?  }| | } ||r4|d }q |}q ||fS r  r#   )r(   key_valr   r   rJ  Zmid_valcmpr#   r$   r     s    

z_searchsorted.<locals>.implr#   )rC  r   r#   rB  r$   _searchsorted  s    rD  leftrightc                 C   s~   |t v sJ | jdv r t}t}nt}t}|dkr>t|}|}n0t| tj	rbt
dk rbt|}|}nt|}|}t|t|fS )NZmMrE  )r&      )VALID_SEARCHSORTED_SIDEScharr?  r@  r>  r;  rD  rS   r9  inexactr   r   )np_dtypesider  le_impl_cmpr#   r#   r$    make_searchsorted_implementation  s    
rP  c                    s   t |d|}|tvr"td| t|tjtjfr@t|j}nt|}t	
t| j|}t||\ t|tjrd fdd	}n&t|tjrd	dd}nd
fdd	}|S )NrK   z Invalid value given for 'side': rE  c           	         s   t j|jt jd}|jd }d}t| }t|jD ]b}|j| } ||rTt| }n"d}|t| k rn|d7 }nt| }|}| |||\}}|||< q2||jS )Nr_  r   r&   )	rS   r   r   r/   r   r?   r-   r   rm   )	r(   rX   rL  r   Zlast_key_valr   r   r)   rA  rO  rN  r#   r$   r     s     





zsearchsorted.<locals>.implc                 S   s   t |}t j| ||dS )NrL  )rS   r  searchsorted)r(   rX   rL  r#   r#   r$   r     s    
c                    s    | |dt | \}}|S r   )r?   )r(   rX   rL  rr8   )rN  r#   r$   r     s    )rE  )rE  )rE  )r|   rH  r   rI   r   r   r  r   rx   rS   r`  rP  )r(   rX   rL  Zside_valZv_dtZnp_dtr   r#   rQ  r$   rS    s    rS  c                    s>   t | tjr | jtjv r tdtdd  d fdd	}|S )Nzx may not be complexc                 S   s   t | dkrdS | d }d}|t | k r>| | |kr>|d7 }q|t | krNdS | | }||k rt|d t | D ]}|}| | }||krp dS qpdS t|d t | D ]}|}| | }||k r dS qdS d S )Nr   r&   r   )r?   r-   )bins
last_valuer)   Z
next_valuer#   r#   r$   _monotonicity  s,    
z"np_digitize.<locals>._monotonicityFc                    s    |}|dkrt d|rX|dkrFt|tj|d d d | dd S tj|| ddS n:|dkrt|tj|d d d | dd S tj|| ddS d S )Nr   z3bins must be monotonically increasing or decreasingr   rE  rR  rF  )rk   r?   rS   rS  )r-  rU  rF  ZmonorW  r#   r$   digitize_impl<  s    ""z"np_digitize.<locals>.digitize_impl)F)rI   r   r   rx   complex_domainr   r   )r-  rU  rF  rY  r#   rX  r$   np_digitize  s    
$r[  r  c                    sP   t |ttjfrB|d tjfv r6td d fdd	}qLddd}n
d	dd}|S )
Nr  r  c                    sL    }  }t | D ]$}| }||kr,|}||k r|}qt | |||fS r'   )rS   rT   rU   	histogram)r(   rU  r-   bin_minbin_maxr   rX   r  r#   r$   histogram_implb  s    z$np_histogram.<locals>.histogram_implc                 S   s   |dkrt d|\}}||ks(t dt|tj}||kr|||  }t| D ]h}| }t|| | }	d|	  kr|k rn n|t|	  d7  < qT||krT||d   d7  < qTt	|||d }
||
fS )Nr   z0histogram(): `bins` should be a positive integerz;histogram(): max must be larger than min in range parameterr&   )
rk   rS   r[  r/   rT   rU   r  r  r  Zlinspace)r(   rU  r-   r]  r^  histZ	bin_ratior   rX   r  Z
bins_arrayr#   r#   r$   r`  n  s"    c                 S   s   t |d }t|D ] }|| ||d  kstdq|d }|| }t|tj}|dkrt| D ]t}| }	||	  kr|ksqf qfd}
|d }|
|k r|
| d d? }|	|| k r|d }q|}
q||
  d7  < qf||fS )Nr&   z-histogram(): bins must increase monotonicallyr   )r?   _rangerk   rS   r[  r/   rT   rU   )r(   rU  r-   Znbinsr)   r]  r^  ra  r   rX   lohir  r#   r#   r$   r`    s*    

)r  N)r  N)r  N)rI   r  r   r}  r=  r  )r(   rU  r-   r`  r#   r_  r$   np_histogramY  s    
!re  )Zibetar   machepepsnegepepsnegiexpminexpZxminmaxexpZxmaxZirndZngrdepsilontinyZhuge	precision
resolutionMachAr)rg  ri  rj  rf  r   rl  r   rk  rh  ZnexpZnmantro  rp  rn  bitsr  )r   r   rr  r  c                     sr   t dkrd S d tjdd,d} tjd| tdd tj W d    n1 sN0    Y  t  fdd	}d S )
N)r&      T)recordz(`np.MachAr` is deprecated \(NumPy 1.22\)alwaysz.*numba.*arraymath)messagecategoryr  c                     sT    t fddtD  rDd } t| jjd t| j| j  fdd}|S )Nc                    s   g | ]}t  |qS r#   rN  r  r  r#   r$   r    r2  z7_gen_np_machar.<locals>.MachAr_impl.<locals>.<listcomp>r   c                      s   t   S r'   )rq  r#   )_mach_ar_datar#   r$   r     s    z1_gen_np_machar.<locals>.MachAr_impl.<locals>.impl)	r   _mach_ar_supportedwarningswarn_explicitrv  r5   r   filenamelineno)Zwmsgr   Z	np_MachArw)ry  r  r$   MachAr_impl  s    z#_gen_np_machar.<locals>.MachAr_impl)r   r{  catch_warningsfilterwarningsDeprecationWarningrS   rq  r   )r   r  r#   r  r$   _gen_np_machar  s    $r  c                    sb   t | d| }t|}z||W n ty4   Y d S 0 tfdd|D t fdd}|S )Nrx   c                    s   g | ]}t  |qS r#   rN  r  rx  r#   r$   r    r2  z'generate_xinfo_body.<locals>.<listcomp>c                    s     S r'   r#   r  )	containerr9   r#   r$   r     s    z!generate_xinfo_body.<locals>.impl)r|   r   rk   r   r   )r	  Znp_funcr  attrZnbtyrK  r   r#   )r  r9   r  r$   generate_xinfo_body  s    r  c                    s    t | tjtt  fdd}|S )Nc                    s    | S r'   r#   r_  rE  r#   r$   r     s    zol_np_finfo.<locals>.impl)r  rS   r  _finfo_supportedr  r#   rE  r$   ol_np_finfo  s    r  c                    s    t | tjtt  fdd}|S )Nc                    s    | S r'   r#   )int_typerE  r#   r$   r     s    zol_np_iinfo.<locals>.impl)r  rS   r  _iinfo_supported)r  r   r#   rE  r$   ol_np_iinfo  s    r  c                    sl   t dd }ts|S tjtjB }| |v o.||v }|s8|S t| }t|}t|| t  fdd}|S d S )Nc                 S   s.   d}t t| D ]}|| | ||   }q|S r   r-   r?   )r(   r  accr)   r#   r#   r$   
_innerprod  s    z#_get_inner_prod.<locals>._innerprodc                    s   t |  | S r'   )rS   r  r  rM  r;  r#   r$   	_dot_wrap   s    z"_get_inner_prod.<locals>._dot_wrap)r   
_HAVE_BLASr   Zreal_domainrZ  r   rS   r`  )ZdtaZdtbr  ZfltyZfloatsa_dtb_dtr  r#   r  r$   _get_inner_prod  s    
r  c                 C   s&   t | tjr"| jdks"td| d S )Nr&   z!%s() only supported on 1D arrays )rI   r   r   rj   r   )r(   r.  r#   r#   r$   
_assert_1d&  s    
r  c                 C   s   d S r'   r#   )ap1ap2mode	directionr#   r#   r$   _np_correlate_core,  s    r  c                    s@   t | j}t |j}t|| t| j|j fdd}|S )Nc                    s  t | }t |}||k r td|}|}|dkrF|| d }d}d}	nL|dkrl|d }	|d }|| d }n&|dkr|d }|| d }	ntdt| }
|dkrd}d}n|d	kr|d }d	}ntd
t|D ]8}|| | }| d | || d  |
|< || }qt|| d D ](}| |||  ||
|< || }q t|	D ]:}|| d }| | d  |d | |
|< || }qR|
S )Nz''len(ap1)' must greater than 'len(ap2)'r  r&   r   ro   Zsameri   z1Invalid 'mode', valid are 'full', 'same', 'valid'r   zInvalid direction)r?   rk   rS   r[  r-   )r  r  r  r  Zn1Zn2rj  r  Zn_leftZn_rightrW  r   incr)   r  r;  Z	innerprodr#   r$   r   7  sP    	 
 z%_np_correlate_core_impl.<locals>.impl)r   rx   rS   r`  r  )r  r  r  r  r  r  r   r#   r  r$   _np_correlate_core_impl0  s    

@r  r  c                    s   t | d t |d tdd }tdd }| jtjv rX|jtjv rN| |qv| |n|jtjv rn| |n| |d	 fdd	}|S )
Nznp.correlatec                 S   s
   t | S r'   )rS   r   r,  r#   r#   r$   op_conj  s    z_np_correlate.<locals>.op_conjc                 S   s   | S r'   r#   r,  r#   r#   r$   op_nop  s    z_np_correlate.<locals>.op_nopr  c                    sh   t | }t |}|dkr td|dkr0td||k rNt| | |dS t | ||dS d S Nr   z'a' cannot be emptyz'v' cannot be emptyr   r&   r?   rk   r  r(   rX   r  ZlalvZa_opZb_opr#   r$   r     s    z_np_correlate.<locals>.impl)r  )r  r   rx   r   rZ  )r(   rX   r  r  r  r   r#   r  r$   _np_correlatez  s&    



r  ro   c                 C   s"   t | d t |d ddd}|S )Nznp.convolvero   c                 S   sl   t | }t |}|dkr td|dkr0td||k rPt|| d d d |dS t| |d d d |dS d S r  r  r  r#   r#   r$   r     s    znp_convolve.<locals>.impl)ro   )r  )r(   rX   r  r   r#   r#   r$   np_convolve  s    


r  c                    s0  t | sd S t| tjrDt|s,| j|jkr8d
dd}n
ddd}nt| tjtjfrvt|rjddd}n
ddd}nt| tjtj	frt|r| n|}t
|dfdd	}n|t| tjj rt| jtjtj	fstdt|r| jn|dfdd	}n.t| tjr(t| j d fd	d	}nd }|S )Nc                 S   s   | S r'   r#   r(   rx   r#   r#   r$   r     s    znp_asarray.<locals>.implc                 S   s
   |  |S r'   )r  r  r#   r#   r$   r     s    c                 S   s
   t | S r'   r:  r  r#   r#   r$   r     s    c                 S   s   t | |S r'   r:  r  r#   r#   r$   r     s    c                    s   t |  S r'   r:  r  r  r#   r$   r     s    z?asarray support for List is limited to Boolean and Number typesc                    s4   t | }tj| d}t| D ]\}}|||< q|S r^  )r?   rS   r   r   )r(   rx   rA  rW  r)   rX   )target_dtyper#   r$   r     s
    
c                    s      S r'   )r  r  r8  r#   r$   r     s    )N)N)N)N)N)N)N)r	   rI   r   r   r   rx   r  rL   r  r  r   Z
containersZListTyper   ZStringLiteralrS   r  rK   )r(   rx   r   Zdt_convr#   )rV   r  r  r$   
np_asarray  s4    r  c                    sD   t |tjrt|}t|tjs*tj n| tjf fdd	}|S )Nc                    s   t |  S r'   rR  r  rP  r#   r$   r     s    znp_asfarray.<locals>.impl)rI   r   Typer   rS   r9  rJ  r   )r(   rx   r   r#   r  r$   np_asfarray  s    r  c                 C   s   dd }|S )Nc                    s   t |  t |  jdkr*tdt  jd  rVj jkrVd}t|t jj} fddt|D }t |S )Nr   z"Cannot extract from an empty arrayz+condition shape inconsistent with arr shapec                    s   g | ]}| r j | qS r#   r  )r  r   r(   r  r#   r$   r    r2  z7np_extract.<locals>.np_extract_impl.<locals>.<listcomp>)	rS   r  r  r   rk   r   r   r-   r;  )r  rV   r   max_lenr   r#   r  r$   np_extract_impl  s    

 z#np_extract.<locals>.np_extract_implr#   )r  rV   r  r#   r#   r$   
np_extract  s    r  c                 C   sN  ddd}t | tjtjfs$tdt |tjtjfs>tdt |ttjtjfsZtdt | d tjsrtdt |d tjstdt | d tjrt | d j	tjstd	t | d tjrt | d tjrt | d d tjstd
t | d tjr | d j
|d j
kr tdt | d tjrJ| d j
dk rJtd|S )Nr   c                 S   sp   t | t |krtd|t|d j|d j }tt | d ddD ]"}| | }|| }t|||}qH|S )Nz7list of cases must be same length as list of conditionsr   r&   r   )r?   rk   rS   r  rm   rx   r-   r  )condlist
choicelistdefaultr   r)   r  choicer#   r#   r$   np_select_arr_impl!  s    z%np_select.<locals>.np_select_arr_implz"condlist must be a List or a Tuplez$choicelist must be a List or a Tuplez,default must be a scalar (number or boolean)z items of condlist must be arraysz"items of choicelist must be arraysz%condlist arrays must contain booleansz*condlist tuples must only contain booleanszHcondlist and choicelist elements must have the same number of dimensionsr&   z/condlist arrays must be of at least dimension 1)r   )rI   r   Listr@   r   r  r  r  r   rx   rj   )r  r  r  r  r#   r#   r$   	np_select  s4    
"r  c                 C   sT   t | rt |stdd| jjv s0d|jjv rH| jj|jjkrHtddd }|S )Nz.The arguments to np.union1d must be array-likeunichrz/For Unicode arrays, arrays must have same dtypec                 S   s4   t t | }t t |}t t ||fS r'   )rS   r   r  r  r  )r)  r*  r(   r  r#   r#   r$   
union_implY  s    znp_union1d.<locals>.union_impl)r	   r   rx   r  )r)  r*  r  r#   r#   r$   
np_union1dQ  s    r  c                    sl   d}t | tjtjtjfs"t|t|r2| j n(zt| W n t	yX   tdY n0 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)rS   r  rT   r  rk   )r(   rx   r)   r  r#   r$   r   p  s
    

z"np_asarray_chkfinite.<locals>.impl)N)
rI   r   r   r  rL   r   r   rx   r   r   )r(   rx   r   r   r#   r  r$   np_asarray_chkfinitea  s    r  r   -DT!@c                    s   t |ttjfsd}t|t| s0d}t|t |tjtjfsXt|sXd}t|t |t	tj
fstd}t|tdd d ft |tj
rtt| jt| ntt| jtj t tjd
 fdd		}|S )Nz&The argument "axis" must be an integerz#The argument "p" must be array-likez'The argument "discont" must be a scalarz&The argument "period" must be a scalarr&   r   r  c                    sf  |dkrd}t |t|  }|j}|d }||j| |f}|d u rV|d }rrt|d\}	}
|
dk}n|d }	d}|	 }t|j| D ]}|| }t	|}t
|| || }|rt||k|dk@ |	|}|| }ttdd |D |k d|}ttdd |D |k d|}t||j}t|}| |  |< |||< q||S )	Nr   z*Value for argument "axis" is not supportedri   r   Tc                 S   s   g | ]}t |qS r#   r  r  r#   r#   r$   r    r2  z.numpy_unwrap.<locals>.impl.<locals>.<listcomp>c                 S   s   g | ]}t |qS r#   r  r  r#   r#   r$   r    r2  )rk   rS   r  r  rm   r   r   divmodr-   rC  modr  r;  r  r   )pdiscontrN   periodr   Zp_initZ
init_shapeZ	last_axisZp_newZinterval_highremZboundary_ambiguousZinterval_lowr)   rowddZddmodZ
ph_correctZph_ravelZuprx   Zinteger_inputZslice1r#   r$   r     sF    



znumpy_unwrap.<locals>.impl)Nr   r  )rI   r  r   r}  r   r	   r   r   r   r  r  rE   rS   r  r   rx   r   r9  integer)r  r  rN   r  r   r   r#   r  r$   numpy_unwrapz  s*    )r  c                 C   s@   t d|  | d}t t |dd|| d   d|| d   S )Nr  ri   r   r&   )rS   r  r  Z
less_equalr  r  r#   r#   r$   np_bartlett_impl  s    r  c                 C   sR   t d|  | d}ddt t j| | d    dt dt j | | d    S )Nr  ri   gzG?r   r&   g{Gz?rU  rS   r  cosr  r  r#   r#   r$   np_blackman_impl  s    r  c                 C   s2   t d|  | d}ddt t j| | d    S )Nr&   ri   gHzG?gq=
ףp?r  r  r#   r#   r$   np_hamming_impl  s    r  c                 C   s2   t d|  | d}ddt t j| | d    S )Nr&   ri   r   r  r  r#   r#   r$   np_hanning_impl  s    r  c                    s    fdd}|S )Nc                    s$   t | tjstd fdd}|S )NM must be an integerc                    s8   | dk rt jdt jdS | dkr0t jdt jdS  | S )Nr&   r#   r_  )rS   r;  float_r  )r  funcr#   r$   window_impl  s
    z>window_generator.<locals>.window_overload.<locals>.window_impl)rI   r   r}  r   )r  r  r  r#   r$   window_overload  s    z)window_generator.<locals>.window_overloadr#   )r  r  r#   r  r$   window_generator  s    r  )g4!\Tg}b3<gr넱g^<g"P
g'&&KF5=gbLag$ӛ/=gjzg<t̾=gVg4T&>g0Kg5dMv;p>g"c쑾g$>g'doҾgY(X?>gZY&+g|t(?gRBguZ?gI ^qga?g!Ng-Ί>?g-4pKgw?gWӿg*5N?)gT`g0fFVg!<gA`<gҫ`g8箸g}<g攐*<gbe~g2hϙ]'gE_V=gsk[=g&GCi=gfCg{~5g%t9QgO $=guo >g["d,->gmրVX>gna>g+A>gRx?gI墌k?g	b?c                 C   sH   |d }d}t dt|D ] }|}|}| | | ||  }qd||  S )Nr   r%  r&   r   r  )r-  valsb0b1r)   b2r#   r#   r$   _chbevl7  s    r  c                 C   s\   | dk r|  } | dkr6d|  d }t | t|t S t | td|  d t t |  S )Nr   g       @r   rU  g      @@)rS   expr  _i0A_i0Br  r  r#   r#   r$   _i0D  s    r  c                 C   sb   t j| t jd}tt |}tt|D ]2}t|t d| | | | d   | ||< q*|S )Nr_  r&   rU  )rS   r  r  r  r-   r?   r  )r  alphabetarW  tr)   r#   r#   r$   _i0nO  s
    0r  c                 C   s:   t | tjstdt |tjtjfs.tddd }|S )Nr  z beta must be an integer or floatc                 S   sT   | dk rt jdt jdS | dkr0t jdt jdS t d| }| d d }t|||S )Nr&   r#   r_  r   rU  )rS   r;  r  r  r  r  )r  r  r  r  r#   r#   r$   np_kaiser_impla  s    z!np_kaiser.<locals>.np_kaiser_impl)rI   r   r}  r   r   )r  r  r  r#   r#   r$   	np_kaiserY  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   rh   .ri   r   )rm   rS   r)  rx   rp   )r-  x0r  Zx2r#   r#   r$   _cross_preprocessingr  s    
z._cross_operation.<locals>._cross_preprocessingr  r  r  )rS   r)  )r(   r  r   r  a0r%  r!  r  r  r  Zcp0Zcp1Zcp2r#   r#   r$   _cross_operationo  s    	r  c                 C   s   d S r'   r#   rM  r#   r#   r$   _cross  s    r  c                    sJ   t t| jt|j | jdkr:|jdkr: fdd}n fdd}|S )Nr&   c                    s   t d }t| || |S )Nrh   )rS   r   r  )r(   r  cpr_  r#   r$   r     s    z_cross_impl.<locals>.implc                    s6   t | d |d j}t |d  }t| || |S )Nr  r  )rS   r  rm   r   r  )r(   r  rm   r  r_  r#   r$   r     s    )rS   r`  r   rx   rj   r(   r  r   r#   r_  r$   _cross_impl  s
    r  c                 C   s$   t | rt |stddd }|S )NInputs must be array-like.c                 S   sj   t | }t |}|jd dvs0|jd dvr8td|jd dksT|jd dkr^t||S tdd S )Nr   )ri   rh   zDIncompatible dimensions for cross product
(dimension must be 2 or 3)rh   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`.)rS   r  rm   rk   r  r(   r  rb  rc  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)rS   r)  r  )r(   r  r  r  r%  r  r  r  r#   r#   r$   _cross2d_operation  s
    r  c                 C   s   d S r'   r#   rM  r#   r#   r$   cross2d  s    r  c                 C   s$   t | rt |stddd }|S )Nr  c                 S   sB   t | }t |}|jd dks0|jd dkr8tdt||S )Nr   ri   zRIncompatible dimensions for 2D cross product
(dimension must be 2 for both inputs))rS   r  rm   rk   r  r  r#   r#   r$   r     s    

zcross2d_impl.<locals>.implr,  r  r#   r#   r$   cross2d_impl  s    
r  fbc                 C   sL   t | tjstd| jdkr&tdt |ttjfs>tdddd}|S )	Nz#The first argument must be an arrayr&   zarray must be 1Dz$The second argument must be a stringr  c                 S   s   t | }d}| }d|v r>|D ]}|dkr4 q>q"|d }q"t| }d|v rx|d d d D ]}|dkrn qxq\|d }q\||| S )Nr   r  r&   r  r   )rS   r  r  r?   )filttrimrb  firstr)   lastr#   r#   r$   r     s    


znp_trim_zeros.<locals>.impl)r  )rI   r   r   r   rj   strZUnicodeType)r  r  r   r#   r#   r$   np_trim_zeros  s    

r   )N)N)r   r   F)r   r   F)NN)N)N)r   r   F)F)Nr   )r   )r   )r   N)r   )r   )r   )r   N)r   )NN)Nr  )NF)NTFN)NT)F)r   N)F)N)r&   )Nr   )rE  )F)r  N)r  )ro   )N)r   )N)Nr   r  )r  (  __doc__r  collectionsr   r  r{  Zllvmlite.irr  numpyrS   Z
numba.corer   r   Znumba.core.extendingr   r   r   Znumba.np.numpy_supportr   r	   r
   r   r   r   r   r   Znumba.core.imputilsr   r   r   r   Znumba.np.arrayobjr   r   r   r   Znumba.np.linalgr   r   Znumba.core.errorsr   r   r   r   r   r   Znumba.cpython.unsafe.tupler    r%   r  rD   rQ   r'  r   rf   rg   rw   r/   Z	DTypeSpecZIntegerLiteralr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zaminr   r   Zamaxr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r   r"  Zaverager+  r/  Z	iscomplexr4  Zisrealr5  r<  r>  ZisscalarrA  rH  rK  rL  rN  rO  rP  rV  rf  rj  re  ri  rX  rd  Znanminrh  Znanmaxrk  rs  rr  rv  ru  Znanstdrx  Znansumr~  Znanprodr  Z
nancumprodr  Z	nancumsumr  r  r  r  r  r  r  r  r  r  r  r  r  r  Z_partition_w_nanZ_argpartition_w_nanr  r  r  r  r  r  Zmedianr  r  r  r  r  r  r  r  r  r  Znanpercentiler  Zquantiler  Znanquantiler  Z	nanmedianr  r  r  r  	partitionr  r  r  r	  r  r  r  r  Ztrilr  r)  r&  Ztril_indices_fromr-  r/  Ztriur2  r5  r4  Ztriu_indices_fromr7  r9  r>  rB  Zediff1drL  rM  rO  rQ  rT  ZtrapzrY  r[  r\  Zvanderrb  Zrollre  rh  rl  r~  r  Zinterpr  r  r  r  r  r  r  r7  r  r  r  r  r  r  r  r  r  Zcorrcoefr  Zargwherer  Zflatnonzeror  r  r  r  r  r  r  r  r  Zfill_diagonalr  r  r  r  Zaroundr  Zround_r  r  r  r  r  r"  r  r  r  r  r  r  r  r  r   r  r   r  containsr  Zcount_nonzeror  r  r  deleter   rC  r$  Zarray_equalr'  Zintersect1dr-  r0  r1  r9  r=  r<  r:  r;  r>  r?  r@  rD  r   rH  rP  rS  Zdigitizer[  r-   rb  r\  re  rz  rq  r  r  r  r  r  r  r  r  r  r  r  r  Z	correlater  Zconvolver  r  r  Zasfarrayr   r  extractr  selectr  Zunion1dr  Zasarray_chkfiniter  unwrapr  r  r  r  r  r  ZbartlettZblackmanZhammingZhanningr;  r  r  r  r  r  Zkaiserr  r  r  r  Zcrossr  r  r  r  Z
trim_zerosr   r#   r#   r#   r$   <module>   s  ( 	
(
K

A'(









/
/






,



B

$



	



"




8
















1



4












"




7


'DmX+'
:$


 


7

 8



5



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

9

!

3
D
T

I
,

7


2


N!
	


