U
    ?h	                     @   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tt | j|ks"t| jd  |dkr8 }t fdd| jD rZ| j|ksddl}| jjj	}d
|| }dst|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   C/var/www/html/venv/lib/python3.8/site-packages/numba/np/npyfuncs.py	<genexpr>)   s     z/_check_arity_and_homogeneity.<locals>.<genexpr>z"{0} called with invalid types: {1}F)lenAssertionErrorargsallreturn_typeinspectcurrentframef_backf_codeco_nameformat)sigr   Z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              
      sD  |j d }z|| }W n< tk
rR } zd|t|}	t|	W 5 d }~X Y nX  j}
|tjk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   )r/   )r   Zatyr>   r   r   r-   i   s     r'   )r   KeyErrorr"   strr   ZLoweringErrorr.   r   Zcomplex_domainmake_complexZ_getpointerlistr0   r1   r2   ZVoidTyper	   Zget_or_insert_functionr5   loadr/   r   r3   Zcall_external_function)r,   r+   r#   r   tableZ	user_namer   r7   er%   r8   outZptrargsZ	call_argsZcall_argtysZcall_argltysr9   r:   retvalZargtypesrestyper   )r+   r,   r   _dispatch_func_by_name_type@   s6    	



rI   c              
   C   sv  t ||d |\}}|jd }| |d}| |d}| |d|jjd > }	|d||}
|d||}|d|	|}|||}||
|}|j|dd\}}| |j	}W 5 Q R X | |j	}|
||}|||}|d||}|d||}|||}|d	||}|||}||||}|||}W 5 Q R X W 5 Q R X ||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divr8   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:    
 ro   c              	   C   s   t ||d |\}}|jd }| |d}|d||}|j}	t||t |j}
|||}|d||}|d||}|	||}|d||}|
||}||||}|||}W 5 Q R X ||j}|||	 |||
 |S )NrJ   r   rP   rO   )r&   r   rQ   rT   rX   r	   if_unlikelyrY   rZ   r[   rU   r\   r]   r^   rR   r_   )r,   r+   r#   r   r`   ra   r   rb   den_not_zerobb_no_ifbb_ifr8   ri   rj   rk   rl   rm   rn   Z	final_modr;   r   r   r   np_int_srem_impl   s(    
rt   c                 C   sH   t | ||jd |j |}t| ||jd |j |}| ||j||gS Nr   rL   )ro   r   r   rt   
make_tupler,   r+   r#   r   rh   remr   r   r   np_int_sdivrem_impl   s    ry   c              
   C   s   t ||d |\}}|jd }| |d}|d||}|j|ddB\}	}
|	 |j}W 5 Q R X |
 |||}|j}W 5 Q R X W 5 Q R X ||j}|	|| |	|| |S )NrJ   r   rM   FrN   )
r&   r   rQ   rT   rW   rX   Zudivr^   rR   r_   )r,   r+   r#   r   r`   ra   r   rb   Zdiv_by_zerord   re   rf   rh   rg   r;   r   r   r   np_int_udiv_impl   s    
rz   c              	   C   s   t ||d |\}}|jd }| |d}|d||}|j}	t|| |j}
|||}W 5 Q R X ||j	}|
||	 |
||
 |S )NrJ   r   rP   )r&   r   rQ   rT   rX   r	   rp   Zuremr^   rR   r_   )r,   r+   r#   r   r`   ra   r   rb   rq   rr   rs   r8   r;   r   r   r   np_int_urem_impl   s    
r{   c                 C   sH   t | ||jd |j |}t| ||jd |j |}| ||j||gS ru   )rz   r   r   r{   rv   rw   r   r   r   np_int_udivrem_impl   s    r|   c                 C   s   t ||d |j| S NrJ   )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 )NrJ   r           rP   <)	r&   r   rQ   fremfcmp_orderedrU   r[   r\   fadd)r,   r+   r#   r   in1in2r   rb   resZres_ne_zeroZden_lt_zeroZres_lt_zerorm   rn   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   )r0   r1   ConstantrR   fsubr   r\   )r,   r+   r   rb   Zarg_negatedZarg_is_negativer   r   r   _fabs  s    r   c                    sj   fdd|D \}}|j }|j}|j }|j}	|jtfdd||||	fD s^td j}
tj	d}tj	d}t
 |}t
 |	} d||} |\}}|   d||} d||} ||} |\}}|"  |||
