o
    i\                    @   sF  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	jdd Zedk r^eej5de e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 Zڐdd dZedk ree	j܃dddZedkree	jރdd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/d0 Zed1d2 Zee	jdd3d4Zee	jdd5d6Zee	jd7d8 Zee	j d9d: Zed;d< Zed=d> Zed?d@ ZedAdB ZedCdD ZedEd# ZdFdG ZeedHdI Z	ee	j
ddJdKZdLdM Ze&dNdO ZedPdQ Zee	jee	jddRdSZedk riee	je ee	jdTdU Zee	jddVdWZee	jej5edXej5dYdZ Zd[d\ Zed]d^ Zed_d` Zdadb Zee	jdcdd Zee	jdedf Zee	j dgdh Z!ee	j"didj Z#eej$dkdl Z%ee	j&ddmdnZ'edod# Z(edpd# Z)ee	j*dqdr Z+ee	j,ddtduZ-ee	j.dvdw Z/ee	j0ddxdyZ1dzd{ Z2ee	j3dd|d}Z4eeZ5eeZ6ed~d Z7edd Z8edd Z9edd Z:edd Z;dd Z<e=ddhZ>dd Z?ee	j@dddZ@ee	jAdddZBeCZDee	jEdddZFdZGedeGZHdZIedeIZJdZKedeKZLdd ZMeM  dd ZNee	jJdd ZOee	jLdd ZPdd ZQdd ZRdd ZSeeSdd ZTee	jUdddZVee	jWdddZXee	jYdddZZedk ree	j[e	j\fddZ]ee	j^dd Z_ee	j`dddZaee	jbdd Zcee	jddddZeee	jfd ddZgedd ZhedÐdĄ ZiedŐdƄ ZjedǐdȄ Zkdɐdʄ Zlee	jmeleh ee	jnelei ee	joelej ee	jpelek e	qg dˢZre	qg d̢Zsed͐d΄ ZtedϐdЄ Zuedѐd҄ Zvee	jwdӐdԄ ZxedՐdք Zydאd؄ Zzeezdِdڄ Z{ee	j|dېd܄ Z}edݐdބ Z~dߐd Zeedd Zee	jdddZee	jdddZedddZee	jdddZdddZedk 
ree	je ee	jdddZd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 dS  ty   Y dS w NFT)r   ImportError r#   r#   P/home/ubuntu/transcripts/venv/lib/python3.10/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      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tupin_shape_r*   r)   dataidxdatand
shape_listtuptyr#   r$   codegen=   s   

z+_create_tuple_result_shape.<locals>.codegen)lenr   UniTupler0   )tyctxr?   shape_tuplefunction_sigrA   r#   r=   r$   _create_tuple_result_shape,   s
   
rG   c           	         s   t |tjs
td|j t| krd  }| d }g }|tjg| 7 }|tjg7 }|tjg| 7 }t||||} fdd}||fS )aH  
    Generates a tuple that can be used to index a specific slice from an
    array for sum with axis.  shape_tuple is the size of the dimensions of
    the input array.  'value' is the value to put in the indexing tuple
    in the axis dimension and 'axis' is that dimension.  For this to work,
    axis has to be a const.
    z axis argument must be a constantr   r&   c                    s   |  }t|}|\}}}dd }| ||t g }	td D ]	}
|||	|
}q"||| }t d D ]	}
|||	|
}q:|S )Nc                   S   s
   t d d S r'   )slicer#   r#   r#   r$   create_full_slice      
z<_gen_index_tuple.<locals>.codegen.<locals>.create_full_slicer   r&   )r,   r   r-   r1   r   slice2_typer.   r2   )r3   r4   r5   r6   r7   r8   r:   	value_argrI   
slice_datar)   
axis_valuer>   r@   r#   r$   rA   |   s   


z!_gen_index_tuple.<locals>.codegen)	
isinstancer   Literalr   literal_valuerB   rK   r0   Tuple)	rD   rE   valueaxisbeforeafter
types_listrF   rA   r#   rN   r$   _gen_index_tupleU   s    	
rY   z	array.sumc                    B   | d  fdd}| j||||t|j dd}t| ||j |S )Nr   c                    s$    }t | D ]}|| 7 }q|S r'   npnditeritem)arrcvzeror#   r$   array_sum_impl      z!array_sum.<locals>.array_sum_implr`   localsreturn_typer1   dictr   contextr4   sigr6   rd   resr#   rb   r$   	array_sum      

rp   c                 C      | S r'   r#   )r_   ra   r#   r#   r$   _array_sum_axis_nop      rs   c                    s    fdd}|S )Nc                    s2  | j }s|dk s|dkrtd||krtdt| j}|| }|| t|| j}t|t}t	|D ]Y}rLt
| j| }|| | 7 }q:|dkr^t
| j|d}	|| |	 7 }q:|dkrpt
| j|d}
|| |
 7 }q:|dkrt
| j|d}|| | 7 }q:|dkrt
| j|d}|| | 7 }q:|dS )a(  
        function that performs sums over one specific axis

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

        typing/arraydecl.py:sum_expand defines the return type for sum with
        axis. It is one dimension less than the input array.
        r      zHNumba does not support sum with axis parameter outside the range 0 to 3.zaxis is out of bounds for arrayr&      )ndim
ValueErrorlistshapepoprG   r\   fulltyper.   rY   )r_   rU   rw   ashapeaxis_lenashape_without_axisresult
axis_indexindex_tuple_genericindex_tuple1index_tuple2index_tuple3index_tuple4const_axis_valis_axis_constoprc   r#   r$   inner   s>   


z gen_sum_axis_impl.<locals>.innerr#   )r   r   r   rc   r   r#   r   r$   gen_sum_axis_impl   s   =r   c                    s  |j }t|d|d}t|dd d u rtj}nt}|j\}}}	d}
d}t|tjrb|j	}|dk r5|j
| }|dk s>||j
krBtd| j|}| ||}|d ||d f}|j|||	gd}d}
t|
|||}t|  fd	d
}| ||||}t| ||j |S )Ndtyper   rw   Fz'axis' entry is out of boundsrv   r6   Tc                    
    | |S r'   r#   )r_   rU   r   compiledr#   r$   array_sum_impl_axis  rJ   z1array_sum_axis_dtype.<locals>.array_sum_impl_axis)rj   getattrr\   takers   r6   rP   r   rQ   rR   rw   rx   typing_contextresolve_value_typer/   replacer   r   r1   r   )rm   r4   rn   r6   rettyrc   r   ty_arrayty_axisty_dtyper   r   axis_valgen_implr   ro   r#   r   r$   array_sum_axis_dtype   s0   
r   c                    rZ   )Nr   c                    s$    }t | D ]}|| 7 }q|S r'   r[   )r_   r   r`   ra   rb   r#   r$   rd   '  re   z'array_sum_dtype.<locals>.array_sum_implrf   rg   ri   rl   r#   rb   r$   array_sum_dtype"  rq   r   c                    s  |j }t|d|d}t|dd d u rtj}nt}|j\}}d}	d}
t|tjrc|j	}
|
dk r4|j
|
 }
|
dk s=|
|j
krGd|
 d}t|| j|
}| ||
}|d |f}|j||gd}d}	t|	|
||}t|  fd	d
}| ||||}t| ||j |S )Nr   r   rw   Fz'axis' entry (z) is out of boundsr   Tc                    r   r'   r#   )r_   rU   r   r#   r$   r   W  rJ   z+array_sum_axis.<locals>.array_sum_impl_axis)rj   r   r\   r   rs   r6   rP   r   rQ   rR   rw   r   r   r   r/   r   r   r   r1   r   )rm   r4   rn   r6   r   rc   r   r   r   r   r   msgr   r   r   ro   r#   r   r$   array_sum_axis2  s2   

r   c                 C   s.   | j tjkrt|| }|S |  |}|S r'   )r}   r\   timedelta64int64view)r   rT   acc_initr#   r#   r$   get_accumulator^  s
   
r   prodc                    s4   t | tjrt| j}t|d  fdd}|S d S )Nr&   c                    s$    }t | D ]}|| 9 }q|S r'   r[   r(   r`   ra   r   r#   r$   array_prod_impln  re   z#array_prod.<locals>.array_prod_impl)rP   r   Arrayr   r   r   )r(   r   r   r#   r   r$   
array_prodf  s   

r   cumsumc                    r   t | tjr7| jtjv }| jtjk}|r| jjtjjk s|r$t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'   r\   emptysize	enumerateflatr(   outr`   idxra   r   r   r#   r$   array_cumsum_impl     
z'array_cumsum.<locals>.array_cumsum_impl
rP   r   r   r   signed_domainbool_bitwidthr0   r   r   )r(   
is_integeris_boolr   r#   r   r$   array_cumsumw     

r   cumprodc                    r   )Nr&   c                    s:   t | j} }t| jD ]\}}||9 }|||< q|S r'   r   r   r   r#   r$   array_cumprod_impl  r   z)array_cumprod.<locals>.array_cumprod_implr   )r(   r   r   r   r#   r   r$   array_cumprod  r   r   meanc                    s\   t | tjr,| jtjttjgB v }|rttj}nt| j}t	|d  fdd}|S d S )Nr   c                    s*    }t | D ]}|| 7 }q|| j S r'   )r\   r]   r^   r   r   r   r#   r$   array_mean_impl  s   
z#array_mean.<locals>.array_mean_impl)
rP   r   r   r   integer_domain	frozensetr   r   float64r   )r(   	is_numberr   r   r#   r   r$   
array_mean  s   

r   varc                 C      t | tjrdd }|S d S )Nc                 S   sJ   |   }d}t| D ]}| | }|t|t| 7 }q|| j S Nr   )r   r\   r]   r^   realconjr   )r(   mssdra   valr#   r#   r$   array_var_impl  s   
z!array_var.<locals>.array_var_implrP   r   r   )r(   r   r#   r#   r$   	array_var  s   r   stdc                 C   r   )Nc                 S   s   |   d S N      ?)r   r(   r#   r#   r$   array_std_impl     z!array_std.<locals>.array_std_implr   )r(   r   r#   r#   r$   	array_std  s   r   c                 C      | |k S r'   r#   r(   min_valr#   r#   r$   min_comparator     r   c                 C      | |kS r'   r#   r   r#   r#   r$   max_comparator  r   r   c                 C      dS NFr#   r   r#   r#   r$   return_false  rt   r   minc                       t | tjsd S t | jtjtjfrtjt n#t | jtj	r*t
dd }t| nt | jtjr7t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     znpy_min.<locals>.comp_funcc                    j   | j dkr	tdt| }t|d}|r|S |D ]}| }|r+|  S  ||r2|}q|S )Nr   zDzero-size array to reduction operation minimum which has no identityr   rx   r\   r]   nextr   r^   )r(   it	min_valuer   ra   
comparatorpre_return_funcr#   r$   impl_min     


znpy_min.<locals>.impl_min)rP   r   r   r   
NPDatetimeNPTimedeltar\   isnatr   Complexr   r   Floatisnan)r(   r   r   r#   r   r$   npy_min      
r   maxc                    r   )Nc                 S   s0   | j |j krdS | j |j kr| j|jkrdS dS r   r   )r(   max_valr#   r#   r$   r   *  r   znpy_max.<locals>.comp_funcc                    r   )Nr   zDzero-size array to reduction operation maximum which has no identityr   )r(   r   	max_valuer   ra   r   r#   r$   impl_max:  r   znpy_max.<locals>.impl_max)rP   r   r   r   r   r   r\   r   r   r   r   r   r   r   )r(   r   r  r#   r   r$   npy_max  r  r  c                 C   s   | j dkr	tdt| }t|d}d}t|r|S d}|D ]}| }t|r1|  S ||k r9|}|}|d7 }q"|S Nr   *attempt to get argmin of an empty sequencer&   r   rx   r\   r]   r   r   r   r^   )arryr   r   min_idxr   r   ra   r#   r#   r$   array_argmin_impl_datetimeO  "   




r  c                 C   sr   | j dkr	td| jD ]}|}d} t|r|S d}| jD ]}t|r*|  S ||k r2|}|}|d7 }q|S r  r   rx   r   r\   r   r
  ra   r   r  r   r#   r#   r$   array_argmin_impl_floate  "   





r  c                 C   s\   | j dkr	td| jD ]}|}d} ntdd}| jD ]}||k r'|}|}|d7 }q|S )Nr   r  unreachabler&   )r   rx   r   RuntimeErrorr  r#   r#   r$   array_argmin_impl_generic{  s   



