U
    9%e	                     @   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   P/var/www/html/Darija-Ai-API/env/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   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   )r0   )r   Zatyr?   r   r   r.   i   s     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;   retvalZargtypesrestyper   )r,   r-   r   _dispatch_func_by_name_type@   s6    	



rJ   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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:    
 rp   c              	   C   s   t ||d |\}}|jd }| |d}|d||}|j}	t||t |j}
|||}|d||}|d||}|	||}|d||}|
||}||||}|||}W 5 Q R X ||j}|||	 |||
 |S )NrK   r   rQ   rP   )r'   r   rR   rU   rY   r	   if_unlikelyrZ   r[   r\   rV   r]   r^   r_   rS   r`   )r-   r,   r#   r   ra   rb   r   rc   den_not_zerobb_no_ifbb_ifr9   rj   rk   rl   rm   rn   ro   Z	final_modr<   r   r   r   np_int_srem_impl   s(    
ru   c                 C   sH   t | ||jd |j |}t| ||jd |j |}| ||j||gS Nr   rM   )rp   r   r   ru   
make_tupler-   r,   r#   r   ri   remr   r   r   np_int_sdivrem_impl   s    rz   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 )NrK   r   rN   FrO   )
r'   r   rR   rU   rX   rY   Zudivr_   rS   r`   )r-   r,   r#   r   ra   rb   r   rc   Zdiv_by_zerore   rf   rg   ri   rh   r<   r   r   r   np_int_udiv_impl   s    
r{   c              	   C   s   t ||d |\}}|jd }| |d}|d||}|j}	t|| |j}
|||}W 5 Q R X ||j	}|
||	 |
||
 |S )NrK   r   rQ   )r'   r   rR   rU   rY   r	   rq   Zuremr_   rS   r`   )r-   r,   r#   r   ra   rb   r   rc   rr   rs   rt   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 rv   )r{   r   r   r|   rw   rx   r   r   r   np_int_udivrem_impl   s    r}   c                 C   s   t ||d |j| S NrK   )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 )NrK   r           rQ   <)	r'   r   rR   fremfcmp_orderedrV   r\   r]   fadd)r-   r,   r#   r   in1in2r   rc   resZres_ne_zeroZden_lt_zeroZres_lt_zerorn   ro   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   ConstantrS   fsubr   r]   )r-   r,   r   rc   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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   rS   r   iftyper   r   r.   2  s     mismatched typesr         ?>=rN   )realimagrS   r   r   make_helperr   r1   r2   r   r   r   rX   rV   r   fmulr   r   	_getvalue)r-   r,   r#   r   r   r   in1rin1iin2rin2irG   rc   ONEin2r_absin2i_absin2r_abs_ge_in2i_absre   rf   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   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   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)rS   r   r   r   r*   r   r7   r   )r-   r,   r#   r   ra   rb   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 rv   )r   r   r   r   rw   rx   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   rS   r   r   r1   r2   r   r   r   r   r   rX   r   r   r   r   r   )r-   r,   r#   r   Z