_  |||
_W 5 Q R X |  |	|} |	|} ||} ||} ||} ||} ||} ||} |||
_  |||
_W 5 Q R X W 5 Q R X W 5 Q R X |  ||	} ||} |	|} ||} ||} ||} ||} ||} |||
_  |||
_W 5 Q R X W 5 Q R X |
 S )	Nc                    s"   g | ]}j  jd  |dqS r   valuerA   r   r   r+   r,   r#   r   r   r-   *  s   z'np_complex_div_impl.<locals>.<listcomp>c                    s   g | ]}|j  kqS r   rR   r   iftyper   r   r-   2  s     mismatched typesr         ?>=rM   )realimagrR   r   r   make_helperr   r0   r1   r   r   r   rW   rU   r~   fmulr   r   	_getvalue)r,   r+   r#   r   r   r   in1rin1iin2rin2irF   rb   ONEin2r_absin2i_absin2r_abs_ge_in2i_absrd   re   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^    
&,"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   sB   t ||d | jt}|| j|ji }| ||}|||S r}   )r&   typing_contextresolve_value_typer   get_call_typer   get_functionr,   r+   r#   r   r9   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   sB   t ||d | jt}|| j|j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,td|j\}}| |||tj}| |||tj}|||S )Nc                 3   s   | ]}|j  kV  qd S r   r   r   Zlltyper   r   r     s     z&np_int_truediv_impl.<locals>.<genexpr>zmust have homogeneous types)rR   r   r   r   r)   r   r6   r~   )r,   r+   r#   r   r`   ra   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 ru   )r   r   r   r   rv   rw   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 svtdt	j
d} j}||_t |
}t |} d||} |\}}|`  ||
} |	|} ||} ||} |
|} ||}t ||f|_W 5 Q R X |`  |
|} ||} |
|} |	|} ||} ||}t ||f|_W 5 Q R X W 5 Q R X | 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-     s     r   r   r   )r   underlying_floatr   r   r   r   rR   r   r   r0   r1   r   r   r   r   r   rW   r~   r   r   r   r   )r,   r+   r#   r   Z
float_kindZ	floor_sigr   r   r   r   r   r   rb   rF   r   r   r   rd   re   r   r   r   r   r   r   r   r   r   np_complex_floor_div_impl  sF    
&&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 t|\}}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   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f|gd  }|| g}t| |||}t| |||}t| |||}||||}|||	|
}|||||_| S )NrL   r   r   r         nanrJ   )r&   r   r   rQ   floatrA   r   r   r   r   r   booleanr   np_complex_ge_implnp_complex_eq_implnp_complex_lt_implr\   )r,   r+   r#   r   opr   float_tyrb   r   rc   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 )NrL   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 )NrL   r   r   rJ   )
r&   r   r   rA   r   r   r   r   r   r   )	r,   r+   r#   r   r   r   r   rF   	inner_sigr   r   r   np_complex_rint_impli  s    
r   c                 C   s   t ||d t| |||S NrL   )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   s.   t ||d tjdtjdi}t| ||||dS )NrL   Znumba_exp2fZ
numba_exp2exp2r&   r   float32r6   rI   r,   r+   r#   r   dispatch_tabler   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 NrL   r   r   )r&   r   r   rA   rQ   
_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   s.   t ||d tjdtjdi}t| ||||dS )NrL   Znumba_log2fZ
numba_log2log2r   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  rA   rQ   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  rA   rQ   _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 )NrL   r   rJ   r   r   )r&   r   r   r   r   rQ   rA   r   r   np_real_cos_implr   np_real_sin_implr   r   r   )r,   r+   r#   r   r   r   float_unary_sigrc   r   r   rF   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 )NrL   r   rJ      r   r   )r&   r   r   r   r   rQ   rA   r   r   np_real_hypot_implr   np_real_atan2_implr  r   )r,   r+   r#   r   r   r   r  Zfloat_binary_sigr   r   rF   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 NrL   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 NrL   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 )NrL   T)Zfastmathc                 S   s(   | dk rt |  d S t | dS d S )Nr   gUUUUUU?)r   powerr   r   r   r   cbrt=  s    znp_real_cbrt_impl.<locals>.cbrtc                    s   t | rt jS  | S r   )r   isnanr   r   r"  r   r   _cbrtD  s    
z np_real_cbrt_impl.<locals>._cbrt)r&   r
   r   )r,   r+   r#   r   r%  r   r$  r   np_real_cbrt_impl8  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   r6   rQ   r~   )	r,   r+   r#   r   r   r  Zin_as_floatr   Zresult_as_floatr   r   r   np_int_reciprocal_implO  s    r'  c                 C   s*   t ||d | |jd}|||d S )NrL   r   r   )r&   rQ   r   r~   )r,   r+   r#   r   r   r   r   r   np_real_reciprocal_impl]  s    r(  c              
   C   sd  t ||d |jd }|j}| |d}| |d}| j|||d d}| ||}	|j}