r  argminc                    \   t | jtjtjfrt nt | jtjrt nt t	|r&d fdd	}|S t
| | }|S )Nc                        | S r'   r#   r(   rU   flatten_implr#   r$   array_argmin_impl  r+   z'array_argmin.<locals>.array_argmin_implr'   )rP   r   r   r   r   r  r   r  r  r   %build_argmax_or_argmin_with_axis_impl)r(   rU   r  r#   r  r$   array_argmin     r  c                 C   s   | j dkr	tdt| }t|d}d}t|r|S d}|D ]}| }t|r1|  S ||kr9|}|}|d7 }q"|S Nr   z*attempt to get argmax of an empty sequencer&   r	  )r
  r   r  max_idxr   r   ra   r#   r#   r$   array_argmax_impl_datetime  r  r!  c                 C   sr   | j dkr	td| jD ]}|}d} t|r|S d}| jD ]}t|r*|  S ||kr2|}|}|d7 }q|S r  r  r
  ra   r  r   r   r#   r#   r$   array_argmax_impl_float  r  r#  c                 C   sR   | j dkr	td| jD ]}|}d} d}| jD ]}||kr"|}|}|d7 }q|S r  )r   rx   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.
    rU   Nc           	         s  |dk r	| j | }|dk s|| j krtd| j dkr | S }t|| j d D ]
}t|||d }q)t|| j d |}| |}|jd }| }|j| jksSJ |j| dks\J t	|j| }t|jD ]} ||| |d |  ||< qj|
|jd d S )Nr   zaxis is out of boundsr&   )rw   rx   r.   r    	transposerz   ravelr   r\   r   reshape)	r(   rU   tmpr)   transpose_indextransposed_arrr   raveledr   r  r   tuple_bufferr#   r$   impl  s&   



"z3build_argmax_or_argmin_with_axis_impl.<locals>.implr'   )r   r   r0   tupler.   rw   )r(   rU   r  r/  r#   r-  r$   r    s
   
r  argmaxc                    r  )Nc                    r  r'   r#   r  r  r#   r$   array_argmax_impl  r+   z'array_argmax.<locals>.array_argmax_implr'   )rP   r   r   r   r   r!  r   r#  r$  r   r  )r(   rU   r2  r#   r  r$   array_argmax  r  r3  allc                 C   :   t | tjtjfrdd }|S t | tjrdd }|S d S )Nc                 S      t | S r'   boolr   r#   r#   r$   
scalar_all'  r+   znp_all.<locals>.scalar_allc                 S   s"   t | D ]	}| s dS qdS r!   r[   r(   ra   r#   r#   r$   flat_all-  
   znp_all.<locals>.flat_allrP   r   NumberBooleanr   )r(   r9  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 dS t | s(t |r,| |kS t | | ||t |d   kr@dS dS )NF      ?Tr\   r   isinfabs)a_vb_vrtolatol	equal_nan	a_v_isnan	b_v_isnanr#   r#   r$   _allclose_scalars7  s"   

$rN  allclosec                 C   s   t | stdt |stdt|ttjfstdt|ttjfs(tdt|ttjfs4tdt| tj}t|tj}|rM|rM		dd	d
}|S |rZ|sZ		ddd}|S |sg|rg		ddd}	|	S |st|sv		ddd}
|
S 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 booleanrA  rB  Fc                 S   s   t | ||||dS )NrI  rJ  rK  )rN  r(   brI  rJ  rK  r#   r#   r$   np_allclose_impl_scalar_scalark  s   
z3np_allclose.<locals>.np_allclose_impl_scalar_scalarc                 S   s:   t |}t |D ]}t| | |||ds dS q
dS NrU  FTr\   asarrayr]   rN  r^   )r(   rW  rI  rJ  rK  bvr#   r#   r$   np_allclose_impl_scalar_arrayq     
z2np_allclose.<locals>.np_allclose_impl_scalar_arrayc                 S   s:   t | } t | D ]}t| ||||ds dS q
dS rY  rZ  )r(   rW  rI  rJ  rK  avr#   r#   r$   np_allclose_impl_array_scalar{  r^  z2np_allclose.<locals>.np_allclose_impl_array_scalarc           	      S   s`   t | } t |}t | |\}}t ||fD ]\}}t| | |||ds- dS qdS rY  )r\   r[  broadcast_arraysr]   rN  r^   )	r(   rW  rI  rJ  rK  a_ab_br_  r\  r#   r#   r$   np_allclose_impl_array_array  s   

z1np_allclose.<locals>.np_allclose_impl_array_arrayrA  rB  F)	r	   r   rP   floatr   r   r8  r?  r>  )r(   rW  rI  rJ  rK  is_a_scalaris_b_scalarrX  r]  r`  rd  r#   r#   r$   np_allcloseQ  sB   



ri  anyc                 C   r5  )Nc                 S   r6  r'   r7  r   r#   r#   r$   
scalar_any  r+   znp_any.<locals>.scalar_anyc                 S   s"   t | D ]	}| r dS qdS r   r[   r:  r#   r#   r$   flat_any  r<  znp_any.<locals>.flat_anyr=  )r(   rk  rl  r#   r#   r$   np_any  s   rm  c                 C   sR   |d urt |tjsddd}|S |d u st |tjr"ddd}|S ddd}|S )Nc                 S   s   t d)Nz)Numba does not support average with axis.)	TypeError)r(   rU   weightsr#   r#   r$   np_average_impl  r+   z#np_average.<locals>.np_average_implc                 S   s   t | }t |S r'   )r\   r[  r   )r(   rU   ro  r_   r#   r#   r$   rp    s   

c                 S   sf   t | }t |}|j|jkr|jdkrtdt |}|dkr&tdt t ||| }|S )Nr&   z81D weights expected when shapes of a and weights differ.        z)Weights sum to zero, can't be normalized.)r\   r[  rz   rw   rn  sumZeroDivisionErrormultiply)r(   rU   ro  r_   sclavgr#   r#   r$   rp    s   



NN)rP   r   NoneType)r(   rU   ro  rp  r#   r#   r$   
np_average  s   


ry  c                 C   s(   t | tjtjfrtjS tdd }|S )z$
    A generic isnan() function
    c                 S   r   r   r#   xr#   r#   r$   _trivial_isnan  rt   z!get_isnan.<locals>._trivial_isnan)rP   r   r   r   r\   r   r   )r   r|  r#   r#   r$   	get_isnan  s
   
r}  c                 C      t | rdd S d S )Nc                 S   s   t | jdkS r   r\   r[  r   rz  r#   r#   r$   <lambda>      znp_iscomplex.<locals>.<lambda>r	   rz  r#   r#   r$   np_iscomplex     r  c                 C   r~  )Nc                 S   s   t | jdkS r   r  rz  r#   r#   r$   r    r  znp_isreal.<locals>.<lambda>r  rz  r#   r#   r$   	np_isreal  r  r  c                    sX   t | }t| tjrt | j}t|tj t| tjr$ fdd}|S  fdd}|S )Nc                    s   | d u rdS  S r   r#   rz  iscmplxr#   r$   r/    s   ziscomplexobj.<locals>.implc                        S r'   r#   rz  r  r#   r$   r/       )determine_dtyperP   r   Optionalr}   r\   
issubdtypecomplexfloating)r{  dtr/  r#   r  r$   iscomplexobj  s   
r  c                 C      dd }|S )Nc                 S   s   t |  S r'   )r\   r  rz  r#   r#   r$   r/     r   zisrealobj.<locals>.implr#   r{  r/  r#   r#   r$   	isrealobj  s   r  c                    s   t |   fdd}|S )Nc                    r  r'   r#   )elementro   r#   r$   r/  	  r  znp_isscalar.<locals>.impl)r
   )r  r/  r#   r  r$   np_isscalar  s   r  c                    s,   t |rd fdd	}|S d fdd	}|S )Nc                    s   t t |  t | S r'   r\   logical_andrE  signbitr{  r   fnr#   r$   r/       zis_np_inf_impl.<locals>.implc                    s   t t |  t | |S r'   r  r  r  r#   r$   r/       r'   r   )r{  r   r  r/  r#   r  r$   is_np_inf_impl  s
   r  c                 C      t dd }t| ||S )Nc                 S   rr   r'   r#   rz  r#   r#   r$   r        zisneginf.<locals>.<lambda>r   r  r{  r   r  r#   r#   r$   isneginf     r  c                 C   r  )Nc                 S   s   |  S r'   r#   rz  r#   r#   r$   r  #  s    zisposinf.<locals>.<lambda>r  r  r#   r#   r$   isposinf!  r  r  c                 C   r   r'   r#   r(   rW  r#   r#   r$   	less_than'  r   r  c                 C   r   r'   r#   r  r#   r#   r$   greater_than,  r   r  c                 C   s   | j dkr	tdd S )Nr   z3zero-size array to reduction operation not possible)r   rx   r   r#   r#   r$   check_array1  s   
r  c                    s$   |r
 fdd}|S  fdd}|S )Nc                    s   t | }t| t |}t|d}|D ].}| }t |jr,t |js,|}q |j|jr6|}q|j|jkrE |j	|j	rE|}q|S r   )
r\   r[  r  r]   r   r   r^   r   r   r   r(   r_   r   
return_valr   ra   comparison_opr#   r$   r/  9  s   

z!nan_min_max_factory.<locals>.implc                    sX   t | }t| t |}t|d}|D ]}| }t |s) ||s)|}q|S r   )r\   r[  r  r]   r   r   r^   r   r  r  r#   r$   r/  J  s   



r#   )r  is_complex_dtyper/  r#   r  r$   nan_min_max_factory7  s
   r  )r  Tc                 C   sp   t | rt |r|S t | rt |r| dk|dkkS t | s(t |r*dS t| | ||t|  kS )Nr   FrD  )r{  yrI  rJ  rK  r#   r#   r$   _isclose_itemg  s   r  c                 C   s   t | stdt |stdt|ttjfstdt|ttjfs(tdt|ttjfs4tdt| tjrGt|tj	rGdd	d
}|S t| tj	rZt|tjrZddd
}|S t| tjrmt|tjrmddd
}|S ddd
}|S )NrP  rQ  rR  rS  rT  rA  rB  Fc           	      S   sV   |  d}|}tt|tj}tt|D ]}t|| ||||||< q| | jS Nr%  r(  r\   zerosrB   r   r.   r  rz   	r(   rW  rI  rJ  rK  r{  r  r   r)   r#   r#   r$   isclose_impl  s   
zisclose.<locals>.isclose_implc           	      S   sV   | }| d}tt|tj}tt|D ]}t||| |||||< q| |jS r  r  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	|

 |
 |||||	< q't ||S Nr   )r\   broadcast_shapesrz   broadcast_tor  rB   r   r   r]   r  r^   )r(   rW  rI  rJ  rK  rz   a_b_r   r)   r_  r\  r#   r#   r$   r    s   
c                 S   s   t | ||||S r'   )r  rV  r#   r#   r$   r       re  )
r	   r   rP   rf  r   r   r8  r?  r   r>  )r(   rW  rI  rJ  rK  r  r#   r#   r$   iscloses  s*   
!


r  c                 C      t | }t|tjrtS tS r'   )r  r\   r  r  complex_nanminreal_nanminr(   r  r#   r#   r$   	np_nanmin     r  c                 C   r  r'   )r  r\   r  r  complex_nanmaxreal_nanmaxr  r#   r#   r$   	np_nanmax  r  r  c                    *   t | tjsd S t| j  fdd}|S )Nc                    sH   d}d}t | D ]}| } |s|| 7 }|d7 }q	t ||S Nrq  r   r&   )r\   r]   r^   divide)r(   r`   countr   ra   r   r#   r$   nanmean_impl  s   z np_nanmean.<locals>.nanmean_implrP   r   r   r}  r   )r(   r  r#   r  r$   
np_nanmean  s
   