float_kindZ	floor_sigr   r   r   r   r   r   rc   rG   r   r   r   re   rf   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 )NrM   r   r   r         nanrK   )r'   r   r   rR   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_tyrc   r   rd   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 )NrM   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 )NrM   r   r   rK   )
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 NrM   )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 )NrM   Znumba_exp2fZ
numba_exp2exp2r'   r   float32r7   rJ   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 NrM   r   r   )r'   r   r   rB   rR   
_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 )NrM   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  rB   rR   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   rR   _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 )NrM   r   rK   r   r   )r'   r   r   r   r   rR   rB   r   r   np_real_cos_implr   np_real_sin_implr   r   r   )r-   r,   r#   r   r   r   float_unary_sigrd   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 )NrM   r   rK      r   r   )r'   r   r   r   r   rR   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 NrM   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 NrM   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 )NrM   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   r7   rR   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 )NrM   r   r   )r'   rR   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 )NrM   r   r   r   r   <=)r'   r   r   rR   rB   r   r   r   r   rX   r   r   r   r   r   )r-   r,   r#   r   r   r   rc   r   r   rG   r   r   Zin1r_absZin1i_absZin1i_abs_le_in1r_absre   rf   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    r0  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   r1  r   r   r   r   np_complex_cos_impl  s    r2  c                 C   s   t ||d t| |||S r   )r'   r   Ztan_implr   r   r   r   np_real_tan_impl  s    r3  c                 C   s   t ||d t| |||S r   )r'   r   Z	asin_implr   r   r   r   np_real_asin_impl  s    r4  c                 C   s   t ||d t| |||S r   )r'   r   Z	acos_implr   r   r   r   np_real_acos_impl  s    r5  c                 C   s   t ||d t| |||S r   )r'   r   Z	atan_implr   r   r   r   np_real_atan_impl  s    r6  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    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 NrM   r   rK   )r'   r   r   r   r   rB   r   r   r  r7  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    
rB  c                 C   s   t ||d t| |||S r   )r'   r   Z	cosh_implr   r   r   r   r9    s    r9  c                 C   s   t ||d |jd }|j}tj|gd  }| |||d }| ||}|j}	|j}
t| |||
g}t	| |||	g}t
| |||
g}t| |||	g}||||_||||_| S r8  )r'   r   r   r   r   rB   r   r   r  r9  r  r7  r   r   )r-   r,   r#   r   r   r:  r;  r   rG   r<  r=  r@  rA  r>  r?  r   r   r   np_complex_cosh_impl  s    
rC  c                 C   s   t ||d t| |||S r   )r'   r   Z	tanh_implr   r   r   r   np_real_tanh_impl  s    rD  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 )NrM   r   rK   r   )r'   r   r   r   r   rR   rB   r   r   r  r  r7  r9  r   r   r   r   r   )r-   r,   r#   r   r   r:  r;  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<    
rJ  c                 C   s   t ||d t| |||S r   )r'   r   Z
asinh_implr   r   r   r   np_real_asinh_implF  s    rK  c                 C   s   t ||d t| |||S r   )r'   r   Z
acosh_implr   r   r   r   np_real_acosh_implN  s    rL  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 )NrM   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,    

rM  c                 C   s   t ||d t| |||S r   )r'   r   Z
atanh_implr   r   r   r   np_real_atanh_implq  s    rN  c                 C   s   t ||d t|d|S )NrM   z
llvm.floorr   r   r   r   r   r   y  s    r   c                 C   s   t ||d t|d|S )NrM   z	llvm.ceilr   r   r   r   r   np_real_ceil_impl  s    rO  c                 C   s   t ||d t|d|S )NrM   z
llvm.truncr   r   r   r   r   np_real_trunc_impl  s    rP  c                 C   s   t ||d t|d|S )NrM   z	llvm.fabsr   r   r   r   r   np_real_fabs_impl  s    rQ  c                    s   t ||dtjd |jd  fdd|D \}}|j}|j}|j}|j}	 d||}
 d||	} d||} d	||	} |
|} ||} ||S )
NrK   r   r   c                    s   g | ]}j  |d qS r   rB   r   r+   r   r   r.     s     z&np_complex_ge_impl.<locals>.<listcomp>rP   ordrN   r   	r'   r   r   r   r   r   r   rV   rW   )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 )
NrK   rR  r   c                    s   g | ]}j  |d qS rS  rT  r   r+   r   r   r.     s     z&np_complex_le_impl.<locals>.<listcomp>r   rU  rN   r*  rV  )r-   r,   r#   r   r   r   r<  r=  rW  rX  xr_lt_yrrZ  r[  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 )	NrK   rR  r   c                    s   g | ]}j  |d qS rS  rT  r   r+   r   r   r.     s     z&np_complex_gt_impl.<locals>.<listcomp>rP   rU  rN   rV  )r-   r,   r#   r   r   r   r<  r=  rW  rX  rY  rZ  r[  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 )	NrK   rR  r   c                    s   g | ]}j  |d qS rS  rT  r   r+   r   r   r.     s     z&np_complex_lt_impl.<locals>.<listcomp>r   rU  rN   rV  )r-   r,   r#   r   r   r   r<  r=  rW  rX  r^  rZ  r[  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 )NrK   rR  r   c                    s   g | ]}j  |d qS rS  rT  r   r+   r   r   r.     s     z&np_complex_eq_impl.<locals>.<listcomp>rN   )r'   r   r   r   r   r   r   rV   )r-   r,   r#   r   r   r   r<  r=  rW  rX  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 )NrK   rR  r   c                    s   g | ]}j  |d qS rS  rT  r   r+   r   r   r.   
  s     z&np_complex_ne_impl.<locals>.<listcomp>rQ   )r'   r   r   r   r   r   fcmp_unorderedrW   )r-   r,   r#   r   r   r   r<  r=  rW  rX  Zxr_ne_yrZxi_ne_yir   r+   r   np_complex_ne_impl  s    
