U
    ,d'                     @   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	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dd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+d-d. Z,d/d0 Z-d1d2 Z.d3d4 Z/d5d6 Z0d7d8 Z1d9d: Z2d;d< Z3d=d> Z4d?d@ Z5dAdB Z6dCdD Z7dEdF Z8dGdH Z9dIdJ Z:dKdL Z;dMdN Z<dOdP Z=dQdR Z>dSdT Z?dUdV Z@dWdX ZAdYdZ ZBd[d\ ZCd]d^ ZDd_d` ZEdadb ZFdcdd ZGdedf ZHdgdh ZIdidj ZJdkdl ZKdmdn ZLdodp ZMdqdr ZNdsdt ZOdudv ZPdwdx ZQdydz ZRd{d| ZSd}d~ ZTdd ZUdd 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 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)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   5/tmp/pip-unpacked-wheel-eu7e0c37/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   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>8   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_cast/   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,   X   s   z/_dispatch_func_by_name_type.<locals>.<listcomp>c                    s   g | ]}  | qS r   )Zget_value_typeZ
as_pointer)r   r   r+   r   r   r,   `   s   c                    s   g | ]}  |qS r   )r.   )r   Zatyr<   r   r   r,   h   s     r&   )r   KeyErrorr    strr   ZLoweringErrorr-   r   Zcomplex_domainmake_complexZ_getpointerlistr/   r0   r1   ZVoidTyper   Zget_or_insert_functionr4   loadr.   r   r2   Zcall_external_function)r+   r*   r!   r   tableZ	user_namer   r6   er$   r7   outZptrargsZ	call_argsZcall_argtysZcall_argltysr8   r9   retvalargtypesrestyper   )r*   r+   r   _dispatch_func_by_name_type?   s6    	



rH   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divr7   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:    
 rn   c              	   C   s   t ||d |\}}|jd }| |d}|d||}|j}	t||t |j}
|||}|d||}|d||}|	||}|d||}|
||}||||}|||}W 5 Q R X ||j}|||	 |||
 |S )NrI   r   rO   rN   )r%   r   rP   rS   rW   r   if_unlikelyrX   rY   rZ   rT   r[   r\   r]   rQ   r^   )r+   r*   r!   r   r_   r`   r   ra   den_not_zerobb_no_ifbb_ifr7   rh   ri   rj   rk   rl   rm   Z	final_modr:   r   r   r   np_int_srem_impl   s(    
rs   c                 C   sH   t | ||jd |j |}t| ||jd |j |}| ||j||gS Nr   rK   )rn   r   r   rs   
make_tupler+   r*   r!   r   rg   remr   r   r   np_int_sdivrem_impl   s    rx   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 )NrI   r   rL   FrM   )
r%   r   rP   rS   rV   rW   Zudivr]   rQ   r^   )r+   r*   r!   r   r_   r`   r   ra   Zdiv_by_zerorc   rd   re   rg   rf   r:   r   r   r   np_int_udiv_impl   s    
ry   c              	   C   s   t ||d |\}}|jd }| |d}|d||}|j}	t|| |j}
|||}W 5 Q R X ||j	}|
||	 |
||
 |S )NrI   r   rO   )r%   r   rP   rS   rW   r   ro   Zuremr]   rQ   r^   )r+   r*   r!   r   r_   r`   r   ra   rp   rq   rr   r7   r:   r   r   r   np_int_urem_impl   s    
rz   c                 C   sH   t | ||jd |j |}t| ||jd |j |}| ||j||gS rt   )ry   r   r   rz   ru   rv   r   r   r   np_int_udivrem_impl   s    r{   c                 C   s   t ||d |j| S NrI   )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 )NrI   r           rO   <)	r%   r   rP   fremfcmp_orderedrT   rZ   r[   fadd)r+   r*   r!   r   in1in2r   ra   resZres_ne_zeroZden_lt_zeroZres_lt_zerorl   rm   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   )r/   r0   ConstantrQ   fsubr   r[   )r+   r*   r   ra   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r?   r   r   r*   r+   r!   r   r   r,   )  s   z'np_complex_div_impl.<locals>.<listcomp>c                    s   g | ]}|j  kqS r   rQ   r   iftyper   r   r,   1  s     mismatched typesr         ?>=rL   )realimagrQ   r   r   make_helperr   r/   r0   r   r   r   rV   rT   r}   fmulr   r   	_getvalue)r+   r*   r!   r   r   r   in1rin1iin2rin2irD   ra   ONEin2r_absin2i_absin2r_abs_ge_in2i_absrc   rd   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.   t ||d tjdtjdi}t| ||||dS )NrI   Znpy_logaddexpfZnpy_logaddexpZ	logaddexpr%   r   float32r5   rH   r+   r*   r!   r   dispatch_tabler   r   r   np_real_logaddexp_impln  s      
 r   c                 C   s.   t ||d tjdtjdi}t| ||||dS )NrI   Znpy_logaddexp2fZnpy_logaddexp2Z