|j}t| ||
}t| ||}|d||}|	|\}}|V |
||
}|||}||
|}|
||}|||}||	_||||	_W 5 Q R X |R |
|
|}||
|}|||}|
||}||||	_||||	_W 5 Q R X W 5 Q R X |	 S )NrL   r   r   r   r   <=)r&   r   r   rQ   rA   r   r   r   r   rW   r~   r   r   r   r   )r,   r+   r#   r   r   r   rb   r   r   rF   r   r   Zin1r_absZin1i_absZin1i_abs_le_in1r_absrd   re   rZtmp0dinv_dZminus_rr   r   r   np_complex_reciprocal_implc  s:    
"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   r0  r   r   r   r   np_complex_cos_impl  s    r1  c                 C   s   t ||d t| |||S r   )r&   r   Ztan_implr   r   r   r   np_real_tan_impl  s    r2  c                 C   s   t ||d t| |||S r   )r&   r   Z	asin_implr   r   r   r   np_real_asin_impl  s    r3  c                 C   s   t ||d t| |||S r   )r&   r   Z	acos_implr   r   r   r   np_real_acos_impl  s    r4  c                 C   s   t ||d t| |||S r   )r&   r   Z	atan_implr   r   r   r   np_real_atan_impl  s    r5  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    r6  c                 C   s   t ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
t| |||
g}t	| |||	g}t
| |||
g}t| |||	g}||||_||||_| S NrL   r   rJ   )r&   r   r   r   r   rA   r   r   r  r6  r  np_real_cosh_implr   r   )r,   r+   r#   r   r   ftyfsig1r   rF   xrxisxishxrcxichxrr   r   r   np_complex_sinh_impl  s    
rA  c                 C   s   t ||d t| |||S r   )r&   r   Z	cosh_implr   r   r   r   r8    s    r8  c                 C   s   t ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
t| |||
g}t	| |||	g}t
| |||
g}t| |||	g}||||_||||_| S r7  )r&   r   r   r   r   rA   r   r   r  r8  r  r6  r   r   )r,   r+   r#   r   r   r9  r:  r   rF   r;  r<  r?  r@  r=  r>  r   r   r   np_complex_cosh_impl  s    
rB  c                 C   s   t ||d t| |||S r   )r&   r   Z	tanh_implr   r   r   r   np_real_tanh_impl  s    rC  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 )NrL   r   rJ   r   )r&   r   r   r   r   rQ   rA   r   r   r  r  r6  r8  r   r   r~   r   r   )r,   r+   r#   r   r   r9  r:  r   r   rF   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<    
rI  c                 C   s   t ||d t| |||S r   )r&   r   Z
asinh_implr   r   r   r   np_real_asinh_implF  s    rJ  c                 C   s   t ||d t| |||S r   )r&   r   Z
acosh_implr   r   r   r   np_real_acosh_implN  s    rK  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 )NrL   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_implS  s,    