rb  c                 C   s8   | j |||d}t||j}t||j}|||S )Nr   )rB   r	   is_truer   r   rW   )r-   r,   r   valcomplex_valZre_trueZim_truer   r   r   _complex_is_true  s    rf  c                 C   s>   t ||dtjd t||d }t||d }|||S NrK   rR  r   rM   )r'   r   r   r	   rc  rV   r-   r,   r#   r   r   r   r   r   r   np_logical_and_impl"  s    ri  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rg  )r'   r   r   rf  r   rV   rh  r   r   r   np_complex_logical_and_impl)  s    rj  c                 C   s>   t ||dtjd t||d }t||d }|||S rg  )r'   r   r   r	   rc  rW   rh  r   r   r   np_logical_or_impl0  s    rk  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rg  )r'   r   r   rf  r   rW   rh  r   r   r   np_complex_logical_or_impl7  s    rl  c                 C   s>   t ||dtjd t||d }t||d }|||S rg  )r'   r   r   r	   rc  r\   rh  r   r   r   np_logical_xor_impl>  s    rm  c                 C   sN   t ||dtjd t| ||jd |d }t| ||jd |d }|||S rg  )r'   r   r   rf  r   r\   rh  r   r   r   np_complex_logical_xor_implE  s    rn  c                 C   s"   t ||dtjd t||d S NrM   rR  r   )r'   r   r   r	   Zis_falser   r   r   r   np_logical_not_implL  s    rp  c                 C   s4   t ||dtjd t| ||jd |d }||S ro  )r'   r   r   rf  r   not_)r-   r,   r#   r   r   r   r   r   np_complex_logical_not_implQ  s    rr  c                 C   s0   t ||d |\}}|d||}||||S NrK   r   r'   r[   r]   )r-   r,   r#   r   arg1arg2Zarg1_sge_arg2r   r   r   np_int_smax_impl`  s    rw  c                 C   s0   t ||d |\}}|d||}||||S rs  r'   rU   r]   )r-   r,   r#   r   ru  rv  Zarg1_uge_arg2r   r   r   np_int_umax_implg  s    ry  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S NrK   unor   r'   ra  r]   r   )r-   r,   r#   r   ru  rv  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 rz  r|  )r-   r,   r#   r   ru  rv  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 NrK   r   
r'   r   r   r   r   r   np_complex_isnan_implrW   r]   r   r-   r,   r#   r   r   bc_sigbcc_sigru  rv  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 NrK   r*  rt  )r-   r,   r#   r   ru  rv  Zarg1_sle_arg2r   r   r   np_int_smin_impl  s    r  c                 C   s0   t ||d |\}}|d||}||||S r  rx  )r-   r,   r#   r   ru  rv  Zarg1_ule_arg2r   r   r   np_int_umin_impl  s    r  c                 C   sh   t ||d |\}}|d||}|d||}||||}|d||}	||	||}
||||
S NrK   r{  r*  r|  r-   r,   r#   r   ru  rv  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  rW   r]   r_  r-   r,   r#   r   r   r  r  ru  rv  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 NrM   rR  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 ro  )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 NrM   rR  r   )r'   r   r   r   rB   r   r  r-   r,   r#   r   r   r   re  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 )NrM   rR  rQ   r   )r'   r   r   rU   r   NATr   r   r   r   np_datetime_isfinite_impl)  s    r  c                 C   s&   t ||dtjd |d|d tjS )NrM   rR  rN   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 ro  )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   rB   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 ro  )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   rB   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 )	NrM   rR  i   l        l            r   ZuintrQ   )r'   r   r   Zfloat16rR   Zuint16r   Zuint32r7   Zuint64r   getattrZbitwidthr>   rV   ZbitcastrU   rS   )
r-   r,   r#   r   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 )NrK   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 )NrM   r  r  r   zllvm.copysignr(   r  )r'   r   r   r7   r   r   r   r   rS   r   infr1   r2   r3   r	   r4   r/   r6   rJ   r   )r-   r,   r#   r   r   r   r   Zll_tyZll_infr:   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.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=   rJ   rp   ru   rz   r{   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  r0  r  r2  r3  r4  r5  r6  r  r  r7  rB  r9  rC  rD  rJ  rK  rL  rM  rN  r   rO  rP  rQ  r   r_  r`  r   r   rb  rf  ri  rj  rk  rl  rm  rn  rp  rr  rw  ry  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		 
*)				