a
    ·Df                     @   s  d Z ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZ d	Zd
ZdZdddZejfddZdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#e"Z$dd Z%d d! Z&d"d# Z'd$d% Z(d&d' Z)d(d) Z*d*d+ Z+d,d) Z*e+e*eej,ej- d-d. Z.d/d0 Z/d1d2 Z0ee0d3d4d5d6 Z1e+e/d7e0ej2 d8d9 Z3d:d; Z4d<d= Z5d>d? Z6d@dA Z7dBdC Z8dDdE Z9dFdG Z:dHdI Z;dJdK Z<dLdM Z=dNdO Z>dPdQ Z?dRdS Z@dTdU ZAdVdW ZBdXdY ZCdZd[ ZDd\d] ZEd^d_ ZFd`da ZGdbdc ZHddde ZIdfdg ZJdhdi ZKdjdk ZLdldm ZMdndo ZNdpdq ZOdrds ZPdtdu ZQdvdw ZRdxdy ZSdzd{ ZTd|d} ZUd~d ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdd Zudd Zvdd ZwddÄ Zxddń ZyddǄ ZzddɄ Z{dd˄ Z|dd̈́ Z}ddτ Z~ddф Zddӄ ZddՄ Zddׄ Zddل Zddۄ Zdd݄ Zdd߄ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d Zdd Zdd ZdS (  zCodegen for functions used as kernels in NumPy functions

Typically, the kernels of several ufuncs that can't map directly to
Python builtins
    Noverload)impl_ret_untracked)typingtypeserrorsloweringcgutils)register_jitable)
npdatetime)	cmathimplmathimplnumbersg+eG?g&{?g9B.?c                    s   t ||ksJ t | j|ks"J | jd  |du r8 }t fdd| jD rZ| j|ksddl}| jjj}d	|| }dsJ |dS )zchecks that the following are true:
    - args and sig.args have arg_count elements
    - all input types are homogeneous
    - return type is 'return_type' if provided, otherwise it must be
      homogeneous with the input types.
    r   Nc                 3   s   | ]}| kV  qd S N .0argtyr   ^/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/numba/np/npyfuncs.py	<genexpr>)       z/_check_arity_and_homogeneity.<locals>.<genexpr>z"{0} called with invalid types: {1}F)
lenargsallreturn_typeinspectcurrentframef_backf_codeco_nameformat)sigr   arityr   r   fnamemsgr   r   r   _check_arity_and_homogeneity   s    
"r'   c                    sx    j }}tj||gt|j }tj|||d}	 fddt	||jD }
 
|	|
} |tj|jS )Nnamec                    s    g | ]\}}  ||qS r   )cast)r   r   Zargtybuildercontextr   r   r   
<listcomp>9   s   z0_call_func_by_name_with_cast.<locals>.<listcomp>)moduleget_argument_typellvmliteirFunctionTyper   r   r	   insert_pure_functionzipcallr*   r   float64r   )r-   r,   r#   r   	func_namer   modZltyfntyfnZ	cast_argsresultr   r+   r   _call_func_by_name_with_cast0   s    

r=   c              
      sF  |j d }z|| }W n> tyT } z&d|t|}	t|	W Y d }~n
d }~0 0  j}
|tjv r	 |} fdd|D }|
 g| }|gt|j  }fdd|D }tjtj |}t|
||} ||  |d }nPfdd|j D }|j}tj||}tj|
||d} ||j |}|S )Nr   z!No {0} function for real type {1}c                    s   g | ]}t  |qS r   )r	   Zalloca_once_valuer   )r,   r   r   r.   Y   s   z/_dispatch_func_by_name_type.<locals>.<listcomp>c                    s   g | ]}  | qS r   )get_value_typeZ
as_pointer)r   r   r-   r   r   r.   a   s   c                    s   g | ]}  |qS r   )r0   )r   Zatyr?   r   r   r.   i   r   r(   )r   KeyErrorr"   strr   ZLoweringErrorr/   r   Zcomplex_domainmake_complexZ_getpointerlistr1   r2   r3   ZVoidTyper	   Zget_or_insert_functionr6   loadr0   r   r4   Zcall_external_function)r-   r,   r#   r   tableZ	user_namer   r8   er&   r9   outZptrargsZ	call_argsZcall_argtysZcall_argltysr:   r;   retvalargtypesrestyper   )r,   r-   r   _dispatch_func_by_name_type@   s6    	
 