rL  c                 C   s   t ||d t| |||S r   )r&   r   Z
atanh_implr   r   r   r   np_real_atanh_implq  s    rM  c                 C   s   t ||d t|d|S )NrL   z
llvm.floorr   r   r   r   r   r   y  s    r   c                 C   s   t ||d t|d|S )NrL   z	llvm.ceilr   r   r   r   r   np_real_ceil_impl  s    rN  c                 C   s   t ||d t|d|S )NrL   z
llvm.truncr   r   r   r   r   np_real_trunc_impl  s    rO  c                 C   s   t ||d t|d|S )NrL   z	llvm.fabsr   r   r   r   r   np_real_fabs_impl  s    rP  c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d	||	} |
|} ||} ||S )
NrJ   r   r   c                    s   g | ]}j  |d qS r   rA   r   r*   r   r   r-     s     z&np_complex_ge_impl.<locals>.<listcomp>rO   ordrM   r   	r&   r   r   r   r   r   r   rU   rV   )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 )
NrJ   rQ  r   c                    s   g | ]}j  |d qS rR  rS  r   r*   r   r   r-     s     z&np_complex_le_impl.<locals>.<listcomp>r   rT  rM   r)  rU  )r,   r+   r#   r   r   r   r;  r<  rV  rW  xr_lt_yrrY  rZ  Zxi_le_yir[  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 )	NrJ   rQ  r   c                    s   g | ]}j  |d qS rR  rS  r   r*   r   r   r-     s     z&np_complex_gt_impl.<locals>.<listcomp>rO   rT  rM   rU  )r,   r+   r#   r   r   r   r;  r<  rV  rW  rX  rY  rZ  Zxi_gt_yir[  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 )	NrJ   rQ  r   c                    s   g | ]}j  |d qS rR  rS  r   r*   r   r   r-     s     z&np_complex_lt_impl.<locals>.<listcomp>r   rT  rM   rU  )r,   r+   r#   r   r   r   r;  r<  rV  rW  r]  rY  rZ  Zxi_lt_yir[  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 )NrJ   rQ  r   c                    s   g | ]}j  |d qS rR  rS  r   r*   r   r   r-     s     z&np_complex_eq_impl.<locals>.<listcomp>rM   )r&   r   r   r   r   r   r   rU   )r,   r+   r#   r   r   r   r;  r<  rV  rW  rZ  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 )NrJ   rQ  r   c                    s   g | ]}j  |d qS rR  rS  r   r*   r   r   r-   
  s     z&np_complex_ne_impl.<locals>.<listcomp>rP   )r&   r   r   r   r   r   fcmp_unorderedrV   )r,   r+   r#   r   r   r   r;  r<  rV  rW  Zxr_ne_yrZxi_ne_yir   r*   r   np_complex_ne_impl  s    