logaddexp2r   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)rQ   r   r   r   r(   r   r5   r}   )r+   r*   r!   r   r_   r`   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 rt   )r   r   r   r   ru   rv   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   rQ   r   r   r/   r0   r   r   r   r   r   rV   r}   r   r   r   r   )r+   r*   r!   r   Z
float_kindZ	floor_sigr   r   r   r   r   r   ra   rD   r   r   r   rc   rd   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   )absnpgcd)abr   r   r   lcm  s    znp_lcm_impl.<locals>.lcm)r   r   r   compile_internalr   )
r+   r*   r!   r   ZxtyZytyxyr   r   r   r   r   np_lcm_impl  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 )NrK   r   r   r         nanrI   )r%   r   r   rP   floatr?   r   r   r   r   r   booleanr   np_complex_ge_implnp_complex_eq_implnp_complex_lt_implr[   )r+   r*   r!   r   opr   float_tyra   r   rb   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_impl  s(    
r   c                 C   s   t ||d t|d|S )NrK   z	llvm.rintr%   r   Zcall_fp_intrinsicr~   r   r   r   np_real_rint_impl2  s    r   c           	      C   s|   t ||d |jd }|j}| j|||d d}| ||}tj|gd  }t| |||jg|_t| |||jg|_|	 S )NrK   r   r   rI   )
r%   r   r   r?   r   r   r   r   r   r   )	r+   r*   r!   r   r   r   r   rD   	inner_sigr   r   r   np_complex_rint_impl8  s    
r   c                 C   s   t ||d t| |||S NrK   )r%   r   exp_implr~   r   r   r   np_real_exp_implK  s    r   c                 C   s   t ||d t| |||S r   )r%   r
   r   r~   r   r   r   np_complex_exp_implP  s    r   c                 C   s.   t ||d tjdtjdi}t| ||||dS )NrK   Z	npy_exp2fZnpy_exp2Zexp2r   r   r   r   r   np_real_exp2_implW  s      
 r   c           	      C   s|   t ||d |jd }|j}| j|||d d}| ||}| |t}|||j|_|||j|_t	| |||
 gS NrK   r   r   )r%   r   r   r?   rP   
_NPY_LOGE2r   r   r   r   r   )	r+   r*   r!   r   r   r   r   tmpZloge2r   r   r   np_complex_exp2_implc  s    
r   c                 C   s   t ||d t| |||S r   )r%   r   log_implr~   r   r   r   np_real_log_implr  s    r   c                 C   s   t ||d t| |||S r   )r%   r
   r   r~   r   r   r   np_complex_log_implw  s    r   c                 C   s.   t ||d tjdtjdi}t| ||||dS )NrK   Z	npy_log2fZnpy_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   r?   rP   
_NPY_LOG2Er   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   r?   rP   _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 )NrK   r   rI   r   r   )r%   r   r   r   r   rP   r?   r   r   np_real_cos_implr   np_real_sin_implr   r   r   )r+   r*   r!   r   r   r   float_unary_sigrb   r   r   rD   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 )NrK   r   rI      r   r   )r%   r   r   r   r   rP   r?   r   r   np_real_hypot_implr   np_real_atan2_implr   r   )r+   r*   r!   r   r   r   r   Zfloat_binary_sigr   r   rD   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 NrK   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 NrK   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 )NrK   T)Zfastmathc                 S   s(   | dk rt |  d S t | dS d S )Nr   gUUUUUU?)r   powerr   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   _cbrt  s    
z np_real_cbrt_impl.<locals>._cbrt)r%   r   r   )r+   r*   r!   r   r
  r   r	  r   np_real_cbrt_impl  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   r5   rP   r}   )	r+   r*   r!   r   r   r  Zin_as_floatr   Zresult_as_floatr   r   r   np_int_reciprocal_impl  s    r  c                 C   s*   t ||d | |jd}|||d S )NrK   r   r   )r%   rP   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 )NrK   r   r   r   r   <=)r%   r   r   rP   r?   r   r   r   r   rV   r}   r   r   r   r   )r+   r*   r!   r   r   r   ra   r   r   rD   r   r   Zin1r_absZin1i_absZin1i_abs_le_in1r_absrc   rd   rZtmp0dinv_dZminus_rr   r   r   np_complex_reciprocal_impl2  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_impla  s    r  c                 C   s   t ||d t| |||S r   )r%   r   cos_implr~   r   r   r   r   i  s    r   c                 C   s   t ||d t| |||S r   )r%   r
   r  r~   r   r   r   np_complex_cos_impln  s    r  c                 C   s   t ||d t| |||S r   )r%   r   Ztan_implr~   r   r   r   np_real_tan_implv  s    r  c                 C   s   t ||d t| |||S r   )r%   r   Z	asin_implr~   r   r   r   np_real_asin_impl~  s    r  c                 C   s   t ||d t| |||S r   )r%   r   Z	acos_implr~   r   r   r   np_real_acos_impl  s    r  c                 C   s   t ||d t| |||S r   )r%   r   Z	atan_implr~   r   r   r   np_real_atan_impl  s    r  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    r  c                 C   s   t ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
t| |||
g}t	| |||	g}t
| |||
g}t| |||	g}||||_||||_| S NrK   r   rI   )r%   r   r   r   r   r?   r   r   r   r  r   np_real_cosh_implr   r   )r+   r*   r!   r   r   ftyfsig1r   rD   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   r    s    r  c                 C   s   t ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
t| |||
g}t	| |||	g}t
| |||
g}t| |||	g}||||_||||_| S r  )r%   r   r   r   r   r?   r   r   r   r  r   r  r   r   )r+   r*   r!   r   r   r  r  r   rD   r   r!  r$  r%  r"  r#  r   r   r   np_complex_cosh_impl  s    
r'  c                 C   s   t ||d t| |||S r   )r%   r   Z	tanh_implr~   r   r   r   np_real_tanh_impl  s    r(  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 )NrK   r   rI   r   )r%   r   r   r   r   rP   r?   r   r   r   r   r  r  r   r   r}   r   r   )r+   r*   r!   r   r   r  r  r   r   rD   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<    
r.  c                 C   s   t ||d t| |||S r   )r%   r   Z
asinh_implr~   r   r   r   np_real_asinh_impl  s    r/  c                 C   s   t ||d t| |||S r   )r%   r   Z
acosh_implr~   r   r   r   np_real_acosh_impl  s    r0  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 )NrK   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_impl"  s,    

r1  c                 C   s   t ||d t| |||S r   )r%   r   Z
atanh_implr~   r   r   r   np_real_atanh_impl@  s    r2  c                 C   s   t ||d t|d|S )NrK   z
llvm.floorr   r~   r   r   r   r   H  s    r   c                 C   s   t ||d t|d|S )NrK   z	llvm.ceilr   r~   r   r   r   np_real_ceil_implQ  s    r3  c                 C   s   t ||d t|d|S )NrK   z
llvm.truncr   r~   r   r   r   np_real_trunc_implZ  s    r4  c                 C   s   t ||d t|d|S )NrK   z	llvm.fabsr   r~   r   r   r   np_real_fabs_implc  s    r5  c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d	||	} |
|} ||} ||S )
NrI   r   r   c                    s   g | ]}j  |d qS r   r?   r   r)   r   r   r,   t  s     z&np_complex_ge_impl.<locals>.<listcomp>rN   ordrL   r   	r%   r   r   r   r   r   r   rT   rU   )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   n  s    
r   c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d	||	} |
|} ||} ||S )
NrI   r6  r   c                    s   g | ]}j  |d qS r7  r8  r   r)   r   r   r,     s     z&np_complex_le_impl.<locals>.<listcomp>r   r9  rL   r  r:  )r+   r*   r!   r   r   r   r   r!  r;  r<  xr_lt_yrr>  r?  Zxi_le_yir@  rA  r   r)   r   np_complex_le_impl  s    
rC  c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d||	} |
|} ||} ||S )	NrI   r6  r   c                    s   g | ]}j  |d qS r7  r8  r   r)   r   r   r,     s     z&np_complex_gt_impl.<locals>.<listcomp>rN   r9  rL   r:  )r+   r*   r!   r   r   r   r   r!  r;  r<  r=  r>  r?  Zxi_gt_yir@  rA  r   r)   r   np_complex_gt_impl  s    
rD  c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d||	} |
|} ||} ||S )	NrI   r6  r   c                    s   g | ]}j  |d qS r7  r8  r   r)   r   r   r,     s     z&np_complex_lt_impl.<locals>.<listcomp>r   r9  rL   r:  )r+   r*   r!   r   r   r   r   r!  r;  r<  rB  r>  r?  Zxi_lt_yir@  rA  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 )NrI   r6  r   c                    s   g | ]}j  |d qS r7  r8  r   r)   r   r   r,     s     z&np_complex_eq_impl.<locals>.<listcomp>rL   )r%   r   r   r   r   r   r   rT   )r+   r*   r!   r   r   r   r   r!  r;  r<  r?  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 )NrI   r6  r   c                    s   g | ]}j  |d qS r7  r8  r   r)   r   r   r,     s     z&np_complex_ne_impl.<locals>.<listcomp>rO   )r%   r   r   r   r   r   fcmp_unorderedrU   )r+   r*   r!   r   r   r   r   r!  r;  r<  Zxr_ne_yrZxi_ne_yir   r)   r   np_complex_ne_impl  s    
rF  c                 C   s8   | j |||d}t||j}t||j}|||S )Nr   )r?   r   is_truer   r   rU   )r+   r*   r   valcomplex_valZre_trueZim_truer   r   r   _complex_is_true  s    rJ  c                 C   s>   t ||dtjd t||d }t||d }|||S NrI   r6  r   rK   )r%   r   r   r   rG  rT   r+   r*   r!   r   r   r   r   r   r   np_logical_and_impl  s    rM  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rK  )r%   r   r   rJ  r   rT   rL  r   r   r   np_complex_logical_and_impl  s    rN  c                 C   s>   t ||dtjd t||d }t||d }|||S rK  )r%   r   r   r   rG  rU   rL  r   r   r   np_logical_or_impl  s    rO  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rK  )r%   r   r   rJ  r   rU   rL  r   r   r   np_complex_logical_or_impl  s    rP  c                 C   s>   t ||dtjd t||d }t||d }|||S rK  )r%   r   r   r   rG  rZ   rL  r   r   r   np_logical_xor_impl  s    rQ  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rK  )r%   r   r   rJ  r   rZ   rL  r   r   r   np_complex_logical_xor_impl  s    rR  c                 C   s"   t ||dtjd t||d S NrK   r6  r   )r%   r   r   r   Zis_falser~   r   r   r   np_logical_not_impl  s    rT  c                 C   s4   t ||dtjd t| ||jd |d }||S rS  )r%   r   r   rJ  r   not_)r+   r*   r!   r   r   r   r   r   np_complex_logical_not_impl   s    rV  c                 C   s0   t ||d |\}}|d||}||||S NrI   r   r%   rY   r[   )r+   r*   r!   r   arg1arg2Zarg1_sge_arg2r   r   r   np_int_smax_impl/  s    r[  c                 C   s0   t ||d |\}}|d||}||||S rW  r%   rS   r[   )r+   r*   r!   r   rY  rZ  Zarg1_uge_arg2r   r   r   np_int_umax_impl6  s    r]  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S NrI   unor   r%   rE  r[   r   )r+   r*   r!   r   rY  rZ  arg1_nanany_nan
nan_resultr   non_nan_resultr   r   r   np_real_maximum_impl=  s    re  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S r^  r`  )r+   r*   r!   r   rY  rZ  arg2_nanrb  rc  r   rd  r   r   r   np_real_fmax_implL  s    rg  c                 C   s   t ||d |jd }ttj|}tjtjf|gd  }|\}}t| |||g}	t| |||g}
||	|
}||	||}t	| |||}||||}||||S NrI   r   
r%   r   r   r   r   r   np_complex_isnan_implrU   r[   r   r+   r*   r!   r   r   bc_sigbcc_sigrY  rZ  ra  rf  rb  rc  r   rd  r   r   r   np_complex_maximum_impl[  s    
rn  c                 C   s   t ||d |jd }ttj|}tjtjf|gd  }|\}}t| |||g}	t| |||g}
||	|
}||
||}t	| |||}||||}||||S rh  ri  rk  r   r   r   np_complex_fmax_implq  s    
ro  c                 C   s0   t ||d |\}}|d||}||||S NrI   r  rX  )r+   r*   r!   r   rY  rZ  Zarg1_sle_arg2r   r   r   np_int_smin_impl  s    rq  c                 C   s0   t ||d |\}}|d||}||||S rp  r\  )r+   r*   r!   r   rY  rZ  Zarg1_ule_arg2r   r   r   np_int_umin_impl  s    rr  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S NrI   r_  r  r`  r+   r*   r!   r   rY  rZ  ra  rb  rc  arg1_le_arg2rd  r   r   r   np_real_minimum_impl  s    rv  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S rs  r`  rt  r   r   r   np_real_fmin_impl  s    rw  c                 C   s   t ||d |jd }ttj|}tjtjf|gd  }|\}}t| |||g}	t| |||g}
||	|
}||	||}t	| |||}||||}||||S rh  
r%   r   r   r   r   r   rj  rU   r[   rC  r+   r*   r!   r   r   rl  rm  rY  rZ  ra  rf  rb  rc  ru  rd  r   r   r   np_complex_minimum_impl  s    
rz  c                 C   s   t ||d |jd }ttj|}tjtjf|gd  }|\}}t| |||g}	t| |||g}
||	|
}||
||}t	| |||}||||}||||S rh  rx  ry  r   r   r   np_complex_fmin_impl  s    
r{  c                 C   s   t ||dtjd tjS NrK   r6  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 rS  )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 NrK   r6  r   )r%   r   r   r   r?   r
   r  r+   r*   r!   r   r   r   rI  r   r   r   rj    s
    rj  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 )NrK   r6  rO   r   )r%   r   r   rS   r	   NATr~   r   r   r   np_datetime_isfinite_impl  s    r  c                 C   s&   t ||dtjd |d|d tjS )NrK   r6  rL   r   )r%   r   r   rY   r	   r  r~   r   r   r   np_datetime_isnat_impl  s    r  c                 C   s"   t ||dtjd t||d S rS  )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   r?   r
   r  r  r   r   r   np_complex_isfinite_impl  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 rS  )r%   r   r   r   is_infr~   r   r   r   np_real_isinf_impl  s    r  c                 C   s<   t ||dtjd |\}|j\}| j|||d}t||S r  )r%   r   r   r   r?   r
   r  r  r   r   r   np_complex_isinf_impl  s
    r  c                 C   s`   t ||dtjd tjdtjdi}tjtjf|j }t	| ||||d}|
d||d}|S )NrK   r6  Znumba_signbitfZnumba_signbitZsignbitrO   r   )r%   r   r   r   r5   r   r   intcr   rH   rS   rQ   )r+   r*   r!   r   r   r   Zint_resZbool_resr   r   r   np_real_signbit_impl!  s      
 r  c                 C   s   t ||d t| |||S r|   )r%   r   Zcopysign_float_implr~   r   r   r   np_real_copysign_impl0  s    r  c                 C   s.   t ||d tjdtjdi}t| ||||dS )NrI   Znpy_nextafterfZnpy_nextafterZ	nextafterr   r   r   r   r   np_real_nextafter_impl5  s      
 r  c                 C   s.   t ||d tjdtjdi}t| ||||dS )NrK   Znpy_spacingfZnpy_spacingspacingr   r   r   r   r   np_real_spacing_impl@  s      
 r  c           	      C   sH   |\}}|j \}}| |||tj}t||tj}t| ||||fS r   )r   r(   r   r  r   r   r   Z
ldexp_impl)	r+   r*   r!   r   x1Zx2Zty1Zty2Zf_fi_sigr   r   r   np_real_ldexp_implL  s
    
r  )N)__doc__mathZllvmlite.irr/   Znumpyr   Znumba.core.imputilsr   Z
numba.corer   r   r   r   r   Znumba.core.extendingr   Znumba.npr	   Znumba.cpythonr
   r   r   r   r   r   r%   r5   r;   rH   rn   rs   rx   ry   rz   r{   Znp_int_fmod_implr   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  r   r  r  r  r  r  r   r   r  r&  r  r'  r(  r.  r/  r0  r1  r2  r   r3  r4  r5  r   rC  rD  r   r   rF  rJ  rM  rN  rO  rP  rQ  rR  rT  rV  r[  r]  re  rg  rn  ro  rq  rr  rv  rw  rz  r{  r~  r  rj  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s  

>%M6		 
*)				