r  c                    r  )Nc                    sj   t | }d}d}t | D ] }| } |s.| | }|t |t | 7 }|d7 }qt ||S r  )r\   nanmeanr]   r^   r   r   r  )r(   r   r   r  r   ra   r   r  r#   r$   nanvar_impl  s   
znp_nanvar.<locals>.nanvar_implr  )r(   r  r#   r  r$   	np_nanvar  
   
r  c                 C   s   t | tjsd S dd }|S )Nc                 S   s   t | d S r   )r\   nanvarr   r#   r#   r$   nanstd_impl     znp_nanstd.<locals>.nanstd_implr   )r(   r  r#   r#   r$   	np_nanstd  s   r  c                    P   t | tjsd S t | jtjrtj}n| j}|dt| j  fdd}|S )Nr   c                    s0   }t | D ]}| } |s||7 }q|S r'   r[   r(   r`   r   ra   r   rc   r#   r$   nansum_impl     znp_nansum.<locals>.nansum_implrP   r   r   r   Integerr0   r}  )r(   r   r  r#   r  r$   	np_nansum     
r  c                    r  )Nr&   c                    s0   }t | D ]}| } |s||9 }q|S r'   r[   r  r   oner#   r$   nanprod_impl  r  z np_nanprod.<locals>.nanprod_implr  )r(   r   r  r#   r  r$   
np_nanprod  r  r  c                    sV   t | tjsd S t | jtjtjfrdd S | jt d fdd}|S )Nc                 S   
   t | S r'   )r\   r   r   r#   r#   r$   r  )     
 znp_nancumprod.<locals>.<lambda>r&   c                    sD   t | j}}t| jD ]\}} | r||9 }|||< q|S r'   r   r   is_nanr  r   r#   r$   nancumprod_impl/     

z&np_nancumprod.<locals>.nancumprod_implrP   r   r   r   r?  r  r}  )r(   r  r#   r  r$   np_nancumprod"     	r  c                    sV   t | tjsd S t | jtjtjfrdd S | jt d fdd}|S )Nc                 S   r  r'   )r\   r   r   r#   r#   r$   r  B  r  znp_nancumsum.<locals>.<lambda>r   c                    sD   t | j}}t| jD ]\}} | r||7 }|||< q|S r'   r   r   r  r   rc   r#   r$   nancumsum_implH  r  z$np_nancumsum.<locals>.nancumsum_implr  )r(   r  r#   r  r$   np_nancumsum;  r  r  c                 C   s    t | }t|dkrtd|S )Nr   z&zero-size array reduction not possible)_asarrayrB   rx   r(   r_   r#   r#   r$   prepare_ptp_inputT  s   r  c                    s,   t |tjr fdd}|S  fdd}|S )Nc                    s4    |j | j r	|S |j | j kr |j| jr|S | S r'   r   current_valr   r   r#   r$   r/  d  s   z+_compute_current_val_impl_gen.<locals>.implc                    s    || r|S | S r'   r#   r  r  r#   r$   r/  l  s   )rP   r   r   )r   r  r   r/  r#   r  r$   _compute_current_val_impl_gen]  s
   
r  c                 C      d S r'   r#   r  r#   r#   r$   _compute_a_maxq  r  r  c                 C   r  r'   r#   r  r#   r#   r$   _compute_a_minu  r  r  c                 C      t tj| |S r'   )r  operatorgtr  r#   r#   r$   _compute_a_max_imply     r  c                 C   r  r'   )r  r  ltr  r#   r#   r$   _compute_a_min_impl~  r   r  c                 C   r  r'   r#   r   r#   r#   r$   _early_return  r  r  c                    sL   d t | tjr fdd}|S t | tjr fdd}|S  fdd}|S )Nr   c                    sB   t | jrt | jrdt jt jd  fS dt jd fS d fS )NT              ?y                F)r\   r   r   r   nanr  UNUSEDr#   r$   r/    s
   z _early_return_impl.<locals>.implc                    s   t | r
dt jfS d fS r   )r\   r   r  r  r  r#   r$   r/    s   

c                    s   d fS r   r#   r  r  r#   r$   r/    r+   )rP   r   r   r   )r   r/  r#   r  r$   _early_return_impl  s   r	  c                 C   s,   t | drt| jtjrtddd }|S )Nr   +Boolean dtype is unsupported (as per NumPy)c           	      S   sj   t | }|j}|d }|d }t|jD ]}|| }t|\}}|r&|  S t||}t||}q|| S r   )r  r   r.   r   r  r  r  )	r(   r_   a_flata_mina_maxr)   r   take_branchretvalr#   r#   r$   np_ptp_impl  s   
znp_ptp.<locals>.np_ptp_impl)hasattrrP   r   r   r?  r   )r(   r  r#   r#   r$   np_ptp  s
   
r  )rv   r   ptpc                 C   $   t | rdS t |rdS | |k S r!   )r\   r   r  r#   r#   r$   nan_aware_less_than  s
   

r  c                    s   d fdd	}|S )Nc                    s2  || d? }| | | | r+| | | | | |< | |<  r+|| || ||< ||< | | | | rP| | | | | |< | |<  rP|| || ||< ||< | | | | ru| | | | | |< | |<  ru|| || ||< ||< | | }| | | | | |< | |<  r|| || ||< ||< |}|d }	 ||k r| | |r|d7 }||k r| | |s||krЈ|| | r|d8 }||krЈ|| | s||krn%| | | | | |< | |<  r|| || ||< ||< |d7 }|d8 }q| | | | | |< | |<  r|| || ||< ||< |S Nr&   r#   )AlowhighImidpivotr)   jargpartition	pivotimplr#   r$   
_partition  sL   z&_partition_factory.<locals>._partitionr'   r#   )r   r  r!  r#   r  r$   _partition_factory  s   -r"  )r  c                    s   d fdd	}|S )Nc                    s\    | |||}||kr*||k r|d } | |||}n|d } | |||}||ks| | S )zJ
        Select the k'th smallest element in array[low:high + 1].
        r&   r#   )r
  kr  r  r   r)   partitionimplr#   r$   _select  s   z _select_factory.<locals>._selectr'   r#   )r%  r&  r#   r$  r$   _select_factory  s   r'  c                 C   s   	 ||ksJ t | ||}||k r|d }n%||d kr!|d }n||kr1t| |d |d | nt| |||d  nq| | | |d  fS )z
    Select the k'th and k+1'th smallest elements in array[low:high + 1].

    This is significantly faster than doing two independent selections
    for k and k+1.
    Tr&   )r!  r&  )r
  r#  r  r  r)   r#   r#   r$   _select_two  s   

r(  c                 C   sP   d}|d }|d? }|d@ dkr!t | |d ||\}}|| d S t| |||S )zt
    The main logic of the median() call.  *temp_arry* must be disposable,
    as this function will mutate it.
    r   r&   rv   )r(  r&  )	temp_arrynr  r  halfr(   rW  r#   r#   r$   _median_inner5  s   r,  c                    s0   t | tjsd S t| jjdv   fdd}|S )NmMc                    s.   |   }|jd } s|dkrtjS t||S r   )flattenrz   r\   r  r,  )r(   r)  r*  is_datetimer#   r$   median_implL  s
   

znp_median.<locals>.median_impl)rP   r   r   r   r   char)r(   r1  r#   r/  r$   	np_medianE  s
   r3  c                 C   s  t | }|dkrtjt || d tjd}|S tjt |tjd}tt |D ]}|| }|dkrIt| }tt|  rHt| rHtj	}n|dkrt
| }tt|  rt| tjk}t| tj k}|||  }	|	dkrytj	}|dkr|dkrtj	}|dkrtj	}|	dkr|dkr|dkrtj	}n/d|d t|d  }
t|
}|
| }t| t|d d|d d\}}|d|  ||  }|||< q'|S )Nr&   r   r  d   rv         Y@)r#  r  r  )rB   r\   r|   r   r   r.   r  r4  isfiniter  r   rr  inftrue_dividemathfloorr(  int)r(   qr*  r   r)   
percentiler   num_pos_infnum_neg_inf
num_finiterankfr   lowerupperr#   r#   r$   _collect_percentiles_innerW  sJ   *


 
rE  c                 C   sP   |r| |  } t | dkrdS nt|rdS t | dkr&| d }t|S dS )Nr   Fr&   T)rB   r\   rj  r6  )r(   nan_maskskip_nanr   r#   r#   r$   _can_collect_percentiles  s   


rH  c                 C   s   d}| j dkr.| jdk r.t| jD ]}| | dk s&| | |ks&t| | r+d} |S q|S tt| sDt| dk sDt| |krFd}|S )NTr&   
   rq  F)rw   r   r.   r\   r   rj  )r<  q_upper_boundvalidr)   r#   r#   r$   check_valid  s   &,rL  c                 C      t | dds
tdd S )Nr5  rJ  z)Percentiles must be in the range [0, 100]rL  rx   r<  r#   r#   r$   percentile_is_valid     rQ  c                 C   rM  )NrC  rN  z%Quantiles must be in the range [0, 1]rO  rP  r#   r#   r$   quantile_is_valid  rR  rS  c                 C   s|   t j|t jd }|| || }t j| t jd }t |}t|||r3||  }t||}|S t t|t j	}|S r  )
r\   r[  r   r.  r   rH  rE  r|   rB   r  )r(   r<  check_qfactorrG  r)  rF  r   r#   r#   r$   _collect_percentiles  s   