ra  c                 C   s8   | j |||d}t||j}t||j}|||S )Nr   )rA   r	   is_truer   r   rV   )r,   r+   r   valcomplex_valZre_trueZim_truer   r   r   _complex_is_true  s    re  c                 C   s>   t ||dtjd t||d }t||d }|||S NrJ   rQ  r   rL   )r&   r   r   r	   rb  rU   r,   r+   r#   r   r   r   r   r   r   np_logical_and_impl"  s    rh  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rf  )r&   r   r   re  r   rU   rg  r   r   r   np_complex_logical_and_impl)  s    ri  c                 C   s>   t ||dtjd t||d }t||d }|||S rf  )r&   r   r   r	   rb  rV   rg  r   r   r   np_logical_or_impl0  s    rj  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rf  )r&   r   r   re  r   rV   rg  r   r   r   np_complex_logical_or_impl7  s    rk  c                 C   s>   t ||dtjd t||d }t||d }|||S rf  )r&   r   r   r	   rb  r[   rg  r   r   r   np_logical_xor_impl>  s    rl  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rf  )r&   r   r   re  r   r[   rg  r   r   r   np_complex_logical_xor_implE  s    rm  c                 C   s"   t ||dtjd t||d S NrL   rQ  r   )r&   r   r   r	   Zis_falser   r   r   r   np_logical_not_implL  s    ro  c                 C   s4   t ||dtjd t| ||jd |d }||S rn  )r&   r   r   re  r   not_)r,   r+   r#   r   r   r   r   r   np_complex_logical_not_implQ  s    rq  c                 C   s0   t ||d |\}}|d||}||||S NrJ   r   r&   rZ   r\   )r,   r+   r#   r   arg1arg2Zarg1_sge_arg2r   r   r   np_int_smax_impl`  s    rv  c                 C   s0   t ||d |\}}|d||}||||S rr  r&   rT   r\   )r,   r+   r#   r   rt  ru  Zarg1_uge_arg2r   r   r   np_int_umax_implg  s    rx  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S NrJ   unor   r&   r`  r\   r   )r,   r+   r#   r   rt  ru  arg1_nanany_nan
nan_resultr   non_nan_resultr   r   r   np_real_maximum_impln  s    r  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S ry  r{  )r,   r+   r#   r   rt  ru  arg2_nanr}  r~  r   r  r   r   r   np_real_fmax_impl}  s    r  c                 C   s   t ||d |jd }ttj|}tjtjf|gd  }|\}}t| |||g}	t| |||g}
||	|
}||	||}t	| |||}||||}||||S NrJ   r   
r&   r   r   r   r   r   np_complex_isnan_implrV   r\   r   r,   r+   r#   r   r   bc_sigbcc_sigrt  ru  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f|gd  }|\}}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 NrJ   r)  rs  )r,   r+   r#   r   rt  ru  Zarg1_sle_arg2r   r   r   np_int_smin_impl  s    r  c                 C   s0   t ||d |\}}|d||}||||S r  rw  )r,   r+   r#   r   rt  ru  Zarg1_ule_arg2r   r   r   np_int_umin_impl  s    r  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S NrJ   rz  r)  r{  r,   r+   r#   r   rt  ru  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  r{  r  r   r   r   np_real_fmin_impl  s    r  c                 C   s   t ||d |jd }ttj|}tjtjf|gd  }|\}}t| |||g}	t| |||g}
||	|
}||	||}t	| |||}||||}||||S r  
r&   r   r   r   r   r   r  rV   r\   r^  r,   r+   r#   r   r   r  r  rt  ru  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f|gd  }|\}}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 NrL   rQ  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 rn  )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 NrL   rQ  r   )r&   r   r   r   rA   r   r  r,   r+   r#   r   r   r   rd  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 )NrL   rQ  rP   r   )r&   r   r   rT   r   NATr   r   r   r   np_datetime_isfinite_impl)  s    r  c                 C   s&   t ||dtjd |d|d tjS )NrL   rQ  rM   r   )r&   r   r   rZ   r   r  r   r   r   r   np_datetime_isnat_impl.  s    r  c                 C   s"   t ||dtjd t||d S rn  )r&   r   r   r   	is_finiter   r   r   r   np_real_isfinite_impl3  s    r  c                 C   s<   t ||dtjd |\}|j\}| j|||d}t||S r  )r&   r   r   r   rA   r   r  r  r   r   r   np_complex_isfinite_impl8  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 rn  )r&   r   r   r   is_infr   r   r   r   np_real_isinf_implE  s    r  c                 C   s<   t ||dtjd |\}|j\}| j|||d}t||S r  )r&   r   r   r   rA   r   r  r  r   r   r   np_complex_isinf_implJ  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 )	NrL   rQ  i   l        l            r   ZuintrP   )r&   r   r   Zfloat16rQ   Zuint16r   Zuint32r6   Zuint64r   getattrZbitwidthr=   rU   ZbitcastrT   rR   )
r,   r+   r#   r   ZmasksZarg_tyZ
arg_int_tyZarg_ll_int_tyZint_resZbool_resr   r   r   np_real_signbit_implR  s        

r  c                 C   s   t ||d t| |||S r}   )r&   r   Zcopysign_float_implr   r   r   r   np_real_copysign_impld  s    r  c                 C   s.   t ||d tjdtjdi}t| ||||dS )NrJ   numba_nextafterfnumba_nextafter	nextafterr   r   r   r   r   np_real_nextafter_impli  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 )NrL   r  r  r   zllvm.copysignr'   r  )r&   r   r   r6   r   r   r   r   rR   r   infr0   r1   r2   r	   r3   r.   r5   rI   r   )r,   r+   r#   r   r   r   r   Zll_tyZll_infr9   r:   Zll_sinfZ
inner_argsr  r   r   r   np_real_spacing_implt  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.irr0   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&   r6   r<   rI   ro   rt   ry   rz   r{   r|   Znp_int_fmod_implr   r   r   r   r   r   r   r   expr   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'  r(  r-  r  r/  r  r1  r2  r3  r4  r5  r  r  r6  rA  r8  rB  rC  rI  rJ  rK  rL  rM  r   rN  rO  rP  r   r^  r_  r   r   ra  re  rh  ri  rj  rk  rl  rm  ro  rq  rv  rx  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		 
*)				