rK   c              	   C   s  t ||d |\}}|jd }| |d}| |d}| |d|jjd > }	|d||}
|d||}|d|	|}|||}||
|}|j|dd\}}| |j	}W d    n1 s0    Y  | |j	}|
||}|||}|d||}|d||}|||}|d	||}|||}||||}|||}W d    n1 sd0    Y  W d    n1 s0    Y  ||j}||| ||| |S )
N   r      ==FZlikely>!=)r'   r   get_constanttypewidthicmp_unsignedand_or_if_elsebasic_blockZsdivsremicmp_signedxorselectaddphiadd_incoming)r-   r,   r#   r   numdenr   ZERO	MINUS_ONEZMIN_INTZden_is_zeroZden_is_minus_oneZnum_is_min_intZcould_cause_sigfpeZ
force_zerothen	otherwisebb_thenbb_otherwisedivr9   num_gt_zeroden_gt_zeronot_same_signmod_not_zeroneeds_fixing	fix_valueZresult_otherwiser<   r   r   r   np_int_sdiv_impl~   s:    
$Lrq   c                 C   s   t ||d |\}}|jd }| |d}|d||}|j}	t||~ |j}
|||}|d||}|d||}|	||}|d||}|
||}||||}|||}W d    n1 s0    Y  ||j}|||	 |||
 |S )NrL   r   rR   rQ   )r'   r   rS   rV   rZ   r	   if_unlikelyr[   r\   r]   rW   r^   r_   r`   rT   ra   )r-   r,   r#   r   rb   rc   r   rd   den_not_zerobb_no_ifbb_ifr9   rk   rl   rm   rn   ro   rp   Z	final_modr<   r   r   r   np_int_srem_impl   s(    
*rv   c                 C   sH   t | ||jd |j |}t| ||jd |j |}| ||j||gS Nr   rN   )rq   r   r   rv   
make_tupler-   r,   r#   r   rj   remr   r   r   np_int_sdivrem_impl   s    r{   c              	   C   s   t ||d |\}}|jd }| |d}|d||}|j|ddt\}	}
|	 |j}W d    n1 sl0    Y  |
" |||}|j}W d    n1 s0    Y  W d    n1 s0    Y  ||j}|	|| |	|| |S )NrL   r   rO   FrP   )
r'   r   rS   rV   rY   rZ   Zudivr`   rT   ra   )r-   r,   r#   r   rb   rc   r   rd   Zdiv_by_zerorf   rg   rh   rj   ri   r<   r   r   r   np_int_udiv_impl   s    
$Br|   c                 C   s   t ||d |\}}|jd }| |d}|d||}|j}	t||" |j}
|||}W d    n1 sr0    Y  ||j	}|
||	 |
||
 |S )NrL   r   rR   )r'   r   rS   rV   rZ   r	   rr   Zuremr`   rT   ra   )r-   r,   r#   r   rb   rc   r   rd   rs   rt   ru   r9   r<   r   r   r   np_int_urem_impl   s    
*r}   c                 C   sH   t | ||jd |j |}t| ||jd |j |}| ||j||gS rw   )r|   r   r   r}   rx   ry   r   r   r   np_int_udivrem_impl   s    r~   c                 C   s   t ||d |j| S NrL   )r'   fdivr-   r,   r#   r   r   r   r   np_real_div_impl   s    r   c                 C   s   t ||d |\}}|jd }| |d}|||}|d||}	|d||}
|d||}||	||
|}||||}|||S )NrL   r           rR   <)	r'   r   rS   fremfcmp_orderedrW   r]   r^   fadd)r-   r,   r#   r   in1in2r   rd   resZres_ne_zeroZden_lt_zeroZres_lt_zeroro   rp   r   r   r   np_real_mod_impl  s    

r   c                 C   s   t ||d |j| S r   )r'   r   r   r   r   r   np_real_fmod_impl  s    r   c                 C   s8   t j|jd}|||}|d||}||||S )Nr   r   )r1   r2   ConstantrT   fsubr   r^   )r-   r,   r   rd   Zarg_negatedZarg_is_negativer   r   r   _fabs  s    r   c                    s   fdd|D \}}|j }|j}|j }|j}	|jtfdd||||	fD s^J d j}
tjd}tjd}t	 |}t	 |	} 
d||} |\}}|L  
d||} 
d||} ||} |\}}|,  |||
_  |||
_W d    n1 s80    Y  |  |	|} |	|} ||} ||} ||} ||} ||} ||} |||
_  |||
_W d    n1 s0    Y  W d    n1 s0    Y  W d    n1 s0    Y  |  ||	} ||} |	|} ||} ||} ||} ||} ||} |||
_  |||
_W d    n1 s0    Y  W d    n1 s0    Y  |
 S )	Nc                    s"   g | ]}j  jd  |dqS r   valuerB   r   r   r,   r-   r#   r   r   r.   *  s   z'np_complex_div_impl.<locals>.<listcomp>c                    s   g | ]}|j  kqS r   rT   r   iftyper   r   r.   2  r   mismatched typesr         ?>=rO   )realimagrT   r   make_helperr   r1   r2   r   r   r   rY   rW   r   fmulr   r   	_getvalue)r-   r,   r#   r   r   r   in1rin1iin2rin2irG   rd   ONEin2r_absin2i_absin2r_abs_ge_in2i_absrf   rg   Zin2r_is_zeroZin2i_is_zeroZin2_is_zeroZinn_thenZinn_otherwiserattmp1tmp2Zscltmp3tmp4tmp5Ztmp6r   r,   r-   r   r#   r   np_complex_div_impl"  s^    