rV  c                    sr   t | }t|tjrtd fdd} fdd}t|tjtjfr*|S t|tj	r7|j
dkr7|S |S )z
    The underlying algorithm to find percentiles and quantiles
    is the same, hence we converge onto the same code paths
    in this inner function implementation
    zNot supported for complex dtypec                    s   t | | d S r   rV  r(   r<  rT  rU  rG  r#   r$   np_percentile_q_scalar_impl     z?_percentile_quantile_inner.<locals>.np_percentile_q_scalar_implc                    s   t | | S r'   rW  rX  rY  r#   r$   np_percentile_impl  r  z6_percentile_quantile_inner.<locals>.np_percentile_implr   )r  r\   r  r  r   rP   r   r>  r?  r   rw   )r(   r<  rG  rU  rT  r  rZ  r\  r#   rY  r$   _percentile_quantile_inner  s   r]  c                 C      t | |ddtdS )NFrC  rG  rU  rT  r]  rQ  rX  r#   r#   r$   np_percentile     
ra  c                 C   r^  )NTrC  r_  r`  rX  r#   r#   r$   np_nanpercentile  rb  rc  c                 C   r^  )NFr5  r_  r]  rS  rX  r#   r#   r$   np_quantile  rb  re  c                 C   r^  )NTr5  r_  rd  rX  r#   r#   r$   np_nanquantile  rb  rf  c                    r  )Nc                    s\   t | j| j}d}t | D ]}| } |s!|||< |d7 }q|dkr)t jS t||S Nr   r&   )r\   r   r   r   r]   r^   r  r,  )r(   r)  r*  r   ra   r  r#   r$   nanmedian_impl  s   
z$np_nanmedian.<locals>.nanmedian_implr  )r(   rh  r#   r  r$   np_nanmedian  r  ri  c           	      C   sl   t | }t | jd d }|D ]"}| |  }d}t|d }|D ]}t|||| |}q#|||< q|S )Nr%  r   r&   )r\   
empty_likendindexrz   copyrB   _select_w_nan)	r(   	kth_arrayr   r   sr
  r  r  kthr#   r#   r$   np_partition_impl_inner  s   

rq  c           
      C   s   t j| t jd}t | jd d }|D ]*}| |  }t t|}d}t|d }|D ]}	t||	||| |	}q-|||< q|S )Nr  r%  r   r&   )	r\   rj  r0   rk  rz   rl  arangerB   _arg_select_w_nan)
r(   rn  r   r   ro  r
  idx_arryr  r  rp  r#   r#   r$   np_argpartition_impl_inner0  s   
ru  c                 C   s   t |tj}|jdkrtdtt|| jd kr"tdt	|}t
|D ]\}}|dk r>|| jd  ||< q,|||< q,t|S )a  
    Returns a sorted, unique array of kth values which serve
    as indexers for partitioning the input array, a.

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

    Values less than 0 are transformed to equivalent positive
    index values.
    r&   zkth must be scalar or 1-Dr%  zkth out of boundsr   )r  astyper\   r   rw   rx   rj  rF  rz   rj  ndenumerateunique)r(   rp  rn  r   indexr   r#   r#   r$   
valid_kthsF  s   



rz  c                 C      t | tjtjtjfstdt | tjr | jdkr d}t|t|d|}tdkr.tj	}ntj
tj	f}t ||s=t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)r   rv   ru   Partition index must be integerc                 S   s.   t | }|jdkr| S t||}t||S r   )r  r   rl  rz  rq  r(   rp  a_tmprn  r#   r#   r$   np_partition_impl|  s
   


z'np_partition.<locals>.np_partition_implrP   r   r   SequencerS   r   rw   r   r   r  r?  )r(   rp  r   kthdt	kth_typesr  r#   r#   r$   np_partitioni     
r  c                 C   r{  )	Nr|  r   r}  r   r~  r  c                 S   s4   t | }|jdkr| dS t||}t||S )Nr   r0   )r  r   rl  rv  rz  ru  r  r#   r#   r$   np_argpartition_impl  s
   


z-np_argpartition.<locals>.np_argpartition_implr  )r(   rp  r   r  r  r  r#   r#   r$   np_argpartition  r  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< q|S )Nr   r  r&   )r  r\   r   r   r.   r   )NMr#  rz   r   r)   m_maxr#   r#   r$   	_tri_impl  s   r  c                 C   s   t |d ddd}|S )Nr#  r   c                 S   s   |d u r| }t | ||S r'   )r  )r  r  r#  r#   r#   r$   tri_impl  s   znp_tri.<locals>.tri_implr   )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 ]}| ||< q|S )zq
    Takes a 1d array and tiles it to form a square matrix
    - i.e. a facsimile of np.tile(m, (len(m), 1))
    r&   r  )rw   rB   r\   r   r   r.   )r   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  r\   trirz   rv  uintwhere
zeros_liker   r   r#  maskr#   r#   r$   np_tril_impl_2d  s   $r  c                 C   >   t |d d	dd}d	dd}| jdkr|S | jdkrtS |S )
Nr#  r   c                 S      t | }t||S r'   )r  r  r   r#  m_2dr#   r#   r$   np_tril_impl_1d     
z my_tril.<locals>.np_tril_impl_1dc                 S   sv   t j| jd | jd |dt j}t | jd d }t | }t j|| jd}|D ]}t 	|| | |||< q+|S r  
r\   r  rz   rv  r  rk  rj  r  r   r  r   r#  r  r   zzero_optselr#   r#   r$   np_tril_impl_multi  s   $
z#my_tril.<locals>.np_tril_impl_multir&   rv   r   )r   rw   r  )r   r#  r  r  r#   r#   r$   my_tril  s   



	
r  c                 C   4   t | d t |d t|st |d ddd}|S )Nr*  r#  r   r   c                 S   s   t t j| ||dS )Nr#  r\   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     



r  c                 C   *   t |d | jdkrtdddd}|S )Nr#  rv   input array must be 2-dr   c                 S      t j| jd || jd dS Nr   r&   )r#  r   )r\   tril_indicesrz   r_   r#  r#   r#   r$   np_tril_indices_from_impl  r  z7np_tril_indices_from.<locals>.np_tril_indices_from_implr  r   rw   r   )r_   r#  r  r#   r#   r$   np_tril_indices_from  
   


r  c                 C   sB   t j| jd | jd |d dt j}t |t j| | jd| S Nr  r%  r&   r  r  r  r  r#   r#   r$   np_triu_impl_2d  s   (r  c                 C   r  )
Nr#  r   c                 S   r  r'   )r  r  r  r#   r#   r$   np_triu_impl_1d  r  z my_triu.<locals>.np_triu_impl_1dc                 S   sz   t j| jd | jd |d dt j}t | jd d }t | }t j|| jd}|D ]}t 	||| | ||< q-|S r  r  r  r#   r#   r$   np_triu_impl_multi   s   (
z#my_triu.<locals>.np_triu_impl_multir&   rv   r  )r   rw   r  )r   r#  r  r  r#   r#   r$   my_triu  s   



	
r  c                 C   r  )Nr*  r#  r   r   c                 S   s   t dt j| ||d d S )Nr&   r  r  r  r#   r#   r$   np_triu_indices_impl:  r  z-np_triu_indices.<locals>.np_triu_indices_implr  r  )r*  r#  r   r  r#   r#   r$   np_triu_indices1  r  r  c                 C   r  )Nr#  rv   r  r   c                 S   r  r  )r\   triu_indicesrz   r  r#   r#   r$   np_triu_indices_from_implH  r  z7np_triu_indices_from.<locals>.np_triu_indices_from_implr  r  )r_   r#  r  r#   r#   r$   np_triu_indices_from?  r  r  c                 C   r  r'   r#   r_   r#   r#   r$   _prepare_arrayM  r  r  c                 C   s   | d t jfv rdd S dd S )Nc                 S   s
   t dS )Nr#   r\   arrayr  r#   r#   r$   r  T  r  z%_prepare_array_impl.<locals>.<lambda>c                 S   s   t |  S r'   )r  r'  r  r#   r#   r$   r  V  s    r   noner  r#   r#   r$   _prepare_array_implQ  s   r  c                 C   s~   | }	 t |tjtjfrt|S t|dd }|d ur"| dkr"tjS t|dd }|d u r0tdt |tj	r:|j
}nt|S q)NT__len__r   r   ztype has no dtype attr)rP   r   r>  r?  r   r   r\   r   r   r  r   )inobjobjlr  r#   r#   r$   _dtype_of_compoundY  s   r  c                 C   s   t | tjrt | jtjrtdt| }d }t|st|}d }t|s)t|}|d ur9t	||s9d}t||d urIt	||sId}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rMtjt|t| t| d |d}t|}t|t| d }	||d |< t||||	< |||	d < |S tjt|t| |d}t|}||d |< |||d < |S )Nr   r&   r  )r  r   rB   r\   r   diff)
aryto_endto_beginstartr  end	out_dtyper   	start_idxmid_idxr#   r#   r$   np_ediff1d_impl  s&   z#np_ediff1d.<locals>.np_ediff1d_implrw  )
rP   r   r   r   r?  r   r  r   r\   can_cast)r  r  r  ary_dtto_begin_dt	to_end_dtr   r  r#   r#   r$   
np_ediff1dj  s$   
r  c                 C   r  r'   r#   r  r#   r#   r$   _select_element  r  r  c                 C   s,   t | dd dk}|rdd }|S dd }|S )Nrw   r   c                 S   s$   t jd| jd}| |d d < |d S )Nr&   r  r   )r\   r  r   )r_   r{  r#   r#   r$   r/    s   z"_select_element_impl.<locals>.implc                 S   rr   r'   r#   r  r#   r#   r$   r/    r  r   )r_   zerodr/  r#   r#   r$   _select_element_impl  s   r  c                 C   r  r'   r#   )dxr{  r#   r#   r$   _get_d  r  r  c                 C   s    t | r
dd }|S dd }|S )Nc                 S   s
   t |S r'   r\   r[  r{  r  r#   r#   r$   r/    rJ   zget_d_impl.<locals>.implc                 S   s   t t | S r'   )r\   r  r[  r  r#   r#   r$   r/    r  r  )r{  r  r/  r#   r#   r$   
get_d_impl  s
   r  rC  c                 C   sF   t | tjtjfrtdt | tjr| jdkrtdddd}|S )	z9Shared implementation for both np.trapz and np.trapezoid.zy cannot be a scalarr   zy cannot be 0DNrC  c                 S   sX   t | }t||}|dtdd f |dtd df  d }t || d}t|}|S )N.r&   r%         @)r\   r[  r  rH   rr  r  )r  r{  r  yarrdy_averet	processedr#   r#   r$   r/    s   

(z_trapz_impl.<locals>.implNrC  )rP   r   r>  r?  r   r   rw   )r  r{  r  r/  r#   r#   r$   _trapz_impl  s   
r  )rv      c                 C      t | ||S r'   r  r  r{  r  r#   r#   r$   np_trapz     r  c                 C   r  r'   r  r  r#   r#   r$   np_trapezoid  r  r  c                 C   s   |j \}}|t| ksJ ||ksJ |r?t|D ]#}|dkr(d|dd|f< qt| |dd|d f |dd|f< qdS t|d ddD ]%}||d krXd|dd|f< qGt| |dd|d f |dd|f< qGdS )a*  
    Generate an N-column Vandermonde matrix from a supplied 1-dimensional
    array, x. Store results in an output matrix, out, which is assumed to
    be of the required dtype.

    Values are accumulated using np.multiply to match the floating point
    precision behaviour of numpy.vander.
    r   r&   Nr%  )rz   rB   r.   r\   rt  )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)rw   rx   )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r0t| j}t	|t
 |S t| t jt jfr;|S d S )Nz,Second argument N must be None or an integerFc                    sF   |d u rt | }t| | tjt | t|f d}t| ||| |S r  )rB   r   r\   r   r;  r  )r{  r  r  r   r  r#   r$   np_vander_impl	  s   
z!np_vander.<locals>.np_vander_implc                 S   sR   |d u rt | }t| }t|| tjt | t|f|jd}t|||| |S r  )rB   r\   r  r   r   r;  r   r  )r{  r  r  x_arrr   r#   r#   r$   np_vander_seq_impl	  s   

z%np_vander.<locals>.np_vander_seq_implr   )r   r  rP   r  r   r   r   r   r\   promote_typesr;  rS   r  )r{  r  r  r  r  x_dtr#   r  r$   	np_vander	  s   

r  c                 C   s@   t |tjtjfstddd }t | tjtjfrdd S |S )Nzshift must be an integerc                 S   sR   t | }t j|j|jd}|j}t|jD ]}|| |j }|| |j|< q|S r  )r\   r[  r   rz   r   r   r.   r   )r(   shiftr_   r   arr_flatr)   r   r#   r#   r$   np_roll_impl8	  s   
znp_roll.<locals>.np_roll_implc                 S   r  r'   r  )r(   r  r#   r#   r$   r  E	  r  znp_roll.<locals>.<lambda>)rP   r   r  r?  r   r>  )r(   r  r	  r#   r#   r$   np_roll3	  s   r
     c                 C   s|  d}|}| ||d  kr|S | |d k rdS |dkr8d}||k r4| || kr4|d7 }||k r4| || ks&|d S ||d krB|d }|dk rHd}| || k ro| ||d  k rk|d }|t krj| ||t   krj|t  }n2|d S | ||d  k ry|S | ||d  k r|d S |d }||t  d k r| ||t   k r|t  }||k r||| d?  }| || kr|d }n|}||k s|d S )Nr   r&   r%  r  ru   rv   )LIKELY_IN_CACHE_SIZE)keyr_   lengthguessiminimaxr)   imidr#   r#   r$   binary_search_with_guessP	  sN   
r  c                 C   s  t | }t |}t |}t|dkrtdt|t|kr%td|jdkr5t j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t|D ] }|j	| }||k ro|
|j	|< q^||kry||j	|< q^||j	|< q^|S d}|	|krt j|	d |d}nt jd|d}|jrt|	d D ]2}d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  ||< qt|D ]}|j	| }t |r|}d}|d|  |j	|< qt|||	|}|d	kr|
|j	|< q||	kr||j	|< q||	d kr|| |j	|< q|| |kr.|| |j	|< q|jr7|| }n.d||d  ||   }||d  j
|| j
 | }||d  j|| j | }|d|  }|j
|||   || j
 }t |r|j
|||d    ||d  j
 }t |r|| j
||d  j
kr|| 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&   
fill_valuer   r  r  rq  r%  )r\   r[  rB   rx   r   r|   rz   r   r.   r   r   r   r   r  )r{  xpfpr   dzr  dydreslenxlenxplvalrvalxp_valfp_valr)   x_valr  slopesinv_dxr   r   sloper#   r#   r$   np_interp_impl_complex_inner	  s   




D




	$&
$&
r'  c                 C   s  t j| t jd}t j|t jd}t j|t jd}t|dkr"tdt|t|kr.td|jdkr>t j|j|d |dS t j|j|d}|j}t|}	|d }
||	d  }|	dkr|d }|d }t	|D ] }|j
| }||k rx|
|j
|< qg||kr||j
|< qg||j
|< qg|S d}|	|kr|dd  |d d  |dd  |d d   }nt jd|d}t	|D ]}|j
| }t |r||j
|< qt|||	|}|dkr|
|j
|< q||	kr||j
|< q||	d kr|| |j
|< q|| |kr|| |j
|< q|jr|| }n||d  ||  ||d  ||   }||||   ||  |j
|< t |j
| r`||||d    ||d   |j
|< t |j
| r`|| ||d  kr`|| |j
|< q|S )Nr  r   r  r  r&   r  r%  )r\   r[  r   rB   rx   r   r|   rz   r   r.   r   r   r  )r{  r  r  r   r  r  r  r  r  r  r  r   r!  r"  r)   r#  r  r$  r&  r#   r#   r$   np_interp_impl_inner
  sj   

02



(&(r(  c                    s   t |dr|jdkrtdt |dr|jdkrtdd}t|}t|tjr-t|t|}t|tj t tjrBt	nt
 fdd} fdd	}t| tjrdt| tjrbt||S |S )