&.nNr   c                 C   s   d S r   r   x1x2r   r   r   _npy_logaddexpo  s    r   c                    s    t | dd fdd}d S )Ngenerictargetc                    s(   | |krd S |   fdd}|S )Nc                    s\   | | }}||kr| S || }|dkr<| |  S |dkrT| | S |S d S )Nr   r   )r   r   xytmp)expfnlog1pfnshiftr   r   impl{  s    
z;_generate_logaddexp.<locals>.ol_npy_logaddexp.<locals>.implr   )r   r   r   constr   r   )r   r   ol_npy_logaddexpv  s
    z-_generate_logaddexp.<locals>.ol_npy_logaddexpr   )Z
fnoverloadr   r   r   r   r   r   r   _generate_logaddexpr  s    
r   c                 C   s   d S r   r   r   r   r   r   r     s    c                 C   sF   t ||d | jt}|| jg |jR i }| ||}|||S r   )r'   typing_contextresolve_value_typer   get_call_typer   get_functionr-   r,   r#   r   r:   r   r   r   r   np_real_logaddexp_impl  s
    r   c                 C   s   d S r   r   r   r   r   r   _npy_logaddexp2  s    r   c                 C   s   d S r   r   r   r   r   r   npy_log2_1p  s    r   r   r   c                    s   | t   fdd}|S )Nc                    s    t |  S r   )nplog1pr   ZLOG2Er   r   r     s    zol_npy_log2_1p.<locals>.impl)
_NPY_LOG2E)r   r   r   r   r   ol_npy_log2_1p  s    r   r   c                 C   sF   t ||d | jt}|| jg |jR i }| ||}|||S r   )r'   r   r   r   r   r   r   r   r   r   r   np_real_logaddexp2_impl  s
    r   c                    sf   |\}}|j  t fdd|D s,J d|j\}}| |||tj}| |||tj}|||S )Nc                 3   s   | ]}|j  kV  qd S r   r   r   Zlltyper   r   r     r   z&np_int_truediv_impl.<locals>.<genexpr>zmust have homogeneous types)rT   r   r   r*   r   r7   r   )r-   r,   r#   r   rb   rc   ZnumtyZdentyr   r   r   np_int_truediv_impl  s    
r   c                 C   s.   t | |||}t|j|j}t| |||fS r   )r   r   	signaturer   np_real_floor_impl)r-   r,   r#   r   r   sr   r   r   np_real_floor_div_impl  s    r   c                 C   sH   t | ||jd |j |}t| ||jd |j |}| ||j||gS rw   )r   r   r   r   rx   ry   r   r   r   np_real_divmod_impl  s    r   c              	      s  j d j}t||} fdd|D \}}|j}|j}	|j}
|j}|jtfdd||	|
|fD svJ dtj	
d} j}||_t |
}t |} d||} |\}}|j  ||
} |	|} ||} ||} |
|} ||}t ||f|_W d    n1 sF0    Y  |j  |
|} ||} |
|} |	|} ||} ||}t ||f|_W d    n1 s0    Y  W d    n1 s0    Y  | S )Nr   c                    s"   g | ]}j  jd  |dqS r   r   r   r   r   r   r.     s   z-np_complex_floor_div_impl.<locals>.<listcomp>c                    s   g | ]}|j  kqS r   r   r   r   r   r   r.     r   r   r   r   )r   underlying_floatr   r   r   r   rT   r   r1   r2   r   r   r   r   r   rY   r   r   r   r   r   )r-   r,   r#   r   Z
float_kindZ	floor_sigr   r   r   r   r   r   rd   rG   r   r   r   rf   rg   r   r   r   r   r   r   r   r   r   np_complex_floor_div_impl  sF    
&2Rr   c                 C   s   t ||d t| |||S r   r'   r   Zcomplex_power_implr   r   r   r   np_complex_power_impl  s    r   c                 C   s   t ||d t| |||S r   )r'   r   Zreal_power_implr   r   r   r   real_float_power_impl  s    r   c                 C   s   t ||d t| |||S r   r   r   r   r   r   np_complex_float_power_impl  s    r   c                 C   s   t ||d t| |||S r   )r'   r   Zgcd_implr   r   r   r   np_gcd_impl(  s    r   c           
      C   sV   |j \}}||  kr |jks&n J |\}}dd }| ||||}	t| ||j|	S )Nc                 S   s$   | dkrdS t | |t||   S )z7
        Like gcd, heavily cribbed from Julia.
        r   )absr   gcd)abr   r   r   lcm6  s    znp_lcm_impl.<locals>.lcm)r   r   compile_internalr   )