Nrw   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{  r  r  r   r   r#   r$   np_interp_implw
  r  z!np_interp.<locals>.np_interp_implc                    s   | || j d S r   r   r)  r*  r#   r$   np_interp_scalar_implz
  r[  z(np_interp.<locals>.np_interp_scalar_impl)r  rw   r   r  r\   r  r  result_typer   r'  r(  rP   r   r>  r   )r{  r  r  complex_dtype_msgxp_dtfp_dtr+  r-  r#   r*  r$   	np_interp\
  s*   r2  c                 C   s`   | j dksJ | j\}}tj|df| jd}t|D ]}t| |d d f | ||df< q|S )Nrv   r&   r  r   )rw   rz   r\   r   r   r.   rr  )r(   r   r*  r   r)   r#   r#   r$   row_wise_average
  s   
$r3  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&   rq  )rz   r  r3  r\   dotr   Tr8  )Xbiasddoffactr`   r#   r#   r$   np_cov_impl_inner
  s   
r:  c                   C   r  r'   r#   r#   r#   r#   r$   _prepare_cov_input_inner
  r  r;  c                 C   s&   |d t jfv rdd }|S dd }|S )Nc                 S   s   t t| }|s|j}|S r'   )r\   
atleast_2dr  r5  )r   r  rowvarr   m_arrr#   r#   r$   r;  
  s   z9_prepare_cov_input_impl.<locals>._prepare_cov_input_innerc                 S   s   t t| }t t|}|s$|jd dkr|j}|jd dkr$|j}|j\}}|j\}}	||	kr6tdt j|| |f|d}
||
d |d d f< ||
| d d d f< |
S )Nr   r&   z$m and y have incompatible dimensionsr  )r\   r<  r  rz   r5  rx   r   )r   r  r=  r   r>  y_arrm_rowsm_colsy_rowsy_colsr   r#   r#   r$   r;  
  s   

r  )r   r  r=  r   r;  r#   r#   r$   _prepare_cov_input_impl
  s
   "rD  c                 C   s,   | j dkr| jd dkrd}t|d S d S )Nrv   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].)rw   rz   r  )r   r   r#   r#   r$   _handle_m_dim_change
  s   rE  c                 C   rr   r'   r#   rz  r#   r#   r$   r  
  r  r  c                    s   t j}t| tjrt| j}|S t| tjtjfrt| }|S t| tj	tj
frbt  | D ]}t|dr> fdd|D  q- | q-t dkrVt jdd  D  }|S t dkrbt  }|S )Nr  c                    s   g | ]}  |qS r#   )add).0ra   coltypesr#   r$   
<listcomp>
      z#determine_dtype.<locals>.<listcomp>r&   c                 S      g | ]}t |qS r#   )r   )rG  tyr#   r#   r$   rJ  
      )r\   r   rP   r   r   r   r   r>  r?  rC   rS   setr  rF  rB   r  r{   )
array_likearray_like_dtr   r#   rH  r$   r  
  s&   

r  c                 C   s|   t | tjr| jdkrtd|d S t | tjr8t | jd tjr:t | jd jd tjr<d|}t|d S d S d S )Nrv   z{0} has more than 2 dimensionsr   )rP   r   r   rw   r   formatr  r  )rP  namer   r#   r#   r$   check_dimensions
  s   

rT  c                 C   s.   t | s	td| t|  dkrtdd S )Nz)Cannot convert non-finite ddof to integerr   zddof must be integral value)r\   r6  rx   r;  )r8  r#   r#   r$   _handle_ddof  s
   
rU  c                 C   rr   r'   r#   rz  r#   r#   r$   r    r  c                 C   s   ||  || t | |||S r'   )r;  )r   r  r=  r   r8  _DDOF_HANDLER_M_DIM_HANDLERr#   r#   r$   _prepare_cov_input  s   rX  c                 C   s   |d t jfv }t| t jr| jdkr|S t| t jr8tdd | j D r&|S t| j dkr8t| j d t jr8|S t| t jt j	frC|S t| t j
rVt| jd t j
sV|rVdS dS )Nr&   c                 s   s"    | ]}t |tjtjfV  qd S r'   )rP   r   r>  r?  rG  r{  r#   r#   r$   	<genexpr>   s    z)scalar_result_expected.<locals>.<genexpr>r   TF)r   r  rP   r   rw   	BaseTupler4  rB   r>  r?  r  r  )mandatory_inputoptional_inputopt_is_noner#   r#   r$   scalar_result_expected  s(   r_  c                 C   s   t t | dkt | | S r  )r\   r  fabssignrz  r#   r#   r$   
_clip_corr3  s   rb  c                 C   s    t | j}t | j}|d|  S )Nr  )rb  r   r   )r{  r   r   r#   r#   r$   _clip_complex8  s   

rc  c           	         s   t | d t |d |d tjfv rt nt|tjtjfr t nt|tjr)t nt	dt
t| tjr7tt| }t|}t||tjd
 fdd	}		 d
 fdd		}t| |rb|S |S )Nr   r  z)ddof must be a real numerical scalar typeTFc                    s^   t | ||| }tt|jdkr)tj|jd |jd ftjdS t|||S )Nr   r  )	rX  rv  r\   rj  r  rz   r|   r  r:  )r   r  r=  r7  r8  r6  rV  rW  r   r#   r$   np_cov_impl^  s   znp_cov.<locals>.np_cov_implc                    sT   t | ||| }tt|jdkrtj}n	t|||jd }t|S r   )	rX  rv  r\   rj  r  rz   r  r:  r   )r   r  r=  r7  r8  r6  variancerd  r#   r$   np_cov_impl_single_variableh  s   
z+np_cov.<locals>.np_cov_impl_single_variableNTFN)rT  r   r  _handle_ddof_noprP   r  r?  r   rU  r   _handle_m_dim_nopr   rE  r  r\   r.  r   r_  )	r   r  r=  r7  r8  m_dty_dtre  rg  r#   rd  r$   np_cov?  s,   



rm  c                    s^   t | }t |}t||tj}|tjkrt nt d fdd	}ddd}t| |r-|S |S )NTc                    sp   t | ||}t |}t |j}t|jd D ]}||d d f  |  < |d d |f  |  < q |S r   )r\   covdiagsqrtr   r.   rz   )r{  r  r=  r`   r  stddevr)   clip_fnr#   r$   np_corrcoef_impl  s   
z%np_corrcoef.<locals>.np_corrcoef_implc                 S   s   t | ||}|| S r'   )r\   rn  )r{  r  r=  r`   r#   r#   r$    np_corrcoef_impl_single_variable  s   z5np_corrcoef.<locals>.np_corrcoef_impl_single_variableNT)r  r\   r.  r   
complex128rc  rb  r_  )r{  r  r=  r  rl  r   rt  ru  r#   rr  r$   np_corrcoefz  s   


rx  c                    sD   t | tjtjf}t| r|sdd }|S 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  )	r\   r[  rz   r  r   r0   r&  vstackr  r  r#   r#   r$   r/    s   

znp_argwhere.<locals>.impl)r   r   )r&   r   c                    s0   | d urt | rtjtjdS tj tjdS r  )r8  r\   r  r   r0   r   falseishtrueishr#   r$   r/    s   )rP   r   r>  r?  r	   )r(   
use_scalarr/  r#   rz  r$   np_argwhere  s   r~  c                 C   s    t | r
dd }|S dd }|S )Nc                 S   s   t | }t t |d S r   )r\   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#   rY  r#   r#   r$   rJ    r  z0np_flatnonzero.<locals>.impl.<locals>.<listcomp>r  )r8  r.   r\   r  r   r0   )r(   r<   r#   r#   r$   r/    s   r  )r(   r/  r#   r#   r$   np_flatnonzero  s
   r  c                 C   s   | j dkr(| jd }| jd }d| }|r|| }||fS |t|| }||fS t| j}tt|dks<tddt|d d 	  }|
 }||fS )Nrv   r   r&   z/All dimensions of input must be of equal lengthr%  )rw   rz   r   r\   r  r4  r  rx   r   rr  r   )r(   wrapr   r*  stepr  rz   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  r  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 rg  )r  rB   r.   r   )r(   r   r  r  r  ctrv_lenr)   r#   r#   r$   _fill_diagonal  s   
r  c                 C   sR   t | j}|j}|j}t t | s#t ||k s#t ||kr'tdd S Nz'Unable to safely conform val to a.dtype)r\   iinfor   r   r  rj  r6  rx   )r(   r   r  v_minv_maxr#   r#   r$   _check_val_int  s   .r  c                 C   sN   t | j}|j}|j}|t | }t ||k s!t ||kr%tdd S r  )r\   finfor   r   r  r6  rj  rx   )r(   r   r  r  r  finite_valsr#   r#   r$   _check_val_float  s   r  c                 C   rr   r'   r#   r{  r  r#   r#   r$   r    r  c                 C   r  r'   r#   rz  r#   r#   r$   r    r  r  c                    sX   t | tjr
dd S t | tjtjfrdd S t | tjtjfr*t|   fddS d S )Nc                 S   rr   r'   r#   rz  r#   r#   r$   r    r  z_asarray_impl.<locals>.<lambda>c                 S   r  r'   r  rz  r#   r#   r$   r    r  c                    s   t j| g dS r  r  rz  rM  r#   r$   r    r  )rP   r   r   r  rS   r>  r?  r   rz  r#   r  r$   _asarray_impl  s   r  c                    s   | j dkrEt| jtjrt nt| jtjrt nt d fdd	}d fdd	}t|tjtjtj	fr6|S t|tj
tjtjfrC|S d S d| j  }t|)	Nr&   Fc                    s&   t | } | | t| || d S r'   )r  r.  r  r(   r   r  tmpvalcheckerr#   r$   scalar_impl,     
z%np_fill_diagonal.<locals>.scalar_implc                    s&   t | } | | t| || d S r'   )r  r.  r  r  r  r#   r$   non_scalar_impl1  r  z)np_fill_diagonal.<locals>.non_scalar_implz4The first argument must be at least 2-D (found %s-D)F)rw   rP   r   r   r  r  r   r  
_check_nopr?  rS   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?  r  r  c                 C   s   ||}dd }||fS )Nc                 S   s`   |\}|j d }| |}|j}tj||g}t||t|}	|	|	|f}
t
| ||j|
S r   )r6   r,   modulellvmliteirFunctionTyper   get_or_insert_functionr  callr   rj   )rm   r4   rn   r6   r   r  lltyr  fntyr  ro   r#   r#   r$   rA   H  s   

z _np_round_float.<locals>.codegenr#   )	typingctxr   rn   rA   r#   r#   r$   _np_round_floatD  s   r  c                 C   s   t | s
t | r| S |dkr8|dkrd|d  }d}nd| }d}| | | }t |r0| S t|| | S d|  }| | }t|| S )Nr      g      $@gMDrC  )r9  rE  r   r  )r{  ndigitspow1pow2r  r#   r#   r$   round_ndigitsV  s   

r  c                 C   s   t | stdt|tjst|sd}t|t| tjtjtjfrWt|rPt| tjr4ddd}|S t| tjrAddd}|S t| tjrNddd}|S d S ddd}|S t| tjrot|rhd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 r   )r  r  r(   decimalsr   r#   r#   r$   r/  ~  s   
zimpl_np_round.<locals>.implc                 S   s   |dkr| S t t| |S r   )r;  r  r  r#   r#   r$   r/    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/    s   

c                 S   s   t | ||d< |S r   )r\   roundr  r#   r#   r$   r/    s   c                 S   s   t | }t | ||S r'   )r\   rj  r  r  r#   r#   r$   r/       
c                 S   s<   | j |j kr
tdt| D ]\}}t||||< q|S )Nzinvalid output shape)rz   rx   r\   rw  r  )r(   r  r   ry  r   r#   r#   r$   r/    s
   r  )	r	   r   rP   r   r   r   r   r  r   )r(   r  r   r   r/  r#   r#   r$   impl_np_roundq  s4   





r  c                 C   s8   t | tjrdd }|S t | tjrdd }|S td)Nc                 S   s$   | dkrd} | t j9 } t | |  S )Nrq  g#B;)r\   pisinrz  r#   r#   r$   r/    s   
zimpl_np_sinc.<locals>.implc                 S   s0   t | }t | D ]\}}t |||< q
|S r'   )r\   r  rw  sinc)r{  r   ry  r   r#   r#   r$   r/    s   
z,Argument "x" must be a Number or array-like.)rP   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r=| j}t|tjr)|j	nt|tj
r2|nd S dfdd	}|S td|  )N   Fc                    s(   |rt | j| j  S t | j| jS r'   )r\   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  )r\   r  rw  angle)r  r  r   ry  r   )	ret_dtyper#   r$   r/    s   z6Argument "z" must be a complex or Array[complex]. Got r  )rf  r\   r  rP   r   r>  r   r   r   underlying_floatr   r   )r  r  r/  r   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D}t |
||	||}t ||} |j|} |    ||| W d    n1 sw   Y  W d    n1 sw   Y   |f fddt|D } fdd|D }dd |D }t |}t ||jk}t |
||	||}t ||} |j|} |; |s|f} |}t|D ]}t || dd|g}t || | q  ||| W d    n	1 s'w   Y  W d    n	1 s7w   Y   |j|}t |j|S )	Nr   r&   c                    s   g | ]}t   qS r#   )r   	_getvalue)rG  r)   r4   rm   	out_shapeoutarytyr#   r$   rJ     s    z!array_nonzero.<locals>.<listcomp>c                    s   g | ]
}t  |qS r#   )r   rG  r   )r4   rm   r  r#   r$   rJ    s    c                 S   s   g | ]}|j qS r#   )r<   r  r#   r#   r$   rJ    s    r#   C)r6   rj   r   r  r   r   unpack_tuplerz   stridesr<   layoutr/   r   r0   alloca_once_value	loop_nestr}   get_item_pointer2r   is_trueif_thenstorerF  loadr.   r   
make_tupler   )rm   r4   rn   r6   arytyr   noutsr  rz   r  r<   r  rc   r  r  indicesptrr   nzoutsoutarys	out_datasry  curr)   r8   r#   r  r$   array_nonzero  sh   
	
r  c                        fdd}|S )Nc                    s,   t | }t | }| r|S |S r'   )r\   r[  rv  )	conditionr{  r  x_y_r  r#   r$   r/    s   z)_where_zero_size_array_impl.<locals>.implr#   r   r/  r#   r  r$   _where_zero_size_array_impl  s   r  c                 C   s0   t | D ]\}}|r|| n|| ||< q|S r'   )r\   rw  )condr{  r  ro   r   r`   r#   r#   r$   _where_generic_inner_impl%  s   r  c           	      C   sH   | j }|j }|j }|j }t| jD ]}|| r|| n|| ||< q|S r'   )r   r.   r   )	r  r{  r  ro   cfxf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}
rOt|||	|
S t|||	|
S )Nr  r%  r  )	r\   r[  r  rz   r  r   r5  r  r  )r  r{  r  cond1x1y1rz   cond_r  r  ro   r   r  use_faster_implr#   r$   r/  :  s   "z!_where_generic_impl.<locals>.implr#   )r   r  r/  r#   r  r$   _where_generic_impl7  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'   )r\   r[  r  )r  r#   r#   r$   where_cond_none_noneT  r  z)ov_np_where.<locals>.where_cond_none_none)r	   r   )r  r   r  r#   r#   r$   ov_np_whereN  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}|rt|}	t|}
t	
|	|
}dd  t fdd| ||fD }|rit|S | j}|r|r|j|j  kr}| jkrn n|j}nd	}t||S d
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   )rP   r   r>  r   rw   argr#   r#   r$   check_0_dim{  s   z$ov_np_where_x_y.<locals>.check_0_dimc                    s   g | ]} |qS r#   r#   )rG  r(   r  r#   r$   rJ  ~  rN  z#ov_np_where_x_y.<locals>.<listcomp>r  c                 S   s    t t | t |t |S r'   )r\   r  r[  )r  r{  r  r#   r#   r$   r/    s    zov_np_where_x_y.<locals>.impl)r	   r   r   ziprR  rP   r   r   r  r\   r  r4  r  r  r  )r  r{  r  r   r  rS  cond_arrr  r?  r  rl  r   special_0_caser  r/  r#   r  r$   ov_np_where_x_yY  s:   
r  c                 C   r  )Nc                 S      | j S r'   )r   r  r#   r#   r$   np_real_impl     znp_real.<locals>.np_real_implr#   )r   r  r#   r#   r$   np_real     r  c                 C   r  )Nc                 S   r  r'   )r   r  r#   r#   r$   np_imag_impl  r  znp_imag.<locals>.np_imag_implr#   )r   r  r#   r#   r$   np_imag  r  r   c                 C   s   t | tjsd S dd }|S )Nc                 S   s"   t | D ]	}||kr dS qdS r   )r\   r]   )r_   r  r{  r#   r#   r$   np_contains_impl  r<  z%np_contains.<locals>.np_contains_implr   )r_   r  r  r#   r#   r$   np_contains  s   r  c                 C   s4   t | stdt|rddd}|S ddd}|S )Nz3The argument to np.count_nonzero must be array-likec                 S   s   t | }t |dkS r   )r\   r'  rr  r(   rU   arr2r#   r#   r$   r/    r  znp_count_nonzero.<locals>.implc                 S   s   |  tj}tj||dS )N)rU   )rv  r\   r   rr  r  r#   r#   r$   r/    s   r'   )r	   r   r   )r(   rU   r/  r#   r#   r$   np_count_nonzero  s   

r  c                 C   rr   r'   r#   rz  r#   r#   r$   r    r  c                 C   r  r'   r  rz  r#   r#   r$   r    r  c                    s   t | tjtjfstdt |tjtjtjfr6t |tjr!t nt |jtjs,tdt	  fdd}|S t |tjs@tddd }|S )Nz)arr must be either an Array or a Sequencezobj should be of Integer dtypec                    s>   t t | } | j}t j|t jd} |}d||< | | S )Nr  F)r\   r'  r[  r   onesr   )r_   r  r  keephandlerr#   r$   np_delete_impl  s   z!np_delete.<locals>.np_delete_implc                 S   sf   t t | } | j}|}|| k s||krtd|dk r"||7 }t | d | | |d d  fS )Nz"obj must be less than the len(arr)r   r&   )r\   r'  r[  r   
IndexErrorconcatenate)r_   r  r  posr#   r#   r$   np_delete_scalar_impl  s   "z(np_delete.<locals>.np_delete_scalar_impl)
rP   r   r   r  r   	SliceTypenp_delete_handler_isslicer   r  np_delete_handler_isarray)r_   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r2|S | d|f}|d|jd f}t|| j}t	|jd D ]D}t	|d D ]}	|||	d f |||	f  ||	< qYt	d|D ]}
t	||
 d D ]}	||	d  ||	  ||	< q{qq|d ||  ||< qQ|S )Nr   z"diff(): order must be non-negativer%  r&   )
rl  rx   rz   r  r\   r   r   r   r(  r.   )r(   r*  r   r  r   a2out2workmajorr)   niterr#   r#   r$   	diff_impl  s*   

"znp_diff_impl.<locals>.diff_implr  )rP   r   r   rw   )r(   r*  r  r#   r#   r$   np_diff_impl  s   
r  c                 C   sP   t | rt |stdtjtjf}t| |r"t||r"dd }|S dd }|S )Nz3Both arguments to "array_equals" must be array-likec                 S   s   | |kS r'   r#   )a1r  r#   r#   r$   r/  $  r+   znp_array_equal.<locals>.implc                 S   s2   t | }t |}|j|jkrt ||kS dS r   )r\   r[  rz   r4  )r  r  r(   rW  r#   r#   r$   r/  '  s
   

)r	   r   r   r?  r>  rP   )r  r  acceptedr/  r#   r#   r$   np_array_equal  s   
r  c                 C   >   t | st |stdt|tjtfstdddd}|S )Nz.intersect1d: first two args must be array-likez5intersect1d: argument "assume_unique" must be booleanFc                 S   s   t | } t |}|st | } t |}n|  } | }t | |f}|  |dd  |d d k}|d d | }|S )Nr&   r%  )r\   r[  rx  r'  r  sort)ar1ar2assume_uniqueauxr  int1dr#   r#   r$   np_intersects1d_impl<  s   


z0jit_np_intersect1d.<locals>.np_intersects1d_implr  r	   r   rP   r   r?  r8  )r  r   r!  r$  r#   r#   r$   jit_np_intersect1d1  s   
r&  c                 C   sF   t |tjr|jdkrtd| d S t |tjs!td| d S )Nr&   z${0}(): input should have dimension 1z+{0}(): input should be an array or sequence)rP   r   r   rw   r   rR  r  )	func_nameseqr#   r#   r$   validate_1d_array_likeO  s   
r)  c                    s   t d|  t| jtjsd S t|d |d tjfvr/t d| tjt	dd t	dd  ntj
t	dd t	dd  d fd
d	}|S )Nbincount	minlengthc                 S   s   t | t |krtdd S )Nz7bincount(): weights and list don't have the same length)rB   rx   r(   ro  r+  r#   r#   r$   validate_inputsh  s   z$np_bincount.<locals>.validate_inputsc                 S   s   | |  || 7  < d S r'   r#   r   r   r   ro  r#   r#   r$   
count_itemn     znp_bincount.<locals>.count_itemc                 S   r  r'   r#   r,  r#   r#   r$   r-  u  rt   c                 S   s   | |  d7  < d S r  r#   r.  r#   r#   r$   r/  y  s   r   c                    s   | || |dk rt dt| }|dkr| d nd}td|D ]}| | dk r-t dt|| | }q!t|d |}t|}t|D ]} ||| | | qF|S )Nr   z 'minlength' must not be negativer%  r&   z/bincount(): first argument must be non-negative)rx   rB   r.   r  r\   r  )r(   ro  r+  r*  r  r)   
out_lengthr   r/  r  r-  r#   r$   bincount_impl}  s   z"np_bincount.<locals>.bincount_implr   )r)  rP   r   r   r  r   r  r\   r   r   r0   )r(   ro  r+  r3  r#   r2  r$   np_bincountY  s$   