r-   r,   r#   r   ZxtyZytyr   r   r   r   r   r   r   np_lcm_impl0  s    
r   c                 C   s   t ||d |d }|jd }|j}| |d}| |d}| |d}	| |td}
| ||}||_||_tj	t
jg|gd R  }|| g}t| |||}t| |||}t| |||}||||}|||	|
}|||||_| S )NrN   r   r   r         nanrL   )r'   r   r   rS   floatrB   r   r   r   r   r   booleanr   np_complex_ge_implnp_complex_eq_implnp_complex_lt_implr^   )r-   r,   r#   r   opr   float_tyrd   r   re   ZNANr<   Zcmp_sigZcmp_argsarg1_ge_arg2Zarg1_eq_arg2Zarg1_lt_arg2Zreal_when_geZreal_when_nger   r   r   np_complex_sign_implC  s(    
r   c                 C   s   t ||d t|d|S )NrN   z	llvm.rintr'   r   Zcall_fp_intrinsicr   r   r   r   np_real_rint_implc  s    r   c           	      C   s|   t ||d |jd }|j}| j|||d d}| ||}tj|gd  }t| |||jg|_t| |||jg|_|	 S )NrN   r   r   rL   )
r'   r   r   rB   r   r   r   r   r   r   )	r-   r,   r#   r   r   r   r   rG   	inner_sigr   r   r   np_complex_rint_impli  s    
r   c                 C   s   t ||d t| |||S NrN   )r'   r   exp_implr   r   r   r   np_real_exp_impl|  s    r   c                 C   s   t ||d t| |||S r   )r'   r   r   r   r   r   r   np_complex_exp_impl  s    r   c                 C   sJ   t ||d |d j}tj||g}tj|j|dd}|||d gS )NrN   r   z	llvm.exp2r(   	r'   rT   r1   r2   r3   r	   r4   r/   r6   r-   r,   r#   r   ll_tyr:   r;   r   r   r   np_real_exp2_impl  s    

r   c           	      C   s|   t ||d |jd }|j}| j|||d d}| ||}| |t}|||j|_|||j|_t	| |||
 gS NrN   r   r   )r'   r   r   rB   rS   
_NPY_LOGE2r   r   r   r   r   )	r-   r,   r#   r   r   r   r   r   Zloge2r   r   r   np_complex_exp2_impl  s    
r  c                 C   s   t ||d t| |||S r   )r'   r   log_implr   r   r   r   np_real_log_impl  s    r  c                 C   s   t ||d t| |||S r   )r'   r   r  r   r   r   r   np_complex_log_impl  s    r  c                 C   sJ   t ||d |d j}tj||g}tj|j|dd}|||d gS )NrN   r   z	llvm.log2r(   r   r   r   r   r   np_real_log2_impl  s    

r  c                 C   sn   t ||d |jd }|j}t| |||}| j|||d}| |t}|||j|_|||j	|_	|
 S r   )r'   r   r   r  rB   rS   r   r   r   r   r   )r-   r,   r#   r   r   r   r   Zlog2er   r   r   np_complex_log2_impl  s    
r  c                 C   s   t ||d t| |||S r   )r'   r   Z
log10_implr   r   r   r   np_real_log10_impl  s    r  c                 C   sn   t ||d |jd }|j}t| |||}| j|||d}| |t}|||j|_|||j	|_	|
 S r   )r'   r   r   r  rB   rS   _NPY_LOG10Er   r   r   r   )r-   r,   r#   r   r   r   r   Zlog10er   r   r   np_complex_log10_impl  s    
r	  c                 C   s   t ||d t| |||S r   )r'   r   Z
expm1_implr   r   r   r   np_real_expm1_impl  s    r
  c                 C   s   t ||d |jd }|j}tj|gd  }| |d}| j|||d d}t| |||jg}	| ||}
t	| |||j
g}t| |||j
g}||	|}||	||
_
||||
_|
 S )NrN   r   rL   r   r   )r'   r   r   r   r   rS   rB   r   r   np_real_cos_implr   np_real_sin_implr   r   r   )r-   r,   r#   r   r   r   float_unary_sigre   r   r   rG   Zcos_imagZsin_imagr   r   r   r   np_complex_expm1_impl  s    
r  c                 C   s   t ||d t| |||S r   )r'   r   Z
log1p_implr   r   r   r   np_real_log1p_impl  s    r  c                 C   s   t ||d |jd }|j}tj|gd  }tj|gd  }| |d}| j|||d d}	| ||}
||	j|}t	| ||||	j
g}t| |||	j
|g|
_
t| |||g|
_|
 S )NrN   r   rL      r   r   )r'   r   r   r   r   rS   rB   r   r   np_real_hypot_implr   np_real_atan2_implr  r   )r-   r,   r#   r   r   r   r  Zfloat_binary_sigr   r   rG   Zreal_plus_onelr   r   r   np_complex_log1p_impl  s"    
r  c                 C   s   t ||d t| |||S r   )r'   r   	sqrt_implr   r   r   r   np_real_sqrt_impl  s    r  c                 C   s   t ||d t| |||S r   )r'   r   r  r   r   r   r   np_complex_sqrt_impl  s    r  c                 C   s    t ||d ||d |d S NrN   r   )r'   mulr   r   r   r   np_int_square_impl!  s    r  c                 C   s    t ||d ||d |d S r  )r'   r   r   r   r   r   np_real_square_impl&  s    r  c                 C   s:   t ||d tj|jgd  }t| |||d |d gS NrN   r  r   )r'   r   r   r   r   complex_mul_impl)r-   r,   r#   r   
binary_sigr   r   r   np_complex_square_impl*  s
    
r  c                    s:   t ||d tdddd   fdd}| ||||S )NrN   T)Zfastmathc                 S   s(   | dk rt |  d S t | dS d S )Nr   gUUUUUU?)r   powerr   r   r   r   cbrt9  s    znp_real_cbrt_impl.<locals>.cbrtc                    s   t | rt jS  | S r   )r   isnanr   r   r!  r   r   _cbrt@  s    
z np_real_cbrt_impl.<locals>._cbrt)r'   r
   r   )r-   r,   r#   r   r$  r   r#  r   np_real_cbrt_impl4  s
    
r%  c           	      C   sd   t ||d |j}tj|gd  }| ||d |tj}| tjd}|||}| ||tj|S r  )	r'   r   r   r   r*   r   r7   rS   r   )	r-   r,   r#   r   r   r  Zin_as_floatr   Zresult_as_floatr   r   r   np_int_reciprocal_implK  s    r&  c                 C   s*   t ||d | |jd}|||d S )NrN   r   r   )r'   rS   r   r   )r-   r,   r#   r   r   r   r   r   np_real_reciprocal_implY  s    r'  c              	   C   s  t ||d |jd }|j}| |d}| |d}| j|||d d}| ||}	|j}
|j}t| ||
}t| ||}|d||}|	|\}}|` |
||
}|||}||
|}|
||}|||}||	_||||	_W d    n1 s0    Y  |\ |
|
|}||
|}|||}|
||}||||	_||||	_W d    n1 st0    Y  W d    n1 s0    Y  |	 S )NrN   r   r   r   r   <=)r'   r   r   rS   rB   r   r   r   r   rY   r   r   r   r   r   )r-   r,   r#   r   r   r   rd   r   r   rG   r   r   Zin1r_absZin1i_absZin1i_abs_le_in1r_absrf   rg   rZtmp0dinv_dZminus_rr   r   r   np_complex_reciprocal_impl_  s:    
.Nr,  c                 C   s   t ||d t| |||S r   )r'   r   sin_implr   r   r   r   r    s    r  c                 C   s   t ||d t| |||S r   )r'   r   r-  r   r   r   r   np_complex_sin_impl  s    r.  c                 C   s   t ||d t| |||S r   )r'   r   cos_implr   r   r   r   r    s    r  c                 C   s   t ||d t| |||S r   )r'   r   r/  r   r   r   r   np_complex_cos_impl  s    r0  c                 C   s   t ||d t| |||S r   )r'   r   Ztan_implr   r   r   r   np_real_tan_impl  s    r1  c                 C   s   t ||d t| |||S r   )r'   r   Z	asin_implr   r   r   r   np_real_asin_impl  s    r2  c                 C   s   t ||d t| |||S r   )r'   r   Z	acos_implr   r   r   r   np_real_acos_impl  s    r3  c                 C   s   t ||d t| |||S r   )r'   r   Z	atan_implr   r   r   r   np_real_atan_impl  s    r4  c                 C   s   t ||d t| |||S r   )r'   r   Zatan2_float_implr   r   r   r   r    s    r  c                 C   s   t ||d t| |||S r   )r'   r   Zhypot_float_implr   r   r   r   r    s    r  c                 C   s   t ||d t| |||S r   )r'   r   Z	sinh_implr   r   r   r   np_real_sinh_impl  s    r5  c                 C   s   t ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
t| |||
g}t	| |||	g}t
| |||
g}t| |||	g}||||_||||_| S NrN   r   rL   )r'   r   r   r   r   rB   r   r   r  r5  r  np_real_cosh_implr   r   )r-   r,   r#   r   r   ftyfsig1r   rG   xrxisxishxrcxichxrr   r   r   np_complex_sinh_impl  s    
r@  c                 C   s   t ||d t| |||S r   )r'   r   Z	cosh_implr   r   r   r   r7    s    r7  c                 C   s   t ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
t| |||
g}t	| |||	g}t
| |||
g}t| |||	g}||||_||||_| S r6  )r'   r   r   r   r   rB   r   r   r  r7  r  r5  r   r   )r-   r,   r#   r   r   r8  r9  r   rG   r:  r;  r>  r?  r<  r=  r   r   r   np_complex_cosh_impl  s    
rA  c                 C   s   t ||d t| |||S r   )r'   r   Z	tanh_implr   r   r   r   np_real_tanh_impl  s    rB  c                 C   sn  t ||d |jd }|j}tj|gd  }| |d}| |||d }| ||}	|j}
|j}t	| |||g}t
| |||g}t| |||
g}t| |||
g}|||}|||}|||}|||}|||}|||}|||}|||}|||}|||}|||}|||}|||}|||}||||	_||||	_|	 S )NrN   r   rL   r   )r'   r   r   r   r   rS   rB   r   r   r  r  r5  r7  r   r   r   r   r   )r-   r,   r#   r   r   r8  r9  r   r   rG   r:  r;  siciZshrZchr_rsis_rcZicZsqr_rcZsqr_icr*  r+  Zrs_rcZis_icZis_rcZrs_icZnumrZnumir   r   r   np_complex_tanh_impl  s<    
rH  c                 C   s   t ||d t| |||S r   )r'   r   Z
asinh_implr   r   r   r   np_real_asinh_implB  s    rI  c                 C   s   t ||d t| |||S r   )r'   r   Z
acosh_implr   r   r   r   np_real_acosh_implJ  s    rJ  c                 C   s   t ||d |jd }tj|gd  }| ||d}|d }t| ||||g}t| ||||g}	t| |||g}
t| |||	g}t	| |||
|g}t| ||||g}t
| |||gS )NrN   r   r  y      ?        )r'   r   r   r   Zget_constant_genericr   Zcomplex_add_implZcomplex_sub_implr  r  r  )r-   r,   r#   r   r   Zcsig2r   r   Z
x_plus_oneZx_minus_oneZsqrt_x_plus_oneZsqrt_x_minus_oneZ	prod_sqrtZlog_argr   r   r   np_complex_acosh_implO  s,    

rK  c                 C   s   t ||d t| |||S r   )r'   r   Z
atanh_implr   r   r   r   np_real_atanh_implm  s    rL  c                 C   s   t ||d t|d|S )NrN   z
llvm.floorr   r   r   r   r   r   u  s    r   c                 C   s   t ||d t|d|S )NrN   z	llvm.ceilr   r   r   r   r   np_real_ceil_impl~  s    rM  c                 C   s   t ||d t|d|S )NrN   z
llvm.truncr   r   r   r   r   np_real_trunc_impl  s    rN  c                 C   s   t ||d t|d|S )NrN   z	llvm.fabsr   r   r   r   r   np_real_fabs_impl  s    rO  c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d	||	} |
|} ||} ||S )
NrL   r   r   c                    s   g | ]}j  |d qS r   rB   r   r+   r   r   r.     r   z&np_complex_ge_impl.<locals>.<listcomp>rQ   ordrO   r   	r'   r   r   r   r   r   r   rW   rX   )r-   r,   r#   r   r   r   r:  r;  yryixr_gt_yrno_nan_xi_yixr_eq_yrZxi_ge_yi
first_termsecond_termr   r+   r   r     s    
r   c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d	||	} |
|} ||} ||S )
NrL   rP  r   c                    s   g | ]}j  |d qS rQ  rR  r   r+   r   r   r.     r   z&np_complex_le_impl.<locals>.<listcomp>r   rS  rO   r(  rT  )r-   r,   r#   r   r   r   r:  r;  rU  rV  xr_lt_yrrX  rY  Zxi_le_yirZ  r[  r   r+   r   np_complex_le_impl  s    
r]  c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d||	} |
|} ||} ||S )	NrL   rP  r   c                    s   g | ]}j  |d qS rQ  rR  r   r+   r   r   r.     r   z&np_complex_gt_impl.<locals>.<listcomp>rQ   rS  rO   rT  )r-   r,   r#   r   r   r   r:  r;  rU  rV  rW  rX  rY  Zxi_gt_yirZ  r[  r   r+   r   np_complex_gt_impl  s    
r^  c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d||	} |
|} ||} ||S )	NrL   rP  r   c                    s   g | ]}j  |d qS rQ  rR  r   r+   r   r   r.     r   z&np_complex_lt_impl.<locals>.<listcomp>r   rS  rO   rT  )r-   r,   r#   r   r   r   r:  r;  rU  rV  r\  rX  rY  Zxi_lt_yirZ  r[  r   r+   r   r     s    
r   c                    sv   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} |
|S )NrL   rP  r   c                    s   g | ]}j  |d qS rQ  rR  r   r+   r   r   r.     r   z&np_complex_eq_impl.<locals>.<listcomp>rO   )r'   r   r   r   r   r   r   rW   )r-   r,   r#   r   r   r   r:  r;  rU  rV  rY  Zxi_eq_yir   r+   r   r     s    
r   c                    sv   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} |
|S )NrL   rP  r   c                    s   g | ]}j  |d qS rQ  rR  r   r+   r   r   r.     r   z&np_complex_ne_impl.<locals>.<listcomp>rR   )r'   r   r   r   r   r   fcmp_unorderedrX   )r-   r,   r#   r   r   r   r:  r;  rU  rV  Zxr_ne_yrZxi_ne_yir   r+   r   np_complex_ne_impl   s    
r`  c                 C   s8   | j |||d}t||j}t||j}|||S )Nr   )rB   r	   is_truer   r   rX   )r-   r,   r   valcomplex_valZre_trueZim_truer   r   r   _complex_is_true  s    rd  c                 C   s>   t ||dtjd t||d }t||d }|||S NrL   rP  r   rN   )r'   r   r   r	   ra  rW   r-   r,   r#   r   r   r   r   r   r   np_logical_and_impl  s    rg  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S re  )r'   r   r   rd  r   rW   rf  r   r   r   np_complex_logical_and_impl%  s    rh  c                 C   s>   t ||dtjd t||d }t||d }|||S re  )r'   r   r   r	   ra  rX   rf  r   r   r   np_logical_or_impl,  s    ri  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S re  )r'   r   r   rd  r   rX   rf  r   r   r   np_complex_logical_or_impl3  s    rj  c                 C   s>   t ||dtjd t||d }t||d }|||S re  )r'   r   r   r	   ra  r]   rf  r   r   r   np_logical_xor_impl:  s    rk  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S re  )r'   r   r   rd  r   r]   rf  r   r   r   np_complex_logical_xor_implA  s    rl  c                 C   s"   t ||dtjd t||d S NrN   rP  r   )r'   r   r   r	   Zis_falser   r   r   r   np_logical_not_implH  s    rn  c                 C   s4   t ||dtjd t| ||jd |d }||S rm  )r'   r   r   rd  r   not_)r-   r,   r#   r   r   r   r   r   np_complex_logical_not_implM  s    rp  c                 C   s0   t ||d |\}}|d||}||||S NrL   r   r'   r\   r^   )r-   r,   r#   r   arg1arg2Zarg1_sge_arg2r   r   r   np_int_smax_impl\  s    ru  c                 C   s0   t ||d |\}}|d||}||||S rq  r'   rV   r^   )r-   r,   r#   r   rs  rt  Zarg1_uge_arg2r   r   r   np_int_umax_implc  s    rw  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S NrL   unor   r'   r_  r^   r   )r-   r,   r#   r   rs  rt  arg1_nanany_nan
nan_resultr   non_nan_resultr   r   r   np_real_maximum_implj  s    r  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S rx  rz  )r-   r,   r#   r   rs  rt  arg2_nanr|  r}  r   r~  r   r   r   np_real_fmax_imply  s    r  c                 C   s   t ||d |jd }ttj|}tjtjg|gd R  }|\}}t| |||g}	t| |||g}
||	|
}||	||}t	| |||}||||}||||S NrL   r   
r'   r   r   r   r   r   np_complex_isnan_implrX   r^   r   r-   r,   r#   r   r   bc_sigbcc_sigrs  rt  r{  r  r|  r}  r   r~  r   r   r   np_complex_maximum_impl  s    
r  c                 C   s   t ||d |jd }ttj|}tjtjg|gd R  }|\}}t| |||g}	t| |||g}
||	|
}||
||}t	| |||}||||}||||S r  r  r  r   r   r   np_complex_fmax_impl  s    
r  c                 C   s0   t ||d |\}}|d||}||||S NrL   r(  rr  )r-   r,   r#   r   rs  rt  Zarg1_sle_arg2r   r   r   np_int_smin_impl  s    r  c                 C   s0   t ||d |\}}|d||}||||S r  rv  )r-   r,   r#   r   rs  rt  Zarg1_ule_arg2r   r   r   np_int_umin_impl  s    r  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S NrL   ry  r(  rz  r-   r,   r#   r   rs  rt  r{  r|  r}  arg1_le_arg2r~  r   r   r   np_real_minimum_impl  s    r  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S r  rz  r  r   r   r   np_real_fmin_impl  s    r  c                 C   s   t ||d |jd }ttj|}tjtjg|gd R  }|\}}t| |||g}	t| |||g}
||	|
}||	||}t	| |||}||||}||||S r  
r'   r   r   r   r   r   r  rX   r^   r]  r-   r,   r#   r   r   r  r  rs  rt  r{  r  r|  r}  r  r~  r   r   r   np_complex_minimum_impl  s    
r  c                 C   s   t ||d |jd }ttj|}tjtjg|gd R  }|\}}t| |||g}	t| |||g}
||	|
}||
||}t	| |||}||||}||||S r  r  r  r   r   r   np_complex_fmin_impl  s    
r  c                 C   s   t ||dtjd tjS NrN   rP  r'   r   r   r	   Z	false_bitr   r   r   r   np_int_isnan_impl  s    r  c                 C   s"   t ||dtjd t||d S rm  )r'   r   r   r   is_nanr   r   r   r   np_real_isnan_impl  s    r  c                 C   s<   t ||dtjd |\}|j\}| j|||d}t||S NrN   rP  r   )r'   r   r   r   rB   r   r  r-   r,   r#   r   r   r   rc  r   r   r   r    s
    r  c                 C   s   t ||dtjd tjS r  )r'   r   r   r	   Ztrue_bitr   r   r   r   np_int_isfinite_impl   s    r  c                 C   s&   t ||dtjd |d|d tjS )NrN   rP  rR   r   )r'   r   r   rV   r   NATr   r   r   r   np_datetime_isfinite_impl%  s    r  c                 C   s&   t ||dtjd |d|d tjS )NrN   rP  rO   r   )r'   r   r   r\   r   r  r   r   r   r   np_datetime_isnat_impl*  s    r  c                 C   s"   t ||dtjd t||d S rm  )r'   r   r   r   	is_finiter   r   r   r   np_real_isfinite_impl/  s    r  c                 C   s<   t ||dtjd |\}|j\}| j|||d}t||S r  )r'   r   r   r   rB   r   r  r  r   r   r   np_complex_isfinite_impl4  s
    r  c                 C   s   t ||dtjd tjS r  r  r   r   r   r   np_int_isinf_impl<  s    r  c                 C   s"   t ||dtjd t||d S rm  )r'   r   r   r   is_infr   r   r   r   np_real_isinf_implA  s    r  c                 C   s<   t ||dtjd |\}|j\}| j|||d}t||S r  )r'   r   r   r   rB   r   r  r  r   r   r   np_complex_isinf_implF  s
    r  c           
   	   C   s   t ||dtjd tj| tjdtj| tjdtj| tj	di}|j
d }ttd|j }| |}|||d ||| }|d||d}	|	S )	NrN   rP  i   l        l            r   ZuintrR   )r'   r   r   float16rS   Zuint16float32Zuint32r7   Zuint64r   getattrZbitwidthr>   rW   ZbitcastrV   rT   )
r-   r,   r#   r   masksZarg_tyZ
arg_int_tyZarg_ll_int_tyZint_resZbool_resr   r   r   np_real_signbit_implN  s    

r  c                 C   s   t ||d t| |||S r   )r'   r   Zcopysign_float_implr   r   r   r   np_real_copysign_impl`  s    r  c                 C   s.   t ||d tjdtjdi}t| ||||dS )NrL   numba_nextafterfnumba_nextafter	nextafter)r'   r   r  r7   rK   )r-   r,   r#   r   dispatch_tabler   r   r   np_real_nextafter_imple  s    
r  c                 C   s   t ||d tjdtjdi}|j\}t|j||}|d j}|t	j
}tj|||g}	tj|j|	dd}
||
||d g}||g }t| ||||d}|||d S )NrN   r  r  r   zllvm.copysignr(   r  )r'   r   r  r7   r   r   r   r   rT   r   infr1   r2   r3   r	   r4   r/   r6   rK   r   )r-   r,   r#   r   r  r   r   r   Zll_infr:   r;   Zll_sinfZ
inner_argsr  r   r   r   np_real_spacing_implp  s&    



r  c           	      C   sH   |\}}|j \}}| |||tj}t||tj}t| ||||fS r   )r   r*   r   Zintcr   r   r   Z
ldexp_impl)	r-   r,   r#   r   r   r   Zty1Zty2Zf_fi_sigr   r   r   np_real_ldexp_impl  s
    
r  )N)__doc__mathZllvmlite.irr1   numpyr   Znumba.core.extendingr   Znumba.core.imputilsr   Z
numba.corer   r   r   r   r	   r
   Znumba.npr   Znumba.cpythonr   r   r   r   r  r   r'   r7   r=   rK   rq   rv   r{   r|   r}   r~   Znp_int_fmod_implr   r   r   r   r   r   r   r   expr   r   r   r   Zexp2r   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  r  r  r  r  r%  r&  r'  r,  r  r.  r  r0  r1  r2  r3  r4  r  r  r5  r@  r7  rA  rB  rH  rI  rJ  rK  rL  r   rM  rN  rO  r   r]  r^  r   r   r`  rd  rg  rh  ri  rj  rk  rl  rn  rp  ru  rw  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   r   r   r   <module>   s  
>%M


6		 
	
*)				