r4  c                 C   s   t | jr(t |jr&t | jrt |jS t |jr dS | j|jkS dS t |jr0dS t | jrDt |jrB| j|jkS dS t |jrLdS | j|jk rTdS | j|jkr`| j|jkS dS r   )r\   r   r   r   r  r#   r#   r$   less_than_or_equal_complex  s*   r5  c                 C   sH   t | ts
t |trt| |S t |ttjtjfr t|r dS | |kS rv  )	rP   r  r5  rf  r   float32r   r\   r   r  r#   r#   r$   _less_than_or_equal  s   

r7  c                 C   sD   t | ts
t |trt| |S t |ttjtjfrt| |S | |k S r'   )rP   r  less_than_complexrf  r   r6  r   less_than_floatr  r#   r#   r$   
_less_than  s
   

r:  c                 C   r  rg  )r\   r   r  r#   r#   r$   _less_then_datetime64  s
   

r;  c                 C   s   t ||  S r'   )r;  r  r#   r#   r$   _less_then_or_equal_datetime64  r  r<  c                    r  )Nc                    sH   ||k r ||| d?  }| | } ||r|d }n|}||k s||fS r  r#   )r(   key_valr  r   r  mid_valcmpr#   r$   r/    s   

z_searchsorted.<locals>.implr#   )r@  r/  r#   r?  r$   _searchsorted  s   rA  leftrightc                 C   s~   |t v sJ | jdv rt}t}nt}t}|dkrt|}|}nt| tj	r1t
dk r1t|}|}nt|}|}t|t|fS )Nr-  rB  )r&      )VALID_SEARCHSORTED_SIDESr2  r;  r<  r:  r7  rA  r\   r  inexactr   r   )np_dtypesider  le_impl_cmpr#   r#   r$    make_searchsorted_implementation  s   
rL  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rDd fdd	}|S t|tjrQddd}|S dfdd	}|S )	NrR   z Invalid value given for 'side': rB  c           	         s   t j|jt jd}|jd }d}t| }t|jD ]1}|j| } ||r*t| }nd}|t| k r7|d7 }nt| }|}| |||\}}|||< q||jS )Nr  r   r&   )	r\   r   r   r0   r   rB   r.   r(  rz   )	r(   ra   rH  r   last_key_valr  r   r)   r=  rK  rJ  r#   r$   r/  %  s    





zsearchsorted.<locals>.implc                 S   s   t |}t j| ||dS )NrH  )r\   r[  searchsorted)r(   ra   rH  r#   r#   r$   r/  =  s   
c                    s    | |dt | \}}|S r   )rB   )r(   ra   rH  rr:   )rJ  r#   r$   r/  A  s   rB  )r   rE  r   rP   r   r   r  r   r   r\   r  rL  )r(   ra   rH  side_valv_dtnp_dtr/  r#   rN  r$   rP    s    
rP  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 }|t | k r*| | |ks|t | kr2dS | | }||k rUt|d t | D ]}|}| | }||krR dS qCdS t|d t | D ]}|}| | }||k rm dS q^dS )Nr   r&   r%  )rB   r.   )bins
last_valuer)   
next_valuer#   r#   r$   _monotonicityM  s2   z"np_digitize.<locals>._monotonicityFc                    s    |}|dkrt d|r+|dkr#t|tj|d d d | dd S tj|| ddS |dkr@t|tj|d d d | dd S tj|| ddS )Nr   z3bins must be monotonically increasing or decreasingr%  rB  rO  rC  )rx   rB   r\   rP  )r{  rV  rC  monorY  r#   r$   digitize_implr  s   ""z"np_digitize.<locals>.digitize_implr  )rP   r   r   r   complex_domainr   r   )r{  rV  rC  r\  r#   r[  r$   np_digitizeG  s   
$r^  rI  c                    sT   t |ttjfr#|d tjfv rtd d fdd	}|S ddd}|S ddd}|S )Nr7  rI  c                    sL    }  }t | D ]}| }||kr|}||k r|}q
t | |||fS r'   )r\   r]   r^   	histogram)r(   rV  r.   bin_minbin_maxr   ra   r7  r#   r$   histogram_impl  s   z$np_histogram.<locals>.histogram_implc                 S   s   |dkrt d|\}}||kst dt|tj}||kr_|||  }t| D ]4}| }t|| | }	d|	  krC|k rPn n|t|	  d7  < q*||kr^||d   d7  < q*t	|||d }
||
fS )Nr   z0histogram(): `bins` should be a positive integerz;histogram(): max must be larger than min in range parameterr&   )
rx   r\   r  r0   r]   r^   r9  r:  r;  linspace)r(   rV  r.   r`  ra  hist	bin_ratior   ra   rW  
bins_arrayr#   r#   r$   rc    s$   c                 S   s   t |d }t|D ]}|| ||d  kstdq
|d }|| }t|tj}|dkrqt| D ]=}| }	||	  krC|ksEn q3d}
|d }|
|k rh|
| d d? }|	|| k rb|d }n|}
|
|k sO||
  d7  < q3||fS )Nr&   z-histogram(): bins must increase monotonicallyr   )rB   _rangerx   r\   r  r0   r]   r^   )r(   rV  r.   nbinsr)   r`  ra  re  r   ra   lohir  r#   r#   r$   rc    s.   
rI  N)rP   r;  r   r  r  rf  )r(   rV  r.   rc  r#   rb  r$   np_histogram  s   G
;
!rm  )ibetar   machepepsnegepepsnegiexpminexpxminmaxexpxmaxirndngrdepsilontinyhuge	precision
resolutionMachAr)rp  rr  rs  ro  r  rv  r   rt  rq  nexpnmantr}  r~  r{  bitsr  )r   r  r  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 s'w   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  r"d } t| jjd t| j| j  fdd}|S )Nc                       g | ]}t  |qS r#   r  rY  rB  r#   r$   rJ    rK  z7_gen_np_machar.<locals>.MachAr_impl.<locals>.<listcomp>r   c                      s   t   S r'   )r  r#   )_mach_ar_datar#   r$   r/    r+   z1_gen_np_machar.<locals>.MachAr_impl.<locals>.impl)	r0  _mach_ar_supportedwarningswarn_explicitr  r6   r   filenamelineno)wmsgr/  	np_MachArw)r  rB  r$   MachAr_impl  s   z#_gen_np_machar.<locals>.MachAr_impl)r   r  catch_warningsfilterwarningsDeprecationWarningr\   r  r   )r   r  r#   r  r$   _gen_np_machar  s   r  c                    sb   t | d| }t|}z||W n
 ty   Y d S w tfdd|D t fdd}|S )Nr   c                    r  r#   r  rY  r  r#   r$   rJ  $  rK  z'generate_xinfo_body.<locals>.<listcomp>c                    s     S r'   r#   r  )	containerr<   r#   r$   r/  &  r   z!generate_xinfo_body.<locals>.impl)r   r   rx   r0  r   )r  np_funcr  attrnbtyrG  r/  r#   )r  r<   rB  r$   generate_xinfo_body  s   r  c                        t | tjtt  fdd}|S )Nc                    r  r'   r#   r  r  r#   r$   r/  0  r+   zol_np_finfo.<locals>.impl)r  r\   r  _finfo_supportedr  r#   r  r$   ol_np_finfo,     r  c                    r  )Nc                    r  r'   r#   )int_typer  r#   r$   r/  9  r+   zol_np_iinfo.<locals>.impl)r  r\   r  _iinfo_supported)r  r/  r#   r  r$   ol_np_iinfo5  r  r  c                    sh   t dd }ts
|S tjtjB }| |v o||v }|s|S t| }t|}t|| t  fdd}|S )Nc                 S   s.   d}t t| D ]}|| | ||   }q|S r   r.   rB   )r(   rW  accr)   r#   r#   r$   
_innerprodB  s   z#_get_inner_prod.<locals>._innerprodc                    s   t |  | S r'   )r\   r4  rv  r  r  r#   r$   	_dot_wrapV  r0  z"_get_inner_prod.<locals>._dot_wrap)r   
_HAVE_BLASr   real_domainr]  r   r\   r  )dtadtbr  fltyfloatsa_dtb_dtr  r#   r  r$   _get_inner_prod>  s   
r  c                 C   s*   t | tjr| jdkstd| d S d S )Nr&   z!%s() only supported on 1D arrays )rP   r   r   rw   r   )r(   r'  r#   r#   r$   
_assert_1d\  s
   
r  c                 C   r  r'   r#   )ap1ap2mode	directionr#   r#   r$   _np_correlate_coreb  r  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r#|| d }d}d}	n&|dkr6|d }	|d }|| d }n|dkrE|d }|| d }	ntdt| }
|dkrXd}d}n|d	krc|d }d	}ntd
t|D ]}|| | }| d | || d  |
|< || }qkt|| d D ]}| |||  ||
|< || }qt|	D ]}|| d }| | d  |d | |
|< || }q|
S )Nz''len(ap1)' must greater than 'len(ap2)'rK  r&   r   r|   samerv   z1Invalid 'mode', valid are 'full', 'same', 'valid'r%  zInvalid direction)rB   rx   r\   r  r.   )r  r  r  r  n1n2r  r*  n_leftn_rightr  r   incr)   r#  r  	innerprodr#   r$   r/  m  sP   	 

 
z%_np_correlate_core_impl.<locals>.impl)r   r   r\   r  r  )r  r  r  r  r  r  r/  r#   r  r$   _np_correlate_core_implf  s   

@r  rK  c                    s   t | d t |d tdd }tdd }| jtjv r,|jtjv r'| |n| |n|jtjv r7| |n| |d	 fdd	}|S )
Nznp.correlatec                 S   r  r'   )r\   r   rz  r#   r#   r$   op_conj  s   
z_np_correlate.<locals>.op_conjc                 S   rr   r'   r#   rz  r#   r#   r$   op_nop  rt   z_np_correlate.<locals>.op_noprK  c                    sd   t | }t |}|dkrtd|dkrtd||k r't| | |dS t | ||dS Nr   z'a' cannot be emptyz'v' cannot be emptyr%  r&   rB   rx   r  r(   ra   r  lalva_opb_opr#   r$   r/    s   z_np_correlate.<locals>.implrK  )r  r   r   r   r]  )r(   ra   r  r  r  r/  r#   r  r$   _np_correlate  s&   



r  r|   c                 C   s"   t | d t |d ddd}|S )Nznp.convolver|   c                 S   sh   t | }t |}|dkrtd|dkrtd||k r(t|| d d d |dS t| |d d d |dS r  r  r  r#   r#   r$   r/    s   znp_convolve.<locals>.implr|   )r  )r(   ra   r  r/  r#   r#   r$   np_convolve  s   


r  c                    s:  t | sd S t| tjr$t|s| j|jkrd
dd}|S d
dd}|S t| tjtjfr?t|r8d
dd}|S d
dd}|S t| tjtj	fr]t|rN| n|}t
|d
fdd	}|S t| tjjrt| jtjtj	fsrtdt|ry| jn|d
fdd	}|S t| tjrt| j d
 fd	d	}|S d }|S )Nc                 S   rr   r'   r#   r(   r   r#   r#   r$   r/    r  znp_asarray.<locals>.implc                 S   s
   |  |S r'   )rv  r  r#   r#   r$   r/     rJ   c                 S   r  r'   r  r  r#   r#   r$   r/    rJ   c                 S   s   t | |S r'   r  r  r#   r#   r$   r/  
  r   c                       t |  S r'   r  r  r  r#   r$   r/    r   z?asarray support for List is limited to Boolean and Number typesc                    s4   t | }tj| d}t| D ]\}}|||< q|S r  )rB   r\   r   r   )r(   r   r  r  r)   ra   )target_dtyper#   r$   r/    s
   
c                    s      S r'   )rl  r  r  r#   r$   r/  #  r+   r'   )r	   rP   r   r   r   r   r  rS   r>  r?  r   
containersListTyper   StringLiteralr\   r[  rR   )r(   r   r/  dt_convr#   )r_   r  rM  r$   
np_asarray  sB   
+
(
!
r  c                    sD   t |tjr
t|}t|tjstj n| tjf fdd	}|S )Nc                    r  r'   r  r  r  r#   r$   r/  6  r   znp_asfarray.<locals>.impl)rP   r   Typer   r\   r  rF  r   )r(   r   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  r+j jkr+d}t|t jj} fddt|D }t |S )Nr   z"Cannot extract from an empty arrayz+condition shape inconsistent with arr shapec                    s   g | ]}| r j | qS r#   r,  )rG  r   r(   r  r#   r$   rJ  N  s    z7np_extract.<locals>.np_extract_impl.<locals>.<listcomp>)	r\   r[  r.  r   rx   rj  r   r.   r  )r  r_   r   max_lenr   r#   r  r$   np_extract_impl>  s   

 
z#np_extract.<locals>.np_extract_implr#   )r  r_   r  r#   r#   r$   
np_extract;  s   r  c                 C   sF  ddd}t | tjtjfstdt |tjtjfstdt |ttjtjfs-tdt | d tjs9tdt |d tjsEtdt | d tjrZt | d j	tjsZtd	t | d tjrxt | d tjrtt | d d tjsxtd
t | d tjr| d j
|d j
krtdt | d tjr| d j
dk rtd|S )Nr   c                 S   sp   t | t |krtd|t|d j|d j }tt | d ddD ]}| | }|| }t|||}q$|S )Nz7list of cases must be same length as list of conditionsr   r&   r%  )rB   rx   r\   r  rz   r   r.   r  )condlist
choicelistdefaultr   r)   r  choicer#   r#   r$   np_select_arr_implX  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 1r  )rP   r   ListrC   r   r;  r>  r?  r   r   rw   )r  r  r  r  r#   r#   r$   	np_selectU  s2   
r  c                 C   sT   t | rt |stdd| jjv sd|jjv r$| jj|jjkr$t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'   )r\   r'  r[  rx  r  )r  r   r(   rW  r#   r#   r$   
union_impl  s   znp_union1d.<locals>.union_impl)r	   r   r   rS  )r  r   r  r#   r#   r$   
np_union1d  s   r  c                    sh   d}t | tjtjtjfst|t|r| j nzt| W n t	y*   tdw d fdd	}|S )Nz7The argument to np.asarray_chkfinite must be array-likez!dtype must be a valid Numpy dtypec                    s4   t j|  d} t | D ]}t |stdq| S )Nr  z#array must not contain infs or NaNs)r\   r[  r]   r6  rx   )r(   r   r)   r  r#   r$   r/    s   
z"np_asarray_chkfinite.<locals>.implr'   )
rP   r   r   r  rS   r   r   r   r   r   )r(   r   r   r/  r#   r  r$   np_asarray_chkfinite  s   r  r%  -DT!@c                    s   t |ttjfsd}t|t| sd}t|t |tjtjfs,t|s,d}t|t |t	tj
fs:d}t|tdd d ft |tj
rSt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 r+|d }r9t|d\}	}
|
dk}n|d }	d}|	 }t|j| D ]d}|| }t	|}t
|| || }|rmt||k|dk@ |	|}|| }ttdd |D |k d|}ttdd |D |k d|}t||j}t|}| |  |< |||< qI||S )	Nr%  z*Value for argument "axis" is not supportedrv   r   Tc                 S   rL  r#   rF  rY  r#   r#   r$   rJ    rN  z.numpy_unwrap.<locals>.impl.<locals>.<listcomp>c                 S   rL  r#   r  rY  r#   r#   r$   rJ    rN  )rx   r\   r[  rv  rz   r(  r   divmodr.   r  modr  r  rl  r   )pdiscontrU   periodr   p_init
init_shape	last_axisp_newinterval_highremboundary_ambiguousinterval_lowr)   rowddddmod
ph_correctph_ravelupr   integer_inputslice1r#   r$   r/    sF   




znumpy_unwrap.<locals>.implNr%  r  )rP   r;  r   r  r   r	   r   r   r   rf  r>  rH   r\   r.  r   r   r   r  integer)r  r  rU   r  r   r/  r#   r  r$   numpy_unwrap  s*   )r  c                 C   s@   t d|  | d}t t |dd|| d   d|| d   S )NrC  rv   r   r&   )r\   rr  r  
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 )NrC  rv   gzG?r   r&   g{Gz?r  r\   rr  cosr  r  r#   r#   r$   np_blackman_impl  s   r
  c                 C   s2   t d|  | d}ddt t j| | d    S )Nr&   rv   gHzG?gq=
ףp?r  r  r#   r#   r$   np_hamming_impl      r  c                 C   s2   t d|  | d}ddt t j| | d    S )Nr&   rv   r   r  r  r#   r#   r$   np_hanning_impl  r  r  c                    r  )Nc                    s$   t | tjs
td fdd}|S )NM must be an integerc                    s8   | dk rt jdt jdS | dkrt jdt jdS  | S )Nr&   r#   r  )r\   r  r   r  )r  funcr#   r$   window_impl  s
   z>window_generator.<locals>.window_overload.<locals>.window_impl)rP   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   rq  r&   r   r  )r{  valsb0b1r)   b2r#   r#   r$   _chbevln  s   r  c                 C   s\   | dk r|  } | dkrd|  d }t | t|t S t | td|  d t t |  S )Nr   g       @r   r  g      @@)r\   expr  _i0A_i0Brp  r  r#   r#   r$   _i0{  s   &r  c                 C   sb   t j| t jd}tt |}tt|D ]}t|t d| | | | d   | ||< q|S )Nr  r&   r  )r\   rj  r   r  r.   rB   rp  )r*  alphabetar  tr)   r#   r#   r$   _i0n  s
   0r   c                 C   s:   t | tjs
tdt |tjtjfstddd }|S )Nr  z beta must be an integer or floatc                 S   sT   | dk rt jdt jdS | dkrt jdt jdS t d| }| d d }t|||S )Nr&   r#   r  r   r  )r\   r  r   r  rr  r   )r  r  r*  r  r#   r#   r$   np_kaiser_impl  s   z!np_kaiser.<locals>.np_kaiser_impl)rP   r   r  r   r   )r  r  r!  r#   r#   r$   	np_kaiser  s   r"  c                 C   s   dd }|| \}}}||\}}}	t ||	t || }
t ||t ||	 }t ||t || }|
|d< ||d< ||d< d S )Nc                 S   sF   | d }| d }| j d dkr| d }n
t| jd|}|||fS )N.r   .r&   r%  ru   .rv   r   )rz   r\   rt  r   r}   )r{  x0r  x2r#   r#   r$   _cross_preprocessing  s   

z._cross_operation.<locals>._cross_preprocessingr#  r$  r%  )r\   rt  )r(   rW  r   r(  a0r  r  r  r  r  cp0cp1cp2r#   r#   r$   _cross_operation  s   	r-  c                 C   r  r'   r#   r  r#   r#   r$   _cross  r  r.  c                    sL   t t| jt|j | jdkr|jdkr fdd}|S  fdd}|S )Nr&   c                    s   t d }t| || |S )Nru   )r\   r   r-  )r(   rW  cpr  r#   r$   r/    s   z_cross_impl.<locals>.implc                    s6   t | d |d j}t |d  }t| || |S )Nr#  r/  )r\   rF  rz   r   r-  )r(   rW  rz   r0  r  r#   r$   r/    s   )r\   r  r   r   rw   r(   rW  r/  r#   r  r$   _cross_impl  s   
r2  c                 C   $   t | rt |stddd }|S )NInputs must be array-like.c                 S   sf   t | }t |}|jd dvs|jd dvrtd|jd dks*|jd dkr/t||S td)Nr%  r~  zDIncompatible dimensions for cross product
(dimension must be 2 or 3)ru   zDimensions for both inputs is 2.
Please replace your numpy.cross(a, b) call with a call to `cross2d(a, b)` from `numba.np.extensions`.)r\   r[  rz   rx   r.  r(   rW  r  r  r#   r#   r$   r/    s   


znp_cross.<locals>.implr	   r   r1  r#   r#   r$   np_cross  s   r7  c                 C   sB   dd }|| \}}||\}}t ||t || }t |S )Nc                 S   s   | d }| d }||fS )Nr#  r$  r#   )r{  r&  r  r#   r#   r$   r(    s   z0_cross2d_operation.<locals>._cross_preprocessing)r\   rt  r[  )r(   rW  r(  r)  r  r  r  r0  r#   r#   r$   _cross2d_operation  s
   
r8  c                 C   r  r'   r#   r  r#   r#   r$   cross2d   r  r9  c                 C   r3  )Nr4  c                 S   sB   t | }t |}|jd dks|jd dkrtdt||S )Nr%  rv   zRIncompatible dimensions for 2D cross product
(dimension must be 2 for both inputs))r\   r[  rz   rx   r8  r5  r#   r#   r$   r/  	  s   


zcross2d_impl.<locals>.implr6  r1  r#   r#   r$   cross2d_impl  s   
r:  fbc                    sX   t | tjs
td| jdkrtdt |ttjfstdtdk d	 fdd	}|S )
Nz#The first argument must be an arrayr&   zarray must be 1Dz$The second argument must be a string)rv   rv   r;  c                    s   t | }d}| }d|v r#|D ]}|dks r"|dkr"|d }q t| }d|v rD|d d d D ]}|dks> rC|dkrC|d }q2 ||| S )Nr   rB   r&   rW  r%  )r\   r[  rC  rB   )filttrimr  firstr)   lasttrim_escapesr#   r$   r/  #  s   


znp_trim_zeros.<locals>.implr;  )rP   r   r   r   rw   strUnicodeTyper   )r=  r>  r/  r#   rA  r$   np_trim_zeros  s   
rF  c                 C   r  )Nz+setxor1d: first two args must be array-likez2setxor1d: Argument "assume_unique" must be booleanFc                 S   s   t | }t |}|st |}t |}n| }| }t ||f}|  t j|jd d t jd}d|d< d|d< |dd  |d d k|dd< ||dd  |d d @  S )Nr   r&   r  Tr%  )	r\   r[  rx  r'  r  r  r   rz   r   )r  r   r!  r(   rW  r"  flagr#   r#   r$   np_setxor1d_implA  s   


 z)jit_np_setxor1d.<locals>.np_setxor1d_implr  r%  )r  r   r!  rH  r#   r#   r$   jit_np_setxor1d9  s   
rI  c                 C   s  t |  } t | }t|dt| d  k rJ|r3t jt| t jd}|D ]}|| |kM }q(|S t jt| t jd}|D ]}|| |kO }q?|S |st | }| | }t j|j	t jd}d|d d< |dd  |d d k|dd < || } t 
|d }t j|j	t jd}	||	|< t |}t | |f}
|
jdd}|
| }t |jt j}|r|dd  |d d k|d d< n|dd  |d d k|d d< ||dd < t j|
j	t jd}|||< |r|d t|  S ||	 S )	NrI  g(\?r  Tr&   r%  	mergesort)kind)r\   r[  r'  rB   r  r   r  argsortr   rz   r   r0   rx  r  r   )r  r   r!  invertr  r(   order1r"  imaskinv_idxarordersarrG  r  r#   r#   r$   
_in1d_impl\  sH   
 
" rT  c                 C   r  )Nz,setdiff1d: first two args must be array-likez3setdiff1d: Argument "assume_unique" must be booleanFc                 S   sR   t | } t |}|r|  } | }n
t | } t |}| t| |ddd S )NTr!  rM  )r\   r[  r'  rx  rT  )r  r   r!  r#   r#   r$   np_setdiff1d_impl  s   




z+jit_np_setdiff1d.<locals>.np_setdiff1d_implr  r%  )r  r   r!  rV  r#   r#   r$   jit_np_setdiff1d  s   
rW  c                 C   V   t | st |stdt|tjtfstdt|tjtfs$tdddd}|S )Nz'in1d: first two args must be array-likez.in1d: Argument "assume_unique" must be booleanz'in1d: Argument "invert" must be booleanFc                 S   s   t | |||S r'   )rT  )r  r   r!  rM  r#   r#   r$   np_in1d_impl  r  z!jit_np_in1d.<locals>.np_in1d_implFFr%  )r  r   r!  rM  rY  r#   r#   r$   jit_np_in1d  s   
r[  c                 C   rX  )Nz'isin: first two args must be array-likez.isin: Argument "assume_unique" must be booleanz'isin: Argument "invert" must be booleanFc                 S   s"   t | } t| |||d| jS )NrU  )r\   r[  rT  r(  rz   )r  test_elementsr!  rM  r#   r#   r$   np_isin_impl  s   
z!jit_np_isin.<locals>.np_isin_implrZ  r%  )r  r\  r!  rM  r]  r#   r#   r$   jit_np_isin  s   
r^  r'   re  rw  r  r   r  r  r  r   rh  rv  r  rR  rl  r  r  r  rC  rZ  (  __doc__r9  collectionsr   r  r  llvmlite.irr  numpyr\   
numba.corer   r   numba.core.extendingr   r   r   numba.np.numpy_supportr   r	   r
   r   r   r   r   r   numba.core.imputilsr   r   r   r   numba.np.arrayobjr   r   r   r   numba.np.linalgr   r   numba.core.errorsr   r   r   r   r   r   numba.cpython.unsafe.tupler    r%   r  rG   rY   rr  r   rp   rs   r   r0   	DTypeSpecIntegerLiteralr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   aminr   r  amaxr  r  r  r  r  r  r!  r#  r$  r  r1  r3  r4  r@  rN  rO  ri  rj  rm  averagery  r}  	iscomplexr  isrealr  r  r  isscalarr  r  r  r  r  r  r  r  r  r  r  r  r  r  nanminr  nanmaxr  r  r  r  r  nanstdr  nansumr  nanprodr  
nancumprodr  	nancumsumr  r  r  r  r  r  r  r  r	  r  r  r  r"  r!  _partition_w_nan_argpartition_w_nanr'  r&  rm  rs  r(  r,  medianr3  rE  rH  rL  rQ  rS  rV  r]  r=  ra  nanpercentilerc  quantilere  nanquantilerf  	nanmedianri  rq  ru  rz  	partitionr  r  r  r  r  r  r  r  trilr  r  r  tril_indices_fromr  r  triur  r  r  triu_indices_fromr  r  r  r  ediff1dr  r  r  r  r  r  trapzr  	trapezoidr  r  r   vanderr  rollr
  r  r  r'  r(  interpr2  r3  r:  r;  rD  rE  rj  r  rT  rU  ri  rX  r_  rb  rc  rn  rm  corrcoefrx  argwherer~  flatnonzeror  r  r  r  r  r  r  r  r  fill_diagonalr  r  r  r  aroundr  r  round_r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r   r   containsr  count_nonzeror  r  r  deleter  r  r  array_equalr  intersect1dr&  r)  r*  r4  r9  r8  r5  r7  r:  r;  r<  rA  r   rE  rL  rP  digitizer^  r.   rh  r_  rm  r  r  r  r  r  r  r  r  r  r  r  r  r  r  	correlater  convolver  r[  r  asfarrayr   r  extractr  selectr  union1dr  asarray_chkfiniter  unwrapr  r  r
  r  r  r  bartlettblackmanhamminghanningr  r  r  r  r  r   kaiserr"  r-  r.  r2  crossr7  r8  r9  r:  
trim_zerosrF  setxor1drI  rT  	setdiff1drW  r[  in1disinr^  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!

	


""
:
